|
|
@@ -7,16 +7,16 @@ import com.hotent.base.annotation.ApiGroup;
|
|
|
import com.hotent.base.constants.ApiGroupConsts;
|
|
|
import com.hotent.base.model.CommonResult;
|
|
|
import com.hotent.base.util.StringUtil;
|
|
|
+import com.hotent.constant.BaseConstant;
|
|
|
import com.hotent.constant.NodeConstant;
|
|
|
import com.hotent.constant.TaskStatusConstant;
|
|
|
import com.hotent.enterpriseDeclare.req.CostTaskPageReq;
|
|
|
import com.hotent.enterpriseDeclare.req.CostTaskReviewPageReq;
|
|
|
-import com.hotent.project.manager.CostProjectApprovalManager;
|
|
|
-import com.hotent.project.manager.CostProjectTaskManager;
|
|
|
-import com.hotent.project.manager.CostProjectTaskNodeManager;
|
|
|
+import com.hotent.project.manager.*;
|
|
|
import com.hotent.project.model.CostProjectApproval;
|
|
|
import com.hotent.project.model.CostProjectTask;
|
|
|
import com.hotent.project.model.CostProjectTaskNode;
|
|
|
+import com.hotent.project.model.CostProjectTaskProccess;
|
|
|
import com.hotent.sys.persistence.manager.DataDictManager;
|
|
|
import com.hotent.sys.persistence.model.DataDict;
|
|
|
import com.hotent.uc.api.model.IUser;
|
|
|
@@ -47,11 +47,18 @@ public class CostAuditReviewController {
|
|
|
@Autowired
|
|
|
private CostProjectTaskNodeManager costProjectTaskNodeManager;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private CostProjectTaskProccessManager costProjectTaskProccessManager;
|
|
|
+
|
|
|
@Resource
|
|
|
DataDictManager dataDictManager;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private CostNoticeManager costNoticeManager;
|
|
|
+
|
|
|
/**
|
|
|
* 分页查询待审核任务列表
|
|
|
+ *
|
|
|
* @param req 分页查询请求参数
|
|
|
* @return 待审核任务分页列表
|
|
|
*/
|
|
|
@@ -64,6 +71,7 @@ public class CostAuditReviewController {
|
|
|
|
|
|
/**
|
|
|
* 审核任务分页查询的具体实现
|
|
|
+ *
|
|
|
* @param req 分页查询请求参数
|
|
|
* @return 分页结果
|
|
|
*/
|
|
|
@@ -131,8 +139,8 @@ public class CostAuditReviewController {
|
|
|
// 查询子任务列表
|
|
|
LambdaQueryWrapper<CostProjectTask> childQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
childQueryWrapper.eq(CostProjectTask::getPid, rootTask.getId())
|
|
|
- .eq(CostProjectTask::getIsDeleted, "0")
|
|
|
- .orderByAsc(CostProjectTask::getOrderNum);
|
|
|
+ .eq(CostProjectTask::getIsDeleted, "0")
|
|
|
+ .orderByAsc(CostProjectTask::getOrderNum);
|
|
|
|
|
|
List<CostProjectTask> childTasks = costProjectTaskManager.list(childQueryWrapper);
|
|
|
for (CostProjectTask childTask : childTasks) {
|
|
|
@@ -146,13 +154,13 @@ public class CostAuditReviewController {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@PostMapping(value = "/getProcessBtn")
|
|
|
@ApiOperation(value = "获取流程按钮", httpMethod = "POST", notes = "获取流程按钮")
|
|
|
public CommonResult<List<java.util.Map<String, Object>>> getProcessBtn(@RequestBody CostTaskPageReq req) {
|
|
|
CostProjectTaskNode one = costProjectTaskNodeManager.getOne(
|
|
|
new LambdaQueryWrapper<CostProjectTaskNode>()
|
|
|
.eq(CostProjectTaskNode::getTaskId, req.getTaskId())
|
|
|
+ .eq(CostProjectTaskNode::getProcessNodeKey, req.getProcessNodeKey())
|
|
|
);
|
|
|
|
|
|
if (one == null || StringUtil.isEmpty(one.getStatus())) {
|
|
|
@@ -183,4 +191,149 @@ public class CostAuditReviewController {
|
|
|
|
|
|
return CommonResult.<List<java.util.Map<String, Object>>>ok().value(buttonList);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ @PostMapping(value = "/doProcessBtn")
|
|
|
+ @ApiOperation(value = "流程按钮操作", httpMethod = "POST", notes = "流程按钮操作")
|
|
|
+ @org.springframework.transaction.annotation.Transactional
|
|
|
+ public CommonResult<String> doProcessBtn(@RequestBody CostTaskPageReq req) {
|
|
|
+ if (StringUtil.isEmpty(req.getTaskId()) || StringUtil.isEmpty(req.getKey())) {
|
|
|
+ return CommonResult.<String>error().message("任务ID和操作key不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取任务信息
|
|
|
+ CostProjectTask task = costProjectTaskManager.getById(req.getTaskId());
|
|
|
+
|
|
|
+ String resultMessage = "";
|
|
|
+
|
|
|
+ switch (req.getKey()) {
|
|
|
+ case "1":
|
|
|
+ // 通过
|
|
|
+ resultMessage = supplementTask(task);
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ // 中止
|
|
|
+ resultMessage = suspendTask(task);
|
|
|
+ break;
|
|
|
+ case "4":
|
|
|
+ // 退回
|
|
|
+ resultMessage = returnToSubmit(task);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return CommonResult.<String>error().message("未知的操作类型");
|
|
|
+ }
|
|
|
+ return CommonResult.<String>ok().value(resultMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初审通过,只修改状态,节点变化需要等待所有子任务完成。
|
|
|
+ */
|
|
|
+ private String supplementTask(CostProjectTask task) {
|
|
|
+ // 将当前任务置为办结
|
|
|
+ task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
+
|
|
|
+ // 材料初审通过通知
|
|
|
+ String title = "材料初审通过";
|
|
|
+ String auditedUnit = task.getAuditedUnitName() == null ? "" : task.getAuditedUnitName();
|
|
|
+ String projectName = task.getProjectName() == null ? "" : task.getProjectName();
|
|
|
+ String year = task.getYear() == null ? "" : task.getYear();
|
|
|
+ String content = String.format("%s%s%s材料初审通过。", year, projectName, auditedUnit);
|
|
|
+ String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
|
|
|
+ String noticeSource = "系统";
|
|
|
+ String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
+ costNoticeManager.sendNotice(task.getProjectId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
|
|
|
+
|
|
|
+
|
|
|
+ // 检查同一父任务下是否所有子任务均已办结;若是,父任务节点流转
|
|
|
+ List<CostProjectTask> siblingTasks = costProjectTaskManager.list(
|
|
|
+ new LambdaQueryWrapper<CostProjectTask>()
|
|
|
+ .eq(CostProjectTask::getPid, task.getPid())
|
|
|
+ .eq(CostProjectTask::getIsDeleted, "0")
|
|
|
+ );
|
|
|
+
|
|
|
+ boolean allSiblingsCompleted = true;
|
|
|
+ for (CostProjectTask s : siblingTasks) {
|
|
|
+ if (!TaskStatusConstant.COMPLETED.getStatusCode().equals(s.getStatus())) {
|
|
|
+ allSiblingsCompleted = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (allSiblingsCompleted) {
|
|
|
+ CostProjectTask parentTask = costProjectTaskManager.getById(task.getPid());
|
|
|
+ if (parentTask != null) {
|
|
|
+ CostProjectTaskProccess parentProccess = costProjectTaskProccessManager.getOne(
|
|
|
+ new LambdaQueryWrapper<CostProjectTaskProccess>()
|
|
|
+ .eq(CostProjectTaskProccess::getTaskId, parentTask.getId())
|
|
|
+ );
|
|
|
+ // 将父任务流转到实地审核
|
|
|
+ parentTask.setCurrentNode(NodeConstant.sdshenhe.getNodeKey());
|
|
|
+ costProjectTaskManager.updateById(parentTask);
|
|
|
+ if (parentProccess != null) {
|
|
|
+ parentProccess.setCurrentNode(NodeConstant.sdshenhe.getNodeKey());
|
|
|
+ costProjectTaskProccessManager.updateById(parentProccess);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return "初审已通过。";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初审退回,退回企业补充材料,并可额外增加补充材料。
|
|
|
+ */
|
|
|
+ private String returnToSubmit(CostProjectTask task) {
|
|
|
+ // 获取流程信息
|
|
|
+ CostProjectTaskProccess taskProccess = costProjectTaskProccessManager.getOne(
|
|
|
+ new LambdaQueryWrapper<CostProjectTaskProccess>()
|
|
|
+ .eq(CostProjectTaskProccess::getTaskId, task.getId())
|
|
|
+ );
|
|
|
+ // 通知内容组装
|
|
|
+ String title = "材料初审退回";
|
|
|
+ String auditedUnit = task.getAuditedUnitName() == null ? "" : task.getAuditedUnitName();
|
|
|
+ String projectName = task.getProjectName() == null ? "" : task.getProjectName();
|
|
|
+ String year = task.getYear() == null ? "" : task.getYear();
|
|
|
+ String content = String.format("%s%s%s材料初审因材料不全被退回,请补充完善。", year, projectName, auditedUnit);
|
|
|
+ String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
|
|
|
+ String noticeSource = "系统";
|
|
|
+ String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
|
|
|
+
|
|
|
+ costNoticeManager.sendNotice(task.getProjectId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
|
|
|
+
|
|
|
+ // 退回提交材料环节
|
|
|
+ taskProccess.setCurrentNode(NodeConstant.tjcl.getNodeKey());
|
|
|
+ costProjectTaskProccessManager.updateById(taskProccess);
|
|
|
+
|
|
|
+ // 更新任务的当前节点和状态
|
|
|
+ task.setCurrentNode(NodeConstant.tjcl.getNodeKey());
|
|
|
+ task.setStatus(TaskStatusConstant.WAIT_SUBMIT.getStatusCode());
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
+
|
|
|
+ return "初审已退回";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 中止监审,填写中止原因,并中止被监审单位审核
|
|
|
+ */
|
|
|
+ private String suspendTask(CostProjectTask task) {
|
|
|
+
|
|
|
+ // 更新任务状态为中止
|
|
|
+ task.setStatus(TaskStatusConstant.SUSPENDED.getStatusCode());
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
+
|
|
|
+ // 更新流程阶段为中止(保持当前节点不变,但状态为中止)
|
|
|
+ CostProjectTaskProccess taskProccess = costProjectTaskProccessManager.getOne(
|
|
|
+ new LambdaQueryWrapper<CostProjectTaskProccess>()
|
|
|
+ .eq(CostProjectTaskProccess::getTaskId, task.getId())
|
|
|
+ );
|
|
|
+ if (taskProccess != null) {
|
|
|
+ costProjectTaskProccessManager.updateById(taskProccess);
|
|
|
+ }
|
|
|
+
|
|
|
+ return "监审任务已中止";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|