diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/helper/WflowHelper.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/helper/WflowHelper.java index 445a560..a81c4e8 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/helper/WflowHelper.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/helper/WflowHelper.java @@ -1,19 +1,16 @@ package com.hz.pm.api.common.helper; -import com.wflow.workflow.service.ProcessInstanceService; import lombok.RequiredArgsConstructor; -import org.flowable.bpmn.model.Activity; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; -import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricActivityInstance; -import org.flowable.engine.history.HistoricActivityInstanceQuery; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.variable.api.history.HistoricVariableInstance; import org.springframework.stereotype.Component; @@ -46,18 +43,24 @@ public class WflowHelper { List userTasks = processes.get(0).findFlowElementsOfType(UserTask.class); for (UserTask userTask : userTasks) { if (userTask.getId().equals(activityId)) { - return userTask.getLoopCharacteristics().isSequential(); + return !userTask.getLoopCharacteristics().isSequential(); } } return false; } - public List listUnFinishedTasks(String activityId) { + public List listPendingTasks(String activityId) { return taskService.createTaskQuery() .taskDefinitionKey(activityId) .list(); } + public List listFinishedTasks(String activityId) { + return historyService.createHistoricTaskInstanceQuery() + .taskDefinitionKey(activityId) + .list(); + } + /** * 所有流程是否完成(审核通过) * 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 6f3b33a..efa9740 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,6 +5,7 @@ import cn.hutool.extra.spring.SpringUtil; import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum; 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; @@ -26,11 +27,11 @@ import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent; import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType; import org.flowable.common.engine.api.delegate.event.FlowableEvent; import org.flowable.common.engine.api.delegate.event.FlowableEventListener; -import org.flowable.task.api.Task; -import org.flowable.task.api.TaskInfo; +import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.springframework.stereotype.Component; +import java.time.Instant; import java.util.List; import java.util.Optional; import java.util.Set; @@ -58,6 +59,11 @@ public class TaskCreatedListener implements FlowableEventListener { @Override public void onEvent(FlowableEvent event) { + Instant instant = Instant.now().plusSeconds(5); + ThreadPoolUtil.SCHEDULER.schedule(() -> handleEvent(event), instant); + } + + private void handleEvent(FlowableEvent event) { if (event.getType().equals(FlowableEngineEventType.TASK_CREATED)) { FlowableEngineEntityEvent entityEvent = (FlowableEngineEntityEvent) event; String procDefId = entityEvent.getProcessDefinitionId(); @@ -127,15 +133,16 @@ public class TaskCreatedListener implements FlowableEventListener { } TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity(); WflowHelper wflowHelper = SpringUtil.getBean(WflowHelper.class); - boolean orUserTask = wflowHelper.isOrUserTask(procDefId, taskEntity.getTaskDefinitionId()); + String taskDefKey = taskEntity.getTaskDefinitionKey(); + boolean orUserTask = wflowHelper.isOrUserTask(procDefId, taskDefKey); switch (procType.get()) { case XC_APPROVAL_PROCESS: case PROJECT_RECORD_APPROVAL_PROCESS: case ACCEPTANCE_DECLARATION_APPROVAL_PROCESS: MHTodoTypeEnum todoType = getMhTodoTypeEnum(procType.get()); if (orUserTask) { - List tasks = wflowHelper.listUnFinishedTasks(taskEntity.getTaskDefinitionId()); - Set taskIds = CollUtils.fieldSet(tasks, TaskInfo::getId); + List tasks = wflowHelper.listFinishedTasks(taskDefKey); + Set taskIds = CollUtils.fieldSet(tasks, HistoricTaskInstance::getId); taskIds.add(taskEntity.getId()); mhTodoClient.completeTodo(todoType, taskIds); } else { diff --git a/hz-pm-api/src/test/java/com/hz/pm/api/todocenter/MhApiClientTest.java b/hz-pm-api/src/test/java/com/hz/pm/api/todocenter/MhApiClientTest.java index a0f274a..9e5e7c6 100644 --- a/hz-pm-api/src/test/java/com/hz/pm/api/todocenter/MhApiClientTest.java +++ b/hz-pm-api/src/test/java/com/hz/pm/api/todocenter/MhApiClientTest.java @@ -3,7 +3,10 @@ package com.hz.pm.api.todocenter; import cn.hutool.json.JSONObject; import com.hz.pm.api.AppTests; import com.hz.pm.api.common.helper.UserInfoHelper; +import com.hz.pm.api.external.MhApiClient; +import com.hz.pm.api.external.model.dto.MhZwddWorkNoticeDTO; import com.hz.pm.api.external.todo.MHTodoClient; +import com.hz.pm.api.external.todo.dto.MhTodoExtraParamDTO; import com.hz.pm.api.external.todo.enumerization.MHTodoTypeEnum; import com.hz.pm.api.user.security.model.UserFullInfoDTO; import org.junit.Test; @@ -22,20 +25,34 @@ public class MhApiClientTest extends AppTests { @Autowired private MHTodoClient mhTodoClient; @Autowired - private UserInfoHelper userInfoHelper; + private MhApiClient mhApiClient; @Test public void sendTodo() { UserFullInfoDTO assignee = new UserFullInfoDTO(); - assignee.setUserId(347873L); + assignee.setUserId(150L); assignee.setMhUserId("62697f4ed80d823fa1f26c5a082d989e"); - JSONObject paramObj = new JSONObject(); - paramObj.set("projectId", 1213); - paramObj.set("instId", 1213); - paramObj.set("taskId", 1213); - String content = String.format("【%s】的【%s】需要您审核,请及时处理。", - "市住保房管局深化信创项目", "立项备案审批"); - mhTodoClient.addTodo(paramObj, assignee, MHTodoTypeEnum.XCFHX_INSPECT_AUDIT, "1212121", content); + MhTodoExtraParamDTO paramObj = MhTodoExtraParamDTO.builder() + .bidId(117L) + .path("/toDoCenter/handleDuringExamine") + .projectId(2333L) + .userName("杨云迪") + .nodeId("node_65f010952418b30a56467594") + .taskId("a733d3fb-e049-11ee-aa3b-024410885fae") + .instanceId("8edc9888-e049-11ee-aa3b-024410885fae") + .build(); + mhTodoClient.addTodo(paramObj, assignee, MHTodoTypeEnum.XCFHX_INSPECT_AUDIT, "1212121", null); + } + + @Test + public void test(){ + MhZwddWorkNoticeDTO notice = MhZwddWorkNoticeDTO.builder() + .title(MHTodoTypeEnum.DECLARED_RECORD_AUDIT.getVal()) + .targetUser("ce44b47503147319fc3b5c826cb51fd2") + .content(String.format("【%s】的【%s】需要您审核,请及时处理。", + "市住保房管局深化信创项目", "立项备案审批")) + .build(); + mhApiClient.sendZwddWorkNotice(notice); } } diff --git a/hz-pm-api/src/test/resources/application-dev.yml b/hz-pm-api/src/test/resources/application-dev.yml index f1d970c..8e1b79d 100644 --- a/hz-pm-api/src/test/resources/application-dev.yml +++ b/hz-pm-api/src/test/resources/application-dev.yml @@ -246,10 +246,13 @@ sync-mh-user: sync-mh-company: open: false mh: + zwdd-work-notice: + client-id: ningda-74a5e5da-3bc3-414a-b9e6-004b7d87e310 + client-secret: ningda-df746ce4-0c79-4242-b3c7-90ff8630c9742c6727cd-3ae7-48ae-87ad-2b39188ebabd sso: client-id: ningda-74a5e5da-3bc3-414a-b9e6-004b7d87e310 client-secret: ningda-df746ce4-0c79-4242-b3c7-90ff8630c9742c6727cd-3ae7-48ae-87ad-2b39188ebabd - api-host: https://hzszxc.hzswb.cn:8443/test/mh-gateway/auth-single + api-host: https://hzszxc.hzswb.cn:8443/mh-gateway/auth-single expert-qr-code-url: https://jiema.wwei.cn/uploads/2023/12/28/658d7a3f15f06.jpg file: down-url: https://weixin.hzszxc.hzswb.cn:8443/test/mh-gateway/oss/oss/previewFileLogin