Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master' into master

yangyj 2 gadi atpakaļ
vecāks
revīzija
0873a61d00
23 mainītis faili ar 576 papildinājumiem un 274 dzēšanām
  1. 8 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  2. 22 13
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  3. 7 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/NeiYeController.java
  4. 6 5
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  5. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java
  6. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/TaskClientImpl.java
  7. 3 3
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  8. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskMapper.java
  9. 18 2
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskMapper.xml
  10. 78 75
      blade-service/blade-business/src/main/java/org/springblade/business/service/IInformationQueryService.java
  11. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java
  12. 6 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ImageClassificationFileServiceImpl.java
  13. 45 26
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  14. 8 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  15. 69 62
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  16. 3 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  17. 8 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  18. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java
  19. 41 13
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  20. 8 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  21. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  22. 225 25
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  23. 2 28
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

+ 8 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -129,7 +129,14 @@ public interface WbsTreeContractClient {
      * @return 结果
      */
     @PostMapping(API_PREFIX + "/queryCurrentNodeAllChild")
-    List<WbsTreeContract> queryCurrentNodeAllChild(@RequestParam Long contractId, @RequestParam Long parentId);
+    List<WbsTreeContract> queryCurrentNodeAllChild(@RequestParam Long contractId, @RequestParam Long parentId);/**
+     * 获取所有子节点
+     *
+     * @param contractId 合同段ID
+     * @return 结果
+     */
+    @PostMapping(API_PREFIX + "/queryAllChild")
+    List<WbsTreeContract> queryAllChild(@RequestParam Long contractId);
 
     /**
      * 查询合同段树所有节点

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

@@ -1255,10 +1255,7 @@ public class InformationWriteQueryController extends BladeController {
         //首先查询需要复制的节点及其下级所有子节点的信息
         WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
         // 获取当前节点的所有子节点
-       String vocational = SnowFlakeUtil.getId()+"";
-        // 插入数据库
-        // informationQueryService.copeNodeData(needCopyNode.getId()+"",vocational);
-        // 修改
+        String vocational = SnowFlakeUtil.getId()+"";
         //新增施工台账
         List<WbsTreeContract>   saveList = new ArrayList<>();
         List<ConstructionLedger> saveLedger = new ArrayList<>();
@@ -1268,6 +1265,7 @@ public class InformationWriteQueryController extends BladeController {
         List<QueryProcessDataVO> nodeTabCols = informationQueryService.getNodeChildTabColsAllByNodeId(needCopyNode.getId() + "", needCopyNode.getContractId());
         // 转化为map
         Map<String, String> nodeTabColsMap = nodeTabCols.stream().collect(Collectors.toMap(QueryProcessDataVO::getQueryType, QueryProcessDataVO::getAncestors, (key1, key2) -> key2));
+        StringBuilder copeSql = new StringBuilder();
 
         if (StringUtils.isNotEmpty(vo.getNeedCopyPrimaryKeyId())) {
             WbsTreeContract parent = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getParentPrimaryKeyId());
@@ -1280,7 +1278,6 @@ public class InformationWriteQueryController extends BladeController {
                 nodeMap.put(node.getId().toString(), node);
             });
 
-            System.out.println("4="+DateUtil.formatDateTime(DateUtil.now()));
             //todo 单份复制
             nodeChildAll.forEach(node -> {
                 WbsTreeContract newData = new WbsTreeContract();
@@ -1331,10 +1328,22 @@ public class InformationWriteQueryController extends BladeController {
                     //生成施工日志
                     this.createLedger(newData, saveLedger, nodeMap, null);
                 }
+
+                // 组织复制值Sql
+                if(nodeTabColsMap!=null && node.getType()==2){
+                    String tableName = newData.getInitTableName();
+                    String col = nodeTabColsMap.get(tableName);
+                    String colVal = nodeTabColsMap.get(tableName);
+                    colVal = colVal.replaceAll("id,p_key_id,","'"+SnowFlakeUtil.getId()+"' as id,'"+newData.getPKeyId()+"' as p_key_id,");
+                    copeSql.append("insert into "+tableName+"  ("+col+") select "+colVal+" from "+tableName+" where p_key_id='"+node.getPKeyId()+"' ;");
+                }
             });
         }
+        //保存节点信息
          R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
-         jdbcTemplate.batchUpdate();
+
+        //复制数据逻辑
+         jdbcTemplate.execute(copeSql.toString());
         return booleanR;
     }
 
@@ -2298,11 +2307,7 @@ public class InformationWriteQueryController extends BladeController {
             if (queryDataResult != null && queryDataResult.size() > 0) {
                 if (StringUtils.isNotEmpty(vo.getIsFirst())) {
                     if (StringUtils.isNotEmpty(vo.getFirstTitle())){
-                        if (node.getParentId()==0) {
-                            List<TreeContractFirst> firstList = treeContractFirstService.list(new LambdaQueryWrapper<TreeContractFirst>().in(TreeContractFirst::getContractId, node.getContractId()));
-                            List<String> list = firstList.stream().map(fl -> (fl.getWbsNodeId() + "")).collect(Collectors.toList());
-                            submitNodeKeyIds.addAll(list);
-                        }
+                        queryDataResult = queryDataResult.stream().filter(qdr->"3".equals(qdr.getQueryType())).collect(Collectors.toList());
                     }else {
                         //节点主键集合
                         List<String> treeIds = queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList());
@@ -2310,10 +2315,9 @@ public class InformationWriteQueryController extends BladeController {
                         List<TreeContractFirst> firstList = treeContractFirstService.list(new LambdaQueryWrapper<TreeContractFirst>().in(TreeContractFirst::getWbsNodeId, treeIds));
                         List<String> list = firstList.stream().map(fl -> (fl.getWbsNodeId() + "")).collect(Collectors.toList());
                         queryDataResult = queryDataResult.stream().filter(qdr -> list.contains(qdr.getPrimaryKeyId())).collect(Collectors.toList());
-                        submitNodeKeyIds.addAll(queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList()));
                     }
                 }
-
+                submitNodeKeyIds.addAll(queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList()));
             }
         }
         //设置进集合中
@@ -2467,6 +2471,11 @@ public class InformationWriteQueryController extends BladeController {
         } else {
             //施工合同段
             rootTreeNode = this.informationQueryService.queryContractTree(contractId, StringUtils.isNotEmpty(parentId) ? parentId : "0", 1);
+            rootTreeNode.stream().forEach(rtn->{
+                if (rtn.getSubmitCounts() > 0L){
+                    rtn.setColorStatus(2);
+                }
+            });
         }
 
         return rootTreeNode;

+ 7 - 4
blade-service/blade-business/src/main/java/org/springblade/business/controller/NeiYeController.java

@@ -57,7 +57,10 @@ public class NeiYeController {
         if(queryVO.getWbsIds() != null && queryVO.getWbsIds().size() > 0){
             //生成列表
             List<NeiYeLedgerVO> neiYeLedgerVOList = new ArrayList<>();
-
+            Integer contractType=1;
+            if (StringUtils.isNotBlank(queryVO.getContractIdRelation())){
+                contractType = 2;
+            }
             ContractInfo contract = this.contractClient.getContractById(Long.parseLong(queryVO.getContractId()));
             String contractId = contract.getId().toString();
             if(!new Integer("1").equals(contract.getContractType())){
@@ -83,13 +86,13 @@ public class NeiYeController {
                     && !node.getNodeName().contains("开工报告")&& !node.getNodeName().contains("质量检验评定表")){
                 //非填报节点
                 if (node.getParentId() == 0){
-                        queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo("", contract.getContractType(), contractId);
+                        queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo("", contractType, contractId);
                 }else {
-                    queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo(node.getId().toString(), contract.getContractType(), contractId);
+                    queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo(node.getId().toString(), contractType, contractId);
                 }
             } else {
                 //填报节点
-                queryDataResult = this.informationQueryService.queryProcessDataByPrimaryKeyIdAndClassify(node.getPKeyId().toString(), contract.getContractType());
+                queryDataResult = this.informationQueryService.queryProcessDataByPrimaryKeyIdAndClassify(node.getPKeyId().toString(),contractType);
             }
 
             if (queryDataResult != null && queryDataResult.size() > 0) {

+ 6 - 5
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -345,11 +345,12 @@ public class TaskController extends BladeController {
 			@ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
 	})
 	public R<List<String>> queryBatchListTwo(String projectId, String contractId,String type){
-		//如果type有值就是内页台账,不需要去查询首件批次
 		if (StringUtils.isBlank(type)) {
+			//为空,以information为主表查询填报资料批次
 			return R.data(this.taskService.queryBatchListTwo(projectId, contractId));
-		}else {
-			return R.data(this.taskService.queryBatchListThree(projectId, contractId));
+		}else{
+			//如果type为1内页台账不需要去查询首件批次,type为2只查标记为首件的,type为3只查首件
+			return R.data(this.taskService.queryBatchListThree(projectId, contractId,type));
 		}
 	}
 
@@ -583,7 +584,7 @@ public class TaskController extends BladeController {
 			taskBatch.setCreateTime(new Date());
 			this.taskBatchService.save(taskBatch);
 
-			//修改试验填报状态 TODO 暂时不清楚该接口是否需要
+			//修改试验填报状态
 			this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(taskApprovalVOS);
 
 			return R.data(true, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........");
@@ -593,7 +594,7 @@ public class TaskController extends BladeController {
 			taskApprovalVOS.add(taskApprovalVO);
 			this.taskService.batchCompleteApprovalTask(taskApprovalVOS,AuthUtil.getUserId());
 
-			//修改试验填报状态 TODO 暂时不清楚该接口是否需要
+			//修改试验填报状态
 			this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(taskApprovalVOS);
 
 			return R.data(true, "提交成功");

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

@@ -180,7 +180,7 @@ public class TrialDetectionController extends BladeController {
     @ApiOperationSupport(order = 18)
     @ApiOperation(value = "自检多表PDF预览", notes = "传入nodeId、classify、contractId、projectId")
     public R<Object> getPDFs(String nodeId, String classify, String contractId, String projectId) {
-        String sql = "select pdf_url, e_visa_pdf_url from u_information_query  where project_id ='" + projectId + "' and classify='" + classify + "' and  wbs_id='" + nodeId + "' and contract_id ='" + contractId + "' ";
+        String sql = "select pdf_url, e_visa_pdf_url from u_information_query where project_id ='" + projectId + "' and classify='" + classify + "' and  wbs_id='" + nodeId + "' and contract_id ='" + contractId + "'";
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
         if (maps.size() >= 1) {
             Map<String, Object> stringObjectMap = maps.get(0);

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/TaskClientImpl.java

@@ -51,7 +51,7 @@ public class TaskClientImpl implements TaskClient {
         Task task = this.queryTask(taskId);
         if(task != null){
             //存在任务,根据formDataId查询(获取 私有项目的 p_key_ids)
-            List<String> privatePrimaryKeyIds = this.informationQueryService.queryBusinessTableData(task.getFormDataId());
+            List<String> privatePrimaryKeyIds = this.informationQueryService.queryBusinessTableData(task.getFormDataId(),task.getTrialSelfInspectionRecordId());
             if(privatePrimaryKeyIds != null && privatePrimaryKeyIds.size() > 0){
                 //查询这些表格的电签配置
                 return this.eVisaConfigClient.queryEVisaConfigByTableIds(privatePrimaryKeyIds, task.getContractId(), isFinal);

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

@@ -237,10 +237,10 @@
                     m_wbs_tree_contract AS wtc
                 <choose>
                     <when test="parentId == '0' || parentId == 0 || parentId == '' || parentId == null">
-                        LEFT JOIN m_wbs_tree_contract AS wtc1 ON wtc1.ancestors like concat('%', '0', '%') AND wtc1.is_deleted = 0 and wtc1.contract_id = wtc.contract_id AND wtc1.major_data_type IN(1,2,3,4)
+                        LEFT JOIN m_wbs_tree_contract AS wtc1 ON wtc1.ancestors like concat('%', '0', '%') AND wtc1.is_deleted = 0 and wtc1.contract_id = wtc.contract_id AND wtc1.major_data_type IN(0,1,2,3,4)
                     </when>
                     <otherwise>
-                        LEFT JOIN m_wbs_tree_contract AS wtc1 ON wtc1.ancestors like concat('%', wtc.id, '%') AND wtc1.is_deleted = 0 and wtc1.contract_id = wtc.contract_id AND wtc1.major_data_type IN(1,2,3,4)
+                        LEFT JOIN m_wbs_tree_contract AS wtc1 ON wtc1.ancestors like concat('%', wtc.id, '%') AND wtc1.is_deleted = 0 and wtc1.contract_id = wtc.contract_id AND wtc1.major_data_type IN(0,1,2,3,4)
                     </otherwise>
                 </choose>
                 LEFT JOIN u_information_query AS iq ON (iq.wbs_id = wtc1.p_key_id OR iq.wbs_id = wtc.p_key_id) AND iq.classify = #{classify} AND iq.type != 3
@@ -566,7 +566,7 @@
             LEFT JOIN u_information_query AS uiq ON wtc.p_key_id = uiq.wbs_id AND uiq.classify = #{classify} and uiq.is_deleted = 0
         WHERE
             wtc.type = 1
-          AND wtc.major_data_type in(1,2,3,4)
+          AND wtc.major_data_type in(0,1,2,3,4)
           AND wtc.ancestors like concat('%',#{parentId},'%')
           AND wtc.contract_id = #{contractId}
           AND wtc.is_deleted = 0

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskMapper.java

@@ -38,5 +38,9 @@ public interface TaskMapper extends BaseMapper<Task> {
 
     List<String> queryBatchListThree(@Param("projectId") String projectId, @Param("contractId") String contractId);
 
+    List<String> queryBatchListFirst(@Param("projectId") String projectId, @Param("contractId") String contractId);
+
+    List<String> queryBatchListFlagFirst(@Param("projectId") String projectId, @Param("contractId") String contractId);
+
     List<Task> queryContractAllBatch(String contract);
 }

+ 18 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskMapper.xml

@@ -51,10 +51,12 @@
         group by batch
     </select>
     <select id="queryBatchListTwo" resultType="java.lang.String">
-        select DISTINCT batch from u_task where is_deleted = 0 and status in (1,2) and project_id = #{projectId} and approval_type = 1
+        select DISTINCT batch from u_task
+        where is_deleted = 0 and status in (1,2) and project_id = #{projectId} and approval_type = 1 and form_data_id in
+        (SELECT id from u_information_query WHERE type=1 and `status` in (1,2)
         <if test="contractId != null and contractId != ''">
             and contract_id = #{contractId}
-        </if>
+        </if>)
         order by batch
     </select>
     <select id="queryBatchListThree" resultType="java.lang.String">
@@ -65,6 +67,20 @@
         </if>
         order by u.batch;
     </select>
+    <select id="queryBatchListFirst" resultType="java.lang.String">
+        select DISTINCT u.batch from u_task u LEFT JOIN u_information_query iq on u.form_data_id=iq.id
+        where  u.is_deleted = 0 and iq.type = 3 and u.status in (1, 2) and u.project_id = #{projectId} and u.approval_type = 1
+        <if test="contractId != null and contractId != ''">
+            and u.contract_id = #{contractId}
+        </if>
+        order by u.batch;
+    </select>
+    <select id="queryBatchListFlagFirst" resultType="java.lang.String">
+        select DISTINCT batch from u_task
+        WHERE form_data_id IN
+              (SELECT id from u_information_query WHERE wbs_id in (select wbs_node_id from u_tree_contract_first WHERE contract_id = #{contractId}) and type = 1) and `status` in(1,2) and approval_type = 1
+        order by batch
+    </select>
     <select id="queryContractAllBatch" resultMap="taskResultMap">
         select form_data_id,batch  from u_task
         where is_deleted = 0 and status in (1, 2) and contract_id =  #{contractId}

+ 78 - 75
blade-service/blade-business/src/main/java/org/springblade/business/service/IInformationQueryService.java

@@ -30,80 +30,83 @@ import java.util.List;
 import java.util.Map;
 
 /**
- *  服务类
+ * 服务类
  *
  * @author BladeX
  * @since 2022-06-08
  */
 public interface IInformationQueryService extends BaseService<InformationQuery> {
 
-	/**
-	 * 获取表格信息
-	 */
-	List<String> queryBusinessTableData(String formDataId);
-
-	/**
-	 * 获取合同段树(监理方)
-	 */
-	List<WbsTreeContractTreeVOS> queryContractTreeSupervision(List<String> contractIds, String parentId, Integer classify);
-
-	/**
-	 * 获取合同段树(施工方)
-	 */
-	List<WbsTreeContractTreeVOS> queryContractTree(String contractId, String parentId, Integer classify);
-
-	/**
-	 * 查询工序节点的填报记录
-	 */
-	List<QueryProcessDataVO> queryProcessDataByPrimaryKeyIdAndClassify(String primaryKeyId, Integer classify);
-
-	/**
-	 * 查询工序节点的填报记录
-	 */
-	List<QueryProcessDataVO> queryProcessDataByParentIdAndContractId(String parentId, Integer classify, String contractId);
-
-	/**
-	 * 查询工序节点的填报记录,简化
-	 */
-	List<QueryProcessDataVO> queryProcessDataByParentIdAndContractIdTwo(String parentId, Integer classify, String contractId);
-
-	/**
-	 * 查询工序节点的填报记录,status不默认为0,资料进度统计
-	 */
-	List<QueryProcessDataVO> queryProcessDataByParentIdAndContractIdThree(String parentId, Integer classify, String contractId);
-
-	/**
-	 * 保存填报时新增或修改填报资料记录表数据
-	 * @param wbsId 当前填报节点
-	 * @param fileName 文件题名
-	 * @param classify 1施工2质检
-	 * @param sourceType 1原生2数据化
-	 */
-	String saveOrUpdateInformationQueryData(String wbsId, String tableId,
-										  String businessId, String fileName,
-										  Integer classify, Integer sourceType,
-										  String isFirst, String sourceUrl, String pdfUrl, String firstFileName, List<JSONObject> linkDataList);
-
-	/**
-	 * 获取当前合同段下所有的上报批次
-	 * @param classify 合同段类型
-	 * @param contractId 合同段ID
-	 * @return 结果
-	 */
-	List<Integer> getReportNumberByContractId(Integer classify, String contractId);
-
-	/**
-	 * 根据合同段ID获取所有填报人
-	 * @param classify 合同段类型
-	 * @param contractId 合同段ID
-	 * @return 填报人集合
-	 */
-	List<FileUserVO> queryFileUserByContractId(Integer classify, String contractId);
-
-	/**
-	 * 自定义分页
-	 */
-	IPage<InformationQueryVO> selectInformationQueryPage(IPage<InformationQueryVO> page, InformationQueryVO vo);
+    /**
+     * 获取表格信息
+     */
+    List<String> queryBusinessTableData(String formDataId, Long trialSelfInspectionRecordId);
+
+    /**
+     * 获取合同段树(监理方)
+     */
+    List<WbsTreeContractTreeVOS> queryContractTreeSupervision(List<String> contractIds, String parentId, Integer classify);
+
+    /**
+     * 获取合同段树(施工方)
+     */
+    List<WbsTreeContractTreeVOS> queryContractTree(String contractId, String parentId, Integer classify);
+
+    /**
+     * 查询工序节点的填报记录
+     */
+    List<QueryProcessDataVO> queryProcessDataByPrimaryKeyIdAndClassify(String primaryKeyId, Integer classify);
+
+    /**
+     * 查询工序节点的填报记录
+     */
+    List<QueryProcessDataVO> queryProcessDataByParentIdAndContractId(String parentId, Integer classify, String contractId);
+
+    /**
+     * 查询工序节点的填报记录,简化
+     */
+    List<QueryProcessDataVO> queryProcessDataByParentIdAndContractIdTwo(String parentId, Integer classify, String contractId);
+
+    /**
+     * 查询工序节点的填报记录,status不默认为0,资料进度统计
+     */
+    List<QueryProcessDataVO> queryProcessDataByParentIdAndContractIdThree(String parentId, Integer classify, String contractId);
+
+    /**
+     * 保存填报时新增或修改填报资料记录表数据
+     *
+     * @param wbsId      当前填报节点
+     * @param fileName   文件题名
+     * @param classify   1施工2质检
+     * @param sourceType 1原生2数据化
+     */
+    String saveOrUpdateInformationQueryData(String wbsId, String tableId,
+                                            String businessId, String fileName,
+                                            Integer classify, Integer sourceType,
+                                            String isFirst, String sourceUrl, String pdfUrl, String firstFileName, List<JSONObject> linkDataList);
+
+    /**
+     * 获取当前合同段下所有的上报批次
+     *
+     * @param classify   合同段类型
+     * @param contractId 合同段ID
+     * @return 结果
+     */
+    List<Integer> getReportNumberByContractId(Integer classify, String contractId);
+
+    /**
+     * 根据合同段ID获取所有填报人
+     *
+     * @param classify   合同段类型
+     * @param contractId 合同段ID
+     * @return 填报人集合
+     */
+    List<FileUserVO> queryFileUserByContractId(Integer classify, String contractId);
+
+    /**
+     * 自定义分页
+     */
+    IPage<InformationQueryVO> selectInformationQueryPage(IPage<InformationQueryVO> page, InformationQueryVO vo);
 
 
     List<WbsTreeContract> getContractWbsTreeAll(WbsTreeContract wbsTreeContract);
@@ -111,14 +114,14 @@ public interface IInformationQueryService extends BaseService<InformationQuery>
     void updateBatchByPKeyId(List<WbsTreeContract> result);
 
     //获取当前合同所有填报表
-	public Map<String, Long> getTreeAllTable(String contractId);
+    public Map<String, Long> getTreeAllTable(String contractId);
 
-	// 复制节点数据
-	boolean copeNodeData(String nodeId,String vocationalId);
+    // 复制节点数据
+    boolean copeNodeData(String nodeId, String vocationalId);
 
-	// 获取当前节点下所有子节点
-	List<WbsTreeContract> getNodeChildAllByNodeId(String nodeId,String contractId,String pKeyId);
+    // 获取当前节点下所有子节点
+    List<WbsTreeContract> getNodeChildAllByNodeId(String nodeId, String contractId, String pKeyId);
 
-	// 获取当前节点所有的表的字段信息
-	List<QueryProcessDataVO> getNodeChildTabColsAllByNodeId(String nodeId,String contractId);
+    // 获取当前节点所有的表的字段信息
+    List<QueryProcessDataVO> getNodeChildTabColsAllByNodeId(String nodeId, String contractId);
 }

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

@@ -74,7 +74,7 @@ public interface ITaskService extends BaseService<Task> {
     /**
      * 获取当前合同段有哪些上报批次,内页台账用
      */
-    List<String> queryBatchListThree(String projectId, String contractId);
+    List<String> queryBatchListThree(String projectId, String contractId,String type);
 
     /**
      *  获取当前合同段所有上报资料的上报批次

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

@@ -76,7 +76,12 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
 			//查询下级节点信息
 //			imageClassificationFile.setWbsIds(JSONArray.parseArray(JSONObject.toJSONString(imageClassificationFile.getWbsIdsStr().split(",")), String.class));
 			WbsTreeContract node = wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.valueOf(imageClassificationFile.getWbsIdsStr()));
-			List<WbsTreeContract> wbsTreeContracts = wbsTreeContractClient.queryCurrentNodeAllChild(imageClassificationFile.getContractId(), node.getId());
+			List<WbsTreeContract> wbsTreeContracts = new ArrayList<>();
+			if (node.getParentId()==0){
+				wbsTreeContracts = wbsTreeContractClient.queryAllChild(imageClassificationFile.getContractId());
+			}else {
+				wbsTreeContracts = wbsTreeContractClient.queryCurrentNodeAllChild(imageClassificationFile.getContractId(), node.getId());
+			}
 			wbsTreeContracts.add(node);
 			imageClassificationFile.setWbsIds(wbsTreeContracts.stream().map(wtc->wtc.getPKeyId()+"").collect(Collectors.toList()));
 		}

+ 45 - 26
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -31,6 +31,8 @@ import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
@@ -65,29 +67,43 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 
     private final ContractClient contractClient;
 
+    private final JdbcTemplate jdbcTemplate;
+
     @Override
-    public List<String> queryBusinessTableData(String formDataId) {
+    public List<String> queryBusinessTableData(String formDataId, Long trialSelfInspectionRecordId) {
         //获取具体业务数据
         InformationQuery query = this.getById(formDataId);
 
         //查询这个业务数据绑定的表格,需要区分监理和施工
         if (query != null) {
+            List<WbsTreeContract> tableList = new ArrayList<>();
+            if (query.getType() == 1) { //质检
                 // 获取wbs
                 WbsTreeContract tree = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(query.getWbsId());
-                List<WbsTreeContract> tableList = new ArrayList<>();
-                if(query.getType()==1){ //质检
-                    // 获取 合同端信息表
-                    tableList= this.wbsTreeContractClient.queryChildByParentId(tree, "queryTable", String.valueOf(query.getClassify()));
-                }else if(query.getType()==3){ //首件数据
-                    // 获取首件 数据节点信息
-                   tableList = this.wbsTreeContractClient.queryContractFirstTab(tree.getContractId(), "111");
-                }
-                if (tableList != null && tableList.size() > 0) {
-                    //删除掉无法溯源的数据
-                    tableList.removeIf(node -> node.getIsTypePrivatePid() == null || node.getIsTypePrivatePid() <= 0 || StringUtils.isEmpty(node.getIsTypePrivatePid().toString()));
-                    List<Long> privatePIdList = tableList.stream().map(WbsTreeContract::getIsTypePrivatePid).distinct().collect(Collectors.toList());
-                    return JSONArray.parseArray(JSONObject.toJSONString(privatePIdList), String.class);
+                // 获取合同端信息表
+                tableList = this.wbsTreeContractClient.queryChildByParentId(tree, "queryTable", String.valueOf(query.getClassify()));
+            } else if (query.getType() == 3) { //首件数据
+                // 获取wbs
+                WbsTreeContract tree = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(query.getWbsId());
+                // 获取首件数据节点信息
+                tableList = this.wbsTreeContractClient.queryContractFirstTab(tree.getContractId(), "111");
+            }
+            if (tableList != null && tableList.size() > 0) {
+                //删除掉无法溯源的数据
+                tableList.removeIf(node -> node.getIsTypePrivatePid() == null || node.getIsTypePrivatePid() <= 0 || StringUtils.isEmpty(node.getIsTypePrivatePid().toString()));
+                List<Long> privatePIdList = tableList.stream().map(WbsTreeContract::getIsTypePrivatePid).distinct().collect(Collectors.toList());
+                return JSONArray.parseArray(JSONObject.toJSONString(privatePIdList), String.class);
+
+                //TODO ------试验 2023-03-14 liuYC------
+            } else if (query.getType() == 2) { //试验
+                // 获取试验对应表pKeyIds
+                String sql = "select table_ids from u_trial_self_inspection_record where is_deleted = 0 and id = " + trialSelfInspectionRecordId;
+                TrialSelfInspectionRecord obj = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TrialSelfInspectionRecord.class)).stream().findAny().orElse(null);
+                if (obj != null && StringUtils.isNotEmpty(obj.getTableIds())) {
+                    return Func.toStrList(obj.getTableIds());
                 }
+            }
+
         } else {
             //那么就可能是日志,检查是不是日志
             ContractLog log = this.contractLogService.getById(formDataId);
@@ -123,12 +139,14 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         }
         return result;
     }
+
     //简化
     @Override
     public List<QueryProcessDataVO> queryProcessDataByParentIdAndContractIdTwo(String parentId, Integer classify, String contractId) {
         List<QueryProcessDataVO> result = this.baseMapper.queryProcessDataByParentIdAndContractIdTwo(parentId, classify, contractId);
         return result;
     }
+
     //资料进度统计使用
     @Override
     public List<QueryProcessDataVO> queryProcessDataByParentIdAndContractIdThree(String parentId, Integer classify, String contractId) {
@@ -554,33 +572,34 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
     /**
      * 获取当前合同所有填报表
      */
-    public Map<String, Long> getTreeAllTable(String contractId){
+    public Map<String, Long> getTreeAllTable(String contractId) {
         //总数据
         List<WbsTreeContractTreeVOS> list = new ArrayList<>();
-        this.getAllTable("",contractId,list);
-        Map<String,Long> map = new HashMap<>();
-        list.stream().forEach(li->map.put(li.getId()+"",li.getSubmitCounts()));
+        this.getAllTable("", contractId, list);
+        Map<String, Long> map = new HashMap<>();
+        list.stream().forEach(li -> map.put(li.getId() + "", li.getSubmitCounts()));
         return map;
     }
 
     @Override
     public boolean copeNodeData(String nodeId, String vocationalId) {
-        return baseMapper.copeNodeData(nodeId,vocationalId);
+        return baseMapper.copeNodeData(nodeId, vocationalId);
     }
 
     /**
      * 递归调用获取合同所有填报表
      */
-    public void getAllTable(String parentId,String contractId, List<WbsTreeContractTreeVOS> list){
+    public void getAllTable(String parentId, String contractId, List<WbsTreeContractTreeVOS> list) {
         List<WbsTreeContractTreeVOS> vos = this.queryContractTree(parentId, contractId, "", "1");
-        if (vos != null && vos.size() > 0){
-            vos = vos.stream().filter(vo->vo.getSubmitCounts()!=0).collect(Collectors.toList());
+        if (vos != null && vos.size() > 0) {
+            vos = vos.stream().filter(vo -> vo.getSubmitCounts() != 0).collect(Collectors.toList());
             list.addAll(vos);
             for (WbsTreeContractTreeVOS vo : vos) {
-                this.getAllTable(vo.getId()+"",contractId,list);
+                this.getAllTable(vo.getId() + "", contractId, list);
             }
         }
     }
+
     /**
      * 查询合同段划分树公共代码
      */
@@ -627,12 +646,12 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
     }
 
     @Override
-    public List<WbsTreeContract> getNodeChildAllByNodeId(String nodeId,String contractId,String pKeyId) {
-        return baseMapper.getNodeChildAllByNodeId(nodeId,contractId,pKeyId);
+    public List<WbsTreeContract> getNodeChildAllByNodeId(String nodeId, String contractId, String pKeyId) {
+        return baseMapper.getNodeChildAllByNodeId(nodeId, contractId, pKeyId);
     }
 
     @Override
     public List<QueryProcessDataVO> getNodeChildTabColsAllByNodeId(String nodeId, String contractId) {
-        return baseMapper.getNodeChildTabColsAllByNodeId(nodeId,contractId);
+        return baseMapper.getNodeChildTabColsAllByNodeId(nodeId, contractId);
     }
 }

+ 8 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -351,8 +351,14 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     }
 
     @Override
-    public List<String> queryBatchListThree(String projectId, String contractId) {
-        return baseMapper.queryBatchListThree(projectId, contractId);
+    public List<String> queryBatchListThree(String projectId, String contractId,String type) {
+        if ("1".equals(type)){
+            return baseMapper.queryBatchListThree(projectId, contractId);
+        }else if ("2".equals(type)){
+            return baseMapper.queryBatchListFlagFirst(projectId, contractId);
+        }else {
+            return baseMapper.queryBatchListFirst(projectId, contractId);
+        }
     }
 
     @Override

+ 69 - 62
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -472,53 +472,54 @@ public class TrialSelfInspectionRecordServiceImpl
                                 .eq(TrialSelfInspectionRecord::getId, trialSelfInspectionRecordId)
                         );
 
-                        //TODO ------审批通过且合格的自检记录信息,关联到施工质检节点上------
+                        //TODO ------审批通过且合格的自检记录信息,关联到工程部位信息的施工质检节点上------
                         TrialSelfInspectionRecord record = baseMapper.selectById(trialSelfInspectionRecordId);
                         if (("已审批").equals(record.getTaskStatus()) && (new Integer(1)).equals(record.getDetectionResult()) && (new Integer(1)).equals(record.getDetectionCategory())) {
-                            //删除关联信息
-                            baseMapper.delSelfQuality(record.getId());
-
-                            List<String> ids = Func.toStrList(record.getProjectPosition());
-                            //新增关联信息
-                            for (String id : ids) {
-                                baseMapper.saveSelfQuality(SnowFlakeUtil.getId(), record.getId(), id);
-                            }
-
-                            //把当前试验的PDF合并关联到质检树节点下
-                            List<String> contractNodePKeyIds = baseMapper.selectQualityNodeId(String.valueOf(record.getId())); //获取合同段质检树的节点PkeyId
-                            for (String pKeyId : contractNodePKeyIds) {
-                                WbsTreeContract wbsTreeContract = wbsTreeContractClient.getContractNodeByPrimaryKeyId(pKeyId);
-                                if (wbsTreeContract != null) {
-                                    List<String> pdfUrlList = new ArrayList<>();
-                                    String classify;
-                                    if (wbsTreeContract.getTableOwner().contains("1") || wbsTreeContract.getTableOwner().contains("2") || wbsTreeContract.getTableOwner().contains("3")) {
-                                        classify = "1";
-                                    } else {
-                                        classify = "2";
-                                    }
-                                    String pdfUrlNodeAll = baseMapper.selectInformationQuery(pKeyId, wbsTreeContract.getContractId(), classify);
-
-                                    if (StringUtils.isEmpty(pdfUrlNodeAll) || StringUtils.isEmpty(record.getPdfUrl())) {
-                                        continue;
-                                    }
-
-                                    //质检节点合并pdfUrl
-                                    pdfUrlList.add(pdfUrlNodeAll);
-                                    //试验pdfUrl
-                                    pdfUrlList.add(record.getPdfUrl());
-
-                                    //合并PDF
-                                    String filePath = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-                                    String listPdf = filePath + "/pdf/" + pKeyId + ".pdf";
-                                    File tabPDF = ResourceUtil.getFile(listPdf);
-                                    if (tabPDF.exists()) {
-                                        tabPDF.delete();
-                                    }
-                                    FileUtils.mergePdfPublicMethods(pdfUrlList, listPdf);
-                                    BladeFile bladeFile = this.newIOSSClient.uploadFile(pKeyId + ".pdf", listPdf);
-                                    if (bladeFile != null) {
-                                        //修改质检树合并后的pdfURL
-                                        baseMapper.updateInformationQuery(pKeyId, wbsTreeContract.getContractId(), classify, bladeFile.getLink());
+                            if (StringUtils.isNotEmpty(record.getProjectPosition())) {
+                                List<String> ids = Func.toStrList(record.getProjectPosition());
+
+                                //删除当前试验记录关联信息
+                                baseMapper.delSelfQuality(record.getId());
+
+                                for (String pKeyId : ids) {
+                                    //新增关联信息
+                                    baseMapper.saveSelfQuality(SnowFlakeUtil.getId(), record.getId(), pKeyId);
+
+                                    //合并pdf到质检树节点
+                                    WbsTreeContract wbsTreeContract = wbsTreeContractClient.getContractNodeByPrimaryKeyId(pKeyId);
+                                    if (wbsTreeContract != null) {
+                                        List<String> pdfUrlList = new ArrayList<>();
+                                        String classify;
+
+                                        if (wbsTreeContract.getTableOwner().contains("1") || wbsTreeContract.getTableOwner().contains("2") || wbsTreeContract.getTableOwner().contains("3")) {
+                                            classify = "1";
+                                        } else {
+                                            classify = "2";
+                                        }
+
+                                        String pdfUrlNodeAll = baseMapper.selectInformationQuery(pKeyId, wbsTreeContract.getContractId(), classify);
+
+                                        if (StringUtils.isEmpty(pdfUrlNodeAll) || StringUtils.isEmpty(record.getPdfUrl())) {
+                                            continue;
+                                        }
+
+                                        //质检节点pdfUrl
+                                        pdfUrlList.add(pdfUrlNodeAll);
+                                        //试验记录pdfUrl
+                                        pdfUrlList.add(record.getPdfUrl());
+
+                                        String filePath = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+                                        String listPdf = filePath + "/pdf/" + pKeyId + ".pdf";
+                                        File tabPDF = ResourceUtil.getFile(listPdf);
+                                        if (tabPDF.exists()) {
+                                            tabPDF.delete();
+                                        }
+                                        FileUtils.mergePdfPublicMethods(pdfUrlList, listPdf);
+                                        BladeFile bladeFile = this.newIOSSClient.uploadFile(pKeyId + ".pdf", listPdf);
+                                        if (bladeFile != null) {
+                                            //修改质检树合并后的pdfUrl
+                                            baseMapper.updateInformationQuery(pKeyId, wbsTreeContract.getContractId(), classify, bladeFile.getLink());
+                                        }
                                     }
                                 }
                             }
@@ -1108,7 +1109,7 @@ public class TrialSelfInspectionRecordServiceImpl
             throw new ServiceException("请选择一个类型");
         }
         if (ObjectUtil.isEmpty(dto.getNodeId())) {
-            throw new ServiceException("未获取到当前节点的pKeyId");
+            throw new ServiceException("未获取到当前节点信息");
         }
 
         //获取当前节点的合并的pdfURL
@@ -1123,23 +1124,31 @@ public class TrialSelfInspectionRecordServiceImpl
 
                 List<String> pdfList = new ArrayList<>();
 
-                if (StringUtils.isEmpty(informationQuery.getPdfTrialUrl())) {
-                    //如果PdfTrialUrl == null 说明是第一次关联
+                //TODO ------自检------
+                if (dto.getType().equals(1)) {
+                    //当前施工pdf
                     pdfList.add(informationQuery.getPdfUrl());
-                } else {
-                    //如果PdfTrialUrl != null 说明是第二次以上操作关联,那么就在之前的上面做增量,主要解决不同类型提交时的问题
-                    pdfList.add(informationQuery.getPdfTrialUrl());
-                }
 
-                if (dto.getType().equals(1)) { //自检
-                    //获取自检的对应的数据pdf
-                    List<TrialSelfInspectionRecord> trialSelfInspectionRecords = baseMapper.selectList(Wrappers.<TrialSelfInspectionRecord>lambdaQuery().in(TrialSelfInspectionRecord::getId, dto.getIds()));
+                    //自检pdf
+                    List<TrialSelfInspectionRecord> trialSelfInspectionRecords = baseMapper.selectList(Wrappers.<TrialSelfInspectionRecord>lambdaQuery()
+                            .select(TrialSelfInspectionRecord::getPdfUrl)
+                            .in(TrialSelfInspectionRecord::getId, Func.toLongList(dto.getIds())));
                     List<String> pdfURLs = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getPdfUrl).collect(Collectors.toList());
                     pdfList.addAll(pdfURLs);
 
-                } else if (dto.getType().equals(2) || dto.getType().equals(3)) { //第三方、外委
-                    //获取第三方、外委的对应的数据pdf
-                    List<TrialDetectionData> trialDetectionData = trialDetectionDataService.getBaseMapper().selectList(Wrappers.<TrialDetectionData>lambdaQuery().in(TrialDetectionData::getId, dto.getIds()));
+                    //TODO ------第三方、外委------
+                } else if (dto.getType().equals(2) || dto.getType().equals(3)) {
+
+                    if (informationQuery.getPdfTrialUrl() != null) {
+                        //如果当前存在自检pdf,那么拼接
+                        pdfList.add(informationQuery.getPdfTrialUrl());
+                    } else {
+                        //当前施工pdf
+                        pdfList.add(informationQuery.getPdfUrl());
+                    }
+
+                    //第三方、外委pdf
+                    List<TrialDetectionData> trialDetectionData = trialDetectionDataService.getBaseMapper().selectList(Wrappers.<TrialDetectionData>lambdaQuery().in(TrialDetectionData::getId, Func.toLongList(dto.getIds())));
                     List<String> pdfURLs = new ArrayList<>();
                     for (TrialDetectionData trialDetectionDatum : trialDetectionData) {
                         if (StringUtils.isNotEmpty(trialDetectionDatum.getRecordTableUrl())) {
@@ -1168,9 +1177,7 @@ public class TrialSelfInspectionRecordServiceImpl
                         //修改当前节点的pdfTrialURL地址
                         if (informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getPdfTrialUrl, bladeFile.getLink()).eq(InformationQuery::getId, informationQuery.getId()))) {
                             for (String recordId : Func.toStrList(dto.getIds())) {
-                                //修改选中状态记录信息(选中为勾选绿色)
                                 baseMapper.deleteSeletedStatusByNodeId(dto.getNodeId(), dto.getType(), recordId); //先删除对应记录
-
                                 baseMapper.insertSeletedStatus(SnowFlakeUtil.getId(), dto.getNodeId(), dto.getType(), recordId); //新增该类型选中的记录信息
                             }
                             return true;
@@ -1216,6 +1223,7 @@ public class TrialSelfInspectionRecordServiceImpl
                     //合并pdf把试验自检记录、第三方、外委的pdf追加到当前质检合同段树节点下的pdf后显示
                     List<String> collect = pdfList.stream().filter(Objects::nonNull).collect(Collectors.toList());
                     String filePath = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+                    assert informationQuery != null;
                     String listPdf = filePath + "/pdf/" + informationQuery.getId() + ".pdf";
                     File tabPDF = ResourceUtil.getFile(listPdf);
                     if (tabPDF.exists()) {
@@ -1227,9 +1235,7 @@ public class TrialSelfInspectionRecordServiceImpl
                         //修改当前节点的pdfTrialURL地址
                         if (informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getPdfTrialUrl, bladeFile.getLink()).eq(InformationQuery::getId, informationQuery.getId()))) {
                             for (String recordId : recordIds) {
-                                //修改选中状态记录信息(选中为勾选绿色)
                                 baseMapper.deleteSeletedStatusByNodeId(dto.getNodeId(), dto.getType(), recordId); //先删除对应记录
-
                                 baseMapper.insertSeletedStatus(SnowFlakeUtil.getId(), dto.getNodeId(), dto.getType(), recordId); //新增该类型选中的记录信息
                             }
                             return true;
@@ -1239,6 +1245,7 @@ public class TrialSelfInspectionRecordServiceImpl
 
             } else {
                 //修改pdfTrialUrl=null
+                assert informationQuery != null;
                 informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getPdfTrialUrl, null).eq(InformationQuery::getId, informationQuery.getId()));
             }
             //删除该类型的所有记录信息

+ 3 - 3
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' @keyDowns='dateKeydown' 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 @keyDowns='dateKeydown'  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);
@@ -2756,7 +2756,7 @@ public class ExcelTabController extends BladeController {
             @ApiImplicitParam(name = "id", value = "记录id-当做groupId", required = true)
     })
     public R<Map<String, Object>> getBussDataInfoListTrial(Long id, Long pkeyId) {
-        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrial(id, pkeyId);
+        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrialRecordSG(id, pkeyId);
         Map<String, Object> map = bussDataInfoTrial.get(0);
         map.remove("group_id");
         return R.data(map);

+ 8 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java

@@ -294,22 +294,22 @@ public class TextdictInfoController extends BladeController {
                 element.empty().append(checkbox);
             }
         } else if (textdictInfo.getTextId().equals("date")) { // 日期--年月日时分秒
-            element.empty().append("<el-date-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='datetime' format='YYYY年MM月DD日 HH:mm:ss' value-format='YYYY年MM月DD日 hh:mm:ss' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='datetime' format='YYYY年MM月DD日 HH:mm:ss' value-format='YYYY年MM月DD日 hh:mm:ss' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
         } else if (textdictInfo.getTextId().equals("dateYMD")) { // 日期--年月日
-            element.empty().append("<el-date-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='date' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='date' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
         } else if (textdictInfo.getTextId().equals("dateHMS")) { // 日期--时分秒
-            element.empty().append("<el-time-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='date' format='HH:mm:ss' value-format='HH:mm:ss' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
+            element.empty().append("<el-time-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='date' format='HH:mm:ss' value-format='HH:mm:ss' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
         } else if (textdictInfo.getTextId().equals("dateSM")) { // 日期--时分
-            element.empty().append("<el-time-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='date' format='HH:mm' value-format='HH:mm' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
+            element.empty().append("<el-time-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='date' format='HH:mm' value-format='HH:mm' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
         } else if (textdictInfo.getTextId().equals("dateMDHM")) { // 日期--月日时分
-            element.empty().append("<el-date-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='datetime' format='MM月DD日 HH:mm' value-format='MM月DD日 HH:mm' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='datetime' format='MM月DD日 HH:mm' value-format='MM月DD日 HH:mm' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
         } else if (textdictInfo.getTextId().equals("dateDHM")) { // 日期--日时分
-            element.empty().append("<el-date-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='datetime' format='DD日 HH:mm' value-format='DD日 HH:mm' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='datetime' format='DD日 HH:mm' value-format='DD日 HH:mm' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-time-picker>");
         } else if (textdictInfo.getTextId().equals("daterange")) { // 时间段
-            element.empty().append("<el-date-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='datetimerange' placeholder=" + placeholder + "  start-placeholder='开始日期'  end-placeholder='结束日期' format='YYYY年MM月DD日' trIndex=" + trindex + " keyname=" + keyname + " weighing=" + weighing + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='datetimerange' placeholder=" + placeholder + "  start-placeholder='开始日期'  end-placeholder='结束日期' format='YYYY年MM月DD日' trIndex=" + trindex + " keyname=" + keyname + " weighing=" + weighing + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">");
             element.children().get(0).attr("@change", "datePickerChange($event,'" + keyname + "')");
         } else if (textdictInfo.getTextId().equals("daterangeYMD")) { // 时间段 /
-            element.empty().append("<el-date-picker id='"+keyname+"' popper-class='hc-table-form-date-picker hc-form-id-"+keyname+"' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " type='datetimerange' range-separator='/' placeholder=" + placeholder + "  start-placeholder='开始日期'  end-placeholder='结束日期' format='YYYY年MM月DD日' trIndex=" + trindex + " keyname=" + keyname + " weighing=" + weighing + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown' v-model=" + vmode + " type='datetimerange' range-separator='/' placeholder=" + placeholder + "  start-placeholder='开始日期'  end-placeholder='结束日期' format='YYYY年MM月DD日' trIndex=" + trindex + " keyname=" + keyname + " weighing=" + weighing + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">");
             element.children().get(0).attr("@change", "datePickerChange($event,'" + keyname + "')");
 
         } else if (textdictInfo.getTextId().equals("img")) {

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -37,6 +37,13 @@ public class WbsTreeContractController extends BladeController {
     public R searchNodeAllTable(String primaryKeyId, String type, String contractId, String projectId) {
         List<AppWbsTreeContractVO> list = iWbsTreeContractService.searchNodeAllTable(primaryKeyId, type, contractId, projectId);
         if (list.size() > 0) {
+            list.stream().forEach(l->{
+                if (StringUtils.isNotBlank(l.getHtmlUrl())){
+                    l.setIsLinkTable(2);
+                }else {
+                    l.setIsLinkTable(1);
+                }
+            });
             return R.data(list);
         }
         return R.fail(200, "未查询到数据");

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

@@ -1,5 +1,6 @@
 package org.springblade.manager.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -20,6 +21,7 @@ import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
@@ -31,12 +33,15 @@ import org.springblade.manager.service.*;
 import org.springblade.manager.vo.*;
 import org.springblade.manager.wrapper.WbsTreePrivateWrapper;
 import org.springframework.beans.BeanUtils;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
 import java.io.IOException;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
@@ -54,6 +59,7 @@ public class WbsTreePrivateController extends BladeController {
     private final IProjectInfoService projectInfoService;
     private final IWbsFormElementService wbsFormElementService;
     private final IExcelTabService iExcelTabService;
+    private final JdbcTemplate jdbcTemplate;
 
     /**
      * 保存项目日志划分
@@ -595,7 +601,8 @@ public class WbsTreePrivateController extends BladeController {
     }
 
     /**
-     * 试验-根据所属方查询当前节点表信息
+     * 试验 - 根据所属方查询当前节点表信息
+     * 使用位置:1、客户端试验自检、施工关联试验数据
      *
      * @param primaryKeyId
      * @param type
@@ -606,22 +613,43 @@ public class WbsTreePrivateController extends BladeController {
      */
     @GetMapping("/search-node-tables")
     @ApiOperationSupport(order = 22)
-    @ApiOperation(value = "试验-根据所属方查询当前节点表信息", notes = "传入节点primaryKeyId;所属方type=1施工,=2监理 ;表单类型tableType=1记录表、=2报告单; 合同段id;项目id;isAdd=是否新增;记录id")
+    @ApiOperation(value = "试验-根据所属方查询当前节点表信息", notes = "传入节点primaryKeyId、所属方type=1施工/=2监理、表单类型tableType=1记录表/=2报告单、合同段id、项目id、isAdd=是否新增、试验记录id")
     public R<List<WbsTreePrivateVO4>> searchNodeAllTable(String primaryKeyId, String type, String tableType, String contractId, String projectId, Integer isAdd, Long id) {
         List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateService.searchNodeAllTable(primaryKeyId, type, tableType, contractId, projectId, isAdd, id);
-        List<WbsTreePrivateVO4> list = new ArrayList<>();
-        //数据包装
-        for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
-            WbsTreePrivateVO4 wbsTreePrivateVO4 = BeanUtil.copyProperties(wbsTreePrivate, WbsTreePrivateVO4.class);
-            List<Map<String, Object>> bussDataInfoTrial = iExcelTabService.getBussDataInfoTrial(id, wbsTreePrivate.getPKeyId());
-            if (wbsTreePrivateVO4 != null && bussDataInfoTrial.size() > 0) {
-                wbsTreePrivateVO4.setBussDataInfoTrial(bussDataInfoTrial.get(0));
+        List<WbsTreePrivateVO4> wbsTreePrivateVO4s = BeanUtil.copyProperties(wbsTreePrivates, WbsTreePrivateVO4.class);
+        for (WbsTreePrivateVO4 treePrivate : wbsTreePrivateVO4s) {
+            //新增
+            if ((new Integer(1).equals(isAdd)) && ObjectUtil.isEmpty(id)) {
+                //按钮状态
+                treePrivate.setPdfUrl(null);
+                treePrivate.setIsBussShow(1);
+                treePrivate.setIsTabPdf(1);
+                treePrivate.setTabFileType(1);
             }
-            list.add(wbsTreePrivateVO4);
-        }
-        return R.data(list);
 
-        //return R.data(wbsTreePrivateService.searchNodeAllTable(primaryKeyId, type, tableType, contractId, projectId, isAdd, id));
+            //编辑
+            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()));
+
+                //按钮状态
+                TrialSelfDataRecord record = map.get(treePrivate.getPKeyId());
+                if (record != null) {
+                    treePrivate.setIsBussShow(record.getIsBussShow());
+                    treePrivate.setIsTabPdf(record.getIsTabPdf());
+                    treePrivate.setTabFileType(record.getIsTabFileType());
+                }
+
+                //表单数据
+                List<Map<String, Object>> bussDataInfoTrial = iExcelTabService.getBussDataInfoTrial(id, treePrivate.getPKeyId());
+                if (bussDataInfoTrial != null && bussDataInfoTrial.size() > 0) {
+                    bussDataInfoTrial.get(0).remove("group_id");
+                    treePrivate.setBussDataInfoTrial(bussDataInfoTrial.get(0));
+                }
+            }
+        }
+        return R.data(wbsTreePrivateVO4s);
     }
 
     /**

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -199,6 +199,14 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
         return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getContractId, contractId).like(WbsTreeContract::getAncestors, parentId).eq(WbsTreeContract::getIsDeleted, 0));
     }
 
+    @Override
+    public List<WbsTreeContract> queryAllChild(Long contractId) {
+        return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery()
+                .eq(WbsTreeContract::getContractId, contractId)
+                .eq(WbsTreeContract::getType, 1)
+                .eq(WbsTreeContract::getIsDeleted, 0));
+    }
+
     @Override
     public List<WbsTreeContract> selectContractTreeAll(String contractId) {
         return this.wbsTreeContractService.selectContractTreeAll(Long.parseLong(contractId));

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

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

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

@@ -92,6 +92,7 @@ import java.net.URL;
 import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -708,11 +709,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     public TransactionStatus beginTransaction(DataSourceTransactionManager transactionManager) {
         DefaultTransactionDefinition def = new DefaultTransactionDefinition();//事务定义类
         def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
-        TransactionStatus status = transactionManager.getTransaction(def);// 返回事务对象
-        return status;
+        return transactionManager.getTransaction(def);
     }
 
-
     @Override
     public R saveOrUpdateInfo(List<TableInfo> tableInfoList) {
 
@@ -1055,7 +1054,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     public R getBussPdfInfo(Long pkeyId) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         //String file_path = "/Users/hongchuangyanfa/Desktop/";
-
         WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, pkeyId));
 
@@ -1386,7 +1384,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         //获取试验记录id
         List<String> recordIds = baseMapper.queryTrialRecordId(nodeId).stream().distinct().collect(Collectors.toList());
         if (recordIds.size() > 0) {
-            String recordInfoSql = "select detection_category,detection_result,task_status,pdf_url from u_trial_self_inspection_record where id in(" + StringUtils.join(recordIds, ",") + ")";
+            String recordInfoSql = "select detection_category,detection_result,task_status,pdf_url from u_trial_self_inspection_record where pdf_url is not null and id in(" + StringUtils.join(recordIds, ",") + ")";
             List<TrialSelfInspectionRecord> query = jdbcTemplate.query(recordInfoSql, new BeanPropertyRowMapper<>(TrialSelfInspectionRecord.class));
             if (query.size() > 0) {
                 //只获取已审批合格自检记录,追加试验pdf到质检后面
@@ -1425,6 +1423,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         List<Map<String, Object>> list = new ArrayList<>();
         Map<String, Object> reData = new HashMap<>();
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .select(WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl, WbsTreePrivate::getPKeyId)
                 .eq(WbsTreePrivate::getPKeyId, pkeyId));
         if (wbsTreePrivate == null) {
             return list;
@@ -1435,12 +1434,13 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         //表单是否存储在
         String tabName = wbsTreePrivate.getInitTableName();
-        String isExitSql = " select * from information_schema.TABLES where TABLE_NAME='" + tabName + "'";
+        String isExitSql = "select * from information_schema.TABLES where TABLE_NAME='" + tabName + "'";
         List<Map<String, Object>> tabList = jdbcTemplate.queryForList(isExitSql);
-        if (tabList == null || tabList.size() <= 0) {
-            throw new ServiceException("无实体表对应");
+        if (tabList.size() <= 0) {
+            return list;
         }
 
+        //实体数据
         String querySql = "select * from " + wbsTreePrivate.getInitTableName() + " where p_key_id=" + pkeyId + " and group_id = " + groupId;
         List<Map<String, Object>> dataIn = jdbcTemplate.queryForList(querySql);
 
@@ -1457,6 +1457,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             Map<String, Object> mysqlData = dataIn.get(0);
             for (String key : mysqlData.keySet()) {
                 String tabVal = mysqlData.get(key) + "";
+
                 // 时间段处理
                 if (StringUtils.isNotEmpty(tabVal) && !tabVal.equals("null")) {
                     if (tabVal.contains("T") && tabVal.contains(".000Z]")) {
@@ -1513,8 +1514,161 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 }
             }
         }
+
+        // 获取默认值
+        QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("col_key", "sig_role_name");
+        queryWrapper.eq("type", 4);
+        queryWrapper.eq("tab_id", wbsTreePrivate.getPKeyId());
+        final List<TextdictInfo> textDictInfos = textdictInfoService.getBaseMapper().selectList(queryWrapper);
+        if (!textDictInfos.isEmpty()) {
+            for (TextdictInfo textdictInfo : textDictInfos) {
+                if (reData.containsKey(textdictInfo.getColKey())) {
+                    String keyVal = reData.get(textdictInfo.getColKey()) + "";
+                } else {
+                    reData.put(textdictInfo.getColKey() + "", textdictInfo.getSigRoleName());
+                }
+            }
+        }
+
+        // 移除Id 和 p_key_id
+        reData.remove("id");
+        reData.remove("p_key_id");
+        reData.remove("classify");
+        reData.remove("contractId");
+        reData.remove("pkeyId");
+        reData.remove("projectId");
+        list.add(reData);
+        return list;
+    }
+
+    /**
+     * 试验 获取填报信息 - 施工关联试验数据
+     */
+    @Override
+    public List<Map<String, Object>> getBussDataInfoTrialRecordSG(Long groupId, Long pkeyId) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        Map<String, Object> reData = new HashMap<>();
+        WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .select(WbsTreePrivate::getInitTableName, WbsTreePrivate::getHtmlUrl, WbsTreePrivate::getPKeyId, WbsTreePrivate::getInitTableId)
+                .eq(WbsTreePrivate::getPKeyId, pkeyId));
+        if (wbsTreePrivate == null) {
+            return list;
+        }
+        if (wbsTreePrivate.getHtmlUrl() == null) {
+            return list;
+        }
+
+        //表单是否存储在
+        String tabName = wbsTreePrivate.getInitTableName();
+        String isExitSql = "select * from information_schema.TABLES where TABLE_NAME='" + tabName + "'";
+        List<Map<String, Object>> tabList = jdbcTemplate.queryForList(isExitSql);
+        if (tabList.size() <= 0) {
+            return list;
+        }
+
+        //实体数据
+        String querySql = "select * from " + wbsTreePrivate.getInitTableName() + " where p_key_id=" + pkeyId + " and group_id = " + groupId;
+        List<Map<String, Object>> dataIn = jdbcTemplate.queryForList(querySql);
+
+        //对应实体表的对应Key字段的KeyName字段名
+        Map<String, WbsFormElement> elementMap = null;
+        if (StringUtils.isNotEmpty(wbsTreePrivate.getInitTableId())) {
+            String eleSql = "select e_key,e_name from m_wbs_form_element where f_id = " + wbsTreePrivate.getInitTableId();
+            elementMap = jdbcTemplate.query(eleSql, new BeanPropertyRowMapper<>(WbsFormElement.class)).stream().collect(Collectors.toMap(WbsFormElement::getEKey, Function.identity()));
+        }
+
+        // 匹配关联
+        try {
+            File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
+            String htmlString = IoUtil.readToString(new FileInputStream(file1));
+            Document doc = Jsoup.parse(htmlString);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        if (dataIn.size() >= 1) {
+            Map<String, Object> mysqlData = dataIn.get(0);
+            for (String key : mysqlData.keySet()) {
+                String tabVal = mysqlData.get(key) + "";
+
+                //映射KeyName名称
+                if (elementMap != null && elementMap.size() > 0) {
+                    WbsFormElement wbsFormElement = elementMap.get(key);
+                    if (wbsFormElement != null) {
+
+                        key = wbsFormElement.getEName();
+
+                        if (StringUtils.isNotEmpty(tabVal) && !tabVal.equals("null")) {
+
+                            //处理相同字段名称问题,同一个KeyName,那么拼接value
+                            Object oldValue = reData.get(key);
+                            if (oldValue != null) {
+                                reData.put(key, oldValue + "、" + tabVal);
+                                continue;
+                            }
+
+                            //时间段处理
+                            if (tabVal.contains("T") && tabVal.contains(".000Z]")) {
+                                String[] tabData = tabVal.split("_\\^_");
+
+                                if (reData.containsKey("pickerKey")) {
+                                    String pickerKey = reData.get("pickerKey") + "," + key;
+                                    reData.put("pickerKey", pickerKey);
+                                } else {
+                                    reData.put("pickerKey", key);
+                                }
+
+                                String sql = tabData[0];
+                                sql = sql.replaceAll("\\[", "['");
+                                sql = sql.replaceAll("]", "']");
+                                sql = sql.replaceAll("000Z,", "000Z',");
+                                sql = sql.replaceAll(", 20", ", '20");
+                                if (StringUtils.isNotEmpty(tabData[0])) {
+                                    reData.put(key, sql);
+                                }
+
+                                //时间和字符串合作
+                            } else if (tabVal.contains("T") && tabVal.contains(".000Z")) { //时间
+                                if (tabVal.contains("☆")) {
+                                    String[] mysql = tabVal.split("☆");
+                                    for (String data : mysql) {
+                                        String[] tabData = data.split("_\\^_");
+                                        if (StringUtils.isNotEmpty(tabData[0])) {
+                                            reData.put(key, tabData[0]);
+                                        }
+                                    }
+                                } else {
+                                    String[] tabData = tabVal.split("_\\^_");
+                                    if (StringUtils.isNotEmpty(tabData[0])) {
+                                        reData.put(key, tabData[0]);
+                                    }
+                                }
+                            } else if (tabVal.contains("☆")) {
+                                String[] mysql = tabVal.split("☆");
+                                for (String data : mysql) {
+                                    String[] tabData = data.split("_\\^_");
+                                    if (StringUtils.isNotEmpty(tabData[0])) {
+                                        reData.put(key, tabData[0]);
+                                    }
+                                }
+                            } else if (tabVal.contains("_^_")) {
+                                String[] tabData = tabVal.split("_\\^_");
+                                if (StringUtils.isNotEmpty(tabData[0])) {
+                                    reData.put(key, tabData[0]);
+                                }
+                            } else {
+                                reData.put(key, tabVal);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
         // 获取默认值
         QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("col_key", "sig_role_name");
         queryWrapper.eq("type", 4);
         queryWrapper.eq("tab_id", wbsTreePrivate.getPKeyId());
         final List<TextdictInfo> textDictInfos = textdictInfoService.getBaseMapper().selectList(queryWrapper);
@@ -1536,9 +1690,11 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         reData.remove("pkeyId");
         reData.remove("projectId");
         list.add(reData);
+
         return list;
     }
 
+
     /**
      * 试验 单pdf
      */
@@ -1620,7 +1776,35 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                     x1 = 1;
                                 }
                                 String myData = DataInfo.get(val) + "";
-                                if (myData.contains("T") && myData.contains("-")) {
+
+                                if (myData.contains("T") && myData.contains("-") && myData.contains(":")) {
+                                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+                                    sdf.setTimeZone(TimeZone.getTimeZone("GTM+8"));
+                                    SimpleDateFormat formatStr = new SimpleDateFormat("yyyy年MM月dd日");
+                                    if (myData.contains(",") && myData.contains("]")) {
+                                        myData = myData.replace("[", "").replace("]", "").replaceAll("'", "");
+                                        String[] dataVal = myData.split(",");
+
+                                        Date Start_dataStr = sdf.parse(dataVal[0]);
+                                        Date end_dataStr = sdf.parse(dataVal[1]);
+                                        String StartDate = formatStr.format(Start_dataStr);
+                                        String endDate = formatStr.format(end_dataStr);
+                                        if (StartDate.equals(endDate)) {
+                                            myData = StartDate;
+                                        } else {
+                                            myData = StartDate + "-" + endDate;
+                                        }
+                                    } else {
+                                        String[] dataStr = myData.split("T")[0].split("-");
+                                        myData = StringUtil.format("{}年{}月{}日", dataStr[0], dataStr[1], Integer.parseInt(dataStr[2]) + 1);
+                                    }
+                                }
+
+                                /*if (myData.contains("T") && myData.contains("-") && myData.contains(":")) {
+                                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+                                    sdf.setTimeZone(TimeZone.getTimeZone("GTM+8"));
+                                    SimpleDateFormat formatStr = new SimpleDateFormat("yyyy年MM月dd日");
+
                                     if (myData.contains(",") && myData.contains("]")) {
                                         myData = myData.replace("[", "").replace("]", "").replaceAll("'", "");
                                         String[] dataVal = myData.split(",");
@@ -1628,6 +1812,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                         String StartDate = StringUtil.format("{}年{}月{}日", Start_dataStr[0], Start_dataStr[1], Integer.parseInt(Start_dataStr[2]) + 1).trim();
 
                                         String[] end_dataStr = dataVal[1].split("T")[0].split("-");
+
                                         String endDate = StringUtil.format("{}年{}月{}日", end_dataStr[0], end_dataStr[1], Integer.parseInt(end_dataStr[2]) + 1).trim();
                                         if (StartDate.equals(endDate)) {
                                             myData = StartDate;
@@ -1638,7 +1823,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                         String[] dataStr = myData.split("T")[0].split("-");
                                         myData = StringUtil.format("{}年{}月{}日", dataStr[0], dataStr[1], Integer.parseInt(dataStr[2]) + 1);
                                     }
-                                }
+                                }*/
+
                                 if (myData.contains("https") && myData.contains("aliyuncs")) {
                                     BufferedImage image = ImageIO.read(CommonUtil.getOSSInputStream(myData));
                                     int colspan = data.attr("COLSPAN").equals("") ? 0 : Integer.parseInt(data.attr("COLSPAN"));
@@ -1846,22 +2032,23 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     public void saveOrUpdateInfoTrial(List<TableInfo> tableInfoList, Long groupId) {
         //试验填报
         if (ListUtils.isNotEmpty(tableInfoList)) {
-            try {
-                for (TableInfo tableInfo : tableInfoList) {
-                    WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
-                            .eq(WbsTreePrivate::getPKeyId, tableInfo.getPkeyId()));
-                    if (wbsTreePrivate == null) {
-                        continue;
-                    }
 
-                    String tabName = wbsTreePrivate.getInitTableName();
-                    //判读修改还是添加
-                    String delSql = "delete from " + tabName + " where p_key_id='" + tableInfo.getPkeyId() + "' and group_id = '" + groupId + "'";
-                    jdbcTemplate.execute(delSql);
+            for (TableInfo tableInfo : tableInfoList) {
+                WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                        .select(WbsTreePrivate::getInitTableName)
+                        .eq(WbsTreePrivate::getPKeyId, tableInfo.getPkeyId()));
+                if (wbsTreePrivate == null || StringUtils.isEmpty(wbsTreePrivate.getInitTableName())) {
+                    continue;
+                }
+
+                try {
+                    //删除SQL
+                    String delSql = "delete from " + wbsTreePrivate.getInitTableName() + " where p_key_id='" + tableInfo.getPkeyId() + "' and group_id = '" + groupId + "'";
 
+                    //新增SQL
                     String sqlInfo = "";
                     LinkedHashMap<String, String> dataMap2 = tableInfo.getDataMap();
-                    sqlInfo = "INSERT INTO " + tabName + " ( ";
+                    sqlInfo = "INSERT INTO " + wbsTreePrivate.getInitTableName() + " ( ";
                     String keyStr = "id,group_id,";
                     String valStr = SnowFlakeUtil.getId() + "," + groupId + ",";
                     for (String keys : dataMap2.keySet()) {
@@ -1872,10 +2059,23 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     valStr = valStr.substring(0, valStr.lastIndexOf(","));
                     sqlInfo = sqlInfo + keyStr + ") VALUES (" + valStr + ")";
 
-                    jdbcTemplate.execute(sqlInfo);
+                    TransactionStatus transactionStatus = this.beginTransaction(transactionManager1);
+                    try {
+                        //删除
+                        jdbcTemplate.execute(delSql);
+                        //新增
+                        jdbcTemplate.execute(sqlInfo);
+                        //提交事务
+                        transactionManager1.commit(transactionStatus);
+                    } catch (Exception e) {
+                        //回滚
+                        transactionManager1.rollback(transactionStatus);
+
+                        throw new ServiceException("字段过长,新增失败");
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
                 }
-            } catch (Exception e) {
-                e.printStackTrace();
             }
         }
     }

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

@@ -1697,6 +1697,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     @Override
     public List<WbsTreePrivate> searchNodeAllTable(String primaryKeyId, String tableOwner, String tableType, String contractId, String projectId, Integer isAdd, Long id) {
         WbsTreePrivate wbsTreePrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .select(WbsTreePrivate::getProjectId, WbsTreePrivate::getWbsId, WbsTreePrivate::getId)
                 .eq(WbsTreePrivate::getPKeyId, primaryKeyId));
         if (wbsTreePrivate == null) {
             return Collections.emptyList();
@@ -1729,34 +1730,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             tableOwnerList = Func.toStrList(tableOwners);
         }
 
-        List<WbsTreePrivate> wbsTreePrivates = baseMapper.selectWbsTreeContractList(roleAndTabOwners, tableType, wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId(), wbsTreePrivate.getId(), tableOwnerList);
-
-        if (ObjectUtil.isNotEmpty(id)) { //编辑
-            //获取当前试验记录信息中的表状态
-            String sql = "select * from u_trial_self_data_record where record_id = " + id;
-            List<TrialSelfDataRecord> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TrialSelfDataRecord.class));
-
-            for (WbsTreePrivate treePrivate : wbsTreePrivates) {
-                for (TrialSelfDataRecord record : query) {
-                    if (treePrivate.getPKeyId().equals(record.getTabId())) {
-                        treePrivate.setIsBussShow(record.getIsBussShow());
-                        treePrivate.setIsTabPdf(record.getIsTabPdf());
-                        treePrivate.setTabFileType(record.getIsTabFileType());
-                    }
-                }
-            }
-            return wbsTreePrivates;
-        }
-
-        if (isAdd == 1 && ObjectUtil.isEmpty(id)) { //新增时处理按钮显示问题
-            for (WbsTreePrivate treePrivate : wbsTreePrivates) {
-                treePrivate.setPdfUrl(null);
-                treePrivate.setIsBussShow(1);
-                treePrivate.setIsTabPdf(1);
-                treePrivate.setTabFileType(1);
-            }
-        }
-        return wbsTreePrivates;
+        return baseMapper.selectWbsTreeContractList(roleAndTabOwners, tableType, wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId(), wbsTreePrivate.getId(), tableOwnerList);
     }
 
     @Override