update 获得节点列表
This commit is contained in:
+138
-10
@@ -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<ProcessModelNode> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ProcessModelNode::getModelId,modelId);
|
||||
//wrapper.eq(ProcessModelNode::getNodeType,"userTask");
|
||||
wrapper.orderByAsc(ProcessModelNode::getSort);
|
||||
List<ProcessModelNode> nodeOriginList = processModelNodeService.list(wrapper);
|
||||
ArrayList<Map<String,Object>> nodes = new ArrayList<>();
|
||||
ArrayList<Map<String,Object>> edges = new ArrayList<>();
|
||||
|
||||
//获取所有子流程id
|
||||
List<String> subProcessIdList = nodeOriginList.stream()
|
||||
.map(ProcessModelNode::getXmlSubNodeId)
|
||||
.filter(StringUtils::isNotBlank)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
Map<String,String> startEventReplace = new HashMap<>();
|
||||
Map<String,ProcessModelNode> endEventReplace = new HashMap<>();
|
||||
//确定结束节点的连线
|
||||
List<ProcessModelNode> removeNodeList = new ArrayList<>();
|
||||
for (String subProcessId : subProcessIdList) {
|
||||
//获得全部子流程节点
|
||||
List<ProcessModelNode> subNodeList = nodeOriginList.stream()
|
||||
.filter(item -> subProcessId.equals(item.getXmlSubNodeId()))
|
||||
.collect(Collectors.toList());
|
||||
Map<String, String> sourceTargetMap = CollStreamUtil.toMap(subNodeList, ProcessModelNode::getXmlSourceRef, ProcessModelNode::getXmlTargetRef);
|
||||
Map<String, ProcessModelNode> 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<ProcessModelNode> beforeSubProcessFlowList = nodeOriginList.stream()
|
||||
.filter(item -> subProcessIdList.contains(item.getXmlSourceRef()))
|
||||
.collect(Collectors.toList());
|
||||
//获得子流程之后的连线map
|
||||
Map<String, ProcessModelNode> beforeSubProcessFlowMap = CollStreamUtil.toIdentityMap(beforeSubProcessFlowList, ProcessModelNode::getXmlSourceRef);
|
||||
//把之前删除的结束节点更新后在加回来
|
||||
List<ProcessModelNode> 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<String,Object> 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<ProcessModelNode> removeList = nodeOriginList.stream()
|
||||
.filter(item -> "驳回".equals(item.getNodeName()))
|
||||
.collect(Collectors.toList());
|
||||
//全部去除
|
||||
nodeOriginList.removeAll(removeList);
|
||||
|
||||
//找到全部的通过线
|
||||
List<ProcessModelNode> passFlowList = nodeOriginList.stream()
|
||||
.filter(item -> "通过".equals(item.getNodeName()))
|
||||
.filter(item -> "sequenceFlow".equals(item.getNodeType()))
|
||||
.collect(Collectors.toList());
|
||||
//全部去除
|
||||
nodeOriginList.removeAll(passFlowList);
|
||||
//获得来源id为网关的对应map(通过线的来源id一定是审批网关)
|
||||
Map<String, ProcessModelNode> sourceIdIsGatewayMap = CollStreamUtil.toIdentityMap(passFlowList, ProcessModelNode::getXmlSourceRef);
|
||||
//根据通过的线获取全部审批网关id
|
||||
List<String> approvalGatewayList = passFlowList.stream().map(ProcessModelNode::getXmlSourceRef).collect(Collectors.toList());
|
||||
//根据审批网关id获取网关前的线(目标id为网关id的是网关前的线)
|
||||
List<ProcessModelNode> beforeGatewayFlowList = nodeOriginList.stream()
|
||||
.filter(item -> approvalGatewayList.contains(item.getXmlTargetRef()))
|
||||
.collect(Collectors.toList());
|
||||
//全部去除
|
||||
nodeOriginList.removeAll(beforeGatewayFlowList);
|
||||
|
||||
ArrayList<Map<String,Object>> 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<String,Object> edge = new HashMap<>();
|
||||
edge.put("source", beforeGatewayNodeId);
|
||||
edge.put("target",afterGatewayNodeId);
|
||||
edges.add(edge);
|
||||
}
|
||||
//找到全部的审批网关(审批网关名字是null)
|
||||
List<ProcessModelNode> gatewayList = nodeOriginList.stream()
|
||||
.filter(item -> approvalGatewayList.contains(item.getXmlNodeId()))
|
||||
.collect(Collectors.toList());
|
||||
//全部去除
|
||||
nodeOriginList.removeAll(gatewayList);
|
||||
|
||||
|
||||
ArrayList<Map<String,Object>> nodes = new ArrayList<>();
|
||||
Map<String, ProcessModelNode> 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<String,Object> edge = new HashMap<>();
|
||||
edge.put("label",nodeName);
|
||||
edge.put("source", xmlSourceRef);
|
||||
edge.put("target",xmlTargetRef);
|
||||
edges.add(edge);
|
||||
}else if ("userTask".equals(nodeType)){
|
||||
Map<String,Object> 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<String,Object> node = new HashMap<>();
|
||||
node.put("id",modelNode.getXmlNodeId());
|
||||
node.put("name","条件网关");
|
||||
node.put("isApprovalNode",modelNode.getIsApprovalNode());
|
||||
node.put("isCanDeleted",modelNode.getIsCanDeleted());
|
||||
nodes.add(node);
|
||||
|
||||
-1
@@ -11,5 +11,4 @@ import java.util.List;
|
||||
* @date 2023-09-26 15:12
|
||||
*/
|
||||
public interface LawsProcessNodeOriginMapper extends BaseMapper<ProcessNodeOrigin> {
|
||||
int insertList(@Param("list") List<ProcessNodeOrigin> list);
|
||||
}
|
||||
-2
@@ -11,8 +11,6 @@ import com.jero.modules.activiti.entity.ProcessModelNode;
|
||||
*@date 2023-10-08 14:08
|
||||
*/
|
||||
public interface ProcessModelNodeMapper extends BaseMapper<ProcessModelNode> {
|
||||
int insertList(@Param("list")List<ProcessModelNode> list);
|
||||
|
||||
int deleteByModelId(@Param("modelId")String modelId);
|
||||
|
||||
|
||||
|
||||
-39
@@ -27,43 +27,4 @@
|
||||
sys_code
|
||||
</sql>
|
||||
|
||||
<!--auto generated by MybatisCodeHelper on 2023-09-25-->
|
||||
<insert id="insertList">
|
||||
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
|
||||
<foreach collection="list" index="index" item="element" separator=",">
|
||||
(
|
||||
#{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}
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
</mapper>
|
||||
-38
@@ -36,44 +36,6 @@
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="sys_code" property="sysCode"/>
|
||||
</resultMap>
|
||||
<insert id="insertList">
|
||||
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
|
||||
<foreach collection="list" item="element" index="index" separator=",">
|
||||
(
|
||||
#{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}
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
<!--auto generated by MybatisCodeHelper on 2023-10-08-->
|
||||
<delete id="deleteByModelId">
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ public class LawsProcessNodeOriginService extends ServiceImpl<LawsProcessNodeOri
|
||||
processNodeOrigin.setId(null);
|
||||
processNodeOrigin.setProcessDefinitionId(processDefinitionId);
|
||||
}
|
||||
processNodeOriginMapper.insertList(processNodeOriginList);
|
||||
this.saveBatch(processNodeOriginList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
|
||||
processModelNode.setIsApprovalNode(YesOrNoEnum.YES.getInteger());
|
||||
}
|
||||
}
|
||||
processModelNodeMapper.insertList(processModelNodeList);
|
||||
this.saveBatch(processModelNodeList);
|
||||
}
|
||||
|
||||
public Object addTask(AddTaskVO addTaskVO, HttpServletResponse response) {
|
||||
|
||||
Reference in New Issue
Block a user