diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessCreateTaskEvent.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessCreateTaskEvent.java index 05047ab84..d603884d1 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessCreateTaskEvent.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessCreateTaskEvent.java @@ -27,10 +27,20 @@ public class ProcessCreateTaskEvent implements Serializable { private String flowCode; /** - * 审批节点编码 + * 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) + */ + private Integer nodeType; + + /** + * 流程节点编码 */ private String nodeCode; + /** + * 流程节点名称 + */ + private String nodeName; + /** * 任务id */ diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java index 6329b9c01..bc7b78065 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java @@ -33,7 +33,22 @@ public class ProcessEvent implements Serializable { private String businessId; /** - * 状态 + * 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) + */ + private Integer nodeType; + + /** + * 流程节点编码 + */ + private String nodeCode; + + /** + * 流程节点名称 + */ + private String nodeName; + + /** + * 流程状态 */ private String status; diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java index 3efc52da8..eec27369d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java @@ -27,16 +27,27 @@ public class FlowProcessEventHandler { * * @param flowCode 流程定义编码 * @param businessId 业务id - * @param status 状态 + * @param nodeType 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) + * @param nodeCode 流程节点编码 + * @param nodeName 流程节点名称 + * @param status 流程状态 + * @param params 办理参数 * @param submit 当为true时为申请人节点办理 */ - public void processHandler(String flowCode, String businessId, String status, Map params, boolean submit) { + public void processHandler(String flowCode, String businessId, Integer nodeType, String nodeCode, String nodeName, + String status, Map params, boolean submit) { + String tenantId = TenantHelper.getTenantId(); - log.info("发布流程事件,租户ID: {}, 流程状态: {}, 流程编码: {}, 业务ID: {}, 是否申请人节点办理: {}", tenantId, status, flowCode, businessId, submit); + log.info("【流程事件发布】租户ID: {}, 流程编码: {}, 业务ID: {}, 状态: {}, 节点类型: {}, 节点编码: {}, 节点名称: {}, 是否申请人节点: {}, 参数: {}", + tenantId, flowCode, businessId, status, nodeType, nodeCode, nodeName, submit, params); + ProcessEvent processEvent = new ProcessEvent(); processEvent.setTenantId(tenantId); processEvent.setFlowCode(flowCode); processEvent.setBusinessId(businessId); + processEvent.setNodeType(nodeType); + processEvent.setNodeCode(nodeCode); + processEvent.setNodeName(nodeName); processEvent.setStatus(status); processEvent.setParams(params); processEvent.setSubmit(submit); @@ -47,17 +58,22 @@ public class FlowProcessEventHandler { * 执行创建任务监听 * * @param flowCode 流程定义编码 - * @param nodeCode 审批节点编码 + * @param nodeType 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) + * @param nodeCode 流程节点编码 + * @param nodeName 流程节点名称 * @param taskId 任务id * @param businessId 业务id */ - public void processCreateTaskHandler(String flowCode, String nodeCode, Long taskId, String businessId) { + public void processCreateTaskHandler(String flowCode, Integer nodeType, String nodeCode, String nodeName, Long taskId, String businessId) { String tenantId = TenantHelper.getTenantId(); - log.info("发布流程任务事件, 租户ID: {}, 流程编码: {}, 节点编码: {}, 任务ID: {}, 业务ID: {}", tenantId, flowCode, nodeCode, taskId, businessId); + log.info("发布流程任务事件, 租户ID: {}, 流程编码: {}, 节点类型: {}, 节点编码: {}, 节点名称: {}, 任务ID: {}, 业务ID: {}", + tenantId, flowCode, nodeType, nodeCode, nodeName, taskId, businessId); ProcessCreateTaskEvent processCreateTaskEvent = new ProcessCreateTaskEvent(); processCreateTaskEvent.setTenantId(tenantId); processCreateTaskEvent.setFlowCode(flowCode); + processCreateTaskEvent.setNodeType(nodeType); processCreateTaskEvent.setNodeCode(nodeCode); + processCreateTaskEvent.setNodeName(nodeName); processCreateTaskEvent.setTaskId(taskId); processCreateTaskEvent.setBusinessId(businessId); SpringUtils.context().publishEvent(processCreateTaskEvent); 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 272f9de92..6f435693e 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 @@ -52,7 +52,8 @@ public class WorkflowGlobalListener implements GlobalListener { Task task = listenerVariable.getTask(); if (task != null && BusinessStatusEnum.WAITING.getStatus().equals(flowStatus)) { // 判断流程状态(发布审批中事件) - flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), task.getNodeCode(), task.getId(), businessId); + flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), task.getNodeType(), + task.getNodeCode(), task.getNodeName(), task.getId(), businessId); } } @@ -83,8 +84,6 @@ public class WorkflowGlobalListener implements GlobalListener { public void finish(ListenerVariable listenerVariable) { Instance instance = listenerVariable.getInstance(); Definition definition = listenerVariable.getDefinition(); - String businessId = instance.getBusinessId(); - String flowStatus = instance.getFlowStatus(); Map params = new HashMap<>(); FlowParams flowParams = listenerVariable.getFlowParams(); if (ObjectUtil.isNotNull(flowParams)) { @@ -96,20 +95,21 @@ public class WorkflowGlobalListener implements GlobalListener { params.put("message", flowParams.getMessage()); } // 判断流程状态(发布:撤销,退回,作废,终止,已完成事件) - String status = determineFlowStatus(instance, flowStatus); + String status = determineFlowStatus(instance); if (StringUtils.isNotBlank(status)) { - flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, params, false); + flowProcessEventHandler.processHandler(definition.getFlowCode(), instance.getBusinessId(), instance.getNodeType(), + instance.getNodeCode(), instance.getNodeName(), status, params, false); } } /** - * 根据流程实例和当前流程状态确定最终状态 + * 根据流程实例确定最终状态 * - * @param instance 流程实例 - * @param flowStatus 流程实例当前状态 + * @param instance 流程实例 * @return 流程最终状态 */ - private String determineFlowStatus(Instance instance, String flowStatus) { + private String determineFlowStatus(Instance instance) { + String flowStatus = instance.getFlowStatus(); if (StringUtils.isNotBlank(flowStatus) && BusinessStatusEnum.initialState(flowStatus)) { log.info("流程实例当前状态: {}", flowStatus); return flowStatus; diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 990c32383..356af6600 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -162,7 +162,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Definition definition = defService.getById(flowTask.getDefinitionId()); // 检查流程状态是否为草稿、已撤销或已退回状态,若是则执行流程提交监听 if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) { - flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true); + flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getNodeType(), + ins.getNodeCode(), ins.getNodeName(), ins.getFlowStatus(), null, true); } // 设置弹窗处理人 Map assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap());