liuyc 2 年之前
父節點
當前提交
5c23460be1
共有 16 個文件被更改,包括 405 次插入214 次删除
  1. 5 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreePrivate.java
  2. 4 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreePrivateClient.java
  3. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateVO4.java
  4. 45 10
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java
  5. 4 2
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  6. 4 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialDetectionDataService.java
  7. 119 60
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDetectionDataServiceImpl.java
  8. 14 10
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  9. 31 23
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  10. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  11. 85 78
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java
  12. 5 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java
  13. 22 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  14. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  15. 58 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  16. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

+ 5 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreePrivate.java

@@ -211,5 +211,10 @@ public class WbsTreePrivate extends BaseEntity {
     @ApiModelProperty(value = "表单是否上传附件1否 2是")
     private Integer tabFileType;
 
+    /**
+     * 试验表关联的合同段id
+     */
+    @ApiModelProperty(value = "试验表关联的合同段id")
+    private Long trialTabContractId;
 
 }

+ 4 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreePrivateClient.java

@@ -40,7 +40,7 @@ public interface WbsTreePrivateClient {
     List<WbsTreeContractTreeVOS> queryWbsTreePrivateByProjectIdAndId(@RequestParam String projectId, @RequestParam Long id);
 
     @PostMapping(API_PREFIX + "/copyBussTab")
-    boolean copyBussTab(@RequestParam Long pKeyId, @RequestParam Long id);
+    boolean copyBussTab(@RequestParam Long pKeyId, @RequestParam Long id, @RequestParam Long contractId);
 
     @PostMapping(API_PREFIX + "/removeBussTabInfoById")
     boolean removeBussTabInfoById(@RequestParam Long pKeyId);
@@ -60,4 +60,7 @@ public interface WbsTreePrivateClient {
     @PostMapping(API_PREFIX + "/getTrialDataInfo")
     List<Map<String, Object>> getTrialDataInfo(@RequestParam String pKeyId, @RequestParam Long id);
 
+    @PostMapping(API_PREFIX + "/saveObj")
+    void saveObj(@RequestBody WbsTreePrivate wbsTreePrivate);
+
 }

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateVO4.java

@@ -51,4 +51,7 @@ public class WbsTreePrivateVO4 implements Serializable {
 
     private Integer isLinkTable;
 
+    //是否是复制的表 0=否 1=是 (复制表可以删除)
+    private Integer isCopyTab;
+
 }

+ 45 - 10
blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java

@@ -42,9 +42,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.validation.Valid;
 import java.io.File;
 import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -203,12 +201,41 @@ public class TrialDetectionController extends BladeController {
 
     @GetMapping("/self/copy-buss-tab")
     @ApiOperationSupport(order = 15)
-    @ApiOperation(value = "自检表单复制", notes = "传入节点pKeyId,当前记录id")
-    public R<Object> copyBussTab(@RequestParam Long pKeyId, @RequestParam Long id) {
-        return R.status(wbsTreePrivateClient.copyBussTab(pKeyId, id));
+    @ApiOperation(value = "自检表单复制", notes = "传入节点pKeyId,当前记录id,合同段id")
+    public R<Object> copyBussTab(@RequestParam Long pKeyId, @RequestParam Long id, @RequestParam Long contractId) {
+        if (ObjectUtils.isEmpty(id)) {
+            //新增复制 复制空表
+            WbsTreePrivate wbsTreePrivate = jdbcTemplate.query("select * from m_wbs_tree_private where p_key_id =" + pKeyId, new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
+            if (wbsTreePrivate != null) {
+                List<WbsTreePrivate> wbsTreePrivateList = jdbcTemplate.query("select * from m_wbs_tree_private where is_deleted = 0 and status = 1 and id =" + wbsTreePrivate.getId() + " and wbs_id =" + wbsTreePrivate.getWbsId() + " and wbs_type =" + wbsTreePrivate.getWbsType() + " and project_id = " + wbsTreePrivate.getProjectId() + " and parent_id = " + wbsTreePrivate.getParentId(), new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+                List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateList.stream().sorted(Comparator.comparing(WbsTreePrivate::getCreateTime).reversed()).collect(Collectors.toList());
+                wbsTreePrivate.setPKeyId(SnowFlakeUtil.getId());
+                wbsTreePrivate.setCreateTime(new Date());
+                String nodeName = wbsTreePrivates.get(0).getNodeName();
+                if (nodeName.contains("__")) {
+                    String[] oldName = nodeName.split("__");
+                    nodeName = oldName[0] + "__" + (Integer.parseInt(oldName[1]) + 1);
+                } else {
+                    nodeName = nodeName + "__" + 1;
+                }
+                wbsTreePrivate.setNodeName(nodeName);
+                wbsTreePrivate.setTrialTabContractId(contractId); //试验表绑定当前合同段
+
+                //新增
+                wbsTreePrivateClient.saveObj(wbsTreePrivate);
+                return R.success("复制成功");
+            }
+        } else {
+            //编辑复制 复制数据 附件文件
+            if (wbsTreePrivateClient.copyBussTab(pKeyId, id, contractId)) {
+                return R.success("复制成功");
+            }
+        }
+
+        return R.fail("复制失败");
     }
 
-    @PostMapping("/self/remove-buss-tabInfo")
+    @PostMapping("/self/remove-buss-tab")
     @ApiOperationSupport(order = 16)
     @ApiOperation(value = "自检删除复制的表", notes = "传入节点pKeyId")
     public R<Object> removeBussTabInfo(@RequestParam Long pKeyId) {
@@ -348,10 +375,18 @@ public class TrialDetectionController extends BladeController {
     }
 
     @PostMapping("/self/record-sample/getData")
+    @ApiOperationSupport(order = 26)
+    @ApiOperation(value = "获取关联取样当前节点下所有表中对应的Data与Key", notes = "传入试验树节点nodePKeyId、合同段contractId、样品sampleIds")
+    public R<List<Map<String, String>>> getRecordSampleData(String nodePKeyId, String contractId, String sampleIds) {
+        List<Map<String, String>> result = iTrialDetectionDataService.getRecordSampleData(nodePKeyId, contractId, sampleIds);
+        return R.data(result);
+    }
+
+    @PostMapping("/self/record-projectPosition/getData")
     @ApiOperationSupport(order = 27)
-    @ApiOperation(value = "获取关联取样信息对应在表中的Data与Key", notes = "传入tabPKeyId、样品sampleIds")
-    public R<Map<String, String>> getRecordSampleData(String tabPKeyId, String sampleIds) {
-        Map<String, String> result = iTrialDetectionDataService.getRecordSampleData(tabPKeyId, sampleIds);
+    @ApiOperation(value = "获取工程部位信息当前节点下所有表中对应的Data与Key", notes = "传入试验树节点nodePKeyId、合同段contractId、工程部位信息的工序节点projectPositionIds")
+    public R<List<Map<String, String>>> getProjectPositionData(String nodePKeyId, String contractId, String projectPositionIds) {
+        List<Map<String, String>> result = iTrialDetectionDataService.getProjectPositionData(nodePKeyId, contractId, projectPositionIds);
         return R.data(result);
     }
 

+ 4 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -148,6 +148,8 @@
                    ELSE 1 END AS colorStatus
         from (
                  SELECT
+                     wtc.sort,
+                     wtc.create_time,
                      wtc.is_concealed_works_node AS "isConcealedWorksNode",
                      wtc.p_key_id AS primaryKeyId,
                      wtc.id,
@@ -178,8 +180,8 @@
         AND wtc.node_type != 111
         AND wtc.parent_id = #{parentId}
         AND wtc.contract_id = #{contractId}
-        ORDER BY wtc.sort,wtc.create_time
-		) c
+        -- ORDER BY wtc.sort,wtc.create_time
+		) c ORDER BY c.sort,c.create_time
     </select>
 
 

+ 4 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialDetectionDataService.java

@@ -7,6 +7,7 @@ import org.springblade.business.entity.TrialDetectionData;
 import org.springblade.business.vo.TrialDetectionDataVO;
 import org.springblade.core.mp.base.BaseService;
 
+import java.util.List;
 import java.util.Map;
 
 public interface ITrialDetectionDataService extends BaseService<TrialDetectionData> {
@@ -19,6 +20,8 @@ public interface ITrialDetectionDataService extends BaseService<TrialDetectionDa
 
     boolean dataCopy(TrialDetectionDataDTO dto);
 
-    Map<String, String> getRecordSampleData(String tabPKeyId,String sampleIds);
+    List<Map<String, String>> getRecordSampleData(String nodePKeyId, String contractId, String sampleIds);
+
+    List<Map<String, String>> getProjectPositionData(String nodePKeyId, String contractId, String projectPositionIds);
 
 }

+ 119 - 60
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDetectionDataServiceImpl.java

@@ -25,6 +25,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.utils.PageUtil;
 import org.springblade.core.tool.utils.*;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -32,10 +33,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -156,78 +154,139 @@ public class TrialDetectionDataServiceImpl extends BaseServiceImpl<TrialDetectio
     }
 
     @Override
-    public Map<String, String> getRecordSampleData(String tabPKeyId, String sampleIds) {
-        Map<String, String> resultMap = new HashMap<>();
-        //获取表中的数据信息Data、以及对应的Key值
-        WbsTreePrivate wbsTreePrivate = jdbcTemplate.query("select init_table_name,html_url,p_key_id from m_wbs_tree_private where p_key_id =" + tabPKeyId, new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
-        if (wbsTreePrivate == null) {
-            return null;
-        }
-        if (wbsTreePrivate.getHtmlUrl() == null) {
+    public List<Map<String, String>> getRecordSampleData(String nodePKeyId, String contractId, String sampleIds) {
+        if (StringUtils.isEmpty(sampleIds)) {
             return null;
         }
+        //获取关联的样品信息
+        List<TrialSampleInfo> trialSampleInfoList = jdbcTemplate.query("select material_name,specification_number,sample_description,material_count from u_trial_sample_info where id in(" + sampleIds + ")", new BeanPropertyRowMapper<>(TrialSampleInfo.class));
+        List<String> names = trialSampleInfoList.stream().map(TrialSampleInfo::getMaterialName).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
+        List<String> numbers = trialSampleInfoList.stream().map(TrialSampleInfo::getSpecificationNumber).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
+        List<String> descriptions = trialSampleInfoList.stream().map(TrialSampleInfo::getSampleDescription).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
+        List<Integer> counts = trialSampleInfoList.stream().map(TrialSampleInfo::getMaterialCount).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
+
+        List<Map<String, String>> resultMapList = new ArrayList<>();
 
-        // 匹配关联
-        try {
-            File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
-            String htmlString = IoUtil.readToString(new FileInputStream(file1));
-            Document doc = Jsoup.parse(htmlString);
-            Elements ypName = doc.select("el-input[placeholder~=样品名称.*]");
-            Elements ypNumber = doc.select("el-input[placeholder~=样品编号.*]");
-            Elements ypCount = doc.select("el-input[placeholder~=样品数量.*]");
-            Elements ypMs = doc.select("el-input[placeholder~=样品描述.*]");
-
-            //获取样品信息
-            if (StringUtils.isNotEmpty(sampleIds)) {
-                List<TrialSampleInfo> trialSampleInfoList = jdbcTemplate.query("select material_name,specification_number,sample_description,material_count from u_trial_sample_info where id in(" + sampleIds + ")", new BeanPropertyRowMapper<>(TrialSampleInfo.class));
-                List<String> names = trialSampleInfoList.stream().map(TrialSampleInfo::getMaterialName).collect(Collectors.toList());
-                List<String> numbers = trialSampleInfoList.stream().map(TrialSampleInfo::getSpecificationNumber).collect(Collectors.toList());
-                List<String> descriptions = trialSampleInfoList.stream().map(TrialSampleInfo::getSampleDescription).collect(Collectors.toList());
-                List<Integer> counts = trialSampleInfoList.stream().map(TrialSampleInfo::getMaterialCount).collect(Collectors.toList());
-
-                //样品名称
-                if (ypName.size() >= 1) {
-                    for (Element element : ypName) {
-                        int trIndex = Integer.parseInt(element.attr("trindex"));
-                        if (trIndex <= 6) {
-                            resultMap.put(element.attr("keyName"), ObjectUtils.isNotEmpty(names) ? StringUtils.join(names, "、") : "");
+        //获取当前合同段下的试验节点下的表
+        WbsTreePrivate trialNode = jdbcTemplate.query("select * from m_wbs_tree_private where p_key_id =" + nodePKeyId, new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
+        if (trialNode != null) {
+            List<WbsTreePrivate> trialNodeTabs = jdbcTemplate.query("select p_key_id,html_url from m_wbs_tree_private where html_url is not null and is_deleted = 0 and status = 1 and type = 2 and parent_id =" + trialNode.getId() + " and project_id =" + trialNode.getProjectId() + " and wbs_id = " + trialNode.getWbsId() + " and wbs_type = " + trialNode.getWbsType() + " and (trial_tab_contract_id is null OR (trial_tab_contract_id = " + contractId + "))", new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+            for (WbsTreePrivate trialNodeTab : trialNodeTabs) {
+                // 匹配关联
+                try {
+                    Map<String, String> map = new HashMap<>();
+                    File file1 = ResourceUtil.getFile(trialNodeTab.getHtmlUrl());
+                    String htmlString = IoUtil.readToString(new FileInputStream(file1));
+                    Document doc = Jsoup.parse(htmlString);
+                    Elements ypName = doc.select("el-input[placeholder~=样品名称.*]");
+                    Elements ypNumber = doc.select("el-input[placeholder~=样品编号.*]");
+                    Elements ypCount = doc.select("el-input[placeholder~=样品数量.*]");
+                    Elements ypMs = doc.select("el-input[placeholder~=样品描述.*]");
+
+                    //样品名称
+                    if (ypName.size() >= 1) {
+                        for (Element element : ypName) {
+                            int trIndex = Integer.parseInt(element.attr("trindex"));
+                            if (trIndex <= 6) {
+                                map.put(element.attr("keyName"), ObjectUtils.isNotEmpty(names) ? StringUtils.join(names, "、") : "");
+                            }
                         }
                     }
-                }
-                //样品编号
-                if (ypNumber.size() >= 1) {
-                    for (Element element : ypNumber) {
-                        int trIndex = Integer.parseInt(element.attr("trindex"));
-                        if (trIndex <= 6) {
-                            resultMap.put(element.attr("keyName"), ObjectUtils.isNotEmpty(numbers) ? StringUtils.join(numbers, "、") : "");
+                    //样品编号
+                    if (ypNumber.size() >= 1) {
+                        for (Element element : ypNumber) {
+                            int trIndex = Integer.parseInt(element.attr("trindex"));
+                            if (trIndex <= 6) {
+                                map.put(element.attr("keyName"), ObjectUtils.isNotEmpty(numbers) ? StringUtils.join(numbers, "、") : "");
+                            }
                         }
                     }
+                    //样品数量
+                    if (ypCount.size() >= 1) {
+                        for (Element element : ypCount) {
+                            int trIndex = Integer.parseInt(element.attr("trindex"));
+                            if (trIndex <= 6) {
+                                map.put(element.attr("keyName"), ObjectUtils.isNotEmpty(counts) ? counts.stream().reduce(Integer::sum).orElse(0).toString() : "");
+                            }
+                        }
+                    }
+                    //样品描述
+                    if (ypMs.size() >= 1) {
+                        for (Element element : ypMs) {
+                            int trIndex = Integer.parseInt(element.attr("trindex"));
+                            if (trIndex <= 6) {
+                                map.put(element.attr("keyName"), ObjectUtils.isNotEmpty(descriptions) ? StringUtils.join(descriptions, "、") : "");
+                            }
+                        }
+                    }
+
+                    map.put("tabPKeyId", trialNodeTab.getPKeyId().toString());
+                    if (map.size() > 1) {
+                        resultMapList.add(map);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
                 }
-                //样品数量
-                if (ypCount.size() >= 1) {
-                    for (Element element : ypCount) {
-                        int trIndex = Integer.parseInt(element.attr("trindex"));
-                        if (trIndex <= 6) {
-                            resultMap.put(element.attr("keyName"), ObjectUtils.isNotEmpty(counts) ? counts.stream().reduce(Integer::sum).orElse(0).toString() : "");
+            }
+        }
+        return resultMapList;
+    }
+
+    @Override
+    public List<Map<String, String>> getProjectPositionData(String nodePKeyId, String contractId, String projectPositionIds) {
+        if (StringUtils.isEmpty(projectPositionIds)) {
+            return null;
+        }
+        //拼接工程部位names 单位、分部、分项
+        List<WbsTreeContract> query = jdbcTemplate.query("select node_name,node_type,id,ancestors from m_wbs_tree_contract where node_type is not null and p_key_id in(" + projectPositionIds + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+        List<WbsTreeContract> dw = query.stream().filter(f -> f.getNodeType().equals(1)).collect(Collectors.toList());
+        List<WbsTreeContract> fb = query.stream().filter(f -> f.getNodeType().equals(2)).collect(Collectors.toList());
+        List<WbsTreeContract> fx = query.stream().filter(f -> f.getNodeType().equals(4)).collect(Collectors.toList());
+        Set<String> set = new HashSet<>();
+        for (WbsTreeContract fxNode : fx) {
+            for (WbsTreeContract fbNode : fb) {
+                if (fxNode.getAncestors().contains(fbNode.getId().toString())) {
+                    for (WbsTreeContract dwNode : dw) {
+                        if (fbNode.getAncestors().contains(dwNode.getId().toString())) {
+                            set.add(dwNode.getNodeName() + "/" + fbNode.getNodeName() + "/" + fxNode.getNodeName());
                         }
                     }
                 }
-                //样品描述
-                if (ypMs.size() >= 1) {
-                    for (Element element : ypMs) {
-                        int trIndex = Integer.parseInt(element.attr("trindex"));
-                        if (trIndex <= 6) {
-                            resultMap.put(element.attr("keyName"), ObjectUtils.isNotEmpty(descriptions) ? StringUtils.join(descriptions, "、") : "");
+            }
+        }
+        if (set.size() > 0) {
+            List<Map<String, String>> resultMapList = new ArrayList<>();
+            //获取当前合同段下的试验节点下的表
+            WbsTreePrivate trialNode = jdbcTemplate.query("select * from m_wbs_tree_private where p_key_id =" + nodePKeyId, new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
+            if (trialNode != null) {
+                List<WbsTreePrivate> trialNodeTabs = jdbcTemplate.query("select p_key_id,html_url from m_wbs_tree_private where html_url is not null and is_deleted = 0 and status = 1 and type = 2 and parent_id =" + trialNode.getId() + " and project_id =" + trialNode.getProjectId() + " and wbs_id = " + trialNode.getWbsId() + " and wbs_type = " + trialNode.getWbsType() + " and (trial_tab_contract_id is null OR (trial_tab_contract_id = " + contractId + "))", new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+                for (WbsTreePrivate trialNodeTab : trialNodeTabs) {
+                    //匹配关联
+                    try {
+                        Map<String, String> map = new HashMap<>();
+                        File file1 = ResourceUtil.getFile(trialNodeTab.getHtmlUrl());
+                        String htmlString = IoUtil.readToString(new FileInputStream(file1));
+                        Document doc = Jsoup.parse(htmlString);
+                        Elements ppName = doc.select("el-input[placeholder~=工程部位.*]");
+                        //工程部位
+                        if (ppName.size() >= 1) {
+                            for (Element element : ppName) {
+                                int trIndex = Integer.parseInt(element.attr("trindex"));
+                                if (trIndex <= 6) {
+                                    map.put("tabPKeyId", trialNodeTab.getPKeyId().toString());
+                                    map.put(element.attr("keyName"), StringUtils.join(set, "、"));
+                                    resultMapList.add(map);
+                                }
+                            }
                         }
+                    } catch (Exception e) {
+                        e.printStackTrace();
                     }
                 }
-
             }
-        } catch (Exception e) {
-            e.printStackTrace();
+            return resultMapList;
         }
-
-        return resultMap;
+        return null;
     }
 
 }

+ 14 - 10
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -934,33 +934,37 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
                     .isNotNull(TrialSampleInfo::getSpecificationModel)
                     .in(TrialSampleInfo::getId, ids));
             List<String> samplingLocations = trialSampleInfos.stream().map(TrialSampleInfo::getSamplingLocation).collect(Collectors.toList());
-            String samplingLocation = samplingLocations.stream().findAny().orElse(null);
+            /*String samplingLocation = samplingLocations.stream().findAny().orElse(null);
             if (samplingLocations.size() > 1 && StringUtils.isNotEmpty(samplingLocation)) {
                 samplingLocation = samplingLocation + "等" + samplingLocations.size() + "个取样地点";
-            }
+            }*/
+            String samplingLocation = org.apache.commons.lang.StringUtils.join(samplingLocations, "、");
 
-            List<String> supplierUnits = trialSampleInfos.stream().map(TrialSampleInfo::getSupplierUnit).collect(Collectors.toList());
-            String supplierUnit = supplierUnits.stream().findAny().orElse(null);
+            List<String> calculationUnits = trialSampleInfos.stream().map(TrialSampleInfo::getCalculationUnit).collect(Collectors.toList());
+            /*String supplierUnit = supplierUnits.stream().findAny().orElse(null);
             if (supplierUnits.size() > 1 && StringUtils.isNotEmpty(supplierUnit)) {
                 supplierUnit = supplierUnit + "等" + supplierUnits.size() + "个单位";
-            }
+            }*/
+            String calculationUnit = org.apache.commons.lang.StringUtils.join(calculationUnits, "、");
 
             List<String> specificationNumbers = trialSampleInfos.stream().map(TrialSampleInfo::getSpecificationNumber).collect(Collectors.toList());
-            String specificationNumber = supplierUnits.stream().findAny().orElse(null);
+            /*String specificationNumber = supplierUnits.stream().findAny().orElse(null);
             if (specificationNumbers.size() > 1 && StringUtils.isNotEmpty(specificationNumber)) {
                 specificationNumber = specificationNumber + "等" + specificationNumbers.size() + "个样品编号";
-            }
+            }*/
+            String specificationNumber = org.apache.commons.lang.StringUtils.join(specificationNumbers, "、");
 
             List<String> specificationModels = trialSampleInfos.stream().map(TrialSampleInfo::getSpecificationModel).collect(Collectors.toList());
-            String specificationModel = supplierUnits.stream().findAny().orElse(null);
+            /*String specificationModel = supplierUnits.stream().findAny().orElse(null);
             if (specificationModels.size() > 1 && StringUtils.isNotEmpty(specificationModel)) {
                 specificationModel = specificationModel + "等" + specificationModels.size() + "个规格类型";
-            }
+            }*/
+            String specificationModel = org.apache.commons.lang.StringUtils.join(specificationModels, "、");
 
             //更新
             this.update(Wrappers.<TrialSelfInspectionRecord>lambdaUpdate()
                     .set(TrialSelfInspectionRecord::getSamplingLocation, samplingLocation)
-                    .set(TrialSelfInspectionRecord::getCompany, supplierUnit)
+                    .set(TrialSelfInspectionRecord::getCompany, calculationUnit)
                     .set(TrialSelfInspectionRecord::getSpecificationNumber, specificationNumber)
                     .set(TrialSelfInspectionRecord::getSpecificationModel, specificationModel)
                     .eq(TrialSelfInspectionRecord::getId, dto.getId())

+ 31 - 23
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1348,7 +1348,7 @@ public class ExcelTabController extends BladeController {
             @ApiImplicitParam(name = "pkeyId", value = "pkeyId", required = true)
     })
     public R getBussDataInfo(Long pkeyId) throws FileNotFoundException {
-        return excelTabService.getBussDataInfo(pkeyId,0);
+        return excelTabService.getBussDataInfo(pkeyId, 0);
     }
 
 
@@ -1384,7 +1384,7 @@ public class ExcelTabController extends BladeController {
 
         long newPkId = SnowFlakeUtil.getId();
         WbsTreeContract wbsTreeContract = new WbsTreeContract();
-        BeanUtil.copy(wbsInfo,wbsTreeContract);
+        BeanUtil.copy(wbsInfo, wbsTreeContract);
         wbsTreeContract.setPKeyId(newPkId);
         wbsTreeContract.setCreateTime(new Date());
         wbsTreeContract.setTabGroupId(tabGroupId);
@@ -1414,7 +1414,7 @@ public class ExcelTabController extends BladeController {
         String querySql = "insert into " + tabName + " (id,p_key_id," + colkeys + ") select '" + newPkId + "','" + newPkId + "'," + colkeys + " from " + tabName + " where p_key_id=" + pkeyId;
         jdbcTemplate.execute(querySql);
         wbsTreeContractService.save(wbsTreeContract);
-        for(WbsTreeContract wbsTreeCont:wbsTreeContractList2){
+        for (WbsTreeContract wbsTreeCont : wbsTreeContractList2) {
 
             UpdateWrapper<WbsTreeContract> updateWrapper = new UpdateWrapper<>();
             updateWrapper.in("p_key_id", wbsTreeCont.getPKeyId() + "");
@@ -1646,25 +1646,32 @@ public class ExcelTabController extends BladeController {
        */
         /*全加载,或者可以优化成依赖加载*/
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
-        if(tableInfoList!=null){
+        if (tableInfoList != null) {
             List<AppWbsTreeContractVO> tableAll = wbsTreeContractService.searchNodeAllTable(nodeid, "1", contractId, projectId);
-            List<Long> tableAllIds=tableAll.stream().map(AppWbsTreeContractVO::getPKeyId).collect(Collectors.toList());
-            if(tableAll.size()>tableInfoList.size()){
-                List<Long> exclude=tableInfoList.stream().map(TableInfo::getPkeyId).map(Long::parseLong).collect(Collectors.toList());
-                JSONArray extra =new JSONArray();
-                for(Long pk:tableAllIds){
-                    if(!exclude.contains(pk)) {
+            List<Long> tableAllIds = tableAll.stream().map(AppWbsTreeContractVO::getPKeyId).collect(Collectors.toList());
+            if (tableAll.size() > tableInfoList.size()) {
+                List<Long> exclude = tableInfoList.stream().map(TableInfo::getPkeyId).map(Long::parseLong).collect(Collectors.toList());
+                JSONArray extra = new JSONArray();
+                for (Long pk : tableAllIds) {
+                    if (!exclude.contains(pk)) {
                         R bussDataInfo = this.excelTabService.getBussDataInfo(pk, 1);
-                        Map<String, Object>  jo = (Map<String, Object>) bussDataInfo.getData();
-                        jo.put("pkeyId",pk);
+                        Map<String, Object> jo = (Map<String, Object>) bussDataInfo.getData();
+                        jo.put("pkeyId", pk);
                         extra.add(jo);
                     }
                 }
                 List<TableInfo> tableInfoExtra = this.excelTabService.getTableInfoList(extra);
                 /*默认额外加载的默认不更新,除非有元素数据变动*/
-                tableInfoExtra.removeIf(e->e.getPkeyId()==null);
-                TableInfo example=tableInfoList.get(0);
-                tableInfoExtra.forEach(e->{e.setToBeUpdated(false);e.setBusinessId(null);e.setContractId(example.getContractId());e.setClassify(example.getClassify());e.setProjectId(example.getProjectId());e.setGroupId(example.getGroupId());});
+                tableInfoExtra.removeIf(e -> e.getPkeyId() == null);
+                TableInfo example = tableInfoList.get(0);
+                tableInfoExtra.forEach(e -> {
+                    e.setToBeUpdated(false);
+                    e.setBusinessId(null);
+                    e.setContractId(example.getContractId());
+                    e.setClassify(example.getClassify());
+                    e.setProjectId(example.getProjectId());
+                    e.setGroupId(example.getGroupId());
+                });
                 tableInfoList.addAll(tableInfoExtra);
                 tableInfoList.sort(Comparator.comparingInt(a -> tableAllIds.indexOf(Long.parseLong(a.getPkeyId()))));
             }
@@ -1718,7 +1725,7 @@ public class ExcelTabController extends BladeController {
     }
 
     /**
-     *  删除模板
+     * 删除模板
      */
     @PostMapping("/delete-template")
     @ApiOperationSupport(order = 5)
@@ -1729,13 +1736,13 @@ public class ExcelTabController extends BladeController {
             return R.fail("请上传清表");
         }
         return R.status(excelTabService.update(new LambdaUpdateWrapper<ExcelTab>()
-                .set(ExcelTab::getTemplateExtension,null)
-                .set(ExcelTab::getTemplateFileUrl,null)
-                .eq(ExcelTab::getId,excelTab.getId())));
+                .set(ExcelTab::getTemplateExtension, null)
+                .set(ExcelTab::getTemplateFileUrl, null)
+                .eq(ExcelTab::getId, excelTab.getId())));
     }
 
     /**
-     *  模版下载
+     * 模版下载
      */
     @GetMapping("/down-template-file")
     @ApiOperationSupport(order = 31)
@@ -2855,10 +2862,11 @@ public class ExcelTabController extends BladeController {
     @ApiOperation(value = "获取试验用户保存数据", notes = "获取试验用户保存数据")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "pkeyId", value = "表id", required = true),
-            @ApiImplicitParam(name = "id", value = "记录id-当做groupId", required = true)
+            @ApiImplicitParam(name = "id", value = "记录id-当做groupId", required = true),
+            @ApiImplicitParam(name = "contractId", value = "合同段id", required = true)
     })
-    public R<List<Map<String, Object>>> getBussDataInfoTrial(Long id, Long pkeyId) {
-        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrial(id, pkeyId);
+    public R<List<Map<String, Object>>> getBussDataInfoTrial(Long id, Long pkeyId, Long contractId) {
+        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrial(id, pkeyId, contractId);
         return R.data(bussDataInfoTrial);
     }
 

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

@@ -629,13 +629,13 @@ public class WbsTreePrivateController extends BladeController {
             if ((new Integer(1).equals(isAdd)) && ObjectUtil.isEmpty(id)) {
                 //按钮状态
                 treePrivate.setPdfUrl(null);
-                //treePrivate.setIsBussShow(1); //新增时通过项目wbs表的isBussShow字段单独控制
+                treePrivate.setIsBussShow(ObjectUtil.isNotEmpty(treePrivate.getIsBussShow()) ? treePrivate.getIsBussShow() : 1); //新增时通过项目wbs表的isBussShow字段单独控制
                 treePrivate.setIsTabPdf(1);
                 treePrivate.setTabFileType(1);
             }
 
             //试验编辑
-            if (ObjectUtil.isNotEmpty(id)) {
+            else if (ObjectUtil.isNotEmpty(id)) {
                 //获取当前试验记录信息中表的按钮状态
                 String sql = "select tab_id,is_buss_show,is_tab_pdf,is_tab_file_type from u_trial_self_data_record where record_id = " + id;
                 Map<Long, TrialSelfDataRecord> map = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TrialSelfDataRecord.class)).stream().collect(Collectors.toMap(TrialSelfDataRecord::getTabId, Function.identity()));
@@ -648,13 +648,13 @@ public class WbsTreePrivateController extends BladeController {
                     treePrivate.setTabFileType(record.getIsTabFileType());
                 } else {
                     treePrivate.setPdfUrl(null);
-                    //treePrivate.setIsBussShow(1); //没有记录的就根据项目wbs表的isBussShow字段单独控制
+                    treePrivate.setIsBussShow(ObjectUtil.isNotEmpty(treePrivate.getIsBussShow()) ? treePrivate.getIsBussShow() : 1); //没有记录的就根据项目wbs表的isBussShow字段单独控制
                     treePrivate.setIsTabPdf(1);
                     treePrivate.setTabFileType(1);
                 }
 
                 //表单数据
-                List<Map<String, Object>> bussDataInfoTrial = iExcelTabService.getBussDataInfoTrial(id, treePrivate.getPKeyId());
+                List<Map<String, Object>> bussDataInfoTrial = iExcelTabService.getBussDataInfoTrial(id, treePrivate.getPKeyId(), Long.parseLong(contractId));
                 if (bussDataInfoTrial != null && bussDataInfoTrial.size() > 0) {
                     bussDataInfoTrial.get(0).remove("group_id");
                     treePrivate.setBussDataInfoTrial(bussDataInfoTrial.get(0));

+ 85 - 78
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java

@@ -9,6 +9,7 @@ import com.mixsmart.utils.StringUtils;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
@@ -70,96 +71,97 @@ public class WbsTreePrivateClientImpl implements WbsTreePrivateClient {
     }
 
     @Override
-    public boolean copyBussTab(Long pKeyId, Long id) {
-        WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, pKeyId));
-        List<WbsTreePrivate> wbsTreePrivateList = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getId, wbsTreePrivate.getId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getWbsType, wbsTreePrivate.getWbsType()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getParentId, wbsTreePrivate.getParentId()));
-        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateList.stream().sorted(Comparator.comparing(WbsTreePrivate::getCreateTime).reversed()).collect(Collectors.toList());
-        long newPkId = SnowFlakeUtil.getId();
-        wbsTreePrivate.setPKeyId(newPkId);
-        wbsTreePrivate.setCreateTime(new Date());
-        String nodeName = wbsTreePrivates.get(0).getNodeName();
-        if (nodeName.contains("__")) {
-            String[] oldName = nodeName.split("__");
-            nodeName = oldName[0] + "__" + (Integer.parseInt(oldName[1]) + 1);
-        } else {
-            nodeName = nodeName + "__" + 1;
-        }
-        wbsTreePrivate.setNodeName(nodeName);
-        String tabName = wbsTreePrivate.getInitTableName();
-
-        //字段查询 并去掉公式字段
-        /*String colkeys = "SELECT GROUP_CONCAT(e_key) as colkeys from m_wbs_tree a ,m_wbs_form_element b WHERE a.init_table_name = '" + tabName + "' and a.id=b.f_id and b.id not in(SELECT element_id from m_formula c where c.is_deleted=0) ";
-        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(colkeys);
-        colkeys = stringObjectMap.get("colkeys") + "";*/
-
-        //查询字段
-        String sql = "select COLUMN_NAME from information_schema.`COLUMNS` WHERE table_name = '" + tabName + "'";
-        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
-        List<Object> filed = new ArrayList<>();
-        for (Map<String, Object> map : maps) {
-            Object column_name = map.get("COLUMN_NAME");
-            if (!(("id").equals(column_name) || ("group_id").equals(column_name) || ("p_key_id").equals(column_name))) {
-                filed.add(column_name);
+    public boolean copyBussTab(Long pKeyId, Long id, Long contractId) {
+        if (ObjectUtils.isNotEmpty(id)) {
+            //编辑复制 复制数据 附件文件
+            WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, pKeyId));
+            List<WbsTreePrivate> wbsTreePrivateList = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getId, wbsTreePrivate.getId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getWbsType, wbsTreePrivate.getWbsType()).eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getParentId, wbsTreePrivate.getParentId()));
+            List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateList.stream().sorted(Comparator.comparing(WbsTreePrivate::getCreateTime).reversed()).collect(Collectors.toList());
+            long newPkId = SnowFlakeUtil.getId();
+            wbsTreePrivate.setPKeyId(newPkId);
+            wbsTreePrivate.setCreateTime(new Date());
+            String nodeName = wbsTreePrivates.get(0).getNodeName();
+            if (nodeName.contains("__")) {
+                String[] oldName = nodeName.split("__");
+                nodeName = oldName[0] + "__" + (Integer.parseInt(oldName[1]) + 1);
+            } else {
+                nodeName = nodeName + "__" + 1;
             }
-        }
-
-        //复制表数据
-        String querySql = "select " + org.apache.commons.lang3.StringUtils.join(filed, ",") + " from " + tabName + " where p_key_id=" + pKeyId + " and group_id = " + id;
-        List<Map<String, Object>> dataList = jdbcTemplate.queryForList(querySql);
-        if (dataList.size() >= 1) {
-            Map<String, Object> dataMap2 = dataList.get(0);
-
-            dataMap2.remove("id");
-            dataMap2.remove("p_key_id");
-            dataMap2.remove("group_id");
-
-            //sql组装
-            String sqlInfo = "";
-
-            sqlInfo = "INSERT INTO " + tabName + " ( ";
-
-            StringBuilder keyStr = new StringBuilder("id,p_key_id,group_id,");
-            StringBuilder valStr = new StringBuilder(SnowFlakeUtil.getId() + "," + wbsTreePrivate.getPKeyId() + "," + id + ",");
-
-            for (String keys : dataMap2.keySet()) {
-                if (!(dataMap2.get(keys) + "").equals("null")) {
-                    keyStr.append(keys).append(",");
-                    valStr.append("'").append(dataMap2.get(keys)).append("',");
+            wbsTreePrivate.setNodeName(nodeName);
+            wbsTreePrivate.setTrialTabContractId(contractId); //试验表绑定当前合同段
+
+            String tabName = wbsTreePrivate.getInitTableName();
+
+            //查询字段
+            String sql = "select COLUMN_NAME from information_schema.`COLUMNS` WHERE table_name = '" + tabName + "'";
+            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
+            List<Object> filed = new ArrayList<>();
+            for (Map<String, Object> map : maps) {
+                Object column_name = map.get("COLUMN_NAME");
+                if (!(("id").equals(column_name) || ("group_id").equals(column_name) || ("p_key_id").equals(column_name))) {
+                    filed.add(column_name);
                 }
             }
-            keyStr = new StringBuilder(keyStr.substring(0, keyStr.lastIndexOf(",")));
-            valStr = new StringBuilder(valStr.substring(0, valStr.lastIndexOf(",")));
 
-            sqlInfo = sqlInfo + keyStr + ") VALUES (" + valStr + ")";
+            //复制表数据
+            String querySql = "select " + org.apache.commons.lang3.StringUtils.join(filed, ",") + " from " + tabName + " where p_key_id=" + pKeyId + " and group_id = " + id;
+            List<Map<String, Object>> dataList = jdbcTemplate.queryForList(querySql);
+            if (dataList.size() >= 1) {
+                Map<String, Object> dataMap2 = dataList.get(0);
+
+                dataMap2.remove("id");
+                dataMap2.remove("p_key_id");
+                dataMap2.remove("group_id");
+
+                //sql组装
+                String sqlInfo = "";
+                sqlInfo = "INSERT INTO " + tabName + " ( ";
+                StringBuilder keyStr = new StringBuilder("id,p_key_id,group_id,");
+                StringBuilder valStr = new StringBuilder(SnowFlakeUtil.getId() + "," + wbsTreePrivate.getPKeyId() + "," + id + ",");
+                for (String keys : dataMap2.keySet()) {
+                    if (!(dataMap2.get(keys) + "").equals("null")) {
+                        keyStr.append(keys).append(",");
+                        valStr.append("'").append(dataMap2.get(keys)).append("',");
+                    }
+                }
+                keyStr = new StringBuilder(keyStr.substring(0, keyStr.lastIndexOf(",")));
+                valStr = new StringBuilder(valStr.substring(0, valStr.lastIndexOf(",")));
+                sqlInfo = sqlInfo + keyStr + ") VALUES (" + valStr + ")";
 
-            jdbcTemplate.execute(sqlInfo);
-        }
+                jdbcTemplate.execute(sqlInfo);
+            }
 
-        //复制附件文件
-        List<TableFile> oldFiles = jdbcTemplate.query("select domain_url,name,extension,type,is_deleted,domain_pdf_url,status from m_table_file where is_deleted = 0 and tab_id = '" + pKeyId + "' and trial_record_id = " + id, new BeanPropertyRowMapper<>(TableFile.class));
-        List<TableFile> newFiles = new ArrayList<>();
-        for (TableFile oldFile : oldFiles) {
-            TableFile obj = BeanUtil.copyProperties(oldFile, TableFile.class);
-            if (obj != null) {
-                obj.setId(SnowFlakeUtil.getId());
-                obj.setTabId(newPkId + ""); //新表pKeyId
-                obj.setTrialRecordId(id);
-                newFiles.add(obj);
+            //复制附件文件
+            List<TableFile> oldFiles = jdbcTemplate.query("select domain_url,name,extension,type,is_deleted,domain_pdf_url,status from m_table_file where is_deleted = 0 and tab_id = '" + pKeyId + "' and trial_record_id = " + id, new BeanPropertyRowMapper<>(TableFile.class));
+            List<TableFile> newFiles = new ArrayList<>();
+            for (TableFile oldFile : oldFiles) {
+                TableFile obj = BeanUtil.copyProperties(oldFile, TableFile.class);
+                if (obj != null) {
+                    obj.setId(SnowFlakeUtil.getId());
+                    obj.setTabId(newPkId + ""); //新表pKeyId
+                    obj.setTrialRecordId(id);
+                    newFiles.add(obj);
+                }
+            }
+            boolean result = tableFileClient.saveBatch(newFiles);
+            if (result) {
+                wbsTreePrivateService.save(wbsTreePrivate);
+                return true;
             }
-        }
-        boolean result = tableFileClient.saveBatch(newFiles);
-        if (result) {
-            wbsTreePrivateService.save(wbsTreePrivate);
-            return true;
         }
         return false;
     }
 
     @Override
     public boolean removeBussTabInfoById(Long pKeyId) {
-        String sql = "delete from m_wbs_tree_private where p_key_id = '" + pKeyId + "'";
-        jdbcTemplate.execute(sql);
-        return true;
+        //查询当前表是否已经填报
+        List<TrialSelfDataRecord> query = jdbcTemplate.query("select id from u_trial_self_data_record where tab_id = " + pKeyId, new BeanPropertyRowMapper<>(TrialSelfDataRecord.class));
+        if (query.size() > 0) {
+            throw new ServiceException("当前表在试验记录中有填报数据,删除失败");
+        } else {
+            jdbcTemplate.execute("delete from m_wbs_tree_private where p_key_id = " + pKeyId);
+            return true;
+        }
     }
 
     @Override
@@ -211,7 +213,12 @@ public class WbsTreePrivateClientImpl implements WbsTreePrivateClient {
 
     @Override
     public List<Map<String, Object>> getTrialDataInfo(String pKeyId, Long id) {
-        return excelTabServiceImpl.getBussDataInfoTrial(id, Long.parseLong(pKeyId));
+        return excelTabServiceImpl.getBussDataInfoTrial(id, Long.parseLong(pKeyId), null);
+    }
+
+    @Override
+    public void saveObj(WbsTreePrivate wbsTreePrivate) {
+        wbsTreePrivateService.save(wbsTreePrivate);
     }
 
     private void foreachSetChildList(List<WbsTreeContractTreeVOS> vosResult, List<WbsTreePrivateVO> voList) {

+ 5 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java

@@ -16,7 +16,9 @@ public interface WbsTreePrivateMapper extends EasyBaseMapper<WbsTreePrivate> {
     List<WbsTreePrivate> selectAll(Integer wbsType);
 
     List<WbsTreePrivateVO> tree(@Param("wbsId") String wbsId, @Param("projectId") String projectId, @Param("wbsType") Integer wbsType);
+
     List<WbsTreeVO2> tree2(@Param("wbsId") String wbsId, @Param("projectId") String projectId, @Param("wbsType") Integer wbsType);
+
     List<WbsTreePrivate> selectByCondition(@Param("id") String id, @Param("wbsId") String wbsId, @Param("projectId") String projectId);
 
     void deleteByCondition(String id, String wbsId, String projectId);
@@ -81,14 +83,14 @@ public interface WbsTreePrivateMapper extends EasyBaseMapper<WbsTreePrivate> {
 
     List<WbsNodeTableVO> selectNodeTabAndParamList(String id, String wbsId, String projectId);
 
-    void delTabProjectById(String pKeyId,String projectId);
+    void delTabProjectById(String pKeyId, String projectId);
 
-    List<WbsTreePrivateVO4> selectWbsTreeContractList(List<String> roleAndTabOwners, String tableType, String projectId, String wbsId, Long parentId, List<String> tableOwnerList);
+    List<WbsTreePrivateVO4> selectWbsTreeTrialTabList(List<String> roleAndTabOwners, String tableType, String projectId, String wbsId, Long parentId, List<String> tableOwnerList, String contractId);
 
     //删除表单信息
     void delTableById(String pKeyId);
 
     List<TableInfo> selectTabInfoAll();
 
-    void updateBatchByPKeyId(@Param("list")List<WbsTreePrivate> wbsTreePrivateList);
+    void updateBatchByPKeyId(@Param("list") List<WbsTreePrivate> wbsTreePrivateList);
 }

+ 22 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -36,6 +36,7 @@
         <result column="is_link_table" property="isLinkTable"/>
         <result column="import_matching_info" property="importMatchingInfo"/>
         <result column="tab_file_type" property="tabFileType"/>
+        <result column="trial_tab_contract_id" property="trialTabContractId"/>
     </resultMap>
 
     <resultMap id="resultMap2" type="org.springblade.manager.vo.WbsTreePrivateVO2">
@@ -478,6 +479,7 @@
           AND wt.parent_id = #{id}
           AND wt.wbs_id = #{wbsId}
           AND wt.project_id = #{projectId}
+          AND wt.trial_tab_contract_id is null
         ORDER BY wt.sort, wt.node_name, wt.create_time
     </select>
     <select id="getByCondition" resultType="org.springblade.manager.entity.WbsTreePrivate">
@@ -693,7 +695,7 @@
 
     </select>
 
-    <select id="selectWbsTreeContractList" resultType="org.springblade.manager.vo.WbsTreePrivateVO4">
+    <select id="selectWbsTreeTrialTabList" resultType="org.springblade.manager.vo.WbsTreePrivateVO4">
         SELECT
             p_key_id,
             node_name,
@@ -715,26 +717,36 @@
             fill_rate,
             pdf_url,
             sort,
-            create_time
+            create_time,
+            (CASE WHEN locate('__',node_name) > 0 THEN 1 ELSE 0 END) AS isCopyTab
         FROM
-        m_wbs_tree_private
+            m_wbs_tree_private
         WHERE project_id = #{projectId}
-        AND wbs_id = #{wbsId}
-        AND parent_id = #{parentId}
-        AND table_type = #{tableType}
-        AND table_owner in
+            AND wbs_id = #{wbsId}
+            AND parent_id = #{parentId}
+            AND table_type = #{tableType}
+            AND table_owner in
         <foreach item="roleAndTabOwners" collection="roleAndTabOwners" open="(" close=")" separator=",">
             #{roleAndTabOwners}
         </foreach>
-        AND type = 2
-        AND status = 1
-        AND is_deleted = 0
+            AND type = 2
+            AND status = 1
+            AND is_deleted = 0
         <if test="tableOwnerList != null and tableOwnerList!= ''">
             AND table_owner in
             <foreach item="tableOwnerList" collection="tableOwnerList" open="(" close=")" separator=",">
                 #{tableOwnerList}
             </foreach>
         </if>
+        /*解决不同合同段中复制表问题*/
+        <if test="contractId == null">
+            -- 后管加载原始表
+            and trial_tab_contract_id is null
+        </if>
+        <if test="contractId != null and contractId != ''">
+            -- 客户端加载当前合同段表+原始表
+            and (trial_tab_contract_id is null OR (trial_tab_contract_id = #{contractId}))
+        </if>
         ORDER BY sort,node_name,create_time
     </select>
 

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

@@ -129,7 +129,7 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     /**
      * 获取试验用户端 单个表单接口数据
      */
-    List<Map<String, Object>> getBussDataInfoTrial(Long id, Long pkeyId);
+    List<Map<String, Object>> getBussDataInfoTrial(Long id, Long pkeyId,Long contractId);
 
     /**
      * 获取试验用户端 单个表单接口数据 - 关联施工

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

@@ -336,7 +336,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             /*每次都是部分表单提交,保证跨节点跨表取数正常,其次是反向依赖的被动刷新*/
             List<AppWbsTreeContractVO> tableAll = wbsTreeContractService.searchNodeAllTable(nodeId.toString(), "1", tableInfoList.get(0).getContractId(), tableInfoList.get(0).getProjectId());
             StopWatch stopWatch = new StopWatch();
-            List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(),String.valueOf(nodeId));
+            List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(), String.valueOf(nodeId));
             if (Func.isNotEmpty(keyMappers)) {
                 Map<String, Map<String, String>> coordinateMap = new HashMap<>(keyMappers.size() * 2);
                 keyMappers.forEach(e -> {
@@ -390,7 +390,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 } else {
                     currentNode.setRelateId(wtc.getId());
                 }
-                List<Long> privateIds = this.jdbcTemplate.queryForList("select p_key_id from m_wbs_tree_private where id=" + id + " and  project_id=" + wtc.getProjectId()+" and wbs_id="+wtc.getWbsId(), Long.class);
+                List<Long> privateIds = this.jdbcTemplate.queryForList("select p_key_id from m_wbs_tree_private where id=" + id + " and  project_id=" + wtc.getProjectId() + " and wbs_id=" + wtc.getWbsId(), Long.class);
                 if (Func.isNotEmpty(privateIds)) {
                     currentNode.setPrivateId(privateIds.get(0));
                     return currentNode;
@@ -857,7 +857,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     }
 
     @Override
-    public R getBussDataInfo(Long pkeyId,int type) {
+    public R getBussDataInfo(Long pkeyId, int type) {
 
         Map<String, Object> reData = new HashMap<>();
 
@@ -1059,7 +1059,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         }
 
         // 移除Id 和 p_key_id
-        if(type==0){
+        if (type == 0) {
             reData.remove("id");
             reData.remove("p_key_id");
             reData.remove("classify");
@@ -1067,8 +1067,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             reData.remove("pkeyId");
             reData.remove("projectId");
         }
-        if(type==1){
-            reData.put("pkeyId",reData.get("p_key_id"));
+        if (type == 1) {
+            reData.put("pkeyId", reData.get("p_key_id"));
         }
         reData.put("tabGroupId", wbsTreeContract.getTabGroupId());
         return R.data(reData);
@@ -1102,7 +1102,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             return R.fail("失败");
         }
 
-        Map<String, Object> DataInfo = (Map<String, Object>) getBussDataInfo(pkeyId,0).getData();
+        Map<String, Object> DataInfo = (Map<String, Object>) getBussDataInfo(pkeyId, 0).getData();
 
         // 获取excel流 和 html流
         InputStream exceInp = CommonUtil.getOSSInputStream(excelTab.getFileUrl());
@@ -1286,7 +1286,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                 Elements tdsx = ytzData.select("td");
                                 if (Integer.parseInt(trtd[1]) < tdsx.size()) {
                                     Element data = ytzData.select("td").get(Integer.parseInt(trtd[1]));
-                                    if(data.html().indexOf("el-tooltip") >= 0){
+                                    if (data.html().indexOf("el-tooltip") >= 0) {
                                         data = data.children().get(0);
                                     }
 
@@ -1517,7 +1517,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
      * 试验 获取填报信息
      */
     @Override
-    public List<Map<String, Object>> getBussDataInfoTrial(Long groupId, Long pkeyId) {
+    public List<Map<String, Object>> getBussDataInfoTrial(Long groupId, Long pkeyId, Long contractId) {
         List<Map<String, Object>> list = new ArrayList<>();
         Map<String, Object> reData = new HashMap<>();
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
@@ -1550,6 +1550,54 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             //匹配
             Elements bgHB = doc.select("el-input[placeholder~=报告编号.*]");
             Elements jlBH = doc.select("el-input[placeholder~=记录编号.*]");
+            Elements gcName = doc.select("el-input[placeholder~=工程名称.*]");
+            Elements sgName = doc.select("el-input[placeholder~=施工单位.*]");
+            Elements wtName = doc.select("el-input[placeholder~=委托单位.*]");
+            Elements htdName = doc.select("el-input[placeholder~=合同段/工区.*]");
+
+            ContractInfo contractInfo = jdbcTemplate.query("select construction_unit_name,supervision_unit_name,contract_name from m_contract_info where id = " + contractId, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
+            if (contractInfo != null) {
+                //施工单位
+                if (sgName.size() >= 1) {
+                    for (Element element : sgName) {
+                        int trIndex = Integer.parseInt(element.attr("trindex"));
+                        if (trIndex <= 6) {
+                            reData.put(element.attr("keyName"), ObjectUtils.isNotEmpty(contractInfo.getConstructionUnitName()) ? contractInfo.getConstructionUnitName() : "");
+                        }
+                    }
+                }
+                //委托单位
+                if (wtName.size() >= 1) {
+                    for (Element element : wtName) {
+                        int trIndex = Integer.parseInt(element.attr("trindex"));
+                        if (trIndex <= 6) {
+                            reData.put(element.attr("keyName"), ObjectUtils.isNotEmpty(contractInfo.getSupervisionUnitName()) ? contractInfo.getSupervisionUnitName() : "");
+                        }
+                    }
+                }
+                //合同段/工区
+                if (htdName.size() >= 1) {
+                    for (Element element : htdName) {
+                        int trIndex = Integer.parseInt(element.attr("trindex"));
+                        if (trIndex <= 6) {
+                            reData.put(element.attr("keyName"), ObjectUtils.isNotEmpty(contractInfo.getContractName()) ? contractInfo.getContractName() : "");
+                        }
+                    }
+                }
+            }
+
+            ProjectInfo projectInfo = jdbcTemplate.query("select project_name from m_project_info where id = " + wbsTreePrivate.getProjectId(), new BeanPropertyRowMapper<>(ProjectInfo.class)).stream().findAny().orElse(null);
+            if (projectInfo != null) {
+                //工程名称
+                if (gcName.size() >= 1) {
+                    for (Element element : gcName) {
+                        int trIndex = Integer.parseInt(element.attr("trindex"));
+                        if (trIndex <= 6) {
+                            reData.put(element.attr("keyName"), ObjectUtils.isNotEmpty(projectInfo.getProjectName()) ? projectInfo.getProjectName() : "");
+                        }
+                    }
+                }
+            }
 
             TrialSelfInspectionRecord record = jdbcTemplate.query("select record_no,report_no from u_trial_self_inspection_record where id = " + groupId, new BeanPropertyRowMapper<>(TrialSelfInspectionRecord.class)).stream().findAny().orElse(null);
             if (record != null) {
@@ -1847,7 +1895,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         }
 
         //获取数据信息info
-        List<Map<String, Object>> bussDataInfoTrial = this.getBussDataInfoTrial(id, pkeyId);
+        List<Map<String, Object>> bussDataInfoTrial = this.getBussDataInfoTrial(id, pkeyId, Long.parseLong(contractId));
         Map<String, Object> DataInfo = bussDataInfoTrial.stream().findAny().orElse(null);
 
         //获取excel流 和 html流

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

@@ -1803,7 +1803,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             tableOwnerList = Func.toStrList(tableOwners);
         }
 
-        return baseMapper.selectWbsTreeContractList(roleAndTabOwners, tableType, wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId(), wbsTreePrivate.getId(), tableOwnerList);
+        return baseMapper.selectWbsTreeTrialTabList(roleAndTabOwners, tableType, wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId(), wbsTreePrivate.getId(), tableOwnerList,contractId);
     }
 
     @Override