Browse Source

feat:解析流程xml文件内容得到开始节点及下一节点

xuezizhuo 1 year ago
parent
commit
85b27cfe0b

+ 6 - 6
ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmNodeScriptRelevanceController.java

@@ -37,12 +37,12 @@ public class BpmNodeScriptRelevanceController extends BaseController
     @Autowired
     private IBpmNodeScriptRelevanceService bpmNodeScriptRelevanceService;
 
-/**
- * 查询流程节点脚本关联列表
- */
-@PreAuthorize("@ss.hasPermi('system:relevance:list')")
-@GetMapping("/list")
-@ApiOperation(value = "查询流程节点脚本关联列表")
+    /**
+     * 查询流程节点脚本关联列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:relevance:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询流程节点脚本关联列表")
     public TableDataInfo list(BpmNodeScriptRelevance bpmNodeScriptRelevance)
     {
         startPage();

+ 40 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/bpm/XmlDataParserUtils.java

@@ -0,0 +1,40 @@
+package com.ruoyi.common.utils.bpm;
+
+import cn.hutool.core.util.XmlUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class XmlDataParserUtils {
+
+    /**
+     * 解析流程xml文件内容,得到开始节点和下一个节点
+     * @param xmlData xml内容
+     * @return
+     */
+    public static Map<String,String> getStartNodeAndNextNode(String xmlData){
+        Map<String, String> map = new HashMap<>();
+        Document document= XmlUtil.parseXml(xmlData);
+        //获得XML文档根节点
+        Element elementG=XmlUtil.getRootElement(document);
+        //获取bpmn:process节点
+        Element bpmnProcessEvent = XmlUtil.getElement(elementG,"bpmn:process");
+        //获取开始节点并得到开始节点ID
+        Element bpmnStartEvent=XmlUtil.getElement(bpmnProcessEvent,"bpmn:startEvent");
+        String startNode = bpmnStartEvent.getAttribute("id");
+        map.put("startNode",startNode);
+
+        //获取所有序列流(顺序),循环得到开始节点的下一个节点
+        NodeList elementsByTagName = elementG.getElementsByTagName("bpmn:sequenceFlow");
+        for (int i = 0; i < elementsByTagName.getLength(); i++) {
+            if (startNode.equals(elementsByTagName.item(i).getAttributes().getNamedItem("sourceRef").getNodeValue())) {
+                map.put("nextNode",elementsByTagName.item(i).getAttributes().getNamedItem("targetRef").getNodeValue());
+                break;
+            }
+        }
+        return map;
+    }
+}