From 5e47e7c261f041fa62a58d9b5eacad65e15dbba4 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sun, 15 Dec 2024 16:30:44 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=8C=91=E6=88=98=E8=80=85=E9=A9=B3?= =?UTF-8?q?=E5=9B=9E=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 | 14 ++--- .../service/impl/FlwTaskServiceImpl.java | 62 +++++++++++++++---- 2 files changed, 54 insertions(+), 22 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 710ec8882..d86bf5624 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 @@ -210,22 +210,12 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { //判断申请人节点是否有多个,只保留一个 List currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); if (CollUtil.isNotEmpty(currentTaskList)) { - Task task = currentTaskList.get(0); if (currentTaskList.size() > 1) { currentTaskList.remove(0); List taskIds = StreamUtils.toList(currentTaskList, Task::getId); WorkflowUtils.userService.deleteByTaskIds(taskIds); flowTaskMapper.deleteByIds(taskIds); } - //如果为空增加一个申请人 - List userList = WorkflowUtils.userService.getByAssociateds(Collections.singletonList(task.getId())); - if (CollUtil.isEmpty(userList)) { - FlowUser flowUser = new FlowUser(); - flowUser.setAssociated(task.getId()); - flowUser.setProcessedBy(LoginHelper.getUserIdStr()); - flowUser.setType(UserType.APPROVAL.getKey()); - WorkflowUtils.userService.save(flowUser); - } } } catch (Exception e) { @@ -311,6 +301,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { String join = StreamUtils.join(allUser, e -> String.valueOf(e.getUserId())); flowHisTaskVo.setApprover(join); } + if (BusinessStatusEnum.isDraftOrCancelOrBack(flowInstance.getFlowStatus())) { + flowHisTaskVo.setApprover(LoginHelper.getUserIdStr()); + flowHisTaskVo.setApproveName(LoginHelper.getLoginUser().getNickname()); + } } list.addAll(flowHisTaskVos); } 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 f63c87bad..e674b2c6e 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,6 +22,7 @@ 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; @@ -347,6 +348,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Long taskId = bo.getTaskId(); String notice = bo.getNotice(); List messageType = bo.getMessageType(); + String message = bo.getMessage(); List flowTasks = flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class).eq(FlowTask::getId, taskId)); if (CollUtil.isEmpty(flowTasks)) { throw new ServiceException("任务不存在!"); @@ -359,20 +361,23 @@ public class FlwTaskServiceImpl implements IFlwTaskService { FlowSkip flowSkip = StreamUtils.findFirst(flowSkips, e -> NodeType.START.getKey().equals(e.getNowNodeType())); //开始节点的下一节点 assert flowSkip != null; - String nextNodeCode = flowSkip.getNextNodeCode(); - - FlowParams flowParams = new FlowParams(); - flowParams.variable(bo.getVariables()); - flowParams.skipType(SkipType.PASS.getKey()); - if (nextNodeCode.equals(bo.getNodeCode())) { - flowParams.flowStatus(BusinessStatusEnum.BACK.getStatus()); + //申请人节点 + String applyUserNodeCode = flowSkip.getNextNodeCode(); + if (applyUserNodeCode.equals(bo.getNodeCode())) { + backApplyUser(message, inst, applyUserNodeCode); } else { - flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()); + List list = taskService.list(FlowFactory.newTask().setInstanceId(inst.getId())); + for (Task task : list) { + FlowParams flowParams = FlowParams.build(); + flowParams.nodeCode(bo.getNodeCode()); + flowParams.message(message); + flowParams.skipType(SkipType.PASS.getKey()); + flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.BACK.getStatus()); + flowParams.ignore(true); + taskService.skip(task.getId(), flowParams); + } } - flowParams.hisStatus(TaskStatusEnum.BACK.getStatus()); - flowParams.message(bo.getMessage()); - flowParams.nodeCode(bo.getNodeCode()); - Instance instance = taskService.skip(taskId, flowParams); + Instance instance = insService.getById(inst.getId()); setHandler(instance, flowTasks.get(0), null); //消息通知 WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); @@ -383,6 +388,39 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } } + /** + * 退回 + * + * @param message 审批已经 + * @param instance 流程实例 + * @param applyUserNodeCode 申请人节点 + */ + private void backApplyUser(String message, Instance instance, String applyUserNodeCode) { + List list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); + if (CollUtil.isNotEmpty(list)) { + List tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(applyUserNodeCode)); + if (list.size() == tasks.size()) { + return; + } + } + for (Task task : list) { + List userList = currentTaskAllUser(task.getId()); + FlowParams flowParams = FlowParams.build(); + flowParams.nodeCode(applyUserNodeCode); + flowParams.message(message); + flowParams.skipType(SkipType.PASS.getKey()); + flowParams.flowStatus(BusinessStatusEnum.BACK.getStatus()).hisStatus(TaskStatusEnum.BACK.getStatus()); + flowParams.ignore(true); + //解决会签,或签撤销没权限问题 + if (CollUtil.isNotEmpty(userList)) { + flowParams.handler(userList.get(0).getUserId().toString()); + } + taskService.skip(task.getId(), flowParams); + } + //解决会签,或签多人审批问题 + backApplyUser(message, instance, applyUserNodeCode); + } + /** * 获取可驳回节点 *