From 6bc28e41dee7a4871e46b3cd5c2ac636e04235fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 29 Aug 2025 10:06:22 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/WorkflowGlobalListener.java | 16 +++---- .../service/impl/FlwCommonServiceImpl.java | 48 ++++++++++++------- 2 files changed, 36 insertions(+), 28 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 79404b619..2390bb251 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 @@ -11,13 +11,13 @@ import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.listener.GlobalListener; import org.dromara.warm.flow.core.listener.ListenerVariable; -import org.dromara.warm.flow.core.service.InsService; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.enums.TaskStatusEnum; @@ -47,12 +47,11 @@ import java.util.Set; public class WorkflowGlobalListener implements GlobalListener { private final IFlwTaskService flwTaskService; - private final IFlwInstanceService instanceService; + private final IFlwInstanceService flwInstanceService; private final FlowProcessEventHandler flowProcessEventHandler; private final IFlwCommonService flwCommonService; private final IFlwNodeExtService nodeExtService; private final UserService userService; - private final InsService insService; /** * 创建监听器,任务创建时执行 @@ -159,7 +158,7 @@ public class WorkflowGlobalListener implements GlobalListener { flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, BusinessStatusEnum.BACK.getStatus(), params, false); // 修改流程实例状态 instance.setFlowStatus(BusinessStatusEnum.BACK.getStatus()); - insService.updateById(instance); + FlowEngine.insService().updateById(instance); } } } @@ -188,12 +187,9 @@ public class WorkflowGlobalListener implements GlobalListener { if (variable.containsKey(FlowConstant.MESSAGE_TYPE)) { List messageType = MapUtil.get(variable, FlowConstant.MESSAGE_TYPE, new TypeReference<>() {}); String notice = MapUtil.getStr(variable, FlowConstant.MESSAGE_NOTICE); - // 消息通知 - if (CollUtil.isNotEmpty(messageType)) { - flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); - } + flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); } - insService.removeVariables(instance.getId(), + FlowEngine.insService().removeVariables(instance.getId(), FlowConstant.FLOW_COPY_LIST, FlowConstant.MESSAGE_TYPE, FlowConstant.MESSAGE_NOTICE, @@ -217,7 +213,7 @@ public class WorkflowGlobalListener implements GlobalListener { if (flwTaskService.isTaskEnd(instanceId)) { String status = BusinessStatusEnum.FINISH.getStatus(); // 更新流程状态为已完成 - instanceService.updateStatus(instanceId, status); + flwInstanceService.updateStatus(instanceId, status); log.info("流程已结束,状态更新为: {}", status); return status; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java index efc25a3f8..d0b53853b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java @@ -11,9 +11,8 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.sse.dto.SseMessageDto; import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.entity.Node; -import org.dromara.warm.flow.core.enums.SkipType; -import org.dromara.warm.flow.core.service.NodeService; import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.enums.MessageTypeEnum; @@ -21,8 +20,10 @@ import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwTaskService; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.stream.Collectors; +import java.util.Set; /** @@ -35,19 +36,27 @@ import java.util.stream.Collectors; @RequiredArgsConstructor @Service public class FlwCommonServiceImpl implements IFlwCommonService { - private final NodeService nodeService; + + private static final String DEFAULT_SUBJECT = "单据审批提醒"; /** - * 发送消息 + * 根据流程实例发送消息给当前处理人 * * @param flowName 流程定义名称 - * @param messageType 消息类型 - * @param message 消息内容,为空则发送默认配置的消息内容 + * @param instId 流程实例ID + * @param messageType 消息类型列表 + * @param message 消息内容,为空则使用默认消息 */ @Override public void sendMessage(String flowName, Long instId, List messageType, String message) { + if (CollUtil.isNotEmpty(messageType)) { + return; + } IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class); List list = flwTaskService.selectByInstId(instId); + if (CollUtil.isEmpty(list)) { + return; + } if (StringUtils.isBlank(message)) { message = "有新的【" + flowName + "】单据已经提交至您,请您及时处理。"; } @@ -55,19 +64,25 @@ public class FlwCommonServiceImpl implements IFlwCommonService { if (CollUtil.isEmpty(userList)) { return; } - sendMessage(messageType, message, "单据审批提醒", userList); + sendMessage(messageType, message, DEFAULT_SUBJECT, userList); } /** - * 发送消息 + * 发送消息给指定用户列表 * - * @param messageType 消息类型 + * @param messageType 消息类型列表 * @param message 消息内容 * @param subject 邮件标题 - * @param userList 接收用户 + * @param userList 接收用户列表 */ @Override public void sendMessage(List messageType, String message, String subject, List userList) { + if (CollUtil.isEmpty(messageType) || CollUtil.isEmpty(userList)) { + return; + } + List userIds = new ArrayList<>(StreamUtils.toSet(userList, UserDTO::getUserId)); + Set emails = StreamUtils.toSet(userList, UserDTO::getEmail); + for (String code : messageType) { MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code); if (ObjectUtil.isEmpty(messageTypeEnum)) { @@ -76,13 +91,11 @@ public class FlwCommonServiceImpl implements IFlwCommonService { switch (messageTypeEnum) { case SYSTEM_MESSAGE -> { SseMessageDto dto = new SseMessageDto(); - dto.setUserIds(StreamUtils.toList(userList, UserDTO::getUserId).stream().distinct().collect(Collectors.toList())); + dto.setUserIds(userIds); dto.setMessage(message); SseMessageUtils.publishMessage(dto); } - case EMAIL_MESSAGE -> { - MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), subject, message); - } + case EMAIL_MESSAGE -> MailUtils.sendText(emails, subject, message); case SMS_MESSAGE -> { //todo 短信发送 } @@ -100,8 +113,7 @@ public class FlwCommonServiceImpl implements IFlwCommonService { */ @Override public String applyNodeCode(Long definitionId) { - Node startNode = nodeService.getStartNode(definitionId); - Node nextNode = nodeService.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey()); - return nextNode.getNodeCode(); + List firstBetweenNode = FlowEngine.nodeService().getFirstBetweenNode(definitionId, new HashMap<>()); + return firstBetweenNode.get(0).getNodeCode(); } }