Sfoglia il codice sorgente

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

yangyj 1 anno fa
parent
commit
3cb80e0b34
13 ha cambiato i file con 209 aggiunte e 94 eliminazioni
  1. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractLazyVO.java
  2. 4 5
      blade-service/blade-archive/pom.xml
  3. 16 30
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  4. 8 5
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  5. 64 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/utils/PdfResizeTool.java
  6. 0 10
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  7. 8 7
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  8. 31 16
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  9. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  10. 6 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/RoutingInspectionMapper.java
  11. 23 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/RoutingInspectionMapper.xml
  12. 43 18
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/RoutingInspectionServiceImpl.java
  13. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

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

@@ -74,6 +74,9 @@ public class WbsTreeContractLazyVO implements Serializable {
     @ApiModelProperty("是否又混泥土,0否1是")
     private Integer isConcrete;
 
+    @ApiModelProperty("合同段id")
+    private Long contractId;
+
     @ApiModelProperty(value = "子级集合(在构造树形结构时使用)")
     private List<WbsTreeContractLazyVO> children;
 

+ 4 - 5
blade-service/blade-archive/pom.xml

@@ -137,12 +137,11 @@
             <artifactId>spring-test</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.pdfbox</groupId>
-            <artifactId>pdfbox</artifactId>
-            <version>2.0.20</version>
-            <scope>compile</scope>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itext7-core</artifactId>
+            <version>7.1.16</version>
+            <type>pom</type>
         </dependency>
-
     </dependencies>
 
     <build>

+ 16 - 30
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -1,16 +1,10 @@
 package org.springblade.archive.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.itextpdf.text.Element;
-import com.itextpdf.text.pdf.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.util.IOUtils;
 import org.springblade.archive.entity.ArchiveFormulaConfig;
@@ -21,6 +15,7 @@ import org.springblade.archive.service.IArchiveFormulaConfigService;
 import org.springblade.archive.service.IArchiveProjectConfigService;
 import org.springblade.archive.utils.FileUtils;
 import org.springblade.archive.utils.FormulaUtil;
+import org.springblade.archive.utils.PdfResizeTool;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.common.constant.CommonConstant;
@@ -30,7 +25,6 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.common.vo.DataVO;
 import org.springblade.common.vo.FileSize;
 import org.springblade.core.oss.model.BladeFile;
-import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
 import org.springblade.core.tool.utils.StringUtil;
@@ -38,9 +32,10 @@ import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
+import java.io.OutputStream;
 
 import java.io.*;
-import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -902,14 +897,15 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         Long id = SnowFlakeUtil.getId();
         String localPdf = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL) + "/pdf/" + id + ".pdf";
         String fileName = id + ".pdf";
+        OutputStream outputStream = null;
         try {
             //合并PDF
             byte[] bytes = FileUtils.InputStreamToBytes(inputStream);
-            OutputStream outputStream = new FileOutputStream(localPdf);
+            outputStream = new FileOutputStream(localPdf);
             outputStream.write(bytes);
 
-            //将PDF设置为A4纸大小
-            this.setPdfToA4Size(localPdf, localPdf);
+            //设置PDF每页大小为A4,内容等比缩放,方向同步
+            PdfResizeTool.resizeToA4WithContentScaling(localPdf, localPdf);
 
             //上传到OSS
             String absoluteFileName = FileUtils.getOssPath(OssConstant.ARCHIVE_DIRECTORY, fileName, projectId);
@@ -917,28 +913,18 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
             url = file.getLink();
         } catch (Exception e) {
             e.printStackTrace();
+        } finally {
+            try {
+                //关闭输出流
+                if (outputStream != null) {
+                    outputStream.close();
+                }
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
         }
         return url;
     }
 
-    /**
-     * 设置pdf大小默认为A4纸大小
-     *
-     * @param inputPdfPath
-     * @param outputPdfPath
-     */
-    private void setPdfToA4Size(String inputPdfPath, String outputPdfPath) {
-        try {
-            PDDocument document = PDDocument.load(new File(inputPdfPath));
-            PDPage newPage = new PDPage(PDRectangle.A4);
-            document.removePage(0);
-            document.addPage(newPage);
-            document.save(outputPdfPath);
-            document.close();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
 
 }

+ 8 - 5
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -562,7 +562,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				for(String outUrl:archivesOutUrlList){
 					String[] splits = outUrl.split(",");
 					for(String url:splits){
-						if(StringUtils.isNotEmpty(url.trim())){
+						if(StringUtils.isNotEmpty(url) && StringUtils.isNotEmpty(url.trim())){
 							removeFiles.add(FileUtils.getAliYunSubUrl(url));
 						}
 					}
@@ -572,7 +572,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			List<String> filePageUrlList = baseMapper.getFilePageUrlList(projectId);
 			if(filePageUrlList!=null && filePageUrlList.size()>0){
 				for(String url:filePageUrlList){
-					if(StringUtils.isNotEmpty(url.trim())){
+					if(StringUtils.isNotEmpty(url) && StringUtils.isNotEmpty(url.trim())){
 						removeFiles.add(FileUtils.getAliYunSubUrl(url));
 					}
 				}
@@ -602,7 +602,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					for(String outUrl:archivesOutUrlList){
 						String[] splits = outUrl.split(",");
 						for(String url:splits){
-							if(StringUtils.isNotEmpty(url.trim())){
+							if(StringUtils.isNotEmpty(url) && StringUtils.isNotEmpty(url.trim())){
 								removeFiles.add(FileUtils.getAliYunSubUrl(url));
 							}
 						}
@@ -612,7 +612,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				List<String> filePageUrlList = baseMapper.getFilePageUrlListByNode(projectId,ancestors,strNodeId);
 				if(filePageUrlList!=null && filePageUrlList.size()>0){
 					for(String url:filePageUrlList){
-						if(StringUtils.isNotEmpty(url.trim())){
+						if(StringUtils.isNotEmpty(url) && StringUtils.isNotEmpty(url.trim())){
 							removeFiles.add(FileUtils.getAliYunSubUrl(url));
 						}
 					}
@@ -2138,9 +2138,12 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				log.info("[自动组卷]{}","自动组卷完成。projectId:"+projectId+"-contractId:"+contractId+"-nodeId:"+nodeId);
 			}catch (Exception e){
 				e.printStackTrace();
-				log.error("自动组卷报错。"+e.getMessage()+"--projectId:"+projectId+"-contractId:"+contractId+"-nodeId:"+nodeId);
+				log.error("[自动组卷] 报错。"+e.getMessage()+"--projectId:"+projectId+"-contractId:"+contractId+"-nodeId:"+nodeId);
 				//设置自动组卷结束
 				contractClient.updateIsArchivesAutoById(contractId, 0);
+			}finally {
+				contractClient.updateIsArchivesAutoById(contractId, 0);
+				log.error("[自动组卷] 流程结束--projectId:"+projectId+"-contractId:"+contractId+"-nodeId:"+nodeId);
 			}
 		});
 	}

+ 64 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/PdfResizeTool.java

@@ -0,0 +1,64 @@
+package org.springblade.archive.utils;
+
+import com.itextpdf.kernel.geom.PageSize;
+import com.itextpdf.kernel.geom.Rectangle;
+import com.itextpdf.kernel.pdf.*;
+import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
+
+
+import java.io.IOException;
+
+public class PdfResizeTool {
+
+    /**
+     * 设置PDF每页大小为A4,内容等比缩放,方向同步
+     *
+     * @param inputPdfPath
+     * @param outputPdfPath
+     * @throws IOException
+     */
+    public static void resizeToA4WithContentScaling(String inputPdfPath, String outputPdfPath) throws IOException {
+        PdfReader reader = new PdfReader(inputPdfPath);
+        PdfDocument inputDocument = new PdfDocument(reader);
+        int numberOfPages = inputDocument.getNumberOfPages();
+
+        PageSize a4PageSize = PageSize.A4;
+
+        PdfDocument outputDocument = new PdfDocument(new PdfWriter(outputPdfPath));
+
+        for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++) {
+            PdfPage originalPage = inputDocument.getPage(pageNumber);
+            Rectangle originalPageSize = originalPage.getPageSize();
+
+            //创建新页面,保持原始方向
+            PageSize newPageSize = originalPageSize.getWidth() > originalPageSize.getHeight() ? a4PageSize.rotate() : a4PageSize;
+            PdfPage newPage = outputDocument.addNewPage(newPageSize);
+
+            //获取内容缩放相关参数
+            float scaleX = newPageSize.getWidth() / originalPageSize.getWidth();
+            float scaleY = newPageSize.getHeight() / originalPageSize.getHeight();
+            float scale = Math.min(scaleX, scaleY);
+
+            //创建一个PdfCanvas对象来操作页面内容
+            newPage.setRotation(originalPage.getRotation()); //保持旋转角度
+            newPage.setMediaBox(newPageSize); //设置MediaBox
+
+            PdfCanvas canvas = new PdfCanvas(newPage, true);
+            canvas.saveState();
+            canvas.concatMatrix(scale, 0, 0, scale, 0, 0); //缩放内容
+            canvas.addXObject(originalPage.copyAsFormXObject(outputDocument));
+            canvas.restoreState();
+        }
+
+        inputDocument.close();
+        outputDocument.close();
+    }
+
+    /*public static void main(String[] args) throws IOException {
+        String inputPdfPath = "D:\\Download\\66666.pdf";
+        String outputPdfPath = "D:\\Download\\6666611111.pdf";
+        resizeToA4WithContentScaling(inputPdfPath, outputPdfPath);
+    }*/
+
+}
+

+ 0 - 10
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -391,16 +391,6 @@ public class TaskController extends BladeController {
                     }
                 }
             }
-
-            //更新redis缓存
-            if (formDataId.length > 0) {
-                List<InformationQuery> dataList = informationQueryService.getBaseMapper().selectBatchIds(Arrays.asList(formDataId));
-                List<Long> contractIds = dataList.stream().map(InformationQuery::getContractId).distinct().collect(Collectors.toList());
-                for (Long contractId : contractIds) {
-                    informationQueryService.delAsyncWbsTree(contractId + "");
-                }
-            }
-
             return R.data(true);
         }
         return R.data(false);

+ 8 - 7
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -515,13 +515,14 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         if (result != null && result.size() != 0) {
 
             //属于待审批和已审批状态,查询待办信息
-            Map<Long, Task> taskMaps = new HashMap<>();
+            Map<String, List<Task>> taskMaps = new HashMap<>();
             Map<String, List<TaskParallel>> taskParallelMaps = new HashMap<>();
             List<Long> informationIds = result.stream().filter(f -> f.getStatus().equals(1) || f.getStatus().equals(2)).map(InformationQuery::getId).collect(Collectors.toList());
             String informationIdsStr = informationIds.stream().map(String::valueOf).collect(Collectors.joining(","));
             if (StringUtils.isNotEmpty(informationIdsStr)) {
                 List<Task> query = jdbcTemplate.query("SELECT id,form_data_id,process_instance_id,approval_type,status,batch,project_id,contract_id FROM u_task WHERE form_data_id IN(" + informationIdsStr + ") AND status IN (1, 2, 3) AND is_deleted = 0", new BeanPropertyRowMapper<>(Task.class));
-                taskMaps = query.stream().collect(Collectors.toMap(Task::getId, Function.identity()));
+
+                taskMaps = query.stream().collect(Collectors.groupingBy(Task::getFormDataId));
 
                 Set<String> processInstanceIds = query.stream().map(Task::getProcessInstanceId).map(id -> "'" + id + "'").collect(Collectors.toSet());
                 if (processInstanceIds.size() > 0) {
@@ -545,7 +546,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
             List<InformationQueryVO> voResult = JSONArray.parseArray(JSONObject.toJSONString(result), InformationQueryVO.class);
             //处理流程状态
             List<InformationQuery> finalInformationQueries = informationQueries;
-            Map<Long, Task> finalTaskMaps = taskMaps;
+            Map<String, List<Task>> finalTaskMaps = taskMaps;
             Map<String, List<TaskParallel>> finalTaskParallelMaps = taskParallelMaps;
             voResult.forEach(vor -> {
                 if (ObjectUtil.isNotEmpty(vor.getCreateTime())) {
@@ -583,16 +584,16 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                         //设置上报批次
                         vor.setReportNumber(String.valueOf(tasks.get(0).getBatch()));
                     }*/
-                    Task task = finalTaskMaps.getOrDefault(vor.getId(), null);
-                    if (task != null) {
+                    List<Task> tasks = finalTaskMaps.getOrDefault(vor.getId().toString(), null);
+                    if (tasks != null && tasks.size() > 0) {
                         //查询当前任务的所有待办人
-                        List<TaskParallel> linkTasks = finalTaskParallelMaps.getOrDefault(task.getProcessInstanceId(), null);
+                        List<TaskParallel> linkTasks = finalTaskParallelMaps.getOrDefault(tasks.get(0).getProcessInstanceId(), null);
                         if (linkTasks != null && linkTasks.size() > 0) {
                             //处理审批状态
                             this.integrationMethod(vor, linkTasks);
                         }
                         //设置上报批次
-                        vor.setReportNumber(String.valueOf(task.getBatch()));
+                        vor.setReportNumber(String.valueOf(tasks.get(0).getBatch()));
                     }
                 }
 

+ 31 - 16
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -610,7 +610,10 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1", 66, TimeUnit.SECONDS);
                     CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
                         try {
+
+                            /*===============执行批量任务===============*/
                             this.checkIsExsitTaskBatch(taskApprovalVO, taskBatchId, userId, nickName);
+
                         } catch (FileNotFoundException e) {
                             e.printStackTrace();
                         }
@@ -631,23 +634,14 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         taskApprovalVO.setUserId(userId);
         taskApprovalVO.setNickName(nickName);
 
+        /*===============执行审批===============*/
         String pdfUrlEVisa = this.completeApprovalTask(taskApprovalVO);
 
         System.out.println("电签操作成功buss-----" + pdfUrlEVisa + "---batchId=" + batchId);
-        //TODO ============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) liuYc 2023-03-16 ==============
-        if ("OK".equals(taskApprovalVO.getFlag()) && StringUtils.isNotEmpty(pdfUrlEVisa)) {
-            //已审批
-            this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(pdfUrlEVisa, taskApprovalVO);
-            //executor删除掉对应批次
-            this.taskBatchService.deletedById(batchId);
-        }
 
-        if (!"OK".equals(taskApprovalVO.getFlag())) {
-            //已废除
-            this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatusFC(taskApprovalVO);
-            //executor删除掉对应批次
-            this.taskBatchService.deletedById(batchId);
-        }
+        /*===============试验自检任务相关===============*/
+        this.trialSelfTaskRelated(taskApprovalVO, pdfUrlEVisa, batchId);
+
         RedisTemplate.delete("sign-" + taskApprovalVO.getFormDataId());
     }
 
@@ -684,6 +678,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         .set(TaskBatch::getIsDeleted, 4)
                         .eq(TaskBatch::getId, taskApprovalVO.getId())
                 );
+
             } else if ("success".equals(eVisaStatus) || eVisaStatus.contains("success")) {
                 //审批通过会返回签章成功的文件,需要设置替换
                 //完成/审批当前分支流程
@@ -833,7 +828,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     /**
      * 任务废除通知
      */
-    private void abolishMessage(Task masterTask, TaskParallel currentLink, String comment,String nickName) {
+    private void abolishMessage(Task masterTask, TaskParallel currentLink, String comment, String nickName) {
         //查询合同段及项目名称
         ProjectInfo projectInfo = this.projectClient.queryProjectList(Func.toStrList(masterTask.getProjectId())).get(0);
         String projectName = StringUtils.isNotEmpty(projectInfo.getProjectAlias()) ? projectInfo.getProjectAlias() : projectInfo.getProjectName();
@@ -929,6 +924,26 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         }
     }
 
+    /**
+     * 试验自检任务业务相关
+     */
+    private void trialSelfTaskRelated(TaskApprovalVO taskApprovalVO, String pdfUrlEVisa, String batchId) throws FileNotFoundException {
+        //============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) ==============
+        if ("OK".equals(taskApprovalVO.getFlag()) && StringUtils.isNotEmpty(pdfUrlEVisa)) {
+            //已审批
+            this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(pdfUrlEVisa, taskApprovalVO);
+            //executor删除掉对应批次
+            this.taskBatchService.deletedById(batchId);
+        }
+
+        if (!"OK".equals(taskApprovalVO.getFlag())) {
+            //已废除
+            this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatusFC(taskApprovalVO);
+            //executor删除掉对应批次
+            this.taskBatchService.deletedById(batchId);
+        }
+    }
+
     @Override
     public Boolean startApproval(TaskVO vo) {
         //获取业务表
@@ -1157,10 +1172,10 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         .set(InformationQuery::getBusinessTime, dateInfo)
                         .in(InformationQuery::getId, Arrays.asList(formDataId.split(","))));
 
-                //如果是废除任务,那么删除合同段节点树缓存
+                /*//如果是废除任务,那么删除合同段节点树缓存
                 if (status == 3) {
                     informationQueryService.delAsyncWbsTree(queryinfo.getContractId().toString());
-                }
+                }*/
 
                 //修改试验业务状态(已审批的情况下修改)
                 if (new Integer(2).equals(queryinfo.getType()) && ObjectUtil.isNotEmpty(queryinfo.getWbsId()) && status != 3) {

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

@@ -183,7 +183,7 @@ public class ArchiveTreeContractController extends BladeController {
         }
 
         ar.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
-        if(archiveTreeContract.getArchiveAutoType()==2){
+        if(archiveTreeContract.getArchiveAutoType() != null && archiveTreeContract.getArchiveAutoType()==2){
             //客户级的group用19位,在同步的时候方便判断是值是客户级还是项目级
             double v = Math.random();
             if (v < 0.1) {

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/RoutingInspectionMapper.java

@@ -7,8 +7,14 @@ import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.entity.RoutingInspection;
 import org.springblade.manager.vo.RoutingInspectionVO;
 
+import java.util.List;
+
 
 public interface RoutingInspectionMapper extends BaseMapper<RoutingInspection> {
 
     IPage<RoutingInspectionVO> page(IPage<RoutingInspectionVO> iPage,@Param("inspection") RoutingInspection inspection);
+
+    List<Long> getAllBuildId(@Param("id") Long id);
+
+    IPage<RoutingInspectionVO> page2(IPage<RoutingInspectionVO> iPage,@Param("inspection")  RoutingInspection inspection,@Param("ids") List<Long> ids);
 }

+ 23 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/RoutingInspectionMapper.xml

@@ -19,4 +19,27 @@
         </if>
         order by mri.create_time desc
     </select>
+    <select id="getAllBuildId" resultType="java.lang.Long">
+        select contract_id_sg  from m_contract_relation_jlyz WHERE contract_id_jlyz = #{id}
+    </select>
+    <select id="page2" resultType="org.springblade.manager.vo.RoutingInspectionVO">
+        select mri.*,
+        (select project_name from m_project_info where id = mri.project_id) as projectName,
+        (select dict_value from blade_dict where code = 'inspect_type' and dict_key = mri.inspect_type) as inspectTypeName,
+        (select dict_value from blade_dict where code = 'review_inspect_status' and dict_key = mri.review_inspect_status) as reviewInspectStatusName,
+        case mri.is_rectify
+        when 1 then '需要'
+        when 2 then '不需要'
+        when 3 then '已整改'
+        end as isRectifyName
+        from m_routing_inspection mri
+        where mri.is_deleted = 0 and mri.project_id = #{inspection.projectId} and contract_id in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        <if test="inspection.isRectify != null and inspection.isRectify != ''">
+            and mri.is_rectify = #{inspection.isRectify}
+        </if>
+        order by mri.create_time desc
+    </select>
 </mapper>

+ 43 - 18
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/RoutingInspectionServiceImpl.java

@@ -41,6 +41,8 @@ public class RoutingInspectionServiceImpl extends BaseServiceImpl<RoutingInspect
 
     private final IInspectionRectifyService rectifyService;
 
+    private final IContractInfoService contractInfoService;
+
     @Override
     @Transactional
     public void add(RoutingInspectionDTO dto) {
@@ -49,23 +51,31 @@ public class RoutingInspectionServiceImpl extends BaseServiceImpl<RoutingInspect
         if (list == null || list.size() == 0){
             throw new ServiceException("请填写检查项目");
         }
-        //先保存巡检信息
-        Long id = SnowFlakeUtil.getId();
-        RoutingInspection inspection = new RoutingInspection();
-        BeanUtils.copyProperties(dto,inspection);
-        inspection.setId(id);
-        inspection.setCreateTime(new Date());
-        this.save(inspection);
-        //再保存具体的巡检项目
-        List<InspectionRectify> list1 = list.stream().map(l -> {
-            InspectionRectify rectify = new InspectionRectify();
-            BeanUtils.copyProperties(l, rectify);
-            rectify.setInspectId(id);
-            List<String> autoExpandKeys = l.getAutoExpandKeys();
-            rectify.setInspectLocation(JSON.toJSONString(autoExpandKeys));
-            return rectify;
-        }).collect(Collectors.toList());
-        rectifyService.saveBatch(list1);
+        //把巡检项目按照合同段id分组
+        Map<Long, List<InspectionRectifyDTO>> contractMap = list.stream().collect(Collectors.groupingBy(InspectionRectify::getContractId));
+        //循环
+        for (Long aLong : contractMap.keySet()) {
+            //先保存巡检信息
+            Long id = SnowFlakeUtil.getId();
+            RoutingInspection inspection = new RoutingInspection();
+            BeanUtils.copyProperties(dto,inspection);
+            inspection.setId(id);
+            inspection.setContractId(aLong);
+            inspection.setCreateTime(new Date());
+            this.save(inspection);
+            //取出同一个合同段的项目
+            List<InspectionRectifyDTO> list2 = contractMap.get(aLong);
+            //再保存具体的巡检项目
+            List<InspectionRectify> list1 = list2.stream().map(l -> {
+                InspectionRectify rectify = new InspectionRectify();
+                BeanUtils.copyProperties(l, rectify);
+                rectify.setInspectId(id);
+                List<String> autoExpandKeys = l.getAutoExpandKeys();
+                rectify.setInspectLocation(JSON.toJSONString(autoExpandKeys));
+                return rectify;
+            }).collect(Collectors.toList());
+            rectifyService.saveBatch(list1);
+        }
     }
 
     @Override
@@ -96,11 +106,26 @@ public class RoutingInspectionServiceImpl extends BaseServiceImpl<RoutingInspect
     @Override
     public IPage<RoutingInspectionVO> page(Query query, RoutingInspection inspection) {
         IPage<RoutingInspectionVO> iPage = new Page<>(query.getCurrent(), query.getSize());
-        baseMapper.page(iPage,inspection);
+        //先判断当前合同段是否为监理合同段
+        ContractInfo contractInfo = contractInfoService.getById(inspection.getContractId());
+        //如果不为监理合同段则正常流程
+        if (contractInfo.getContractType() == 2){
+            //如果为监理合同段,则查看合同段下所有检查的施工合同段
+            List<Long> ids = baseMapper.getAllBuildId(contractInfo.getId());
+            ids.add(contractInfo.getId());
+            //再统一查询三个合同段的信息
+            baseMapper.page2(iPage,inspection,ids);
+        }else {
+            baseMapper.page(iPage,inspection);
+        }
         //设置权限,只能整改人可以点
         Long userId = AuthUtil.getUserId();
         List<RoutingInspectionVO> records = iPage.getRecords();
         for (RoutingInspectionVO record : records) {
+            if (record.getRectifyUser() == null){
+                record.setIsRectifyUser(0);
+                continue;
+            }
             String rectifyUser = record.getRectifyUser();
             String[] split = rectifyUser.split("-");
             Long user = Long.parseLong(split[split.length-1]);

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

@@ -710,7 +710,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                         }
                     }
                     //获取当前层懒加载节点
-                    List<WbsTreeContractLazyVO> lazyNodes = jdbcTemplate.query("select p_key_id,(SELECT id FROM u_contract_tree_drawings where process_id = p_key_id) AS drawingsId,id,parent_id,node_type,type,wbs_type,is_concrete,major_data_type,partition_code,old_id,contract_id_relation,is_concealed_works_node,CASE (SELECT count(1) FROM u_tree_contract_first AS tcf WHERE tcf.is_deleted = 0 AND tcf.wbs_node_id = a.p_key_id) WHEN 0 THEN 'false' ELSE 'true' END AS isFirst,IFNULL(if(length(trim(full_name))>0,full_name,node_name),node_name) AS title,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND b.type = 1 and b.status = 1 AND b.contract_id = " + contractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where a.node_type != 111 and a.type = 1 and a.status = 1 and a.is_deleted = 0 and parent_id = " + (StringUtils.isNotEmpty(id) ? id : 0) + " and contract_id = " + contractId + " ORDER BY a.sort,title,a.create_time", new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                    List<WbsTreeContractLazyVO> lazyNodes = jdbcTemplate.query("select p_key_id,contract_id,(SELECT id FROM u_contract_tree_drawings where process_id = p_key_id) AS drawingsId,id,parent_id,node_type,type,wbs_type,is_concrete,major_data_type,partition_code,old_id,contract_id_relation,is_concealed_works_node,CASE (SELECT count(1) FROM u_tree_contract_first AS tcf WHERE tcf.is_deleted = 0 AND tcf.wbs_node_id = a.p_key_id) WHEN 0 THEN 'false' ELSE 'true' END AS isFirst,IFNULL(if(length(trim(full_name))>0,full_name,node_name),node_name) AS title,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND b.type = 1 and b.status = 1 AND b.contract_id = " + contractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where a.node_type != 111 and a.type = 1 and a.status = 1 and a.is_deleted = 0 and parent_id = " + (StringUtils.isNotEmpty(id) ? id : 0) + " and contract_id = " + contractId + " ORDER BY a.sort,title,a.create_time", new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
                     if (lazyNodes.size() > 0 && nodesAll.size() > 0) {
                         //所有节点
                         List<WbsTreeContractLazyVO> distinctNodesAll = nodesAll.stream()
@@ -870,7 +870,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                             }
 
                             //获取当前层懒加载节点
-                            List<WbsTreeContractLazyVO> lazyNodes = jdbcTemplate.query("select p_key_id,(SELECT id FROM u_contract_tree_drawings where process_id = p_key_id) AS drawingsId,id,parent_id,node_type,type,wbs_type,major_data_type,partition_code,old_id,contract_id_relation,is_concealed_works_node,CASE (SELECT count(1) FROM u_tree_contract_first AS tcf WHERE tcf.is_deleted = 0 AND tcf.wbs_node_id = a.p_key_id) WHEN 0 THEN 'false' ELSE 'true' END AS isFirst,IFNULL(if(length(trim(full_name))>0,full_name,node_name),node_name) AS title,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND  b.type = 1 and b.status = 1 AND b.contract_id = " + sgContractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where a.node_type != 111 and a.type = 1 and a.status = 1 and a.is_deleted = 0 and parent_id = " + (StringUtils.isNotEmpty(id) ? id : 0) + " and contract_id = " + sgContractId + " ORDER BY a.sort,title,a.create_time", new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                            List<WbsTreeContractLazyVO> lazyNodes = jdbcTemplate.query("select p_key_id,contract_id,(SELECT id FROM u_contract_tree_drawings where process_id = p_key_id) AS drawingsId,id,parent_id,node_type,type,wbs_type,major_data_type,partition_code,old_id,contract_id_relation,is_concealed_works_node,CASE (SELECT count(1) FROM u_tree_contract_first AS tcf WHERE tcf.is_deleted = 0 AND tcf.wbs_node_id = a.p_key_id) WHEN 0 THEN 'false' ELSE 'true' END AS isFirst,IFNULL(if(length(trim(full_name))>0,full_name,node_name),node_name) AS title,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND  b.type = 1 and b.status = 1 AND b.contract_id = " + sgContractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where a.node_type != 111 and a.type = 1 and a.status = 1 and a.is_deleted = 0 and parent_id = " + (StringUtils.isNotEmpty(id) ? id : 0) + " and contract_id = " + sgContractId + " ORDER BY a.sort,title,a.create_time", new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
                             if (lazyNodes.size() > 0 && nodesAll.size() > 0) {
                                 //所有节点
                                 List<WbsTreeContractLazyVO> distinctNodesAll = nodesAll.stream()