update 调整流程监听

This commit is contained in:
gssong 2025-05-22 20:34:25 +08:00
parent b726a91cdb
commit d729c8ecde
4 changed files with 45 additions and 30 deletions

View File

@ -13,21 +13,11 @@ public interface FlowConstant {
*/ */
String INITIATOR = "initiator"; String INITIATOR = "initiator";
/**
* 流程实例id
*/
String PROCESS_INSTANCE_ID = "processInstanceId";
/** /**
* 业务id * 业务id
*/ */
String BUSINESS_ID = "businessId"; String BUSINESS_ID = "businessId";
/**
* 任务id
*/
String TASK_ID = "taskId";
/** /**
* 委托 * 委托
*/ */
@ -63,4 +53,24 @@ public interface FlowConstant {
*/ */
Long FLOW_CATEGORY_ID = 100L; Long FLOW_CATEGORY_ID = 100L;
/**
* 是否为申请人提交常量
*/
String SUBMIT = "submit";
/**
* 抄送常量
*/
String FLOW_COPY_LIST = "flowCopyList";
/**
* 消息类型常量
*/
String MESSAGE_TYPE = "messageType";
/**
* 消息通知常量
*/
String MESSAGE_NOTICE = "messageNotice";
} }

View File

@ -1,6 +1,7 @@
package org.dromara.workflow.listener; package org.dromara.workflow.listener;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -14,6 +15,7 @@ import org.dromara.warm.flow.core.listener.GlobalListener;
import org.dromara.warm.flow.core.listener.ListenerVariable; import org.dromara.warm.flow.core.listener.ListenerVariable;
import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.warm.flow.orm.entity.FlowTask;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.FlowCopyBo; import org.dromara.workflow.domain.bo.FlowCopyBo;
import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.handler.FlowProcessEventHandler;
@ -37,7 +39,7 @@ import java.util.Map;
@RequiredArgsConstructor @RequiredArgsConstructor
public class WorkflowGlobalListener implements GlobalListener { public class WorkflowGlobalListener implements GlobalListener {
private final IFlwTaskService taskService; private final IFlwTaskService flwTaskService;
private final IFlwInstanceService instanceService; private final IFlwInstanceService instanceService;
private final FlowProcessEventHandler flowProcessEventHandler; private final FlowProcessEventHandler flowProcessEventHandler;
private final IFlwCommonService flwCommonService; private final IFlwCommonService flwCommonService;
@ -51,11 +53,19 @@ public class WorkflowGlobalListener implements GlobalListener {
public void create(ListenerVariable listenerVariable) { public void create(ListenerVariable listenerVariable) {
Instance instance = listenerVariable.getInstance(); Instance instance = listenerVariable.getInstance();
Definition definition = listenerVariable.getDefinition(); Definition definition = listenerVariable.getDefinition();
FlowParams flowParams = listenerVariable.getFlowParams();
Map<String, Object> variable = flowParams.getVariable();
Task task = listenerVariable.getTask(); Task task = listenerVariable.getTask();
if (task != null) { if (task != null) {
// 判断流程状态发布审批中事件 // 判断流程状态发布审批中事件
flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), instance, task.getId()); flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), instance, task.getId());
} }
Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
if (submit != null && submit) {
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(), variable, true);
}
variable.remove(FlowConstant.SUBMIT);
flowParams.variable(variable);
} }
/** /**
@ -126,25 +136,24 @@ public class WorkflowGlobalListener implements GlobalListener {
if (StringUtils.isNotBlank(status)) { if (StringUtils.isNotBlank(status)) {
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false); flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false);
} }
Map<String, Object> variable = listenerVariable.getVariable();
// 只有办理或者退回的时候才执行消息通知和抄送 // 只有办理或者退回的时候才执行消息通知和抄送
if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus()) if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
|| TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) { || TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) {
Task task = listenerVariable.getTask(); Task task = listenerVariable.getTask();
Map<String, Object> variable = listenerVariable.getVariable(); List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get(FlowConstant.FLOW_COPY_LIST);
List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get("flowCopyList"); List<String> messageType = (List<String>) variable.get(FlowConstant.MESSAGE_TYPE);
List<String> messageType = (List<String>) variable.get("messageType"); String notice = (String) variable.get(FlowConstant.MESSAGE_NOTICE);
String notice = (String) variable.get("notice");
// 添加抄送人 // 添加抄送人
taskService.setCopy(task, flowCopyList); flwTaskService.setCopy(task, flowCopyList);
variable.remove("flowCopyList"); variable.remove(FlowConstant.FLOW_COPY_LIST);
// 消息通知 // 消息通知
if (CollUtil.isNotEmpty(messageType)) { if (CollUtil.isNotEmpty(messageType)) {
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
variable.remove("messageType"); variable.remove(FlowConstant.MESSAGE_TYPE);
variable.remove("notice"); variable.remove(FlowConstant.MESSAGE_NOTICE);
} }
} }
} }
@ -162,7 +171,7 @@ public class WorkflowGlobalListener implements GlobalListener {
return flowStatus; return flowStatus;
} else { } else {
Long instanceId = instance.getId(); Long instanceId = instance.getId();
List<FlowTask> flowTasks = taskService.selectByInstId(instanceId); List<FlowTask> flowTasks = flwTaskService.selectByInstId(instanceId);
if (CollUtil.isEmpty(flowTasks)) { if (CollUtil.isEmpty(flowTasks)) {
String status = BusinessStatusEnum.FINISH.getStatus(); String status = BusinessStatusEnum.FINISH.getStatus();
// 更新流程状态为已完成 // 更新流程状态为已完成

View File

@ -248,7 +248,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus()); BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
FlowParams flowParams = FlowParams.build() FlowParams flowParams = FlowParams.build()
.message(message) .message(message)
.skipType(SkipType.PASS.getKey())
.flowStatus(BusinessStatusEnum.CANCEL.getStatus()) .flowStatus(BusinessStatusEnum.CANCEL.getStatus())
.hisStatus(BusinessStatusEnum.CANCEL.getStatus()) .hisStatus(BusinessStatusEnum.CANCEL.getStatus())
.handler(userIdStr) .handler(userIdStr)

View File

@ -39,12 +39,12 @@ import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskAssigneeType;
import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo;
import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.handler.WorkflowPermissionHandler; import org.dromara.workflow.handler.WorkflowPermissionHandler;
import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwTaskMapper; import org.dromara.workflow.mapper.FlwTaskMapper;
@ -81,7 +81,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final FlowTaskMapper flowTaskMapper; private final FlowTaskMapper flowTaskMapper;
private final FlowHisTaskMapper flowHisTaskMapper; private final FlowHisTaskMapper flowHisTaskMapper;
private final IdentifierGenerator identifierGenerator; private final IdentifierGenerator identifierGenerator;
private final FlowProcessEventHandler flowProcessEventHandler;
private final UserService userService; private final UserService userService;
private final FlwTaskMapper flwTaskMapper; private final FlwTaskMapper flwTaskMapper;
private final FlwCategoryMapper flwCategoryMapper; private final FlwCategoryMapper flwCategoryMapper;
@ -157,11 +156,11 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
// 获取抄送人 // 获取抄送人
List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList(); List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList();
// 设置抄送人 // 设置抄送人
completeTaskBo.getVariables().put("flowCopyList", flowCopyList); completeTaskBo.getVariables().put(FlowConstant.FLOW_COPY_LIST, flowCopyList);
// 消息类型 // 消息类型
completeTaskBo.getVariables().put("messageType", messageType); completeTaskBo.getVariables().put(FlowConstant.MESSAGE_TYPE, messageType);
// 消息通知 // 消息通知
completeTaskBo.getVariables().put("notice", notice); completeTaskBo.getVariables().put(FlowConstant.MESSAGE_NOTICE, notice);
FlowTask flowTask = flowTaskMapper.selectById(taskId); FlowTask flowTask = flowTaskMapper.selectById(taskId);
@ -169,11 +168,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
throw new ServiceException("流程任务不存在或任务已审批!"); throw new ServiceException("流程任务不存在或任务已审批!");
} }
Instance ins = insService.getById(flowTask.getInstanceId()); Instance ins = insService.getById(flowTask.getInstanceId());
// 获取流程定义信息
Definition definition = defService.getById(flowTask.getDefinitionId());
// 检查流程状态是否为草稿已撤销或已退回状态若是则执行流程提交监听 // 检查流程状态是否为草稿已撤销或已退回状态若是则执行流程提交监听
if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) { if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
flowProcessEventHandler.processHandler(definition.getFlowCode(), ins, ins.getFlowStatus(), null, true); completeTaskBo.getVariables().put(FlowConstant.SUBMIT, true);
} }
// 设置弹窗处理人 // 设置弹窗处理人
Map<String, Object> assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap()); Map<String, Object> assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap());