From 33e28daba635f897c0d9267331045b4fc0c7cd55 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sun, 15 Dec 2024 15:03:20 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E4=BC=9A=E7=AD=BE=20?= =?UTF-8?q?=E7=A5=A8=E7=AD=BE=E6=92=A4=E9=94=80=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FlwInstanceServiceImpl.java | 47 +++++++++++++++---- script/bpmn/leave4.xml | 20 ++++++++ 2 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 script/bpmn/leave4.xml 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 9a02d164b..710ec8882 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 @@ -197,23 +197,16 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { if (definition == null) { throw new ServiceException(ExceptionCons.NOT_FOUNT_DEF); } + String message = bo.getMessage(); BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus()); - List list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); //获取已发布的流程节点 List flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper().eq(FlowNode::getDefinitionId, definition.getId())); AssertUtil.isTrue(CollUtil.isEmpty(flowNodes), ExceptionCons.NOT_PUBLISH_NODE); Node startNode = flowNodes.stream().filter(t -> NodeType.isStart(t.getNodeType())).findFirst().orElse(null); AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE); Node nextNode = nodeService.getNextNode(definition.getId(), startNode.getNodeCode(), null, SkipType.NONE.getKey()); - for (Task task : list) { - FlowParams flowParams = FlowParams.build(); - flowParams.nodeCode(nextNode.getNodeCode()); - flowParams.message(bo.getMessage()); - flowParams.skipType(SkipType.PASS.getKey()); - flowParams.flowStatus(BusinessStatusEnum.CANCEL.getStatus()).hisStatus(TaskStatusEnum.CANCEL.getStatus()); - flowParams.ignore(true); - taskService.skip(task.getId(), flowParams); - } + //撤销 + cancelTask(message, instance, nextNode); //判断申请人节点是否有多个,只保留一个 List currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); if (CollUtil.isNotEmpty(currentTaskList)) { @@ -242,6 +235,39 @@ 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); + } + /** * 获取当前登陆人发起的流程实例 * @@ -423,6 +449,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { flowParams.message(bo.getComment()); flowParams.flowStatus(BusinessStatusEnum.INVALID.getStatus()) .hisStatus(TaskStatusEnum.INVALID.getStatus()); + flowParams.ignore(true); taskService.termination(flowTask.getId(), flowParams); } return true; diff --git a/script/bpmn/leave4.xml b/script/bpmn/leave4.xml new file mode 100644 index 000000000..f729e8c0c --- /dev/null +++ b/script/bpmn/leave4.xml @@ -0,0 +1,20 @@ + + + + + e90b98ef-35b4-410c-a663-bae8b7624b9f + + + 768b5b1a-6726-4d67-8853-4cc70d5b1045 + + + 2f9f2e21-9bcf-42a3-a07c-13037aad22d1 + + + 27461e01-3d9f-4530-8fe3-bd5ec7f9571f + + + b62b88c3-8d8d-4969-911e-2aaea219e7fc + + +