From 618688161567a5e92263874076c50d3d5eff48fc Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 17 六月 2024 11:12:52 +0800 Subject: [PATCH] update 优化 特殊service传值方式 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java | 141 +++++++++++++++------------------------------- 1 files changed, 47 insertions(+), 94 deletions(-) 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/utils/WorkflowUtils.java index 6979671..d7c4472 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/utils/WorkflowUtils.java @@ -1,32 +1,30 @@ package org.dromara.workflow.utils; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.dromara.common.core.domain.dto.RoleDTO; +import org.dromara.common.core.domain.dto.UserDTO; +import org.dromara.common.core.service.UserService; 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.core.utils.reflect.ReflectUtils; import org.dromara.common.mail.utils.MailUtils; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.websocket.dto.WebSocketMessageDto; import org.dromara.common.websocket.utils.WebSocketUtils; -import org.dromara.system.domain.SysUserRole; -import org.dromara.system.domain.vo.SysUserVo; import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.workflow.common.enums.BusinessStatusEnum; import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.TaskStatusEnum; -import org.dromara.workflow.domain.ActHiProcinst; import org.dromara.workflow.domain.ActHiTaskinst; -import org.dromara.workflow.domain.vo.*; +import org.dromara.workflow.domain.vo.MultiInstanceVo; +import org.dromara.workflow.domain.vo.ParticipantVo; import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd; import org.dromara.workflow.mapper.ActHiTaskinstMapper; -import org.dromara.workflow.service.*; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.common.engine.api.delegate.Expression; @@ -36,12 +34,11 @@ import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; import org.flowable.identitylink.api.history.HistoricIdentityLink; import org.flowable.task.api.Task; +import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.service.impl.persistence.entity.TaskEntity; import java.util.*; - -import static org.dromara.workflow.common.constant.FlowConstant.*; /** * 宸ヤ綔娴佸伐鍏� @@ -52,8 +49,6 @@ public class WorkflowUtils { private static final ProcessEngine PROCESS_ENGINE = SpringUtils.getBean(ProcessEngine.class); - private static final IWorkflowUserService WORKFLOW_USER_SERVICE = SpringUtils.getBean(IWorkflowUserService.class); - private static final IActHiProcinstService ACT_HI_PROCINST_SERVICE = SpringUtils.getBean(IActHiProcinstService.class); private static final ActHiTaskinstMapper ACT_HI_TASKINST_MAPPER = SpringUtils.getBean(ActHiTaskinstMapper.class); /** @@ -130,7 +125,7 @@ * * @param taskId 浠诲姟id */ - public static ParticipantVo getCurrentTaskParticipant(String taskId) { + 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(); @@ -138,15 +133,14 @@ List<HistoricIdentityLink> groupList = StreamUtils.filter(linksForTask, e -> StringUtils.isNotBlank(e.getGroupId())); if (CollUtil.isNotEmpty(groupList)) { List<Long> groupIds = StreamUtils.toList(groupList, e -> Long.valueOf(e.getGroupId())); - List<SysUserRole> sysUserRoles = WORKFLOW_USER_SERVICE.getUserRoleListByRoleIds(groupIds); - if (CollUtil.isNotEmpty(sysUserRoles)) { + List<Long> userIds = userService.selectUserIdsByRoleIds(groupIds); + if (CollUtil.isNotEmpty(userIds)) { participantVo.setGroupIds(groupIds); - List<Long> userIdList = StreamUtils.toList(sysUserRoles, SysUserRole::getUserId); - List<SysUserVo> sysUsers = WORKFLOW_USER_SERVICE.getUserListByIds(userIdList); - if (CollUtil.isNotEmpty(sysUsers)) { - List<Long> userIds = StreamUtils.toList(sysUsers, SysUserVo::getUserId); - List<String> nickNames = StreamUtils.toList(sysUsers, SysUserVo::getNickName); - participantVo.setCandidate(userIds); + List<UserDTO> userList = userService.selectListByIds(userIds); + if (CollUtil.isNotEmpty(userList)) { + List<Long> userIdList = StreamUtils.toList(userList, UserDTO::getUserId); + List<String> nickNames = StreamUtils.toList(userList, UserDTO::getNickName); + participantVo.setCandidate(userIdList); participantVo.setCandidateName(nickNames); participantVo.setClaim(!StringUtils.isBlank(task.getAssignee())); } @@ -161,10 +155,10 @@ } } - List<SysUserVo> sysUsers = WORKFLOW_USER_SERVICE.getUserListByIds(userIdList); - if (CollUtil.isNotEmpty(sysUsers)) { - List<Long> userIds = StreamUtils.toList(sysUsers, SysUserVo::getUserId); - List<String> nickNames = StreamUtils.toList(sysUsers, SysUserVo::getNickName); + List<UserDTO> userList = userService.selectListByIds(userIdList); + if (CollUtil.isNotEmpty(userList)) { + List<Long> userIds = StreamUtils.toList(userList, UserDTO::getUserId); + List<String> nickNames = StreamUtils.toList(userList, UserDTO::getNickName); participantVo.setCandidate(userIds); participantVo.setCandidateName(nickNames); // 鍒ゆ柇褰撳墠浠诲姟鏄惁鍏锋湁澶氫釜鍔炵悊浜� @@ -224,70 +218,11 @@ /** * 鑾峰彇褰撳墠娴佺▼鐘舵�� * - * @param processInstanceId 娴佺▼瀹炰緥id - */ - public static String getBusinessStatus(String processInstanceId) { - HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInstanceId).singleResult(); - return historicProcessInstance.getBusinessStatus(); - } - - /** - * 璁剧疆娴佺▼瀹炰緥瀵硅薄 - * - * @param obj 涓氬姟瀵硅薄 * @param businessKey 涓氬姟id */ - public static void setProcessInstanceVo(Object obj, String businessKey) { - if (StringUtils.isBlank(businessKey) || obj == null) { - return; - } - ActHiProcinst actHiProcinst = ACT_HI_PROCINST_SERVICE.selectByBusinessKey(businessKey); - if (actHiProcinst == null) { - ProcessInstanceVo processInstanceVo = new ProcessInstanceVo(); - processInstanceVo.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus()); - ReflectUtils.invokeSetter(obj, PROCESS_INSTANCE_VO, processInstanceVo); - return; - } - ProcessInstanceVo processInstanceVo = BeanUtil.toBean(actHiProcinst, ProcessInstanceVo.class); - processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus())); - ReflectUtils.invokeSetter(obj, PROCESS_INSTANCE_VO, processInstanceVo); - } - - /** - * 璁剧疆娴佺▼瀹炰緥瀵硅薄 - * - * @param obj 涓氬姟瀵硅薄 - * @param idList 涓氬姟id - * @param fieldName 涓婚敭灞炴�у悕绉� - */ - public static void setProcessInstanceListVo(Object obj, List<String> idList, String fieldName) { - if (CollUtil.isEmpty(idList) || obj == null) { - return; - } - List<ActHiProcinst> actHiProcinstList = ACT_HI_PROCINST_SERVICE.selectByBusinessKeyIn(idList); - if (obj instanceof Collection<?> collection) { - for (Object o : collection) { - String fieldValue = ReflectUtils.invokeGetter(o, fieldName).toString(); - if (CollUtil.isEmpty(actHiProcinstList)) { - ProcessInstanceVo processInstanceVo = new ProcessInstanceVo(); - processInstanceVo.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus()); - processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus())); - ReflectUtils.invokeSetter(o, PROCESS_INSTANCE_VO, processInstanceVo); - } else { - ActHiProcinst actHiProcinst = actHiProcinstList.stream().filter(e -> e.getBusinessKey().equals(fieldValue)).findFirst().orElse(null); - if (ObjectUtil.isNotEmpty(actHiProcinst)) { - ProcessInstanceVo processInstanceVo = BeanUtil.toBean(actHiProcinst, ProcessInstanceVo.class); - processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus())); - ReflectUtils.invokeSetter(o, PROCESS_INSTANCE_VO, processInstanceVo); - } else { - ProcessInstanceVo processInstanceVo = new ProcessInstanceVo(); - processInstanceVo.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus()); - processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus())); - ReflectUtils.invokeSetter(o, PROCESS_INSTANCE_VO, processInstanceVo); - } - } - } - } + public static String getBusinessStatus(String businessKey) { + HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult(); + return historicProcessInstance.getBusinessStatus(); } /** @@ -298,17 +233,17 @@ * @param messageType 娑堟伅绫诲瀷 * @param message 娑堟伅鍐呭锛屼负绌哄垯鍙戦�侀粯璁ら厤缃殑娑堟伅鍐呭 */ - public static void sendMessage(List<Task> list, String name, List<String> messageType, String message) { + 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<SysUserRole> sysUserRoles = WORKFLOW_USER_SERVICE.getUserRoleListByRoleIds(taskParticipant.getGroupIds()); - if (CollUtil.isNotEmpty(sysUserRoles)) { - userIds.addAll(StreamUtils.toList(sysUserRoles, SysUserRole::getUserId)); + List<Long> userIdList = userService.selectUserIdsByRoleIds(taskParticipant.getGroupIds()); + if (CollUtil.isNotEmpty(userIdList)) { + userIds.addAll(userIdList); } } List<Long> candidate = taskParticipant.getCandidate(); @@ -317,7 +252,7 @@ } } if (CollUtil.isNotEmpty(userIds)) { - List<SysUserVo> sysUserVoList = WORKFLOW_USER_SERVICE.getUserListByIds(new ArrayList<>(userIds)); + List<UserDTO> userList = userService.selectListByIds(new ArrayList<>(userIds)); for (String code : messageType) { MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code); if (ObjectUtil.isNotEmpty(messageTypeEnum)) { @@ -329,7 +264,7 @@ WebSocketUtils.publishMessage(dto); break; case EMAIL_MESSAGE: - MailUtils.sendText(StreamUtils.join(sysUserVoList, SysUserVo::getEmail), "鍗曟嵁瀹℃壒鎻愰啋", message); + MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "鍗曟嵁瀹℃壒鎻愰啋", message); break; case SMS_MESSAGE: //todo 鐭俊鍙戦�� @@ -339,4 +274,22 @@ } } } + + /** + * 鏍规嵁浠诲姟id鏌ヨ 褰撳墠鐢ㄦ埛鐨勪换鍔★紝妫�鏌� 褰撳墠浜哄憳 鏄惁鏄 taskId 鐨勫姙鐞嗕汉 + * + * @param taskId 浠诲姟id + * @return 缁撴灉 + */ + public static Task getTaskByCurrentUser(String taskId) { + TaskQuery taskQuery = QueryUtils.taskQuery(); + taskQuery.taskId(taskId).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); + + List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles(); + if (CollUtil.isNotEmpty(roles)) { + List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); + taskQuery.taskCandidateGroupIn(groupIds); + } + return taskQuery.singleResult(); + } } -- Gitblit v1.9.3