From 02ca1f9808ebb29d4c8a9c9663ba0e8daf9156b7 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Sat, 10 May 2025 18:46:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E5=A4=B4=E4=B8=8B=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E8=AE=BE=E7=BD=AE=E8=B4=A3=E4=BB=BB=E5=8D=95?= =?UTF-8?q?=E4=BD=8Dbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CivilizeConstructionServiceImpl.java | 6 +++ .../com/zhgd/xmgl/util/FlowSeviceUtil.java | 50 ++++++++++++++++--- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/CivilizeConstructionServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/CivilizeConstructionServiceImpl.java index b5ed2fcc8..a67226994 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/CivilizeConstructionServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/CivilizeConstructionServiceImpl.java @@ -1,6 +1,7 @@ package com.zhgd.xmgl.modules.baotou.service.impl; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -151,6 +152,11 @@ public class CivilizeConstructionServiceImpl extends ServiceImpl map) { String instanceId = FlowUtil.getString(map, "instanceId"); + int count = this.count(new LambdaQueryWrapper() + .eq(CivilizeConstruction::getInstanceId, instanceId)); + if (count > 0) { + return; + } ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult(); Map formData = processService.getInstanceProgress(null, instanceId).getFormData(); ProcessProgressVo.ProgressNode node = flowSeviceUtil.getNextTodoApproval(instanceId, FlowUtil.getString(map, "dfNodeId")); diff --git a/src/main/java/com/zhgd/xmgl/util/FlowSeviceUtil.java b/src/main/java/com/zhgd/xmgl/util/FlowSeviceUtil.java index c721a7ac8..fe2cb601a 100644 --- a/src/main/java/com/zhgd/xmgl/util/FlowSeviceUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/FlowSeviceUtil.java @@ -167,17 +167,45 @@ public class FlowSeviceUtil { if (StrUtil.isNotBlank(dfNodeId)) { nodeMap = nodeCatchService.reloadProcessByStr(modelHistory.getProcess()); } - - List progressNodeList = this.getFutureTask(instance, owner.getOwnerDeptId(), vars, nodeMap, modelHistory.getTenantId()); - progressNodeList = progressNodeList.stream().filter(o -> o.getNodeType().equals(NodeTypeEnum.APPROVAL)).collect(Collectors.toList()); - if (CollUtil.isEmpty(progressNodeList)) { + ProcessNode nextValue = getNextValue(nodeMap, dfNodeId); + ApprovalProps props = (ApprovalProps) nextValue.getProps(); + List users = processTaskService.getApprovalUsers(instance.getId(), nextValue.getId(), props, modelHistory.getTenantId()); + Map userMaps = userDeptOrLeaderService.getUserMapByIds(users); +// List progressNodeList = this.getCurFutureTask(instance, owner.getOwnerDeptId(), vars, nodeMap, modelHistory.getTenantId()); +// progressNodeList = progressNodeList.stream().filter(o -> o.getNodeType().equals(NodeTypeEnum.APPROVAL)).collect(Collectors.toList()); + if (CollUtil.isEmpty(users)) { log.warn("获取下一个待处理的审批节点超时失败,instanceId=" + instanceId + ",nodeId=" + dfNodeId); return null; } else { - return progressNodeList.get(0); + return ProcessProgressVo.ProgressNode.builder() + .nodeId(nextValue.getId()) + .name(nextValue.getName()) + .user(userMaps.getOrDefault(users.get(0), UNKNOW_USER)) + .nodeType(nextValue.getType()) + .comment(Collections.emptyList()) + .approvalMode(props.getMode()) +// .startTime(createTime) + .build(); } } + /** + * 获取下一个节点 + * + * @param map + * @param key + * @return + */ + public ProcessNode getNextValue(Map> map, String key) { + List>> entries = new ArrayList<>(map.entrySet()); + for (int i = 0; i < entries.size(); i++) { + if (entries.get(i).getKey().equals(key) && i < entries.size() - 1) { + return entries.get(i + 1).getValue(); + } + } + return null; + } + private boolean isProcessDone(String process, String curNodeId, String dfNodeId) { JSONObject rootJo = JSON.parseObject(process); int i = 0; @@ -274,7 +302,17 @@ public class FlowSeviceUtil { return ccUsers; } - private List getFutureTask(HistoricProcessInstance instance, String + /** + * 获取当前和未来的节点 + * + * @param instance + * @param startDept + * @param context + * @param nodes + * @param tenantId + * @return + */ + private List getCurFutureTask(HistoricProcessInstance instance, String startDept, Map context, Map> nodes, String tenantId) { //根据流程遍历后续节点,期间要穿越后续包含并行网关和条件网关的节点,先找到所有激活的任务节点开始递归 //节点如果处于并行/包容分支内,可能会有多个活动的节点