ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/AttachmentCmd.java
@@ -3,7 +3,6 @@ import cn.hutool.core.collection.CollUtil; import org.dromara.common.core.domain.dto.OssDTO; import org.dromara.common.core.service.OssService; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.flowable.common.engine.impl.interceptor.Command; @@ -28,17 +27,20 @@ private final String processInstanceId; public AttachmentCmd(String fileId, String taskId, String processInstanceId) { private final OssService ossService; public AttachmentCmd(String fileId, String taskId, String processInstanceId, OssService ossService) { this.fileId = fileId; this.taskId = taskId; this.processInstanceId = processInstanceId; this.ossService = ossService; } @Override public Boolean execute(CommandContext commandContext) { try { if (StringUtils.isNotBlank(fileId)) { List<OssDTO> ossList = SpringUtils.getBean(OssService.class).selectByIds(fileId); List<OssDTO> ossList = ossService.selectByIds(fileId); if (CollUtil.isNotEmpty(ossList)) { for (OssDTO oss : ossList) { AttachmentEntityManager attachmentEntityManager = CommandContextUtil.getAttachmentEntityManager(); ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java
@@ -10,6 +10,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -77,6 +78,7 @@ private final IWfTaskBackNodeService wfTaskBackNodeService; private final IWfNodeConfigService wfNodeConfigService; private final FlowProcessEventHandler flowProcessEventHandler; private final UserService userService; @Value("${flowable.activity-font-name}") private String activityFontName; @@ -323,7 +325,7 @@ historyInfoVo.setEndTime(infoVo.getEndTime() == null ? null : infoVo.getEndTime()); historyInfoVo.setRunDuration(infoVo.getEndTime() == null ? null : infoVo.getRunDuration()); if (ObjectUtil.isEmpty(infoVo.getAssignee())) { ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(infoVo.getId()); ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(infoVo.getId(), userService); if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { historyInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); } @@ -338,7 +340,7 @@ historyInfoVo.setEndTime(e.getEndTime() == null ? null : e.getEndTime()); historyInfoVo.setRunDuration(e.getEndTime() == null ? null : e.getRunDuration()); if (ObjectUtil.isEmpty(e.getAssignee())) { ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(e.getId()); ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(e.getId(), userService); if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { historyInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); } @@ -394,7 +396,7 @@ } //设置人员id if (ObjectUtil.isEmpty(historicTaskInstance.getAssignee())) { ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(historicTaskInstance.getId()); ParticipantVo participantVo = WorkflowUtils.getCurrentTaskParticipant(historicTaskInstance.getId(), userService); if (ObjectUtil.isNotEmpty(participantVo) && CollUtil.isNotEmpty(participantVo.getCandidate())) { actHistoryInfoVo.setAssignee(StreamUtils.join(participantVo.getCandidate(), Convert::toStr)); } @@ -675,7 +677,7 @@ message = "您的【" + processInstance.getName() + "】单据还未审批,请您及时处理。"; } List<Task> list = QueryUtils.taskQuery(taskUrgingBo.getProcessInstanceId()).list(); WorkflowUtils.sendMessage(list, processInstance.getName(), taskUrgingBo.getMessageType(), message); WorkflowUtils.sendMessage(list, processInstance.getName(), taskUrgingBo.getMessageType(), message, userService); } catch (ServiceException e) { throw new ServiceException(e.getMessage()); } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
@@ -10,6 +10,7 @@ import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.OssService; import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; @@ -78,8 +79,9 @@ private final ActHiTaskinstMapper actHiTaskinstMapper; private final IWfNodeConfigService wfNodeConfigService; private final IWfDefinitionConfigService wfDefinitionConfigService; private final UserService userService; private final FlowProcessEventHandler flowProcessEventHandler; private final UserService userService; private final OssService ossService; /** * 启动任务 @@ -175,7 +177,7 @@ return true; } //附件上传 AttachmentCmd attachmentCmd = new AttachmentCmd(completeTaskBo.getFileId(), task.getId(), task.getProcessInstanceId()); AttachmentCmd attachmentCmd = new AttachmentCmd(completeTaskBo.getFileId(), task.getId(), task.getProcessInstanceId(), ossService); managementService.executeCommand(attachmentCmd); String businessStatus = WorkflowUtils.getBusinessStatus(processInstance.getBusinessKey()); //流程提交监听 @@ -239,7 +241,7 @@ */ @Async public void sendMessage(List<Task> list, String name, List<String> messageType, String message) { WorkflowUtils.sendMessage(list, name, messageType, message); WorkflowUtils.sendMessage(list, name, messageType, message, userService); } /** @@ -273,7 +275,7 @@ List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId(), userService)); task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo); @@ -338,7 +340,7 @@ }); } taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId(), userService)); taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(taskVo::setWfNodeConfigVo); ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
@@ -125,8 +125,7 @@ * * @param taskId 任务id */ public static ParticipantVo getCurrentTaskParticipant(String taskId) { UserService userService = SpringUtils.getBean(UserService.class); public static ParticipantVo getCurrentTaskParticipant(String taskId, UserService userService) { ParticipantVo participantVo = new ParticipantVo(); List<HistoricIdentityLink> linksForTask = PROCESS_ENGINE.getHistoryService().getHistoricIdentityLinksForTask(taskId); Task task = QueryUtils.taskQuery().taskId(taskId).singleResult(); @@ -234,14 +233,13 @@ * @param messageType 消息类型 * @param message 消息内容,为空则发送默认配置的消息内容 */ public static void sendMessage(List<Task> list, String name, List<String> messageType, String message) { UserService userService = SpringUtils.getBean(UserService.class); public static void sendMessage(List<Task> list, String name, List<String> messageType, String message, UserService userService) { Set<Long> userIds = new HashSet<>(); if (StringUtils.isBlank(message)) { message = "有新的【" + name + "】单据已经提交至您的待办,请您及时处理。"; } for (Task t : list) { ParticipantVo taskParticipant = WorkflowUtils.getCurrentTaskParticipant(t.getId()); ParticipantVo taskParticipant = WorkflowUtils.getCurrentTaskParticipant(t.getId(), userService); if (CollUtil.isNotEmpty(taskParticipant.getGroupIds())) { List<Long> userIdList = userService.selectUserIdsByRoleIds(taskParticipant.getGroupIds()); if (CollUtil.isNotEmpty(userIdList)) {