Ver Fonte

add 增加调整转办等消息提示

gssong há 4 meses atrás
pai
commit
3cbbd0698d

+ 0 - 20
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java

@@ -23,26 +23,6 @@ public interface FlowConstant {
      */
     String INITIATOR_DEPT_ID = "initiatorDeptId";
 
-    /**
-     * 委托
-     */
-    String DELEGATE_TASK = "delegateTask";
-
-    /**
-     * 转办
-     */
-    String TRANSFER_TASK = "transferTask";
-
-    /**
-     * 加签
-     */
-    String ADD_SIGNATURE = "addSignature";
-
-    /**
-     * 减签
-     */
-    String REDUCTION_SIGNATURE = "reductionSignature";
-
     /**
      * 流程分类Id转名称
      */

+ 53 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskOperationEnum.java

@@ -0,0 +1,53 @@
+package org.dromara.workflow.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 任务操作类型枚举
+ *
+ * @author may
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskOperationEnum {
+
+    /**
+     * 委派
+     */
+    DELEGATE_TASK("delegateTask", "委派"),
+
+    /**
+     * 转办
+     */
+    TRANSFER_TASK("transferTask", "转办"),
+
+    /**
+     * 加签
+     */
+    ADD_SIGNATURE("addSignature", "加签"),
+
+    /**
+     * 减签
+     */
+    REDUCTION_SIGNATURE("reductionSignature", "减签");
+
+    private final String code;
+    private final String desc;
+
+    private static final Map<String, TaskOperationEnum> CODE_MAP = Arrays.stream(values())
+        .collect(Collectors.toConcurrentMap(TaskOperationEnum::getCode, Function.identity()));
+
+    /**
+     * 根据 code 获取枚举
+     */
+    public static TaskOperationEnum getByCode(String code) {
+        return CODE_MAP.get(code);
+    }
+
+}

+ 5 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java

@@ -40,6 +40,11 @@ public class TaskOperationBo implements Serializable {
     @NotNull(message = "任务id不能为空")
     private Long taskId;
 
+    /**
+     * 消息类型
+     */
+    private List<String> messageType;
+
     /**
      * 意见或备注信息(可选)
      */

+ 31 - 15
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@@ -46,6 +46,7 @@ import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
 import org.dromara.workflow.common.ConditionalOnEnable;
 import org.dromara.workflow.common.constant.FlowConstant;
 import org.dromara.workflow.common.enums.TaskAssigneeType;
+import org.dromara.workflow.common.enums.TaskOperationEnum;
 import org.dromara.workflow.common.enums.TaskStatusEnum;
 import org.dromara.workflow.domain.FlowInstanceBizExt;
 import org.dromara.workflow.domain.bo.*;
@@ -719,13 +720,19 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean taskOperation(TaskOperationBo bo, String taskOperation) {
+        TaskOperationEnum op = TaskOperationEnum.getByCode(taskOperation);
+        if (op == null) {
+            log.error("Invalid operation type:{} ", taskOperation);
+            throw new ServiceException("Invalid operation type " + taskOperation);
+        }
+
         FlowParams flowParams = FlowParams.build().message(bo.getMessage());
         if (LoginHelper.isSuperAdmin() || LoginHelper.isTenantAdmin()) {
             flowParams.ignore(true);
         }
 
         // 根据操作类型构建 FlowParams
-        switch (taskOperation) {
+        switch (op) {
             case DELEGATE_TASK, TRANSFER_TASK -> {
                 ValidatorUtils.validate(bo, AddGroup.class);
                 flowParams.addHandlers(Collections.singletonList(bo.getUserId()));
@@ -738,47 +745,56 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
                 ValidatorUtils.validate(bo, EditGroup.class);
                 flowParams.reductionHandlers(bo.getUserIds());
             }
-            default -> {
-                log.error("Invalid operation type:{} ", taskOperation);
-                throw new ServiceException("Invalid operation type " + taskOperation);
-            }
         }
 
         Long taskId = bo.getTaskId();
         Task task = taskService.getById(taskId);
         FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId());
-        if (ADD_SIGNATURE.equals(taskOperation) || REDUCTION_SIGNATURE.equals(taskOperation)) {
+        if (op == TaskOperationEnum.ADD_SIGNATURE || op == TaskOperationEnum.REDUCTION_SIGNATURE) {
             if (CooperateType.isOrSign(flowNode.getNodeRatio())) {
                 throw new ServiceException(task.getNodeName() + "不是会签或票签节点!");
             }
         }
+
+        // 发送消息给相关用户
+        List<String> messageType = bo.getMessageType();
+        if (CollUtil.isNotEmpty(messageType)) {
+            List<Long> userIdList = new ArrayList<>();
+            if (StrUtil.isNotBlank(bo.getUserId())) {
+                userIdList.add(Convert.toLong(bo.getUserId()));
+            }
+            if (CollUtil.isNotEmpty(bo.getUserIds())) {
+                userIdList.addAll(StreamUtils.toList(bo.getUserIds(), Convert::toLong));
+            }
+            if (CollUtil.isNotEmpty(userIdList)) {
+                flwCommonService.sendMessage(
+                    messageType,
+                    StringUtils.isNotBlank(bo.getMessage()) ? bo.getMessage() : "单据「" + op.getDesc() + "」通知",
+                    "单据「" + op.getDesc() + "」提醒",
+                    userService.selectListByIds(userIdList)
+                );
+            }
+        }
         // 设置任务状态并执行对应的任务操作
-        switch (taskOperation) {
-            //委派任务
+        switch (op) {
             case DELEGATE_TASK -> {
                 flowParams.hisStatus(TaskStatusEnum.DEPUTE.getStatus());
                 return taskService.depute(taskId, flowParams);
             }
-            //转办任务
             case TRANSFER_TASK -> {
                 flowParams.hisStatus(TaskStatusEnum.TRANSFER.getStatus());
                 return taskService.transfer(taskId, flowParams);
             }
-            //加签,增加办理人
             case ADD_SIGNATURE -> {
                 flowParams.hisStatus(TaskStatusEnum.SIGN.getStatus());
                 return taskService.addSignature(taskId, flowParams);
             }
-            //减签,减少办理人
             case REDUCTION_SIGNATURE -> {
                 flowParams.hisStatus(TaskStatusEnum.SIGN_OFF.getStatus());
                 return taskService.reductionSignature(taskId, flowParams);
             }
-            default -> {
-                log.error("Invalid operation type:{} ", taskOperation);
-                throw new ServiceException("Invalid operation type " + taskOperation);
-            }
         }
+        return false;
     }
 
     /**