From 788c3621c4a72539f68093440f6e9ac71775a14b Mon Sep 17 00:00:00 2001
From: Fancy <Fancy.fx@outlook.com>
Date: 星期四, 11 七月 2024 15:58:51 +0800
Subject: [PATCH] save node logic change

---
 pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/process/ProcessSv.java |  131 ++++++++++++++++++++++++++-----------------
 1 files changed, 79 insertions(+), 52 deletions(-)

diff --git a/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/process/ProcessSv.java b/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/process/ProcessSv.java
index 961200e..37ca3a5 100644
--- a/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/process/ProcessSv.java
+++ b/pms-parent/pms-web-product/src/main/java/com/dy/pmsProduct/process/ProcessSv.java
@@ -26,6 +26,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -41,37 +42,45 @@
     private FileOperate fileOperate;
     private OthFileMapper othFileMapper;
     @Value("${dy.webFile.fmUrl}")
-    private String fmUrl ;
+    private String fmUrl;
+
     @Autowired
     public void setAssemblyDao(PrAssemblyPlanMapper assemblyDao) {
         this.assemblyDao = assemblyDao;
     }
+
     @Autowired
-    public void setProcessDao(PrProductionProcessMapper dao){
+    public void setProcessDao(PrProductionProcessMapper dao) {
         processDao = dao;
     }
+
     @Autowired
-    public void setNodeDao(PrProductionNodeMapper dao){
+    public void setNodeDao(PrProductionNodeMapper dao) {
         nodeDao = dao;
     }
+
     @Autowired
-    public void setWorkDao(PrWorkingInstructionMapper dao){
+    public void setWorkDao(PrWorkingInstructionMapper dao) {
         workDao = dao;
     }
+
     @Autowired
-    public void setUserUtil(UserUtil userUtil){
+    public void setUserUtil(UserUtil userUtil) {
         this.userUtil = userUtil;
     }
+
     @Autowired
-    public void setFileOperate(FileOperate fileOperate){
+    public void setFileOperate(FileOperate fileOperate) {
         this.fileOperate = fileOperate;
     }
+
     @Autowired
-    public void setOthFileMapper(OthFileMapper othFileMapper){
+    public void setOthFileMapper(OthFileMapper othFileMapper) {
         this.othFileMapper = othFileMapper;
     }
+
     @Transactional
-    public int save(PrProductionProcess process){
+    public int save(PrProductionProcess process) {
         //娴佺▼鍚嶇О涓嶈兘閲嶅
         if (processDao.exists(process.name, process.id)) {
             throw new RuntimeException("娴佺▼鍚嶇О涓嶈兘閲嶅");
@@ -83,92 +92,110 @@
     }
 
     @Transactional
-    public int update(PrProductionProcess process){
+    public int update(PrProductionProcess process) {
         //娴佺▼鍚嶇О涓嶈兘閲嶅
         if (processDao.exists(process.name, process.id)) {
             throw new RuntimeException("娴佺▼鍚嶇О涓嶈兘閲嶅");
         }
         PrProductionProcess originProductionProcess = processDao.selectByPrimaryKey(process.id);
-        //濡傛灉宸茬粡缁戝畾浠诲姟(鐩墠涓嶅寘鎷殏鍋淺缁撴潫鐘舵�� 鎶曞叆鏁颁负0鐨勪换鍔� 浠ュ鐨� 鎵�鏈変换鍔�),浜у搧\鑺傜偣id涓嶈兘鍒犻櫎涓嶈兘淇敼
-        if(!originProductionProcess.getProName().equals(process.getProName())){
-            //缁勮浠诲姟璁″垝
-            PrAssemblyPlan params = new PrAssemblyPlan();
-            params.setProcessId(process.id);
-            List<PrAssemblyPlan> planList = assemblyDao.selectAssyPlanSimplify(params);
-            List<PrAssemblyPlan> onlinePlanList = planList.stream().filter(plan -> plan.getStatus() == PlanStatusEnum.NORMAL.getCode()).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(planList)) {
-                if (planList.stream().anyMatch(plan -> plan.getInputNumber() > 0)) {
-                    throw new RuntimeException("瀛樺湪缁戝畾鐨勪换鍔�,骞朵笖鎶曞叆鐢熶骇,浜у搧涓嶈兘淇敼");
-                }else if(CollectionUtils.isNotEmpty(onlinePlanList)){
-                    //鍏堝皢缁勮浠诲姟缃负鏆傚仠鐘舵��
-                    onlinePlanList.forEach(plan -> {
-                        plan.status = PlanStatusEnum.PAUSE.getCode();
-                        assemblyDao.updateByPrimaryKeySelective(plan);
-                    });
+        //濡傛灉宸茬粡缁戝畾缁勮浠诲姟璁″垝(鐩墠涓嶅寘鎷殏鍋淺缁撴潫鐘舵�� 鎶曞叆鏁颁负0鐨勪换鍔� 浠ュ鐨� 鎵�鏈変换鍔�),浜у搧\鑺傜偣id涓嶈兘鍒犻櫎涓嶈兘淇敼
+        PrAssemblyPlan params = new PrAssemblyPlan();
+        params.setProcessId(process.id);
+        List<PrAssemblyPlan> planList = assemblyDao.selectAssyPlanSimplify(params);
+        List<PrAssemblyPlan> onlinePlanList = planList.stream().filter(plan -> plan.getStatus() == PlanStatusEnum.NORMAL.getCode()).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(planList)) {
+            if (planList.stream().anyMatch(plan -> plan.getInputNumber() > 0)) { //瀛樺湪浠诲姟宸茬粡鎶曞叆鐢熶骇
+                if (!originProductionProcess.getProName().equals(process.getProName())) {
+                    throw new RuntimeException("瀛樺湪宸茬粡鎶曞叆鐢熶骇缁戝畾鐨勪换鍔�,浜у搧涓嶈兘淇敼");
                 }
+                //鑺傜偣id涓嶈兘鍒犻櫎
+                if (!originProductionProcess.getNodes().stream().allMatch(node -> process.getNodes().stream().anyMatch(node::equals))) {
+                    throw new RuntimeException("瀛樺湪宸茬粡鎶曞叆鐢熶骇缁戝畾鐨勪换鍔�,鑺傜偣涓嶈兘鍒犻櫎");
+                }
+            } else if (CollectionUtils.isNotEmpty(onlinePlanList)) {
+                //鍏堝皢缁勮浠诲姟缃负鏆傚仠鐘舵��
+                onlinePlanList.forEach(plan -> {
+                    plan.status = PlanStatusEnum.PAUSE.getCode();
+                    assemblyDao.updateByPrimaryKeySelective(plan);
+                });
             }
         }
         prepareProcess(process);
         int count = processDao.updateByPrimaryKeySelective(process);
-        // 浼樺寲锛氬彧鏈夊綋鑺傜偣鏈夊彉鏇存椂鎵嶅垹闄ゅ苟閲嶆柊鎻掑叆
-        if (!process.nodes.isEmpty()) {
-            List<Long> nodeIdsToDelete = process.getNodes().stream()
-                    .map(PrProductionNode::getId) // 鏄犲皠鑺傜偣鍒板叾ID
-                    .collect(Collectors.toList());
+        // 浼樺寲锛氬彧鏈夊綋鑺傜偣鏈夊彉鏇存椂    鏍规嵁ID鏇存柊鍐呭 娌℃湁鍖归厤鍒扮殑ID 鍒犻櫎  澶氫綑鐨処D 鏂板
+
+        List<Long> nodeIdsToDelete = originProductionProcess.getNodes().stream()
+                .filter(node -> process.nodes.stream().filter(newNode ->  node.getId().equals(newNode.getId())).count() == 0)
+                .map(PrProductionNode::getId) // 鏄犲皠鑺傜偣鍒板叾ID
+                .collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(nodeIdsToDelete)) {
+            nodeDao.deleteByNodeId(nodeIdsToDelete);
             workDao.deleteByNodeId(nodeIdsToDelete);
-            nodeDao.deleteByProcessId(process.id);
         }
         saveNodesAndInstructions(process);
         return count;
     }
 
     // 鎻愬彇鍏遍�氶�昏緫鍒板崟鐙柟娉曚互鍑忓皯浠g爜閲嶅
-    private void prepareProcess(PrProductionProcess process){
+    private void prepareProcess(PrProductionProcess process) {
         process.disabled = false;
         process.deleted = false;
         BaUser loginUser = userUtil.getUser(UserTokenContext.get());
-        if(loginUser!=null){
+        if (loginUser != null) {
             process.creator = loginUser.id;
         }
         process.nodes.forEach(node -> {
             node.processId = process.id;
-            node.deleted= false;
+            node.deleted = false;
         });
     }
 
     // 灏嗚妭鐐瑰拰宸ヤ綔鎸囩ず鐨勪繚瀛橀�昏緫灏佽鍒颁竴涓柟娉曚腑
-    private void saveNodesAndInstructions(PrProductionProcess process){
+    private void saveNodesAndInstructions(PrProductionProcess process) {
+        List<PrProductionNode> haveIdList = new ArrayList<>();
+        List<PrProductionNode> noIdList = new ArrayList<>();
+
         process.nodes.forEach(node -> {
             node.processId = process.id;
+            if (node.getId() != null && node.getId() != 0) {
+                haveIdList.add(node);
+            } else {
+                noIdList.add(node);
+            }
         });
-        try{
-            nodeDao.insertMany(process.nodes);
-        }catch (DuplicateKeyException e){
+        try {
+            if (haveIdList.size() > 0) {
+                for (int i = 0; i < haveIdList.size(); i++) {
+                    nodeDao.updateByPrimaryKeySelective(haveIdList.get(i));
+                }
+            }
+            if (noIdList.size() > 0) {//CollectionUtils.isNotEmpty(noIdList)
+                nodeDao.insertMany(noIdList);
+            }
+        } catch (DuplicateKeyException e) {
             throw new RuntimeException("鑺傜偣椤哄簭閲嶅");
         }
         List<PrWorkingInstruction> workList = process.nodes.stream().map(node -> {
-            if(node.instruction !=null){
+            if (node.instruction != null) {
                 node.instruction.nodeId = node.id;
                 return node.instruction;
             }
             return null;
         }).filter(work -> work != null).toList();
-        if(CollectionUtils.isNotEmpty(workList)){
+        if (CollectionUtils.isNotEmpty(workList)) {
             workDao.insertMany(workList);
         }
     }
 
-
-
-    public int delete(Long id){
+    public int delete(Long id) {
         return processDao.deleteLogicById(id);
     }
 
-    public PrProductionProcess selectById(Long id){
+    public PrProductionProcess selectById(Long id) {
         PrProductionProcess process = processDao.selectByPrimaryKey(id);
-        if(process != null){
+        if (process != null) {
             process.nodes.forEach(node -> {
-                if(node.instruction != null){
+                if (node.instruction != null) {
                     addUrl(node.instruction);
                 }
             });
@@ -176,13 +203,13 @@
         return process;
     }
 
-    public QueryResultVo<List<PrProductionProcess>> selectSome(QueryVo queryVo){
+    public QueryResultVo<List<PrProductionProcess>> selectSome(QueryVo queryVo) {
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
         //鏌ヨ绗﹀悎鏉′欢鐨勮褰曟�绘暟
         Long itemTotal = processDao.selectSomeCount(params);
 
-        QueryResultVo<List<PrProductionProcess>> rsVo = new QueryResultVo<>(queryVo.pageSize, queryVo.pageCurr) ;
+        QueryResultVo<List<PrProductionProcess>> rsVo = new QueryResultVo<>(queryVo.pageSize, queryVo.pageCurr);
         //璁$畻鍒嗛〉绛変俊鎭�
         rsVo.calculateAndSet(itemTotal, params);
 
@@ -190,19 +217,19 @@
         rsVo.obj = processDao.selectSome(params);
         rsVo.obj.stream().forEach(process -> {
             process.nodes.forEach(node -> {
-                if(node.instruction != null){
+                if (node.instruction != null) {
                     addUrl(node.instruction);
                 }
             });
         });
-        return rsVo ;
+        return rsVo;
     }
 
-    public List<Map<String,String>> queryAll(Long proId){
+    public List<Map<String, String>> queryAll(Long proId) {
         return processDao.queryAll(proId);
     }
 
-    private void addUrl(PrWorkingInstruction ins){
+    private void addUrl(PrWorkingInstruction ins) {
         if (ins == null || ins.fileId == null) {
             return;
         }

--
Gitblit v1.8.0