|
|
@ -4,9 +4,12 @@ import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import cn.hutool.core.lang.Snowflake; |
|
|
|
import cn.hutool.core.util.BooleanUtil; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
import com.ccsens.common.bean.dto.CTaskDto; |
|
|
|
import com.ccsens.common.bean.message.TaskMessageWithStatus; |
|
|
|
import com.ccsens.common.bean.po.*; |
|
|
|
import com.ccsens.common.bean.vo.CPluginVo; |
|
|
|
import com.ccsens.common.bean.vo.CProjectVo; |
|
|
|
import com.ccsens.common.bean.vo.CTaskVo; |
|
|
|
import com.ccsens.common.persist.dao.*; |
|
|
|
import com.ccsens.common.persist.mapper.ProTaskStatusRecordMapper; |
|
|
@ -16,6 +19,8 @@ import com.ccsens.util.JacksonUtil; |
|
|
|
import com.ccsens.util.bean.message.common.InMessage; |
|
|
|
import com.ccsens.util.bean.message.common.MessageConstant; |
|
|
|
import com.ccsens.util.config.RabbitMQConfig; |
|
|
|
import com.ccsens.util.cron.CronConstant; |
|
|
|
import com.ccsens.util.cron.NatureToDate; |
|
|
|
import com.ccsens.util.exception.BaseException; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.amqp.core.AmqpTemplate; |
|
|
@ -66,6 +71,8 @@ public class TaskService implements ITaskService { |
|
|
|
private ProParentTaskDao parentTaskDao; |
|
|
|
@Resource |
|
|
|
private ProRoleTaskDao roleTaskDao; |
|
|
|
@Resource |
|
|
|
private ProProjectDao proProjectDao; |
|
|
|
|
|
|
|
/** |
|
|
|
* 判断当前用户的角色是否被设置不可见(是否有权限查看任务) |
|
|
@ -629,6 +636,12 @@ public class TaskService implements ITaskService { |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CTaskVo.QueryTask> saveTask(CTaskDto.SaveTask param, Long userId) { |
|
|
|
//根据项目id查找项目基本信息(id 名称 开始结束时间)
|
|
|
|
CProjectVo.ProjectInfo projectById = proProjectDao.findProjectById(param.getProjectId()); |
|
|
|
if (ObjectUtil.isNull(projectById)){ |
|
|
|
throw new BaseException(CommonCodeError.PROJECT_NOT_FOUND); |
|
|
|
} |
|
|
|
|
|
|
|
//任务详情
|
|
|
|
ProTaskDetail proTaskDetail = new ProTaskDetail(); |
|
|
|
proTaskDetail.setId(snowflake.nextId()); |
|
|
@ -636,15 +649,7 @@ public class TaskService implements ITaskService { |
|
|
|
proTaskDetail.setDescription(param.getDescription()); |
|
|
|
taskDetailDao.insertSelective(proTaskDetail); |
|
|
|
//任务分解信息
|
|
|
|
ProTaskSub taskSub = new ProTaskSub(); |
|
|
|
taskSub.setId(snowflake.nextId()); |
|
|
|
taskSub.setTaskDetailId(proTaskDetail.getId()); |
|
|
|
if (ObjectUtil.isNotNull(param.getStartTime()) && ObjectUtil.isNotNull(param.getEndTime())) { |
|
|
|
taskSub.setPlanStartTime(param.getStartTime()); |
|
|
|
taskSub.setPlanEndTime(param.getEndTime()); |
|
|
|
taskSub.setPlanDuration(param.getEndTime() - param.getStartTime()); |
|
|
|
} |
|
|
|
taskSubDao.insertSelective(taskSub); |
|
|
|
saveSubTask(param.getSpecialTime(), proTaskDetail.getId(), param.getStartTime(), param.getEndTime(), projectById); |
|
|
|
//任务添加标签(天,普通/日常任务)
|
|
|
|
//天
|
|
|
|
Long labelOfDay = labelDao.getLabelByTypeAndLevel(0, 4); |
|
|
@ -673,28 +678,13 @@ public class TaskService implements ITaskService { |
|
|
|
proParentTask.setTaskDetailId(proTaskDetail.getId()); |
|
|
|
parentTaskDao.insertSelective(proParentTask); |
|
|
|
} |
|
|
|
//角色任务关联表(负责人)
|
|
|
|
//添加负责人
|
|
|
|
if (CollectionUtil.isNotEmpty(param.getRoleIdList())) { |
|
|
|
for (Long roleId : param.getRoleIdList()) { |
|
|
|
ProRoleTask roleTask = new ProRoleTask(); |
|
|
|
roleTask.setId(snowflake.nextId()); |
|
|
|
roleTask.setRoleId(roleId); |
|
|
|
roleTask.setTaskId(proTaskDetail.getId()); |
|
|
|
roleTask.setOperator(userId); |
|
|
|
roleTaskDao.insertSelective(roleTask); |
|
|
|
} |
|
|
|
saveTaskRole(param.getRoleIdList(), userId, proTaskDetail.getId(), (byte) 0); |
|
|
|
} |
|
|
|
//TODO 检查人(待定)
|
|
|
|
//检查人
|
|
|
|
if (CollectionUtil.isNotEmpty(param.getCheckerIdList())) { |
|
|
|
for (Long checkId : param.getCheckerIdList()) { |
|
|
|
ProRoleTask roleTask = new ProRoleTask(); |
|
|
|
roleTask.setId(snowflake.nextId()); |
|
|
|
roleTask.setRoleId(checkId); |
|
|
|
roleTask.setTaskId(proTaskDetail.getId()); |
|
|
|
roleTask.setRoleDuty((byte)1); |
|
|
|
roleTask.setOperator(userId); |
|
|
|
roleTaskDao.insertSelective(roleTask); |
|
|
|
} |
|
|
|
saveTaskRole(param.getCheckerIdList(), userId, proTaskDetail.getId(), (byte) 1); |
|
|
|
} |
|
|
|
//上下道工序
|
|
|
|
if (ObjectUtil.isNotNull(param.getProcessTaskId())) { |
|
|
@ -725,9 +715,139 @@ public class TaskService implements ITaskService { |
|
|
|
return taskList; |
|
|
|
} |
|
|
|
|
|
|
|
private void saveTaskRole(List<Long> roleIdList, Long userId, Long taskDetailId, byte roleDuty) { |
|
|
|
//角色任务关联表
|
|
|
|
for (Long roleId : roleIdList) { |
|
|
|
ProRoleTask roleTask = new ProRoleTask(); |
|
|
|
roleTask.setId(snowflake.nextId()); |
|
|
|
roleTask.setRoleId(roleId); |
|
|
|
roleTask.setTaskId(taskDetailId); |
|
|
|
roleTask.setRoleDuty(roleDuty); |
|
|
|
roleTask.setOperator(userId); |
|
|
|
roleTaskDao.insertSelective(roleTask); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void saveSubTask(String specialTime, Long taskDetailId, Long startTime, Long endTime, CProjectVo.ProjectInfo projectById) { |
|
|
|
if(StrUtil.isBlank(specialTime)) { |
|
|
|
ProTaskSub taskSub = new ProTaskSub(); |
|
|
|
taskSub.setId(snowflake.nextId()); |
|
|
|
taskSub.setTaskDetailId(taskDetailId); |
|
|
|
if (ObjectUtil.isNotNull(startTime) && ObjectUtil.isNotNull(endTime)) { |
|
|
|
taskSub.setPlanStartTime(startTime); |
|
|
|
taskSub.setPlanEndTime(endTime); |
|
|
|
taskSub.setPlanDuration(endTime - startTime); |
|
|
|
} |
|
|
|
taskSubDao.insertSelective(taskSub); |
|
|
|
}else { |
|
|
|
Date startDate = new Date(projectById.getPlanStartTime()); |
|
|
|
Date endDate = new Date(projectById.getPlanEndTime()); |
|
|
|
try { |
|
|
|
List<CronConstant.TaskDate> taskDateList = |
|
|
|
NatureToDate.generateDates(specialTime, startDate, endDate); |
|
|
|
if (CollectionUtil.isNotEmpty(taskDateList)) { |
|
|
|
List<ProTaskSub> proTaskSubList = new ArrayList<>(); |
|
|
|
for (CronConstant.TaskDate taskDate : taskDateList) { |
|
|
|
|
|
|
|
ProTaskSub proTaskSub = new ProTaskSub(); |
|
|
|
proTaskSub.setId(snowflake.nextId()); |
|
|
|
proTaskSub.setTaskDetailId(taskDetailId); |
|
|
|
proTaskSub.setPlanStartTime(taskDate.getStartDate().getTime()); |
|
|
|
proTaskSub.setPlanEndTime(taskDate.getEndDate().getTime()); |
|
|
|
proTaskSub.setPlanDuration(proTaskSub.getPlanEndTime() - proTaskSub.getPlanStartTime()); |
|
|
|
proTaskSubList.add(proTaskSub); |
|
|
|
} |
|
|
|
if(CollectionUtil.isNotEmpty(proTaskSubList)){ |
|
|
|
taskSubDao.insertAllTaskSub(proTaskSubList); |
|
|
|
} |
|
|
|
} |
|
|
|
}catch (Exception e1){ |
|
|
|
throw new BaseException(String.valueOf(e1)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CTaskVo.TaskOfProject> queryTaskOfProject(CTaskDto.QueryTaskOfProject param, Long userId) { |
|
|
|
return taskDetailDao.queryTaskOfProject(param); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateTaskDetail(CTaskDto.UpdateTask param, Long userId) { |
|
|
|
//查找分解任务信息
|
|
|
|
ProTaskSub taskSub = taskSubDao.selectByPrimaryKey(param.getId()); |
|
|
|
if (ObjectUtil.isNull(taskSub)) { |
|
|
|
throw new BaseException(CommonCodeError.NOT_TASK); |
|
|
|
} |
|
|
|
//查找任务详情信息
|
|
|
|
ProTaskDetail proTaskDetail = taskDetailDao.selectByPrimaryKey(taskSub.getTaskDetailId()); |
|
|
|
if (ObjectUtil.isNull(proTaskDetail)) { |
|
|
|
throw new BaseException(CommonCodeError.NOT_TASK); |
|
|
|
} |
|
|
|
//查找项目信息
|
|
|
|
CProjectVo.ProjectInfo projectById = proProjectDao.findProjectById(param.getProjectId()); |
|
|
|
if (ObjectUtil.isNull(projectById)){ |
|
|
|
throw new BaseException(CommonCodeError.PROJECT_NOT_FOUND); |
|
|
|
} |
|
|
|
//修改任务信息
|
|
|
|
if(StrUtil.isNotBlank(param.getName())){ |
|
|
|
proTaskDetail.setName(param.getName()); |
|
|
|
} |
|
|
|
if(StrUtil.isNotBlank(param.getDescription())){ |
|
|
|
proTaskDetail.setDescription(param.getDescription()); |
|
|
|
} |
|
|
|
if(StrUtil.isNotBlank(param.getSpecialTime())){ |
|
|
|
proTaskDetail.setCycle(param.getSpecialTime()); |
|
|
|
} |
|
|
|
taskDetailDao.updateByPrimaryKeySelective(proTaskDetail); |
|
|
|
//如果时间发生了改变。将之前的分解任务全部删除,重新添加
|
|
|
|
if(StrUtil.isNotBlank(param.getSpecialTime()) || (ObjectUtil.isNotNull(param.getStartTime()) && ObjectUtil.isNotNull(param.getEndTime()))){ |
|
|
|
//删除以前的分解任务
|
|
|
|
taskSubDao.deleteOldSubTask(taskSub.getTaskDetailId()); |
|
|
|
//添加新的分解任务
|
|
|
|
saveSubTask(param.getSpecialTime(),proTaskDetail.getId(),param.getStartTime(),param.getEndTime(),projectById); |
|
|
|
} |
|
|
|
//TODO 删除任务之前的任务类型的标签,重新添加
|
|
|
|
|
|
|
|
if(CollectionUtil.isNotEmpty(param.getRoleIdList())){ |
|
|
|
//删除旧的负责人
|
|
|
|
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)0); |
|
|
|
//添加新的负责人
|
|
|
|
saveTaskRole(param.getCheckerIdList(), userId, proTaskDetail.getId(), (byte) 0); |
|
|
|
} |
|
|
|
if(CollectionUtil.isNotEmpty(param.getRoleIdList())){ |
|
|
|
//删除旧的检查人
|
|
|
|
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)1); |
|
|
|
//添加新的检查人
|
|
|
|
saveTaskRole(param.getCheckerIdList(), userId, proTaskDetail.getId(), (byte) 1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void deleteTaskDetail(CTaskDto.FindSonTask param, Long userId) { |
|
|
|
//查找任务详情信息
|
|
|
|
ProTaskDetail proTaskDetail = taskDetailDao.selectByPrimaryKey(param.getDetailId()); |
|
|
|
if (ObjectUtil.isNull(proTaskDetail)) { |
|
|
|
throw new BaseException(CommonCodeError.NOT_TASK); |
|
|
|
} |
|
|
|
//删除任务详情
|
|
|
|
proTaskDetail.setRecStatus((byte) 2); |
|
|
|
taskDetailDao.updateByPrimaryKeySelective(proTaskDetail); |
|
|
|
//删除任务分解信息
|
|
|
|
taskSubDao.deleteOldSubTask(proTaskDetail.getId()); |
|
|
|
//删除任务角色关联信息
|
|
|
|
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)0); |
|
|
|
roleTaskDao.delByTaskDetailIdAndType(proTaskDetail.getId(), (byte)1); |
|
|
|
//删除任务标签信息
|
|
|
|
labelDao.delByBusinessIdAndType(proTaskDetail.getId(),(byte)0); |
|
|
|
|
|
|
|
//TODO 删除任务上下级关系
|
|
|
|
//TODO 删除任务流转信息
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CPluginVo.TaskPlugin> queryPluginByTaskId(CTaskDto.FindSonTask param, Long userId) { |
|
|
|
|
|
|
|
return null; |
|
|
|
} |
|
|
|
} |