From 3cbbd0698d7291eb2d9626d6a7fbbe2753a198e2 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Fri, 6 Mar 2026 18:35:47 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E8=BD=AC=E5=8A=9E=E7=AD=89=E6=B6=88=E6=81=AF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/FlowConstant.java | 20 ------- .../common/enums/TaskOperationEnum.java | 53 +++++++++++++++++++ .../workflow/domain/bo/TaskOperationBo.java | 5 ++ .../service/impl/FlwTaskServiceImpl.java | 46 ++++++++++------ 4 files changed, 89 insertions(+), 35 deletions(-) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskOperationEnum.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java index 88372f0b7..203f3f667 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ b/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转名称 */ diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskOperationEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskOperationEnum.java new file mode 100644 index 000000000..8c050a28f --- /dev/null +++ b/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 CODE_MAP = Arrays.stream(values()) + .collect(Collectors.toConcurrentMap(TaskOperationEnum::getCode, Function.identity())); + + /** + * 根据 code 获取枚举 + */ + public static TaskOperationEnum getByCode(String code) { + return CODE_MAP.get(code); + } + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java index 4348e310c..0846e73b4 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java +++ b/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 messageType; + /** * 意见或备注信息(可选) */ 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 0a8bdc72d..3624f8240 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 @@ -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 messageType = bo.getMessageType(); + if (CollUtil.isNotEmpty(messageType)) { + List 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; } /**