liuyc 2 yıl önce
ebeveyn
işleme
12819d66c0

+ 0 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelBatchUtil.java

@@ -10,20 +10,10 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springblade.core.log.exception.ServiceException;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.sql.rowset.serial.SerialException;
 import java.io.*;
 import java.util.*;
 
 public class WbsExcelBatchUtil {
-    /*public static void main(String[] args) throws IOException, ClassNotFoundException {
-        WbsExcelBatchUtil excelUtil = new WbsExcelBatchUtil();
-        //读取excel数据
-        ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("C:\\Users\\泓创开发\\Desktop\\隧道总体.xls");
-        List<Map<String, String>> list1 = deepCopy(result);
-        System.out.println(list1);
-        List<Map<String, String>> list = removeRepeatMapByKey(result, "表名");
-    }*/
-
 
     /**
      * 深拷贝

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelUtil.java

@@ -13,6 +13,15 @@ import java.util.*;
 
 public class WbsExcelUtil {
 
+    /*public static void main(String[] args) throws IOException {
+        WbsExcelUtil excelUtil = new WbsExcelUtil();
+        //读取excel数据
+        ArrayList<Map<String, String>> dataList = excelUtil.readExcelToObj("C:\\Users\\泓创开发\\Desktop\\excel节点模板\\隧道工程2.xlsx");
+        for (Map<String, String> stringStringMap : dataList) {
+            System.out.println(stringStringMap);
+        }
+    }*/
+
     /**
      * 读取excel数据
      *

+ 44 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -1142,7 +1142,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     }
 
                     //构建参数
-                    WbsTree wbsTree = buildTreeNode(wbsTreeZi, allNodeData);
+                    WbsTree wbsTree = this.buildTreeNode(wbsTreeZi, allNodeData);
 
                     if (wbsTree == null) {
                         //构建成功,后置赋值
@@ -1171,22 +1171,30 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 }
             }
         }
-
-        return this.saveBatch(allNodeData, 1000) && baseMapper.updateById(wbsTree1) > 0;
-
+        return this.insertBatchPublic(allNodeData, 1000) && baseMapper.updateById(wbsTree1) > 0;
     }
 
     private WbsTree buildTreeNode(WbsTree wbsTreeZi, List<WbsTree> allNodeData) {
         List<WbsTree> wbsTrees = new ArrayList<>();
+        Map<String, List<WbsTree>> collect = allNodeData.stream().collect(Collectors.groupingBy(WbsTree::getNodeName));
         //判重
         for (WbsTree tree : allNodeData) {
             if (tree.getNodeName().equals(wbsTreeZi.getNodeName())
                     && tree.getWbsId().equals(wbsTreeZi.getWbsId())
                     && tree.getNodeType().equals(wbsTreeZi.getNodeType())
                     && tree.getProjectNodeId().equals(wbsTreeZi.getProjectNodeId())) {
-                //判断上级节点不同,当前节点名相同的tree选择问题
-                //例如:第X跨的上级有上部构造现场浇筑、上部构造预制和安装,导致下方新增重复节点判断时找到的是前一个 TODO
+                //判断上级节点不同,当前节点名相同的选择问题
                 if (!tree.getAncestors().equals(wbsTreeZi.getAncestors())) {
+                    List<WbsTree> wbsTrees1 = collect.get(wbsTreeZi.getNodeName());
+                    //存在两个相同节点以上时,找到本身同级节点
+                    if (wbsTrees1.size() > 1) {
+                        WbsTree wbsTree = wbsTrees1.stream().filter(f -> f.getParentId().equals(wbsTreeZi.getParentId())).findAny().orElse(null);
+                        if (wbsTree != null) {
+                            wbsTrees.add(wbsTree);
+                            break;
+                        }
+                    }
+                    //存在一个相同节点,正常执行
                     wbsTrees.add(tree);
                     break;
                 }
@@ -1198,6 +1206,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         if (wbsTrees.size() <= 0) {
             wbsTreeZi.setStatus(1);
             wbsTreeZi.setType(1);
+            wbsTreeZi.setIsDeleted(0);
             if (wbsTreeZi.getNodeType() == 6) {
                 wbsTreeZi.setIsConcrete(0);
                 wbsTreeZi.setIsExpernode(0);
@@ -1205,11 +1214,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         } else {
             //重复 判断是否为同一父节点,相同父节点跳过,不同新增
             for (WbsTree tree : wbsTrees) {
-                if (wbsTreeZi.getNodeType() == 2 || wbsTreeZi.getNodeType() == 3
-                        || wbsTreeZi.getNodeType() == 4 || wbsTreeZi.getNodeType() == 5 || wbsTreeZi.getNodeType() == 6) {
-                    if (!wbsTreeZi.getParentId().equals(tree.getParentId()) && wbsTreeZi.getNodeName().equals(tree.getNodeName())) {
+                if (wbsTreeZi.getNodeType() == 2 || wbsTreeZi.getNodeType() == 3 || wbsTreeZi.getNodeType() == 4 || wbsTreeZi.getNodeType() == 5 || wbsTreeZi.getNodeType() == 6) {
+                    //不同父级相同节点
+                    if (ObjectUtil.isNotEmpty(wbsTreeZi.getParentId()) && ObjectUtil.isNotEmpty(tree.getParentId()) && !wbsTreeZi.getParentId().equals(tree.getParentId()) && wbsTreeZi.getNodeName().equals(tree.getNodeName())) {
                         wbsTreeZi.setStatus(1);
                         wbsTreeZi.setType(1);
+                        wbsTreeZi.setIsDeleted(0);
                         if (wbsTreeZi.getNodeType() == 6) {
                             wbsTreeZi.setIsConcrete(0);
                             wbsTreeZi.setIsExpernode(0);
@@ -1287,4 +1297,29 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return true;
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertBatchPublic(Collection<WbsTree> entityList, int batchSize) {
+        try {
+            int size = entityList.size();
+            int idxLimit = Math.min(batchSize, size);
+            int i = 1;
+            //保存单批提交的数据集合
+            List<WbsTree> oneBatchList = new ArrayList<>();
+            for (Iterator<WbsTree> var1 = entityList.iterator(); var1.hasNext(); ++i) {
+                WbsTree element = var1.next();
+                oneBatchList.add(element);
+                if (i == idxLimit) {
+                    baseMapper.insertBatchSomeColumn(oneBatchList);
+                    //每次提交后清空集合数据
+                    oneBatchList.clear();
+                    idxLimit = Math.min(idxLimit + batchSize, size);
+                }
+            }
+        } catch (Exception e) {
+            log.error("保存失败", e);
+            return false;
+        }
+        return true;
+    }
+
 }