From a7d55420accc0661371f93090742070a410b3900 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Thu, 12 Dec 2024 11:29:22 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=8A=9E=E7=90=86=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/WorkflowGlobalListener.java | 85 +++++++++++++++---- 1 file changed, 70 insertions(+), 15 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java index 99297d009..79a2ed11d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java @@ -28,27 +28,80 @@ import java.util.List; @RequiredArgsConstructor public class WorkflowGlobalListener implements GlobalListener { - private final IFlwTaskService iFlwTaskService; - private final IFlwInstanceService flwInstanceService; + private final IFlwTaskService taskService; + private final IFlwInstanceService instanceService; + /** + * 创建监听器,任务创建时执行 + * + * @param listenerVariable 监听器变量 + */ + @Override + public void create(ListenerVariable listenerVariable) { + } + + /** + * 开始监听器,任务开始办理时执行 + * + * @param listenerVariable 监听器变量 + */ + @Override + public void start(ListenerVariable listenerVariable) { + } + + /** + * 分派监听器,动态修改代办任务信息 + * + * @param listenerVariable 监听器变量 + */ + @Override + public void assignment(ListenerVariable listenerVariable) { + } + + /** + * 完成监听器,当前任务完成后执行 + * + * @param listenerVariable 监听器变量 + */ @Override public void finish(ListenerVariable listenerVariable) { Instance instance = listenerVariable.getInstance(); Definition definition = listenerVariable.getDefinition(); - //撤销,退回,作废,终止发送事件 - if (StringUtils.isNotBlank(instance.getFlowStatus()) && BusinessStatusEnum.initialState(instance.getFlowStatus())) { - publishProcessEvent(instance.getFlowStatus(), definition.getFlowCode(), instance.getBusinessId()); - log.info("流程监听器流程状态:{}", instance.getFlowStatus()); - } else { - List flowTasks = iFlwTaskService.selectByInstId(instance.getId()); - if (CollUtil.isEmpty(flowTasks)) { - // 若流程已结束,更新状态为已完成并发送完成事件 - flwInstanceService.updateStatus(instance.getId(), BusinessStatusEnum.FINISH.getStatus()); - publishProcessEvent(BusinessStatusEnum.FINISH.getStatus(), definition.getFlowCode(), instance.getBusinessId()); - log.info("流程结束,流程状态:{}", BusinessStatusEnum.FINISH.getStatus()); - } - } + String businessId = instance.getBusinessId(); + String instanceFlowStatus = instance.getFlowStatus(); + // 判断流程状态 + String status = determineFlowStatus(instance, instanceFlowStatus); + if (StringUtils.isNotBlank(status)) { + // 如果流程状态有效,发布事件 + publishProcessEvent(status, definition.getFlowCode(), businessId); + } + } + + /** + * 根据流程实例和当前流程状态确定最终状态 + * + * @param instance 流程实例 + * @param instanceFlowStatus 流程实例当前状态 + * @return 流程最终状态 + */ + private String determineFlowStatus(Instance instance, String instanceFlowStatus) { + if (StringUtils.isNotBlank(instanceFlowStatus) && BusinessStatusEnum.initialState(instanceFlowStatus)) { + log.info("流程实例当前状态: {}", instanceFlowStatus); + return instanceFlowStatus; + } else { + Long instanceId = instance.getId(); + List flowTasks = taskService.selectByInstId(instanceId); + if (CollUtil.isEmpty(flowTasks)) { + String status = BusinessStatusEnum.FINISH.getStatus(); + // 更新流程状态为已完成 + instanceService.updateStatus(instanceId, status); + log.info("流程已结束,状态更新为: {}", status); + return status; + } + log.warn("流程未结束,实例ID: {}", instanceId); + return null; + } } /** @@ -59,6 +112,7 @@ public class WorkflowGlobalListener implements GlobalListener { * @param businessId 业务id */ private void publishProcessEvent(String status, String flowCode, String businessId) { + log.info("发布流程事件,流程状态: {}, 流程编码: {}, 业务ID: {}", status, flowCode, businessId); ProcessEvent processEvent = new ProcessEvent(); processEvent.setStatus(status); processEvent.setSubmit(false); @@ -66,4 +120,5 @@ public class WorkflowGlobalListener implements GlobalListener { processEvent.setBusinessKey(businessId); SpringUtils.context().publishEvent(processEvent); } + }