|
|
@ -6,8 +6,11 @@ import cn.hutool.core.util.BooleanUtil; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import com.ccsens.common.bean.dto.CTaskDto; |
|
|
|
import com.ccsens.common.bean.message.TaskMessageWithStatus; |
|
|
|
import com.ccsens.common.bean.po.ProRole; |
|
|
|
import com.ccsens.common.bean.po.ProTaskProcess; |
|
|
|
import com.ccsens.common.bean.po.ProTaskStatusRecord; |
|
|
|
import com.ccsens.common.bean.po.ProTaskSub; |
|
|
|
import com.ccsens.common.bean.vo.CRoleVo; |
|
|
|
import com.ccsens.common.bean.vo.CTaskVo; |
|
|
|
import com.ccsens.common.persist.dao.*; |
|
|
|
import com.ccsens.common.persist.mapper.ProTaskStatusRecordMapper; |
|
|
@ -57,6 +60,8 @@ public class TaskService implements ITaskService { |
|
|
|
private ProTaskStatusRecordMapper taskStatusRecordMapper; |
|
|
|
@Resource |
|
|
|
private AmqpTemplate rabbitTemplate; |
|
|
|
@Resource |
|
|
|
private ProTaskProcessDao taskProcessDao; |
|
|
|
|
|
|
|
/** |
|
|
|
* 判断当前用户的角色是否被设置不可见(是否有权限查看任务) |
|
|
@ -192,7 +197,21 @@ public class TaskService implements ITaskService { |
|
|
|
if (BooleanUtil.isFalse(isLook)) { |
|
|
|
throw new BaseException(CommonCodeError.NOT_PERMISSION); |
|
|
|
} |
|
|
|
List<CTaskVo.QueryTask> permanentGlobalTask = taskDetailDao.queryPermanentGlobalTask(param.getRoleId()); |
|
|
|
//查询当前角色是否项目经理
|
|
|
|
List<Long> roleIds = new ArrayList<>(); |
|
|
|
List<CRoleVo.AllRole> roleList = roleDao.findAllRoleById(param.getRoleId()); |
|
|
|
if (CollectionUtil.isNotEmpty(roleList)){ |
|
|
|
List<CRoleVo.AllRole> roles = roleList.stream().filter(allRole -> allRole.getId().equals(param.getRoleId())).collect(Collectors.toList()); |
|
|
|
if (CollectionUtil.isNotEmpty(roles)){ |
|
|
|
if (Constant.ROLE_LEVEL.PM.value.equals(roles.get(0).getLevel())){ |
|
|
|
List<Long> allRoleId = roleList.stream().map(CRoleVo.AllRole::getId).collect(Collectors.toList()); |
|
|
|
roleIds.addAll(allRoleId); |
|
|
|
}else{ |
|
|
|
roleIds.add(param.getRoleId()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
List<CTaskVo.QueryTask> permanentGlobalTask = taskDetailDao.queryPermanentGlobalTask(roleIds); |
|
|
|
//查找项目面板和插件信息
|
|
|
|
queryPluginForTask(permanentGlobalTask); |
|
|
|
|
|
|
@ -206,7 +225,21 @@ public class TaskService implements ITaskService { |
|
|
|
if (BooleanUtil.isFalse(isLook)) { |
|
|
|
throw new BaseException(CommonCodeError.NOT_PERMISSION); |
|
|
|
} |
|
|
|
List<CTaskVo.QueryTask> globalTask = taskDetailDao.queryGlobalTask(param.getRoleId(), param.getTimeNode(), param.getTimeUnit()); |
|
|
|
//查询当前角色是否项目经理
|
|
|
|
List<Long> roleIds = new ArrayList<>(); |
|
|
|
List<CRoleVo.AllRole> roleList = roleDao.findAllRoleById(param.getRoleId()); |
|
|
|
if (CollectionUtil.isNotEmpty(roleList)){ |
|
|
|
List<CRoleVo.AllRole> roles = roleList.stream().filter(allRole -> allRole.getId().equals(param.getRoleId())).collect(Collectors.toList()); |
|
|
|
if (CollectionUtil.isNotEmpty(roles)){ |
|
|
|
if (Constant.ROLE_LEVEL.PM.value.equals(roles.get(0).getLevel())){ |
|
|
|
List<Long> allRoleId = roleList.stream().map(CRoleVo.AllRole::getId).collect(Collectors.toList()); |
|
|
|
roleIds.addAll(allRoleId); |
|
|
|
}else{ |
|
|
|
roleIds.add(param.getRoleId()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
List<CTaskVo.QueryTask> globalTask = taskDetailDao.queryGlobalTask(roleIds, param.getTimeNode(), param.getTimeUnit()); |
|
|
|
queryPluginForTask(globalTask); |
|
|
|
return globalTask; |
|
|
|
} |
|
|
@ -228,11 +261,25 @@ public class TaskService implements ITaskService { |
|
|
|
if (BooleanUtil.isFalse(isLook)) { |
|
|
|
throw new BaseException(CommonCodeError.NOT_PERMISSION); |
|
|
|
} |
|
|
|
//查询当前角色是否项目经理
|
|
|
|
List<Long> roleIds = new ArrayList<>(); |
|
|
|
List<CRoleVo.AllRole> roleList = roleDao.findAllRoleById(param.getRoleId()); |
|
|
|
if (CollectionUtil.isNotEmpty(roleList)){ |
|
|
|
List<CRoleVo.AllRole> roles = roleList.stream().filter(allRole -> allRole.getId().equals(param.getRoleId())).collect(Collectors.toList()); |
|
|
|
if (CollectionUtil.isNotEmpty(roles)){ |
|
|
|
if (Constant.ROLE_LEVEL.PM.value.equals(roles.get(0).getLevel())){ |
|
|
|
List<Long> allRoleId = roleList.stream().map(CRoleVo.AllRole::getId).collect(Collectors.toList()); |
|
|
|
roleIds.addAll(allRoleId); |
|
|
|
}else{ |
|
|
|
roleIds.add(param.getRoleId()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//TODO 季度未实现
|
|
|
|
List<CTaskVo.QueryTask> regularTask = taskDetailDao.queryRegularTask(param.getRoleId(), param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat); |
|
|
|
List<CTaskVo.QueryTask> regularTask = taskDetailDao.queryRegularTask(roleIds, param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat); |
|
|
|
//如果该时段没有任务向上或向下补充
|
|
|
|
if (CollectionUtil.isEmpty(regularTask)) { |
|
|
|
List<CTaskVo.QueryTask> replenishTask = taskDetailDao.continueQueryTask(param.getRoleId(), param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat); |
|
|
|
List<CTaskVo.QueryTask> replenishTask = taskDetailDao.continueQueryTask(roleIds, param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat); |
|
|
|
Map<String, List<CTaskVo.QueryTask>> taskMap = replenishTask.stream().collect(Collectors.groupingBy(task -> new SimpleDateFormat("yyyy-MM-dd").format(new Date(task.getPlanStart())))); |
|
|
|
List<String> mapOfKey = new ArrayList<>(); |
|
|
|
taskMap.forEach((key, val) -> mapOfKey.add(key)); |
|
|
@ -422,4 +469,70 @@ public class TaskService implements ITaskService { |
|
|
|
taskStatusRecord.setUpdateStatusTime(now); |
|
|
|
taskStatusRecordMapper.insertSelective(taskStatusRecord); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 修改任务的真实开始时间 |
|
|
|
* @param taskSubId 分解任务id |
|
|
|
* @param statusOfUpdate 修改的状态(0-开始时间,1-结束时间) |
|
|
|
*/ |
|
|
|
public void updateTaskStartTime(Long taskSubId,Byte statusOfUpdate){ |
|
|
|
ProTaskSub proTaskSub = taskSubDao.selectByPrimaryKey(taskSubId); |
|
|
|
if (ObjectUtil.isNull(proTaskSub)){ |
|
|
|
throw new BaseException(CommonCodeError.TASK_SUB_NOT_FOUND); |
|
|
|
} |
|
|
|
Long taskDetailId = proTaskSub.getTaskDetailId(); |
|
|
|
Long realTime = 0L; |
|
|
|
if (0 == statusOfUpdate){ |
|
|
|
realTime = proTaskSub.getRealStartTime(); |
|
|
|
|
|
|
|
} |
|
|
|
if (1 == statusOfUpdate){ |
|
|
|
realTime = proTaskSub.getRealEndTime(); |
|
|
|
} |
|
|
|
findNextTask(taskDetailId,statusOfUpdate,realTime,proTaskSub.getPlanStartTime()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* |
|
|
|
* @param taskDetailId 任务详情id |
|
|
|
* @param statusOfUpdate 开始还是结束 |
|
|
|
*/ |
|
|
|
private void findNextTask(Long taskDetailId,Byte statusOfUpdate,Long realTime,Long planTime){ |
|
|
|
List<ProTaskProcess> taskProcessList = taskProcessDao.findNextTaskByDetailId(taskDetailId,statusOfUpdate); |
|
|
|
if (CollectionUtil.isNotEmpty(taskProcessList)){ |
|
|
|
for (ProTaskProcess proTaskProcess : taskProcessList) { |
|
|
|
if (0 == statusOfUpdate){ |
|
|
|
Long oldPlanStartTime = 0L; |
|
|
|
ProTaskSub taskSub = taskSubDao.findNextTaskSub(proTaskProcess.getNextTaskDetailId(),planTime); |
|
|
|
if (1 == proTaskProcess.getProcessType()){ |
|
|
|
oldPlanStartTime = taskSub.getPlanStartTime(); |
|
|
|
taskSub.setPlanStartTime(realTime); |
|
|
|
taskSubDao.updateByPrimaryKeySelective(taskSub); |
|
|
|
} |
|
|
|
if (2 == proTaskProcess.getProcessType()){ |
|
|
|
oldPlanStartTime = taskSub.getPlanStartTime(); |
|
|
|
taskSub.setPlanStartTime(realTime+proTaskProcess.getTimeDifference()); |
|
|
|
taskSubDao.updateByPrimaryKeySelective(taskSub); |
|
|
|
} |
|
|
|
findNextTask(taskSub.getTaskDetailId(),statusOfUpdate,taskSub.getPlanStartTime(),oldPlanStartTime); |
|
|
|
} |
|
|
|
if (1 == statusOfUpdate){ |
|
|
|
Long oldPlanEndTime = 0L; |
|
|
|
ProTaskSub taskSub = taskSubDao.findNextTaskSub(proTaskProcess.getNextTaskDetailId(), planTime); |
|
|
|
if (4 == proTaskProcess.getProcessType()){ |
|
|
|
oldPlanEndTime = taskSub.getPlanEndTime(); |
|
|
|
taskSub.setPlanStartTime(realTime); |
|
|
|
taskSubDao.updateByPrimaryKeySelective(taskSub); |
|
|
|
} |
|
|
|
if (5 == proTaskProcess.getProcessType()){ |
|
|
|
oldPlanEndTime = taskSub.getPlanEndTime(); |
|
|
|
taskSub.setPlanStartTime(realTime+proTaskProcess.getTimeDifference()); |
|
|
|
taskSubDao.updateByPrimaryKeySelective(taskSub); |
|
|
|
} |
|
|
|
findNextTask(taskSub.getTaskDetailId(),statusOfUpdate,taskSub.getPlanEndTime(),oldPlanEndTime); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|