From 9221eae06d25464c66690409971a5cfb06525e52 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sun, 15 Dec 2024 19:08:30 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E9=A9=B3=E5=9B=9E?= =?UTF-8?q?=20=E6=92=A4=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FlwInstanceServiceImpl.java | 36 +-------------- .../service/impl/FlwTaskServiceImpl.java | 44 +++---------------- .../dromara/workflow/utils/WorkflowUtils.java | 40 +++++++++++++++++ 3 files changed, 46 insertions(+), 74 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index ec8f25c0a..8c920bc9d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -23,7 +23,6 @@ import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.*; import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.SkipType; -import org.dromara.warm.flow.core.enums.UserType; import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.InsService; import org.dromara.warm.flow.core.service.NodeService; @@ -206,7 +205,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE); Node nextNode = nodeService.getNextNode(definition.getId(), startNode.getNodeCode(), null, SkipType.NONE.getKey()); //撤销 - cancelTask(message, instance, nextNode); + WorkflowUtils.backTask(message, instance.getId(), nextNode.getNodeCode(), BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus()); //判断申请人节点是否有多个,只保留一个 List currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); if (CollUtil.isNotEmpty(currentTaskList)) { @@ -225,39 +224,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { return true; } - /** - * 撤销流程 - * - * @param message 审批已经 - * @param instance 流程实例 - * @param nextNode 申请人节点 - */ - private void cancelTask(String message, Instance instance, Node nextNode) { - List list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); - if (CollUtil.isNotEmpty(list)) { - List tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(nextNode.getNodeCode())); - if (list.size() == tasks.size()) { - return; - } - } - for (Task task : list) { - List userList = flwTaskService.currentTaskAllUser(task.getId()); - FlowParams flowParams = FlowParams.build(); - flowParams.nodeCode(nextNode.getNodeCode()); - flowParams.message(message); - flowParams.skipType(SkipType.PASS.getKey()); - flowParams.flowStatus(BusinessStatusEnum.CANCEL.getStatus()).hisStatus(TaskStatusEnum.CANCEL.getStatus()); - flowParams.ignore(true); - //解决会签,或签撤销没权限问题 - if (CollUtil.isNotEmpty(userList)) { - flowParams.handler(userList.get(0).getUserId().toString()); - } - taskService.skip(task.getId(), flowParams); - } - //解决会签,或签多人审批问题 - cancelTask(message, instance, nextNode); - } - /** * 获取当前登陆人发起的流程实例 * 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 a1f8cc8f3..a39455421 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 @@ -22,7 +22,6 @@ import org.dromara.common.core.validate.EditGroup; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.warm.flow.core.FlowFactory; import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.*; import org.dromara.warm.flow.core.enums.NodeType; @@ -166,8 +165,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService { /** * 设置办理人 * - * @param instance 实例 - * @param task (当前任务)未办理的任务 + * @param instance 实例 + * @param task (当前任务)未办理的任务 * @param flowCopyList 抄送人 */ private void setHandler(Instance instance, FlowTask task, List flowCopyList) { @@ -200,7 +199,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { /** * 添加抄送人 * - * @param task 任务信息 + * @param task 任务信息 * @param flowCopyList 抄送人 */ private void setCopy(FlowTask task, List flowCopyList) { @@ -364,9 +363,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService { //申请人节点 String applyUserNodeCode = flowSkip.getNextNodeCode(); if (applyUserNodeCode.equals(bo.getNodeCode())) { - backTask(message, inst, applyUserNodeCode, TaskStatusEnum.BACK.getStatus()); + WorkflowUtils.backTask(message, inst.getId(), applyUserNodeCode, TaskStatusEnum.BACK.getStatus(), TaskStatusEnum.BACK.getStatus()); } else { - backTask(message, inst, bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus()); + WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus(), TaskStatusEnum.BACK.getStatus()); } Instance instance = insService.getById(inst.getId()); setHandler(instance, flowTasks.get(0), null); @@ -379,39 +378,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } } - /** - * 退回 - * - * @param message 审批已经 - * @param instance 流程实例 - * @param targetNodeCode 驳回的节点 - */ - private void backTask(String message, Instance instance, String targetNodeCode, String status) { - List list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); - if (CollUtil.isNotEmpty(list)) { - List tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode)); - if (list.size() == tasks.size()) { - return; - } - } - for (Task task : list) { - List userList = currentTaskAllUser(task.getId()); - FlowParams flowParams = FlowParams.build(); - flowParams.nodeCode(targetNodeCode); - flowParams.message(message); - flowParams.skipType(SkipType.PASS.getKey()); - flowParams.flowStatus(status).hisStatus(TaskStatusEnum.BACK.getStatus()); - flowParams.ignore(true); - //解决会签,或签撤销没权限问题 - if (CollUtil.isNotEmpty(userList)) { - flowParams.handler(userList.get(0).getUserId().toString()); - } - taskService.skip(task.getId(), flowParams); - } - //解决会签,或签多人审批问题 - backTask(message, instance, targetNodeCode, status); - } - /** * 获取可驳回节点 * 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 9d17de346..9d661ad70 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 @@ -11,8 +11,12 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.sse.dto.SseMessageDto; import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.warm.flow.core.dto.FlowParams; +import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.entity.User; +import org.dromara.warm.flow.core.enums.SkipType; +import org.dromara.warm.flow.core.service.TaskService; import org.dromara.warm.flow.core.service.UserService; import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.warm.flow.orm.entity.FlowUser; @@ -37,6 +41,7 @@ public class WorkflowUtils { private static final IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class); private static final IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class); private static final UserService userService = SpringUtils.getBean(UserService.class); + private static final TaskService taskService = SpringUtils.getBean(TaskService.class); /** * 获取工作流用户service @@ -123,4 +128,39 @@ public class WorkflowUtils { } } + /** + * 驳回 + * + * @param message 审批意见 + * @param instanceId 流程实例id + * @param targetNodeCode 目标节点 + * @param flowStatus 流程状态 + * @param flowHisStatus 节点操作状态 + */ + public static void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus) { + List list = flwTaskService.selectByInstId(instanceId); + if (CollUtil.isNotEmpty(list)) { + List tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode)); + if (list.size() == tasks.size()) { + return; + } + } + for (FlowTask task : list) { + List userList = flwTaskService.currentTaskAllUser(task.getId()); + FlowParams flowParams = FlowParams.build(); + flowParams.nodeCode(targetNodeCode); + flowParams.message(message); + flowParams.skipType(SkipType.PASS.getKey()); + flowParams.flowStatus(flowStatus).hisStatus(flowHisStatus); + flowParams.ignore(true); + //解决会签,或签撤销没权限问题 + if (CollUtil.isNotEmpty(userList)) { + flowParams.handler(userList.get(0).getUserId().toString()); + } + taskService.skip(task.getId(), flowParams); + } + //解决会签,或签多人审批问题 + backTask(message, instanceId, targetNodeCode, flowStatus, flowHisStatus); + } + }