From 2876556f05f372fa9c0a70caff403fbe6e5b9bcf Mon Sep 17 00:00:00 2001 From: lijiarao Date: Mon, 9 Oct 2023 16:50:53 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=8E=B7=E5=BE=97=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ModelerController.java | 148 ++++++++++++++++-- .../mapper/LawsProcessNodeOriginMapper.java | 1 - .../mapper/ProcessModelNodeMapper.java | 2 - .../xml/LawsProcessNodeOriginMapper.xml | 39 ----- .../mapper/xml/ProcessModelNodeMapper.xml | 38 ----- .../service/LawsProcessNodeOriginService.java | 2 +- .../service/ProcessModelNodeService.java | 2 +- 7 files changed, 140 insertions(+), 92 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java index 72822b50..eeb4aada 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/ModelerController.java @@ -1,5 +1,8 @@ package com.jero.modules.activiti.controller; +import cn.hutool.core.collection.CollStreamUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.stream.StreamUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -41,6 +44,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author liJiaRao @@ -274,25 +279,148 @@ public class ModelerController { //查询节点信息 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProcessModelNode::getModelId,modelId); - //wrapper.eq(ProcessModelNode::getNodeType,"userTask"); wrapper.orderByAsc(ProcessModelNode::getSort); List nodeOriginList = processModelNodeService.list(wrapper); - ArrayList> nodes = new ArrayList<>(); - ArrayList> edges = new ArrayList<>(); + + //获取所有子流程id + List subProcessIdList = nodeOriginList.stream() + .map(ProcessModelNode::getXmlSubNodeId) + .filter(StringUtils::isNotBlank) + .distinct() + .collect(Collectors.toList()); + Map startEventReplace = new HashMap<>(); + Map endEventReplace = new HashMap<>(); + //确定结束节点的连线 + List removeNodeList = new ArrayList<>(); + for (String subProcessId : subProcessIdList) { + //获得全部子流程节点 + List subNodeList = nodeOriginList.stream() + .filter(item -> subProcessId.equals(item.getXmlSubNodeId())) + .collect(Collectors.toList()); + Map sourceTargetMap = CollStreamUtil.toMap(subNodeList, ProcessModelNode::getXmlSourceRef, ProcessModelNode::getXmlTargetRef); + Map targetSourceMap = CollStreamUtil.toIdentityMap(subNodeList, ProcessModelNode::getXmlTargetRef); + for (ProcessModelNode subNode : subNodeList) { + String xmlNodeId = subNode.getXmlNodeId(); + String nodeType = subNode.getNodeType(); + if ("startEvent".equals(nodeType)){ + //通过关联的线获取下一个节点的id + String s = sourceTargetMap.get(xmlNodeId); + startEventReplace.put(subProcessId,s); + }else if ("endEvent".equals(nodeType)){ + //subEndEventList.add(xmlNodeId); + //通过target拿到线 + ProcessModelNode flow = targetSourceMap.get(xmlNodeId); + endEventReplace.put(subProcessId,flow); + removeNodeList.add(flow); + } + } + } + //删除结束节点的连线 + nodeOriginList.removeAll(removeNodeList); + //获得子流程之后的连线 + List beforeSubProcessFlowList = nodeOriginList.stream() + .filter(item -> subProcessIdList.contains(item.getXmlSourceRef())) + .collect(Collectors.toList()); + //获得子流程之后的连线map + Map beforeSubProcessFlowMap = CollStreamUtil.toIdentityMap(beforeSubProcessFlowList, ProcessModelNode::getXmlSourceRef); + //把之前删除的结束节点更新后在加回来 + List addNodeList = new ArrayList<>(); for (ProcessModelNode modelNode : nodeOriginList) { String nodeType = modelNode.getNodeType(); String nodeName = modelNode.getNodeName(); + String xmlSourceRef = modelNode.getXmlSourceRef(); + String xmlTargetRef = modelNode.getXmlTargetRef(); if ("sequenceFlow".equals(nodeType)){ - if (!"驳回".equals(nodeName)){ - Map edge = new HashMap<>(); - edge.put("source",modelNode.getXmlSourceRef()); - edge.put("target",modelNode.getXmlTargetRef()); - edges.add(edge); + if (endEventReplace.containsKey(xmlSourceRef)) { + ProcessModelNode modelNode1 = endEventReplace.get(xmlSourceRef); + modelNode1.setXmlTargetRef(xmlTargetRef); + addNodeList.add(modelNode1); + //modelNode.setXmlTargetRef(modelNode1.getXmlTargetRef()); } - }else if (!"endEvent".equals(nodeType)&&!"startEvent".equals(nodeType)){ + if (startEventReplace.containsKey(xmlTargetRef)) { + xmlTargetRef = startEventReplace.get(xmlTargetRef); + modelNode.setXmlTargetRef(xmlTargetRef); + } + } + } + //把之前删除的结束节点更新后在加回来 + nodeOriginList.addAll(addNodeList); + + //找到驳回的线 + List removeList = nodeOriginList.stream() + .filter(item -> "驳回".equals(item.getNodeName())) + .collect(Collectors.toList()); + //全部去除 + nodeOriginList.removeAll(removeList); + + //找到全部的通过线 + List passFlowList = nodeOriginList.stream() + .filter(item -> "通过".equals(item.getNodeName())) + .filter(item -> "sequenceFlow".equals(item.getNodeType())) + .collect(Collectors.toList()); + //全部去除 + nodeOriginList.removeAll(passFlowList); + //获得来源id为网关的对应map(通过线的来源id一定是审批网关) + Map sourceIdIsGatewayMap = CollStreamUtil.toIdentityMap(passFlowList, ProcessModelNode::getXmlSourceRef); + //根据通过的线获取全部审批网关id + List approvalGatewayList = passFlowList.stream().map(ProcessModelNode::getXmlSourceRef).collect(Collectors.toList()); + //根据审批网关id获取网关前的线(目标id为网关id的是网关前的线) + List beforeGatewayFlowList = nodeOriginList.stream() + .filter(item -> approvalGatewayList.contains(item.getXmlTargetRef())) + .collect(Collectors.toList()); + //全部去除 + nodeOriginList.removeAll(beforeGatewayFlowList); + + ArrayList> edges = new ArrayList<>(); + //组合来源id和去向id + for (ProcessModelNode modelNode : beforeGatewayFlowList) { + //网关前的节点id + String beforeGatewayNodeId = modelNode.getXmlSourceRef(); + //这里是网关id + String xmlTargetRef = modelNode.getXmlTargetRef(); + //网关后的线 + ProcessModelNode modelNode1 = sourceIdIsGatewayMap.get(xmlTargetRef); + //网关后的节点id + String afterGatewayNodeId = modelNode1.getXmlTargetRef(); + Map edge = new HashMap<>(); + edge.put("source", beforeGatewayNodeId); + edge.put("target",afterGatewayNodeId); + edges.add(edge); + } + //找到全部的审批网关(审批网关名字是null) + List gatewayList = nodeOriginList.stream() + .filter(item -> approvalGatewayList.contains(item.getXmlNodeId())) + .collect(Collectors.toList()); + //全部去除 + nodeOriginList.removeAll(gatewayList); + + + ArrayList> nodes = new ArrayList<>(); + Map stringProcessModelNodeMap = CollStreamUtil.toIdentityMap(nodeOriginList, ProcessModelNode::getXmlNodeId); + + for (ProcessModelNode modelNode : nodeOriginList) { + + String nodeType = modelNode.getNodeType(); + String nodeName = modelNode.getNodeName(); + String xmlSourceRef = modelNode.getXmlSourceRef(); + String xmlTargetRef = modelNode.getXmlTargetRef(); + if ("sequenceFlow".equals(nodeType)){ + Map edge = new HashMap<>(); + edge.put("label",nodeName); + edge.put("source", xmlSourceRef); + edge.put("target",xmlTargetRef); + edges.add(edge); + }else if ("userTask".equals(nodeType)){ Map node = new HashMap<>(); node.put("id",modelNode.getXmlNodeId()); - node.put("name",nodeName!=null?nodeName:""); + node.put("name",nodeName!=null?nodeName:"网关"); + node.put("isApprovalNode",modelNode.getIsApprovalNode()); + node.put("isCanDeleted",modelNode.getIsCanDeleted()); + nodes.add(node); + }else if ("gateway".equals(nodeType)){ + Map node = new HashMap<>(); + node.put("id",modelNode.getXmlNodeId()); + node.put("name","条件网关"); node.put("isApprovalNode",modelNode.getIsApprovalNode()); node.put("isCanDeleted",modelNode.getIsCanDeleted()); nodes.add(node); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java index 2545d375..656b0ebb 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java @@ -11,5 +11,4 @@ import java.util.List; * @date 2023-09-26 15:12 */ public interface LawsProcessNodeOriginMapper extends BaseMapper { - int insertList(@Param("list") List list); } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessModelNodeMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessModelNodeMapper.java index bc0b49d3..60ffff4c 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessModelNodeMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessModelNodeMapper.java @@ -11,8 +11,6 @@ import com.jero.modules.activiti.entity.ProcessModelNode; *@date 2023-10-08 14:08 */ public interface ProcessModelNodeMapper extends BaseMapper { - int insertList(@Param("list")List list); - int deleteByModelId(@Param("modelId")String modelId); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml index 56848014..02ba5421 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml @@ -27,43 +27,4 @@ sys_code - - - INSERT INTO process_node_origin( - id, - process_definition_id, - node_name, - node_type, - xml_node_id, - xml_source_ref, - xml_target_ref, - is_approval_node, - is_can_deleted, - sort, - create_by, - create_time, - update_by, - update_time, - sys_code - )VALUES - - ( - #{element.id}, - #{element.processDefinitionId}, - #{element.nodeName}, - #{element.nodeType}, - #{element.xmlNodeId}, - #{element.xmlSourceRef}, - #{element.xmlTargetRef}, - #{element.isApprovalNode}, - #{element.isCanDeleted}, - #{element.sort}, - #{element.createBy}, - #{element.createTime}, - #{element.updateBy}, - #{element.updateTime}, - #{element.sysCode} - ) - - \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessModelNodeMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessModelNodeMapper.xml index 65e8dcac..390e3125 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessModelNodeMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessModelNodeMapper.xml @@ -36,44 +36,6 @@ - - INSERT INTO process_model_node( - id, - model_id, - node_name, - node_type, - xml_node_id, - xml_source_ref, - xml_target_ref, - is_approval_node, - is_can_deleted, - sort, - create_by, - create_time, - update_by, - update_time, - sys_code - )VALUES - - ( - #{element.id,jdbcType=VARCHAR}, - #{element.modelId,jdbcType=VARCHAR}, - #{element.nodeName,jdbcType=VARCHAR}, - #{element.nodeType}, - #{element.xmlNodeId}, - #{element.xmlSourceRef}, - #{element.xmlTargetRef}, - #{element.isApprovalNode,jdbcType=TINYINT}, - #{element.isCanDeleted,jdbcType=TINYINT}, - #{element.sort,jdbcType=TINYINT}, - #{element.createBy,jdbcType=VARCHAR}, - #{element.createTime,jdbcType=TIMESTAMP}, - #{element.updateBy,jdbcType=VARCHAR}, - #{element.updateTime,jdbcType=TIMESTAMP}, - #{element.sysCode,jdbcType=VARCHAR} - ) - - diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java index 2f7e66ee..19b5c56c 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java @@ -66,7 +66,7 @@ public class LawsProcessNodeOriginService extends ServiceImpl