Bläddra i källkod

Merge branch 'lk20230413'

luok 2 år sedan
förälder
incheckning
615d87111c

+ 1 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTree.java

@@ -220,6 +220,7 @@ public class ArchiveTree extends BaseEntity {
         this.archiveAutoType = archiveTree.getArchiveAutoType();
         this.archiveAutoNodeId = archiveTree.getArchiveAutoNodeId();
         this.archiveAutoGroupId = archiveTree.getArchiveAutoGroupId();
+        this.archiveAutoGroupSelect = archiveTree.getArchiveAutoGroupSelect();
         this.isUploadFileDisplayConfigurationTree = archiveTree.getIsDisplayTree();
     }
 }

+ 62 - 48
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveAutoRuleSyncImpl.java

@@ -40,7 +40,7 @@ public class ArchiveAutoRuleSyncImpl {
         }*/
 
         //组卷规则同步
-        //syncRuleSysToProject(vo2Map,sysVo2Trees);
+        syncRuleSysToProject(vo2Map,sysVo2Trees);
 
     }
 
@@ -101,7 +101,7 @@ public class ArchiveAutoRuleSyncImpl {
             }
         }*/
         //组卷规则同步
-        //syncRuleProToContract(vo2Map,proVo2Trees);
+        syncRuleProToContract(vo2Map,proVo2Trees);
     }
 
     /**
@@ -120,14 +120,21 @@ public class ArchiveAutoRuleSyncImpl {
 
         //准备系统级节点map
         Map<Long,ArchiveTreeVO2> sysMap = new HashMap<>();
-        for(ArchiveTreeVO2 sysVo2:sysVo2Trees){
+        List<ArchiveTreeVO2> sysVo2TreeList = new ArrayList<>();
+        if(sysVo2Trees.size()==1){
+            ForestNodeMergerEx.getTreeList(sysVo2Trees.get(0),sysVo2TreeList);
+        }else{
+            sysVo2TreeList=sysVo2Trees;
+        }
+
+        for(ArchiveTreeVO2 sysVo2:sysVo2TreeList){
             sysMap.put(sysVo2.getId(),sysVo2);
         }
         //准备在页面勾选设置的系统级节点ID_项目级节点Map   用于映射archiveAutoNodeId同步
         Map<Long,List<ArchiveTreeVO2>> sysIdToPro_Map = new HashMap<>();
         for(ArchiveTreeVO2 proVO2 : vo2Map.values()){
             //只提取设置的节点,也就是select=1的节点
-            if(proVO2.getArchiveAutoGroupSelect()==1){
+            if(proVO2.getArchiveAutoGroupSelect()!=null && proVO2.getArchiveAutoGroupSelect()==1){
                 Long fromId = proVO2.getFromId();
                 if(sysIdToPro_Map.containsKey(fromId)){
                     List<ArchiveTreeVO2> archiveTreeVO2s = sysIdToPro_Map.get(fromId);
@@ -207,14 +214,21 @@ public class ArchiveAutoRuleSyncImpl {
 
         //准备项目级节点map
         Map<Long,ArchiveTreeVO2> proMap = new HashMap<>();
-        for(ArchiveTreeVO2 proVo2:proVo2Trees){
+        List<ArchiveTreeVO2> proVo2TreeList = new ArrayList<>();
+        if(proVo2Trees.size()==1){
+            ForestNodeMergerEx.getTreeList(proVo2Trees.get(0),proVo2TreeList);
+        }else{
+            proVo2TreeList=proVo2Trees;
+        }
+
+        for(ArchiveTreeVO2 proVo2:proVo2TreeList){
             proMap.put(proVo2.getId(),proVo2);
         }
         //准备在页面勾选设置的项目级节点ID_客户级节点Map   用于映射archiveAutoNodeId同步
         Map<Long,List<ArchiveTreeContractVO2>> proIdToContact_Map = new HashMap<>();
         for(ArchiveTreeContractVO2 contractVO2 : vo2Map.values()){
             //只提取设置的节点,也就是select=1的节点
-            if(contractVO2.getArchiveAutoGroupSelect()==1){
+            if(contractVO2.getArchiveAutoGroupSelect()!=null && contractVO2.getArchiveAutoGroupSelect()==1){
                 Long fromId = contractVO2.getFromId();
                 if(proIdToContact_Map.containsKey(fromId)){
                     List<ArchiveTreeContractVO2> contractTreeVO2s = proIdToContact_Map.get(fromId);
@@ -234,7 +248,7 @@ public class ArchiveAutoRuleSyncImpl {
             Integer archiveAutoType = contractVO2.getArchiveAutoType();
             Long fromId = contractVO2.getFromId();
             //只处理普通节点,规则时分类并卷类型的
-            if (contractVO2.getExtType()== null && fromId!=null && archiveAutoType==2){
+            if (contractVO2.getExtType()== null && fromId!=null && archiveAutoType!=null && archiveAutoType==2){
                 Long contract_groupId = contractVO2.getArchiveAutoGroupId();
                 //如果当前contractVO2的groupID是客户级(19位数),需要先保存关联集合
                 if(contract_groupId.toString().length()==19){
@@ -266,30 +280,30 @@ public class ArchiveAutoRuleSyncImpl {
             if (contractVO2.getExtType()== null){
                 Integer archiveAutoType = contractVO2.getArchiveAutoType();
                 //过滤没有任何规则的节点
-                //步骤一:处理archiveAutoNodeId同步
-                if(archiveAutoType!=null){
 
+                if(archiveAutoType!=null){
+                    //步骤一:处理archiveAutoNodeId同步
                     Long archiveAutoNodeId = contractVO2.getArchiveAutoNodeId();
                     if(archiveAutoNodeId!=null){
                         //判断规则值是项目级的还是客户级的
                         if(proMap.containsKey(archiveAutoNodeId)){
                             //这个节点是刚从项目级同步过来,规则值还是项目级的。而这个archiveAutoNodeId是项目级设置的最高并卷节点的ID
                             //用archiveAutoNodeId通过proIdToContact_Map找出对应的客户级节点
-                            List<ArchiveTreeContractVO2> pro_select_vo2s = proIdToContact_Map.get(archiveAutoNodeId);
-                            if(pro_select_vo2s.size()==1){
+                            List<ArchiveTreeContractVO2> contract_select_vo2s = proIdToContact_Map.get(archiveAutoNodeId);
+                            if(contract_select_vo2s.size()==1){
                                 //一个系统级节点对应了一个项目级节点
-                                Long pro_archiveAutoNodeId = pro_select_vo2s.get(0).getId();
+                                Long pro_archiveAutoNodeId = contract_select_vo2s.get(0).getId();
                                 contractVO2.setArchiveAutoNodeId(pro_archiveAutoNodeId);//设置项目级的archiveAutoNodeId
                                 contractVO2.setFlag(1);
                             }else{
                                 //一个系统级节点对应了多个项目级节点(项目级添加加节点的情况)
-                                for(ArchiveTreeContractVO2 contract_select_vo2:pro_select_vo2s){
+                                for(ArchiveTreeContractVO2 contract_select_vo2:contract_select_vo2s){
                                     //系统级对应多个节点时,用当前节点的ancestors去对比pro_select_vo2中的id,当前节点的ancestors必有上级节点的id。或当前节点id=pro_select_vo2中的id
-                                    String ancestorsPid = contract_select_vo2.getId().toString();
-                                    String ancestors = contractVO2.getAncestors();
-                                    Long contract_id = contractVO2.getId();
+                                    Long contract_select_id = contract_select_vo2.getId();//客户级的最高并卷节点id
+                                    String ancestors = contractVO2.getAncestors();//当前节点ancestors
+                                    Long contractVO2_id = contractVO2.getId();//当前节点id
 
-                                    if(ancestors.contains(ancestorsPid) ||  contract_id.equals(ancestorsPid)){
+                                    if(ancestors.contains(contract_select_id.toString()) ||  contractVO2_id.equals(contract_select_id)){
                                         contractVO2.setArchiveAutoNodeId(contract_select_vo2.getId());//设置客户级的archiveAutoNodeId
                                         contractVO2.setFlag(1);
                                         break;
@@ -303,41 +317,41 @@ public class ArchiveAutoRuleSyncImpl {
                             //ArchiveTreeVO2 sys_select_vo2 = sysMap.get(sys_vo2.getArchiveAutoNodeId());
                         }
                     }
-                }
 
-                //步骤二:处理archiveAutoGroupId同步
-                if(archiveAutoType==2){
-                    Long contractId = contractVO2.getContractId();
-                    //分合同段的 给archiveAutoGroupId
-                    Long groupId = contractVO2.getArchiveAutoGroupId();
-                    //客户级的groupID用19位数字  系统级和项目级用16位数字
-                    if(groupId.toString().length()==16){
-                        String key ="";
-                        if(contractId==null) {
-                            key =groupId+"";
-                        }else {
-                            key =contractId+"_"+groupId;
-                        }
+                    //步骤二:处理archiveAutoGroupId同步
+                    if(archiveAutoType==2){
+                        Long contractId = contractVO2.getContractId();
+                        //分合同段的 给archiveAutoGroupId
+                        Long groupId = contractVO2.getArchiveAutoGroupId();
+                        //客户级的groupID用19位数字  系统级和项目级用16位数字
+                        if(groupId.toString().length()==16){
+                            String key ="";
+                            if(contractId==null) {
+                                key =groupId+"";
+                            }else {
+                                key =contractId+"_"+groupId;
+                            }
 
-                        if(groupMap.containsKey(key)){
-                            Long contractGroupId = groupMap.get(key);
-                            contractVO2.setArchiveAutoGroupId(contractGroupId);
-                            contractVO2.setFlag(1);
-                        }else{
-                            //客户级的group用19位,在同步的时候方便判断是值是客户级还是项目级
-                            double v = Math.random();
-                            if(v<0.1){
-                                v=v+0.1;
+                            if(groupMap.containsKey(key)){
+                                Long contractGroupId = groupMap.get(key);
+                                contractVO2.setArchiveAutoGroupId(contractGroupId);
+                                contractVO2.setFlag(1);
+                            }else{
+                                //客户级的group用19位,在同步的时候方便判断是值是客户级还是项目级
+                                double v = Math.random();
+                                if(v<0.1){
+                                    v=v+0.1;
+                                }
+                                v=v*1000000;
+                                long ran = (long)v;
+                                Long contractGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
+                                groupMap.put(key,contractGroupId);
+                                contractVO2.setArchiveAutoGroupId(contractGroupId);
+                                contractVO2.setFlag(1);
                             }
-                            v=v*1000000;
-                            long ran = (long)v;
-                            Long contractGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
-                            groupMap.put(key,contractGroupId);
-                            contractVO2.setArchiveAutoGroupId(contractGroupId);
-                            contractVO2.setFlag(1);
+                        }else {
+                            //已经是客户级了不用理
                         }
-                    }else {
-                        //已经是客户级了不用理
                     }
                 }
             }

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -436,7 +436,8 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 		//如果有新的合同段,合并新增代码到
 		if (saveList.size() > 0) {
-			archiveTreeContractSync.mergerToTree(dstTree,saveList,null);
+			Map<Long,ArchiveTreeContractVO2> vo2Map = new LinkedHashMap<>();
+			archiveTreeContractSync.mergerToTree(dstTree,saveList,vo2Map);
 		}
 
 		//没有合同段直接同步
@@ -450,7 +451,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 
 		//更新排序,把排序,自动组卷这种变化,刷新到新增节点和修改节点上
-		archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees);
+		archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees); //TODO saveContractList有问题 新加合同段后同步这个是0
 
 		saveList.addAll(saveContractList);
 		//同步生成案卷

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -90,8 +90,10 @@ public class ArchiveTreeContractSyncImpl {
         ForestNodeMergerEx.getTreeList(dstTree, contractVO2List);
 
         //获取所有节点的id -> ArchiveTreeContractVO2 的map
+
         arTreeContractInitService.getMap(contractVO2List,addList,vo2Map);
 
+
         List<ArchiveTreeContractVO2> trees = ForestNodeMergerEx.merge(contractVO2List);
         return trees.get(0);
     }

+ 13 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -455,7 +455,11 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
             Long archiveAutoGroupId=null;
             //分类并卷规则的需要生成个随机数,作为同一个分类赋值archiveAutoNodeId
             if(archiveAutoType==2){
-                double v = Math.random() * 1000;
+                double v = Math.random();
+                if(v<0.1){
+                    v=v+0.1;
+                }
+                v=v*1000;
                 long ran = (long)v;
                 archiveAutoGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
             }
@@ -504,7 +508,11 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
             Long archiveAutoGroupId=null;
             //分类并卷规则的需要生成个随机数,作为同一个分类赋值archiveAutoNodeId
             if(archiveAutoType==2){
-                double v = Math.random() * 1000;
+                double v = Math.random();
+                if(v<0.1){
+                    v=v+0.1;
+                }
+                v=v*1000;
                 long ran = (long)v;
                 archiveAutoGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
             }
@@ -683,7 +691,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         if(iswbsNode){
             return getArchiveAutoRule_WbsTreeNode(id,projectId,wbsNode2ArchiveTreeNodeId,wbsId);
         }else{
-            return getArchiveAutoRule_ArchiveTreeNode(id);
+            return getArchiveAutoRule_ArchiveTreeNode(id,projectId);
         }
     }
 
@@ -692,7 +700,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
      * @param id
      * @return
      */
-    private Map<String,Object> getArchiveAutoRule_ArchiveTreeNode(Long id) {
+    private Map<String,Object> getArchiveAutoRule_ArchiveTreeNode(Long id,Long projectId) {
         Map<String,Object> map= new HashMap<>();
         try{
             ArchiveTree archiveTree = baseMapper.selectById(id);
@@ -735,6 +743,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
                     List<ArchiveTree> listGroup= baseMapper.selectList(Wrappers.<ArchiveTree>lambdaQuery()
                             .eq(ArchiveTree::getArchiveAutoGroupId, archiveTree.getArchiveAutoGroupId())
                             .eq(ArchiveTree::getArchiveAutoGroupSelect,1)
+                            .eq(ArchiveTree::getProjectId,projectId)
                             .orderByAsc(ArchiveTree::getSort));
                     StringBuffer nodeSelect = new StringBuffer();