From 1e01f892a32bfc605da7545b94033531d9a856ad Mon Sep 17 00:00:00 2001 From: 75349 <753495441@qq.com> Date: Mon, 19 Dec 2022 11:54:58 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E4=B8=BB=E9=93=BE=E8=B7=AF?= =?UTF-8?q?=E7=BC=96=E7=A0=81=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E4=B8=BB=E9=93=BE=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mysql/entity/BaseChainEntity.java | 6 +- .../liteflow/mysql/entity/BaseNodeEntity.java | 6 +- .../mysql/model/baseChain/BaseChainVO.java | 6 +- .../liteflow/mysql/model/node/BaseNodeVO.java | 4 + .../mysql/model/node/CreateNodeFrom.java | 5 +- .../mysql/model/node/UpdateNodeFrom.java | 4 + .../service/impl/BaseChainServiceImpl.java | 208 ++++++++++-------- 7 files changed, 148 insertions(+), 91 deletions(-) diff --git a/src/main/java/com/example/liteflow/mysql/entity/BaseChainEntity.java b/src/main/java/com/example/liteflow/mysql/entity/BaseChainEntity.java index d710efb..7f35489 100644 --- a/src/main/java/com/example/liteflow/mysql/entity/BaseChainEntity.java +++ b/src/main/java/com/example/liteflow/mysql/entity/BaseChainEntity.java @@ -23,7 +23,11 @@ public class BaseChainEntity { */ @TableField("template_id") private String templateId; - + /** + * 主链路编码 + */ + @TableField("main_chain_code") + private String mainChainCode; /** * 链路名称 */ diff --git a/src/main/java/com/example/liteflow/mysql/entity/BaseNodeEntity.java b/src/main/java/com/example/liteflow/mysql/entity/BaseNodeEntity.java index 7805cbc..8da3d13 100644 --- a/src/main/java/com/example/liteflow/mysql/entity/BaseNodeEntity.java +++ b/src/main/java/com/example/liteflow/mysql/entity/BaseNodeEntity.java @@ -27,7 +27,11 @@ public class BaseNodeEntity { */ @TableField("template_id") private String templateId; - + /** + * 主链路编码 + */ + @TableField("main_chain_code") + private String mainChainCode; /** * 节点名称 */ diff --git a/src/main/java/com/example/liteflow/mysql/model/baseChain/BaseChainVO.java b/src/main/java/com/example/liteflow/mysql/model/baseChain/BaseChainVO.java index 44b7711..6180045 100644 --- a/src/main/java/com/example/liteflow/mysql/model/baseChain/BaseChainVO.java +++ b/src/main/java/com/example/liteflow/mysql/model/baseChain/BaseChainVO.java @@ -1,5 +1,6 @@ package com.example.liteflow.mysql.model.baseChain; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.time.LocalDateTime; @@ -13,7 +14,10 @@ public class BaseChainVO { private String id; private String templateId; - + /** + * 主链路编码 + */ + private String mainChainCode; private String templateName; private String chainName; diff --git a/src/main/java/com/example/liteflow/mysql/model/node/BaseNodeVO.java b/src/main/java/com/example/liteflow/mysql/model/node/BaseNodeVO.java index b096eb1..b488e25 100644 --- a/src/main/java/com/example/liteflow/mysql/model/node/BaseNodeVO.java +++ b/src/main/java/com/example/liteflow/mysql/model/node/BaseNodeVO.java @@ -22,6 +22,10 @@ public class BaseNodeVO { * 所属模板id */ private String templateId; + /** + * 主链路编码 + */ + private String mainChainCode; /** * 所属模板名称 */ diff --git a/src/main/java/com/example/liteflow/mysql/model/node/CreateNodeFrom.java b/src/main/java/com/example/liteflow/mysql/model/node/CreateNodeFrom.java index 39bff20..03eea2d 100644 --- a/src/main/java/com/example/liteflow/mysql/model/node/CreateNodeFrom.java +++ b/src/main/java/com/example/liteflow/mysql/model/node/CreateNodeFrom.java @@ -20,7 +20,10 @@ public class CreateNodeFrom { * 所属模板id */ private String templateId; - + /** + * 主链路编码 + */ + private String mainChainCode; /** * 节点名称 */ diff --git a/src/main/java/com/example/liteflow/mysql/model/node/UpdateNodeFrom.java b/src/main/java/com/example/liteflow/mysql/model/node/UpdateNodeFrom.java index 11ae130..96384cd 100644 --- a/src/main/java/com/example/liteflow/mysql/model/node/UpdateNodeFrom.java +++ b/src/main/java/com/example/liteflow/mysql/model/node/UpdateNodeFrom.java @@ -17,6 +17,10 @@ public class UpdateNodeFrom { * 节点对应输出节点id */ private String nodeContentId; + /** + * 主链路编码 + */ + private String mainChainCode; /** * 规则 */ diff --git a/src/main/java/com/example/liteflow/mysql/service/impl/BaseChainServiceImpl.java b/src/main/java/com/example/liteflow/mysql/service/impl/BaseChainServiceImpl.java index d3e77ab..0f91317 100644 --- a/src/main/java/com/example/liteflow/mysql/service/impl/BaseChainServiceImpl.java +++ b/src/main/java/com/example/liteflow/mysql/service/impl/BaseChainServiceImpl.java @@ -27,6 +27,7 @@ import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.flow.LiteflowResponse; import com.yomahub.liteflow.flow.element.Chain; import lombok.extern.slf4j.Slf4j; +import org.assertj.core.util.Lists; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -89,79 +90,97 @@ public class BaseChainServiceImpl extends ServiceImpl nodeList = templateEntity.getBaseNodeEntityList(); - // 将所有节点注入 + Map> nodeMap = new HashMap<>(); nodeList.forEach(node -> { - String nodeType = node.getNodeType(); - String nodeId = node.getNodeId(); - String nodeName = node.getNodeName(); - String nodeClass = node.getNodeClass(); - if (NodeEnum.CommonNode.getName().equals(nodeType)) { - LiteFlowNodeBuilder.createCommonNode() - .setId(nodeId) - .setName(nodeName) - .setClazz(nodeClass) - .build(); - } else if (NodeEnum.IfNode.getName().equals(nodeType)) { - LiteFlowNodeBuilder.createIfNode() - .setId(nodeId) - .setName(nodeName) - .setClazz(nodeClass) - .build(); + String mainChainCode = node.getMainChainCode(); + if (nodeMap.containsKey(mainChainCode)) { + List nodeMapList = nodeMap.get(mainChainCode); + nodeMapList.add(node); + } else { + ArrayList nodeMapList = Lists.newArrayList(node); + nodeMap.put(mainChainCode, nodeMapList); } }); - // 输出节点 - Map commonNodeMap = nodeList.stream() - .filter(node -> NodeEnum.CommonNode.getName().equals(node.getNodeType())) - .collect(Collectors.toMap(BaseNodeEntity::getId, BaseNodeEntity -> BaseNodeEntity)); - // 判断节点 - List ifNodeList = nodeList.stream().filter(node -> NodeEnum.IfNode.getName().equals(node.getNodeType())).collect(Collectors.toList()); - StringBuilder stringBuilder = new StringBuilder(); - int leftBracesNum = 0; - int num = 0; - for (BaseNodeEntity ifNode : ifNodeList) { - num++; - leftBracesNum++; - stringBuilder.append("IF("); - String ifNodeId = ifNode.getNodeId(); - String nodeContentId = ifNode.getNodeContentId(); - BaseNodeEntity commonNode = commonNodeMap.get(nodeContentId); - if (ObjectUtil.isNotNull(commonNode)) { - String commonNodeId = commonNode.getNodeId(); - stringBuilder.append(ifNodeId).append(",").append(commonNodeId); - } else { - stringBuilder.append(ifNodeId).append(",defaultOutput"); + for (Map.Entry> entry : nodeMap.entrySet()) { + String mainChainCode = entry.getKey(); + List mapNodeList = entry.getValue(); + // 将所有节点注入 + mapNodeList.forEach(node -> { + String nodeType = node.getNodeType(); + String nodeId = node.getNodeId(); + String nodeName = node.getNodeName(); + String nodeClass = node.getNodeClass(); + if (NodeEnum.CommonNode.getName().equals(nodeType)) { + LiteFlowNodeBuilder.createCommonNode() + .setId(nodeId) + .setName(nodeName) + .setClazz(nodeClass) + .build(); + } else if (NodeEnum.IfNode.getName().equals(nodeType)) { + LiteFlowNodeBuilder.createIfNode() + .setId(nodeId) + .setName(nodeName) + .setClazz(nodeClass) + .build(); + } + }); + // 输出节点 + Map commonNodeMap = mapNodeList.stream() + .filter(node -> NodeEnum.CommonNode.getName().equals(node.getNodeType())) + .collect(Collectors.toMap(BaseNodeEntity::getId, BaseNodeEntity -> BaseNodeEntity)); + // 判断节点 + List ifNodeList = mapNodeList.stream().filter(node -> NodeEnum.IfNode.getName().equals(node.getNodeType())).collect(Collectors.toList()); + StringBuilder stringBuilder = new StringBuilder(); + int leftBracesNum = 0; + int num = 0; + for (BaseNodeEntity ifNode : ifNodeList) { + num++; + leftBracesNum++; + stringBuilder.append("IF("); + String ifNodeId = ifNode.getNodeId(); + String nodeContentId = ifNode.getNodeContentId(); + BaseNodeEntity commonNode = commonNodeMap.get(nodeContentId); + if (ObjectUtil.isNotNull(commonNode)) { + String commonNodeId = commonNode.getNodeId(); + stringBuilder.append(ifNodeId).append(",").append(commonNodeId); + } else { + stringBuilder.append(ifNodeId).append(",defaultOutput"); + } + if (num != ifNodeList.size()) { + stringBuilder.append(","); + } else { + stringBuilder.append(",defaultOutput"); + } } - if (num != ifNodeList.size()) { - stringBuilder.append(","); - } else { - stringBuilder.append(",defaultOutput"); + for (int i = 0; i < leftBracesNum; i++) { + stringBuilder.append(")"); + } + String chainName = mainChainCode + "_" + templateName; + log.info("templateName = {}, stringBuilder = {}", templateName, stringBuilder); + BaseChainEntity baseChainEntity = new BaseChainEntity(); + baseChainEntity.setTemplateId(templateId); + baseChainEntity.setMainChainCode(mainChainCode); + baseChainEntity.setChainName(chainName); + baseChainEntity.setElData(stringBuilder.toString()); + if (!FlowBus.containChain(templateName)) { + LiteFlowChainELBuilder.createChain() + .setChainId(chainName) + .setEL(stringBuilder.toString()) + .build(); + flowExecutor.reloadRule(); + } + LambdaUpdateWrapper baseChainQueryWrapper = new LambdaUpdateWrapper<>(); + baseChainQueryWrapper.eq(BaseChainEntity::getTemplateId, templateId) + .eq(BaseChainEntity::getChainName, chainName) + .eq(BaseChainEntity::getMainChainCode, mainChainCode) + .eq(BaseChainEntity::getEnableMark, EnableMarkEnum.Enable.getValue()); + BaseChainEntity checkExists = this.getOne(baseChainQueryWrapper); + if (ObjectUtil.isNull(checkExists)) { + this.save(baseChainEntity); + } else { + checkExists.setElData(stringBuilder.toString()); + this.updateById(checkExists); } - } - for (int i = 0; i < leftBracesNum; i++) { - stringBuilder.append(")"); - } - log.info("templateName = {}, stringBuilder = {}", templateName, stringBuilder); - BaseChainEntity baseChainEntity = new BaseChainEntity(); - baseChainEntity.setTemplateId(templateId); - baseChainEntity.setChainName(templateName); - baseChainEntity.setElData(stringBuilder.toString()); - if (!FlowBus.containChain(templateName)) { - LiteFlowChainELBuilder.createChain() - .setChainId(templateName) - .setEL(stringBuilder.toString()) - .build(); - flowExecutor.reloadRule(); - } - LambdaUpdateWrapper baseChainQueryWrapper = new LambdaUpdateWrapper<>(); - baseChainQueryWrapper.eq(BaseChainEntity::getTemplateId, templateId) - .eq(BaseChainEntity::getEnableMark, EnableMarkEnum.Enable.getValue()); - BaseChainEntity checkExists = this.getOne(baseChainQueryWrapper); - if (ObjectUtil.isNull(checkExists)) { - this.save(baseChainEntity); - } else { - checkExists.setChainName(templateName); - checkExists.setElData(stringBuilder.toString()); - this.updateById(checkExists); } }); } @@ -199,33 +218,48 @@ public class BaseChainServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(BaseChainEntity::getEnableMark, EnableMarkEnum.Enable.getValue()) - .ne(BaseChainEntity::getChainName, "mainChain"); + queryWrapper.eq(BaseChainEntity::getEnableMark, EnableMarkEnum.Enable.getValue()); List chainList = this.list(queryWrapper); log.info("chainList size = {}", chainList.size()); if (CollUtil.isNotEmpty(chainList)) { - StringJoiner elData = new StringJoiner(",", "THEN(", ")"); - chainList.forEach(chain -> elData.add(chain.getChainName())); - if (!FlowBus.containChain(mainChainName)) { + Map> nodeMap = new HashMap<>(); + // 根据链路编码进行分类 + chainList.forEach(chain -> { + String mainChainCode = chain.getMainChainCode(); + if (nodeMap.containsKey(mainChainCode)) { + List nodeMapList = nodeMap.get(mainChainCode); + nodeMapList.add(chain); + } else { + ArrayList nodeMapList = Lists.newArrayList(chain); + nodeMap.put(mainChainCode, nodeMapList); + } + }); + // 生成链路 + for (Map.Entry> entry : nodeMap.entrySet()) { + String mainChainCode = entry.getKey(); + String chainName = mainChainCode + "_mainChain"; + List nodeMapList = entry.getValue(); + StringJoiner elData = new StringJoiner(",", "THEN(", ")"); + nodeMapList.forEach(chain -> elData.add(chain.getChainName())); + log.info("elData = {}", elData); LiteFlowChainELBuilder.createChain() - .setChainId(mainChainName) + .setChainId(chainName) .setEL(elData.toString()) .build(); flowExecutor.reloadRule(); - } - LambdaQueryWrapper mainQueryWrapper = new LambdaQueryWrapper<>(); - mainQueryWrapper.eq(BaseChainEntity::getChainName, mainChainName); - BaseChainEntity mainChain = this.getOne(mainQueryWrapper); - if (ObjectUtil.isNull(mainChain)) { - mainChain = new BaseChainEntity(); - mainChain.setChainName(mainChainName); - mainChain.setElData(elData.toString()); - this.save(mainChain); - } else { - mainChain.setElData(elData.toString()); - this.updateById(mainChain); + LambdaQueryWrapper mainQueryWrapper = new LambdaQueryWrapper<>(); + mainQueryWrapper.eq(BaseChainEntity::getChainName, chainName); + BaseChainEntity mainChain = this.getOne(mainQueryWrapper); + if (ObjectUtil.isNull(mainChain)) { + mainChain = new BaseChainEntity(); + mainChain.setChainName(chainName); + mainChain.setElData(elData.toString()); + this.save(mainChain); + } else { + mainChain.setElData(elData.toString()); + this.updateById(mainChain); + } } } }