Browse Source

修改BUG

huangtf 1 year ago
parent
commit
f7a5e46936

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -73,6 +73,7 @@
         <result column="key" property="key"/>
         <result column="has_children" property="hasChildren"/>
         <result column="node_type" property="nodeType"/>
+        <result column="old_id" property="oldId"/>
         <result column="sort" property="sort"/>
     </resultMap>
 
@@ -448,6 +449,7 @@
         d.node_type AS "nodeType",
         d.id AS "value",
         d.id AS "key",
+        old_id,
         sort
         FROM m_wbs_tree_contract d
         WHERE

+ 15 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -236,6 +236,11 @@ public class ArTreeContractInitServiceImpl {
             treeContractVO2.setParentId(archiveTreeContract.getParentId());
             treeContractVO2.setTitle(archiveTreeContract.getNodeName());
             treeContractVO2.setSort(archiveTreeContract.getSort());
+
+            treeContractVO2.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
+            treeContractVO2.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
+            treeContractVO2.setArchiveAutoGroupId(archiveTreeContract.getArchiveAutoGroupId());
+
             archiveTreeContractVO2List.add(treeContractVO2);
             vo2Map.put(treeContractVO2.getId(),treeContractVO2);
         }
@@ -448,6 +453,16 @@ public class ArTreeContractInitServiceImpl {
                 archiveTree.setParentId(oldNewMap.get(wbsTreeVO2.getParentId()));
             }
 
+//            archiveTree.setId(wbsTreeVO2.getId());
+//            if (wbsTreeVO2.getParentId() == 0) {
+//                archiveTree.setParentId(subTree.getId());
+//            }else {
+//                archiveTree.setParentId(wbsTreeVO2.getParentId());
+//            }
+            if (StringUtils.isNotEmpty(wbsTreeVO2.getOldId())) {
+                archiveTree.setFromId(Long.parseLong(wbsTreeVO2.getOldId()));
+            }
+
             if (archiveTree.getParentId() == null) {
                 continue;
             }

+ 94 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveAutoRuleSyncImpl.java

@@ -0,0 +1,94 @@
+package org.springblade.manager.service.impl;
+
+
+import lombok.AllArgsConstructor;
+import org.springblade.manager.entity.ArchiveTree;
+import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.utils.ForestNodeMergerEx;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
+import org.springblade.manager.vo.ArchiveTreeVO2;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+@AllArgsConstructor
+public class ArchiveAutoRuleSyncImpl {
+
+    private static Map<String, String> syncPropertyMap;
+    static {
+        syncPropertyMap = new HashMap<>();
+        syncPropertyMap.put("archiveAutoNodeId", "");
+
+    }
+
+    public void syncArchiveTreeList(List<ArchiveTreeVO2> archiveTreeVO2s){
+
+        List<ArchiveTreeVO2> normalList = new ArrayList<>();
+        List<ArchiveTreeVO2> wbsList = new ArrayList<>();
+
+        ForestNodeMergerEx.setPropertyfromId(archiveTreeVO2s,syncPropertyMap);
+        //todo group
+
+    }
+
+    public void syncArchiveTreeContractList(List<ArchiveTreeContractVO2> archiveTreeContractVO2s){
+
+        List<ArchiveTreeContractVO2> normalList = new ArrayList<>();
+        List<ArchiveTreeContractVO2> wbsList = new ArrayList<>();
+        List<ArchiveTreeContractVO2> allWbsList = new ArrayList<>();
+        Map<Long,Long> wbsIdMap = new HashMap<>();
+
+        for (ArchiveTreeContractVO2 archiveTreeContractVO2: archiveTreeContractVO2s) {
+            if (archiveTreeContractVO2.getExtType()!= null && archiveTreeContractVO2.getExtType() == 1) {
+                wbsList.add(archiveTreeContractVO2);
+            }else {
+                normalList.add(archiveTreeContractVO2);
+            }
+        }
+
+        //根据formId
+        ForestNodeMergerEx.setPropertyfromId(normalList,syncPropertyMap);
+
+        //todo,这里补充上获取对应的wbsid
+        List<Long> wbsIds = new ArrayList<>();
+        for (Long wbsId : wbsIds){
+            wbsIdMap.put(wbsId,0l);
+        }
+
+        //找出所有相关的ID
+        for (ArchiveTreeContractVO2 wbsNode : wbsList) {
+            if (wbsNode.getFromId() == null) {
+                if (wbsIdMap.get(wbsNode.getExtId())!= null ) {
+                    allWbsList.add(wbsNode);
+                }
+
+            }else {
+                if (wbsIdMap.get(wbsNode.getFromId())!= null ) {
+                    allWbsList.add(wbsNode);
+                }
+            }
+        }
+
+        if (allWbsList != null && allWbsList.size() > 0) {
+            //按照树的顺序从上王下排序
+            allWbsList.sort(Comparator.comparing(ArchiveTreeContractVO2::getTreeSort));
+            for (ArchiveTreeContractVO2 wbsNode : wbsList){
+                List<ArchiveTreeContractVO2> tempList = new ArrayList<>();
+                ForestNodeMergerEx.getTreeList(wbsNode,tempList);
+                for (ArchiveTreeContractVO2 node: tempList) {
+                    node.setArchiveAutoNodeId(wbsNode.getId());
+                }
+            }
+        }
+
+
+
+        //todo group
+        for (ArchiveTreeContractVO2 archiveTreeContractVO2 : archiveTreeContractVO2s) {
+            if (archiveTreeContractVO2.getArchiveAutoGroupId() != null) {
+
+            }
+        }
+    }
+}

+ 5 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -494,7 +494,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			for (ArchiveTreeContractVO2 ar: dstTree.getChildren()) {
 				if (StringUtils.isEmpty(ar.getTreeCode())) {
 					//同步
-					if (dstNode.getParentId() == 0 || dstScopeTree.getId() == ar.getId()) {
+					if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(ar.getId()) ) {
 						//同步
 						List<ArchiveTreeContract> tmpSaveList = null;
 						if (dstNode.getParentId() == 0) {
@@ -516,11 +516,12 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 					for (ArchiveTreeContractVO2 contractNode : ar.getChildren()){
 
 						List<ArchiveTreeContract> tmpSaveList = null;
-						if (dstNode.getParentId() == 0 || dstScopeTree.getId() == contractNode.getId()) {
+						if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(contractNode.getId())
+								|| dstScopeTree.getId().equals(contractNode.getParentId())) {
 
 							ArchiveTreeVO2 tmpSubTree = srcTree;
 							Long dstNodeId = dstNode.getId();
-							if (dstNode.getParentId() == 0) {
+							if (dstNode.getParentId() == 0 ||  dstScopeTree.getId().equals(contractNode.getParentId()) ) {
 								tmpSubTree = ForestNodeMergerEx.getSubTree(srcTree,ar.getFromId());
 								dstNodeId = contractNode.getId();
 							}
@@ -652,7 +653,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			}
 
 		}
-		this.saveOrUpdateBatch(archiveTreeContracts);
+		this.saveOrUpdateBatch(upList);
 		return true;
 	}
 
@@ -666,8 +667,6 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			return;
 		}
 
-
-
 		List<ArchiveTreeContractVO2> trees = this.tree2Root(AuthUtil.getTenantId(),null,null,archiveTreeContracts.get(0).getProjectId(),null);
 		if (trees.size() == 0) {
 			return;

+ 5 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -104,6 +104,10 @@ public class ArchiveTreeContractSyncImpl {
             if (tmp != null ) {
                 archiveTreeContract.setAncestors(tmp.getAncestors());
                 archiveTreeContract.setTreeSort(tmp.getTreeSort());
+                archiveTreeContract.setAncestors(tmp.getAncestors());
+                archiveTreeContract.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
+                archiveTreeContract.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
+                archiveTreeContract.setArchiveAutoType(tmp.getArchiveAutoType());
 
             }
         }
@@ -121,7 +125,7 @@ public class ArchiveTreeContractSyncImpl {
 
         List<ArchiveTreeContract> saveList = new ArrayList<>();
         //todo 等测试OK再打开
-        //saveList =arTreeContractInitService.getContractExtNodes(AuthUtil.getTenantId(),projectId,dstTree);
+        saveList =arTreeContractInitService.getContractExtNodes(AuthUtil.getTenantId(),projectId,dstTree);
 
         return saveList;
     }

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -965,6 +965,11 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
             archiveTreeVO2.setParentId(archiveTree.getParentId());
             archiveTreeVO2.setTitle(archiveTree.getNodeName());
             archiveTreeVO2.setSort(archiveTree.getSort());
+
+            archiveTreeVO2.setArchiveAutoNodeId(archiveTree.getArchiveAutoNodeId());
+            archiveTreeVO2.setArchiveAutoType(archiveTree.getArchiveAutoType());
+            archiveTreeVO2.setArchiveAutoGroupId(archiveTree.getArchiveAutoGroupId());
+
             archiveTreeVO2s.add(archiveTreeVO2);
             vo2Map.put(archiveTreeVO2.getId(),archiveTreeVO2);
         }
@@ -978,6 +983,9 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
             ArchiveTreeVO2 tmp = vo2Map.get(archiveTree.getId());
             if (tmp != null ) {
                 archiveTree.setAncestors(tmp.getAncestors());
+                archiveTree.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
+                archiveTree.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
+                archiveTree.setArchiveAutoType(tmp.getArchiveAutoType());
             }
         }
     }

+ 79 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ForestNodeMergerEx.java

@@ -6,6 +6,8 @@ import org.springblade.common.utils.INodeEx;
 import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springframework.beans.BeanUtils;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -143,7 +145,10 @@ public class ForestNodeMergerEx {
         getTreeList(dstTree,dstList);
 
         boolean bRootMatch = true;
-        if (dstTree.getFromId() != srcTree.getFromId())  {
+
+        if (dstTree.getFromId() == null ) {
+            bRootMatch = false;
+        }else if (!dstTree.getFromId().equals(srcTree.getId()))  {
             bRootMatch = false;
         }
 
@@ -161,7 +166,7 @@ public class ForestNodeMergerEx {
             if (srcDstMap.get(src.getId())!= null) {
                 continue;
             }
-            if (src.getId() == srcTree.getId() && bRootMatch == false) {
+            if (src.getId().equals(srcTree.getId()) && bRootMatch == false) {
                 continue;
             }
 
@@ -232,4 +237,76 @@ public class ForestNodeMergerEx {
     }
 
 
+    public static void assignPropertyValue(Object obj, String propertyName, Object value)
+    {
+        try {
+            // 获取对象的Class类型
+            Class<?> clazz = obj.getClass();
+            // 通过属性名获取类的成员变量
+            Field field = clazz.getDeclaredField(propertyName);
+            // 设置私有成员变量可访问
+            field.setAccessible(true);
+            // 给对象的属性赋值
+            field.set(obj, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static Object getPropertyValue(Object obj, String propertyName) {
+        try {
+            Class<?> clazz = obj.getClass();
+            Method getterMethod = clazz.getMethod(getGetterName(propertyName));
+            return getterMethod.invoke(obj);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    // 根据属性名生成getter方法名
+    private static String getGetterName(String propertyName) {
+        return "get" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
+    }
+
+
+
+    public static <T extends INodeEx<T>> List<T> setPropertyfromId(List<T> NodeList, Map<String,String> propertyMap)
+    {
+        List<T> changeList = new ArrayList<>();
+        Map<Long,Long> oldNewMap = new LinkedHashMap<>();
+
+        for (T node: NodeList) {
+            if (node.getFromId() != null) {
+                oldNewMap.put(node.getFromId(),node.getId());
+            }
+        }
+
+        for (T node: NodeList) {
+            if (node.getFromId() == null) {
+                continue;
+            }
+
+            boolean bSet = false;
+
+            for (String fieldName: propertyMap.keySet()) {
+                Object obj = getPropertyValue(node,fieldName);
+                if (obj != null ) {
+                    Long newId = oldNewMap.get(obj);
+                    if (newId != null ) {
+                        assignPropertyValue(node,fieldName,newId);
+                        bSet = true;
+                    }
+                }
+            }
+
+            if (bSet){
+                changeList.add(node);
+            }
+        }
+
+        return changeList;
+    }
+
+
 }