|
|
@@ -113,11 +113,18 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
if (StringUtil.isNotEmpty(req.getProjectName())) {
|
|
|
queryWrapper.like(CostProjectTask::getProjectName, req.getProjectName());
|
|
|
}
|
|
|
+ if (StringUtil.isNotEmpty(req.getAuditedUnitName())) {
|
|
|
+ queryWrapper.like(CostProjectTask::getAuditedUnitName, req.getAuditedUnitName());
|
|
|
+ }
|
|
|
if (StringUtil.isNotEmpty(req.getStatus())) {
|
|
|
queryWrapper.eq(CostProjectTask::getStatus, req.getStatus());
|
|
|
}
|
|
|
if (StringUtil.isNotEmpty(req.getCurrentNode())) {
|
|
|
+ // 如果指定了节点,按节点查询
|
|
|
queryWrapper.eq(CostProjectTask::getCurrentNode, req.getCurrentNode());
|
|
|
+ } else {
|
|
|
+ // 如果没有指定节点,默认排除归档节点(待审核列表)
|
|
|
+ queryWrapper.ne(CostProjectTask::getCurrentNode, NodeConstant.guidang.getNodeKey());
|
|
|
}
|
|
|
|
|
|
// 按创建时间倒序排列
|
|
|
@@ -147,13 +154,84 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional
|
|
|
- public void createOrUpdate(CostProjectTask costProjectTask) {
|
|
|
- //新建或更新
|
|
|
- this.saveOrUpdate(costProjectTask);
|
|
|
+ public IPage<CostProjectTask> pageListForArchive(CostTaskReviewPageReq req) {
|
|
|
+ // 获取当前用户
|
|
|
+ IUser currentUser = ContextUtil.getCurrentUser();
|
|
|
+ String currentUserId = currentUser.getUserId();
|
|
|
+
|
|
|
+ // 1. 先查询当前用户有权限的立项(负责人或项目组成员)
|
|
|
+ LambdaQueryWrapper<CostProjectApproval> approvalQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ approvalQueryWrapper.eq(CostProjectApproval::getIsDeleted, "0");
|
|
|
+ approvalQueryWrapper.and(wrapper -> wrapper
|
|
|
+ .eq(CostProjectApproval::getLeaderId, currentUserId)
|
|
|
+ .or(projectMembersWrapper -> {
|
|
|
+ projectMembersWrapper.like(CostProjectApproval::getProjectMembers, currentUserId);
|
|
|
+ })
|
|
|
+ );
|
|
|
+
|
|
|
+ List<CostProjectApproval> accessibleApprovals = costProjectApprovalManager.list(approvalQueryWrapper);
|
|
|
+
|
|
|
+ // 如果没有权限的立项,返回空结果
|
|
|
+ if (accessibleApprovals.isEmpty()) {
|
|
|
+ return new Page<>(req.getPageNum(), req.getPageSize());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取有权限的立项ID列表
|
|
|
+ List<String> accessibleProjectIds = accessibleApprovals.stream()
|
|
|
+ .map(CostProjectApproval::getProjectId)
|
|
|
+ .distinct()
|
|
|
+ .collect(java.util.stream.Collectors.toList());
|
|
|
+
|
|
|
+ // 2. 构建任务查询条件
|
|
|
+ LambdaQueryWrapper<CostProjectTask> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+
|
|
|
+ // 查询未删除的记录
|
|
|
+ queryWrapper.eq(CostProjectTask::getIsDeleted, "0");
|
|
|
+
|
|
|
+ // 查询主任务(pid为0)
|
|
|
+ queryWrapper.eq(CostProjectTask::getPid, "0");
|
|
|
+
|
|
|
+ // 只查询当前用户有权限的立项对应的任务
|
|
|
+ queryWrapper.in(CostProjectTask::getProjectId, accessibleProjectIds);
|
|
|
+
|
|
|
+ // 根据请求参数添加查询条件
|
|
|
+ if (StringUtil.isNotEmpty(req.getProjectName())) {
|
|
|
+ queryWrapper.like(CostProjectTask::getProjectName, req.getProjectName());
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotEmpty(req.getAuditedUnitName())) {
|
|
|
+ queryWrapper.like(CostProjectTask::getAuditedUnitName, req.getAuditedUnitName());
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotEmpty(req.getStatus())) {
|
|
|
+ queryWrapper.eq(CostProjectTask::getStatus, req.getStatus());
|
|
|
+ }
|
|
|
+ // 根据是否归档字段过滤
|
|
|
+ if (StringUtil.isNotEmpty(req.getIsGd())) {
|
|
|
+ queryWrapper.eq(CostProjectTask::getIsGd, req.getIsGd());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按创建时间倒序排列
|
|
|
+ queryWrapper.orderByDesc(CostProjectTask::getCreateTime);
|
|
|
+
|
|
|
+ // 创建分页对象并执行查询
|
|
|
+ Page<CostProjectTask> page = new Page<>(req.getPageNum(), req.getPageSize());
|
|
|
+ IPage<CostProjectTask> result = costProjectTaskManager.page(page, queryWrapper);
|
|
|
+
|
|
|
+ // 只填充节点名称,不查询子任务
|
|
|
+ for (CostProjectTask rootTask : result.getRecords()) {
|
|
|
+ rootTask.setCurrentNodeName(NodeConstant.getNodeValueByKey(rootTask.getCurrentNode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public void createOrUpdate(CostProjectTask costProjectTask) {
|
|
|
+ //新建或更新
|
|
|
+ this.saveOrUpdate(costProjectTask);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
@Transactional
|
|
|
public String saveTask(CostTaskPageReq costTaskPageReq) {
|
|
|
// 1.校验内容是否填写完毕!todo
|
|
|
@@ -187,9 +265,9 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
|
|
|
return "意见反馈完成";
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
+ @Override
|
|
|
public String doProcessBtn(CostTaskPageReq req) {
|
|
|
|
|
|
CostProjectTask task = costProjectTaskManager.getById(req.getTaskId());
|
|
|
@@ -211,6 +289,14 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
// 退回
|
|
|
resultMessage = returnToSubmit(task,req);
|
|
|
break;
|
|
|
+ case "6":
|
|
|
+ // 退回上一步
|
|
|
+ resultMessage = backPreToSubmit(task,req);
|
|
|
+ break;
|
|
|
+ case "7":
|
|
|
+ // 扭转下一步
|
|
|
+ resultMessage = toNextSubmit(task,req);
|
|
|
+ break;
|
|
|
default:
|
|
|
return "未知的操作类型";
|
|
|
}
|
|
|
@@ -218,30 +304,75 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 通过,只修改状态,节点变化需要等待所有子任务完成。
|
|
|
+ * 通过,填写原因 修改状态
|
|
|
*/
|
|
|
private String completeTask(CostProjectTask task) {
|
|
|
+ CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
|
|
|
NodeConstant nextNode = NodeConstant.getNextNode(task.getCurrentNode());
|
|
|
- if (nextNode == null){
|
|
|
- return "当前节点无法通过";
|
|
|
+ if (nTask == null){
|
|
|
+ return "任务不存在";
|
|
|
}
|
|
|
- // 将当前任务置为办结
|
|
|
- String nextNodeStatus = nextNode.getNodeKey();
|
|
|
- task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
|
|
|
- task.setCurrentNode(nextNodeStatus);
|
|
|
- costProjectTaskManager.updateById(task);
|
|
|
+ if (!nTask.getPid().equals("0") ) {
|
|
|
+ // 将当前任务置为办结
|
|
|
+ String nextNodeStatus = nextNode.getNodeKey();
|
|
|
+ task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
|
|
|
+ task.setCurrentNode(nextNodeStatus);
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
+ // 如果所有子任务都办结,则将父子任务都扭转
|
|
|
+ List<CostProjectTask> children = costProjectTaskManager.list(
|
|
|
+ new LambdaQueryWrapper<CostProjectTask>()
|
|
|
+ .eq(CostProjectTask::getPid, nTask.getPid())
|
|
|
+ );
|
|
|
+ boolean b = children.stream().allMatch(child ->
|
|
|
+ child.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode()));
|
|
|
+ if(b){
|
|
|
+ CostProjectTask pNtask = costProjectTaskManager.getById(nTask.getPid());
|
|
|
+ pNtask.setStatus(TaskStatusConstant.AUDITING.getStatusCode());
|
|
|
+ pNtask.setCurrentNode(nextNodeStatus);
|
|
|
+ costProjectTaskManager.updateById(pNtask);
|
|
|
+ String status = "";
|
|
|
+ switch (pNtask.getCurrentNode()){
|
|
|
+ case "yjfk":
|
|
|
+ status = TaskStatusConstant.WAIT_FEEDBACK.getStatusCode();
|
|
|
+ break;
|
|
|
+ case "jtsy":
|
|
|
+ status = TaskStatusConstant.COMPLETED.getStatusCode();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ status = TaskStatusConstant.AUDITING.getStatusCode();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ for (CostProjectTask child : children) {
|
|
|
+ child.setStatus(status);
|
|
|
+ child.setCurrentNode(nextNodeStatus);
|
|
|
+ costProjectTaskManager.updateById(child);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果下一个节点是"意见告知",生成空的初步意见数据
|
|
|
+ if (NodeConstant.yjfk.getNodeKey().equals(nextNodeStatus)) {
|
|
|
+ // 检查是否已存在初步意见
|
|
|
+ CostProjectTaskPreliminaryOpinion existingOpinion = preliminaryOpinionManager.getByTaskId(task.getId());
|
|
|
+ if (existingOpinion == null) {
|
|
|
+ CostProjectTaskPreliminaryOpinion preliminaryOpinion = new CostProjectTaskPreliminaryOpinion();
|
|
|
+ preliminaryOpinion.setTaskId(task.getId());
|
|
|
+ preliminaryOpinion.setStatus("draft");
|
|
|
+ preliminaryOpinion.setIsDeleted(BaseConstant.NORMAL_STATUS);
|
|
|
+ preliminaryOpinionManager.createOrUpdate(preliminaryOpinion);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // 如果下一个节点是"意见告知",生成空的初步意见数据
|
|
|
- if (NodeConstant.yjfk.getNodeKey().equals(nextNodeStatus)) {
|
|
|
- // 检查是否已存在初步意见
|
|
|
- CostProjectTaskPreliminaryOpinion existingOpinion = preliminaryOpinionManager.getByTaskId(task.getId());
|
|
|
- if (existingOpinion == null) {
|
|
|
- CostProjectTaskPreliminaryOpinion preliminaryOpinion = new CostProjectTaskPreliminaryOpinion();
|
|
|
- preliminaryOpinion.setTaskId(task.getId());
|
|
|
- preliminaryOpinion.setStatus("draft");
|
|
|
- preliminaryOpinion.setIsDeleted(BaseConstant.NORMAL_STATUS);
|
|
|
- preliminaryOpinionManager.createOrUpdate(preliminaryOpinion);
|
|
|
+ }else{
|
|
|
+ List<CostProjectTask> children = costProjectTaskManager.list(
|
|
|
+ new LambdaQueryWrapper<CostProjectTask>()
|
|
|
+ .eq(CostProjectTask::getPid, nTask.getId())
|
|
|
+ );
|
|
|
+ boolean b = children.stream().allMatch(child ->
|
|
|
+ child.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode()));
|
|
|
+ if (!b) {
|
|
|
+ throw new RuntimeException("子任务未全部办结,主任务无法办结");
|
|
|
}
|
|
|
+ task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
}
|
|
|
|
|
|
// 发送通知
|
|
|
@@ -255,74 +386,123 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
costNoticeManager.sendNotice(task.getProjectId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
|
|
|
|
|
|
+ return title;
|
|
|
+ }
|
|
|
|
|
|
- // 检查同一父任务下是否所有子任务均已办结;若是,父任务节点流转
|
|
|
- List<CostProjectTask> siblingTasks = costProjectTaskManager.list(
|
|
|
- new LambdaQueryWrapper<CostProjectTask>()
|
|
|
- .eq(CostProjectTask::getPid, task.getPid())
|
|
|
- .eq(CostProjectTask::getIsDeleted, "0")
|
|
|
- );
|
|
|
-
|
|
|
- boolean allSiblingsCompleted = siblingTasks.stream()
|
|
|
- .allMatch(s -> TaskStatusConstant.COMPLETED.getStatusCode().equals(s.getStatus()));
|
|
|
-
|
|
|
- if (allSiblingsCompleted) {
|
|
|
- CostProjectTask parentTask = costProjectTaskManager.getById(task.getPid());
|
|
|
- if (parentTask != null) {
|
|
|
- // 将父任务流转到下一步 重置所有子任务状态 意见反馈为待反馈 其它为审核中
|
|
|
- parentTask.setCurrentNode(nextNodeStatus);
|
|
|
- costProjectTaskManager.updateById(parentTask);
|
|
|
- List<CostProjectTask> children = costProjectTaskManager.list(
|
|
|
- new LambdaQueryWrapper<CostProjectTask>()
|
|
|
- .eq(CostProjectTask::getPid, parentTask.getId())
|
|
|
- .eq(CostProjectTask::getIsDeleted, "0")
|
|
|
- );
|
|
|
- boolean c = nextNodeStatus.equals(NodeConstant.yjfk.getNodeKey());
|
|
|
- for (CostProjectTask child : children) {
|
|
|
- child.setStatus(c?TaskStatusConstant.WAIT_FEEDBACK.getStatusCode():TaskStatusConstant.AUDITING.getStatusCode());
|
|
|
- costProjectTaskManager.updateById(child);
|
|
|
- }
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 退回,填写原因 修改状态
|
|
|
+ */
|
|
|
+ private String returnToSubmit(CostProjectTask task,CostTaskPageReq req) {
|
|
|
+ switch (req.getProcessNodeKey()){
|
|
|
+ case "sdsh":
|
|
|
+ throw new RuntimeException("当前节点无法退回");
|
|
|
+ default:
|
|
|
+ // 通知内容组装
|
|
|
+ String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"退回";
|
|
|
+ String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
|
|
|
+ String noticeSource = "系统";
|
|
|
+ String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
+ costNoticeManager.sendNotice(task.getProjectId(), "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
|
|
|
+
|
|
|
+ // 更新任务的当前节点和状态
|
|
|
+ task.setStatus(TaskStatusConstant.NOT_PASSED.getStatusCode());
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
+
|
|
|
+ return title;
|
|
|
}
|
|
|
|
|
|
- return title;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 退回,填写退回原因 修改状态
|
|
|
+ * 中止,填写原因 修改状态
|
|
|
*/
|
|
|
- private String returnToSubmit(CostProjectTask task,CostTaskPageReq req) {
|
|
|
+ private String suspendTask(CostProjectTask task,CostTaskPageReq req) {
|
|
|
+
|
|
|
+ // 更新任务状态为中止/恢复
|
|
|
+ String status = req.getStatus()==null ? TaskStatusConstant.SUSPENDED.getStatusCode() :TaskStatusConstant.AUDITING.getStatusCode();
|
|
|
+ task.setStatus(status);
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
|
|
|
// 通知内容组装
|
|
|
- String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"退回";
|
|
|
+ String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+TaskStatusConstant.getStatusNameByCode(status);
|
|
|
String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
|
|
|
String noticeSource = "系统";
|
|
|
String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
costNoticeManager.sendNotice(task.getProjectId(), "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
|
|
|
|
|
|
- // 更新任务的当前节点和状态
|
|
|
- task.setStatus(TaskStatusConstant.NOT_PASSED.getStatusCode());
|
|
|
+ return title;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 补充材料,发送通知+修改任务状态
|
|
|
+ */
|
|
|
+ private String supplementMaterial(CostProjectTask task, CostTaskPageReq req) {
|
|
|
+
|
|
|
+ // 更新任务状态为
|
|
|
+ task.setStatus(TaskStatusConstant.BCCL.getStatusCode());
|
|
|
costProjectTaskManager.updateById(task);
|
|
|
|
|
|
+ // 通知内容组装
|
|
|
+ String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+TaskStatusConstant.BCCL.getStatusName();
|
|
|
+ String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
|
|
|
+ String noticeSource = "系统";
|
|
|
+ String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
+ costNoticeManager.sendNotice(task.getProjectId(), "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
|
|
|
+
|
|
|
return title;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 中止,填写中止原因 修改状态
|
|
|
+ * 退回上一步,填写原因 修改状态和节点
|
|
|
*/
|
|
|
- private String suspendTask(CostProjectTask task,CostTaskPageReq req) {
|
|
|
- NodeConstant nextNode = NodeConstant.getNextNode(task.getCurrentNode());
|
|
|
- if (nextNode == null){
|
|
|
- return "当前节点无法通过";
|
|
|
+ private String backPreToSubmit(CostProjectTask task,CostTaskPageReq req) {
|
|
|
+ CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
|
|
|
+ if (nTask == null || !nTask.getPid().equals("0") ){
|
|
|
+ throw new RuntimeException("当前节点无法退回");
|
|
|
}
|
|
|
|
|
|
- // 更新任务状态为中止/恢复
|
|
|
- String status = req.getStatus()==null ? TaskStatusConstant.SUSPENDED.getStatusCode() :TaskStatusConstant.AUDITING.getStatusCode();
|
|
|
- task.setStatus(status);
|
|
|
- costProjectTaskManager.updateById(task);
|
|
|
+ // 获取退回后的上一节点
|
|
|
+ NodeConstant prevNode = NodeConstant.getPrevNode(nTask.getCurrentNode());
|
|
|
+ if (prevNode == null) {
|
|
|
+ throw new RuntimeException("当前节点已是第一步,无法退回");
|
|
|
+ }
|
|
|
+ String prevNodeStatus = prevNode.getNodeKey();
|
|
|
+
|
|
|
+ // 主任务退回上一步
|
|
|
+ nTask.setStatus(TaskStatusConstant.AUDITING.getStatusCode());
|
|
|
+ nTask.setCurrentNode(prevNodeStatus);
|
|
|
+ costProjectTaskManager.updateById(nTask);
|
|
|
+
|
|
|
+ // 子任务都要退回,并根据退回后的节点设置正确的状态
|
|
|
+ List<CostProjectTask> children = costProjectTaskManager.list(
|
|
|
+ new LambdaQueryWrapper<CostProjectTask>()
|
|
|
+ .eq(CostProjectTask::getPid, nTask.getId())
|
|
|
+ .eq(CostProjectTask::getIsDeleted, "0")
|
|
|
+ );
|
|
|
+
|
|
|
+ // 根据退回后的节点,设置子任务状态(参考completeTask的逻辑)
|
|
|
+ String childStatus = "";
|
|
|
+ switch (prevNodeStatus) {
|
|
|
+ case "yjfk":
|
|
|
+ childStatus = TaskStatusConstant.WAIT_FEEDBACK.getStatusCode();
|
|
|
+ break;
|
|
|
+ case "cjbg":
|
|
|
+ case "jtsy":
|
|
|
+ childStatus = TaskStatusConstant.COMPLETED.getStatusCode();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ childStatus = TaskStatusConstant.AUDITING.getStatusCode();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (CostProjectTask child : children) {
|
|
|
+ child.setStatus(childStatus);
|
|
|
+ child.setCurrentNode(prevNodeStatus);
|
|
|
+ costProjectTaskManager.updateById(child);
|
|
|
+ }
|
|
|
|
|
|
// 通知内容组装
|
|
|
- String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+TaskStatusConstant.getStatusNameByCode(status);
|
|
|
+ String title = NodeConstant.getNodeValueByKey(prevNodeStatus)+"退回上一步";
|
|
|
String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
|
|
|
String noticeSource = "系统";
|
|
|
String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
@@ -332,17 +512,45 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 补充材料,仅发送通知,不修改任务状态或节点
|
|
|
+ * 扭转下一步,填写原因 修改状态和节点
|
|
|
*/
|
|
|
- private String supplementMaterial(CostProjectTask task, CostTaskPageReq req) {
|
|
|
+ private String toNextSubmit(CostProjectTask task,CostTaskPageReq req) {
|
|
|
+ CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
|
|
|
+ if (nTask == null || !nTask.getPid().equals("0")){
|
|
|
+ throw new RuntimeException("当前节点无法扭转");
|
|
|
+ }
|
|
|
+ if (!task.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode())){
|
|
|
+ throw new RuntimeException("请办结任务后,在进行扭转下一步");
|
|
|
+ }
|
|
|
+ // 子任务都办结才可以扭转
|
|
|
+ List<CostProjectTask> children = costProjectTaskManager.list(
|
|
|
+ new LambdaQueryWrapper<CostProjectTask>()
|
|
|
+ .eq(CostProjectTask::getPid, nTask.getId())
|
|
|
+ );
|
|
|
+ boolean b = children.stream().allMatch(
|
|
|
+ child -> child.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode()));
|
|
|
+ if (!b){
|
|
|
+ throw new RuntimeException("子任务未全部办结,主任务无法扭转");
|
|
|
+ }
|
|
|
+ // 主任务扭转下一步
|
|
|
+ String nextNodeKey = NodeConstant.getNextNode(nTask.getCurrentNode()).getNodeKey();
|
|
|
+ nTask.setStatus(TaskStatusConstant.AUDITING.getStatusCode());
|
|
|
+ nTask.setCurrentNode(nextNodeKey);
|
|
|
+ costProjectTaskManager.updateById(nTask);
|
|
|
+ for (CostProjectTask child : children) {
|
|
|
+ child.setCurrentNode(nextNodeKey);
|
|
|
+ costProjectTaskManager.updateById(child);
|
|
|
+ }
|
|
|
// 通知内容组装
|
|
|
- String title = "补充材料通知";
|
|
|
+ String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"扭转至下一步";
|
|
|
String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
|
|
|
String noticeSource = "系统";
|
|
|
String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
costNoticeManager.sendNotice(task.getProjectId(), "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
|
|
|
|
|
|
- return "补充材料通知已发送";
|
|
|
+ return title;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
}
|