Bläddra i källkod

Merge branch 'master' of D:\IDEAWORKSPACE\bladex with conflicts.

liuyc 2 år sedan
förälder
incheckning
3a69ea9caf
28 ändrade filer med 350 tillägg och 398 borttagningar
  1. 0 1
      blade-ops/blade-flow/blade-flow.iml
  2. 0 1
      blade-ops/blade-ops.iml
  3. 3 3
      blade-ops/blade-xxljob-admin/blade-xxljob-admin.iml
  4. 3 3
      blade-ops/blade-xxljob/blade-xxljob.iml
  5. 0 6
      blade-service-api/blade-business-api/blade-business-api.iml
  6. 3 3
      blade-service-api/blade-e-visa-api/blade-e-visa-api.iml
  7. 0 6
      blade-service-api/blade-manager-api/blade-manager-api.iml
  8. 0 5
      blade-service/blade-business/blade-business.iml
  9. 5 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java
  10. 13 10
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  11. 4 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java
  12. 1 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialContainerClassificationServiceImpl.java
  13. 12 10
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDetectionDataServiceImpl.java
  14. 4 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDeviceOverhaulServiceImpl.java
  15. 4 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDeviceUseServiceImpl.java
  16. 6 6
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialMaterialMobilizationServiceImpl.java
  17. 15 13
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSampleInfoServiceImpl.java
  18. 43 24
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  19. 3 3
      blade-service/blade-e-visa/blade-e-visa.iml
  20. 0 5
      blade-service/blade-manager/blade-manager.iml
  21. 3 56
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  22. 0 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java
  23. 13 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  24. 5 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  25. 6 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  26. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  27. 70 20
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  28. 130 191
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 0 - 1
blade-ops/blade-flow/blade-flow.iml

@@ -6,7 +6,6 @@
         <setting name="validation-enabled" value="true" />
         <datasource-mapping>
           <factory-entry name="Entities" />
-          <factory-entry name="blade-flow" />
         </datasource-mapping>
         <naming-strategy-map />
       </configuration>

+ 0 - 1
blade-ops/blade-ops.iml

@@ -8,7 +8,6 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="aspose-cells-20.4-c" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-metrics:2.9.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.6.3" level="project" />
     <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.12" level="project" />

+ 3 - 3
blade-ops/blade-xxljob-admin/blade-xxljob-admin.iml

@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
   <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
     <facet type="web" name="Web">
       <configuration>
         <webroots />
       </configuration>
     </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
     <output url="file://$MODULE_DIR$/target/classes" />

+ 3 - 3
blade-ops/blade-xxljob/blade-xxljob.iml

@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
   <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
     <facet type="web" name="Web">
       <configuration>
         <webroots />
       </configuration>
     </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
     <output url="file://$MODULE_DIR$/target/classes" />

+ 0 - 6
blade-service-api/blade-business-api/blade-business-api.iml

@@ -7,10 +7,6 @@
     <facet type="web" name="Web">
       <configuration>
         <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
       </configuration>
     </facet>
   </component>
@@ -19,8 +15,6 @@
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />

+ 3 - 3
blade-service-api/blade-e-visa-api/blade-e-visa-api.iml

@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
   <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
     <facet type="web" name="Web">
       <configuration>
         <webroots />
       </configuration>
     </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
     <output url="file://$MODULE_DIR$/target/classes" />

+ 0 - 6
blade-service-api/blade-manager-api/blade-manager-api.iml

@@ -7,10 +7,6 @@
     <facet type="web" name="Web">
       <configuration>
         <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
       </configuration>
     </facet>
   </component>
@@ -19,8 +15,6 @@
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />

+ 0 - 5
blade-service/blade-business/blade-business.iml

@@ -7,10 +7,6 @@
     <facet type="web" name="Web">
       <configuration>
         <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
       </configuration>
     </facet>
   </component>
@@ -20,7 +16,6 @@
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />

+ 5 - 4
blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java

@@ -164,7 +164,7 @@ public class ImageClassificationFileController extends BladeController {
                     List<String> removeList = new ArrayList<>();
 
                     //压缩到小于指定文件大小100kb
-                    //double targetSize = 100 * 1024;
+                    double targetSize = 200 * 1024;
 
                     for (ImageClassificationFile file : fileResult) {
                         //获取图片文件流
@@ -206,11 +206,12 @@ public class ImageClassificationFileController extends BladeController {
                                             byte[] bytes = CommonUtil.InputStreamToBytes(CommonUtil.getOSSInputStream(urls.get(i)));
 
                                             //压缩文件大小
-                                            /*while (bytes.length > targetSize) {
+                                            while (bytes.length > targetSize) {
                                                 float reduceMultiple = 0.5f;
                                                 bytes = FileUtils.resizeImage(bytes, reduceMultiple);
-                                            }*/
-                                            byte[] bytesNew = FileUtils.resizeImage(bytes, 0f);
+                                            }
+                                            //byte[] bytesNew = FileUtils.resizeImage(bytes, 0f);
+                                            byte[] bytesNew = bytes;
 
                                             //创建图片
                                             drawing.createPicture(anchor, workbook.addPicture(bytesNew, Workbook.PICTURE_TYPE_JPEG));

+ 13 - 10
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1240,7 +1240,6 @@ public class InformationWriteQueryController extends BladeController {
     @ApiOperationSupport(order = 16)
     @ApiOperation(value = "自定义排序")
     public R<Boolean> diySort(@RequestBody DiySortVO vo) {
-        //对整棵树进行排序(资料查询需要同步显示排序)采用自增
         List<String> sortLists = vo.getSortList();
         return R.status(wbsTreeContractClient.diySort(sortLists));
     }
@@ -1463,7 +1462,7 @@ public class InformationWriteQueryController extends BladeController {
                     newData.setCreateUser(AuthUtil.getUserId());
 
                     //获取当前所有复制的节点的最大sort
-                    String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
+                    /*String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
                     List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
                     List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
                     Integer max = 1;
@@ -1473,7 +1472,8 @@ public class InformationWriteQueryController extends BladeController {
                         max = 1;
                     }
                     //设置sort
-                    newData.setSort(max);
+                    newData.setSort(max);*/
+                    newData.setSort(ObjectUtils.isNotEmpty(node.getSort()) ? node.getSort() : 0);
 
                     //重塑父节点关联关系
                     this.restoreParent(newData, oldToNewIdMap);
@@ -1544,7 +1544,7 @@ public class InformationWriteQueryController extends BladeController {
                         newData.setPdfUrl(null);
 
                         //获取当前所有复制的节点的最大sort
-                        String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
+                        /*String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
                         List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
                         List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
                         Integer max = 1;
@@ -1554,7 +1554,8 @@ public class InformationWriteQueryController extends BladeController {
                             max = 1;
                         }
                         //设置sort
-                        newData.setSort(max);
+                        newData.setSort(max);*/
+                        newData.setSort(ObjectUtils.isNotEmpty(node.getSort()) ? node.getSort() : 0);
 
                         //重塑父节点关联关系
                         this.restoreParent(newData, oldToNewIdMap);
@@ -1993,7 +1994,7 @@ public class InformationWriteQueryController extends BladeController {
                 }
 
                 //获取当前所有复制的节点的最大sort
-                String sql = "select sort from m_wbs_tree_contract where contract_id = '" + treeContract.getContractId() + "' and (id = '" + half.getId() + "' or old_id = '" + half.getId() + "')";
+                /*String sql = "select sort from m_wbs_tree_contract where contract_id = '" + treeContract.getContractId() + "' and (id = '" + half.getId() + "' or old_id = '" + half.getId() + "')";
                 List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
                 List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
                 Integer max = 1;
@@ -2003,7 +2004,9 @@ public class InformationWriteQueryController extends BladeController {
                     max = 1;
                 }
                 //设置sort
-                newData.setSort(max);
+                newData.setSort(max);*/
+                newData.setSort(ObjectUtils.isNotEmpty(half.getSort()) ? half.getSort() : 0);
+
                 //设置节点名称
                 for (AddContractTreeNodeVO.Node addVO : selectList) {
                     if (half.getPKeyId().toString().equals(addVO.getPrimaryKeyId())) {
@@ -2077,9 +2080,9 @@ public class InformationWriteQueryController extends BladeController {
                 this.constructionLedgerService.saveBatch(saveLedger, 1000);
                 str.append("-[");
                 for (ConstructionLedger ledger : saveLedger) {
-                    str.append(ledger.getSite()+",");
+                    str.append(ledger.getSite() + ",");
                 }
-                str.deleteCharAt(str.length()-1);
+                str.deleteCharAt(str.length() - 1);
                 str.append("]");
             }
 
@@ -2459,7 +2462,7 @@ public class InformationWriteQueryController extends BladeController {
             if (contractIds.size() > 0) {
 
                 //监理复制加载树问题
-                if (StringUtils.isEmpty(classifyType)){
+                if (StringUtils.isEmpty(classifyType)) {
                     classifyType = "2";
                 }
 

+ 4 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java

@@ -170,8 +170,10 @@ public class TrialDetectionController extends BladeController {
         String sql = "select * from u_trial_self_data_record where record_id = " + id + " and tab_id = " + pKeyId;
         List<TrialSelfDataRecord> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TrialSelfDataRecord.class));
         TrialSelfDataRecord obj = query.stream().findAny().orElse(null);
-        assert obj != null;
-        return R.data(obj.getPdfUrl());
+        if (obj != null){
+            return R.data(obj.getPdfUrl());
+        }
+        return R.data("");
     }
 
     @GetMapping("/get-buss-pdfs")

+ 1 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialContainerClassificationServiceImpl.java

@@ -361,8 +361,7 @@ public class TrialContainerClassificationServiceImpl
             }
         } else {
             Map.Entry<Long, String> map = beanMap.entrySet().stream().filter(f -> f.getKey().equals(id)).findAny().orElse(null);
-            assert map != null;
-            if (!map.getValue().equals(bean.getFieldValue())) {
+            if (map != null && !map.getValue().equals(bean.getFieldValue())) {
                 String obj = values.stream().filter(f -> f.equals(bean.getFieldValue())).findAny().orElse(null);
                 if (obj != null) {
                     return "编号已存在,请重新输入";

+ 12 - 10
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDetectionDataServiceImpl.java

@@ -88,22 +88,24 @@ public class TrialDetectionDataServiceImpl extends BaseServiceImpl<TrialDetectio
             List<TrialDetectionData> insertData = new ArrayList<>();
             for (TrialDetectionData trialDetectionDatum : trialDetectionData) {
                 TrialDetectionData obj = BeanUtil.copyProperties(trialDetectionDatum, TrialDetectionData.class);
-                assert obj != null;
-                obj.setId(SnowFlakeUtil.getId());
-                obj.setEntrustNo(String.valueOf(SnowFlakeUtil.getId()));
-                obj.setReportNo(String.valueOf(SnowFlakeUtil.getId()));
-                insertData.add(obj);
+                if (obj != null) {
+                    obj.setId(SnowFlakeUtil.getId());
+                    obj.setEntrustNo(String.valueOf(SnowFlakeUtil.getId()));
+                    obj.setReportNo(String.valueOf(SnowFlakeUtil.getId()));
+                    insertData.add(obj);
+                }
             }
             this.saveBatch(insertData);
 
         } else {
             //单条复制编辑新增保存
             TrialDetectionData obj = BeanUtil.copyProperties(dto, TrialDetectionData.class);
-            assert obj != null;
-            obj.setId(SnowFlakeUtil.getId());
-            obj.setEntrustNo(String.valueOf(SnowFlakeUtil.getId()));
-            obj.setReportNo(String.valueOf(SnowFlakeUtil.getId()));
-            this.save(obj);
+            if (obj != null){
+                obj.setId(SnowFlakeUtil.getId());
+                obj.setEntrustNo(String.valueOf(SnowFlakeUtil.getId()));
+                obj.setReportNo(String.valueOf(SnowFlakeUtil.getId()));
+                this.save(obj);
+            }
         }
         return true;
     }

+ 4 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDeviceOverhaulServiceImpl.java

@@ -70,8 +70,10 @@ public class TrialDeviceOverhaulServiceImpl extends BaseServiceImpl<TrialDeviceO
             dto.setFactoryNumber(trialDeviceInfo.getFactoryNumber());
         }
         TrialDeviceOverhaul trialDeviceOverhaul = BeanUtil.copyProperties(dto, TrialDeviceOverhaul.class);
-        assert trialDeviceOverhaul != null;
-        return this.saveOrUpdate(trialDeviceOverhaul);
+        if (trialDeviceOverhaul != null){
+            return this.saveOrUpdate(trialDeviceOverhaul);
+        }
+        return false;
     }
 
     @Override

+ 4 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDeviceUseServiceImpl.java

@@ -72,8 +72,10 @@ public class TrialDeviceUseServiceImpl extends BaseServiceImpl<TrialDeviceUseMap
             dto.setFactoryNumber(trialDeviceInfo.getFactoryNumber());
         }
         TrialDeviceUse trialDeviceUse = BeanUtil.copyProperties(dto, TrialDeviceUse.class);
-        assert trialDeviceUse != null;
-        return this.saveOrUpdate(trialDeviceUse);
+        if (trialDeviceUse != null){
+            return this.saveOrUpdate(trialDeviceUse);
+        }
+        return false;
     }
 
     @Override

+ 6 - 6
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialMaterialMobilizationServiceImpl.java

@@ -67,8 +67,7 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
             return trialMaterialMobilization1 != null;
         } else {
             TrialMaterialMobilization trialMaterialMobilization = list.stream().filter(f -> f.getId().equals(Long.parseLong(id))).findAny().orElse(null);
-            assert trialMaterialMobilization != null;
-            if (!trialMaterialMobilization.getMaterialNumber().equals(number)) {
+            if (trialMaterialMobilization != null && !trialMaterialMobilization.getMaterialNumber().equals(number)) {
                 TrialMaterialMobilization trialMaterialMobilization1 = list.stream().filter(f -> f.getMaterialNumber().equals(number)).findAny().orElse(null);
                 return trialMaterialMobilization1 != null;
             }
@@ -148,10 +147,11 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
         }
         data.forEach(excel -> {
             TrialMaterialMobilization trialMaterialMobilization = BeanUtil.copyProperties(excel, TrialMaterialMobilization.class);
-            assert trialMaterialMobilization != null;
-            trialMaterialMobilization.setUserId(SecureUtil.getUserId());
-            trialMaterialMobilization.setContractId(contractId);
-            list.add(trialMaterialMobilization);
+            if (trialMaterialMobilization != null){
+                trialMaterialMobilization.setUserId(SecureUtil.getUserId());
+                trialMaterialMobilization.setContractId(contractId);
+                list.add(trialMaterialMobilization);
+            }
         });
         if (isCovered) {
             this.saveOrUpdateBatch(list);

+ 15 - 13
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSampleInfoServiceImpl.java

@@ -66,8 +66,7 @@ public class TrialSampleInfoServiceImpl extends BaseServiceImpl<TrialSampleInfoM
             return trialSampleInfo != null;
         } else {
             TrialSampleInfo trialSampleInfo = list.stream().filter(f -> f.getId().equals(Long.parseLong(id))).findAny().orElse(null);
-            assert trialSampleInfo != null;
-            if (!trialSampleInfo.getSpecificationNumber().equals(specificationNumber)) {
+            if (trialSampleInfo != null && !trialSampleInfo.getSpecificationNumber().equals(specificationNumber)) {
                 TrialSampleInfo trialSampleInfo1 = list.stream().filter(f -> f.getSpecificationNumber().equals(specificationNumber)).findAny().orElse(null);
                 return trialSampleInfo1 != null;
             }
@@ -90,9 +89,10 @@ public class TrialSampleInfoServiceImpl extends BaseServiceImpl<TrialSampleInfoM
             for (User user : users) {
                 if (trialSampleInfo.getUserId().equals(user.getId())) {
                     TrialSampleInfoVO3 trialSampleInfoVO3 = BeanUtil.copyProperties(trialSampleInfo, TrialSampleInfoVO3.class);
-                    assert trialSampleInfoVO3 != null;
-                    trialSampleInfoVO3.setUserName(ObjectUtil.isNotEmpty(user.getName()) ? user.getName() : user.getRealName());
-                    list.add(trialSampleInfoVO3);
+                    if (trialSampleInfoVO3 != null) {
+                        trialSampleInfoVO3.setUserName(ObjectUtil.isNotEmpty(user.getName()) ? user.getName() : user.getRealName());
+                        list.add(trialSampleInfoVO3);
+                    }
                 }
             }
         }
@@ -240,11 +240,12 @@ public class TrialSampleInfoServiceImpl extends BaseServiceImpl<TrialSampleInfoM
         }
         data.forEach(excel -> {
             TrialSampleInfo trialSampleInfo = BeanUtil.copyProperties(excel, TrialSampleInfo.class);
-            assert trialSampleInfo != null;
-            trialSampleInfo.setUserId(SecureUtil.getUserId());
-            trialSampleInfo.setContractId(contractId);
-            trialSampleInfo.setNodeId(nodeId);
-            list.add(trialSampleInfo);
+            if (trialSampleInfo != null) {
+                trialSampleInfo.setUserId(SecureUtil.getUserId());
+                trialSampleInfo.setContractId(contractId);
+                trialSampleInfo.setNodeId(nodeId);
+                list.add(trialSampleInfo);
+            }
         });
         if (isCovered) {
             this.saveOrUpdateBatch(list);
@@ -281,9 +282,10 @@ public class TrialSampleInfoServiceImpl extends BaseServiceImpl<TrialSampleInfoM
                 for (User user : userList) {
                     if (trialSampleInfo.getUserId().equals(user.getId())) {
                         TrialSampleInfoVO trialSampleInfoVO = BeanUtil.copyProperties(trialSampleInfo, TrialSampleInfoVO.class);
-                        assert trialSampleInfoVO != null;
-                        trialSampleInfoVO.setUserName(user.getName());
-                        pdfData.add(trialSampleInfoVO);
+                        if (trialSampleInfoVO != null){
+                            trialSampleInfoVO.setUserName(user.getName());
+                            pdfData.add(trialSampleInfoVO);
+                        }
                     }
                 }
             }

+ 43 - 24
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.spire.xls.*;
@@ -205,18 +206,19 @@ public class TrialSelfInspectionRecordServiceImpl
         List<TrialSelfInspectionRecord> trialSelfInspectionRecords = baseMapper.selectBatchIds(ids);
         for (TrialSelfInspectionRecord trialSelfInspectionRecord : trialSelfInspectionRecords) {
             TrialSelfInspectionRecordDTO dto = BeanUtil.copyProperties(trialSelfInspectionRecord, TrialSelfInspectionRecordDTO.class);
-            assert dto != null;
-            dto.setId(SnowFlakeUtil.getId());
-            if (StringUtils.isNotEmpty(dto.getRecordNo())) {
-                dto.setTableType("1");
-            } else if (StringUtils.isNotEmpty(dto.getReportNo())) {
-                dto.setTableType("2");
-            } else if (StringUtils.isNotEmpty(dto.getReportNo()) && StringUtils.isNotEmpty(dto.getRecordNo())) {
-                dto.setTableType("1,2");
+            if (dto != null) {
+                dto.setId(SnowFlakeUtil.getId());
+                if (StringUtils.isNotEmpty(dto.getRecordNo())) {
+                    dto.setTableType("1");
+                } else if (StringUtils.isNotEmpty(dto.getReportNo())) {
+                    dto.setTableType("2");
+                } else if (StringUtils.isNotEmpty(dto.getReportNo()) && StringUtils.isNotEmpty(dto.getRecordNo())) {
+                    dto.setTableType("1,2");
+                }
+                //重构编号
+                this.buildNumber(dto);
+                this.save(dto);
             }
-            //重构编号
-            this.buildNumber(dto);
-            this.save(dto);
         }
         return true;
     }
@@ -302,8 +304,7 @@ public class TrialSelfInspectionRecordServiceImpl
                 //获取原始pdfUrl
                 String sql = "select * from u_trial_raw_material_self_record where self_record_id =" + dto.getId();
                 TrialRawMaterialSelfRecord recordOld = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TrialRawMaterialSelfRecord.class)).stream().findAny().orElse(null);
-                if (recordOld != null) {
-                    assert oldObj != null;
+                if (recordOld != null && oldObj != null) {
                     oldObj.setPdfUrl(recordOld.getOldPdfUrl());
                 }
 
@@ -339,9 +340,10 @@ public class TrialSelfInspectionRecordServiceImpl
                     jdbcTemplate.execute(sql1);
                     //新增当前记录关系信息
                     for (String s : idsList) {
-                        assert oldObj != null;
-                        String sql2 = "insert into u_trial_raw_material_self_record(id,self_record_id,raw_material_record_id,old_pdf_url) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + s + ",'" + oldObj.getPdfUrl() + "')";
-                        jdbcTemplate.execute(sql2);
+                        if (oldObj != null) {
+                            String sql2 = "insert into u_trial_raw_material_self_record(id,self_record_id,raw_material_record_id,old_pdf_url) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + s + ",'" + oldObj.getPdfUrl() + "')";
+                            jdbcTemplate.execute(sql2);
+                        }
                     }
 
                     if (ObjectUtil.isNotEmpty(bladeFile)) {
@@ -454,13 +456,12 @@ public class TrialSelfInspectionRecordServiceImpl
     }
 
     @Override
-    public void updateTrialSelfInspectionRecordStatus(List<TaskApprovalVO> obj){
+    public void updateTrialSelfInspectionRecordStatus(List<TaskApprovalVO> obj) {
         for (TaskApprovalVO taskApprovalVO : obj) {
             if (ObjectUtil.isNotEmpty(taskApprovalVO.getParallelProcessInstanceId())) {
                 String sql = "select process_instance_id from u_task_parallel where parallel_process_instance_id = '" + taskApprovalVO.getParallelProcessInstanceId() + "'";
                 TaskParallel taskParallel = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TaskParallel.class)).stream().findAny().orElse(null);
-                assert taskParallel != null;
-                if (ObjectUtil.isNotEmpty(taskParallel.getProcessInstanceId())) {
+                if (taskParallel != null && ObjectUtil.isNotEmpty(taskParallel.getProcessInstanceId())) {
                     String trialSelfInspectionRecordId = baseMapper.selectTaskByTaskId(taskParallel.getProcessInstanceId());
                     if (StringUtils.isNotEmpty(trialSelfInspectionRecordId)) {
                         this.update(Wrappers.<TrialSelfInspectionRecord>lambdaUpdate()
@@ -625,14 +626,31 @@ public class TrialSelfInspectionRecordServiceImpl
             String join = org.apache.commons.lang.StringUtils.join(tableIds, ",");
             dto.setTableIds(join);
         }
-
         this.saveOrUpdate(dto);
 
         if (ObjectUtil.isNotEmpty(dto.getId())) {
             //获取当前最新的试验记录信息
             TrialSelfInspectionRecord obj = baseMapper.selectById(dto.getId());
 
-            //如果新增时不是两种类型表都填报过,那么有一项编号为Null,所以编辑时生成记录表编号或报告单编号
+            //编辑时处理表单pKeyIds问题 TODO 如果前端传全pKeyId就不需要该逻辑
+            if (StringUtils.isNotEmpty(obj.getTableIds())) {
+                JSONArray dataArray = dto.getDataInfo().getJSONArray("orderList");
+                List<String> tableIds = new ArrayList<>();
+                for (int i = 0; i < dataArray.size(); i++) {
+                    String pkeyId = dataArray.getJSONObject(i).getString("pkeyId");
+                    tableIds.add(pkeyId);
+                }
+                List<String> ids = Func.toStrList(obj.getTableIds());
+                tableIds.addAll(ids);
+
+                List<String> tabIds = tableIds.stream().distinct().collect(Collectors.toList());
+                dto.setTableIds(org.apache.commons.lang.StringUtils.join(tabIds, ","));
+                //更新当前记录绑定的最新的表单
+                this.saveOrUpdate(dto);
+                obj.setTableIds(dto.getTableIds());
+            }
+
+            //编辑时生成记录表编号或报告单编号,如果新增时不是两种类型表都填报过,那么有一项编号为Null
             if (StringUtils.isEmpty(obj.getRecordNo()) && dto.getTableType().contains("1")) {
                 this.buildNumber(dto);
                 this.saveOrUpdate(dto);
@@ -641,8 +659,8 @@ public class TrialSelfInspectionRecordServiceImpl
                 this.saveOrUpdate(dto);
             }
 
+            //保存实体表数据、试验记录信息、生成pdf
             try {
-                //保存实体表数据、试验记录信息、生成pdf
                 String pdfURL = excelTabClient.saveTabData(dto.getIsBatchSave(), dto.getDataInfo(), dto.getType(), dto.getTableType(), dto.getId(), obj.getTableIds());
                 if (StringUtils.isNotEmpty(pdfURL)) {
                     //修改合并pdf
@@ -658,6 +676,7 @@ public class TrialSelfInspectionRecordServiceImpl
             this.trialDeviceUseService.addDeviceUseInfo(dto);
         }
 
+        //返回当前记录id
         return dto.getId().toString();
     }
 
@@ -796,7 +815,7 @@ public class TrialSelfInspectionRecordServiceImpl
             String maxRecordNo = "";
             if (StringUtils.isEmpty(dto.getRecordNo())) {
                 //获取记录表最大编号
-                List<String> recordNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getRecordNo).collect(Collectors.toList());
+                List<String> recordNos = trialSelfInspectionRecords.stream().filter(f -> ObjectUtils.isNotEmpty(f.getRecordNo())).map(TrialSelfInspectionRecord::getRecordNo).collect(Collectors.toList());
                 if (recordNos.size() == 0 || ObjectUtil.isEmpty(recordNos)) {
                     maxRecordNo = "0001";
                 } else {
@@ -817,7 +836,7 @@ public class TrialSelfInspectionRecordServiceImpl
             String maxReportNo = "";
             if (StringUtils.isEmpty(dto.getReportNo())) {
                 //获取报告单最大编号
-                List<String> reportNos = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getReportNo).collect(Collectors.toList());
+                List<String> reportNos = trialSelfInspectionRecords.stream().filter(f -> ObjectUtils.isNotEmpty(f.getReportNo())).map(TrialSelfInspectionRecord::getReportNo).collect(Collectors.toList());
                 if (reportNos.size() == 0 || ObjectUtil.isEmpty(reportNos)) {
                     maxReportNo = "0001";
                 } else {

+ 3 - 3
blade-service/blade-e-visa/blade-e-visa.iml

@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
   <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
     <facet type="web" name="Web">
       <configuration>
         <webroots />
       </configuration>
     </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
     <output url="file://$MODULE_DIR$/target/classes" />

+ 0 - 5
blade-service/blade-manager/blade-manager.iml

@@ -7,10 +7,6 @@
     <facet type="web" name="Web">
       <configuration>
         <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
       </configuration>
     </facet>
   </component>
@@ -20,7 +16,6 @@
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />

+ 3 - 56
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1076,7 +1076,7 @@ public class ExcelTabController extends BladeController {
                         ExctabCell exctabCell = new ExctabCell();
                         if ((textInfo.indexOf("年") >= 0 && textInfo.indexOf("月") >= 0 && textInfo.indexOf("日") >= 0) || inputText.indexOf("日期") >= 0) {
                             if (inputText.indexOf("日期") >= 0) {
-                                data.empty().append("<el-date-picker type='date' popper-class='hc-table-form-date-picker'  @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder='" + inputText + "'> </el-date-picker>");
+                                data.empty().append("<el-date-picker type='date' @keyup.shift.up='keyupShiftUp' @keyup.shift.down='keyupShiftDown' @keyup.shift.left='keyupShiftLeft' @keyup.shift.right='keyupShiftRight' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder='" + inputText + "'> </el-date-picker>");
                             } else if (textInfo.indexOf("年") >= 0 && textInfo.indexOf("月") >= 0 && textInfo.indexOf("日") >= 0) {
                                 if (inputText.indexOf("专业监理工程师") >= 0) {
                                     inputText = "专业监理工程师_年月日";
@@ -1086,7 +1086,7 @@ public class ExcelTabController extends BladeController {
                                     inputText = "年月日";
                                 }
                             }
-                            data.empty().append("<el-date-picker  popper-class='hc-table-form-date-picker'  @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' type='date' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder='年月日'> </el-date-picker>");
+                            data.empty().append("<el-date-picker  @keyup.shift.up='keyupShiftUp' @keyup.shift.down='keyupShiftDown' @keyup.shift.left='keyupShiftLeft' @keyup.shift.right='keyupShiftRight' type='date' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder='年月日'> </el-date-picker>");
                             exctabCell.setTextInfo(inputText);
                             exctabCell.setExctabId(excelId);
                             exctabCell.setIsDeleted(0);
@@ -2739,6 +2739,7 @@ public class ExcelTabController extends BladeController {
         return R.data(bussDataInfoTrial);
     }
 
+
     /**
      * 在线excel 修改回调
      * @throws IOException
@@ -2751,58 +2752,4 @@ public class ExcelTabController extends BladeController {
         return excelTabService.callbackSave(callback);
     }
 
-    /**
-     * 质检 获取坐标位置
-     */
-    @GetMapping("/get-html-buss-cols")
-    @ApiOperationSupport(order = 36)
-    @ApiOperation(value = "获取坐标位置", notes = "获取坐标位置")
-    @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "pkeyId", value = "pkeyId", required = true)
-    })
-    public R getHtmlBussCols(Long pkeyId) throws FileNotFoundException {
-
-        WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                .eq(WbsTreeContract::getPKeyId, pkeyId));
-        if (wbsTreeContract == null) {
-            return R.fail("该数据下无此节点!");
-        }
-        if (wbsTreeContract.getHtmlUrl() == null) {
-            return R.fail("暂无表单!");
-        }
-
-        File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
-        FileInputStream fileInputStream = new FileInputStream(file1);
-        String htmlString = IoUtil.readToString(fileInputStream);
-        // 解析 style
-        Document doc = Jsoup.parse(htmlString);
-        Element table = doc.select("table").first();
-        Elements trs = table.select("tr");
-
-        List<List<String>> redata = new ArrayList<>();
-        for (int i = 0; i < trs.size(); i++) {
-            Element tr = trs.get(i);
-            Elements tds = tr.select("td");
-            List<String> tdList = new ArrayList<>();
-            for (int j = 0; j < tds.size(); j++) {
-                Element element = tds.get(j);
-                if (element.html().indexOf("el-tooltip") >= 0) {
-                    element = element.children().get(0);
-                }
-                if (element.children().size() >= 1) {
-                    String keyname = element.children().get(0).attr("keyname");
-                    if (StringUtils.isNotEmpty(keyname)) {
-                        tdList.add(keyname);
-                    }
-                }
-            }
-            redata.add(tdList) ;
-        }
-
-        String[][] res = new String[redata.size()][]; // 存放转换结果的 二维数组
-        for(int i=0; i<res.length; i++){ // 转换方法
-            res[i] = redata.get(i).toArray(new String[redata.get(i).size()]);
-        }
-        return R.data(res);
-    }
 }

+ 0 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java

@@ -240,14 +240,4 @@ public class ProjectInfoController extends BladeController {
         return R.data(result);
     }
 
-    /**
-     * 同步节点树基本信息到项目下的合同段
-     */
-    @PostMapping("/sync-node-info")
-    @ApiOperationSupport(order = 14)
-    @ApiOperation(value = "同步节点树基本信息到项目下的合同段", notes = "传入节点pKeyId")
-    public R<Object> syncNodeInfo(@RequestParam Long pKeyId) {
-        return R.status(wbsTreeService.syncNodeInfo(pKeyId));
-    }
-
 }

+ 13 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -317,13 +317,13 @@ public class WbsTreePrivateController extends BladeController {
         List<WbsNodeTableVO> rs = wbsTreePrivateService.selectByNodeTable(parentId, wbsId, projectId);
         if (rs.size() > 0) {
             for (WbsNodeTableVO r : rs) {
-                if (StringUtil.isBlank(r.getHtmlUrl())){
+                if (StringUtil.isBlank(r.getHtmlUrl())) {
                     r.setIsLinkTable(1);
                 }
                 if (StringUtil.isBlank(r.getInitTableId())) {
                     WbsTree wbsTree = wbsTreeService.getById(r.getId());
                     if (wbsTree != null) {
-                        r.setInitTableId(wbsTree.getInitTableId().toString());
+                        r.setInitTableId(com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(wbsTree.getInitTableId()) ? wbsTree.getInitTableId().toString() : "");
                         r.setElementTotal(Math.toIntExact(wbsFormElementService.count(
                                 new LambdaQueryWrapper<WbsFormElement>().eq(WbsFormElement::getFId, r.getInitTableId()))));
                     }
@@ -495,6 +495,16 @@ public class WbsTreePrivateController extends BladeController {
         return R.status(wbsTreePrivateService.syncProjectEVisa(projectId));
     }
 
+    /**
+     * 同步节点树基本信息到项目下的合同段-包括同步表结构
+     */
+    @PostMapping("/sync-node-info")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "同步节点树基本信息到项目下的合同段-包括同步表结构", notes = "传入节点pKeyId")
+    public R<Object> syncNodeInfo(@RequestParam Long pKeyId) {
+        return R.status(wbsTreeService.syncNodeInfo(pKeyId));
+    }
+
     /**
      * 同步项目下节点的元素表
      */
@@ -614,6 +624,7 @@ public class WbsTreePrivateController extends BladeController {
 
     /**
      * 解決项目电签信息重复问题接口
+     *
      * @param pid 当前项目id
      * @return
      */

+ 5 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -51,14 +51,16 @@ public class ExcelTabClientImpl implements ExcelTabClient {
         String nodeId = table.getString("nodeId");
         String projectId = table.getString("projectId");
         String contractId = table.getString("contractId");
-        List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
+
+        List<TableInfo> tableInfoList = this.excelTabService.getTableInfoListTrial(dataArray, tabIds);
 
         String pdfUrl = "";
 
-        //保存数据到数据库-试验,当前记录id作为groupId
+        //入库-试验填报数据,当前记录id作为groupId
         this.excelTabService.saveOrUpdateInfoTrial(tableInfoList, id);
+
+        //公式填充
         try {
-            //公式填充
             this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeId));
         } catch (Exception e) {
             e.printStackTrace();

+ 6 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -136,6 +136,11 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
      */
     String getBussPDFSTrial(String nodeId, String tableType, String classify, String contractId, String projectId, Long id, String tabIds) throws Exception;
 
+    /**
+     * 表格数据封装 - 试验
+     */
+    List<TableInfo> getTableInfoListTrial(JSONArray dataArray, String tabIds);
+
 
     /**
      * 保存 首件数据
@@ -152,5 +157,5 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     /**
      * 在线excel 保存回调
      */
-    ExcelEditCallback callbackSave(ExcelEditCallback callback) ;
+    ExcelEditCallback callbackSave(ExcelEditCallback callback);
 }

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

@@ -945,7 +945,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 for (Element element : bhtitle) {
                     int trindex = Integer.parseInt(element.attr("trindex"));
                     if (trindex <= 10) {
-                        reData.put(element.attr("keyName"), node.getPartitionCode()==null?"":node.getPartitionCode());
+                        reData.put(element.attr("keyName"), node.getPartitionCode() == null ? "" : node.getPartitionCode());
                     }
                 }
             }
@@ -1053,7 +1053,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     @Override
     public R getBussPdfInfo(Long pkeyId) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-       // String file_path = "/Users/hongchuangyanfa/Desktop/";
+        //String file_path = "/Users/hongchuangyanfa/Desktop/";
 
         WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, pkeyId));
@@ -1119,7 +1119,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 if (fontHeightInPoints >= 14 && StringUtils.isEmpty(cell.getStringCellValue()) && fisRow<=8) {
 
                     String title=projectInfo.getProjectName();
-                    if(title.length()>=30){
+                    if(title.length()>=44){
                         sheet.getRow(fisRow).setHeight((short)900);
                         newStyle.setWrapText(true);
                     }
@@ -1356,7 +1356,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     @Override
     public void getBussPdfs(String nodeId, String classify, String contractId, String projectId) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        //String file_path = "/Users/hongchuangyanfa/Desktop/";
+       // String file_path = "/Users/hongchuangyanfa/Desktop/";
         // 获取有权限的节点信息
         List<AppWbsTreeContractVO> wbsTreeContractList = wbsTreeContractService.searchNodeAllTable(nodeId, classify, contractId, projectId);
         List<String> data = new ArrayList<>();

+ 70 - 20
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -457,10 +457,44 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         List<WbsTreePrivate> listPrivate = new ArrayList<>();
         List<WbsTreeContract> listContract = new ArrayList<>();
         //获取当前项目下所有合同段信息
-        List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().select(ContractInfo::getId).eq(ContractInfo::getPId, projectId));
+        List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().select(ContractInfo::getId, ContractInfo::getContractType).eq(ContractInfo::getPId, projectId));
+        List<Long> contractInfosIds = contractInfos.stream().filter(f -> 1 == f.getContractType()).map(ContractInfo::getId).collect(Collectors.toList());
+
+        Map<Long, WbsTreePrivate> maps = wbsTreePrivatesAllNow.stream().collect(Collectors.toMap(WbsTreePrivate::getId, Function.identity()));
 
         for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
-            for (WbsTreePrivate treePrivateNow : wbsTreePrivatesAllNow) {
+            WbsTreePrivate treePrivateNow = maps.get(wbsTreePrivate.getId());
+            if (treePrivateNow != null) {
+                if (!wbsTreePrivate.getNodeName().equals(treePrivateNow.getNodeName())
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getNodeType()) && !wbsTreePrivate.getNodeType().equals(treePrivateNow.getNodeType()))
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getMajorDataType()) && !wbsTreePrivate.getMajorDataType().equals(treePrivateNow.getMajorDataType()))
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getTableType()) && !wbsTreePrivate.getTableType().equals(treePrivateNow.getTableType()))
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getTableOwner()) && !wbsTreePrivate.getTableOwner().equals(treePrivateNow.getTableOwner()))
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getImportMatchingInfo()) && !wbsTreePrivate.getImportMatchingInfo().equals(treePrivateNow.getImportMatchingInfo()))
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getMixRatioTestIds()) && !wbsTreePrivate.getMixRatioTestIds().equals(treePrivateNow.getMixRatioTestIds()))
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getInitTableId()) && !wbsTreePrivate.getInitTableId().equals(treePrivateNow.getInitTableId()))
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getInitTableName()) && !wbsTreePrivate.getInitTableName().equals(treePrivateNow.getInitTableName())
+                        || (ObjectUtils.isNotEmpty(wbsTreePrivate.getHtmlUrl()) && !wbsTreePrivate.getHtmlUrl().equals(treePrivateNow.getHtmlUrl())))) {
+                    //修改项目wbs信息
+                    WbsTreePrivate wbsPrivate = BeanUtil.copyProperties(wbsTreePrivate, WbsTreePrivate.class);
+                    if (wbsPrivate != null) {
+                        wbsPrivate.setWbsId(wbsId);
+                        wbsPrivate.setProjectId(projectId);
+                        listPrivate.add(wbsPrivate);
+                    }
+                    for (Long id : contractInfosIds) {
+                        //修改合同段wbs信息
+                        WbsTreeContract wbsContract = BeanUtil.copyProperties(wbsTreePrivate, WbsTreeContract.class);
+                        if (wbsContract != null) {
+                            wbsContract.setContractId(id.toString());
+                            wbsContract.setProjectId(projectId);
+                            listContract.add(wbsContract);
+                        }
+                    }
+                }
+            }
+
+           /*for (WbsTreePrivate treePrivateNow : wbsTreePrivatesAllNow) {
                 //判断相同节点基础信息、元素表类型、元素表所属方 是否发生改变
                 if (wbsTreePrivate.getId().equals(treePrivateNow.getId()) &&
                         (!wbsTreePrivate.getNodeName().equals(treePrivateNow.getNodeName())
@@ -490,7 +524,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         }
                     }
                 }
-            }
+            }*/
         }
 
         //修改到项目
@@ -500,9 +534,11 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
         //修改到合同段
         if (listContract.size() > 0) {
-            //获取合同段下的复制、新增节点
-            List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = new ArrayList<>();
-            for (ContractInfo contractInfo : contractInfos) {
+            //获取当前项目下所有合同段下的复制、新增节点
+            String sql = "select id,old_id,project_id,contract_id from m_wbs_tree_contract where project_id = " + projectId + " and contract_id in(" + org.apache.commons.lang.StringUtils.join(contractInfosIds, ",") + ") and wbs_type = " + wbsType + " and type = 1 and status = 1 and is_deleted = 0 and old_id is not null";
+            List<WbsTreeContract> wbsTreeContractsCopyOrAddAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            Map<String, List<WbsTreeContract>> copyAddNodes = wbsTreeContractsCopyOrAddAll.stream().collect(Collectors.groupingBy(WbsTreeContract::getOldId));
+            /*for (ContractInfo contractInfo : contractInfos) {
                 List<WbsTreeContract> wbsTreeContractsCopyOrAdd = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
                         .select(WbsTreeContract::getId, WbsTreeContract::getOldId, WbsTreeContract::getProjectId, WbsTreeContract::getContractId)
                         .eq(WbsTreeContract::getProjectId, projectId)
@@ -512,13 +548,14 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         .isNotNull(WbsTreeContract::getOldId)
                 );
                 wbsTreeContractsCopyOrAddAll.addAll(wbsTreeContractsCopyOrAdd);
-            }
+            }*/
 
             List<WbsTreeContract> listContractAdd = new ArrayList<>();
-
             for (WbsTreeContract obj1 : listContract) {
-                for (WbsTreeContract obj2 : wbsTreeContractsCopyOrAddAll) {
-                    if (obj1.getId().toString().equals(obj2.getOldId()) && obj1.getProjectId().equals(obj2.getProjectId()) && obj1.getContractId().equals(obj2.getContractId())) {
+                List<WbsTreeContract> copyAddNodesNow = copyAddNodes.get(obj1.getId().toString());
+                if (copyAddNodesNow.size() > 0) {
+                    WbsTreeContract obj2 = copyAddNodesNow.stream().filter(f -> f.getContractId().equals(obj1.getContractId()) && f.getProjectId().equals(obj1.getProjectId())).findAny().orElse(null);
+                    if (obj2 != null) {
                         obj2.setNodeName(obj1.getNodeName());
                         obj2.setNodeType(obj1.getNodeType());
                         obj2.setMajorDataType(obj1.getMajorDataType());
@@ -528,6 +565,17 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         listContractAdd.add(obj2);
                     }
                 }
+                /*for (WbsTreeContract obj2 : wbsTreeContractsCopyOrAddAll) {
+                    if (obj1.getId().toString().equals(obj2.getOldId()) && obj1.getProjectId().equals(obj2.getProjectId()) && obj1.getContractId().equals(obj2.getContractId())) {
+                        obj2.setNodeName(obj1.getNodeName());
+                        obj2.setNodeType(obj1.getNodeType());
+                        obj2.setMajorDataType(obj1.getMajorDataType());
+                        obj2.setTableType(obj1.getTableType());
+                        obj2.setTableOwner(obj1.getTableOwner());
+                        obj2.setHtmlUrl(obj1.getHtmlUrl());
+                        listContractAdd.add(obj2);
+                    }
+                }*/
             }
 
             listContractAdd.addAll(listContract);
@@ -1102,7 +1150,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                             dataPrivate.setWbsType(wbsTreePrivate.getWbsType());
                             dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
                             dataPrivate.setFullName(dataPrivate.getNodeName());
-                            dataPrivate.setInitTableId(tree.getInitTableId().toString());
+                            dataPrivate.setInitTableId(ObjectUtils.isNotEmpty(tree.getInitTableId()) ? tree.getInitTableId().toString() : null);
                             //新增
                             insertDataPrivateList.add(dataPrivate);
 
@@ -1226,7 +1274,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                             dataPrivate.setWbsId(wbsTreePrivate.getWbsId());
                             dataPrivate.setWbsType(tree.getWbsType());
                             dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
-                            dataPrivate.setInitTableId(tree.getInitTableId());
+                            dataPrivate.setInitTableId(ObjectUtils.isNotEmpty(tree.getInitTableId()) ? tree.getInitTableId() : null);
 
                             insertDataPrivateList.add(dataPrivate);
 
@@ -1357,10 +1405,11 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 for (WbsTreePrivate wbsTreePrivate : collect1) {
                     if (wbsTreePrivate.getType() == 2) {
                         WbsTreePrivate obj = nowNodeTreeAll.get(wbsTreePrivate.getParentId());
-                        assert obj != null;
-                        List<TextdictInfo> textDictInfos = collect3.get(String.valueOf(wbsTreePrivate.getPKeyId()));
-                        if (textDictInfos != null && textDictInfos.size() > 0) {
-                            textDictInfoData.put(wbsTreePrivate.getId(), textDictInfos);
+                        if (obj != null) {
+                            List<TextdictInfo> textDictInfos = collect3.get(String.valueOf(wbsTreePrivate.getPKeyId()));
+                            if (textDictInfos != null && textDictInfos.size() > 0) {
+                                textDictInfoData.put(wbsTreePrivate.getId(), textDictInfos);
+                            }
                         }
                     }
 
@@ -1385,10 +1434,11 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     if (textDictInfos != null) {
                         for (TextdictInfo textdictInfo : textDictInfos) {
                             TextdictInfo obj = BeanUtil.copyProperties(textdictInfo, TextdictInfo.class);
-                            assert obj != null;
-                            obj.setId(SnowFlakeUtil.getId());
-                            obj.setTabId(tree.getPKeyId().toString()); //重新赋值绑定到对应的表上
-                            insertData.add(obj);
+                            if (obj != null) {
+                                obj.setId(SnowFlakeUtil.getId());
+                                obj.setTabId(tree.getPKeyId().toString()); //重新赋值绑定到对应的表上
+                                insertData.add(obj);
+                            }
                         }
                     }
                 });

+ 130 - 191
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -205,89 +205,90 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             ArrayList<Map<String, String>> result = excelUtil.readExcelToObj(canonicalPath);
             List<Map<String, String>> result2 = WbsExcelBatchUtil.deepCopy(result);
             List<Map<String, String>> maps = WbsExcelBatchUtil.removeRepeatMapByKey(result, "表名");
-            assert maps != null;
-            List<WbsTreeBatchImportDTO> list = new ArrayList<>();
-
-            //初始化
-            wbsTree.setTenantId(wbsTree.getTenantId());
-            wbsTree.setNodeType(1);
-            wbsTree.setWbsId(wbsTree.getWbsId());
-            wbsTree.setParentId(wbsTree.getId());
-            String ancestors = wbsTree.getAncestors() + StringPool.COMMA + wbsTree.getId();
-            wbsTree.setAncestors(ancestors);
-            wbsTree.setType(2);
-            wbsTree.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-            wbsTree.setStatus(1);
-
-            maps.forEach(map -> {
-                String tabName = map.get("表名");
-                wbsTree.setNodeName(tabName);
-                wbsTree.setTableType(WbsElementUtil.getTableType(map.get("表类型")));
-                Long id = SnowFlakeUtil.getId();
-                String initTableName = "m_" + DateUtil.time() + "_" + id;
-                wbsTree.setInitTableName(initTableName);
-                wbsTree.setId(id);
-                if (StringUtils.isEmpty(wbsTree.getFillRate())) {
-                    wbsTree.setFillRate("80%");
-                }
-                //新增表单
-                boolean b = submit3(wbsTree);
+            if (maps != null) {
+                List<WbsTreeBatchImportDTO> list = new ArrayList<>();
+                //初始化
+                wbsTree.setTenantId(wbsTree.getTenantId());
+                wbsTree.setNodeType(1);
+                wbsTree.setWbsId(wbsTree.getWbsId());
+                wbsTree.setParentId(wbsTree.getId());
+                String ancestors = wbsTree.getAncestors() + StringPool.COMMA + wbsTree.getId();
+                wbsTree.setAncestors(ancestors);
+                wbsTree.setType(2);
+                wbsTree.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+                wbsTree.setStatus(1);
+
+                maps.forEach(map -> {
+                    String tabName = map.get("表名");
+                    wbsTree.setNodeName(tabName);
+                    wbsTree.setTableType(WbsElementUtil.getTableType(map.get("表类型")));
+                    Long id = SnowFlakeUtil.getId();
+                    String initTableName = "m_" + DateUtil.time() + "_" + id;
+                    wbsTree.setInitTableName(initTableName);
+                    wbsTree.setId(id);
+                    if (StringUtils.isEmpty(wbsTree.getFillRate())) {
+                        wbsTree.setFillRate("80%");
+                    }
+                    //新增表单
+                    boolean b = submit3(wbsTree);
 
-                if (b) {
-                    //新增实体表
-                    initTable(initTableName);
+                    if (b) {
+                        //新增实体表
+                        initTable(initTableName);
 
-                    WbsTreeBatchImportDTO wbsTreeBatchImportDTO = new WbsTreeBatchImportDTO();
-                    wbsTreeBatchImportDTO.setId(id);
-                    wbsTreeBatchImportDTO.setTableName(tabName);
-                    wbsTreeBatchImportDTO.setInitTableName(initTableName);
-                    list.add(wbsTreeBatchImportDTO);
+                        WbsTreeBatchImportDTO wbsTreeBatchImportDTO = new WbsTreeBatchImportDTO();
+                        wbsTreeBatchImportDTO.setId(id);
+                        wbsTreeBatchImportDTO.setTableName(tabName);
+                        wbsTreeBatchImportDTO.setInitTableName(initTableName);
+                        list.add(wbsTreeBatchImportDTO);
 
-                }
-            });
-
-            //新增元素
-            list.forEach(i -> {
-                Long elementTableId = i.getId();
-                String tableName = i.getTableName();
-                String initTableName = i.getInitTableName();
-                final int[] keyNumb = {0};
-
-                result2.forEach(map -> {
-                    if (tableName.equals(map.get("表名"))) {
-                        keyNumb[0]++;
-                        WbsFormElement wbsFormElement = new WbsFormElement();
-                        wbsFormElement.setEName(map.get("字段名"));
-                        String key = "key_" + keyNumb[0];
-                        wbsFormElement.setEKey(key);
-                        wbsFormElement.setFId(String.valueOf(elementTableId));
-                        wbsFormElement.setELength(WbsElementUtil.getElementLength(map.get("数据类型")));
-                        wbsFormElement.setEType(WbsElementUtil.getElementType(map.get("数据类型")));
-                        wbsFormElement.setEInspectionMethod(map.get("计算公式、方法或数值"));
-                        wbsFormElement.setEAllowDeviation(map.get("允许偏差范围"));
-                        wbsFormElement.setRemark(map.get("备注"));
-
-                        wbsFormElementService.save(wbsFormElement);
-
-                        baseMapper.alterTableFiled(initTableName, wbsFormElement.getEKey(), "varchar", WbsFormElementServiceImpl.DEFAULT_ELEMENT_LENGTH_VARCHAR);
                     }
-
                 });
-            });
-            return true;
 
+                //新增元素
+                list.forEach(i -> {
+                    Long elementTableId = i.getId();
+                    String tableName = i.getTableName();
+                    String initTableName = i.getInitTableName();
+                    final int[] keyNumb = {0};
+
+                    result2.forEach(map -> {
+                        if (tableName.equals(map.get("表名"))) {
+                            keyNumb[0]++;
+                            WbsFormElement wbsFormElement = new WbsFormElement();
+                            wbsFormElement.setEName(map.get("字段名"));
+                            String key = "key_" + keyNumb[0];
+                            wbsFormElement.setEKey(key);
+                            wbsFormElement.setFId(String.valueOf(elementTableId));
+                            wbsFormElement.setELength(WbsElementUtil.getElementLength(map.get("数据类型")));
+                            wbsFormElement.setEType(WbsElementUtil.getElementType(map.get("数据类型")));
+                            wbsFormElement.setEInspectionMethod(map.get("计算公式、方法或数值"));
+                            wbsFormElement.setEAllowDeviation(map.get("允许偏差范围"));
+                            wbsFormElement.setRemark(map.get("备注"));
+
+                            wbsFormElementService.save(wbsFormElement);
+
+                            baseMapper.alterTableFiled(initTableName, wbsFormElement.getEKey(), "varchar", WbsFormElementServiceImpl.DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                        }
+
+                    });
+                });
+                return true;
+            }
         } catch (
                 IOException | ClassNotFoundException e) {
             throw new ServiceException("操作失败,请上传正确模板内容");
         } finally {
-            assert canonicalPath != null;
-            File file2 = new File(canonicalPath);
-            if (file2.isFile() && file2.exists()) {
-                if (file2.delete()) {
-                    System.gc();
+            if (canonicalPath != null){
+                File file2 = new File(canonicalPath);
+                if (file2.isFile() && file2.exists()) {
+                    if (file2.delete()) {
+                        System.gc();
+                    }
                 }
             }
         }
+        return false;
     }
 
     @Override
@@ -326,73 +327,74 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         //获取当前项目引用
         String sql = "select reference_wbs_template_id,reference_wbs_template_type,reference_wbs_template_id_trial,reference_wbs_template_type_trial from m_project_info where id = " + wbsTreePrivate.getProjectId();
         ProjectInfo projectInfo = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ProjectInfo.class)).stream().findAny().orElse(null);
-        assert projectInfo != null;
-        if (("1").equals(wbsTreePrivate.getWbsType())) {
-            //质检公有
-            if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateId()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateType()) && ("public").equals(projectInfo.getReferenceWbsTemplateType()))) {
-                //获取公有树
-                List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTree::getType, 1).eq(WbsTree::getStatus, 1));
-                //获取项目私节点、元素表
-                List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getStatus, 1));
-                //同步修改
-                this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, wbsTreePrivate.getProjectId(), Integer.parseInt(wbsTreePrivate.getWbsType()));
-
-                //质检私有
-            } else if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateId()) && ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateType()) && ("private").equals(projectInfo.getReferenceWbsTemplateType())) {
-                //获取私有引用根节点
-                WbsTreePrivate wbsTreePrivateRecord = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
-                        .select(WbsTreePrivate::getProjectId, WbsTreePrivate::getWbsId)
-                        .eq(WbsTreePrivate::getPKeyId, projectInfo.getReferenceWbsTemplateId()));
-                //获取私有引用项目树
-                List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                        .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
-                        .eq(WbsTreePrivate::getStatus, 1)
-                        .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivateRecord.getProjectId()))
-                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, Long.parseLong(wbsTreePrivateRecord.getWbsId())).or().isNull(WbsTreePrivate::getWbsId))
-                );
-                //获取当前项目私有树、元素表
-                List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                        .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
-                        .eq(WbsTreePrivate::getStatus, 1)
-                        .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
-                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).or().isNull(WbsTreePrivate::getWbsId))
-                );
-                //同步修改
-                this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, wbsTreePrivate.getProjectId(), projectInfo.getReferenceWbsTemplateId().toString(), Integer.parseInt(wbsTreePrivate.getWbsType()));
-            }
+        if (projectInfo != null) {
+            if (("1").equals(wbsTreePrivate.getWbsType())) {
+                //质检公有
+                if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateId()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateType()) && ("public").equals(projectInfo.getReferenceWbsTemplateType()))) {
+                    //获取公有树
+                    List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTree::getType, 1).eq(WbsTree::getStatus, 1));
+                    //获取项目私节点、元素表
+                    List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getStatus, 1));
+                    //同步修改
+                    this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, wbsTreePrivate.getProjectId(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+
+                    //质检私有
+                } else if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateId()) && ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateType()) && ("private").equals(projectInfo.getReferenceWbsTemplateType())) {
+                    //获取私有引用根节点
+                    WbsTreePrivate wbsTreePrivateRecord = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                            .select(WbsTreePrivate::getProjectId, WbsTreePrivate::getWbsId)
+                            .eq(WbsTreePrivate::getPKeyId, projectInfo.getReferenceWbsTemplateId()));
+                    //获取私有引用项目树
+                    List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                            .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
+                            .eq(WbsTreePrivate::getStatus, 1)
+                            .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivateRecord.getProjectId()))
+                            .and(obj -> obj.eq(WbsTreePrivate::getWbsId, Long.parseLong(wbsTreePrivateRecord.getWbsId())).or().isNull(WbsTreePrivate::getWbsId))
+                    );
+                    //获取当前项目私有树、元素表
+                    List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                            .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
+                            .eq(WbsTreePrivate::getStatus, 1)
+                            .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
+                            .and(obj -> obj.eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).or().isNull(WbsTreePrivate::getWbsId))
+                    );
+                    //同步修改
+                    this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, wbsTreePrivate.getProjectId(), projectInfo.getReferenceWbsTemplateId().toString(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+                }
 
-        } else if (("2").equals(wbsTreePrivate.getWbsType())) {
-            //试验公有
-            if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateIdTrial()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateTypeTrial()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial()))) {
+            } else if (("2").equals(wbsTreePrivate.getWbsType())) {
+                //试验公有
+                if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateIdTrial()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateTypeTrial()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial()))) {
 
-                List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTree::getType, 1).eq(WbsTree::getStatus, 1));
+                    List<WbsTree> wbsTreeListAll = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTree::getType, 1).eq(WbsTree::getStatus, 1));
 
-                List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getStatus, 1));
+                    List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateId()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getStatus, 1));
 
-                this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, wbsTreePrivate.getProjectId(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+                    this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, wbsTreePrivate.getProjectId(), Integer.parseInt(wbsTreePrivate.getWbsType()));
 
-                //试验私有
-            } else if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateIdTrial()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateTypeTrial()) && ("private").equals(projectInfo.getReferenceWbsTemplateTypeTrial()))) {
+                    //试验私有
+                } else if (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateIdTrial()) && (ObjectUtil.isNotEmpty(projectInfo.getReferenceWbsTemplateTypeTrial()) && ("private").equals(projectInfo.getReferenceWbsTemplateTypeTrial()))) {
 
-                WbsTreePrivate wbsTreePrivateRecord = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
-                        .select(WbsTreePrivate::getProjectId, WbsTreePrivate::getWbsId)
-                        .eq(WbsTreePrivate::getPKeyId, projectInfo.getReferenceWbsTemplateIdTrial()));
+                    WbsTreePrivate wbsTreePrivateRecord = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                            .select(WbsTreePrivate::getProjectId, WbsTreePrivate::getWbsId)
+                            .eq(WbsTreePrivate::getPKeyId, projectInfo.getReferenceWbsTemplateIdTrial()));
 
-                List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                        .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
-                        .eq(WbsTreePrivate::getStatus, 1)
-                        .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
-                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, Long.parseLong(wbsTreePrivateRecord.getWbsId())).or().isNull(WbsTreePrivate::getWbsId))
-                );
+                    List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                            .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
+                            .eq(WbsTreePrivate::getStatus, 1)
+                            .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
+                            .and(obj -> obj.eq(WbsTreePrivate::getWbsId, Long.parseLong(wbsTreePrivateRecord.getWbsId())).or().isNull(WbsTreePrivate::getWbsId))
+                    );
 
-                List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                        .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
-                        .eq(WbsTreePrivate::getStatus, 1)
-                        .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
-                        .and(obj -> obj.eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateIdTrial()).or().isNull(WbsTreePrivate::getWbsId))
-                );
+                    List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                            .select(WbsTreePrivate::getId, WbsTreePrivate::getNodeName, WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner, WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId, WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl)
+                            .eq(WbsTreePrivate::getStatus, 1)
+                            .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
+                            .and(obj -> obj.eq(WbsTreePrivate::getWbsId, projectInfo.getReferenceWbsTemplateIdTrial()).or().isNull(WbsTreePrivate::getWbsId))
+                    );
 
-                this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, wbsTreePrivate.getProjectId(), projectInfo.getReferenceWbsTemplateIdTrial().toString(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+                    this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, wbsTreePrivate.getProjectId(), projectInfo.getReferenceWbsTemplateIdTrial().toString(), Integer.parseInt(wbsTreePrivate.getWbsType()));
+                }
             }
         }
         return true;
@@ -919,69 +921,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         }
     }
 
-    @Async
-    public boolean insertTextDictInfoAsync(List<WbsTreePrivate> wbsTreePrivateOldTables, List<WbsTreePrivate> wbsTreePrivateNewTables) {
-        //wbsTreePrivateOldTables=原始引用的元素表+独立表 wbsTreePrivateNewTables=现在项目树的元素表+独立表
-        Map<Long, List<TextdictInfo>> textDictInfoData = new HashMap<>();
-        if (wbsTreePrivateOldTables.size() > 0) {
-            //只同步了独立库的元素表电签信息,type=2以前的节点下同步形式,现在type=10为独立库
-            List<Long> pIdsDL = wbsTreePrivateOldTables.stream().filter(f -> f.getType().equals(10) || f.getType().equals(2)).collect(Collectors.toList()).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
-            String ids = StringUtils.join(pIdsDL, ",");
-            String sql = "select `id`,`name`,`type`,tab_id,col_key,sig_role_id,is_deleted,sig_role_name,col_name,pyzbx,pyzby from m_textdict_info where tab_id in (" + ids + ") and is_deleted = 0";
-            List<TextdictInfo> textDictInfos = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TextdictInfo.class));
-
-            for (WbsTreePrivate wbsTreePrivate : wbsTreePrivateOldTables) {
-                //私有引用-电签匹配数据、默认信息数据,根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
-                List<TextdictInfo> collect = textDictInfos.stream().filter(f -> f.getTabId().equals(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
-                if (collect.size() > 0) {
-                    textDictInfoData.put(wbsTreePrivate.getId(), collect);
-                }
-            }
-        }
-
-        if (textDictInfoData.size() > 0) {
-            //同步电签配置信息 构造电签位置配置信息、编辑默认信息数据
-            List<TextdictInfo> insertData = new ArrayList<>();
-            for (WbsTreePrivate wbsTreePrivateNewTable : wbsTreePrivateNewTables) {
-                textDictInfoData.forEach((k, v) -> {
-                    if (wbsTreePrivateNewTable.getId().equals(k)) {
-                        for (TextdictInfo textdictInfo : v) {
-                            TextdictInfo obj = BeanUtil.copyProperties(textdictInfo, TextdictInfo.class);
-                            assert obj != null;
-                            obj.setTabId(String.valueOf(wbsTreePrivateNewTable.getPKeyId()));
-                            obj.setId(SnowFlakeUtil.getId());
-                            insertData.add(obj);
-                        }
-                    }
-                });
-            }
-
-            //判断是否存在
-            List<Long> pIdsDLNew = wbsTreePrivateNewTables.stream().filter(f -> f.getType().equals(10) || f.getType().equals(2)).collect(Collectors.toList()).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
-            String ids = StringUtils.join(pIdsDLNew, ",");
-            String sql = "select `id`,`name`,`type`,tab_id,col_key,sig_role_id,is_deleted,sig_role_name,col_name,pyzbx,pyzby from m_textdict_info where tab_id in (" + ids + ") and is_deleted = 0";
-            List<TextdictInfo> textDictInfosNew = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TextdictInfo.class));
-
-            Iterator<TextdictInfo> iterator = insertData.iterator();
-            while (iterator.hasNext()) {
-                TextdictInfo textDictInfo = iterator.next();
-                textDictInfosNew.stream().filter(f ->
-                        //判断每张表TabId的每个位置ColKey、类型Type唯一
-                        f.getColKey().equals(textDictInfo.getColKey())
-                                && f.getType().equals(textDictInfo.getType())
-                                && f.getTabId().equals(textDictInfo.getTabId())
-                ).findAny().ifPresent(textDict -> iterator.remove());
-            }
-
-            if (insertData.size() > 0) {
-                textDictInfoService.insertBatch(insertData, 1000);
-            }
-
-            return true;
-        }
-        return false;
-    }
-
     @Override
     public WbsTreeAllListVO findWbsTreeList(Integer type) {
         WbsTreeAllListVO wbsTreeAllListVO = new WbsTreeAllListVO();