Răsfoiți Sursa

作业执行

车车 5 luni în urmă
părinte
comite
8d77d2814e

+ 16 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowdesign/vo/PcValueVO.java

@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowdesign.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PcValueVO {
+
+    private String uuid;
+
+    private List<String> parentUuid;
+
+    private List<String> childrenUuid;
+
+}

+ 5 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/workdesign/workflowdesign/vo/WorkflowDesignRespVO.java

@@ -39,4 +39,9 @@ public class WorkflowDesignRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+
 }

+ 330 - 46
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowDesignNodeServiceImpl.java

@@ -3,15 +3,20 @@ package cn.iocoder.yudao.module.iscs.service.workdesign;
 import cn.hutool.core.lang.Assert;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowdesign.vo.PcValueVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowdesignnode.vo.WorkflowDesignNodePageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowdesignnode.vo.WorkflowDesignNodeSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowDesignDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowDesignNodeDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowDesignNodeMapper;
+import cn.iocoder.yudao.module.iscs.utils.PcValueParser;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import jakarta.annotation.Resource;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -19,6 +24,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 流程节点配置 Service 实现类
@@ -31,6 +37,9 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
 
     @Resource
     private WorkflowDesignNodeMapper workflowDesignNodeMapper;
+    @Resource
+    @Lazy
+    private WorkflowDesignService workflowDesignService;
 
     @Override
     public Long createWorkflowDesignNode(WorkflowDesignNodeSaveReqVO createReqVO) {
@@ -83,6 +92,12 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
             List<WorkflowDesignNodeDO> workflowDesignNodeDOS = parseJsonToList(content);
             workflowDesignNodeDOS.forEach(o -> o.setDesignId(designId));
             saveBatch(workflowDesignNodeDOS);
+            if (!workflowDesignNodeDOS.isEmpty()) {
+                workflowDesignService.update(Wrappers.<WorkflowDesignDO>lambdaUpdate()
+                        .eq(WorkflowDesignDO::getDeleted, designId)
+                        .set(WorkflowDesignDO::getNodeCount, workflowDesignNodeDOS.size())
+                );
+            }
         } catch (Exception e) {
             log.error(e + "");
             Assert.isFalse(true, "流程node解析失败!");
@@ -91,7 +106,7 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
     }
 
 
-    public List<WorkflowDesignNodeDO> parseJsonToList(String json) {
+    public static List<WorkflowDesignNodeDO> parseJsonToList(String json) {
         // 替换为你的JSON字符串(实际使用时注意转义,或从文件/接口读取)
         String jsonStr = json;
         List<WorkflowDesignNodeDO> workflowDesignNodeDOS = new ArrayList<>();
@@ -103,7 +118,16 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
             JsonNode rootNode = objectMapper.readTree(jsonStr);
             // 3. 核心:获取nodes数组节点
             JsonNode nodesArray = rootNode.get("nodes");
-            System.out.println(nodesArray);
+            JsonNode adjacencyNode = rootNode.get("adjacency");
+
+            Map<String, PcValueVO> pcValueMap = PcValueParser.parseAdjacencyToMap(adjacencyNode);
+
+            // 现在您可以根据 UUID 访问特定的 PcValueVO 对象
+            System.out.println("map: " + pcValueMap);
+            PcValueVO someNode = pcValueMap.get("createJob-1766023817148");
+            System.out.println("Parent UUIDs: " + someNode.getParentUuid());
+            System.out.println("Children UUIDs: " + someNode.getChildrenUuid());
+
 
             // 4. 遍历nodes数组,提取数据
             if (nodesArray.isArray()) {
@@ -129,6 +153,12 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                     workflowDesignNodeDO.setType(type);
                     workflowDesignNodeDO.setPosition(position);
                     workflowDesignNodeDO.setData(data);
+                    // 处理关系字段
+                    PcValueVO pcValueVO = pcValueMap.get(uuid);
+                    if (pcValueVO != null) {
+                        workflowDesignNodeDO.setParentUuid(StringUtils.join(pcValueVO.getParentUuid(), ','));
+                        workflowDesignNodeDO.setChildrenUuid(StringUtils.join(pcValueVO.getChildrenUuid(), ','));
+                    }
                     workflowDesignNodeDOS.add(workflowDesignNodeDO);
                 }
             }
@@ -142,120 +172,120 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
     public static void main(String[] args) {
 
         String aa = "{\n" +
-                "  \"generatedAt\": \"2025-12-18T02:12:57.931Z\",\n" +
+                "  \"generatedAt\": \"2025-12-18T08:36:23.787Z\",\n" +
                 "  \"nodeCount\": 14,\n" +
                 "  \"edgeCount\": 16,\n" +
                 "  \"adjacency\": {\n" +
                 "    \"createJob-1766023817148\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"confirm-1766023821012\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": []\n" +
+                "      \"childrenUuid\": []\n" +
                 "    },\n" +
                 "    \"confirm-1766023821012\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"review-1766023825604\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"createJob-1766023817148\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"review-1766023825604\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"inputInfo-1766023831636\",\n" +
                 "        \"inputInfo-1766023848740\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"confirm-1766023821012\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"inputInfo-1766023831636\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"isolation-1766023834331\",\n" +
                 "        \"isolation-1766023839756\",\n" +
                 "        \"isolation-1766023837357\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"review-1766023825604\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"isolation-1766023834331\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"releaseIsolation-1766023890300\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"inputInfo-1766023831636\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"isolation-1766023837357\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"releaseIsolation-1766023887325\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"inputInfo-1766023831636\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"isolation-1766023839756\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"releaseIsolation-1766023893308\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"inputInfo-1766023831636\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"inputInfo-1766023848740\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"confirm-1766023875733\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"review-1766023825604\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"confirm-1766023875733\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"complete-1766023921996\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"inputInfo-1766023848740\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"releaseIsolation-1766023887325\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"returnLock-1766023906693\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"isolation-1766023837357\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"releaseIsolation-1766023890300\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"returnLock-1766023906693\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"isolation-1766023834331\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"releaseIsolation-1766023893308\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"returnLock-1766023906693\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"isolation-1766023839756\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"returnLock-1766023906693\": {\n" +
-                "      \"incoming\": [\n" +
+                "      \"parentUuid\": [\n" +
                 "        \"complete-1766023921996\"\n" +
                 "      ],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"releaseIsolation-1766023887325\",\n" +
                 "        \"releaseIsolation-1766023890300\",\n" +
                 "        \"releaseIsolation-1766023893308\"\n" +
                 "      ]\n" +
                 "    },\n" +
                 "    \"complete-1766023921996\": {\n" +
-                "      \"incoming\": [],\n" +
-                "      \"outgoing\": [\n" +
+                "      \"parentUuid\": [],\n" +
+                "      \"childrenUuid\": [\n" +
                 "        \"returnLock-1766023906693\",\n" +
                 "        \"confirm-1766023875733\"\n" +
                 "      ]\n" +
@@ -274,7 +304,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"创建作业\",\n" +
                 "        \"type\": \"createJob\",\n" +
-                "        \"nodeId\": \"001\"\n" +
+                "        \"nodeId\": \"001\",\n" +
+                "        \"icon\": \"createJob\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -289,7 +337,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"确认\",\n" +
                 "        \"type\": \"confirm\",\n" +
-                "        \"nodeId\": \"002\"\n" +
+                "        \"nodeId\": \"002\",\n" +
+                "        \"icon\": \"confirm\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -304,7 +370,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"审核\",\n" +
                 "        \"type\": \"review\",\n" +
-                "        \"nodeId\": \"003\"\n" +
+                "        \"nodeId\": \"003\",\n" +
+                "        \"icon\": \"review\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -319,7 +403,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"录入信息\",\n" +
                 "        \"type\": \"inputInfo\",\n" +
-                "        \"nodeId\": \"004\"\n" +
+                "        \"nodeId\": \"004\",\n" +
+                "        \"icon\": \"inputInfo\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -334,7 +436,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"隔离/方案\",\n" +
                 "        \"type\": \"isolation\",\n" +
-                "        \"nodeId\": \"005\"\n" +
+                "        \"nodeId\": \"005\",\n" +
+                "        \"icon\": \"isolation\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -349,7 +469,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"隔离/方案\",\n" +
                 "        \"type\": \"isolation\",\n" +
-                "        \"nodeId\": \"006\"\n" +
+                "        \"nodeId\": \"006\",\n" +
+                "        \"icon\": \"isolation\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -364,7 +502,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"隔离/方案\",\n" +
                 "        \"type\": \"isolation\",\n" +
-                "        \"nodeId\": \"007\"\n" +
+                "        \"nodeId\": \"007\",\n" +
+                "        \"icon\": \"isolation\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -379,7 +535,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"录入信息\",\n" +
                 "        \"type\": \"inputInfo\",\n" +
-                "        \"nodeId\": \"008\"\n" +
+                "        \"nodeId\": \"008\",\n" +
+                "        \"icon\": \"inputInfo\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -394,7 +568,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"确认\",\n" +
                 "        \"type\": \"confirm\",\n" +
-                "        \"nodeId\": \"009\"\n" +
+                "        \"nodeId\": \"009\",\n" +
+                "        \"icon\": \"confirm\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -409,7 +601,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"解除隔离\",\n" +
                 "        \"type\": \"releaseIsolation\",\n" +
-                "        \"nodeId\": \"010\"\n" +
+                "        \"nodeId\": \"010\",\n" +
+                "        \"icon\": \"releaseIsolation\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -424,7 +634,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"解除隔离\",\n" +
                 "        \"type\": \"releaseIsolation\",\n" +
-                "        \"nodeId\": \"011\"\n" +
+                "        \"nodeId\": \"011\",\n" +
+                "        \"icon\": \"releaseIsolation\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -439,7 +667,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"解除隔离\",\n" +
                 "        \"type\": \"releaseIsolation\",\n" +
-                "        \"nodeId\": \"012\"\n" +
+                "        \"nodeId\": \"012\",\n" +
+                "        \"icon\": \"releaseIsolation\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -454,7 +700,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"还锁\",\n" +
                 "        \"type\": \"returnLock\",\n" +
-                "        \"nodeId\": \"013\"\n" +
+                "        \"nodeId\": \"013\",\n" +
+                "        \"icon\": \"returnLock\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    },\n" +
                 "    {\n" +
@@ -469,7 +733,25 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "      \"data\": {\n" +
                 "        \"label\": \"完成/结束\",\n" +
                 "        \"type\": \"complete\",\n" +
-                "        \"nodeId\": \"014\"\n" +
+                "        \"nodeId\": \"014\",\n" +
+                "        \"icon\": \"complete\",\n" +
+                "        \"responsible\": \"\",\n" +
+                "        \"remark\": \"\",\n" +
+                "        \"submitForm\": \"\",\n" +
+                "        \"isolationMethod\": \"\",\n" +
+                "        \"isolationPoints\": [],\n" +
+                "        \"isolationNode\": [],\n" +
+                "        \"selectedIsolationNodeId\": \"\",\n" +
+                "        \"lockPerson\": \"\",\n" +
+                "        \"coLockPersons\": [],\n" +
+                "        \"notificationMethods\": {\n" +
+                "          \"sms\": false,\n" +
+                "          \"message\": false,\n" +
+                "          \"email\": false,\n" +
+                "          \"app\": false\n" +
+                "        },\n" +
+                "        \"notificationPerson\": \"\",\n" +
+                "        \"notificationTime\": \"\"\n" +
                 "      }\n" +
                 "    }\n" +
                 "  ],\n" +
@@ -605,7 +887,9 @@ public class WorkflowDesignNodeServiceImpl extends ServiceImpl<WorkflowDesignNod
                 "  ]\n" +
                 "}";
 
-        // parseJsonToList(aa);
+        parseJsonToList(aa);
     }
 
+
+
 }

+ 10 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowDesignServiceImpl.java

@@ -58,16 +58,23 @@ public class WorkflowDesignServiceImpl extends ServiceImpl<WorkflowDesignMapper,
         Assert.isTrue(list.isEmpty(), "该名称已被使用!");
         // Assert.notBlank(updateReqVO.getContent(), "流程配置内容不能为空!");
         WorkflowDesignDO byId = getById(updateReqVO.getId());
+        // 1.没有存储节点信息时
+        if (byId != null && StringUtils.isBlank(byId.getContent()) && StringUtils.isNotBlank(updateReqVO.getContent())) {
+            // 新增流程节点模板
+            workflowDesignNodeService.createNodeByJson(updateReqVO.getId(), updateReqVO.getContent());
+        }
+        // 2.存了节点信息,但是修改了
         if (byId != null
                 && StringUtils.isNotBlank(byId.getContent())
                 && StringUtils.isNotBlank(updateReqVO.getContent())
-                && !byId.getContent().equals(updateReqVO.getContent())) {
+                && byId.getContent().length() != updateReqVO.getContent().length()) {
             // 如果流程节点修改,则需要删除然后在新增
             workflowDesignNodeService.remove(Wrappers.<WorkflowDesignNodeDO>lambdaQuery()
                     .eq(WorkflowDesignNodeDO::getDesignId, updateReqVO.getId()));
+            // 新增流程节点模板
+            workflowDesignNodeService.createNodeByJson(updateReqVO.getId(), updateReqVO.getContent());
         }
-        // 新增流程节点模板
-        workflowDesignNodeService.createNodeByJson(updateReqVO.getId(), updateReqVO.getContent());
+
         // 更新
         WorkflowDesignDO updateObj = BeanUtils.toBean(updateReqVO, WorkflowDesignDO.class);
         workflowDesignMapper.updateById(updateObj);

+ 22 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/workdesign/WorkflowWorkServiceImpl.java

@@ -9,7 +9,9 @@ import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowwork.vo.
 import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowwork.vo.WorkflowWorkSaveReqVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowDesignDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkDO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkNodeDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.workdesign.WorkflowWorkMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
@@ -63,8 +65,27 @@ public class WorkflowWorkServiceImpl extends ServiceImpl<WorkflowWorkMapper, Wor
 
     @Override
     public void updateWorkflowWork(WorkflowWorkSaveReqVO updateReqVO) {
-        // 更新
+        Assert.notNull(updateReqVO.getId(), "ID不可为空!");
+        Assert.notBlank(updateReqVO.getName(), "名称不能为空!");
+        Assert.notNull(updateReqVO.getDesignId(), "流程设计ID不能为空!");
+        // 获取作业数据
+        WorkflowWorkDO byId = getById(updateReqVO.getId());
+        Assert.notNull(byId, "作业不存在!");
         WorkflowWorkDO updateObj = BeanUtils.toBean(updateReqVO, WorkflowWorkDO.class);
+        // 检查作业流程是不是更换了,更换了就需要重新解析
+        if (!byId.getDesignId().equals(updateReqVO.getDesignId())) {
+            // 根据designId获取设计流程设计数据
+            WorkflowDesignDO workflowDesignDO = workflowDesignService.getById(updateReqVO.getDesignId());
+            Assert.notNull(workflowDesignDO, "流程设计数据丢失!");
+            updateObj.setDesignContent(workflowDesignDO.getContent());
+            // 删除之前的isc_workflow_work_node数据,根据新的选择生成新的解析节点
+            workflowWorkNodeService.remove(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                    .eq(WorkflowWorkNodeDO::getWorkId, updateReqVO.getId()));
+            // 开始生成节点信息
+            workflowWorkNodeService.copyNode(updateReqVO.getDesignId(), updateReqVO.getId());
+        }
+        // 更新
+
         workflowWorkMapper.updateById(updateObj);
     }
 

+ 78 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/utils/PcValueParser.java

@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.iscs.utils;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowdesign.vo.PcValueVO;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class PcValueParser {
+
+    /**
+     * 将 adjacency JSON 节点解析为 PcValueVO 对象的映射
+     * @param adjacencyNode 包含邻接关系的 JSON 节点
+     * @return UUID 到 PcValueVO 对象的映射
+     */
+    public static Map<String, PcValueVO> parseAdjacencyToMap(JsonNode adjacencyNode) {
+        Map<String, PcValueVO> result = new HashMap<>();
+
+        if (adjacencyNode == null || !adjacencyNode.isObject()) {
+            return result;
+        }
+
+        // 遍历所有节点
+        adjacencyNode.fields().forEachRemaining(entry -> {
+            String uuid = entry.getKey();
+            JsonNode nodeData = entry.getValue();
+
+            // 创建 PcValueVO 对象
+            PcValueVO vo = new PcValueVO();
+            vo.setUuid(uuid);
+
+            // 解析 parentUuid 列表
+            if (nodeData.has("parentUuid")) {
+                ArrayNode parentUuidArray = (ArrayNode) nodeData.get("parentUuid");
+                List<String> parentUuids = new ArrayList<>();
+                for (JsonNode parentNode : parentUuidArray) {
+                    parentUuids.add(parentNode.asText());
+                }
+                vo.setParentUuid(parentUuids);
+            } else {
+                vo.setParentUuid(new ArrayList<>());
+            }
+
+            // 解析 childrenUuid 列表
+            if (nodeData.has("childrenUuid")) {
+                ArrayNode childrenUuidArray = (ArrayNode) nodeData.get("childrenUuid");
+                List<String> childrenUuids = new ArrayList<>();
+                for (JsonNode childNode : childrenUuidArray) {
+                    childrenUuids.add(childNode.asText());
+                }
+                vo.setChildrenUuid(childrenUuids);
+            } else {
+                vo.setChildrenUuid(new ArrayList<>());
+            }
+
+            result.put(uuid, vo);
+        });
+
+        return result;
+    }
+
+    /**
+     * 从根节点中提取 adjacency 数据并解析为 PcValueVO 映射
+     * @param rootNode 根 JSON 节点
+     * @return UUID 到 PcValueVO 对象的映射
+     */
+    public static Map<String, PcValueVO> parseFromRoot(JsonNode rootNode) {
+        if (rootNode == null || !rootNode.has("adjacency")) {
+            return new HashMap<>();
+        }
+
+        JsonNode adjacencyNode = rootNode.get("adjacency");
+        return parseAdjacencyToMap(adjacencyNode);
+    }
+}