xuzhancheng 5 天之前
父节点
当前提交
83c2a45234
共有 16 个文件被更改,包括 305 次插入112 次删除
  1. 3 3
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportPageReqVO.java
  2. 11 5
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportRespVO.java
  3. 8 4
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportSaveReqVO.java
  4. 5 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerOrderItemCostInfoRepsVO.java
  5. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/inspectionnature/vo/InspectionNatureTemplateDetailRespVO.java
  6. 17 5
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilerconnectrecordreport/BoilerConnectRecordReportDO.java
  7. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilertaskorderitemreport/BoilerTaskOrderItemReportDO.java
  8. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/pipetaskorderitemreport/PipeTaskOrderItemReportDO.java
  9. 3 11
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/boilerconnectrecordreport/BoilerConnectRecordReportMapper.java
  10. 91 30
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  11. 1 5
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamictb/DynamicTbServiceImpl.java
  12. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/inspectionnature/InspectionNatureServiceImpl.java
  13. 2 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java
  14. 13 9
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pdf/PdfServiceImpl.java
  15. 92 31
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  16. 53 3
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/synchronization/SynchronizationServiceImpl.java

+ 3 - 3
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportPageReqVO.java

@@ -64,13 +64,13 @@ public class BoilerConnectRecordReportPageReqVO extends PageParam {
     @Schema(description = "费用")
     private String fee;
 
-    @Schema(description = "状态")
+   @Schema(description = "状态")
     private String status;
 
-    @Schema(description = "是否主项目")
-    private String isMainProject;
 
     @Schema(description = "费用文件URL")
     private String feeFileUrl;
 
+    @Schema(description = "项目类型:MAIN-主项目, SUB-子项目, STANDALONE-独走项目")
+    private String projectType;
 }

+ 11 - 5
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportRespVO.java

@@ -70,16 +70,22 @@ public class BoilerConnectRecordReportRespVO {
     @ExcelProperty("费用")
     private String fee;
 
-    @Schema(description = "状态")
+   @Schema(description = "状态")
     @ExcelProperty("状态")
     private String status;
 
-    @Schema(description = "是否主项目")
-    @ExcelProperty("是否主项目")
-    private String isMainProject;
 
     @Schema(description = "费用文件URL")
     @ExcelProperty("费用文件URL")
     private String feeFileUrl;
 
-}
+    @Schema(description = "项目类型:MAIN-主项目, SUB-子项目, STANDALONE-独走项目")
+    @ExcelProperty("项目类型")
+    private String projectType;
+    @Schema(description = "操作指导书")
+    @ExcelProperty("操作指导书")
+    private String operationInstruction;
+    @Schema(description = "核准代号")
+    @ExcelProperty("核准代号")
+    private String approvalCode;
+}

+ 8 - 4
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportSaveReqVO.java

@@ -48,13 +48,17 @@ public class BoilerConnectRecordReportSaveReqVO {
     @Schema(description = "费用")
     private String fee;
 
-    @Schema(description = "状态")
+   @Schema(description = "状态")
     private String status;
 
-    @Schema(description = "是否主项目")
-    private String isMainProject;
 
     @Schema(description = "费用文件URL")
     private String feeFileUrl;
 
-}
+    @Schema(description = "项目类型:MAIN-主项目, SUB-子项目, STANDALONE-独走项目")
+    private String projectType;
+    @Schema(description = "操作指导书")
+    private String operationInstruction;
+    @Schema(description = "核准代号")
+    private String approvalCode;
+}

+ 5 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerOrderItemCostInfoRepsVO.java

@@ -61,9 +61,12 @@ public class BoilerOrderItemCostInfoRepsVO {
     @Schema(description = "报告模版路径", example = "6822")
     private String reportTemplateUrl ;
 
-    @Schema(description = "是否主项目", example = "1")
-    private String isMainProject;
+    @Schema(description = "项目类型:MAIN-主项目, SUB-子项目, STANDALONE-独走项目", example = "MAIN")
+    private String projectType;
 
     @Schema(description = "费用计算类型", example = "1")
     private String feeCalcType;
+
+    @Schema(description = "是否主项目")
+    private String isMainProject;
 }

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/inspectionnature/vo/InspectionNatureTemplateDetailRespVO.java

@@ -60,5 +60,5 @@ public class InspectionNatureTemplateDetailRespVO {
 
     private String part;
 
-    private String isMainProject;
+    private String projectType;
 }

+ 17 - 5
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilerconnectrecordreport/BoilerConnectRecordReportDO.java

@@ -68,13 +68,25 @@ public class BoilerConnectRecordReportDO extends BaseDO {
      * 状态
      */
     private String status;
-    /**
-     * 是否主项目
-     */
-    private String isMainProject;
     /**
      * 费用文件URL
      */
     private String feeFileUrl;
 
-}
+    /**
+     * 项目类型:MAIN-主项目, SUB-子项目, STANDALONE-独走项目
+     */
+    private String projectType;
+    /**
+     * 操作指导书
+     */
+    private String operationInstruction;
+    /**
+     * 核准代号
+     */
+    private String approvalCode;
+
+    public String isMain(){
+        return String.valueOf("SUB".equals(this.projectType));
+    }
+}

+ 2 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilertaskorderitemreport/BoilerTaskOrderItemReportDO.java

@@ -378,4 +378,6 @@ public class BoilerTaskOrderItemReportDO extends BaseDO {
     private LocalDate confirmationTime;
 
     private String qrCodeUrl;
+
+    private String projectId;
 }

+ 2 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/pipetaskorderitemreport/PipeTaskOrderItemReportDO.java

@@ -374,4 +374,6 @@ public class PipeTaskOrderItemReportDO extends BaseDO {
     private LocalDate confirmationTime;
 
     private String qrCodeUrl;
+
+    private String projectId;
 }

+ 3 - 11
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/boilerconnectrecordreport/BoilerConnectRecordReportMapper.java

@@ -28,7 +28,7 @@ public interface BoilerConnectRecordReportMapper extends BaseMapperX<BoilerConne
                 .likeIfPresent(BoilerConnectRecordReportDO::getProjectName, reqVO.getProjectName())
                 .likeIfPresent(BoilerConnectRecordReportDO::getProjectCode, reqVO.getProjectCode())
                 .eqIfPresent(BoilerConnectRecordReportDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(BoilerConnectRecordReportDO::getIsMainProject, reqVO.getIsMainProject())
+                .eqIfPresent(BoilerConnectRecordReportDO::getProjectType, reqVO.getProjectType())
                 .orderByDesc(BoilerConnectRecordReportDO::getCreateTime));
     }
 
@@ -60,16 +60,8 @@ public interface BoilerConnectRecordReportMapper extends BaseMapperX<BoilerConne
             recordDOMPJLambdaWrapper.eq(BoilerConnectRecordReportDO::getStatus, reqVO.getStatus());
         }
 
-        if (StrUtil.isNotEmpty(reqVO.getIsMainProject())) {
-            if (reqVO.getIsMainProject().equals("true")){
-                recordDOMPJLambdaWrapper.eq(BoilerConnectRecordReportDO::getIsMainProject, "1");
-            }else if (reqVO.getIsMainProject().equals("false")){
-                // 有些数据为空,查询非主项目(包括 "0" 和 null)
-                recordDOMPJLambdaWrapper.and(w -> w.eq(BoilerConnectRecordReportDO::getIsMainProject, "0")
-                        .or()
-                        .isNull(BoilerConnectRecordReportDO::getIsMainProject));
-            }
-//            recordDOMPJLambdaWrapper.eq(BoilerConnectRecordReportDO::getIsMainProject, reqVO.getIsMainProject());
+        if (StrUtil.isNotEmpty(reqVO.getProjectType())) {
+            recordDOMPJLambdaWrapper.eq(BoilerConnectRecordReportDO::getProjectType, reqVO.getProjectType());
         }
 
         if (StrUtil.isNotEmpty(reqVO.getRecordTemplateCode())) {

+ 91 - 30
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java

@@ -861,6 +861,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                         DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(recordReportDO.getRecordTemplateId());
 
                         BoilerTaskOrderItemReportDO addReport1 = new BoilerTaskOrderItemReportDO();
+                        addReport1.setProjectId(recordReportDO.getId());
                         addReport1.setOrderItemId(id);
                         addReport1.setTemplateId(dynamicTbDO.getId());
                         // 将 String 类型的 fee 转换为 BigDecimal
@@ -873,6 +874,13 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                         addReport1.setReportNo(reportNo);
                         //addReport1.setSort(index.getAndSet(index.get() + 1));
                         addReport1.setReportType(dynamicTbDO.getTbType());
+                        if ("MAIN".equals(recordReportDO.getProjectType())) {
+                            addReport1.setReportType(100);
+                        } else if ("SUB".equals(recordReportDO.getProjectType())) {
+                            addReport1.setReportType(200);
+                        } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
+                            addReport1.setReportType(300);
+                        }
                         addReport1.setReportUrl(id);
                         //使用配置的项目名称
                         //addReport1.setReportName(dynamicTbDO.getTbName());
@@ -897,6 +905,13 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                             addReport1.setReportNo(reportNo);
                             //addReport1.setSort(index.getAndSet(index.get() + 1));
                             addReport1.setReportType(dynamicTbDO.getTbType());
+                            if ("MAIN".equals(recordReportDO.getProjectType())) {
+                                addReport1.setReportType(100);
+                            } else if ("SUB".equals(recordReportDO.getProjectType())) {
+                                addReport1.setReportType(200);
+                            } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
+                                addReport1.setReportType(300);
+                            }
                             addReport1.setReportUrl(id);
                             //使用配置的项目名称
                             //addReport1.setReportName(dynamicTbDO.getTbName());
@@ -1224,7 +1239,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                                     // 找到匹配的检验性质模版
                                     repsVO.setUse("1".equals(natureTemplateDO.getIsDefault()));
                                 });
-                        repsVO.setUse(repsVO.getUse() || "1".equals(templateDO.getIsMainProject()));
+                        repsVO.setUse(repsVO.getUse() || "MAIN".equals(templateDO.getProjectType()));
                         // 4. 从Map中直接查找匹配项
                         BoilerTaskOrderItemReportDO matchedReport = reportMap.get(templateDO.getId());
                         if (matchedReport != null) {
@@ -1249,7 +1264,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                                     // 找到匹配的检验性质模版
                                     baseVO.setUse("1".equals(natureTemplateDO.getIsDefault()));
                                 });
-                        baseVO.setUse(baseVO.getUse() || "1".equals(templateDO.getIsMainProject()));
+                        baseVO.setUse(baseVO.getUse() || "MAIN".equals(templateDO.getProjectType()));
 
                         return baseVO;
                     })
@@ -1295,7 +1310,8 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                             repsVO.setIsAutoAmount("0");
                             repsVO.setReportType(dynamicTbDO.getTbType());
                             repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
-                            repsVO.setIsMainProject(connectRecordReportDO.getIsMainProject());
+                            repsVO.setProjectType(connectRecordReportDO.getProjectType());
+                            repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
                             return repsVO;
                         }else {
                             return null;
@@ -1312,7 +1328,8 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                                 repsVO.setIsAutoAmount("0");
                                 repsVO.setReportType(dynamicTbDO.getTbType());
                                 repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
-                                repsVO.setIsMainProject(connectRecordReportDO.getIsMainProject());
+                                repsVO.setProjectType(connectRecordReportDO.getProjectType());
+                                repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
                                 return repsVO;
                             }else {
                                 return null;
@@ -2357,6 +2374,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                 //addReport.setReportName(reportTemplateDO.getTbName());
                 BoilerConnectRecordReportDO connectDO = boilerConnectRecordReportMapper.selectById(vo.getConnectId());
                 if (connectDO !=  null){
+                    addReport.setProjectId(vo.getConnectId());
                     addReport.setReportName(connectDO.getProjectName());
                     if (vo.getFee() == null || vo.getFee().compareTo(BigDecimal.ZERO) == 0) {
                         addReport.setFee(ConversionUtil.convert(connectDO.getFee()));
@@ -2365,6 +2383,15 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                     }
                 }
                 addReport.setReportType(reportTemplateDO.getTbType());
+                if (connectDO != null){
+                    if ("MAIN".equals(connectDO.getProjectType())){
+                        addReport.setReportType(100);
+                    }else if ("SUB".equals(connectDO.getProjectType())){
+                        addReport.setReportType(200);
+                    }else if ("STANDALONE".equals(connectDO.getProjectType())){
+                        addReport.setReportType(300);
+                    }
+                }
                 if (Integer.valueOf(400).equals(reportTemplateDO.getTbType())) {
                     addReport.setConfirmationTime(calendarApi.getCalendarDateByParam(LocalDate.now(), 3).getCheckedData());
                 }
@@ -3306,7 +3333,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
 
     private BoilerOrderItemCostInfoRepsVO createBaseVO(BoilerOrderItemCostInfoReqVO reqVO, BoilerConnectRecordReportDO templateDO) {
         BoilerOrderItemCostInfoRepsVO vo = new BoilerOrderItemCostInfoRepsVO();
-        vo.setIsMainProject(templateDO.getIsMainProject());
+        vo.setProjectType(templateDO.getProjectType());
         //获取记录模板
         if (templateDO.getRecordTemplateId() != null){
         DynamicTbDO recordDO = dynamicTbMapper.selectById(templateDO.getRecordTemplateId());
@@ -3691,13 +3718,15 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 200) {
             // 任务完成
             taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
-        } else if (taskOrderItemReport.getReportType() != null && (taskOrderItemReport.getReportType() == 300 || taskOrderItemReport.getReportType() == 400)) {
+        } else if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 400) {
             boolean isApproval = taskOrderItemReport.getIsApproval() != null && taskOrderItemReport.getIsApproval();
             boolean isRatify = taskOrderItemReport.getIsRatify() != null && taskOrderItemReport.getIsRatify();
             if (!isApproval && !isRatify) {
                 // 任务完成
                 taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
             }
+        } else if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 300) {
+                taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_PREPARE.getStatus());
         }
         taskOrderItemReportMapper.updateById(taskOrderItemReportDO);
 
@@ -3893,6 +3922,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         }
         updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_APPROVAL.getStatus());
         updateObj.setApprovalId(orderItemPrepareVO.getApproveId());
+        updateObj.setAuditor(orderItemPrepareVO.getAuditor());
 
         AdminUserRespDTO approveUser = adminUserApi.getUser(orderItemPrepareVO.getApproveId()).getData();
         if (approveUser != null) {
@@ -3903,22 +3933,22 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
 
         // 报告编制更新
         if (taskOrderItemReportDO.getReportType() != null && (taskOrderItemReportDO.getReportType() == 300 || taskOrderItemReportDO.getReportType() == 400)) {
-            BoilerTaskOrderItemReportDO oldReport = taskOrderItemReportMapper.selectById(orderItemPrepareVO.getId());
-            boolean isApproval = oldReport.getIsApproval() != null && oldReport.getIsApproval();
-            boolean isRatify = oldReport.getIsRatify() != null && oldReport.getIsRatify();
-
-            if (!isApproval && isRatify) {
-                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
-                updateObj.setRatifyId(orderItemPrepareVO.getApproveId());
-                updateObj.setApprovalId(null);
-                updateObj.setApprovalName(null);
-                updateObj.setRatifyId(userId);
-                if (approveUser != null) {
-                    updateObj.setRatifyName(approveUser.getNickname());
-                }
-            } else if (!isApproval && !isRatify) {
-                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
-            }
+//            BoilerTaskOrderItemReportDO oldReport = taskOrderItemReportMapper.selectById(orderItemPrepareVO.getId());
+//            boolean isApproval = oldReport.getIsApproval() != null && oldReport.getIsApproval();
+//            boolean isRatify = oldReport.getIsRatify() != null && oldReport.getIsRatify();
+//
+//            if (!isApproval && isRatify) {
+//                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
+//                updateObj.setRatifyId(orderItemPrepareVO.getApproveId());
+//                updateObj.setApprovalId(null);
+//                updateObj.setApprovalName(null);
+//                updateObj.setRatifyId(userId);
+//                if (approveUser != null) {
+//                    updateObj.setRatifyName(approveUser.getNickname());
+//                }
+//            } else if (!isApproval && !isRatify) {
+//                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
+//            }
         }
 
         taskOrderItemReportMapper.updateById(updateObj);
@@ -3954,6 +3984,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             }
         } catch (Exception e) {
             log.error("发起oa审核异常,OA流程已发起但响应解析失败,不中断业务流程", e);
+            throw new RuntimeException("发起oa审核异常", e);
         }
     }
 
@@ -3982,6 +4013,12 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             DeptRespDTO data = deptApi.getDept(equipBoilerDO.getRelatedDepartment()).getCheckedData();
             formmain_0042.setProperty(!equipBoilerDO.getType().equals("1") && data.getName().equals("锅炉检验部") ? "1" : "0");
         }
+        // 独审报告
+        if (formmain_0042.getReportnum().equals("39")){
+            BoilerConnectRecordReportDO boilerConnectRecordReportDO = boilerConnectRecordReportMapper.selectById(taskOrderItemReportDO.getProjectId());
+            formmain_0042.setProperty(boilerConnectRecordReportDO.getApprovalCode());
+
+        }
         formmain_0042.setBeginDate(boilerTaskOrderDO.getRemark());
         ExternalOACreateFlowBodyDataReq externalOACreateFlowBodyDataReq = new ExternalOACreateFlowBodyDataReq();
 
@@ -5621,15 +5658,18 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         try {
             ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
             PDFMergerUtility mergerUtility = new PDFMergerUtility();
-            taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
+            
+            // 使用普通stream替代parallelStream,避免并行处理导致内存溢出
+            for (BoilerTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
                 try {
-
                     //存在结论报告则放在最前面
                     if (StringUtil.isNotEmpty(taskOrderReportDO.getResultTemplateId())){
                         DynamicTbInsDO insResultDO = dynamicTbInsService.getDynamicRefId("result_" + taskOrderReportDO.getId());
                         if (insResultDO != null) {
                             byte[] pdf = pdfService.pdf(taskOrderReportDO.getResultTemplateId(), insResultDO.getId());
                             mergerUtility.addSource(new ByteArrayInputStream(pdf));
+                            // 及时释放PDF字节数组引用
+                            pdf = null;
                         }
                     }
 
@@ -5638,11 +5678,15 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                     if (insDO != null) {
                         byte[] pdf = pdfService.pdf(taskOrderReportDO.getReportTemplateId(), insDO.getId());
                         mergerUtility.addSource(new ByteArrayInputStream(pdf));
+                        // 及时释放PDF字节数组引用
+                        pdf = null;
                     }
                 } catch (Exception e) {
+                    log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
                     throw new RuntimeException(e);
                 }
-            });
+            }
+            
             // pdf 文件流合并
             mergerUtility.setDestinationStream(mergeOutputStream);
             mergerUtility.mergeDocuments(null);
@@ -5650,10 +5694,15 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             // 重新生成页码
             byte[] mergedPdfBytes = mergeOutputStream.toByteArray();
             byte[] pdfWithPageNumbers = pdfService.addPageNumbersToPdf(mergedPdfBytes);
+            
+            // 及时释放大对象引用
+            mergedPdfBytes = null;
+            mergeOutputStream.close();
 
             return pdfWithPageNumbers;
 
         } catch (Exception e) {
+            log.error("合并报告时发生错误, orderItemId: {}", orderItemId, e);
             throw new RuntimeException(e);
         }
 
@@ -5680,28 +5729,40 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         try {
             ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
             PDFMergerUtility mergerUtility = new PDFMergerUtility();
-            taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
+            
+            // 使用普通循环替代parallelStream,避免并行处理导致内存溢出
+            for (BoilerTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
                 try {
                     // 报告模板
                     DynamicTbInsDO insDO = dynamicTbInsService.getDynamicRefId(taskOrderReportDO.getId());
                     if (insDO != null) {
                         byte[] pdf = pdfService.pdf(taskOrderReportDO.getTemplateId(), insDO.getId());
                         mergerUtility.addSource(new ByteArrayInputStream(pdf));
+                        // 及时释放PDF字节数组引用
+                        pdf = null;
                     }
                 } catch (Exception e) {
+                    log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
                     throw new RuntimeException(e);
                 }
-            });
+            }
+            
             // pdf 文件流合并
             mergerUtility.setDestinationStream(mergeOutputStream);
             mergerUtility.mergeDocuments(null);
 
             // 重新生成页码
             byte[] mergedPdfBytes = mergeOutputStream.toByteArray();
+            byte[] pdfWithPageNumbers = pdfService.addPageNumbersToPdf(mergedPdfBytes);
+            
+            // 及时释放大对象引用
+            mergedPdfBytes = null;
+            mergeOutputStream.close();
 
-            return pdfService.addPageNumbersToPdf(mergedPdfBytes);
+            return pdfWithPageNumbers;
 
         } catch (Exception e) {
+            log.error("合并报告时发生错误, orderItemId: {}", orderItemId, e);
             throw new RuntimeException(e);
         }
 
@@ -6389,7 +6450,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
 
     /**
      * 根据任务单ID获取项目代码
-     * 查询满足checkid和BoilerConnectRecordReportDO的ID相同且isMainProject为1的记录,返回其projectCode
+     * 查询满足checkid和BoilerConnectRecordReportDO的ID相同且projectType为MAIN的记录,返回其projectCode
      * 如果没有找到主项目,则返回默认值"05"
      *
      * @param taskOrderId 任务单ID
@@ -6409,7 +6470,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             if (!checkIds.isEmpty()) {
                 List<BoilerConnectRecordReportDO> mainProjectList = boilerConnectRecordReportService.lambdaQuery()
                         .in(BoilerConnectRecordReportDO::getId, checkIds)
-                        .eq(BoilerConnectRecordReportDO::getIsMainProject, true)
+                        .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
                         .list();
 
                 if (!mainProjectList.isEmpty()) {

+ 1 - 5
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamictb/DynamicTbServiceImpl.java

@@ -605,11 +605,7 @@ public class DynamicTbServiceImpl extends ServiceImpl<DynamicTbMapper, DynamicTb
                 byte[] fileBytes = fileMap.get(oldId);
                 if (fileBytes != null && fileBytes.length > 0) {
                     String newFileUrl = fileApi.createFile(fileBytes);
-                    if (env.equals("uat")) {
-                        templateDO.setFileUrl("cyjw" + newFileUrl);
-                    } else if (env.equals("hst") || env.equals("hsd")) {
-                        templateDO.setFileUrl("dexdev" + newFileUrl);
-                    }
+                    templateDO.setFileUrl(newFileUrl);
                 }
 
                 StandardTemplateDO existingTemplate = standardTemplateMapper.selectById(oldId);

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/inspectionnature/InspectionNatureServiceImpl.java

@@ -207,7 +207,7 @@ public class InspectionNatureServiceImpl extends ServiceImpl<InspectionNatureMap
         templateDetailRespVOList.forEach(respVO -> Optional.ofNullable(templateTbMap.get(respVO.getTemplateId()))
                 .ifPresent(template -> {
                     respVO.setTemplateName(template.getProjectName());
-                    respVO.setIsMainProject(template.getIsMainProject());
+                    respVO.setProjectType(template.getProjectType());
         }));
 
         detailRespVO.setTemplateDetailRespVOList(templateDetailRespVOList);

+ 2 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java

@@ -168,7 +168,7 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
         List<BoilerConnectRecordReportDO> boilerConnectRecordReportDOS = boilerConnectRecordReportService.list(
                 new LambdaQueryWrapper<BoilerConnectRecordReportDO>()
                         .in(BoilerConnectRecordReportDO::getId, checkIds)
-                        .eq(BoilerConnectRecordReportDO::getIsMainProject, "1")
+                        .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
         );
         if (boilerConnectRecordReportDOS.isEmpty()) {
             throw new ServiceException(500, "生成报表数据失败,未找到主项目受理单配置");
@@ -237,7 +237,7 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
         List<BoilerConnectRecordReportDO> boilerConnectRecordReportDOS = boilerConnectRecordReportService.list(
                 new LambdaQueryWrapper<BoilerConnectRecordReportDO>()
                         .in(BoilerConnectRecordReportDO::getId, checkIds)
-                        .eq(BoilerConnectRecordReportDO::getIsMainProject, "1")
+                        .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
         );
         if (!boilerConnectRecordReportDOS.isEmpty()) {
             BoilerConnectRecordReportDO boilerConnectRecordReportDO = boilerConnectRecordReportDOS.get(0);

+ 13 - 9
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pdf/PdfServiceImpl.java

@@ -73,20 +73,24 @@ public class PdfServiceImpl implements PdfService {
 
             int totalPages = document.getNumberOfPages();
 
+            // 预加载字体,避免在循环中重复加载
+            PDType0Font songtiFont = null;
+            try {
+                InputStream resourceAsStream = WordToPdfUtils.class.getClassLoader().getResourceAsStream("fonts/simsun.ttf");
+                if (resourceAsStream != null) {
+                    songtiFont = PDType0Font.load(document, resourceAsStream);
+                } else {
+                    throw new IOException("找不到字体文件: fonts/simsun.ttf");
+                }
+            } catch (Exception e) {
+                throw new IOException("加载宋体字体失败: " + e.getMessage(), e);
+            }
+
             for (int i = 0; i < totalPages; i++) {
                 PDPage page = document.getPage(i);
                 try (PDPageContentStream contentStream = new PDPageContentStream(document, page,
                         PDPageContentStream.AppendMode.APPEND, true, true)) {
 
-                    // 加载宋体字体
-                    PDType0Font songtiFont = null;
-                    try {
-                        InputStream resourceAsStream = WordToPdfUtils.class.getClassLoader().getResourceAsStream("fonts/simsun.ttf");
-                        songtiFont = PDType0Font.load(document, resourceAsStream);
-                    } catch (Exception e) {
-                        throw new IOException("加载宋体字体失败: " + e.getMessage(), e);
-                    }
-
                     // 设置字体和大小
                     contentStream.beginText();
                     contentStream.setFont(songtiFont, 10);

+ 92 - 31
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java

@@ -821,6 +821,14 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                                 addReport1.setReportUrl(itemDO.getId());
                                 //addReport1.setSort(index.getAndSet(index.get() + 1));
                                 addReport1.setReportType(dynamicTbDO.getTbType());
+                                addReport1.setProjectId(recordReportDO.getId());
+                                if ("MAIN".equals(recordReportDO.getProjectType())) {
+                                    addReport1.setReportType(100);
+                                } else if ("SUB".equals(recordReportDO.getProjectType())) {
+                                    addReport1.setReportType(200);
+                                } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
+                                    addReport1.setReportType(300);
+                                }
 
                                 //使用配置的项目名称
                                 //addReport1.setReportName(dynamicTbDO.getTbName());
@@ -848,6 +856,14 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                             addReport1.setReportNo(reportNo);
                             //addReport1.setSort(index.getAndSet(index.get() + 1));
                             addReport1.setReportType(dynamicTbDO.getTbType());
+                            addReport1.setProjectId(recordReportDO.getId());
+                            if ("MAIN".equals(recordReportDO.getProjectType())) {
+                                addReport1.setReportType(100);
+                            } else if ("SUB".equals(recordReportDO.getProjectType())) {
+                                addReport1.setReportType(200);
+                            } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
+                                addReport1.setReportType(300);
+                            }
 
                             //使用配置的项目名称
                             //addReport1.setReportName(dynamicTbDO.getTbName());
@@ -858,6 +874,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                         }else if (recordReportDO.getReportTemplateId() != null){
                             DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(recordReportDO.getReportTemplateId());
                                 PipeTaskOrderItemReportDO addReport1 = new PipeTaskOrderItemReportDO();
+                                addReport1.setProjectId(recordReportDO.getId());
 //                                addReport1.setTemplateId(dynamicTbDO.getId());
                                 addReport1.setReportTemplateId(dynamicTbDO.getId());
                                 addReport1.setFee(item.getFee());
@@ -867,9 +884,16 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                                 addReport1.setTaskStatus(520);
                                 addReport1.setReportNo(reportNo);
                                 //addReport1.setSort(index.getAndSet(index.get() + 1));
-                                String isMainProject = recordReportDO.getIsMainProject();
-                                addReport1.setReportType("1".equals(isMainProject) ? 100 : 200);
-
+                                // projectType为MAIN的为主报告
+                                String projectType = recordReportDO.getProjectType();
+//                                addReport1.setReportType("MAIN".equals(projectType) ? 100 : 200);
+                                if ("MAIN".equals(recordReportDO.getProjectType())) {
+                                    addReport1.setReportType(100);
+                                } else if ("SUB".equals(recordReportDO.getProjectType())) {
+                                    addReport1.setReportType(200);
+                                } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
+                                    addReport1.setReportType(300);
+                                }
                                 //使用配置的项目名称
                                 //addReport1.setReportName(dynamicTbDO.getTbName());
                                 addReport1.setReportName(recordReportDO.getProjectName());
@@ -1236,7 +1260,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                                     // 找到匹配的检验性质模版
                                     repsVO.setUse("1".equals(natureTemplateDO.getIsDefault()));
                                 });
-                        repsVO.setUse(repsVO.getUse() || "1".equals(templateDO.getIsMainProject()));
+                        repsVO.setUse(repsVO.getUse() || "MAIN".equals(templateDO.getProjectType()));
 
                         return repsVO;
                     })
@@ -1258,7 +1282,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                                     // 找到匹配的检验性质模版
                                     baseVO.setUse("1".equals(natureTemplateDO.getIsDefault()));
                                 });
-                        baseVO.setUse(baseVO.getUse() || "1".equals(templateDO.getIsMainProject()));
+                        baseVO.setUse(baseVO.getUse() || "MAIN".equals(templateDO.getProjectType()));
                         return baseVO;
                     })
                     .collect(Collectors.toCollection(ArrayList::new)); // 预分配空间
@@ -1303,7 +1327,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                             repsVO.setFee(ConversionUtil.convert(connectRecordReportDO.getFee()));
                             repsVO.setReportType(dynamicTbDO.getTbType());
                             repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
-                            repsVO.setIsMainProject(connectRecordReportDO.getIsMainProject());
+                            repsVO.setProjectType(connectRecordReportDO.getProjectType());
+                            repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
                             return repsVO;
                         }else {
                             return null;
@@ -1320,7 +1345,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                                 repsVO.setIsAutoAmount("0");
                                 repsVO.setReportType(dynamicTbDO.getTbType());
                                 repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
-                                repsVO.setIsMainProject(connectRecordReportDO.getIsMainProject());
+                                repsVO.setProjectType(connectRecordReportDO.getProjectType());
+                                repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
                                 return repsVO;
                             }else {
                                 return null;
@@ -1354,7 +1380,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         vo.setReportType(recordDO.getTbType());
         //vo.setRecordTemplateUrl(templateDO.getRecordTemplateUrl());
         //vo.setReportTemplateUrl(templateDO.getReportTemplateUrl());
-            vo.setIsMainProject(templateDO.getIsMainProject());
+            vo.setProjectType(templateDO.getProjectType());
             // 将 String 类型的 fee 转换为 BigDecimal
             if (StringUtils.isNotBlank(templateDO.getFee())) {
                 vo.setFee(new BigDecimal(templateDO.getFee()));
@@ -1369,7 +1395,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             vo.setTemplateId(recordDO.getId());
             vo.setIsAutoAmount("0");
             vo.setReportType(recordDO.getTbType());
-            vo.setIsMainProject(templateDO.getIsMainProject());
+            vo.setProjectType(templateDO.getProjectType());
             // 将 String 类型的 fee 转换为 BigDecimal
             if (StringUtils.isNotBlank(templateDO.getFee())) {
                 vo.setFee(new BigDecimal(templateDO.getFee()));
@@ -1474,6 +1500,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                     BoilerConnectRecordReportDO connectDO = boilerConnectRecordReportMapper.selectById(vo.getConnectId());
                     String baseReportName = "";
                     if (connectDO !=  null){
+                        addReport.setProjectId(connectDO.getId());
                         baseReportName = connectDO.getProjectName();
                         if (vo.getFee() == null || vo.getFee().compareTo(BigDecimal.ZERO) == 0) {
                             addReport.setFee(ConversionUtil.convert(connectDO.getFee()));
@@ -1490,6 +1517,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                     }
 
                     addReport.setReportType(reportTemplateDO.getTbType());
+                    if (connectDO != null){
+                        if ("MAIN".equals(connectDO.getProjectType())){
+                            addReport.setReportType(100);
+                        }else if ("SUB".equals(connectDO.getProjectType())){
+                            addReport.setReportType(200);
+                        }else if ("STANDALONE".equals(connectDO.getProjectType())){
+                            addReport.setReportType(300);
+                        }
+                    }
                     if (Integer.valueOf(400).equals(reportTemplateDO.getTbType())) {
                         addReport.setConfirmationTime(calendarApi.getCalendarDateByParam(LocalDate.now(), 3).getCheckedData());
                     }
@@ -2877,13 +2913,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 200) {
             // 任务完成
             taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
-        } else if (taskOrderItemReport.getReportType() != null && (taskOrderItemReport.getReportType() == 300 || taskOrderItemReport.getReportType() == 400)) {
+        } else if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 400) {
             boolean isApproval = taskOrderItemReport.getIsApproval() != null && taskOrderItemReport.getIsApproval();
             boolean isRatify = taskOrderItemReport.getIsRatify() != null && taskOrderItemReport.getIsRatify();
             if (!isApproval && !isRatify) {
                 // 任务完成
                 taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
             }
+        } else if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 300) {
+            taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_PREPARE.getStatus());
         }
         taskOrderItemReportMapper.updateById(taskOrderItemReportDO);
 
@@ -3095,22 +3133,22 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
 
         // 报告编制更新
         if (taskOrderItemReportDO.getReportType() != null && (taskOrderItemReportDO.getReportType() == 300 || taskOrderItemReportDO.getReportType() == 400)) {
-            PipeTaskOrderItemReportDO oldReport = taskOrderItemReportMapper.selectById(orderItemPrepareVO.getId());
-            boolean isApproval = oldReport.getIsApproval() != null && oldReport.getIsApproval();
-            boolean isRatify = oldReport.getIsRatify() != null && oldReport.getIsRatify();
-
-            if (!isApproval && isRatify) {
-                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
-                updateObj.setRatifyId(orderItemPrepareVO.getApproveId());
-                updateObj.setApprovalId(null);
-                updateObj.setApprovalName(null);
-                updateObj.setRatifyId(userId);
-                if (approveUser != null) {
-                    updateObj.setRatifyName(approveUser.getNickname());
-                }
-            } else if (!isApproval && !isRatify) {
-                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
-            }
+//            PipeTaskOrderItemReportDO oldReport = taskOrderItemReportMapper.selectById(orderItemPrepareVO.getId());
+//            boolean isApproval = oldReport.getIsApproval() != null && oldReport.getIsApproval();
+//            boolean isRatify = oldReport.getIsRatify() != null && oldReport.getIsRatify();
+//
+//            if (!isApproval && isRatify) {
+//                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
+//                updateObj.setRatifyId(orderItemPrepareVO.getApproveId());
+//                updateObj.setApprovalId(null);
+//                updateObj.setApprovalName(null);
+//                updateObj.setRatifyId(userId);
+//                if (approveUser != null) {
+//                    updateObj.setRatifyName(approveUser.getNickname());
+//                }
+//            } else if (!isApproval && !isRatify) {
+//                updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
+//            }
         }
 
         taskOrderItemReportMapper.updateById(updateObj);
@@ -3146,6 +3184,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             }
         } catch (Exception e) {
             log.error("发起oa审核异常,OA流程已发起但响应解析失败,不中断业务流程", e);
+            throw new RuntimeException("发起oa审核异常", e);
         }
     }
 
@@ -4916,7 +4955,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
             PDFMergerUtility mergerUtility = new PDFMergerUtility();
 
-            taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
+            // 使用普通循环替代parallelStream,避免并行处理导致内存溢出
+            for (PipeTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
                 try {
 
                     //存在结论报告则放在最前面
@@ -4925,6 +4965,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                         if (insResultDO != null) {
                             byte[] pdf = pdfService.pdf(taskOrderReportDO.getResultTemplateId(), insResultDO.getId());
                             mergerUtility.addSource(new ByteArrayInputStream(pdf));
+                            // 及时释放PDF字节数组引用
+                            pdf = null;
                         }
                     }
 
@@ -4933,11 +4975,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                     if (insDO != null) {
                         byte[] pdf = pdfService.pdf(taskOrderReportDO.getReportTemplateId(), insDO.getId());
                         mergerUtility.addSource(new ByteArrayInputStream(pdf));
+                        // 及时释放PDF字节数组引用
+                        pdf = null;
                     }
                 } catch (Exception e) {
+                    log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
                     throw new RuntimeException(e);
                 }
-            });
+            }
+            
             // pdf 文件流合并
             mergerUtility.setDestinationStream(mergeOutputStream);
             mergerUtility.mergeDocuments(null);
@@ -4945,10 +4991,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             // 重新生成页码
             byte[] mergedPdfBytes = mergeOutputStream.toByteArray();
             byte[] pdfWithPageNumbers = pdfService.addPageNumbersToPdf(mergedPdfBytes);
+            
+            // 及时释放大对象引用
+            mergedPdfBytes = null;
+            mergeOutputStream.close();
 
             return pdfWithPageNumbers;
 
         } catch (Exception e) {
+            log.error("合并报告时发生错误, orderId: {}", orderId, e);
             throw new RuntimeException(e);
         }
 
@@ -4977,7 +5028,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
             PDFMergerUtility mergerUtility = new PDFMergerUtility();
 
-            taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
+            // 使用普通循环替代parallelStream,避免并行处理导致内存溢出
+            for (PipeTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
                 try {
 
                     // 报告模板
@@ -4985,11 +5037,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                     if (insDO != null) {
                         byte[] pdf = pdfService.pdf(taskOrderReportDO.getTemplateId(), insDO.getId());
                         mergerUtility.addSource(new ByteArrayInputStream(pdf));
+                        // 及时释放PDF字节数组引用
+                        pdf = null;
                     }
                 } catch (Exception e) {
+                    log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
                     throw new RuntimeException(e);
                 }
-            });
+            }
+            
             // pdf 文件流合并
             mergerUtility.setDestinationStream(mergeOutputStream);
             mergerUtility.mergeDocuments(null);
@@ -4997,10 +5053,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             // 重新生成页码
             byte[] mergedPdfBytes = mergeOutputStream.toByteArray();
             byte[] pdfWithPageNumbers = pdfService.addPageNumbersToPdf(mergedPdfBytes);
+            
+            // 及时释放大对象引用
+            mergedPdfBytes = null;
+            mergeOutputStream.close();
 
             return pdfWithPageNumbers;
 
         } catch (Exception e) {
+            log.error("合并报告时发生错误, orderId: {}", orderId, e);
             throw new RuntimeException(e);
         }
 
@@ -5703,7 +5764,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             if (!checkIds.isEmpty()) {
                 List<BoilerConnectRecordReportDO> mainProjectList = boilerConnectRecordReportService.lambdaQuery()
                         .in(BoilerConnectRecordReportDO::getId, checkIds)
-                        .eq(BoilerConnectRecordReportDO::getIsMainProject, true)
+                        .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
                         .list();
 
                 if (!mainProjectList.isEmpty()) {

+ 53 - 3
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/synchronization/SynchronizationServiceImpl.java

@@ -10,6 +10,7 @@ import cn.start.tz.framework.ip.core.Area;
 import cn.start.tz.framework.ip.core.utils.AreaUtils;
 import cn.start.tz.module.pressure2.controller.admin.equippipe.vo.EquipPipeSaveReqVO;
 import cn.start.tz.module.pressure2.controller.admin.equippipedetail.vo.EquipPipeDetailSaveReqVO;
+import cn.start.tz.module.pressure2.dal.dataobject.boilerconnectrecordreport.BoilerConnectRecordReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equipboiler.EquipBoilerDO;
@@ -24,6 +25,7 @@ import cn.start.tz.module.pressure2.dal.mysql.equippipedetail.EquipPipeDetailMap
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorder.PipeTaskOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemdetail.PipeTaskOrderItemDetailMapper;
+import cn.start.tz.module.pressure2.service.boilerconnectrecordreport.BoilerConnectRecordReportService;
 import cn.start.tz.module.pressure2.service.boilertaskorderitemreport.BoilerTaskOrderItemReportService;
 import cn.start.tz.module.pressure2.service.equipboiler.EquipBoilerService;
 import cn.start.tz.module.pressure2.service.equippipe.EquipPipeService;
@@ -305,15 +307,19 @@ public class SynchronizationServiceImpl implements SynchronizationService {
     @Resource
     @Lazy
     private PipeTaskOrderItemDetailMapper pipeTaskOrderItemDetailMapper;
+    @Resource
+    private BoilerConnectRecordReportService boilerConnectRecordReportService;
 
-
+    @Value("${external.oa.rest.enableProd}")
+    private boolean enablProd;
     @Override
     public List<SignatureDto> authorizeSignature(String reportId, String name) {
         if (name == null) {
             name = "";
         }
         BoilerTaskOrderItemReportDO boilerTaskOrderItemReportDO = boilerTaskOrderItemReportService.getById(reportId);
-        if (boilerTaskOrderItemReportDO != null) {
+        // 主报告
+        if (boilerTaskOrderItemReportDO != null && boilerTaskOrderItemReportDO.getReportType() == 100) {
             Map<String, Object> map = new HashMap<>();
             map.put("NAME", name);
             map.put("FIELD0001", boilerTaskOrderItemReportDO.getReportNo().substring(2, 4));
@@ -327,9 +333,32 @@ public class SynchronizationServiceImpl implements SynchronizationService {
             String result = getRequest("formmain_1650", map);
             JSONObject jsonObject = JSONObject.parseObject(result);
             return JSONArray.parseArray(jsonObject.getString("data"), SignatureDto.class);
+            // 独审报告
+        }else if (boilerTaskOrderItemReportDO != null && boilerTaskOrderItemReportDO.getReportType() == 300) {
+            BoilerConnectRecordReportDO boilerConnectRecordReportDO = boilerConnectRecordReportService.getById(boilerTaskOrderItemReportDO.getProjectId());
+            Map<String, Object> map = new HashMap<>();
+            map.put("FIELD0001", boilerConnectRecordReportDO.getProjectCode());
+            map.put("FIELD0003", boilerConnectRecordReportDO.getApprovalCode());
+            String result = getRequest("formmain_1650", map);
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            List<SignatureDto> data = JSONArray.parseArray(jsonObject.getString("data"), SignatureDto.class);
+            if (!enablProd) {
+                SignatureDto e = new SignatureDto();
+                if (boilerConnectRecordReportDO.getApprovalCode().equals("MFL")) {
+                    e.setCODE("300802");
+                    e.setNAME("300802");
+                } else if (boilerConnectRecordReportDO.getApprovalCode().equals("RL")) {
+                    e.setCODE("300803");
+                    e.setNAME("300803");
+                }
+                data.add(e);
+            }
+
+            return data;
         }
         PipeTaskOrderItemReportDO pipeTaskOrderItemReportDO = pipeTaskOrderItemReportService.getById(reportId);
-        if (pipeTaskOrderItemReportDO != null) {
+        // 主报告
+        if (pipeTaskOrderItemReportDO != null && pipeTaskOrderItemReportDO.getReportType() == 100) {
             Map<String, Object> map = new HashMap<>();
             map.put("NAME", name);
             map.put("FIELD0001", pipeTaskOrderItemReportDO.getReportNo().substring(2, 4));
@@ -351,6 +380,27 @@ public class SynchronizationServiceImpl implements SynchronizationService {
             String data = getRequest("formmain_1650", map);
             JSONObject jsonObject = JSONObject.parseObject(data);
             return JSONArray.parseArray(jsonObject.getString("data"), SignatureDto.class);
+        }else if (pipeTaskOrderItemReportDO != null && pipeTaskOrderItemReportDO.getReportType() == 300) {
+            BoilerConnectRecordReportDO boilerConnectRecordReportDO = boilerConnectRecordReportService.getById(pipeTaskOrderItemReportDO.getProjectId());
+            Map<String, Object> map = new HashMap<>();
+            map.put("FIELD0001", boilerConnectRecordReportDO.getProjectCode());
+            map.put("FIELD0003", boilerConnectRecordReportDO.getApprovalCode());
+            String result = getRequest("formmain_1650", map);
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            List<SignatureDto> data = JSONArray.parseArray(jsonObject.getString("data"), SignatureDto.class);
+            if (!enablProd) {
+                SignatureDto e = new SignatureDto();
+                if (boilerConnectRecordReportDO.getApprovalCode().equals("MFL")) {
+                    e.setCODE("300802");
+                    e.setNAME("300802");
+                } else if (boilerConnectRecordReportDO.getApprovalCode().equals("RL")) {
+                    e.setCODE("300803");
+                    e.setNAME("300803");
+                }
+                data.add(e);
+            }
+
+            return data;
         }
         return new ArrayList<>();
     }