From b7517cbbd4bbab0475e64c22a89be550c6f2e8db 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: Thu, 6 Mar 2025 17:36:47 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=B0=86=20WorkflowUtils=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=B1=BB=E6=94=B9=E4=B8=BA=20FlwCommonService=20=E6=9B=B4?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E7=9A=84=E4=B8=9A=E5=8A=A1=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/service/IFlwCommonService.java | 73 +++++++++++ .../impl/FlwCommonServiceImpl.java} | 123 ++++++++++++++---- .../impl/FlwDefinitionServiceImpl.java | 5 +- .../service/impl/FlwInstanceServiceImpl.java | 9 +- .../service/impl/FlwTaskServiceImpl.java | 83 +++--------- 5 files changed, 194 insertions(+), 99 deletions(-) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java rename ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/{utils/WorkflowUtils.java => service/impl/FlwCommonServiceImpl.java} (53%) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java new file mode 100644 index 000000000..2830416d4 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java @@ -0,0 +1,73 @@ +package org.dromara.workflow.service; + +import org.dromara.warm.flow.core.entity.User; +import org.dromara.warm.flow.core.service.UserService; + +import java.util.List; +import java.util.Set; + +/** + * 通用 工作流服务 + * + * @author LionLi + */ +public interface IFlwCommonService { + + /** + * 获取工作流用户service + */ + UserService getFlowUserService(); + + /** + * 构建工作流用户 + * + * @param userList 办理用户 + * @param taskId 任务ID + * @return 用户 + */ + Set buildUser(List userList, Long taskId); + + /** + * 构建工作流用户 + * + * @param userIdList 办理用户 + * @param taskId 任务ID + * @return 用户 + */ + Set buildFlowUser(List userIdList, Long taskId); + + /** + * 发送消息 + * + * @param flowName 流程定义名称 + * @param messageType 消息类型 + * @param message 消息内容,为空则发送默认配置的消息内容 + */ + void sendMessage(String flowName, Long instId, List messageType, String message); + + /** + * 驳回 + * + * @param message 审批意见 + * @param instanceId 流程实例id + * @param targetNodeCode 目标节点 + * @param flowStatus 流程状态 + * @param flowHisStatus 节点操作状态 + */ + void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus); + + /** + * 申请人节点编码 + * + * @param definitionId 流程定义id + * @return 申请人节点编码 + */ + String applyNodeCode(Long definitionId); + + /** + * 删除运行中的任务 + * + * @param taskIds 任务id + */ + void deleteRunTask(List taskIds); +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java similarity index 53% rename from ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java rename to ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java index 3c75e8682..bbc5734c9 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java @@ -1,15 +1,21 @@ -package org.dromara.workflow.utils; +package org.dromara.workflow.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StreamUtils; +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.constant.ExceptionCons; import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.Node; +import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.entity.User; import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.SkipType; @@ -22,36 +28,44 @@ import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.warm.flow.orm.entity.FlowUser; import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; +import org.dromara.workflow.common.ConditionalOnEnable; +import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.TaskAssigneeType; +import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwTaskAssigneeService; import org.dromara.workflow.service.IFlwTaskService; +import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; /** * 工作流工具 * - * @author may + * @author LionLi */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class WorkflowUtils { +@ConditionalOnEnable +@Slf4j +@RequiredArgsConstructor +@Service +public class FlwCommonServiceImpl implements IFlwCommonService { - private static final IFlwTaskAssigneeService TASK_ASSIGNEE_SERVICE = SpringUtils.getBean(IFlwTaskAssigneeService.class); - private static final IFlwTaskService FLW_TASK_SERVICE = SpringUtils.getBean(IFlwTaskService.class); - private static final FlowNodeMapper FLOW_NODE_MAPPER = SpringUtils.getBean(FlowNodeMapper.class); - private static final FlowTaskMapper FLOW_TASK_MAPPER = SpringUtils.getBean(FlowTaskMapper.class); - private static final UserService USER_SERVICE = SpringUtils.getBean(UserService.class); - private static final TaskService TASK_SERVICE = SpringUtils.getBean(TaskService.class); - private static final NodeService NODE_SERVICE = SpringUtils.getBean(NodeService.class); + private final FlowNodeMapper flowNodeMapper; + private final FlowTaskMapper flowTaskMapper; + private final UserService userService; + private final TaskService taskService; + private final NodeService nodeService; /** * 获取工作流用户service */ - public static UserService getFlowUserService() { - return USER_SERVICE; + @Override + public UserService getFlowUserService() { + return userService; } /** @@ -61,15 +75,17 @@ public class WorkflowUtils { * @param taskId 任务ID * @return 用户 */ - public static Set buildUser(List userList, Long taskId) { + @Override + public Set buildUser(List userList, Long taskId) { if (CollUtil.isEmpty(userList)) { return Set.of(); } Set list = new HashSet<>(); Set processedBySet = new HashSet<>(); + IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class); for (User user : userList) { // 根据 processedBy 前缀判断处理人类型,分别获取用户列表 - List users = TASK_ASSIGNEE_SERVICE.fetchUsersByStorageId(user.getProcessedBy()); + List users = taskAssigneeService.fetchUsersByStorageId(user.getProcessedBy()); // 转换为 FlowUser 并添加到结果集合 if (CollUtil.isNotEmpty(users)) { users.forEach(dto -> { @@ -95,7 +111,8 @@ public class WorkflowUtils { * @param taskId 任务ID * @return 用户 */ - public static Set buildFlowUser(List userIdList, Long taskId) { + @Override + public Set buildFlowUser(List userIdList, Long taskId) { if (CollUtil.isEmpty(userIdList)) { return Set.of(); } @@ -114,6 +131,52 @@ public class WorkflowUtils { return list; } + /** + * 发送消息 + * + * @param flowName 流程定义名称 + * @param messageType 消息类型 + * @param message 消息内容,为空则发送默认配置的消息内容 + */ + @Override + public void sendMessage(String flowName, Long instId, List messageType, String message) { + IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class); + List userList = new ArrayList<>(); + List list = flwTaskService.selectByInstId(instId); + if (StringUtils.isBlank(message)) { + message = "有新的【" + flowName + "】单据已经提交至您,请您及时处理。"; + } + for (Task task : list) { + List users = flwTaskService.currentTaskAllUser(task.getId()); + if (CollUtil.isNotEmpty(users)) { + userList.addAll(users); + } + } + if (CollUtil.isNotEmpty(userList)) { + for (String code : messageType) { + MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code); + if (ObjectUtil.isNotEmpty(messageTypeEnum)) { + switch (messageTypeEnum) { + case SYSTEM_MESSAGE: + SseMessageDto dto = new SseMessageDto(); + dto.setUserIds(StreamUtils.toList(userList, UserDTO::getUserId).stream().distinct().collect(Collectors.toList())); + dto.setMessage(message); + SseMessageUtils.publishMessage(dto); + break; + case EMAIL_MESSAGE: + MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message); + break; + case SMS_MESSAGE: + //todo 短信发送 + break; + default: + throw new IllegalStateException("Unexpected value: " + messageTypeEnum); + } + } + } + } + } + /** * 驳回 * @@ -123,8 +186,10 @@ public class WorkflowUtils { * @param flowStatus 流程状态 * @param flowHisStatus 节点操作状态 */ - public static void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus) { - List list = FLW_TASK_SERVICE.selectByInstId(instanceId); + @Override + public void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus) { + IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class); + List list = flwTaskService.selectByInstId(instanceId); if (CollUtil.isNotEmpty(list)) { List tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode)); if (list.size() == tasks.size()) { @@ -132,7 +197,7 @@ public class WorkflowUtils { } } for (FlowTask task : list) { - List userList = FLW_TASK_SERVICE.currentTaskAllUser(task.getId()); + List userList = flwTaskService.currentTaskAllUser(task.getId()); FlowParams flowParams = FlowParams.build(); flowParams.nodeCode(targetNodeCode); flowParams.message(message); @@ -143,7 +208,7 @@ public class WorkflowUtils { if (CollUtil.isNotEmpty(userList)) { flowParams.handler(userList.get(0).getUserId().toString()); } - TASK_SERVICE.skip(task.getId(), flowParams); + taskService.skip(task.getId(), flowParams); } //解决会签多人审批问题 backTask(message, instanceId, targetNodeCode, flowStatus, flowHisStatus); @@ -155,13 +220,14 @@ public class WorkflowUtils { * @param definitionId 流程定义id * @return 申请人节点编码 */ - public static String applyNodeCode(Long definitionId) { + @Override + public String applyNodeCode(Long definitionId) { //获取已发布的流程节点 - List flowNodes = FLOW_NODE_MAPPER.selectList(new LambdaQueryWrapper().eq(FlowNode::getDefinitionId, definitionId)); + List flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper().eq(FlowNode::getDefinitionId, definitionId)); AssertUtil.isTrue(CollUtil.isEmpty(flowNodes), ExceptionCons.NOT_PUBLISH_NODE); Node startNode = flowNodes.stream().filter(t -> NodeType.isStart(t.getNodeType())).findFirst().orElse(null); AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE); - Node nextNode = NODE_SERVICE.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey()); + Node nextNode = nodeService.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey()); return nextNode.getNodeCode(); } @@ -170,11 +236,12 @@ public class WorkflowUtils { * * @param taskIds 任务id */ - public static void deleteRunTask(List taskIds) { + @Override + public void deleteRunTask(List taskIds) { if (CollUtil.isEmpty(taskIds)) { return; } - USER_SERVICE.deleteByTaskIds(taskIds); - FLOW_TASK_MAPPER.deleteByIds(taskIds); + userService.deleteByTaskIds(taskIds); + flowTaskMapper.deleteByIds(taskIds); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java index b4ebcdf08..7f0f67ec6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java @@ -33,8 +33,8 @@ import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.FlowCategory; import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.dromara.workflow.mapper.FlwCategoryMapper; +import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwDefinitionService; -import org.dromara.workflow.utils.WorkflowUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +64,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { private final FlowNodeMapper flowNodeMapper; private final FlowSkipMapper flowSkipMapper; private final FlwCategoryMapper flwCategoryMapper; + private final IFlwCommonService flwCommonService; /** * 查询流程定义列表 @@ -125,7 +126,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { List errorMsg = new ArrayList<>(); if (CollUtil.isNotEmpty(flowNodes)) { for (FlowNode flowNode : flowNodes) { - String applyNodeCode = WorkflowUtils.applyNodeCode(id); + String applyNodeCode = flwCommonService.applyNodeCode(id); if (StringUtils.isBlank(flowNode.getPermissionFlag()) && !applyNodeCode.equals(flowNode.getNodeCode()) && NodeType.BETWEEN.getKey().equals(flowNode.getNodeType())) { errorMsg.add(flowNode.getNodeName()); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index db8ab71b9..5e4f4613e 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -46,9 +46,9 @@ import org.dromara.workflow.domain.vo.FlowVariableVo; import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwInstanceMapper; +import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwInstanceService; import org.dromara.workflow.service.IFlwTaskService; -import org.dromara.workflow.utils.WorkflowUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -76,6 +76,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { private final IFlwTaskService flwTaskService; private final FlwInstanceMapper flwInstanceMapper; private final FlwCategoryMapper flwCategoryMapper; + private final IFlwCommonService flwCommonService; /** * 分页查询正在运行的流程实例 @@ -245,15 +246,15 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { } String message = bo.getMessage(); BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus()); - String applyNodeCode = WorkflowUtils.applyNodeCode(definition.getId()); + String applyNodeCode = flwCommonService.applyNodeCode(definition.getId()); //撤销 - WorkflowUtils.backTask(message, instance.getId(), applyNodeCode, BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus()); + flwCommonService.backTask(message, instance.getId(), applyNodeCode, BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus()); //判断或签节点是否有多个,只保留一个 List currentTaskList = taskService.list(FlowEngine.newTask().setInstanceId(instance.getId())); if (CollUtil.isNotEmpty(currentTaskList)) { if (currentTaskList.size() > 1) { currentTaskList.remove(0); - WorkflowUtils.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId)); + flwCommonService.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId)); } } 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 c9c3315f8..ec2ab57d1 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 @@ -22,12 +22,9 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.common.sse.dto.SseMessageDto; -import org.dromara.common.sse.utils.SseMessageUtils; import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.*; import org.dromara.warm.flow.core.enums.NodeType; @@ -41,7 +38,6 @@ import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; import org.dromara.workflow.common.ConditionalOnEnable; -import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.bo.*; @@ -51,9 +47,9 @@ import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.handler.WorkflowPermissionHandler; import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwTaskMapper; +import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwTaskAssigneeService; import org.dromara.workflow.service.IFlwTaskService; -import org.dromara.workflow.utils.WorkflowUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -89,6 +85,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { private final FlwCategoryMapper flwCategoryMapper; private final FlowNodeMapper flowNodeMapper; private final IFlwTaskAssigneeService flwTaskAssigneeService; + private final IFlwCommonService flwCommonService; /** * 启动任务 @@ -182,7 +179,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Instance instance = taskService.skip(taskId, flowParams); this.setHandler(instance, flowTask, flowCopyList); // 消息通知 - this.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice); + flwCommonService.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice); //设置下一环节处理人 setNextHandler(ins.getId()); return true; @@ -205,10 +202,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (variableMap != null && variableMap.containsKey(task.getNodeCode())) { String userIds = variableMap.get(task.getNodeCode()).toString(); // 批量删除现有任务的办理人记录 - WorkflowUtils.getFlowUserService().deleteByTaskIds(List.of(task.getId())); + flwCommonService.getFlowUserService().deleteByTaskIds(List.of(task.getId())); // 批量新增任务办理人记录 - Set users = WorkflowUtils.buildFlowUser(List.of(userIds.split(StringUtils.SEPARATOR)), task.getId()); - WorkflowUtils.getFlowUserService().saveBatch(new ArrayList<>(users)); + Set users = flwCommonService.buildFlowUser(List.of(userIds.split(StringUtils.SEPARATOR)), task.getId()); + flwCommonService.getFlowUserService().saveBatch(new ArrayList<>(users)); variableMap.remove(task.getNodeCode()); } } @@ -266,7 +263,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } List taskIdList = StreamUtils.toList(flowTasks, FlowTask::getId); // 获取与当前任务关联的用户列表 - List associatedUsers = WorkflowUtils.getFlowUserService().getByAssociateds(taskIdList); + List associatedUsers = flwCommonService.getFlowUserService().getByAssociateds(taskIdList); if (CollUtil.isEmpty(associatedUsers)) { return; } @@ -275,16 +272,16 @@ public class FlwTaskServiceImpl implements IFlwTaskService { for (FlowTask flowTask : flowTasks) { List users = StreamUtils.filter(associatedUsers, user -> Objects.equals(user.getAssociated(), flowTask.getId())); if (CollUtil.isNotEmpty(users)) { - userList.addAll(WorkflowUtils.buildUser(users, flowTask.getId())); + userList.addAll(flwCommonService.buildUser(users, flowTask.getId())); } } // 批量删除现有任务的办理人记录 - WorkflowUtils.getFlowUserService().deleteByTaskIds(taskIdList); + flwCommonService.getFlowUserService().deleteByTaskIds(taskIdList); // 确保要保存的 userList 不为空 if (CollUtil.isEmpty(userList)) { return; } - WorkflowUtils.getFlowUserService().saveBatch(userList); + flwCommonService.getFlowUserService().saveBatch(userList); } /** @@ -324,7 +321,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return flowUser; }).collect(Collectors.toList()); // 批量保存抄送人员 - WorkflowUtils.getFlowUserService().saveBatch(userList); + flwCommonService.getFlowUserService().saveBatch(userList); } /** @@ -452,7 +449,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { BusinessStatusEnum.checkBackStatus(inst.getFlowStatus()); Long definitionId = task.getDefinitionId(); Definition definition = defService.getById(definitionId); - String applyNodeCode = WorkflowUtils.applyNodeCode(definitionId); + String applyNodeCode = flwCommonService.applyNodeCode(definitionId); FlowParams flowParams = FlowParams.build(); flowParams.nodeCode(bo.getNodeCode()); flowParams.message(message); @@ -465,7 +462,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Instance instance = insService.getById(inst.getId()); this.setHandler(instance, task, null); // 消息通知 - this.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); + flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); return true; } catch (Exception e) { log.error(e.getMessage(), e); @@ -565,7 +562,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } flowTaskVo.setButtonList(flowTaskVo.getButtonList(flowNode.getExt())); flowTaskVo.setNodeRatio(flowNode.getNodeRatio()); - flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(WorkflowUtils.applyNodeCode(task.getDefinitionId()))); + flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(flwCommonService.applyNodeCode(task.getDefinitionId()))); return flowTaskVo; } @@ -737,7 +734,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { List flowTasks = this.selectByIdList(taskIdList); // 批量删除现有任务的办理人记录 if (CollUtil.isNotEmpty(flowTasks)) { - WorkflowUtils.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId)); + flwCommonService.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId)); List userList = flowTasks.stream() .map(flowTask -> { FlowUser flowUser = new FlowUser(); @@ -748,7 +745,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { }) .collect(Collectors.toList()); if (CollUtil.isNotEmpty(userList)) { - WorkflowUtils.getFlowUserService().saveBatch(userList); + flwCommonService.getFlowUserService().saveBatch(userList); } } } catch (Exception e) { @@ -767,7 +764,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public Map> currentTaskAllUser(List taskIdList) { Map> map = new HashMap<>(); // 获取与当前任务关联的用户列表 - List associatedUsers = WorkflowUtils.getFlowUserService().getByAssociateds(taskIdList); + List associatedUsers = flwCommonService.getFlowUserService().getByAssociateds(taskIdList); Map> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated); for (Map.Entry> entry : listMap.entrySet()) { List value = entry.getValue(); @@ -787,7 +784,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { @Override public List currentTaskAllUser(Long taskId) { // 获取与当前任务关联的用户列表 - List userList = WorkflowUtils.getFlowUserService().getByAssociateds(Collections.singletonList(taskId)); + List userList = flwCommonService.getFlowUserService().getByAssociateds(Collections.singletonList(taskId)); if (CollUtil.isEmpty(userList)) { return Collections.emptyList(); } @@ -807,48 +804,4 @@ public class FlwTaskServiceImpl implements IFlwTaskService { .eq(FlowNode::getDefinitionId, definitionId)); } - /** - * 发送消息 - * - * @param flowName 流程定义名称 - * @param messageType 消息类型 - * @param message 消息内容,为空则发送默认配置的消息内容 - */ - public void sendMessage(String flowName, Long instId, List messageType, String message) { - List userList = new ArrayList<>(); - List list = this.selectByInstId(instId); - if (StringUtils.isBlank(message)) { - message = "有新的【" + flowName + "】单据已经提交至您,请您及时处理。"; - } - for (Task task : list) { - List users = this.currentTaskAllUser(task.getId()); - if (CollUtil.isNotEmpty(users)) { - userList.addAll(users); - } - } - if (CollUtil.isNotEmpty(userList)) { - for (String code : messageType) { - MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code); - if (ObjectUtil.isNotEmpty(messageTypeEnum)) { - switch (messageTypeEnum) { - case SYSTEM_MESSAGE: - SseMessageDto dto = new SseMessageDto(); - dto.setUserIds(StreamUtils.toList(userList, UserDTO::getUserId).stream().distinct().collect(Collectors.toList())); - dto.setMessage(message); - SseMessageUtils.publishMessage(dto); - break; - case EMAIL_MESSAGE: - MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message); - break; - case SMS_MESSAGE: - //todo 短信发送 - break; - default: - throw new IllegalStateException("Unexpected value: " + messageTypeEnum); - } - } - } - } - } - }