From fd4c91301ea339ff477f2a1c66c068d6864171a5 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期五, 15 三月 2024 13:00:16 +0800
Subject: [PATCH] !496 工作流工具方法优化 Merge pull request !496 from 秋辞未寒/dev

---
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java |   20 ++++++++++
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java          |   41 +++++++++++---------
 2 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
index d7ba1bf..a282958 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
@@ -3,6 +3,9 @@
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 /**
  * 娑堟伅绫诲瀷鏋氫妇
  *
@@ -27,5 +30,22 @@
     private final String code;
 
     private final String desc;
+
+    private final static Map<String, MessageTypeEnum> MESSAGE_TYPE_ENUM_MAP = new ConcurrentHashMap<>(MessageTypeEnum.values().length);
+
+    static {
+        for (MessageTypeEnum messageType : MessageTypeEnum.values()) {
+            MESSAGE_TYPE_ENUM_MAP.put(messageType.code, messageType);
+        }
+    }
+
+    /**
+     * 鏍规嵁娑堟伅绫诲瀷 code 鑾峰彇 MessageTypeEnum
+     * @param code 娑堟伅绫诲瀷code
+     * @return MessageTypeEnum
+     */
+    public static MessageTypeEnum getByCode(String code) {
+        return MESSAGE_TYPE_ENUM_MAP.get(code);
+    }
 }
 
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 6f75fb9..96a5089 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
@@ -95,6 +95,7 @@
      */
     public static void createCopyTask(List<Task> parentTaskList, List<Long> userIds) {
         List<Task> list = new ArrayList<>();
+        String tenantId = TenantHelper.getTenantId();
         for (Task parentTask : parentTaskList) {
             for (Long userId : userIds) {
                 TaskEntity newTask = (TaskEntity) PROCESS_ENGINE.getTaskService().newTask();
@@ -104,7 +105,7 @@
                 newTask.setProcessDefinitionId(parentTask.getProcessDefinitionId());
                 newTask.setProcessInstanceId(parentTask.getProcessInstanceId());
                 newTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey());
-                newTask.setTenantId(TenantHelper.getTenantId());
+                newTask.setTenantId(tenantId);
                 list.add(newTask);
             }
         }
@@ -117,7 +118,7 @@
             actHiTaskinst.setProcDefId(processDefinitionId);
             actHiTaskinst.setProcInstId(processInstanceId);
             actHiTaskinst.setScopeType(TaskStatusEnum.COPY.getStatus());
-            actHiTaskinst.setTenantId(TenantHelper.getTenantId());
+            actHiTaskinst.setTenantId(tenantId);
             LambdaUpdateWrapper<ActHiTaskinst> updateWrapper = new LambdaUpdateWrapper<>();
             updateWrapper.in(ActHiTaskinst::getId, taskIds);
             ACT_HI_TASKINST_MAPPER.update(actHiTaskinst, updateWrapper);
@@ -169,11 +170,10 @@
                     List<String> nickNames = StreamUtils.toList(sysUsers, SysUserVo::getNickName);
                     participantVo.setCandidate(userIds);
                     participantVo.setCandidateName(nickNames);
-                    if (StringUtils.isBlank(task.getAssignee()) && CollUtil.isNotEmpty(candidateList) && candidateList.size() > 1) {
-                        participantVo.setClaim(false);
-                    }
-                    if (!StringUtils.isBlank(task.getAssignee()) && CollUtil.isNotEmpty(candidateList) && candidateList.size() > 1) {
-                        participantVo.setClaim(true);
+                    // 鍒ゆ柇褰撳墠浠诲姟鏄惁鍏锋湁澶氫釜鍔炵悊浜�
+                    if (CollUtil.isNotEmpty(candidateList) && candidateList.size() > 1) {
+                        // 濡傛灉 assignee 瀛樺湪锛屽垯璁剧疆褰撳墠浠诲姟宸茬粡琚棰�
+                        participantVo.setClaim(StringUtils.isNotBlank(task.getAssignee()));
                     }
                 }
             }
@@ -322,17 +322,22 @@
         if (CollUtil.isNotEmpty(userIds)) {
             List<SysUserVo> sysUserVoList = WORKFLOW_USER_SERVICE.getUserListByIds(new ArrayList<>(userIds));
             for (String code : messageType) {
-                if (code.equals(MessageTypeEnum.SYSTEM_MESSAGE.getCode())) {
-                    WebSocketMessageDto dto = new WebSocketMessageDto();
-                    dto.setSessionKeys(new ArrayList<>(userIds));
-                    dto.setMessage(message);
-                    WebSocketUtils.publishMessage(dto);
-                }
-                if (code.equals(MessageTypeEnum.EMAIL_MESSAGE.getCode())) {
-                    MailUtils.sendText(StreamUtils.join(sysUserVoList, SysUserVo::getEmail), "鍗曟嵁瀹℃壒鎻愰啋", message);
-                }
-                if (code.equals(MessageTypeEnum.SMS_MESSAGE.getCode())) {
-                    //todo 鐭俊鍙戦��
+                MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code);
+                if (ObjectUtil.isNotEmpty(messageTypeEnum)) {
+                    switch (messageTypeEnum) {
+                        case SYSTEM_MESSAGE:
+                            WebSocketMessageDto dto = new WebSocketMessageDto();
+                            dto.setSessionKeys(new ArrayList<>(userIds));
+                            dto.setMessage(message);
+                            WebSocketUtils.publishMessage(dto);
+                            break;
+                        case EMAIL_MESSAGE:
+                            MailUtils.sendText(StreamUtils.join(sysUserVoList, SysUserVo::getEmail), "鍗曟嵁瀹℃壒鎻愰啋", message);
+                            break;
+                        case SMS_MESSAGE:
+                            //todo 鐭俊鍙戦��
+                            break;
+                    }
                 }
             }
         }

--
Gitblit v1.9.3