From d39041e9d94ee45d1a1b7b1ec6cdb11af925f03d Mon Sep 17 00:00:00 2001 From: WendyYang Date: Fri, 13 Sep 2024 19:26:23 +0800 Subject: [PATCH] =?UTF-8?q?modify:=201.=20=E5=BE=85=E5=8A=9E=E6=8E=A8?= =?UTF-8?q?=E9=80=81;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/listener/TaskCreatedListener.java | 239 ++++++++++----------- 1 file changed, 119 insertions(+), 120 deletions(-) diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/TaskCreatedListener.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/TaskCreatedListener.java index b37c89d..ee65b68 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/TaskCreatedListener.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/TaskCreatedListener.java @@ -5,7 +5,6 @@ import cn.hutool.extra.spring.SpringUtil; import com.hz.pm.api.common.enumeration.ProjectProcessType; import com.hz.pm.api.common.helper.UserInfoHelper; import com.hz.pm.api.common.helper.WflowHelper; -import com.hz.pm.api.common.util.ThreadPoolUtil; import com.hz.pm.api.external.MhApiClient; import com.hz.pm.api.external.model.dto.MhZwddWorkNoticeDTO; import com.hz.pm.api.external.todo.MHTodoClient; @@ -30,12 +29,9 @@ import com.wflow.workflow.notify.event.NodeCreateEvent; import com.wflow.workflow.service.ProcessModelHistorysService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent; import org.flowable.engine.TaskService; import org.flowable.task.api.Task; import org.flowable.task.api.history.HistoricTaskInstance; -import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import org.springframework.context.ApplicationEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -43,6 +39,8 @@ import java.time.Instant; import java.util.List; import java.util.Set; +import static com.hz.pm.api.common.util.ThreadPoolUtil.SCHEDULER; + /** *

* TaskCreatedListener @@ -67,132 +65,133 @@ public class TaskCreatedListener { private final IXinchuangService xinchuangService; private final TaskService taskService; + private Instant instantDelay10s() { + return Instant.now().plusSeconds(10); + } + @EventListener(classes = NodeCreateEvent.class) public void onEvent(NodeCreateEvent event) { - Instant instant = Instant.now().plusSeconds(5); - ThreadPoolUtil.SCHEDULER.schedule(() -> handleEvent(event), instant); + SCHEDULER.schedule(() -> handleEvent(event), instantDelay10s()); } @EventListener(classes = NodeCompleteEvent.class) public void onEvent(NodeCompleteEvent event) { - Instant instant = Instant.now().plusSeconds(5); - ThreadPoolUtil.SCHEDULER.schedule(() -> handleEvent(event), instant); + SCHEDULER.schedule(() -> handleEvent(event), instantDelay10s()); } - private void handleEvent(ApplicationEvent event) { - if (event instanceof NodeCreateEvent) { - NodeCreateEvent entityEvent = (NodeCreateEvent) event; - String procDefId = entityEvent.getProcessDefinitionId(); - String procInstId = entityEvent.getInstCode(); - WflowModelHistorys models = processModelHistorysService.getByProcessDefId(procDefId); - ProjectProcessType procType = ProjectProcessType.getNoNull(models.getProcessType()); - Task task = taskService.createTaskQuery() - .taskId(entityEvent.getTaskId()) - .singleResult(); - UserFullInfoDTO assignee = userInfoHelper.getUserFullInfo(task.getAssignee()); - if (assignee == null || StrUtil.isBlank(assignee.getMhUserId())) { - return; - } - switch (procType) { - case XC_APPROVAL_PROCESS: - case PROJECT_RECORD_APPROVAL_PROCESS: - case ACCEPTANCE_DECLARATION_APPROVAL_PROCESS: - case ADAPTION: - case SELF_TEST: - case TEST_VALID: - case PROJECT_CHANGE: - case PROJECT_STOPPED: - case COMPLIANCE_REVIEW: - case PROJECT_REVIEW: - // 发送信产平台待办 - MHTodoTypeEnum todoType = getMhTodoTypeEnum(procType); - MhTodoExtraParamDTO paramObj = MhTodoExtraParamDTO.builder() - .taskId(task.getId()) - .instanceId(task.getProcessInstanceId()) - .nodeId(task.getTaskDefinitionId()) - .userId(assignee.getUserId()) - .userName(assignee.getRealName()) - .path("/toDoCenter/handleDuringExamine") - .build(); - if (procType.equals(ProjectProcessType.ACCEPTANCE_DECLARATION_APPROVAL_PROCESS) - || procType.equals(ProjectProcessType.ADAPTION) - || procType.equals(ProjectProcessType.XC_APPROVAL_PROCESS) - || procType.equals(ProjectProcessType.TEST_VALID) - || procType.equals(ProjectProcessType.SELF_TEST)) { - PurchaseInst purchaseInst = purchaseInstService.getByProjectIdAndInstCode(paramObj.getProjectId(), procInstId); - paramObj.setBidId(purchaseInst.getBidId()); - paramObj.setProjectId(purchaseInst.getProjectId()); - } - String projectName = ""; - // 上边查不到ID的时候说明是手动新增的信创项目 - if (paramObj.getBidId() == null) { - XinchuangInst xinchuangInst = xinchuangInstService.getByInstCode(procInstId); - if (xinchuangInst != null) { - Xinchuang xinchuang = xinchuangService.getById(xinchuangInst.getXinchuangId()); - paramObj.setXinchuangId(xinchuang.getId()); - projectName = xinchuang.getProjectName(); - } else { - ProjectInst projectInst = projectInstService.getByInstCode(procInstId); - if (projectInst == null) { - return; - } - paramObj.setProjectId(projectInst.getProjectId()); - } - } - if (paramObj.getProjectId() != null) { - Project project = projectService.getNewProject(paramObj.getProjectId()); - projectName = project.getProjectName(); - paramObj.setProjectId(project.getId()); - paramObj.setProjectCode(project.getProjectCode()); - } - String content = String.format("【%s】的【%s】需要您审核,请及时处理。", projectName, procType.getDesc()); - mhTodoClient.addTodo(paramObj, assignee, todoType, task.getId(), content); - // 发送浙政钉工作通知 - if (assignee.getAccountId() != null) { - MhZwddWorkNoticeDTO notice = MhZwddWorkNoticeDTO.builder() - .content(content) - .title(todoType.getVal()) - .targetUser(assignee.getMhUserId()) - .build(); - mhApiClient.sendZwddWorkNotice(notice); - } - break; - default: - break; - } - } else if (event instanceof NodeCompleteEvent) { - FlowableEngineEntityEvent entityEvent = (FlowableEngineEntityEvent) event; - String procDefId = entityEvent.getProcessDefinitionId(); - WflowModelHistorys models = processModelHistorysService.getByProcessDefId(procDefId); - ProjectProcessType procType = ProjectProcessType.getNoNull(models.getProcessType()); - TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity(); - WflowHelper wflowHelper = SpringUtil.getBean(WflowHelper.class); - String taskDefKey = taskEntity.getTaskDefinitionKey(); - boolean orUserTask = wflowHelper.isOrUserTask(procDefId, taskDefKey); - switch (procType) { - case XC_APPROVAL_PROCESS: - case PROJECT_RECORD_APPROVAL_PROCESS: - case ACCEPTANCE_DECLARATION_APPROVAL_PROCESS: - case ADAPTION: - case SELF_TEST: - case TEST_VALID: - case PROJECT_CHANGE: - case PROJECT_STOPPED: - case COMPLIANCE_REVIEW: - case PROJECT_REVIEW: - MHTodoTypeEnum todoType = getMhTodoTypeEnum(procType); - if (orUserTask) { - List tasks = wflowHelper.listFinishedTasks(taskDefKey); - Set taskIds = CollUtils.fieldSet(tasks, HistoricTaskInstance::getId); - taskIds.add(taskEntity.getId()); - mhTodoClient.completeTodo(todoType, taskIds); + public void handleEvent(NodeCreateEvent event) { + String procDefId = event.getProcessDefinitionId(); + String procInstId = event.getInstCode(); + WflowModelHistorys models = processModelHistorysService.getByProcessDefId(procDefId); + ProjectProcessType procType = ProjectProcessType.getNoNull(models.getProcessType()); + Task task = taskService.createTaskQuery() + .taskId(event.getTaskId()) + .singleResult(); + UserFullInfoDTO assignee = userInfoHelper.getUserFullInfo(task.getAssignee()); + if (assignee == null || StrUtil.isBlank(assignee.getMhUserId())) { + return; + } + switch (procType) { + case XC_APPROVAL_PROCESS: + case PROJECT_RECORD_APPROVAL_PROCESS: + case ACCEPTANCE_DECLARATION_APPROVAL_PROCESS: + case ADAPTION: + case SELF_TEST: + case TEST_VALID: + case PROJECT_CHANGE: + case PROJECT_STOPPED: + case COMPLIANCE_REVIEW: + case PROJECT_REVIEW: + // 发送信产平台待办 + MHTodoTypeEnum todoType = getMhTodoTypeEnum(procType); + MhTodoExtraParamDTO paramObj = MhTodoExtraParamDTO.builder() + .taskId(task.getId()) + .instanceId(task.getProcessInstanceId()) + .nodeId(task.getTaskDefinitionId()) + .userId(assignee.getUserId()) + .userName(assignee.getRealName()) + .path("/toDoCenter/handleDuringExamine") + .build(); + if (procType.equals(ProjectProcessType.ACCEPTANCE_DECLARATION_APPROVAL_PROCESS) + || procType.equals(ProjectProcessType.ADAPTION) + || procType.equals(ProjectProcessType.XC_APPROVAL_PROCESS) + || procType.equals(ProjectProcessType.TEST_VALID) + || procType.equals(ProjectProcessType.SELF_TEST)) { + PurchaseInst purchaseInst = purchaseInstService.getByProjectIdAndInstCode(paramObj.getProjectId(), procInstId); + paramObj.setBidId(purchaseInst.getBidId()); + paramObj.setProjectId(purchaseInst.getProjectId()); + } + String projectName = ""; + // 上边查不到ID的时候说明是手动新增的信创项目 + if (paramObj.getBidId() == null) { + XinchuangInst xinchuangInst = xinchuangInstService.getByInstCode(procInstId); + if (xinchuangInst != null) { + Xinchuang xinchuang = xinchuangService.getById(xinchuangInst.getXinchuangId()); + paramObj.setXinchuangId(xinchuang.getId()); + projectName = xinchuang.getProjectName(); } else { - mhTodoClient.completeTodo(todoType, taskEntity.getId()); + ProjectInst projectInst = projectInstService.getByInstCode(procInstId); + if (projectInst == null) { + return; + } + paramObj.setProjectId(projectInst.getProjectId()); } - break; - default: - break; - } + } + if (paramObj.getProjectId() != null) { + Project project = projectService.getNewProject(paramObj.getProjectId()); + projectName = project.getProjectName(); + paramObj.setProjectId(project.getId()); + paramObj.setProjectCode(project.getProjectCode()); + } + String content = String.format("【%s】的【%s】需要您审核,请及时处理。", projectName, procType.getDesc()); + mhTodoClient.addTodo(paramObj, assignee, todoType, task.getId(), content); + // 发送浙政钉工作通知 + if (assignee.getAccountId() != null) { + MhZwddWorkNoticeDTO notice = MhZwddWorkNoticeDTO.builder() + .content(content) + .title(todoType.getVal()) + .targetUser(assignee.getMhUserId()) + .build(); + mhApiClient.sendZwddWorkNotice(notice); + } + break; + default: + break; + } + } + + public void handleEvent(NodeCompleteEvent event) { + String procDefId = event.getProcessDefinitionId(); + WflowModelHistorys models = processModelHistorysService.getByProcessDefId(procDefId); + ProjectProcessType procType = ProjectProcessType.getNoNull(models.getProcessType()); + WflowHelper wflowHelper = SpringUtil.getBean(WflowHelper.class); + Task task = taskService.createTaskQuery() + .taskId(event.getTaskId()) + .singleResult(); + boolean orUserTask = wflowHelper.isOrUserTask(procDefId, task.getTaskDefinitionKey()); + switch (procType) { + case XC_APPROVAL_PROCESS: + case PROJECT_RECORD_APPROVAL_PROCESS: + case ACCEPTANCE_DECLARATION_APPROVAL_PROCESS: + case ADAPTION: + case SELF_TEST: + case TEST_VALID: + case PROJECT_CHANGE: + case PROJECT_STOPPED: + case COMPLIANCE_REVIEW: + case PROJECT_REVIEW: + MHTodoTypeEnum todoType = getMhTodoTypeEnum(procType); + if (orUserTask) { + List tasks = wflowHelper.listFinishedTasks(task.getTaskDefinitionKey()); + Set taskIds = CollUtils.fieldSet(tasks, HistoricTaskInstance::getId); + taskIds.add(task.getId()); + mhTodoClient.completeTodo(todoType, taskIds); + } else { + mhTodoClient.completeTodo(todoType, task.getId()); + } + break; + default: + break; } }