Ver Fonte

Merge remote-tracking branch 'origin/master'

qianxb há 2 anos atrás
pai
commit
0ed08fd559
18 ficheiros alterados com 484 adições e 320 exclusões
  1. 2 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java
  2. 3 3
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/RangeInfo.java
  3. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveAutoPdfService.java
  4. 7 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  5. 47 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  6. 193 166
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  7. 45 13
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ImageClassificationFileServiceImpl.java
  8. 0 1
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
  9. 6 0
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/StringUtils.java
  10. 17 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  11. 14 9
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  12. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java
  13. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java
  14. 53 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  15. 70 21
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  16. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  17. 10 54
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  18. 6 47
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java

@@ -3,6 +3,7 @@ package org.springblade.manager.dto;
 
 
 import lombok.Data;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.entity.Formula;
@@ -151,7 +152,7 @@ public class FormData {
     }
    /**元素内容是否为空*/
     public Boolean empty(){
-      return  Func.isEmpty(this.values);
+      return  !(Func.isNotEmpty(this.values)&&this.values.stream().map(ElementData::getValue).anyMatch(Func::isNotEmpty));
     }
 
 

+ 3 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/RangeInfo.java

@@ -19,7 +19,7 @@ public class RangeInfo {
             required = true
     )
     private String design;
-    private List<Double> gDesign;
+    private List<String> gDesign;
     @ApiModelProperty(
             value = "频率",
             required = true
@@ -57,7 +57,7 @@ public class RangeInfo {
         this.design = design;
     }
 
-    public List<Double> getDesigns() {
+    public List<String> getDesigns() {
         return gDesign;
     }
 
@@ -72,7 +72,7 @@ public class RangeInfo {
 
     public void build(){
         if(Func.isNotBlank(this.design)){
-            this.gDesign= Arrays.stream(this.design.split("[^\\d.]+")).filter(BaseUtils::isNumber).map(Func::toDouble).collect(Collectors.toList());
+            this.gDesign= Arrays.stream(this.design.split("[^\\d.]+")).filter(BaseUtils::isNumber).collect(Collectors.toList());
         }
         if(Func.isNotBlank(this.size)){
             this.gSize= Arrays.stream(this.size.split("[^\\d.]+")).filter(BaseUtils::isNumber).map(Func::toInt).collect(Collectors.toList());

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveAutoPdfService.java

@@ -22,4 +22,7 @@ public interface IArchiveAutoPdfService {
 
     //获取文件的pdf文件的url
     String getPdfFileUrl(ArchiveFile file);
+
+    //只刷新档号
+    boolean refreshFileNumber(ArchivesAuto archive,String fileNumber);
 }

+ 7 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -707,7 +707,12 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
      * @param archive
      * @param fileNumber
      */
-    public void RefreshFileNumber(ArchivesAuto archive,String fileNumber) {
+    public boolean refreshFileNumber(ArchivesAuto archive,String fileNumber) {
+        //没变化则不用刷新
+        if (fileNumber.equals(archive.getFileNumber())) {
+            return false;
+        }
+
         Long projectId = archive.getProjectId();
         archive.setFileNumber(fileNumber);
 
@@ -718,6 +723,7 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
                 .orderByAsc(ArchiveFile::getSort));
 
         buildArchiveFrontPdfs(projectId,archive,archiveFiles);
+        return true;
     }
 
 }

+ 47 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -26,6 +26,7 @@ import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.service.IArchiveAutoPdfService;
+import org.springblade.archive.utils.ArchiveTreeUtil;
 import org.springblade.archive.vo.ArchivesAutoVO;
 import org.springblade.archive.mapper.ArchivesAutoMapper;
 import org.springblade.archive.service.IArchivesAutoService;
@@ -35,6 +36,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ProjectInfo;
@@ -42,6 +44,7 @@ import org.springblade.manager.feign.ArchiveTreeContractClient;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectClient;
 import org.springblade.manager.feign.WbsInfoClient;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
 import org.springframework.stereotype.Service;
@@ -329,6 +332,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		//archivesAuto.setIscheck(0);
 		archivesAuto.setIsAutoFile(0);//是否案卷收集上传的案卷
 		archivesAuto.setIsLock(0);//案卷锁定状态
+		archivesAuto.setIsDeleted(0);
 		baseMapper.insert(archivesAuto);
 		return archivesAuto;
 	}
@@ -769,11 +773,53 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	public List<ArchivesAuto> findArchivesAutosByIds(List<Long> ids) {
 		QueryWrapper<ArchivesAuto> queryWrapper = new QueryWrapper<>();
 		queryWrapper.in("node_id", ids)
-				.orderByDesc("tree_sort")
+				.eq("is_deleted",0)
+				.eq("is_archive",1)
+				.orderByAsc("tree_sort")
 				.orderByAsc("auto_file_sort");
 
 		return this.list(queryWrapper);
 	}
 
+	/**
+	 * 不重组的情况下刷新档号
+	 * @param archiveTreeContracts
+	 */
+	public void refreshFileNumberNoSlipt(List<ArchiveTreeContract> archiveTreeContracts) {
+
+		List<ArchiveTreeContractVO2> subTreeList = new ArrayList<>();
+		List<List<ArchiveTreeContract>>  subGroupedList = new ArrayList<>();
+		ArchiveTreeUtil.getGroupedList(archiveTreeContracts,subTreeList,subGroupedList);
+		Integer index = 1;
+
+		List<ArchivesAuto> changeList = new ArrayList<>();
+
+		//分组,分程 建设单位,各个合同段,电子单位等
+		for (List<ArchiveTreeContract> subList: subGroupedList) {
+			List<Long> ids = subList.stream()
+					.map(ArchiveTreeContract::getId)
+					.collect(Collectors.toList());
+
+			index =1;
+			List<ArchivesAuto> archivesAutos = findArchivesAutosByIds(ids);
+			if (archivesAutos == null || archivesAutos.size() == 0) {
+				return;
+			}
+			String fileNumberPrefix=subList.get(0).getFileNumberPrefix();
+			String archiveNameSuffix=subList.get(0).getArchiveNameSuffix();
+			if (StringUtils.isEmpty(archiveNameSuffix)) {
+				archiveNameSuffix = "";
+			}
+			for (ArchivesAuto archivesAuto: archivesAutos) {
+				String fileNumber = fileNumberPrefix + index + archiveNameSuffix;
+				if (archiveAutoPdfService.refreshFileNumber(archivesAuto,fileNumber)){
+					changeList.add(archivesAuto);
+				}
+				index++;
+			}
+		}
+		this.updateBatchById(changeList);
+	}
+
 
 }

+ 193 - 166
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -116,6 +116,7 @@ public class InformationWriteQueryController extends BladeController {
     @Autowired
     StringRedisTemplate RedisTemplate;
 
+
     /**
      * 获取文件题名
      */
@@ -1327,6 +1328,18 @@ public class InformationWriteQueryController extends BladeController {
     @ApiOperationSupport(order = 15)
     @ApiOperation(value = "复制节点(新)")
     public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
+        //表单所属方
+        String tabOwner = "";
+        if (("1,2").equals(vo.getClassifyType()) || ("2,1").equals(vo.getClassifyType())) {
+            tabOwner = "1,2,3,4,5,6";
+        } else if (("1").equals(vo.getClassifyType())) {
+            tabOwner = "1,2,3";
+        } else if (("2").equals(vo.getClassifyType())) {
+            tabOwner = "4,5,6";
+        } else if (vo.getIsCopyData() == 0) {
+            tabOwner = "1,2,3,4,5,6"; //如果选择的是否复制数据=0(否),默认所属方123456
+        }
+
         //TODO 单份复制
         if (("1").equals(vo.getCopyType())) {
             //首先查询需要复制的节点及其下级所有子节点的信息
@@ -1355,6 +1368,7 @@ public class InformationWriteQueryController extends BladeController {
                     nodeMap.put(node.getId().toString(), node);
                 });
 
+                String finalTabOwner1 = tabOwner;
                 nodeChildAll.forEach(node -> {
                     WbsTreeContract newData = new WbsTreeContract();
                     BeanUtils.copyProperties(node, newData);
@@ -1404,29 +1418,31 @@ public class InformationWriteQueryController extends BladeController {
                         //生成施工日志
                         this.createLedger(newData, saveLedger, nodeMap, null);
                     }
-
+                    //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
                     // 组织复制值Sql
-                    if (nodeTabColsMap != null && node.getType() == 2 && StringUtils.isNotEmpty(newData.getInitTableName())) {
+                    if (node.getType() == 2 && StringUtils.isNotEmpty(newData.getInitTableName()) && finalTabOwner1.contains(node.getTableOwner()) && vo.getIsCopyData() == 1) {
                         String tableName = newData.getInitTableName();
                         String col = nodeTabColsMap.get(tableName);
                         String colVal = nodeTabColsMap.get(tableName);
                         colVal = colVal.replaceAll("id,p_key_id,", "'" + SnowFlakeUtil.getId() + "' as id,'" + newData.getPKeyId() + "' as p_key_id,");
-                        copeSql.append("insert into " + tableName + "  (" + col + ") select " + colVal + " from " + tableName + " where p_key_id='" + node.getPKeyId() + "' ;");
+                        //delete SQL (先删除旧数据,再新增)
+                        String delSql = "delete from " + tableName + " where p_key_id = " + newData.getPKeyId() + " ; ";
+                        //insert into SQL
+                        copeSql.append(delSql).append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(node.getPKeyId()).append("' ;");
                     }
                 });
             }
             //保存节点信息
             R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
-
             //复制数据逻辑
-            if (nodeTabColsMap != null && copeSql.length() >= 10) {
+            if (copeSql.length() >= 10) {
                 jdbcTemplate.execute(copeSql.toString());
             }
-
             //获取父节点信息
             informationQueryService.AsyncWbsTree(needCopyNode.getParentId() + "", needCopyNode.getParentId() + "", needCopyNode.getContractId(), "", "1");
             return booleanR;
 
+        } else if (("2").equals(vo.getCopyType())) {
             /** TODO 多份复制
              * @Author liuYC
              * @Date 2023年4月10日18:06:53
@@ -1439,8 +1455,6 @@ public class InformationWriteQueryController extends BladeController {
              *      2.1 如果点击选择的是其他父级节点的父级,那么新增一个新的当前选择的复制的节点-新的表-新的表数据(根据所属方查询对应数据)。
              *      2.2 如果点击选择的是当前复制节点本身的同等级节点,那么复制对应表数据,如果没有对应表,那么跳过。
              */
-        } else if (("2").equals(vo.getCopyType())) {
-
             //获取需要复制到的位置节点信息的集合
             List<CopyContractTreeNodeVO.CopyBatch> copyBatches = vo.getCopyBatchToPaths();
             if (copyBatches.size() > 0) {
@@ -1457,151 +1471,150 @@ public class InformationWriteQueryController extends BladeController {
                     }
                 }
 
-                //缓存需要的节点信息、表信息
                 WbsTreeContract needCopyNodeRoot = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
-                Map<String, List<WbsTreeContract>> needCopyNodeAndTabMap = new HashMap<>();
-                List<WbsTreeContract> needCopyChildNodes = this.getChildNodes(needCopyNodeRoot);
-                if (ObjectUtil.isEmpty(needCopyChildNodes) || needCopyChildNodes.size() == 0) {
-                    //最下层级节点复制
-                    needCopyChildNodes = new ArrayList<>();
-                    needCopyChildNodes.add(needCopyNodeRoot);
-                }
-                needCopyNodeAndTabMap.put("node:" + needCopyNodeRoot.getPKeyId(), needCopyChildNodes);
-                List<WbsTreeContract> addChildNodesTables = this.getChildNodesTables(needCopyChildNodes, needCopyNodeRoot.getContractId());
-                needCopyNodeAndTabMap.put("tab:" + needCopyNodeRoot.getPKeyId(), addChildNodesTables);
-
-                //TODO 结果集
-                //节点
-                List<WbsTreeContract> addNodeList = new ArrayList<>();
-                //表单
-                List<WbsTreeContract> addTabList = new ArrayList<>();
-                //redis同步信息
-                List<WbsTreeContract> asyncWbsTreeNodes = new ArrayList<>();
-                //表单附件数据源
-                Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);
-                //表单数据
-                List<String> resultTablesData = new ArrayList<>();
-
-                //表单所属方
-                String tabOwner = "";
-                if (("1,2").equals(vo.getClassifyType()) || ("2,1").equals(vo.getClassifyType())) {
-                    tabOwner = "1,2,3,4,5,6";
-                } else if (("1").equals(vo.getClassifyType())) {
-                    tabOwner = "1,2,3";
-                } else if (("2").equals(vo.getClassifyType())) {
-                    tabOwner = "4,5,6";
-                } else if (vo.getIsCopyData() == 0 && StringUtils.isEmpty(tabOwner)) {
-                    //如果选择的是否复制数据=0(否),默认所属方123456
-                    tabOwner = "1,2,3,4,5,6";
-                }
-
-                //创建线程池,默认设置8个线程
-                ExecutorService executor = Executors.newFixedThreadPool(8);
-                try {
-                    //解析位置信息,进行复制数据构造
-                    if (toCopyNodes.size() == copyBatches.size()) {
-                        for (int i = 0; i < toCopyNodes.size(); i++) {
-                            //首先查询需要复制的节点的信息
-                            WbsTreeContract toCopyNode = toCopyNodes.get(i);
-                            CopyContractTreeNodeVO.CopyBatch toCopyVO = copyBatches.get(i);
-
-                            String finalTabOwner = tabOwner;
-                            //使用线程池提交任务
-                            executor.submit(() -> {
-                                //redis缓存node
+                if (needCopyNodeRoot != null) {
+                    //缓存需要复制的节点信息、表信息
+                    Map<String, List<WbsTreeContract>> needCopyNodeAndTabMap = new HashMap<>();
+                    List<WbsTreeContract> needCopyChildNodes = this.getChildNodes(needCopyNodeRoot);
+                    if (ObjectUtil.isEmpty(needCopyChildNodes) || needCopyChildNodes.size() == 0) {
+                        //最下层级节点复制
+                        needCopyChildNodes = new ArrayList<>();
+                        needCopyChildNodes.add(needCopyNodeRoot);
+                    }
+                    needCopyNodeAndTabMap.put("node:" + needCopyNodeRoot.getPKeyId(), needCopyChildNodes);
+                    List<WbsTreeContract> addChildNodesTables = this.getChildNodesTables(needCopyChildNodes, needCopyNodeRoot.getContractId());
+                    needCopyNodeAndTabMap.put("tab:" + needCopyNodeRoot.getPKeyId(), addChildNodesTables);
+
+                    //结果集
+                    List<WbsTreeContract> addNodeList = new ArrayList<>();//节点
+                    List<WbsTreeContract> addTabList = new ArrayList<>(); //表单
+                    List<WbsTreeContract> asyncWbsTreeNodes = new ArrayList<>(); //redis同步信息
+                    Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);//表单附件数据源
+                    List<String> resultTablesData = new ArrayList<>();//表单数据
+
+                    //创建线程池,默认设置4个线程
+                    ExecutorService executor = Executors.newFixedThreadPool(4);
+                    try {
+                        //解析位置信息,进行复制数据构造
+                        if (toCopyNodes.size() == copyBatches.size()) {
+                            for (int i = 0; i < toCopyNodes.size(); i++) {
+                                WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
+                                //首先查询需要复制的节点的信息
+                                WbsTreeContract toCopyNode = toCopyNodes.get(i);
+                                CopyContractTreeNodeVO.CopyBatch toCopyVO = copyBatches.get(i);
                                 asyncWbsTreeNodes.add(toCopyNode);
+                                String finalTabOwner = tabOwner;
+                                executor.submit(() -> {
+                                    if (toCopyNode != null && toCopyVO != null && needCopyNodeAndTabMap.size() > 0) {
+                                        //TODO 同节点复制
+                                        if (new Integer(1).equals(toCopyVO.getIsSameNode())) {
+                                            //1.1 选择当前节点的父级节点,新增
+                                            if (needCopyNode.getParentId().equals(toCopyNode.getId())) {
+                                                toCopyNode.setNodeName(toCopyVO.getNodeName());
+                                                toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
+
+                                                //获取缓存节点、表信息
+                                                List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
+                                                List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
+
+                                                //构造新的节点、表、数据
+                                                this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 1, finalTabOwner, vo.getIsCopyData());
+
+                                                //1.2 选择同父级的同级节点,只复制数据
+                                            } else if (needCopyNode.getParentId().equals(toCopyNode.getParentId())) {
+                                                //构造数据
+                                                this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
+                                            }
 
-                                if (toCopyNode != null && toCopyVO != null && needCopyNodeAndTabMap.size() > 0) {
-                                    //TODO 同节点复制
-                                    if (new Integer(1).equals(toCopyVO.getIsSameNode())) {
-                                        //1.1 选择当前节点的父级节点,新增
-                                        if (needCopyNodeRoot.getParentId().equals(toCopyNode.getId())) {
-                                            toCopyNode.setNodeName(toCopyVO.getNodeName());
-                                            toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
-
-                                            //获取缓存节点、表信息
-                                            List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
-                                            List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
-
-                                            //构造新的节点、表、数据
-                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNodeRoot, toCopyNode, resultTablesData, 1, finalTabOwner, vo.getIsCopyData());
-
-                                            //1.2 选择同父级的同级节点,只复制数据
-                                        } else if (needCopyNodeRoot.getParentId().equals(toCopyNode.getParentId())) {
-                                            //构造数据
-                                            this.addCopyTabData(needCopyNodeRoot, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
-                                        }
-
-                                        //TODO 跨节点复制
-                                    } else if (new Integer(0).equals(toCopyVO.getIsSameNode())) {
-                                        //获取需要复制节点的上级
-                                        WbsTreeContract parentNodeNeed = wbsTreeContractClient.getContractWbsTreeByContractIdAndId(needCopyNodeRoot.getParentId(), Long.parseLong(needCopyNodeRoot.getContractId()));
-
-                                        //2.1 选择的父级的同级的父级节点,新增(当复制节点父级与选择复制到的位置节点的父级id相同时,表示跨节点)
-                                        if (parentNodeNeed != null && parentNodeNeed.getParentId().equals(toCopyNode.getParentId())) {
-                                            toCopyNode.setNodeName(toCopyVO.getNodeName());
-                                            toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
-
-                                            //获取缓存节点、表信息
-                                            List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
-                                            List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
-
-                                            //构造新的节点、表、数据
-                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNodeRoot, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
+                                            //TODO 跨节点复制
+                                        } else if (new Integer(0).equals(toCopyVO.getIsSameNode())) {
+                                            //获取需要复制节点的上级
+                                            WbsTreeContract parentNodeNeed = wbsTreeContractClient.getContractWbsTreeByContractIdAndId(needCopyNode.getParentId(), Long.parseLong(needCopyNode.getContractId()));
+
+                                            boolean var = false;
+                                            //2.1 选择的父级的同级的父级节点,新增(当复制节点父级与选择复制到的位置节点的父级id相同时,表示跨节点新增)
+                                            if (parentNodeNeed != null) {
+                                                //2.1.1 如果是跨一级的情况下:parentNodeNeed.getParentId() == toCopyNode.getParentId() ,且 parentNodeNeed.getAncestors() == toCopyNode.getAncestors() ,且节点类型必须一样
+                                                if (parentNodeNeed.getParentId().equals(toCopyNode.getParentId()) && parentNodeNeed.getAncestors().equals(toCopyNode.getAncestors()) && parentNodeNeed.getNodeType().equals(toCopyNode.getNodeType())) {
+                                                    toCopyNode.setNodeName(toCopyVO.getNodeName());
+                                                    toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
+
+                                                    //获取缓存节点、表信息
+                                                    List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
+                                                    List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
+
+                                                    //构造新的节点、表、数据
+                                                    this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
+                                                    var = true;
+
+                                                } else if (!parentNodeNeed.getParentId().equals(toCopyNode.getParentId()) && !parentNodeNeed.getAncestors().equals(toCopyNode.getAncestors()) && parentNodeNeed.getNodeType().equals(toCopyNode.getNodeType())) {
+                                                    //2.1.2 如果跨多级的情况下父级id不相同 parentNodeNeed.getParentId() != toCopyNode.getParentId() ,且 parentNodeNeed.getAncestors() != toCopyNode.getAncestors() ,且节点类型必须一样
+                                                    toCopyNode.setNodeName(toCopyVO.getNodeName());
+                                                    toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
+
+                                                    //获取缓存节点、表信息
+                                                    List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
+                                                    List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
+
+                                                    //构造新的节点、表、数据
+                                                    this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
+                                                    var = true;
+                                                }
+                                            }
 
-                                            //2.2 如果点击选择的是当前复制节点本身的同等级节点,那么就只复制数据。(如果是跨节点,类型相同的情况下,只复制数据)
-                                        } else if (needCopyNodeRoot.getNodeType().equals(toCopyNode.getNodeType()) && !needCopyNodeRoot.getParentId().equals(toCopyNode.getParentId())) {
-                                            //构造数据
-                                            this.addCopyTabData(needCopyNodeRoot, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
+                                            //2.2 如果点击选择的是当前复制节点本身的同等级节点,那么就只复制数据。(如果是跨节点,类型相同的情况下,只复制数据),且var=false,表示没有进行到跨节点新增的逻辑,只是跨节点复制数据
+                                            if (needCopyNode.getNodeType().equals(toCopyNode.getNodeType()) && !needCopyNode.getParentId().equals(toCopyNode.getParentId()) && !var) {
+                                                //构造数据
+                                                this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
+                                            }
                                         }
                                     }
-                                }
-                            });
+                                });
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        //关闭线程池
+                        executor.shutdown();
+                        //等待所有线程执行完毕
+                        while (!executor.isTerminated()) {
                         }
                     }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                } finally {
-                    //关闭线程池
-                    executor.shutdown();
-                    //等待所有线程执行完毕
-                    while (!executor.isTerminated()) {
-                    }
-                }
 
-                //节点
-                Boolean aBoolean = false;
-                if (addNodeList.size() > 0) {
                     //重构祖级id
-                    this.reBuildAncestors(addNodeList, needCopyNodeRoot);
-                    aBoolean = wbsTreeContractClient.saveBatch(addNodeList);
-                }
-
-                //元素表
-                if (addTabList.size() > 0) {
-                    this.reBuildAncestors(addTabList, null);
-                    aBoolean = wbsTreeContractClient.saveBatch(addTabList);
-                    //表单文件附件
-                    if (addChildNodesTablesOldAll.size() > 0 && vo.getIsCopyData() == 1) {
-                        this.addCopyTabFile(addTabList, addChildNodesTablesOldAll);
+                    List<WbsTreeContract> resultAll = new ArrayList<>();
+                    resultAll.addAll(addNodeList);
+                    resultAll.addAll(addTabList);
+                    List<WbsTreeContract> allData = this.reBuildAncestors(resultAll);
+                    List<WbsTreeContract> nodes = allData.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
+                    List<WbsTreeContract> tabs = allData.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
+
+                    //入库
+                    Boolean row = false;
+                    if (nodes.size() > 0) {
+                        row = wbsTreeContractClient.saveBatch(nodes);
                     }
-                }
-
-                //实体表数据
-                if (resultTablesData.size() > 0) {
-                    jdbcTemplate.execute(StringUtils.join(resultTablesData, ""));
-                }
-
-                //更新redis缓存
-                if (aBoolean && asyncWbsTreeNodes.size() > 0) {
-                    List<WbsTreeContract> collect = asyncWbsTreeNodes.stream().distinct().collect(Collectors.toList());
-                    for (WbsTreeContract asyncWbsTreeNode : collect) {
-                        informationQueryService.AsyncWbsTree("", asyncWbsTreeNode.getId() + "", contractId, "", "1");
-                        informationQueryService.AsyncWbsTree("", asyncWbsTreeNode.getParentId() + "", contractId, "", "1");
+                    if (tabs.size() > 0) {
+                        row = wbsTreeContractClient.saveBatch(tabs);
+                        if (addChildNodesTablesOldAll.size() > 0 && vo.getIsCopyData() == 1) {
+                            this.addCopyTabFile(tabs, addChildNodesTablesOldAll);
+                        }
+                    }
+                    if (resultTablesData.size() > 0) {
+                        jdbcTemplate.execute(StringUtils.join(resultTablesData, ""));
+                    }
+                    if (row && asyncWbsTreeNodes.size() > 0) {
+                        List<WbsTreeContract> collect = asyncWbsTreeNodes.stream().distinct().collect(Collectors.toList());
+                        for (WbsTreeContract asyncWbsTreeNode : collect) {
+                            informationQueryService.AsyncWbsTree("", asyncWbsTreeNode.getId() + "", contractId, "", "1");
+                            informationQueryService.AsyncWbsTree("", asyncWbsTreeNode.getParentId() + "", contractId, "", "1");
+                        }
                     }
+                    return R.success("操作成功");
+                } else {
+                    throw new ServiceException("没有找到需要复制的节点信息,请联系管理员");
                 }
-
-                return R.success("操作成功");
             }
         }
         return R.fail("操作失败");
@@ -1610,18 +1623,29 @@ public class InformationWriteQueryController extends BladeController {
     /**
      * 重构祖级id
      */
-    private void reBuildAncestors(List<WbsTreeContract> result, WbsTreeContract needCopyNodeRoot) {
-        for (WbsTreeContract wbsTreeContract : result) {
-            //根节点
-            if (ObjectUtil.isNotEmpty(needCopyNodeRoot) && wbsTreeContract.getOldId().equals(needCopyNodeRoot.getId().toString())) {
-                wbsTreeContract.setAncestors(needCopyNodeRoot.getAncestors());
-            }//非根节点
-            if (ObjectUtil.isNotEmpty(wbsTreeContract.getParentId()) && ObjectUtil.isNotEmpty(wbsTreeContract.getAncestors()) && !wbsTreeContract.getAncestors().contains(wbsTreeContract.getParentId() + "")) {
-                String[] split = wbsTreeContract.getAncestors().split(",");
-                String s = split[split.length - 1];
-                wbsTreeContract.setAncestors(wbsTreeContract.getAncestors().replace(s, wbsTreeContract.getParentId() + ""));
+    private List<WbsTreeContract> reBuildAncestors(List<WbsTreeContract> list) {
+        List<WbsTreeContract> result = new ArrayList<>();
+        List<WbsTreeContract> sortedResult = list.stream()
+                .sorted(Comparator.nullsFirst(Comparator.comparing(WbsTreeContract::getType, Comparator.nullsLast(Comparator.naturalOrder())))
+                        .thenComparing(Comparator.nullsFirst(Comparator.comparing(WbsTreeContract::getNodeType, Comparator.nullsLast(Comparator.naturalOrder()))))
+                        .thenComparing(Comparator.nullsFirst(Comparator.comparing(WbsTreeContract::getId, Comparator.nullsLast(Comparator.naturalOrder()))))
+                        .thenComparing(Comparator.nullsFirst(Comparator.comparing(WbsTreeContract::getCreateTime, Comparator.nullsLast(Comparator.naturalOrder())))))
+                .collect(Collectors.toList());
+        Map<Long, WbsTreeContract> newMap = BeanUtil.copyProperties(result, WbsTreeContract.class).stream().collect(Collectors.toMap(WbsTreeContract::getId, Function.identity()));
+        for (WbsTreeContract obj : sortedResult) {
+            if (obj != null && ObjectUtil.isNotEmpty(obj.getParentId())) {
+                if (newMap.size() > 0) {
+                    WbsTreeContract parentObj = newMap.get(obj.getParentId());
+                    if (parentObj != null && !obj.getAncestors().contains(obj.getParentId().toString())) {
+                        String parentAncestors = parentObj.getAncestors();
+                        obj.setAncestors(parentAncestors + "," + obj.getParentId());
+                    }
+                }
+                newMap.put(obj.getId(), obj);
+                result.add(obj);
             }
         }
+        return result;
     }
 
     /**
@@ -1712,7 +1736,9 @@ public class InformationWriteQueryController extends BladeController {
     /**
      * 新增复制的节点、表的数据构造
      */
-    private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String tabOwner, Integer isCopyData) {
+    private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract
+            needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String
+                                                      tabOwner, Integer isCopyData) {
         int var = 0;
         if (needNodes.size() == 1) {
             //判断是否为最下级节点
@@ -1788,8 +1814,8 @@ public class InformationWriteQueryController extends BladeController {
 
         } else { //多层级节点复制
             //根节点id
-            Long toCopyNodeOldId = toCopyNode.getId();
-            toCopyNode.setId(SnowFlakeUtil.getId());
+            Long needCopyNodeOldId = needCopyNode.getId();
+            needCopyNode.setId(SnowFlakeUtil.getId());
 
             Map<Long, Long> parentIdToId = new HashMap<>();
             Map<Long, List<WbsTreeContract>> tabMap = needTabs.stream().collect(Collectors.groupingBy(WbsTreeContract::getParentId));
@@ -1810,17 +1836,16 @@ public class InformationWriteQueryController extends BladeController {
                         newParentId = parentIdToId.get(node.getParentId());
                     } else {
                         //根节点
-                        newParentId = toCopyNode.getId();
+                        newParentId = needCopyNode.getId();
                     }
                     if (ObjectUtils.isEmpty(newParentId)) {
-                        newParentId = toCopyNode.getId();
+                        newParentId = needCopyNode.getId();
                     }
                     obj.setPKeyId(SnowFlakeUtil.getId());
                     obj.setOldId(node.getId().toString());
                     Long id = SnowFlakeUtil.getId();
                     //数据源节点的老id与新的id的Map,作为下一级的节点的父级id的替换
                     parentIdToId.put(node.getId(), id);
-
                     //重设Id
                     obj.setId(id);
                     obj.setParentId(newParentId);
@@ -1874,19 +1899,19 @@ public class InformationWriteQueryController extends BladeController {
             }
 
             //添加根节点
-            toCopyNode.setOldId(needCopyNode.getId() + "");
+            needCopyNode.setOldId(needCopyNodeOldId + "");
             if (isSameNode == 1) {
                 //同节点
-                toCopyNode.setParentId(needCopyNode.getParentId());
+                needCopyNode.setParentId(needCopyNode.getParentId());
             } else {
                 //跨节点
-                toCopyNode.setParentId(toCopyNodeOldId);
+                needCopyNode.setParentId(toCopyNode.getId());
             }
-            toCopyNode.setPKeyId(SnowFlakeUtil.getId());
-            toCopyNode.setNodeName(toCopyNode.getNodeName());
-            toCopyNode.setFullName(toCopyNode.getNodeName());
-            toCopyNode.setPartitionCode(toCopyNode.getPartitionCode());
-            addNodeList.add(toCopyNode);
+            needCopyNode.setPKeyId(SnowFlakeUtil.getId());
+            needCopyNode.setNodeName(toCopyNode.getNodeName());
+            needCopyNode.setFullName(toCopyNode.getNodeName());
+            needCopyNode.setPartitionCode(toCopyNode.getPartitionCode());
+            addNodeList.add(needCopyNode);
         }
     }
 
@@ -2770,7 +2795,8 @@ public class InformationWriteQueryController extends BladeController {
             @ApiImplicitParam(name = "contractId", value = "合同段ID"),
             @ApiImplicitParam(name = "id", value = "点击节点ID")
     })
-    public R<List<WbsTreeContractTreeVOS>> queryWbsTreeContractByContractIdAndId(@RequestParam String contractId, @RequestParam String id) {
+    public R<List<WbsTreeContractTreeVOS>> queryWbsTreeContractByContractIdAndId(@RequestParam String
+                                                                                         contractId, @RequestParam String id) {
         List<WbsTreeContractTreeVOS> result = new ArrayList<>();
         if (StringUtils.isNotEmpty(id)) {
             WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();
@@ -2970,7 +2996,8 @@ public class InformationWriteQueryController extends BladeController {
             @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true),
             @ApiImplicitParam(name = "classifyType", value = "所属方,监理、总监办的资料查询使用,=1施工数据(默认),=2监理数据")
     })
-    public R<List<WbsTreeContractTreeVOS>> queryContractWbsTreeByContractIdAndType(@RequestParam String primaryKeyId,
+    public R<List<WbsTreeContractTreeVOS>> queryContractWbsTreeByContractIdAndType(@RequestParam String
+                                                                                           primaryKeyId,
                                                                                    @RequestParam String parentId,
                                                                                    @RequestParam String contractId,
                                                                                    @RequestParam String contractIdRelation,

+ 45 - 13
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ImageClassificationFileServiceImpl.java

@@ -34,6 +34,7 @@ import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -150,16 +151,20 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
         if (wbsTreeContract != null) {
             //获取当前节点所有父级节点
             List<WbsTreeContract> result = new ArrayList<>();
-            this.recursiveGetParentNodes(result, wbsTreeContract);
             result.add(wbsTreeContract);
-            result.sort(Comparator.comparing(WbsTreeContract::getNodeType).thenComparing(WbsTreeContract::getParentId));
+            this.recursiveGetParentNodes(result, wbsTreeContract);
+            Collections.reverse(result); //倒叙
             List<String> allNodeIds = result.stream().map(WbsTreeContract::getId).map(String::valueOf).collect(Collectors.toList());
-
-            WbsParam wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
-
-            if (ObjectUtil.isNotEmpty(wbsTreeContract.getOldId())) {
+            WbsParam wbsParam = null;
+            WbsTreePrivate privateNode = jdbcTemplate.query("select p_key_id from m_wbs_tree_private where status = 1 and is_deleted = 0 and wbs_id = " + wbsTreeContract.getWbsId() + " and id = " + wbsTreeContract.getId() + " and project_id =" + wbsTreeContract.getProjectId(), new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
+            if (privateNode != null) {
+                wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + privateNode.getPKeyId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+            } else if (ObjectUtil.isNotEmpty(wbsTreeContract.getOldId())) {
                 //表示复制、新增节点
-                wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getOldId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+                WbsTreePrivate privateNodeCopy = jdbcTemplate.query("select p_key_id from m_wbs_tree_private where status = 1 and is_deleted = 0 and wbs_id = " + wbsTreeContract.getWbsId() + " and id = " + wbsTreeContract.getOldId() + " and project_id =" + wbsTreeContract.getProjectId(), new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
+                if (privateNodeCopy != null) {
+                    wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + privateNodeCopy.getPKeyId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+                }
             }
 
             if (wbsParam != null && allNodeIds.size() > 0) {
@@ -191,12 +196,39 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
                     if (nameList.size() > 0) {
                         return StringUtils.join(nameList, "");
                     }
-                } else {
-                    //如果私有WBS为空,到公有WBS获取
-                    List<WbsTree> wbsTreeList = jdbcTemplate.query("select full_name from m_wbs_tree where is_deleted = 0 and status = 1 and id in(" + StringUtils.join(ids, ",") + ")", new BeanPropertyRowMapper<>(WbsTree.class));
-                    List<String> nameList = wbsTreeList.stream().map(WbsTree::getFullName).collect(Collectors.toList());
-                    if (nameList.size() > 0) {
-                        return StringUtils.join(nameList, "");
+                }
+            } else if (wbsParam == null) {
+                //如果私有WBS为空,到公有WBS获取,wbsTreeContract.getId()=wbsTree.getId()
+                wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+                if (wbsParam != null && allNodeIds.size() > 0) {
+                    List<String> nodeNumber = new ArrayList<>();
+                    String[] titles = wbsParam.getV().split("-");
+                    for (String title : titles) {
+                        if (title.contains("c") || title.contains("C")) {
+                            String lastStr = title.substring(title.length() - 1);
+                            nodeNumber.add(lastStr);
+                        }
+                    }
+
+                    List<String> ids = new ArrayList<>();
+                    for (String index : nodeNumber) {
+                        if (Integer.parseInt(index) <= result.size()) {
+                            String id = allNodeIds.get(Integer.parseInt(index));
+                            if (StringUtils.isNotEmpty(id)) {
+                                ids.add(id);
+                            }
+                        }
+                    }
+
+                    List<WbsTreeContract> filteredList = result.stream()
+                            .filter(e -> ids.stream().anyMatch(id -> id.equals(String.valueOf(e.getId()))))
+                            .collect(Collectors.toList());
+
+                    if (filteredList.size() > 0) {
+                        List<String> nameList = filteredList.stream().map(WbsTreeContract::getFullName).collect(Collectors.toList());
+                        if (nameList.size() > 0) {
+                            return StringUtils.join(nameList, "");
+                        }
                     }
                 }
             }

+ 0 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1272,7 +1272,6 @@ public class CustomFunction {
 						}
 					}
 					measureOut.addAll(_tmp);
-					measureOut.add("");
 				}
 			}
 		}

+ 6 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/StringUtils.java

@@ -1140,6 +1140,12 @@ public class StringUtils {
 		return "";
 	}
 
+/*
+	public static void main(String[] args) {
+		System.out.println(StringUtils.number2String("-2400.0000000000055",1));
+	}
+*/
+
 	/**
 	 * @Description byte数组转Md5字符串
 	 * @Param [bytes]

+ 17 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -541,6 +541,23 @@ public class ContractInfoController extends BladeController {
         return R.fail(200, "未查询到信息");
     }
 
+    /**
+     * 客户端合同段新增节点获取当前节点树
+     */
+    @GetMapping("/add-node-tree")
+    @ApiOperationSupport(order = 18)
+    @ApiOperation(value = "客户端合同段新增节点获取当前节点树", notes = "传入选择的节点pKeyId")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pKeyId", value = "选择的节点pKeyId", required = true)
+    })
+    public R addNodeTree(String pKeyId) {
+        List<WbsTreeContractVO> tree = contractInfoService.addNodeTree(pKeyId);
+        if (tree != null && tree.size() > 0) {
+            return R.data(tree);
+        }
+        return R.fail(200, "未查询到信息");
+    }
+
     /**
      * 查询合同段树-全加载-施工合同段
      */

+ 14 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1682,18 +1682,23 @@ public class ExcelTabController extends BladeController {
         if (!info.isSuccess()) {
             return info;
         }
-        System.out.println("3=" + DateUtil.formatDateTime(DateUtil.now()));
-        //单个 pdf加载
-        for (TableInfo tableInfo : tableInfoList) {
-            //if(!tableInfo.isToBeUpdated()){
+        try {
+            System.out.println("3=" + DateUtil.formatDateTime(DateUtil.now()));
+            //单个 pdf加载
+            for (TableInfo tableInfo : tableInfoList) {
+                //if(!tableInfo.isToBeUpdated()){
                 excelTabService.getBussPdfInfo(Long.parseLong(tableInfo.getPkeyId()));
-          //  }
+                //  }
 
+            }
+            System.out.println("4=" + DateUtil.formatDateTime(DateUtil.now()));
+            // 合并pdf加载
+            excelTabService.getBussPdfs(nodeid, classify, contractId, projectId);
+            System.out.println("5=" + DateUtil.formatDateTime(DateUtil.now()));
+        }catch (Exception e){
+            e.printStackTrace();
         }
-        System.out.println("4=" + DateUtil.formatDateTime(DateUtil.now()));
-        // 合并pdf加载
-        excelTabService.getBussPdfs(nodeid, classify, contractId, projectId);
-        System.out.println("5=" + DateUtil.formatDateTime(DateUtil.now()));
+
         return R.data("操作成功");
     }
 

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -270,7 +270,7 @@ public class FormulaController {
             }
             List<Object> data =new ArrayList<>();
             info.build();
-            if(info.getDesigns().size()>0){
+            if(info.getDesigns().size()>1){
                 AtomicInteger i= new AtomicInteger();
                 List<Object> tmpList = info.getDesigns().stream()
                         .map(e-> CustomFunction.listTrim(CustomFunction.b445random(info.getSizeAt(i.get()),e,info.getDevAt(i.get()),info.getFailAt(i.getAndIncrement()),1)))
@@ -299,6 +299,7 @@ public class FormulaController {
                     }
                 }
                 if((data.size()+start)>dw.length){
+
                    // String moreData = data.stream().skip(dw.length).map(StringUtils::handleNull).collect(Collectors.joining(StringPool.SEMICOLON));
                     List<Object> moreData = data.stream().skip(result.size()).map(StringUtils::handleNull).collect(Collectors.toList());
                     // 频率添加表单

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java

@@ -73,4 +73,8 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
     Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId, String selfId);
 
     Map<Long, List<WbsTreeContractTreeAllVO>> treeAllJL(String contractId, Integer type);
+
+    List<WbsTreeContractVO> addNodeTree(String pKeyId);
+
+
 }

+ 53 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -190,6 +190,59 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         return result;
     }
 
+    @Override
+    public List<WbsTreeContractVO> addNodeTree(String pKeyId) {
+        WbsTreeContract parentNodeRoot = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pKeyId).eq(WbsTreeContract::getStatus, 1));
+        if (parentNodeRoot != null) {
+            List<WbsTreeContract> allNodes = this.getChildNodes(parentNodeRoot);
+            allNodes.add(parentNodeRoot);
+            List<WbsTreeContractVO> resultAllNodes = BeanUtil.copyProperties(allNodes, WbsTreeContractVO.class);
+            return buildWbsTreeByStreamChildNodeTree(resultAllNodes, parentNodeRoot);
+        }
+        return null;
+    }
+
+    public List<WbsTreeContractVO> buildWbsTreeByStreamChildNodeTree(List<WbsTreeContractVO> nodes, WbsTreeContract parentNodeRoot) {
+        List<WbsTreeContractVO> list = nodes.stream().filter(f -> f.getId().equals(parentNodeRoot.getId())).collect(Collectors.toList());
+        Map<Long, List<WbsTreeContractVO>> map = nodes.stream().collect(Collectors.groupingBy(WbsTreeContractVO::getParentId));
+        this.recursionFnTreeChildNode(list, map);
+        return list;
+    }
+
+    public void recursionFnTreeChildNode(List<WbsTreeContractVO> list, Map<Long, List<WbsTreeContractVO>> map) {
+        for (WbsTreeContractVO wbsTreeContractVO : list) {
+            List<WbsTreeContractVO> childrenList = map.get(wbsTreeContractVO.getId());
+            wbsTreeContractVO.setChildren(childrenList);
+            if (childrenList != null && childrenList.size() > 0) {
+                wbsTreeContractVO.setHasChildren(true);
+                recursionFnTree(childrenList, map);
+            }
+        }
+    }
+
+    private List<WbsTreeContract> getChildNodes(WbsTreeContract obj) {
+        if (obj != null) {
+            List<WbsTreeContract> wbsTreeContracts = Collections.singletonList(obj);
+            List<WbsTreeContract> result = new ArrayList<>();
+            this.recursionGetChildNodes(wbsTreeContracts, result, obj.getContractId());
+            if (result.size() > 0) {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    private void recursionGetChildNodes(List<WbsTreeContract> list, List<WbsTreeContract> result, String contractId) {
+        List<Long> ids = list.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
+        if (ids.size() > 0) {
+            List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where type = 1 and parent_id in(" + org.apache.commons.lang.StringUtils.join(ids, ",") + ") and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            if (query.size() > 0) {
+                result.addAll(query);
+                recursionGetChildNodes(query, result, contractId);
+            }
+        }
+    }
+
     @Override
     public List<WbsTreeContractVO6> tree6List(String wbsId, String projectId, String contractId) {
         return baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
@@ -206,7 +259,6 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         List<WbsTreeContractVO6> wbsTreeContractVOS = baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
         List<WbsTreeContractVO6> wbsTreeVO2s = ForestNodeMerger.merge(wbsTreeContractVOS);
         List<WbsTreeContractVO6> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
-
         return list;
     }
 

+ 70 - 21
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -155,7 +155,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         List<AppWbsTreeContractVO> tableList =wbsTreeContractService.searchNodeAllTable(primaryKeyId.toString(), "1", contractId.toString(),info.getPId());
         this.constantMap.put(TABLE_LIST,tableList);
         /*通过判断元素名称来确定,加入汇总公式延后执行*/
-        this.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
+      //  this.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
+        this.constantMap.put("tableNames",tableList.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
 
         List<String> missingList = new ArrayList<>();
         this.formDataList.forEach(fd->{
@@ -222,6 +223,18 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     }
                 });
                 if(itemsMap.size()>0){
+                    itemsMap.values().forEach(i->{
+                        FormData vf=i.getValue();
+                        if(vf!=null){
+                            if(i.getPass()==null){
+                               i.setPass(tec.getFormDataMap().values().stream().filter(v->v.getTableName().equals(vf.getTableName())&&!v.getCode().equals(vf.getCode())).filter(v->v.getEName().contains(i.getPoint())&&v.getEName().contains("率")).findAny().orElse(null));
+                            }
+                            if(i.getJudge()==null){
+                                i.setJudge(tec.getFormDataMap().values().stream().filter(v->v.getTableName().equals(vf.getTableName())&&!v.getCode().equals(vf.getCode())).filter(v->v.getEName().contains(i.getPoint())&&v.getEName().contains("判")).findAny().orElse(null));
+                            }
+                        }
+
+                    });
                     AtomicBoolean update= new AtomicBoolean(false);
                     itemsMap.values().stream().filter(Measurement::isMatching).forEach(t->{
                         ElementBlock g=null;
@@ -253,7 +266,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                     FormulaUtils.write(t.getJudge(),"合格",null);
                                 }
                                 itemBlockList.sort(Comparator.comparingInt(a->ids.indexOf(a.getPkeyId())));
-                                FormulaUtils.write(t.getValue(),itemBlockList.stream().map(ItemBlock::getData).flatMap(v->v.stream().flatMap(Collection::stream)).collect(Collectors.toList()),true);
+                                List<String> values=itemBlockList.stream().map(ItemBlock::getData).flatMap(v->v.stream().flatMap(Collection::stream)).map(Object::toString).collect(Collectors.toList());
+                                int scale = StringUtils.getScale(values);
+                                FormulaUtils.write(t.getValue(),values.stream().map(u->StringUtils.number2String(u,scale)).collect(Collectors.toList()), true);
 
 //                                   if(t.getValue().getEName().contains("±")){
 //                                       /*存在偏差范围则获取的是偏差值:实测-设计*/
@@ -862,6 +877,21 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     /*把附表数据刷入对应的附表元素对象*/
                     sta.flush();
                 }
+                String mainTableName = this.tec.getTableAll().stream().filter(e -> e.getNodeName().contains("检验单") || e.getNodeName().contains("评定表")).map(AppWbsTreeContractVO::getInitTableName).findFirst().orElse("");
+                if(Func.isNotBlank(mainTableName)){
+                    List<FormData> sourceFds=tec.getFormDataMap().values().stream().filter(s->!s.empty()).filter(s->StringUtils.isEquals(s.getTableName(),mainTableName)).collect(Collectors.toList());
+                    Map<String,Object> copyMap= new HashMap<>();
+                    if(sourceFds.size()>0){
+                        sourceFds.forEach(d->{
+                            copyMap.put(d.getEName().trim(),d.getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).findAny().orElse(""));
+                        });
+                    }
+                    subTableFds.stream().filter(s-> !SubTable.KEYS.contains(s.getEName().trim())).filter(s->copyMap.containsKey(s.getEName().trim())).forEach(t->{
+                         Object val = copyMap.get(t.getEName().trim());
+                         t.getValues().forEach(e->e.setValue(val));
+                         t.setUpdate(1);
+                    });
+                }
             }
 
         } catch (Exception e) {
@@ -874,28 +904,46 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     /**汇总处理*/
     public void summaryCalc(){
-        if(this.summary.size()>0){
-            /**/
-            this.constantMap.put(CHECK_ITEMS,this.checkItems.stream().filter(fdTmp->fdTmp.getValues().stream().map(ElementData::getValue).anyMatch(e->StringUtils.isNotEmpty(e)&&StringUtils.isNotEquals("/",e))).map(FormData::getEName).map(FormulaUtils::parseItemName).distinct().collect(Collectors.joining(",")));
-            this.constantMap.put("CKD",this.checkDate.stream().flatMap(k->k.getValues().stream()).map(ElementData::stringValue).filter(StringUtils::isNotEmpty).reduce((a, b) -> Comparator.<DateTime>reverseOrder().compare(new DateTime(a), new DateTime(b)) <= 0 ? a : b).orElse(null));
-            this.summary.forEach(e->{
-                /*处理脚本*/
-                e.getFormula().setFormula(e.getFormula().getNumber());
-            });
-            this.summary.forEach(e->{
-                /*执行公式*/
-                Object data = Expression.parse(e.getFormula().getFormula()).calculate(this.constantMap);
-                if(data!=null){
-                    FormulaUtils.write(e,data,false);
-                   e.setUpdate(1);
+        try{
+            if(this.summary.size()>0){
+                /**/
+                List<String> result=this.checkItems.stream().filter(fdTmp->fdTmp.getValues().stream().map(ElementData::getValue).anyMatch(e->StringUtils.isNotEmpty(e)&&StringUtils.isNotEquals("/",e))).map(FormData::getEName).map(FormulaUtils::parseItemName).distinct().collect(Collectors.toList());
+                Optional<FormData> opk= this.summary.stream().filter(FormData::executable).filter(f->StringUtils.isEquals(f.getFormula().getNumber(),CHECK_ITEMS)).findAny();
+                List<String> history=null;
+                if(opk.isPresent()&&!opk.get().empty()){
+                    /*假如已经存在内容,则需要筛选出手填部分*/
+                    history=  Arrays.asList(opk.get().getValues().get(0).stringValue().replaceAll("[\\s\\n]+","").split("[,、,]"));
                 }
-            });
-            /*分项汇总*/
-            doForDataBlock();
+                if(history!=null&&history.size()>0){
+                    List<String> itemAll=this.checkItems.stream().map(FormData::getEName).map(FormulaUtils::parseItemName).distinct().collect(Collectors.toList());
+                    List<String> customize=history.stream().filter(s->!itemAll.contains(s)).collect(Collectors.toList());
+                    result.addAll(customize);
+                }
+                this.constantMap.put(CHECK_ITEMS,result);
+                this.constantMap.put("CKD",this.checkDate.stream().flatMap(k->k.getValues().stream()).map(ElementData::stringValue).filter(StringUtils::isNotEmpty).reduce((a, b) -> Comparator.<DateTime>reverseOrder().compare(new DateTime(a), new DateTime(b)) <= 0 ? a : b).orElse(null));
+                this.summary.forEach(e->{
+                    /*处理脚本*/
+                    e.getFormula().setFormula(e.getFormula().getNumber());
+                });
+                this.summary.forEach(e->{
+                    /*执行公式*/
+                    Object data = Expression.parse(e.getFormula().getFormula()).calculate(this.constantMap);
+                    if(data!=null){
+                        FormulaUtils.write(e,data,false);
+                        e.setUpdate(1);
+                    }
+                });
+                /*分项汇总*/
+                doForDataBlock();
+            }
+        }catch (Exception e){
+            e.printStackTrace();
         }
     }
 
 
+
+
     /**分项汇总数据*/
     public void   doForDataBlock(){
         try {
@@ -933,8 +981,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                      List<Object> list = c.getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList());
                      /*1.无任何记录,当前页无数据,则不需要处理 2.存在记录当前无数据,则要消除 3.没有记录当前有数据,则需要增加 4.有记录有当前记录,则需更新*/
                      if(Func.isNotEmpty(list)||targetItem!=null){
-                         FormData designList=tec.getFormDataMap().values().stream().filter(t->StringUtils.isEquals(FormulaUtils.parseItemName(t.getEName()),FormulaUtils.parseItemName(c.getEName()))&&t.getEName().contains("设计")&&StringUtils.isEquals(t.getTableName(),c.getTableName())).collect(Collectors.toList()).get(0);
-                         FormData pass=tec.getFormDataMap().values().stream().filter(t->StringUtils.isEquals(FormulaUtils.parseItemName(t.getEName()),FormulaUtils.parseItemName(c.getEName()))&&t.getEName().contains("合格")&&StringUtils.isEquals(t.getTableName(),c.getTableName())).collect(Collectors.toList()).get(0);
+                         FormData designList=tec.getFormDataMap().values().stream().filter(t->t.getEName().contains(FormulaUtils.parseItemName(c.getEName()))&&t.getEName().contains("设计")&&StringUtils.isEquals(t.getTableName(),c.getTableName())).collect(Collectors.toList()).get(0);
+                         FormData pass=tec.getFormDataMap().values().stream().filter(t->t.getEName().contains(FormulaUtils.parseItemName(c.getEName()))&&t.getEName().contains("合格")&&StringUtils.isEquals(t.getTableName(),c.getTableName())).collect(Collectors.toList()).get(0);
                          if(targetItem==null){
                              if(eb==null){
                                  eb=new ElementBlock();
@@ -990,6 +1038,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     public  void write(FormData fd,Object data){
         /*如果需要向额外元素或对象输出数据,在此处修改*/
+               fd.setUpdate(1);
                FormulaUtils.write(fd,data,false);
     }
 

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -111,10 +111,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         //TODO ---------节点未变只同步元素表---------
         if (saveIds.size() == 0 && delIds.size() == 0) {
             List<WbsTreePrivate> wbsTreePrivateListResult = new ArrayList<>();
-            //当前合同段所有表
+            //当前项目所有表
             List<WbsTreePrivate> wbsTreePrivateList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                     .eq(WbsTreePrivate::getProjectId, Long.parseLong(pawDTO.getProjectId()))
                     .eq(WbsTreePrivate::getWbsId, Long.parseLong(pawDTO.getWbsId()))
+                    .eq(WbsTreePrivate::getStatus,1)
                     .eq(WbsTreePrivate::getType, 2)
             );
 

+ 10 - 54
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -67,9 +67,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     private final TextdictInfoServiceImpl textDictInfoService;
     private final InformationQueryClient informationQueryClient;
 
-    //创建线程池任务
-    private final ExecutorService executor = Executors.newFixedThreadPool(4);
-
     @Override
     public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
         WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, wbsId));
@@ -810,32 +807,12 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 this.wbsParamServiceImpl.updateBatchById(updateList, 1000);
             }
             if (insertList.size() > 0) {
-                try {
-                    List<List<WbsParam>> partition1 = Lists.partition(insertList, 1000);
-                    CompletionService<Void> completionService = new ExecutorCompletionService<>(executor);
-                    for (List<WbsParam> addList : partition1) {
-                        completionService.submit(() -> {
-                            wbsParamServiceImpl.insertBatch(addList, 1000);
-                            return null;
-                        });
-                    }
-                    for (int i = 0; i < partition1.size(); i++) {
-                        try {
-                            completionService.take().get();
-                        } catch (ExecutionException e) {
-                            // 异常处理
-                            e.printStackTrace();
-                        }
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                } finally {
-                    //释放线程
-                    executor.shutdown();
+                List<List<WbsParam>> partition1 = Lists.partition(insertList, 1000);
+                for (List<WbsParam> addList : partition1) {
+                    wbsParamServiceImpl.insertBatch(addList, 1000);
                 }
-
+                return true;
             }
-            return true;
         }
         return false;
     }
@@ -1148,36 +1125,15 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     jdbcTemplate.execute(delSql);
                 }
 
-                try {
-                    List<List<TextdictInfo>> partition1 = Lists.partition(insertData, 1000);
-                    CompletionService<Void> completionService = new ExecutorCompletionService<>(executor);
-                    for (List<TextdictInfo> addList : partition1) {
-                        completionService.submit(() -> {
-                            textDictInfoService.insertBatch(addList, 1000);
-                            return null;
-                        });
-                    }
-                    for (int i = 0; i < partition1.size(); i++) {
-                        try {
-                            completionService.take().get();
-                        } catch (ExecutionException e) {
-                            // 异常处理
-                            e.printStackTrace();
-                        }
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                } finally {
-                    //释放线程
-                    executor.shutdown();
+                List<List<TextdictInfo>> partition1 = Lists.partition(insertData, 1000);
+                for (List<TextdictInfo> addList : partition1) {
+                    textDictInfoService.insertBatch(addList, 1000);
                 }
-
-                return true;
-            } else {
-                throw new ServiceException("当前项目关联的wbs树不是私有关联");
             }
+            return true;
+        } else {
+            throw new ServiceException("当前项目关联的wbs树不是私有关联");
         }
-        return false;
     }
 
     @Override

+ 6 - 47
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -61,9 +61,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     private final JdbcTemplate jdbcTemplate;
     private final ITableInfoService tableInfoService;
 
-    //创建线程池任务
-    private final ExecutorService executor = Executors.newFixedThreadPool(4);
-
     @Override
     public IPage<WbsTreeVO> selectWbsTreePage(IPage<WbsTreeVO> page, WbsTreeVO wbsTree) {
         return page.setRecords(baseMapper.selectWbsTreePage(page, wbsTree));
@@ -801,28 +798,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     }
 
                     if (pawDTO.getReferenceType().equals("public")) {
-                        try {
-                            List<List<WbsTreePrivate>> partition1 = Lists.partition(insertData1, 1000);
-                            CompletionService<Void> completionService = new ExecutorCompletionService<>(executor);
-                            for (List<WbsTreePrivate> addList : partition1) {
-                                completionService.submit(() -> {
-                                    wbsTreePrivateService.insertBatch(addList, 1000);
-                                    return null;
-                                });
-                            }
-                            for (int i = 0; i < partition1.size(); i++) {
-                                try {
-                                    completionService.take().get();
-                                } catch (ExecutionException e) {
-                                    // 异常处理
-                                    e.printStackTrace();
-                                }
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        } finally {
-                            //释放线程
-                            executor.shutdown();
+                        List<List<WbsTreePrivate>> partition1 = Lists.partition(insertData1, 1000);
+                        for (List<WbsTreePrivate> addList : partition1) {
+                            wbsTreePrivateService.insertBatch(addList, 1000);
                         }
 
                         //修改状态
@@ -834,28 +812,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         }
 
                     } else if (pawDTO.getReferenceType().equals("private")) {
-                        try {
-                            List<List<WbsTreePrivate>> partition1 = Lists.partition(insertData2, 1000);
-                            CompletionService<Void> completionService = new ExecutorCompletionService<>(executor);
-                            for (List<WbsTreePrivate> addList : partition1) {
-                                completionService.submit(() -> {
-                                    wbsTreePrivateService.insertBatch(addList, 1000);
-                                    return null;
-                                });
-                            }
-                            for (int i = 0; i < partition1.size(); i++) {
-                                try {
-                                    completionService.take().get();
-                                } catch (ExecutionException e) {
-                                    // 异常处理
-                                    e.printStackTrace();
-                                }
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        } finally {
-                            //释放线程
-                            executor.shutdown();
+                        List<List<WbsTreePrivate>> partition1 = Lists.partition(insertData2, 1000);
+                        for (List<WbsTreePrivate> addList : partition1) {
+                            wbsTreePrivateService.insertBatch(addList, 1000);
                         }
 
                         //异步修改htmlUrl ,数据都在insertData2里