1.应用场景
适用于Camunda和Activiti5工作流程图初期图形设计,也可以用作项目自带流程图设计,也可以用作工作流程图跨多个流程图中数据线的查找。只适用于无交叉线流程图,有交叉线流程图不在此次代码实现。
2.原型图(手绘)

3.代码实现
public static void main(String[] args) {
List<Map<String, String>> apiList = new ArrayList<>();
Map<String, String> put1 = new HashMap<>();
put1.put("ST", "A");
apiList.add(put1);
Map<String, String> put2 = new HashMap<>();
put2.put("ST", "G");
apiList.add(put2);
Map<String, String> put3 = new HashMap<>();
put3.put("ST", "H");
apiList.add(put3);
Map<String, String> put4 = new HashMap<>();
put4.put("ST", "T");
apiList.add(put4);
Map<String, String> put5 = new HashMap<>();
put5.put("A", "B");
apiList.add(put5);
Map<String, String> put6 = new HashMap<>();
put6.put("G", "F");
apiList.add(put6);
Map<String, String> put7 = new HashMap<>();
put7.put("H", "E");
apiList.add(put7);
Map<String, String> put8 = new HashMap<>();
put8.put("T", "I");
apiList.add(put8);
Map<String, String> put9 = new HashMap<>();
put9.put("B", "D");
apiList.add(put9);
Map<String, String> put10 = new HashMap<>();
put10.put("D", "M");
apiList.add(put10);
Map<String, String> put11 = new HashMap<>();
put11.put("F", "M");
apiList.add(put11);
Map<String, String> put12 = new HashMap<>();
put12.put("E", "N");
apiList.add(put12);
Map<String, String> put13 = new HashMap<>();
put13.put("I", "N");
apiList.add(put13);
Map<String, String> put14 = new HashMap<>();
put14.put("M", "J");
apiList.add(put14);
Map<String, String> put15 = new HashMap<>();
put15.put("M", "S");
apiList.add(put15);
Map<String, String> put16 = new HashMap<>();
put16.put("N", "S");
apiList.add(put16);
Map<String, String> put17 = new HashMap<>();
put17.put("N", "K");
apiList.add(put17);
Map<String, String> put18= new HashMap<>();
put18.put("J", "L");
apiList.add(put18);
Map<String, String> put19 = new HashMap<>();
put19.put("S", "L");
apiList.add(put19);
Map<String, String> put20 = new HashMap<>();
put20.put("K", "O");
apiList.add(put20);
Map<String, String> put21 = new HashMap<>();
put21.put("L", "EN");
apiList.add(put21);
Map<String, String> put22 = new HashMap<>();
put22.put("O", "EN");
apiList.add(put22);
// 匹配到结束节点
System.out.println("全部节点:" + JSON.toJSONString(apiList));
// 开始结束所在的线的集合
List<List<String>> list = new ArrayList<>();
// 一条线
List<String> oneLine = new ArrayList<>();
getApiExeLineList("ST", "EN", apiList, list, oneLine);
// 匹配到结束节点
System.out.println("从后往前显示顺序:");
for(List<String> stringList : list){
Collections.reverse(stringList);
System.out.println(JSON.toJSONString(stringList)); }
}
public static void getApiExeLineList(String start, String end, List<Map<String, String>> apiList, List<List<String>> list, List<String> oneLine) {
// 先加入开始节点
oneLine.add(start);
// 定义一个当前节点后的节点集合
List<String> nextNode = new ArrayList<>();
for (Map<String, String> map : apiList) {
String s = map.get(start);
if (!StringUtils.isEmpty(s)) {
nextNode.add(s);
}
}
// 获取到当前节点后的集合,遍历每一个下个节点
if (nextNode.size() > 0 && !start.equals(end)) {
for (String str : nextNode) {
List<String> list1 = new ArrayList<>(oneLine);
getApiExeLineList(str, end, apiList, list, list1);
}
} else {
if (oneLine.contains(end)) {
list.add(oneLine);
}
}
}
4.感谢查看
本着互相帮助,互相提高的目标,如有疑问请在评论区向我提问。
本文介绍了一种用于设计和解析Camunda及Activiti5工作流程图的方法,特别适用于无交叉线流程图。通过示例代码展示了如何从起始节点到结束节点追踪整个流程路径。
168万+

被折叠的 条评论
为什么被折叠?



