Parcourir la source

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

yangyj il y a 2 ans
Parent
commit
1d22955e3c
29 fichiers modifiés avec 373 ajouts et 163 suppressions
  1. 0 1
      blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java
  2. 2 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/dto/ArchivesAutoDTO.java
  3. 0 36
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/SampleAncillaryDocumentsVO.java
  4. 18 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialRecordAncillaryDocumentsVO.java
  5. 18 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialSelfInspectionRecordFileVO.java
  6. 1 3
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreePrivateClient.java
  7. 6 0
      blade-service/blade-archive/pom.xml
  8. 22 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/config/sqliteConfig.java
  9. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveOfflineVersionInfoController.java
  10. 5 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  11. 6 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  12. 1 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveOfflineVersionInfoService.java
  13. 85 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java
  14. 20 6
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java
  15. 3 3
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  16. 4 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSelfInspectionRecordService.java
  17. 0 5
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  18. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDetectionDataServiceImpl.java
  19. 48 50
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  20. 1 1
      blade-service/blade-business/src/main/resources/application-dev.yml
  21. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  22. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TableFileController.java
  23. 5 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  24. 3 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  25. 1 12
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java
  26. 3 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  27. 31 26
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  28. 77 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  29. 4 3
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java

+ 0 - 1
blade-common/src/main/java/org/springblade/common/utils/AsyncConfigurer.java

@@ -32,7 +32,6 @@ public class AsyncConfigurer {
                 , new ThreadPoolExecutor.DiscardOldestPolicy(), "manager-thread-pool");
     }
 
-
     /**
      * 线程池配置
      *

+ 2 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/dto/ArchivesAutoDTO.java

@@ -31,4 +31,6 @@ import lombok.EqualsAndHashCode;
 public class ArchivesAutoDTO extends ArchivesAuto {
 	private static final long serialVersionUID = 1L;
 
+	//拼接档案下所有文件的pdf
+	private String allFilePdf;
 }

+ 0 - 36
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/SampleAncillaryDocumentsVO.java

@@ -1,36 +0,0 @@
-package org.springblade.business.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-
-@Data
-public class SampleAncillaryDocumentsVO implements Serializable {
-
-    @ApiModelProperty("材料id")
-    private Long id;
-
-    @ApiModelProperty("材料名称")
-    private String name;
-
-    @ApiModelProperty(value = "生产合格证")
-    private String productionCertificate;
-
-    @ApiModelProperty(value = "生产合格证名称")
-    private String productionCertificateName;
-
-    @ApiModelProperty(value = "厂家质检报告")
-    private String qualityInspectionReport;
-
-    @ApiModelProperty(value = "厂家质检报告名称")
-    private String qualityInspectionReportName;
-
-    @ApiModelProperty(value = "其他附件")
-    private String otherAccessories;
-
-    @ApiModelProperty(value = "其他附件名称")
-    private String otherAccessoriesName;
-
-}

+ 18 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialRecordAncillaryDocumentsVO.java

@@ -0,0 +1,18 @@
+package org.springblade.business.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TrialRecordAncillaryDocumentsVO implements Serializable {
+
+    private Long id;
+
+    private String fileName;
+
+    private String url;
+
+    private Integer isDel;
+
+}

+ 18 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TrialSelfInspectionRecordFileVO.java

@@ -0,0 +1,18 @@
+package org.springblade.business.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TrialSelfInspectionRecordFileVO implements Serializable {
+
+    private Long id;
+
+    private Long selfId;
+
+    private String url;
+
+    private Integer type;
+
+}

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

@@ -1,5 +1,6 @@
 package org.springblade.manager.feign;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
 import org.springblade.manager.vo.WbsTreePrivateVO;
@@ -42,9 +43,6 @@ public interface WbsTreePrivateClient {
     @PostMapping(API_PREFIX + "/copyBussTab")
     boolean copyBussTab(@RequestParam Long pKeyId, @RequestParam Long id, @RequestParam Long contractId);
 
-    @PostMapping(API_PREFIX + "/removeBussTabInfoById")
-    boolean removeBussTabInfoById(@RequestParam Long pKeyId);
-
     @PostMapping(API_PREFIX + "/getRawMaterialTree")
     List<WbsTreePrivateVO> getRawMaterialTree(@RequestParam Long pKeyId);
 

+ 6 - 0
blade-service/blade-archive/pom.xml

@@ -23,6 +23,12 @@
     </repositories>
 
     <dependencies>
+        <!--sqlite-->
+        <dependency>
+            <groupId>org.xerial</groupId>
+            <artifactId>sqlite-jdbc</artifactId>
+            <version>3.41.2.0</version>
+        </dependency>
         <dependency>
             <groupId>org.springblade</groupId>
             <artifactId>blade-core-boot</artifactId>

+ 22 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/config/sqliteConfig.java

@@ -0,0 +1,22 @@
+package org.springblade.archive.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/3/30 10:57
+ **/
+@Component
+public class sqliteConfig {
+    public DataSource dataSource(){
+        DruidDataSource ds = new DruidDataSource();
+        ds.setUrl("jdbc:sqlite:D:\\develop\\test\\test330.db");
+        ds.setDriverClassName("org.sqlite.JDBC");
+        return ds;
+    }
+
+}

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveOfflineVersionInfoController.java

@@ -29,6 +29,7 @@ import java.text.DecimalFormat;
 public class ArchiveOfflineVersionInfoController {
 
     private final ArchiveOfflineVersionInfoMapper mapper;
+    private final IArchiveOfflineVersionInfoService offlineVersionInfoService;
 
     /**
      * 打包数据
@@ -37,6 +38,7 @@ public class ArchiveOfflineVersionInfoController {
     @GetMapping("/packData")
     public R<String> packData(Long projectId){
         //异步调用自动打包上传,完成后修改数据库信息
+        offlineVersionInfoService.packData(projectId);
         return R.data("最新数据后台自动打包中,打包完成后会更新打包日期");
     }
     /**

+ 5 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -17,6 +17,7 @@
 package org.springblade.archive.mapper;
 
 import org.apache.ibatis.annotations.Param;
+import org.springblade.archive.dto.ArchivesAutoDTO;
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.vo.ArchivesAutoVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -51,4 +52,8 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 	 * @param projectId
 	 */
     Integer splitArchvies(@Param("projectId") Long projectId);
+	/**
+	 *  根据项目id获取所有档案
+	 */
+	List<ArchivesAutoDTO> getListByProjectId(@Param("projectId") Long projectId);
 }

+ 6 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -119,5 +119,11 @@
             and is_lock=0;
     </update>
 
+    <select id="getListByProjectId" resultType="org.springblade.archive.dto.ArchivesAutoDTO">
+        select id,project_id as projectId,name,unit,storage_time as storageTime,node_id as nodeId,tree_sort as treeSort,status,is_deleted as isDeleted,is_lock as isLock,create_time as createTime
+        from u_archives_auto
+        where project_id=#{projectId};
+    </select>
+
 
 </mapper>

+ 1 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveOfflineVersionInfoService.java

@@ -9,4 +9,5 @@ import org.springblade.core.mp.base.BaseService;
  * @Date 2023/3/31 10:09
  **/
 public interface IArchiveOfflineVersionInfoService extends BaseService<ArchiveOfflineVersionInfo> {
+    void packData(Long projectId);
 }

+ 85 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java

@@ -1,16 +1,101 @@
 package org.springblade.archive.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.archive.config.sqliteConfig;
+import org.springblade.archive.dto.ArchivesAutoDTO;
 import org.springblade.archive.entity.ArchiveOfflineVersionInfo;
+import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.mapper.ArchiveOfflineVersionInfoMapper;
+import org.springblade.archive.mapper.ArchivesAutoMapper;
 import org.springblade.archive.service.IArchiveOfflineVersionInfoService;
+import org.springblade.archive.service.IArchivesAutoService;
+import org.springblade.archive.utils.FileUtils;
+import org.springblade.business.entity.ArchiveFile;
+import org.springblade.business.feign.ArchiveFileClient;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @Param
  * @Author wangwl
  * @Date 2023/3/31 10:09
  **/
 @Service
+@AllArgsConstructor
 public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<ArchiveOfflineVersionInfoMapper, ArchiveOfflineVersionInfo> implements IArchiveOfflineVersionInfoService {
+    private final sqliteConfig data;
+    private final ArchivesAutoMapper autoMapper;
+    private final ArchiveFileClient fileClient;
+
+    @Override
+    public void packData(Long projectId) {
+        List<ArchivesAutoDTO> list = autoMapper.getListByProjectId(projectId);
+        String localUrl = "D:\\develop\\aliyun\\";
+        //拼接档案里文件的pdf设置allPdf
+        for (ArchivesAutoDTO dto : list) {
+            List<ArchiveFile> files = fileClient.getArchiveFileByArchivesId(dto.getId()+"","");
+            if (files != null && files.size() >0){
+                List<String> urlList = new ArrayList<>();
+                for (ArchiveFile file : files) {
+                    if (StringUtil.isNotBlank(file.getPdfFileUrl())){
+                        urlList.add(file.getPdfFileUrl());
+                    }
+                }
+                if (urlList.size() > 0){
+                    Long id = SnowFlakeUtil.getId();
+                    FileUtils.mergePdfPublicMethods(urlList,localUrl+id+".pdf");
+                    dto.setAllFilePdf(localUrl+id+".pdf");
+                }
+            }
+
+        }
+        try  {
+            Connection conn = data.dataSource().getConnection();
+            //获取执行对象
+            String sql = "INSERT INTO u_archives_auto (id, project_id, name, file_number, unit,storage_time, is_archive,node_id, status, is_deleted,create_time,all_file_pdf)" +
+                    "VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
+            PreparedStatement pstm = conn.prepareStatement(sql);
+            //pstm 绑定数据
+            int i=0;
+            for (ArchivesAutoDTO auto : list) {
+                i++;
+                pstm.setLong(1,auto.getId());
+                pstm.setLong(2,auto.getProjectId());
+                pstm.setString(3,auto.getName());
+                pstm.setString(4,auto.getFileNumber());
+                pstm.setString(5,auto.getUnit());
+                pstm.setString(6,auto.getStorageTime());
+                pstm.setInt(7,auto.getIsArchive()==null?0:1);
+                pstm.setLong(8,auto.getNodeId());
+                pstm.setInt(9,auto.getStatus());
+                pstm.setInt(10,auto.getIsDeleted());
+                pstm.setString(11,  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(auto.getCreateTime()));
+                pstm.setString(12,auto.getAllFilePdf()==null?"":auto.getAllFilePdf());
+
+                //添加批处理
+                pstm.addBatch();
+                if (i % 1000 == 0) {
+                    pstm.executeBatch();
+                    pstm.clearBatch();
+                }
+            }
+            //将批处理余下的语句执行完毕
+            pstm.executeBatch();
+            //释放资源
+            pstm.close();
+            conn.close();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
 }

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

@@ -119,17 +119,24 @@ public class TrialDetectionController extends BladeController {
     @GetMapping("/self/ancillary-documents-list")
     @ApiOperationSupport(order = 9)
     @ApiOperation(value = "自检记录附件列表", notes = "传入记录id")
-    public R<List<SampleAncillaryDocumentsVO>> selfAncillaryDocumentsList(@Valid @RequestParam String id) {
-        return R.data(iTrialSelfInspectionRecordService.selfAncillaryDocumentsList(id));
+    public R<List<TrialRecordAncillaryDocumentsVO>> selfAncillaryDocumentsList(@RequestParam String id, @RequestParam String type) {
+        return R.data(iTrialSelfInspectionRecordService.selfAncillaryDocumentsList(id, type));
     }
 
     @PostMapping("/self/update-ancillary-documents")
     @ApiOperationSupport(order = 10)
-    @ApiOperation(value = "自检记录修改附件", notes = "传入SampleAncillaryDocumentsVO")
-    public R<Object> selfUpdateAncillaryDocuments(@Valid @RequestBody SampleAncillaryDocumentsVO vo) {
+    @ApiOperation(value = "自检记录附件上传", notes = "传入TrialSelfInspectionRecordFileVO")
+    public R<Object> selfUpdateAncillaryDocuments(@Valid @RequestBody TrialSelfInspectionRecordFileVO vo) {
         return R.status(iTrialSelfInspectionRecordService.selfUpdateAncillaryDocuments(vo));
     }
 
+    @PostMapping("/self/remove-ancillary-documents")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "自检记录附件删除", notes = "传入附件id")
+    public R<Object> selfRemoveAncillaryDocuments(@RequestParam String id) {
+        return R.status(iTrialSelfInspectionRecordService.selfRemoveAncillaryDocuments(id));
+    }
+
     @PostMapping("/self/submit")
     @ApiOperationSupport(order = 11)
     @ApiOperation(value = "自检记录新增或修改", notes = "传入TrialSelfInspectionRecordDTO")
@@ -238,8 +245,15 @@ public class TrialDetectionController extends BladeController {
     @PostMapping("/self/remove-buss-tab")
     @ApiOperationSupport(order = 16)
     @ApiOperation(value = "自检删除复制的表", notes = "传入节点pKeyId")
-    public R<Object> removeBussTabInfo(@RequestParam Long pKeyId) {
-        return R.status(wbsTreePrivateClient.removeBussTabInfoById(pKeyId));
+    public R<String> removeBussTabInfo(@RequestParam Long pKeyId) {
+        //查询当前表是否已经填报
+        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) {
+            return R.fail("当前表在试验记录中有填报数据,删除失败");
+        } else {
+            jdbcTemplate.execute("delete from m_wbs_tree_private where p_key_id = " + pKeyId);
+            return R.success("删除成功");
+        }
     }
 
     @GetMapping("/get-buss-pdf")

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

@@ -171,9 +171,9 @@
         CASE (select count(tcf.id) from u_tree_contract_first AS tcf where tcf.is_deleted = 0 and tcf.wbs_node_id = wtc.p_key_id) WHEN 0 THEN 'false' ELSE 'true' END AS isFirst,
 			 ( SELECT count(1) from m_wbs_tree_contract where id in(SELECT parent_id from m_wbs_tree_contract a where a.is_deleted=0 and a.type=2 and table_owner in(1,2,3)) and contract_id=wtc.contract_id and type =1 and is_deleted=0 and (FIND_IN_SET(wtc.id,ancestors) or wtc.p_key_id=p_key_id)
 				) as allCount,
-			 (SELECT count(1) from m_wbs_tree_contract a ,u_information_query b where a.p_key_id=b.wbs_id and FIND_IN_SET(wtc.id,a.ancestors)  and a.contract_id=wtc.contract_id and b.is_deleted=0 and a.is_deleted=0 and a.`status`=0 and b.classify=1) as savaCont,
-			 (SELECT count(1) from m_wbs_tree_contract a ,u_information_query b where a.p_key_id=b.wbs_id and FIND_IN_SET(wtc.id,a.ancestors)  and a.contract_id=wtc.contract_id and b.is_deleted=0 and a.is_deleted=0 and a.`status`=1 and b.classify=1) as submitCount,
-			 (SELECT count(1) from m_wbs_tree_contract a ,u_information_query b where a.p_key_id=b.wbs_id and FIND_IN_SET(wtc.id,a.ancestors)  and a.contract_id=wtc.contract_id and b.is_deleted=0 and a.is_deleted=0 and a.`status`=2 and b.classify=1) as appCount
+			 (SELECT count(1) from u_information_query b where b.wbs_id in(SELECT p_key_id from m_wbs_tree_contract a where (FIND_IN_SET(wtc.id,a.ancestors) or wtc.p_key_id=a.p_key_id) and a.is_deleted=0 and a.`status`='0' ) and b.is_deleted=0 and b.classify=1) as savaCont,
+			 (SELECT count(1) from u_information_query b where b.wbs_id in(SELECT p_key_id from m_wbs_tree_contract a where (FIND_IN_SET(wtc.id,a.ancestors) or wtc.p_key_id=a.p_key_id) and a.is_deleted=0 and a.`status`='1' ) and b.is_deleted=0 and b.classify=1) as submitCount,
+			 (SELECT count(1) from u_information_query b where b.wbs_id in(SELECT p_key_id from m_wbs_tree_contract a where (FIND_IN_SET(wtc.id,a.ancestors) or wtc.p_key_id=a.p_key_id) and a.is_deleted=0 and a.`status`='2' ) and b.is_deleted=0 and b.classify=1) as appCount
 				FROM
         m_wbs_tree_contract AS wtc
         LEFT JOIN u_contract_tree_drawings AS ctd ON ctd.is_deleted = 0 and ctd.process_id = wtc.p_key_id

+ 4 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSelfInspectionRecordService.java

@@ -19,9 +19,11 @@ public interface ITrialSelfInspectionRecordService extends BaseService<TrialSelf
 
     List<TrialSampleInfoVO> selfSampleList(String id);
 
-    List<SampleAncillaryDocumentsVO> selfAncillaryDocumentsList(String id);
+    List<TrialRecordAncillaryDocumentsVO> selfAncillaryDocumentsList(String id, String type);
 
-    boolean selfUpdateAncillaryDocuments(SampleAncillaryDocumentsVO vo);
+    boolean selfUpdateAncillaryDocuments(TrialSelfInspectionRecordFileVO vo);
+
+    boolean selfRemoveAncillaryDocuments(String id);
 
     boolean selfCopy(List<Long> toLongList);
 
@@ -41,5 +43,4 @@ public interface ITrialSelfInspectionRecordService extends BaseService<TrialSelf
 
     boolean fileSubmit(TrialFileSubmitDTO dto) throws FileNotFoundException;
 
-
 }

+ 0 - 5
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -703,11 +703,6 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         } else {
             //施工合同段
             rootTreeNode = this.queryContractTree(contractId, StringUtils.isNotEmpty(parentId) ? parentId : "0", 1);
-            /*rootTreeNode.stream().forEach(rtn->{
-                if (rtn.getSubmitCounts() > 0L && rtn.getColorStatus() <= 1 && rtn.getNotExsitChild() == false){
-                    rtn.setColorStatus(2);
-                }
-            });*/
         }
         return rootTreeNode;
     }

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

@@ -213,7 +213,7 @@ public class TrialDetectionDataServiceImpl extends BaseServiceImpl<TrialDetectio
         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<String> counts = trialSampleInfoList.stream().map(TrialSampleInfo::getMaterialCount).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
+        List<Integer> counts = trialSampleInfoList.stream().map(TrialSampleInfo::getMaterialCount).filter(ObjectUtil::isNotEmpty).map(Integer::valueOf).collect(Collectors.toList());
         List<Date> samplingDate = trialSampleInfoList.stream().map(TrialSampleInfo::getSamplingDate).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
 
         List<Map<String, String>> resultMapList = new ArrayList<>();
@@ -257,7 +257,7 @@ public class TrialDetectionDataServiceImpl extends BaseServiceImpl<TrialDetectio
                         for (Element element : ypCount) {
                             int trIndex = Integer.parseInt(element.attr("trindex"));
                             if (trIndex <= 6) {
-                                map.put(element.attr("keyName"), ObjectUtils.isNotEmpty(counts) ? counts.stream().map(Integer::valueOf).reduce(Integer::sum).orElse(0).toString() : "");
+                                map.put(element.attr("keyName"), ObjectUtils.isNotEmpty(counts) ? counts.stream().reduce(Integer::sum).orElse(0).toString() : "");
                             }
                         }
                     }

+ 48 - 50
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -44,6 +44,7 @@ import org.springblade.system.entity.Dict;
 import org.springblade.system.feign.IDictClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.context.annotation.Bean;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
@@ -229,9 +230,37 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
     }
 
     @Override
-    public List<SampleAncillaryDocumentsVO> selfAncillaryDocumentsList(String id) {
-        //获取材料附件信息
-        List<SampleAncillaryDocumentsVO> result = new ArrayList<>();
+    public List<TrialRecordAncillaryDocumentsVO> selfAncillaryDocumentsList(String id, String type) {
+        //关联取样附件
+        List<TrialRecordAncillaryDocumentsVO> resultData = new ArrayList<>();
+        this.getRecordAncillaryDocumentList(resultData, id, type);
+
+        //其他上传附件
+        List<TrialSelfInspectionRecordFileVO> queryFileVos = jdbcTemplate.query("select id,self_id,url,type from u_trial_self_inspection_record_file where self_id = " + id + " and type = " + type, new BeanPropertyRowMapper<>(TrialSelfInspectionRecordFileVO.class));
+        for (TrialSelfInspectionRecordFileVO fileVO : queryFileVos) {
+            TrialRecordAncillaryDocumentsVO obj = new TrialRecordAncillaryDocumentsVO();
+            obj.setIsDel(1); //其他可以删除
+            obj.setId(fileVO.getId());
+            obj.setUrl(fileVO.getUrl());
+            resultData.add(obj);
+        }
+
+        Map<String, Attach> maps = jdbcTemplate.query("select link,original_name from blade_attach", new BeanPropertyRowMapper<>(Attach.class)).stream().collect(Collectors.toMap(Attach::getLink, Attach -> Attach, (obj1, obj2) -> obj1));
+        for (TrialRecordAncillaryDocumentsVO vo : resultData) {
+            Attach att = maps.get(vo.getUrl());
+            if (att != null) {
+                //文件名
+                vo.setFileName(ObjectUtil.isNotEmpty(att.getOriginalName()) ? att.getOriginalName() : "没有找到对应的上传文件名称");
+            }
+            if (ObjectUtil.isEmpty(vo.getFileName())) {
+                String name = vo.getUrl().split("//upload/")[1].split("/")[1];
+                vo.setFileName(name);
+            }
+        }
+        return resultData;
+    }
+
+    private void getRecordAncillaryDocumentList(List<TrialRecordAncillaryDocumentsVO> result, String id, String type) {
         //获取样品ids
         List<String> sampleIds = baseMapper.selectSelfSampleRecord(id);
         if (sampleIds.size() > 0) {
@@ -246,62 +275,31 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
             if (mobilizationIds.size() > 0) {
                 List<TrialMaterialMobilization> trialMaterialMobilizations = trialMaterialMobilizationMapper.selectBatchIds(mobilizationIds);
                 for (TrialMaterialMobilization trialMaterialMobilization : trialMaterialMobilizations) {
-                    SampleAncillaryDocumentsVO obj = new SampleAncillaryDocumentsVO();
+                    TrialRecordAncillaryDocumentsVO obj = new TrialRecordAncillaryDocumentsVO();
                     obj.setId(trialMaterialMobilization.getId());
-                    obj.setName(trialMaterialMobilization.getMaterialName());
-                    obj.setOtherAccessories(trialMaterialMobilization.getOtherAccessories());
-                    obj.setProductionCertificate(trialMaterialMobilization.getProductionCertificate());
-                    obj.setQualityInspectionReport(trialMaterialMobilization.getQualityInspectionReport());
+                    if ("1".equals(type)) {
+                        obj.setUrl(trialMaterialMobilization.getProductionCertificate());
+                    } else if ("2".equals(type)) {
+                        obj.setUrl(trialMaterialMobilization.getQualityInspectionReport());
+                    } else if ("3".equals(type)) {
+                        obj.setUrl(trialMaterialMobilization.getOtherAccessories());
+                    }
+                    obj.setIsDel(0); //关联的取样文件不能删除
                     result.add(obj);
                 }
             }
         }
-
-        String sql = "select link,original_name from blade_attach";
-        List<Attach> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Attach.class));
-        for (SampleAncillaryDocumentsVO sampleAncillaryDocumentsVO : result) {
-            for (Attach attach : query) {
-                if (StringUtils.isNotEmpty(sampleAncillaryDocumentsVO.getOtherAccessories()) && sampleAncillaryDocumentsVO.getOtherAccessories().equals(attach.getLink())) {
-                    sampleAncillaryDocumentsVO.setOtherAccessoriesName(attach.getOriginalName());
-                } else if (StringUtils.isNotEmpty(sampleAncillaryDocumentsVO.getOtherAccessories()) && !sampleAncillaryDocumentsVO.getOtherAccessories().equals(attach.getLink())) {
-                    sampleAncillaryDocumentsVO.setOtherAccessoriesName(sampleAncillaryDocumentsVO.getOtherAccessories());
-                }
-
-                if (StringUtils.isNotEmpty(sampleAncillaryDocumentsVO.getProductionCertificate()) && sampleAncillaryDocumentsVO.getProductionCertificate().equals(attach.getLink())) {
-                    sampleAncillaryDocumentsVO.setProductionCertificateName(attach.getOriginalName());
-                } else if (StringUtils.isNotEmpty(sampleAncillaryDocumentsVO.getProductionCertificate()) && !sampleAncillaryDocumentsVO.getProductionCertificate().equals(attach.getLink())) {
-                    sampleAncillaryDocumentsVO.setProductionCertificateName(sampleAncillaryDocumentsVO.getProductionCertificate());
-                }
-
-                if (StringUtils.isNotEmpty(sampleAncillaryDocumentsVO.getQualityInspectionReport()) && sampleAncillaryDocumentsVO.getQualityInspectionReport().equals(attach.getLink())) {
-                    sampleAncillaryDocumentsVO.setQualityInspectionReportName(attach.getOriginalName());
-                } else if (StringUtils.isNotEmpty(sampleAncillaryDocumentsVO.getQualityInspectionReport()) && !sampleAncillaryDocumentsVO.getQualityInspectionReport().equals(attach.getLink())) {
-                    sampleAncillaryDocumentsVO.setQualityInspectionReportName(sampleAncillaryDocumentsVO.getQualityInspectionReport());
-                }
-            }
-        }
-
-        return result;
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean selfUpdateAncillaryDocuments(SampleAncillaryDocumentsVO vo) {
-        TrialMaterialMobilization trialMaterialMobilization = trialMaterialMobilizationMapper.selectById(vo.getId());
-        if (ObjectUtil.isEmpty(trialMaterialMobilization)) {
-            throw new ServiceException("未获取到对应材料信息,修改失败");
-        }
-        if (StringUtils.isNotEmpty(vo.getQualityInspectionReport())) {
-            trialMaterialMobilization.setQualityInspectionReport(vo.getQualityInspectionReport());
-        }
-        if (StringUtils.isNotEmpty(vo.getOtherAccessories())) {
-            trialMaterialMobilization.setOtherAccessories(vo.getOtherAccessories());
-        }
-        if (StringUtils.isNotEmpty(vo.getProductionCertificate())) {
-            trialMaterialMobilization.setProductionCertificate(vo.getProductionCertificate());
-        }
-        trialMaterialMobilizationMapper.updateById(trialMaterialMobilization);
+    public boolean selfUpdateAncillaryDocuments(TrialSelfInspectionRecordFileVO vo) {
+        jdbcTemplate.execute("insert into u_trial_self_inspection_record_file (id,self_id,url,type) values (" + SnowFlakeUtil.getId() + "," + vo.getSelfId() + ",'" + vo.getUrl() + "'," + vo.getType() + ")");
+        return true;
+    }
 
+    @Override
+    public boolean selfRemoveAncillaryDocuments(String id) {
+        jdbcTemplate.execute("delete from u_trial_self_inspection_record_file where id = " + id);
         return true;
     }
 

+ 1 - 1
blade-service/blade-business/src/main/resources/application-dev.yml

@@ -1,6 +1,6 @@
 #服务器端口
 server:
-  port: 15399
+  port: 5399
 
 #数据源配置
 spring:

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

@@ -549,6 +549,10 @@ public class ExcelTabController extends BladeController {
                                 .attr("@blur", "getRegularExpression(" + regularExpression + ",'" + filedLength + "')")
                                 .attr("v-model", "formData." + attrInfo)
                                 .attr("maxlength", filedLength);
+                        if(element.html().indexOf("el-input") >= 0){
+                            String mousedown = "$event" + "," + "'" + attrInfo + "'";
+                            element.children().get(0).attr("@mousedown.left", "inputLeftClick("+mousedown+")");
+                        }
                     } else {
                         element.children().get(0).attr("placeholder", lastName)
                                 .attr("weighing", maxScore + "").attr("id", attrInfo).attr("keyName", attrInfo)

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

@@ -130,7 +130,7 @@ public class TableFileController extends BladeController {
 
         Long pkeyId = Long.parseLong(tableFile.getTabId() + "");
         //单pdf
-        excelTabService.getBussPDFTrial(pkeyId, contractId, id);
+        excelTabService.getBussPDFTrial(pkeyId, contractId, id, 0, 0);
 
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                 .eq(WbsTreePrivate::getPKeyId, pkeyId));

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

@@ -257,10 +257,12 @@ public class TextdictInfoController extends BladeController {
 
         String vmode = "formData." + keyname;
         if (textdictInfo.getTextId().equals("input")) { // 文本框
-            element.empty().append("<el-input type='text' id=" + keyname + " @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " 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%' > </el-input>");
+            element.empty().append("<el-input  @mousedown.left='inputLeftClick($event, '"+keyname+"')' type='text' id=" + keyname + " @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " 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%' > </el-input>");
+
         } else if (textdictInfo.getTextId().equals("textarea")) { // 文本域
             int rowspan = element.attr("ROWSPAN").equals("") ? 0 : Integer.parseInt(element.attr("ROWSPAN"));
-            element.empty().append("<el-input :rows=" + rowspan * 2 + " id=" + keyname + " @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight'  type='textarea' placeholder=" + placeholder + " v-model=" + vmode + "    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%'  > </el-input>");
+            element.empty().append("<el-input  :rows=" + rowspan * 2 + " id=" + keyname + " @mousedown.left='inputLeftClick($event, '"+keyname+"')' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight'  type='textarea' placeholder=" + placeholder + " v-model=" + vmode + "    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%'  > </el-input>");
+
         } else if (textdictInfo.getTextId().equals("select")) { // 下拉框
             String selectText = " <el-select id=" + keyname + " v-model=" + vmode + " @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' keyname=" + keyname + " weighing=" + weighing + " placeholder=" + placeholder + " trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">"; //v-model="+keyname+"
             List<TextdictInfo_vo> optionList = textdictInfo.getTextInfo();
@@ -270,6 +272,7 @@ public class TextdictInfoController extends BladeController {
             }
             selectText += "</el-select>";
             element.empty().append(selectText);
+
         } else if (textdictInfo.getTextId().equals("radio")) { // 单选按钮
 
             String radioText = "<el-radio-group id=" + keyname + " @keyDowns='dateKeydown' v-model=" + vmode + " keyname=" + keyname + " weighing=" + weighing + " placeholder=" + placeholder + " trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">";

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

@@ -51,7 +51,7 @@ public class ExcelTabClientImpl implements ExcelTabClient {
     }
 
     @Override
-    public String saveTabData(TrialSelfInspectionRecordDTO dto, Integer isBatchSave,Integer type, String tableType, Long id, String tabIds) throws Exception {
+    public String saveTabData(TrialSelfInspectionRecordDTO dto, Integer isBatchSave, Integer type, String tableType, Long id, String tabIds) throws Exception {
         //通用参数
         String pdfUrl = "";
         JSONArray dataArray = dto.getDataInfo().getJSONArray("orderList");
@@ -79,7 +79,7 @@ public class ExcelTabClientImpl implements ExcelTabClient {
             assert tableInfo != null;
             if (tabIds.contains(tableInfo.getPkeyId())) {
                 //构造pdf
-                excelTabService.getBussPDFTrial(Long.valueOf(tableInfo.getPkeyId()), contractId, id);
+                excelTabService.getBussPDFTrial(Long.valueOf(tableInfo.getPkeyId()), contractId, id, 0, 0);
 
                 //重新合并pdf
                 String sql = "select pdf_url from u_trial_self_data_record where record_id = " + id;
@@ -130,7 +130,7 @@ public class ExcelTabClientImpl implements ExcelTabClient {
 
     @Override
     public void getBussPDFTrial(Long pkeyId, String contractId, String id) throws Exception {
-        excelTabService.getBussPDFTrial(pkeyId, contractId, Long.parseLong(id));
+        excelTabService.getBussPDFTrial(pkeyId, contractId, Long.parseLong(id), 0, 0);
     }
 
     @Override

+ 1 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java

@@ -10,6 +10,7 @@ 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.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
@@ -152,18 +153,6 @@ public class WbsTreePrivateClientImpl implements WbsTreePrivateClient {
         return false;
     }
 
-    @Override
-    public boolean removeBussTabInfoById(Long pKeyId) {
-        //查询当前表是否已经填报
-        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
     public List<WbsTreePrivateVO> getRawMaterialTree(Long pKeyId) {
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, pKeyId));

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

@@ -106,7 +106,7 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     Map<String, String> getTablbCols(String pkeyid, String colkey) throws FileNotFoundException;
 
     // 获取用户端 单个表单接口数据
-    R getBussDataInfo(Long pkeyId,int type);
+    R getBussDataInfo(Long pkeyId, int type);
 
     // 单个pdf 生成
     R getBussPdfInfo(Long pkeyId) throws Exception;
@@ -129,7 +129,7 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     /**
      * 获取试验用户端 单个表单接口数据
      */
-    List<Map<String, Object>> getBussDataInfoTrial(Long id, Long pkeyId,Long contractId);
+    List<Map<String, Object>> getBussDataInfoTrial(Long id, Long pkeyId, Long contractId);
 
     /**
      * 获取试验用户端 单个表单接口数据 - 关联施工
@@ -139,7 +139,7 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     /**
      * 单PDF 生成 - 试验
      */
-    String getBussPDFTrial(Long pKeyId, String contractId, Long id) throws Exception;
+    String getBussPDFTrial(Long pKeyId, String contractId, Long id, int pageNumber, int pageNumberCount) throws Exception;
 
     /**
      * 多PDF 合并 - 试验

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

@@ -796,7 +796,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 //保存操作记录
                 this.operationLogClient.saveUserOperationLog(1, "资料填报", "工序填报页面", json);
                 // 更新redis
-                informationQueryClient.AsyncWbsTree(wbsTreeContract.getParentId()+"",wbsTreeContract.getParentId()+"",wbsTreeContract.getContractId(),"","1");
+                informationQueryClient.AsyncWbsTree(wbsTreeContractByP.getParentId()+"",wbsTreeContractByP.getParentId()+"",wbsTreeContractByP.getContractId(),"","1");
             } catch (Exception e) {
                 e.printStackTrace();
                 return R.fail("操作失败");
@@ -1882,7 +1882,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
      * 试验 单pdf
      */
     @Override
-    public String getBussPDFTrial(Long pkeyId, String contractId, Long id) throws Exception {
+    public String getBussPDFTrial(Long pkeyId, String contractId, Long id, int pageNumber, int pageNumberCount) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                 .eq(WbsTreePrivate::getPKeyId, pkeyId));
@@ -1916,16 +1916,12 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         wb.loadFromMHtml(CommonUtil.getOSSInputStream(excelTab.getFileUrl()));
         //获取工作表
         Worksheet sheet = wb.getWorksheets().get(0);
-        /*//标题添加
-        ProjectInfo projectInfo = projectInfoService.getById(wbsTreePrivate.getProjectId());
-        CellRange[] columns = sheet.getMergedCells();
-        for (CellRange cellRange : columns) {
-            if (cellRange.getStyle().getFont().getSize() >= 17) {
-                cellRange.setText(projectInfo.getProjectName());
-                cellRange.getStyle().getFont().setSize(20);
-                break;
-            }
-        }*/
+
+        //页码
+        PageSetup pageSetup = sheet.getPageSetup();
+        if (pageNumber != 0 && pageNumberCount != 0) {
+            pageSetup.setRightHeader("第" + pageNumber + "页,共" + pageNumberCount + "页");
+        }
 
         //数据不为空
         if (StringUtils.isNotEmpty(wbsTreePrivate.getHtmlUrl())) {
@@ -2140,23 +2136,32 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         List<WbsTreePrivate> recordTable = queryList.stream().filter(f -> f.getTableType() == 1).collect(Collectors.toList());
 
         if (queryList.size() > 0) {
-            for (WbsTreePrivate report : reportTable) {
-                //没有excel表单的不生成pdf
-                if (StringUtils.isNotEmpty(report.getHtmlUrl())) {
-                    //生成报告单pdf
-                    String bussPdfInfo = this.getBussPDFTrial(report.getPKeyId(), contractId, id);
-                    if (StringUtils.isNotEmpty(bussPdfInfo)) {
-                        dataPdfUrls.add(bussPdfInfo);
+            int reportPageNumber = 1;
+            int reportPageNumberCount = reportTable.size();
+            if (reportTable.size() > 0) {
+                for (WbsTreePrivate report : reportTable) {
+                    //没有excel表单的不生成pdf
+                    if (StringUtils.isNotEmpty(report.getHtmlUrl())) {
+                        //生成报告单pdf
+                        String bussPdfInfo = this.getBussPDFTrial(report.getPKeyId(), contractId, id, reportPageNumber++, reportPageNumberCount);
+                        if (StringUtils.isNotEmpty(bussPdfInfo)) {
+                            dataPdfUrls.add(bussPdfInfo);
+                        }
                     }
                 }
             }
-            for (WbsTreePrivate record : recordTable) {
-                //没有excel表单的不生成pdf
-                if (StringUtils.isNotEmpty(record.getHtmlUrl())) {
-                    //生成记录表pdf
-                    String bussPdfInfo = this.getBussPDFTrial(record.getPKeyId(), contractId, id);
-                    if (StringUtils.isNotEmpty(bussPdfInfo)) {
-                        dataPdfUrls.add(bussPdfInfo);
+
+            int recordPageNumber = 1;
+            int recordPageNumberCount = recordTable.size();
+            if (recordTable.size() > 0) {
+                for (WbsTreePrivate record : recordTable) {
+                    //没有excel表单的不生成pdf
+                    if (StringUtils.isNotEmpty(record.getHtmlUrl())) {
+                        //生成记录表pdf
+                        String bussPdfInfo = this.getBussPDFTrial(record.getPKeyId(), contractId, id, recordPageNumber++, recordPageNumberCount);
+                        if (StringUtils.isNotEmpty(bussPdfInfo)) {
+                            dataPdfUrls.add(bussPdfInfo);
+                        }
                     }
                 }
             }

+ 77 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -31,6 +31,7 @@ import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.utils.DiffListUtil;
 import org.springblade.manager.vo.*;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -50,6 +51,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final ContractInfoMapper contractInfoMapper;
 
+    private final JdbcTemplate jdbcTemplate;
+
     @Override
     public List<WbsTreeContract> selectQueryCurrentNodeByAncestors(List<String> ids, String contractId) {
         return this.baseMapper.selectQueryCurrentNodeByAncestors(ids, contractId);
@@ -358,19 +361,68 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     // 频率添加表单
     @Override
-    public boolean addTabInfoByRan(RangeInfo info,List<Object> moreData,String[] excLenght) throws FileNotFoundException {
+    public boolean addTabInfoByRan(RangeInfo info,List<Object> moreData,String[] excLenght){
         WbsTreeContract wbsInfo = this.baseMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, info.getPkId()));
 
+        String cols = Arrays.stream(excLenght).collect(Collectors.joining(StringPool.COMMA));
         //查询复制表有多少张
         List<WbsTreeContract> wbsTreeContractList = this.baseMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getId, wbsInfo.getId())
                 .eq(WbsTreeContract::getContractId, wbsInfo.getContractId())
                 .eq(WbsTreeContract::getParentId, wbsInfo.getParentId()));
-        List<WbsTreeContract> wbsTreeContractList2 = wbsTreeContractList.stream().filter(wbsTreeContract -> wbsTreeContract.getIsCopeTab() ==null || wbsTreeContract.getIsCopeTab()==3).sorted(Comparator.comparing(WbsTreeContract::getCreateTime).reversed()).collect(Collectors.toList());
+        List<WbsTreeContract> wbsTreeContractList2 = wbsTreeContractList.stream().filter(wbsTreeContract -> wbsTreeContract.getIsCopeTab() ==null || wbsTreeContract.getIsCopeTab()==3).sorted(Comparator.comparing(WbsTreeContract::getCreateTime)).collect(Collectors.toList());
+
+        int indexId = wbsTreeContractList2.indexOf(wbsInfo);
+
         // 判读需要添加几张表
         long tabGroupId = SnowFlakeUtil.getId();
         List<WbsTreeContract> addList = new ArrayList<>();
+        StringBuilder addSql = new StringBuilder();
+        //修改或新增数据
+        for(int i=indexId+1 ; i<wbsTreeContractList2.size();i++){
+             WbsTreeContract wbsTreeContract = wbsTreeContractList2.get(i);
+             List<Map<String, Object>> DataMap = jdbcTemplate.queryForList("select  * from " + wbsInfo.getInitTableName() + " where p_key_id=" + wbsTreeContract.getPKeyId());
+
+             int dataSize = 0;
+             if(moreData.size()>= excLenght.length){
+                 dataSize =excLenght.length;
+             }else{
+                 dataSize =moreData.size();
+                 if(dataSize<=0){
+                     break;
+                 }
+             }
+
+            if(DataMap!=null && DataMap.size()>=1){
+                String dataCol = "";
+                String updateSql = "update "+wbsInfo.getInitTableName()+" set "+info.getKey() +"=";
+                for(int j=0; j<dataSize;j++){
+                    if(j==dataSize-1){
+                        dataCol = dataCol + moreData.get(j) +"_^_"+excLenght[j];
+                    }else{
+                        dataCol = dataCol + moreData.get(j) +"_^_"+excLenght[j]+"☆";
+                    }
+                }
+                updateSql = updateSql + "'"+dataCol +"' where p_key_id=" + wbsTreeContract.getPKeyId() +" ;";
+                moreData = moreData.stream().skip(excLenght.length).map(com.mixsmart.utils.StringUtils::handleNull).collect(Collectors.toList());
+                addSql.append(updateSql);
+            }else{
+                long dataId = SnowFlakeUtil.getId();
+                String insertSql = "insert into "+wbsInfo.getInitTableName() +"(id,p_key_id,"+info.getKey()+") VALUES ("+dataId+","+ wbsTreeContract.getPKeyId()+",'";
+                String dataCol = "";
+                for(int j=0; j<dataSize;j++){
+                    if(j==dataSize-1){
+                        dataCol = dataCol + moreData.get(j) +"_^_"+excLenght[j];
+                    }else{
+                        dataCol = dataCol + moreData.get(j) +"_^_"+excLenght[j]+"☆";
+                    }
+                }
+                insertSql =insertSql+dataCol+"');";
+                moreData = moreData.stream().skip(excLenght.length).map(com.mixsmart.utils.StringUtils::handleNull).collect(Collectors.toList());
+                addSql.append(insertSql);
+            }
+        }
 
         //计算张数
         double tabCount = moreData.size() / Double.parseDouble(excLenght.length+"") ;
@@ -384,7 +436,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 wbsTreeContract.setPKeyId(newPkId);
                 wbsTreeContract.setCreateTime(new Date());
                 wbsTreeContract.setTabGroupId(tabGroupId);
-                String nodeName = wbsTreeContractList2.get(0).getNodeName();
+                String nodeName = wbsTreeContractList2.get(wbsTreeContractList2.size()-1).getNodeName();
 
                 if (nodeName.indexOf("_PL_") >= 0) {
                     String[] oldName = nodeName.split("_PL_");
@@ -406,10 +458,32 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 wbsTreeContract.setPdfUrl("");
                 wbsTreeContract.setIsCopeTab(3); // 代表频率
                 addList.add(wbsTreeContract);
+
+                int dataSize = 0;
+                if(moreData.size()>= excLenght.length){
+                    dataSize =excLenght.length;
+                }else{
+                    dataSize =moreData.size();
+                }
+                long dataId = SnowFlakeUtil.getId();
+                String insertSql = "insert into "+wbsInfo.getInitTableName() +"(id,p_key_id,"+info.getKey()+") VALUES ("+dataId+","+ wbsTreeContract.getPKeyId()+",'";
+                String dataCol = "";
+                for(int j=0; j<dataSize;j++){
+                    if(j==dataSize-1){
+                        dataCol = dataCol + moreData.get(j) +"_^_"+excLenght[j];
+                    }else{
+                        dataCol = dataCol + moreData.get(j) +"_^_"+excLenght[j]+"☆";
+                    }
+                }
+                insertSql =insertSql+dataCol+"');";
+                moreData = moreData.stream().skip(excLenght.length).map(com.mixsmart.utils.StringUtils::handleNull).collect(Collectors.toList());
+                addSql.append(insertSql);
             }
             // 插入数据
             this.baseMapper.insertBatchSomeColumn(addList);
         }
+
+        this.jdbcTemplate.execute(addSql.toString());
         for(WbsTreeContract wbsTreeCont:wbsTreeContractList2){
             UpdateWrapper<WbsTreeContract> updateWrapper = new UpdateWrapper<>();
             updateWrapper.in("p_key_id", wbsTreeCont.getPKeyId() + "");

+ 4 - 3
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java

@@ -96,6 +96,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
 
         //根据类型获取对应菜单
         List<Menu> allMenusList = baseMapper.allMenuBySysType(sysType);
+        Long sysId = allMenusList.stream().map(Menu::getSysId).findAny().orElse(null);
         List<Menu> newAllMenusList = BeanUtil.copyProperties(allMenusList, Menu.class);
 
         //只显示非隐藏按钮
@@ -143,15 +144,15 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
                     routes.stream().anyMatch(route -> route.getId().longValue() == x.getId().longValue())
             ).collect(Collectors.toList());
         }
-        return buildRoutes(allMenus, roleMenus);
+        return buildRoutes(allMenus, roleMenus, sysId);
     }
 
-    private List<MenuVO> buildRoutes(List<Menu> allMenus, List<Menu> roleMenus) {
+    private List<MenuVO> buildRoutes(List<Menu> allMenus, List<Menu> roleMenus, Long sysId) {
         List<Menu> routes = new LinkedList<>(roleMenus);
         roleMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu));
         routes.sort(Comparator.comparing(Menu::getSort));
         MenuWrapper menuWrapper = new MenuWrapper();
-        List<Menu> collect = routes.stream().filter(x -> Func.equals(x.getCategory(), 1)).collect(Collectors.toList());
+        List<Menu> collect = routes.stream().filter(x -> Func.equals(x.getCategory(), 1) && sysId.equals(x.getSysId())).collect(Collectors.toList());
         return menuWrapper.listNodeVO(collect);
     }