1.增加主链路编码,实现多个主链路
This commit is contained in:
parent
3a3540079b
commit
1e01f892a3
|
@ -23,7 +23,11 @@ public class BaseChainEntity {
|
|||
*/
|
||||
@TableField("template_id")
|
||||
private String templateId;
|
||||
|
||||
/**
|
||||
* 主链路编码
|
||||
*/
|
||||
@TableField("main_chain_code")
|
||||
private String mainChainCode;
|
||||
/**
|
||||
* 链路名称
|
||||
*/
|
||||
|
|
|
@ -27,7 +27,11 @@ public class BaseNodeEntity {
|
|||
*/
|
||||
@TableField("template_id")
|
||||
private String templateId;
|
||||
|
||||
/**
|
||||
* 主链路编码
|
||||
*/
|
||||
@TableField("main_chain_code")
|
||||
private String mainChainCode;
|
||||
/**
|
||||
* 节点名称
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -22,6 +22,10 @@ public class BaseNodeVO {
|
|||
* 所属模板id
|
||||
*/
|
||||
private String templateId;
|
||||
/**
|
||||
* 主链路编码
|
||||
*/
|
||||
private String mainChainCode;
|
||||
/**
|
||||
* 所属模板名称
|
||||
*/
|
||||
|
|
|
@ -20,7 +20,10 @@ public class CreateNodeFrom {
|
|||
* 所属模板id
|
||||
*/
|
||||
private String templateId;
|
||||
|
||||
/**
|
||||
* 主链路编码
|
||||
*/
|
||||
private String mainChainCode;
|
||||
/**
|
||||
* 节点名称
|
||||
*/
|
||||
|
|
|
@ -17,6 +17,10 @@ public class UpdateNodeFrom {
|
|||
* 节点对应输出节点id
|
||||
*/
|
||||
private String nodeContentId;
|
||||
/**
|
||||
* 主链路编码
|
||||
*/
|
||||
private String mainChainCode;
|
||||
/**
|
||||
* 规则
|
||||
*/
|
||||
|
|
|
@ -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<BaseChainMapper, BaseChain
|
|||
String templateName = templateEntity.getTemplateName();
|
||||
String templateId = templateEntity.getId();
|
||||
List<BaseNodeEntity> nodeList = templateEntity.getBaseNodeEntityList();
|
||||
// 将所有节点注入
|
||||
Map<String, List<BaseNodeEntity>> 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<BaseNodeEntity> nodeMapList = nodeMap.get(mainChainCode);
|
||||
nodeMapList.add(node);
|
||||
} else {
|
||||
ArrayList<BaseNodeEntity> nodeMapList = Lists.newArrayList(node);
|
||||
nodeMap.put(mainChainCode, nodeMapList);
|
||||
}
|
||||
});
|
||||
// 输出节点
|
||||
Map<String, BaseNodeEntity> commonNodeMap = nodeList.stream()
|
||||
.filter(node -> NodeEnum.CommonNode.getName().equals(node.getNodeType()))
|
||||
.collect(Collectors.toMap(BaseNodeEntity::getId, BaseNodeEntity -> BaseNodeEntity));
|
||||
// 判断节点
|
||||
List<BaseNodeEntity> 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<String, List<BaseNodeEntity>> entry : nodeMap.entrySet()) {
|
||||
String mainChainCode = entry.getKey();
|
||||
List<BaseNodeEntity> 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<String, BaseNodeEntity> commonNodeMap = mapNodeList.stream()
|
||||
.filter(node -> NodeEnum.CommonNode.getName().equals(node.getNodeType()))
|
||||
.collect(Collectors.toMap(BaseNodeEntity::getId, BaseNodeEntity -> BaseNodeEntity));
|
||||
// 判断节点
|
||||
List<BaseNodeEntity> 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<BaseChainEntity> 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<BaseChainEntity> 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<BaseChainMapper, BaseChain
|
|||
@Override
|
||||
public void initMainChain() {
|
||||
log.info("进入【初始化主链路】方法");
|
||||
String mainChainName = "mainChain";
|
||||
LambdaQueryWrapper<BaseChainEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BaseChainEntity::getEnableMark, EnableMarkEnum.Enable.getValue())
|
||||
.ne(BaseChainEntity::getChainName, "mainChain");
|
||||
queryWrapper.eq(BaseChainEntity::getEnableMark, EnableMarkEnum.Enable.getValue());
|
||||
List<BaseChainEntity> 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<String, List<BaseChainEntity>> nodeMap = new HashMap<>();
|
||||
// 根据链路编码进行分类
|
||||
chainList.forEach(chain -> {
|
||||
String mainChainCode = chain.getMainChainCode();
|
||||
if (nodeMap.containsKey(mainChainCode)) {
|
||||
List<BaseChainEntity> nodeMapList = nodeMap.get(mainChainCode);
|
||||
nodeMapList.add(chain);
|
||||
} else {
|
||||
ArrayList<BaseChainEntity> nodeMapList = Lists.newArrayList(chain);
|
||||
nodeMap.put(mainChainCode, nodeMapList);
|
||||
}
|
||||
});
|
||||
// 生成链路
|
||||
for (Map.Entry<String, List<BaseChainEntity>> entry : nodeMap.entrySet()) {
|
||||
String mainChainCode = entry.getKey();
|
||||
String chainName = mainChainCode + "_mainChain";
|
||||
List<BaseChainEntity> 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<BaseChainEntity> 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<BaseChainEntity> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue