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 79b910cb..30773899 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 @@ -12,13 +12,13 @@ import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.system.api.RemoteUserService; +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; @@ -48,11 +48,10 @@ 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 InsService insService; @DubboReference private RemoteUserService remoteUserService; @@ -162,7 +161,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); } } } @@ -191,12 +190,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, @@ -220,7 +216,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 1628514e..a1de00f7 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.resource.api.RemoteMailService; import org.dromara.resource.api.RemoteMessageService; import org.dromara.system.api.domain.vo.RemoteUserVo; +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,9 @@ 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; /** @@ -36,7 +36,7 @@ import java.util.stream.Collectors; @Service public class FlwCommonServiceImpl implements IFlwCommonService { - private final NodeService nodeService; + private static final String DEFAULT_SUBJECT = "单据审批提醒"; @DubboReference private RemoteMessageService remoteMessageService; @@ -44,16 +44,23 @@ public class FlwCommonServiceImpl implements IFlwCommonService { private RemoteMailService remoteMailService; /** - * 发送消息 + * 根据流程实例发送消息给当前处理人 * * @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 + "】单据已经提交至您,请您及时处理。"; } @@ -61,19 +68,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, RemoteUserVo::getUserId)); + String emails = StreamUtils.join(userList, RemoteUserVo::getEmail); + for (String code : messageType) { MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code); if (ObjectUtil.isEmpty(messageTypeEnum)) { @@ -81,11 +94,10 @@ public class FlwCommonServiceImpl implements IFlwCommonService { } switch (messageTypeEnum) { case SYSTEM_MESSAGE -> { - List userIds = StreamUtils.toList(userList, RemoteUserVo::getUserId).stream().distinct().collect(Collectors.toList()); remoteMessageService.publishMessage(userIds, message); } case EMAIL_MESSAGE -> { - remoteMailService.send(StreamUtils.join(userList, RemoteUserVo::getEmail), "单据审批提醒", message); + remoteMailService.send(emails, subject, message); } case SMS_MESSAGE -> { //todo 短信发送 @@ -103,9 +115,8 @@ 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(); } }