Przeglądaj źródła

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

yangguanjin 1 tydzień temu
rodzic
commit
13a31fcb57
32 zmienionych plików z 943 dodań i 122 usunięć
  1. 17 0
      build-prod/updata.sql
  2. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportPageReqVO.java
  3. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportRespVO.java
  4. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportSaveReqVO.java
  5. 52 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/BoilerPartInstructionConfigController.java
  6. 20 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/vo/BoilerPartInstructionConfigPageReqVO.java
  7. 34 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/vo/BoilerPartInstructionConfigRespVO.java
  8. 20 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/vo/BoilerPartInstructionConfigSaveVO.java
  9. 17 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/BoilerTaskOrderController.java
  10. 8 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/BoilerTaskOrderInspectionController.java
  11. 32 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerOrderItemAddFromExistingVO.java
  12. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerOrderItemCostInfoRepsVO.java
  13. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/vo/BoilerTaskOrderItemReportPageReqVO.java
  14. 5 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/vo/BoilerTaskOrderItemReportRespVO.java
  15. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/PipeTaskOrderController.java
  16. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/PipeTaskOrderInspectionController.java
  17. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/appapi/boilertaskorder/AppApiBoilerTaskOrderController.java
  18. 1 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/appapi/pipetaskorder/AppApiPipeTaskOrderController.java
  19. 6 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilerconnectrecordreport/BoilerConnectRecordReportDO.java
  20. 39 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilerpartinstructionconfig/BoilerPartInstructionConfigDO.java
  21. 15 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilertaskorderitem/BoilerTaskOrderItemDO.java
  22. 15 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/pipetaskorder/PipeTaskOrderDO.java
  23. 9 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/boilerpartinstructionconfig/BoilerPartInstructionConfigMapper.java
  24. 32 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilerpartinstructionconfig/BoilerPartInstructionConfigService.java
  25. 98 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilerpartinstructionconfig/BoilerPartInstructionConfigServiceImpl.java
  26. 13 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderService.java
  27. 302 7
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  28. 11 83
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderissuereport/BoilerTaskOrderIssueReportServiceImpl.java
  29. 48 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/comm/QC01001_202400OFData.java
  30. 8 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderService.java
  31. 98 15
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  32. 11 10
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderissuereport/PipeTaskOrderIssueReportServiceImpl.java

+ 17 - 0
build-prod/updata.sql

@@ -20,3 +20,20 @@ ALTER TABLE "PRESSURE2_EQUIP_PIPE_SCHEDULING_CHECK" MODIFY "DEFAULT_COUNT" INT D
 ALTER TABLE "PRESSURE2_EQUIP_BOILER_SCHEDULING_CHECK" MODIFY "DEFAULT_COUNT" INT DEFAULT (1) NULL;
 
 --已加
+
+--20260627
+ALTER TABLE "PRESSURE_TASK_ORDER" ADD COLUMN "SCHEME_ENTER_TIME" DATETIME(6);
+ALTER TABLE "PRESSURE_TASK_ORDER" ADD COLUMN "SCHEME_APPROVAL_TIME" VARCHAR(50);
+ALTER TABLE "PRESSURE_TASK_ORDER" ADD COLUMN "SCHEME_RATIFY_TIME" VARCHAR(50);
+COMMENT ON COLUMN "PRESSURE_TASK_ORDER"."SCHEME_ENTER_TIME" IS '检验方案录入时间';
+COMMENT ON COLUMN "PRESSURE_TASK_ORDER"."SCHEME_APPROVAL_TIME" IS '检验方案审核时间';
+COMMENT ON COLUMN "PRESSURE_TASK_ORDER"."SCHEME_RATIFY_TIME" IS '检验方案审批时间';
+
+ALTER TABLE "PRESSURE2_BOILER_TASK_ORDER_ITEM" ADD COLUMN "SCHEME_ENTER_TIME" DATETIME(6);
+ALTER TABLE "PRESSURE2_BOILER_TASK_ORDER_ITEM" ADD COLUMN "SCHEME_APPROVAL_TIME" VARCHAR(50);
+ALTER TABLE "PRESSURE2_BOILER_TASK_ORDER_ITEM" ADD COLUMN "SCHEME_RATIFY_TIME" VARCHAR(50);
+COMMENT ON COLUMN "PRESSURE2_BOILER_TASK_ORDER_ITEM"."SCHEME_ENTER_TIME" IS '检验方案录入时间';
+COMMENT ON COLUMN "PRESSURE2_BOILER_TASK_ORDER_ITEM"."SCHEME_APPROVAL_TIME" IS '检验方案审核时间';
+COMMENT ON COLUMN "PRESSURE2_BOILER_TASK_ORDER_ITEM"."SCHEME_RATIFY_TIME" IS '检验方案审批时间';
+
+--已加

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

@@ -79,4 +79,10 @@ public class BoilerConnectRecordReportPageReqVO extends PageParam {
      */
     @Schema(description = "是否需要签名")
     private String isSign;
+
+    /**
+     * 是否收费
+     */
+    @Schema(description = "是否收费")
+    private String isFee;
 }

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

@@ -94,4 +94,7 @@ public class BoilerConnectRecordReportRespVO {
      */
     @Schema(description = "是否需要签名")
     private String  isSign;
+
+    @Schema(description = "是否收费")
+    private String isFee;
 }

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

@@ -67,4 +67,10 @@ public class BoilerConnectRecordReportSaveReqVO {
      */
     @Schema(description = "是否需要签名")
     private String  isSign;
+
+    /**
+     * 是否收费
+     */
+    @Schema(description = "是否收费")
+    private String isFee;
 }

+ 52 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/BoilerPartInstructionConfigController.java

@@ -0,0 +1,52 @@
+package cn.start.tz.module.pressure2.controller.admin.boilerpartinstructionconfig;
+
+import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.module.pressure2.controller.admin.boilerpartinstructionconfig.vo.*;
+import cn.start.tz.module.pressure2.service.boilerpartinstructionconfig.BoilerPartInstructionConfigService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import java.util.List;
+
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "锅炉部件-操作指导书配置")
+@RestController
+@RequestMapping("/pressure2/boiler-part-instruction-config")
+public class BoilerPartInstructionConfigController {
+
+    @Resource
+    private BoilerPartInstructionConfigService configService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建部件-指导书配置")
+    public CommonResult<String> create(@Valid @RequestBody BoilerPartInstructionConfigSaveVO saveVO) {
+        String id = configService.createConfig(saveVO);
+        return success(id);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除部件-指导书配置")
+    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
+        configService.deleteConfig(id);
+        return success(true);
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "部件-指导书配置分页")
+    public CommonResult<PageResult<BoilerPartInstructionConfigRespVO>> page(@Valid BoilerPartInstructionConfigPageReqVO pageReqVO) {
+        PageResult<BoilerPartInstructionConfigRespVO> pageResult = configService.getConfigPage(pageReqVO);
+        return success(pageResult);
+    }
+
+    @GetMapping("/list-by-part-type")
+    @Operation(summary = "根据部件类型获取关联的指导书模板ID列表")
+    public CommonResult<List<String>> listByPartType(@RequestParam("partType") String partType) {
+        List<String> templateIds = configService.getInstructionTemplateIdsByPartType(partType);
+        return success(templateIds);
+    }
+}

+ 20 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/vo/BoilerPartInstructionConfigPageReqVO.java

@@ -0,0 +1,20 @@
+package cn.start.tz.module.pressure2.controller.admin.boilerpartinstructionconfig.vo;
+
+import cn.start.tz.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "锅炉部件-操作指导书配置 分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class BoilerPartInstructionConfigPageReqVO extends PageParam {
+
+    @Schema(description = "部件类型", example = "1")
+    private String partType;
+
+    @Schema(description = "指导书模板ID", example = "31564")
+    private String instructionTemplateId;
+}

+ 34 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/vo/BoilerPartInstructionConfigRespVO.java

@@ -0,0 +1,34 @@
+package cn.start.tz.module.pressure2.controller.admin.boilerpartinstructionconfig.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "锅炉部件-操作指导书配置 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BoilerPartInstructionConfigRespVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "23618")
+    @ExcelProperty("主键")
+    private String id;
+
+    @Schema(description = "部件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("部件类型")
+    private String partType;
+
+    @Schema(description = "操作指导书模板ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31564")
+    @ExcelProperty("指导书模板ID")
+    private String instructionTemplateId;
+
+    @Schema(description = "模板名称")
+    @ExcelProperty("模板名称")
+    private String instructionTemplateName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+}

+ 20 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerpartinstructionconfig/vo/BoilerPartInstructionConfigSaveVO.java

@@ -0,0 +1,20 @@
+package cn.start.tz.module.pressure2.controller.admin.boilerpartinstructionconfig.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "锅炉部件-操作指导书配置 新增 Request VO")
+@Data
+public class BoilerPartInstructionConfigSaveVO {
+
+    @Schema(description = "部件类型(字典值)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotEmpty(message = "部件类型不能为空")
+    private String partType;
+
+    @Schema(description = "操作指导书模板ID列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[\"31564\",\"31565\"]")
+    @NotEmpty(message = "指导书模板不能为空")
+    private List<String> instructionTemplateIds;
+}

+ 17 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/BoilerTaskOrderController.java

@@ -1,6 +1,7 @@
 package cn.start.tz.module.pressure2.controller.admin.boilertaskorder;
 
 import cn.start.tz.framework.common.exception.ErrorCode;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.BoilerTaskOrderItemReportRespVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderoperation.vo.BoilerTaskOrderOperationPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderoperation.vo.BoilerTaskOrderOperationRespVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderoperation.vo.BoilerTaskOrderOperationSaveReqVO;
@@ -317,6 +318,21 @@ public class BoilerTaskOrderController {
         return success(result);
     }
 
+    @PostMapping("/order-item/add-report-from-existing")
+    @Operation(summary = "任务单-从已有指导书引用创建新指导书")
+    public CommonResult<String> addReportFromExisting(@RequestBody BoilerOrderItemAddFromExistingVO addFromExistingVO) {
+        String result = boilerTaskOrderService.addReportFromExisting(addFromExistingVO);
+        return success(result);
+    }
+
+    @GetMapping("/order-item/history-instructions")
+    @Operation(summary = "获取设备上次任务单的指导书列表")
+    public CommonResult<List<BoilerTaskOrderItemReportRespVO>> getHistoryInstructions(
+            @RequestParam("equipId") String equipId,
+            @RequestParam(value = "currentOrderItemId", required = false) String currentOrderItemId) {
+        return success(boilerTaskOrderService.getHistoryInstructionsByEquipId(equipId, currentOrderItemId));
+    }
+
     @PutMapping("/order-item/initiateApproval")
     @Operation(summary = "任务单-检验意见通知书(重大事故)发起审批")
     public CommonResult<Boolean> opinionNoticeInitiateApproval(@RequestBody MajorIssuesSubmitVO majorIssuesSubmitVO) {
@@ -544,7 +560,7 @@ public class BoilerTaskOrderController {
     public void generateReportPdf(@RequestParam(value = "orderItemId") String orderItemId,
                                   HttpServletResponse response) throws Exception {
 
-        byte[] pdfByte = boilerTaskOrderService.getReportOutputStreamMerge(orderItemId);
+        byte[] pdfByte = boilerTaskOrderService.getReportOutputStreamMerge(orderItemId,false);
         if (pdfByte != null) {
             response.getOutputStream().write(pdfByte);
         }else{

+ 8 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/BoilerTaskOrderInspectionController.java

@@ -21,6 +21,7 @@ import cn.start.tz.module.pressure2.service.boilertaskorderoperation.BoilerTaskO
 import cn.start.tz.module.system.api.dict.dto.DictDataRespDTO;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
@@ -153,6 +154,13 @@ public class BoilerTaskOrderInspectionController {
         return success(countVo);
     }
 
+    @GetMapping("/check-scheme-status")
+    @Operation(summary = "校验设备是否有已审批的检验方案")
+    @Parameter(name = "orderItemId", description = "任务单设备ID", required = true)
+    public CommonResult<Boolean> checkSchemeStatus(@RequestParam("orderItemId") String orderItemId) {
+        return success(boilerTaskOrderService.checkSchemeApproved(orderItemId));
+    }
+
     @PostMapping("/reported/export-excel")
     @Operation(summary = "隐患上报记录导出")
     @Tag(name = "检验意见通知书隐患上报")

+ 32 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerOrderItemAddFromExistingVO.java

@@ -0,0 +1,32 @@
+package cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+@Data
+@Schema(description = "type=1设备添加作业指导书(模板生成/引用上次模板)")
+public class BoilerOrderItemAddFromExistingVO {
+
+    @Schema(description = "任务单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1406")
+    private String orderId;
+
+    @Schema(description = "任务单设备id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32372")
+    private String orderItemId;
+
+    @Schema(description = "添加方式:2=模板生成,1=引用上次模板", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotBlank(message = "添加方式不能为空")
+    private String addType;
+
+    @Schema(description = "模板id(模板生成时必填)", example = "7363")
+    private String templateId;
+
+    @Schema(description = "源指导书报告id(引用上次模板时必填)", example = "20472")
+    private String instructionId;
+
+    @Schema(description = "部件id", example = "12345")
+    private String itemPartId;
+
+    @Schema(description = "备注", example = "")
+    private String remark;
+}

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

@@ -72,4 +72,7 @@ public class BoilerOrderItemCostInfoRepsVO {
 
     @Schema(description = "默认数量")
     private Integer defaultCount;
+
+    @Schema(description = "是否收费")
+    private String isFee;
 }

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/vo/BoilerTaskOrderItemReportPageReqVO.java

@@ -28,6 +28,12 @@ public class BoilerTaskOrderItemReportPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    /**
+     * 锅炉检验部件ID
+     */
+    @Schema(description = "炉检验部件ID")
+    private String itemPartId;
+
     @Schema(description = "报告编号")
     private String reportNo;
 

+ 5 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/vo/BoilerTaskOrderItemReportRespVO.java

@@ -27,6 +27,11 @@ public class BoilerTaskOrderItemReportRespVO {
     @ExcelProperty("报告模板")
     private String templateId;
 
+    /**
+     * 锅炉检验部件ID
+     */
+    private String itemPartId;
+
     @Schema(description = "创建时间")
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/PipeTaskOrderController.java

@@ -523,7 +523,7 @@ public class PipeTaskOrderController {
     public void generateReportPdf(@RequestParam(value = "orderId") String orderId,
                        HttpServletResponse response) throws Exception {
 
-        byte[] pdfByte = pipeTaskOrderService.getReportOutputStreamMerge(orderId);
+        byte[] pdfByte = pipeTaskOrderService.getReportOutputStreamMerge(orderId,false);
         if (pdfByte != null) {
             response.getOutputStream().write(pdfByte);
         }else{

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/PipeTaskOrderInspectionController.java

@@ -154,6 +154,12 @@ public class PipeTaskOrderInspectionController {
         return success(countVo);
     }
 
+    @GetMapping("/check-scheme-status")
+    @Operation(summary = "校验任务单是否有已审批的检验方案")
+    public CommonResult<Boolean> checkSchemeStatus(@RequestParam("orderId") String orderId) {
+        return success(pipeTaskOrderService.checkSchemeApproved(orderId));
+    }
+
     @PostMapping("/reported/export-excel")
     @Operation(summary = "隐患上报记录导出")
     @Tag(name = "检验意见通知书隐患上报")

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/appapi/boilertaskorder/AppApiBoilerTaskOrderController.java

@@ -527,7 +527,7 @@ public class AppApiBoilerTaskOrderController {
     public void generateReportPdf(@RequestParam(value = "orderItemId") String orderItemId,
                                   HttpServletResponse response) throws Exception {
 
-        byte[] pdfByte = boilerTaskOrderService.getReportOutputStreamMerge(orderItemId);
+        byte[] pdfByte = boilerTaskOrderService.getReportOutputStreamMerge(orderItemId,false);
         if (pdfByte != null) {
             response.getOutputStream().write(pdfByte);
         }else{

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/appapi/pipetaskorder/AppApiPipeTaskOrderController.java

@@ -497,7 +497,7 @@ public class AppApiPipeTaskOrderController {
     public void generateReportPdf(@RequestParam(value = "orderId") String orderId,
                        HttpServletResponse response) throws Exception {
 
-        byte[] pdfByte = pipeTaskOrderService.getReportOutputStreamMerge(orderId);
+        byte[] pdfByte = pipeTaskOrderService.getReportOutputStreamMerge(orderId,false);
         if (pdfByte != null) {
             response.getOutputStream().write(pdfByte);
         }else{

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

@@ -90,7 +90,12 @@ public class BoilerConnectRecordReportDO extends BaseDO {
      */
     private String isSign;
 
+    /**
+     * 是否收费
+     */
+    private String isFee;
+
     public String isMain(){
-        return String.valueOf("SUB".equals(this.projectType));
+        return String.valueOf("MAIN".equals(this.projectType));
     }
 }

+ 39 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilerpartinstructionconfig/BoilerPartInstructionConfigDO.java

@@ -0,0 +1,39 @@
+package cn.start.tz.module.pressure2.dal.dataobject.boilerpartinstructionconfig;
+
+import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 锅炉部件-操作指导书配置 DO
+ *
+ * @author 特种管理员
+ */
+@TableName("pressure2_boiler_part_instruction_config")
+@KeySequence("pressure2_boiler_part_instruction_config_seq")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BoilerPartInstructionConfigDO extends BaseDO {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+    /**
+     * 部件类型(字典值)
+     */
+    private String partType;
+    /**
+     * 操作指导书模板ID
+     */
+    private String instructionTemplateId;
+
+}

+ 15 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilertaskorderitem/BoilerTaskOrderItemDO.java

@@ -82,4 +82,19 @@ public class BoilerTaskOrderItemDO extends BaseDO {
     private Boolean isSuspend;
 
     private LocalDateTime suspendTime;
+
+    /**
+     * 检验方案录入时间(首次审批通过时记录)
+     */
+    private LocalDateTime schemeEnterTime;
+
+    /**
+     * 检验方案审核时间(首次审批通过时记录)
+     */
+    private LocalDateTime schemeApprovalTime;
+
+    /**
+     * 检验方案审批时间(首次审批通过时记录)
+     */
+    private LocalDateTime schemeRatifyTime;
 }

+ 15 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/pipetaskorder/PipeTaskOrderDO.java

@@ -344,6 +344,21 @@ public class PipeTaskOrderDO extends BaseDO {
 
     private LocalDateTime noTaxPayTime;
 
+    /**
+     * 检验方案录入时间(首次审批通过时记录)
+     */
+    private LocalDateTime schemeEnterTime;
+
+    /**
+     * 检验方案审核时间(首次审批通过时记录)
+     */
+    private LocalDateTime schemeApprovalTime;
+
+    /**
+     * 检验方案审批时间(首次审批通过时记录)
+     */
+    private LocalDateTime schemeRatifyTime;
+
     /**
      * 是否同步数据
      */

+ 9 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/boilerpartinstructionconfig/BoilerPartInstructionConfigMapper.java

@@ -0,0 +1,9 @@
+package cn.start.tz.module.pressure2.dal.mysql.boilerpartinstructionconfig;
+
+import cn.start.tz.framework.mybatis.core.mapper.BaseMapperX;
+import cn.start.tz.module.pressure2.dal.dataobject.boilerpartinstructionconfig.BoilerPartInstructionConfigDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BoilerPartInstructionConfigMapper extends BaseMapperX<BoilerPartInstructionConfigDO> {
+}

+ 32 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilerpartinstructionconfig/BoilerPartInstructionConfigService.java

@@ -0,0 +1,32 @@
+package cn.start.tz.module.pressure2.service.boilerpartinstructionconfig;
+
+import cn.start.tz.module.pressure2.controller.admin.boilerpartinstructionconfig.vo.*;
+import cn.start.tz.framework.common.pojo.PageResult;
+
+import java.util.List;
+
+/**
+ * 锅炉部件-操作指导书配置 Service 接口
+ */
+public interface BoilerPartInstructionConfigService {
+
+    /**
+     * 创建配置
+     */
+    String createConfig(BoilerPartInstructionConfigSaveVO saveVO);
+
+    /**
+     * 删除配置
+     */
+    void deleteConfig(String id);
+
+    /**
+     * 分页查询
+     */
+    PageResult<BoilerPartInstructionConfigRespVO> getConfigPage(BoilerPartInstructionConfigPageReqVO pageReqVO);
+
+    /**
+     * 根据部件类型获取关联的指导书模板ID列表
+     */
+    List<String> getInstructionTemplateIdsByPartType(String partType);
+}

+ 98 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilerpartinstructionconfig/BoilerPartInstructionConfigServiceImpl.java

@@ -0,0 +1,98 @@
+package cn.start.tz.module.pressure2.service.boilerpartinstructionconfig;
+
+import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.util.object.BeanUtils;
+import cn.start.tz.module.pressure2.controller.admin.boilerpartinstructionconfig.vo.*;
+import cn.start.tz.module.pressure2.dal.dataobject.boilerpartinstructionconfig.BoilerPartInstructionConfigDO;
+import cn.start.tz.module.pressure2.dal.dataobject.dynamictb.DynamicTbDO;
+import cn.start.tz.module.pressure2.dal.mysql.boilerpartinstructionconfig.BoilerPartInstructionConfigMapper;
+import cn.start.tz.module.pressure2.dal.mysql.dynamictb.DynamicTbMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class BoilerPartInstructionConfigServiceImpl implements BoilerPartInstructionConfigService {
+
+    @Resource
+    private BoilerPartInstructionConfigMapper configMapper;
+
+    @Resource
+    private DynamicTbMapper dynamicTbMapper;
+
+    @Override
+    public String createConfig(BoilerPartInstructionConfigSaveVO saveVO) {
+        int created = 0;
+        for (String templateId : saveVO.getInstructionTemplateIds()) {
+            // 检查是否已存在相同配置
+            Long count = configMapper.selectCount(new LambdaQueryWrapper<BoilerPartInstructionConfigDO>()
+                    .eq(BoilerPartInstructionConfigDO::getPartType, saveVO.getPartType())
+                    .eq(BoilerPartInstructionConfigDO::getInstructionTemplateId, templateId)
+            );
+            if (count != null && count > 0) {
+                continue; // 已存在则跳过
+            }
+            BoilerPartInstructionConfigDO configDO = new BoilerPartInstructionConfigDO();
+            configDO.setPartType(saveVO.getPartType());
+            configDO.setInstructionTemplateId(templateId);
+            configMapper.insert(configDO);
+            created++;
+        }
+        return String.valueOf(created);
+    }
+
+    @Override
+    public void deleteConfig(String id) {
+        configMapper.deleteById(id);
+    }
+
+    @Override
+    public PageResult<BoilerPartInstructionConfigRespVO> getConfigPage(BoilerPartInstructionConfigPageReqVO pageReqVO) {
+        LambdaQueryWrapper<BoilerPartInstructionConfigDO> wrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(pageReqVO.getPartType())) {
+            wrapper.eq(BoilerPartInstructionConfigDO::getPartType, pageReqVO.getPartType());
+        }
+        if (StringUtils.isNotBlank(pageReqVO.getInstructionTemplateId())) {
+            wrapper.eq(BoilerPartInstructionConfigDO::getInstructionTemplateId, pageReqVO.getInstructionTemplateId());
+        }
+        PageResult<BoilerPartInstructionConfigDO> pageResult = configMapper.selectPage(pageReqVO, wrapper);
+        
+        // 查询所有模板信息
+        List<String> templateIds = pageResult.getList().stream()
+                .map(BoilerPartInstructionConfigDO::getInstructionTemplateId)
+                .distinct()
+                .collect(Collectors.toList());
+        
+        Map<String, String> templateNameMap = Map.of();
+        if (!templateIds.isEmpty()) {
+            List<DynamicTbDO> templates = dynamicTbMapper.selectBatchIds(templateIds);
+            templateNameMap = templates.stream()
+                    .collect(Collectors.toMap(DynamicTbDO::getId, DynamicTbDO::getTbName, (a, b) -> a));
+        }
+
+        Map<String, String> finalTemplateNameMap = templateNameMap;
+        return new PageResult<>(
+                pageResult.getList().stream().map(config -> {
+                    BoilerPartInstructionConfigRespVO respVO = BeanUtils.toBean(config, BoilerPartInstructionConfigRespVO.class);
+                    respVO.setInstructionTemplateName(finalTemplateNameMap.getOrDefault(config.getInstructionTemplateId(), ""));
+                    return respVO;
+                }).collect(Collectors.toList()),
+                pageResult.getTotal()
+        );
+    }
+
+    @Override
+    public List<String> getInstructionTemplateIdsByPartType(String partType) {
+        List<BoilerPartInstructionConfigDO> configs = configMapper.selectList(
+                BoilerPartInstructionConfigDO::getPartType, partType
+        );
+        return configs.stream()
+                .map(BoilerPartInstructionConfigDO::getInstructionTemplateId)
+                .collect(Collectors.toList());
+    }
+}

+ 13 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderService.java

@@ -16,6 +16,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import jakarta.validation.*;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.*;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.BoilerTaskOrderItemReportRespVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemrecheck.vo.BoilerTaskOrderItemRecheckRespVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
 import cn.start.tz.framework.common.pojo.PageResult;
@@ -141,6 +142,10 @@ public interface BoilerTaskOrderService extends IService<BoilerTaskOrderDO>  {
 
     String addMajorIssues(TaskOrderMajorIssuesVO taskOrderMajorIssuesVO);
 
+    String addReportFromExisting(BoilerOrderItemAddFromExistingVO addFromExistingVO);
+
+    List<BoilerTaskOrderItemReportRespVO> getHistoryInstructionsByEquipId(String equipId, String currentOrderItemId);
+
     Boolean opinionNotice(MajorIssuesSubmitVO majorIssuesSubmitVO);
 
     void orderItemReportNoticeBook(BoilerOrderItemIdVO orderItemIdVO);
@@ -203,7 +208,7 @@ public interface BoilerTaskOrderService extends IService<BoilerTaskOrderDO>  {
 
     void orderConfirmFinish(OrderConfirmFinishVO orderItemRatifyVO);
 
-    byte[] getReportOutputStreamMerge(String orderId);
+    byte[] getReportOutputStreamMerge(String orderId,boolean isCover);
 
     Boolean syncReportData(BoilerTaskOrderSyncReportVO reqVO);
 
@@ -217,6 +222,13 @@ public interface BoilerTaskOrderService extends IService<BoilerTaskOrderDO>  {
 
     Boolean generateInspectionPlan(MajorIssuesSubmitVO majorIssuesSubmitVO);
 
+    /**
+     * 校验设备下是否有已审批完成的检验方案
+     * @param orderItemId 任务单设备ID
+     * @return true=存在已审批的检验方案
+     */
+    boolean checkSchemeApproved(String orderItemId);
+
     Boolean updatePayStatus(UpdatePayStatusDTO payInfo);
 
     void majorIssuesRecovery(@Valid TaskOrderMajorIssuesVO taskOrderMajorIssuesVO);

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

@@ -141,6 +141,8 @@ import cn.start.tz.module.pressure2.service.common.RedisService;
 import cn.start.tz.module.pressure2.service.costfield.CostFieldService;
 import cn.start.tz.module.pressure2.service.dynamictb.DynamicTbService;
 import cn.start.tz.module.pressure2.service.dynamictbcol.DynamicTbColService;
+import cn.start.tz.module.pressure2.dal.mysql.dynamictbins.DynamicTbInsMapper;
+import cn.start.tz.module.pressure2.dal.mysql.dynamictbval.DynamicTbValMapper;
 import cn.start.tz.module.pressure2.service.dynamictbins.DynamicTbInsService;
 import cn.start.tz.module.pressure2.service.dynamictbval.DynamicTbValService;
 import cn.start.tz.module.pressure2.service.equipboiler.EquipBoilerService;
@@ -277,6 +279,12 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
     @Resource
     private BoilerTaskOrderItemReportUserMapper taskOrderItemReportUserMapper;
 
+    @Resource
+    private DynamicTbInsMapper dynamicTbInsMapper;
+
+    @Resource
+    private DynamicTbValMapper dynamicTbValMapper;
+
     @Resource
     private BoilerTaskOrderItemReportEquipMapper taskOrderItemReportEquipMapper;
 
@@ -1398,7 +1406,8 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                             //repsVO.setName(dynamicTbDO.getTbName());
                             repsVO.setConnectId(connectRecordReportDO.getId());
                             repsVO.setName(connectRecordReportDO.getProjectName());
-                            repsVO.setFee(ConversionUtil.convert(connectRecordReportDO.getFee()));
+                            repsVO.setIsFee(connectRecordReportDO.getIsFee());
+                            repsVO.setFee("1".equals(connectRecordReportDO.getIsFee()) ? ConversionUtil.convert(connectRecordReportDO.getFee()) : BigDecimal.ZERO);
                             repsVO.setTemplateId(dynamicTbDO.getId());
                             repsVO.setIsAutoAmount("0");
                             repsVO.setReportType(dynamicTbDO.getTbType());
@@ -1417,7 +1426,8 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                                 //repsVO.setName(dynamicTbDO.getTbName());
                                 repsVO.setConnectId(connectRecordReportDO.getId());
                                 repsVO.setName(connectRecordReportDO.getProjectName());
-                                repsVO.setFee(ConversionUtil.convert(connectRecordReportDO.getFee()));
+                                repsVO.setIsFee(connectRecordReportDO.getIsFee());
+                                repsVO.setFee("1".equals(connectRecordReportDO.getIsFee()) ? ConversionUtil.convert(connectRecordReportDO.getFee()) : BigDecimal.ZERO);
                                 repsVO.setTemplateId(dynamicTbDO.getId());
                                 repsVO.setIsAutoAmount("0");
                                 repsVO.setReportType(dynamicTbDO.getTbType());
@@ -1892,11 +1902,43 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                     updateReport.setId(id);
                     updateReport.setApprovalId(userId);
                     updateReport.setApprovalTime(LocalDateTime.now());
+                    //检验方案读取记录下来的审核日期
+                    String[] OrderItemIds = itemReportDO.getOrderItemId().split(",");
+                    List<BoilerTaskOrderItemDO> taskOrderItemDOS = boilerTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemDO>().
+                            in(BoilerTaskOrderItemDO::getId, OrderItemIds));
+                    if (!taskOrderItemDOS.isEmpty()){
+                        BoilerTaskOrderItemDO firstSchemeItem = taskOrderItemDOS.stream()
+                                .filter(item -> item.getSchemeApprovalTime() != null)
+                                .findFirst()
+                                .orElse(null);
+                        if (firstSchemeItem != null){
+                            updateReport.setApprovalTime(firstSchemeItem.getSchemeApprovalTime());
+                        }
+                    }
 
                     if (userRespDTO != null) {
                         updateReport.setApprovalName(userRespDTO.getNickname());
                     }
                     taskOrderReportMapper.updateById(updateReport);
+
+                    //生成报表数据 -- 检验方案表不同暂不通用
+                    CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
+                    ruleVO.setTemplateId(itemReportDO.getTemplateId());
+                    ruleVO.setRefId(itemReportDO.getId());
+                    ruleVO.setRefName(itemReportDO.getReportName());
+                    ruleVO.setReportType(1);
+                    com.alibaba.fastjson2.JSONObject params = new com.alibaba.fastjson2.JSONObject();
+                    params.put("equipMainType","boiler");
+                    ruleVO.setParams(params);
+                    //获取tbCode的服务方法名
+                    BoilerConnectTbServiceDO tbServiceDO = boilerConnectTbServiceMapper.selectOne(BoilerConnectTbServiceDO::getTbId,itemReportDO.getTemplateId());
+                    if (tbServiceDO != null){
+                        ruleVO.setServiceName(tbServiceDO.getInitServiceName());
+                        dynamicTbInsService.createInstantiateWithRule(ruleVO);
+                    }else{
+                        ruleVO.setServiceName("");
+                        dynamicTbInsService.createInstantiateWithRule(ruleVO);
+                    }
                 }
 
             }
@@ -2104,13 +2146,35 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                             bean.setRatifyTime(itemReportDO.getRatifyTime());
                             bean.setRatifyName(itemReportDO.getRatifyName());
                             bean.setOrderReportId(reportDO.getId());
+
+                            //检验方案读取记录下来的审批日期
+                            BoilerTaskOrderItemDO taskOrderItemDO = boilerTaskOrderItemMapper.selectById(item.getId());
+                            if (taskOrderItemDO != null){
+                                if (taskOrderItemDO.getSchemeEnterTime() != null){
+                                    bean.setPrepareTime(taskOrderItemDO.getSchemeEnterTime());
+                                }
+                                if (taskOrderItemDO.getSchemeApprovalTime() != null){
+                                    bean.setApprovalTime(taskOrderItemDO.getSchemeApprovalTime());
+                                }
+                                if (taskOrderItemDO.getSchemeRatifyTime() != null){
+                                    bean.setRatifyTime(taskOrderItemDO.getSchemeRatifyTime());
+                                }
+                            }
+
                             return bean;
                         }
                         return null;
                     }).filter(Objects::nonNull).toList().forEach(item -> {
+
                         taskOrderItemReportMapper.insert(item);
                         dynamicTbInsService.copyInstantiate(reportDO.getId(), item.getId());
 
+                        //更新 报表数据
+                        BoilerTaskOrderSyncReportVO syncReportVO = new BoilerTaskOrderSyncReportVO();
+                        syncReportVO.setRefId(item.getId());
+                        syncReportVO.setReportType("record");
+                        syncReportData(syncReportVO);
+
                         //添加提交人
                         BoilerTaskOrderItemReportUserDO userDO = new BoilerTaskOrderItemReportUserDO();
                         if (reportDO.getSubmitId() != null){
@@ -2130,9 +2194,79 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             itemReportDO.setTaskStatus(TaskOrderStatusEnum.ENTER.getStatus());
         }
         taskOrderReportMapper.updateById(itemReportDO);
+
+        //生成报表数据 -- 检验方案表不同暂不通用
+        CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
+        ruleVO.setTemplateId(itemReportDO.getTemplateId());
+        ruleVO.setRefId(itemReportDO.getId());
+        ruleVO.setRefName(itemReportDO.getReportName());
+        ruleVO.setReportType(1);
+        com.alibaba.fastjson2.JSONObject params = new com.alibaba.fastjson2.JSONObject();
+        params.put("equipMainType","boiler");
+        ruleVO.setParams(params);
+        //获取tbCode的服务方法名
+        BoilerConnectTbServiceDO tbServiceDO = boilerConnectTbServiceMapper.selectOne(BoilerConnectTbServiceDO::getTbId,itemReportDO.getTemplateId());
+        if (tbServiceDO != null){
+            ruleVO.setServiceName(tbServiceDO.getInitServiceName());
+            dynamicTbInsService.createInstantiateWithRule(ruleVO);
+        }else{
+            ruleVO.setServiceName("");
+            dynamicTbInsService.createInstantiateWithRule(ruleVO);
+        }
+
         return true;
     }
 
+    @Override
+    public boolean checkSchemeApproved(String orderItemId) {
+
+        BoilerTaskOrderItemDO taskOrderItemDO = boilerTaskOrderItemMapper.selectById(orderItemId);
+        if (taskOrderItemDO == null) {
+            throw new ServiceException(404, "设备任务单不存在");
+        }
+        BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(taskOrderItemDO.getOrderId());
+        if (taskOrderDO == null) {
+            throw new ServiceException(404, "任务单不存在");
+        }
+
+        //锅炉内检才需要判断检验方案
+        if (taskOrderDO.getCheckType() != 100){
+            return true;
+        }else{
+            List<BoilerTaskOrderItemReportDO> boilerTaskOrderItemReportDOS = taskOrderItemReportMapper.selectList(
+                    new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
+                            .eq(BoilerTaskOrderItemReportDO::getOrderItemId, orderItemId)
+                            .eq(BoilerTaskOrderItemReportDO::getReportType, 600)
+                            .eq(BoilerTaskOrderItemReportDO::getStatus, AcceptOrderStatusEnum.AUDIT.getStatus())
+                            .isNotNull(BoilerTaskOrderItemReportDO::getRatifyTime)
+                            .orderByDesc(BoilerTaskOrderItemReportDO::getRatifyTime)
+            );
+
+            if (boilerTaskOrderItemReportDOS.isEmpty()){
+                return false;
+            }else{
+
+                //记录审批时间
+                BoilerTaskOrderItemReportDO lastReport = boilerTaskOrderItemReportDOS.get(0);
+                if (taskOrderItemDO.getSchemeEnterTime() == null || taskOrderItemDO.getSchemeApprovalTime() == null || taskOrderItemDO.getSchemeRatifyTime() == null){
+
+                    if (lastReport != null){
+                        BoilerTaskOrderItemDO updateTaskOrderDO = new BoilerTaskOrderItemDO();
+                        updateTaskOrderDO.setId(orderItemId);
+                        updateTaskOrderDO.setSchemeEnterTime(lastReport.getPrepareTime());
+                        updateTaskOrderDO.setSchemeApprovalTime(lastReport.getApprovalTime());
+                        updateTaskOrderDO.setSchemeRatifyTime(lastReport.getRatifyTime());
+                        boilerTaskOrderItemMapper.updateById(updateTaskOrderDO);
+                    }
+
+                }
+
+                return true;
+            }
+        }
+
+    }
+
     @Resource
     private PushTaskOrderService pushTaskOrderService;
 
@@ -2565,7 +2699,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                             addInstructionReport.setTaskStatus(TaskOrderStatusEnum.ENTER.getStatus());
                             addInstructionReport.setSort(count + 1);
                             addInstructionReport.setFeeType(vo.getType());
-
+                            addInstructionReport.setItemPartId(itemPartId);
                             addInstructionReport.setProjectId(connectDO.getId());
                             if (vo.getFee() == null || vo.getFee().compareTo(BigDecimal.ZERO) == 0) {
                                 addInstructionReport.setFee(ConversionUtil.convert(connectDO.getFee()));
@@ -4383,7 +4517,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
 //        byte[] pdf1 = pdfService.pdf(dynamicTbInsDO.getTbId(), dynamicTbInsDO.getId());
         byte[] pdf1 = getRecordOutputStreamMerge(taskOrderItemReportDO.getOrderItemId());
         // 报告
-        byte[] pdf2 = getReportOutputStreamMerge(taskOrderItemReportDO.getOrderItemId());
+        byte[] pdf2 = getReportOutputStreamMerge(taskOrderItemReportDO.getOrderItemId(),false);
         ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes1 = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf1), "检验记录_" + boilerTaskOrderDO.getOrderNo() + ".pdf");
         ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes2 = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf2), "检验报告_" + boilerTaskOrderDO.getOrderNo() + ".pdf");
         List<ExternalOAUploadAttachmentRes.Attachment> atts1 = externalOAUploadAttachmentRes1.getAtts();
@@ -4506,6 +4640,20 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             if (CollUtil.isNotEmpty(taskOrderMajorIssuesVO.getOrderItemIds())) {
                 taskOrderReportDO.setOrderItemIdsStr(String.join(",", taskOrderMajorIssuesVO.getOrderItemIds()));
                 taskOrderReportDO.setOrderItemId(String.join(",", taskOrderMajorIssuesVO.getOrderItemIds()));
+
+                //检验方案读取记录下来的录入日期
+                List<BoilerTaskOrderItemDO> taskOrderItemDOS = boilerTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemDO>().
+                        in(BoilerTaskOrderItemDO::getId, taskOrderMajorIssuesVO.getOrderItemIds()));
+                if (!taskOrderItemDOS.isEmpty()){
+                    BoilerTaskOrderItemDO firstSchemeItem = taskOrderItemDOS.stream()
+                            .filter(item -> item.getSchemeEnterTime() != null)
+                            .findFirst()
+                            .orElse(null);
+                    if (firstSchemeItem != null){
+                        taskOrderReportDO.setPrepareTime(firstSchemeItem.getSchemeEnterTime());
+                    }
+                }
+
             }
             if (StringUtils.isNotEmpty(taskOrderMajorIssuesVO.getReportName())) {
                 taskOrderReportDO.setReportName(taskOrderMajorIssuesVO.getReportName());
@@ -4520,7 +4668,6 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             ruleVO.setRefName(addReport.getReportName());
             ruleVO.setReportType(1);
             com.alibaba.fastjson2.JSONObject params = new com.alibaba.fastjson2.JSONObject();
-            params.put("checkUserId",getLoginUserId());
             params.put("equipMainType","boiler");
             ruleVO.setParams(params);
             //获取tbCode的服务方法名
@@ -4599,6 +4746,154 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
 
     }
 
+    @Override
+    public String addReportFromExisting(BoilerOrderItemAddFromExistingVO addFromExistingVO) {
+        // 获取序号
+        Long count = taskOrderItemReportMapper.selectCount(
+                BoilerTaskOrderItemReportDO::getOrderId, addFromExistingVO.getOrderId());
+        if (count == null) {
+            count = 0L;
+        }
+
+        BoilerTaskOrderItemReportDO addReport = new BoilerTaskOrderItemReportDO();
+        addReport.setOrderId(addFromExistingVO.getOrderId());
+        addReport.setOrderItemId(addFromExistingVO.getOrderItemId());
+        addReport.setReportType(TaskOrderItemReportTypeEnum.WORK_INSTRUCTION.getType());
+        addReport.setTaskStatus(TaskOrderStatusEnum.CONFIRM.getStatus());
+        addReport.setStatus(0);
+        addReport.setSort(count.intValue() + 1);
+        addReport.setItemPartId(addFromExistingVO.getItemPartId());
+        addReport.setRemark(addFromExistingVO.getRemark());
+        addReport.setSubmitTime(LocalDateTime.now());
+        addReport.setPrepareTime(LocalDateTime.now());
+        addReport.setCreateTime(LocalDateTime.now());
+
+        BoilerTaskOrderItemReportDO sourceReport = null;
+        if ("1".equals(addFromExistingVO.getAddType())) {
+            // 引用上次模板:从源指导书复制
+            sourceReport = taskOrderItemReportMapper.selectById(addFromExistingVO.getInstructionId());
+            if (sourceReport == null) {
+                throw new ServiceException(GlobalErrorCodeConstants.FIND_NOT_DATA.getCode(), "源指导书不存在");
+            }
+            addReport.setTemplateId(sourceReport.getTemplateId());
+            addReport.setReportName(sourceReport.getReportName());
+            addReport.setPrepareJson(sourceReport.getPrepareJson());
+            addReport.setInstructionId(sourceReport.getId());
+            addReport.setPrepareId(sourceReport.getPrepareId());
+            addReport.setPrepareName(sourceReport.getPrepareName());
+            addReport.setReportUrl(sourceReport.getReportUrl());
+        } else {
+            // 模板生成:从模板创建
+            DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(addFromExistingVO.getTemplateId());
+            if (dynamicTbDO == null) {
+                throw new ServiceException(GlobalErrorCodeConstants.FIND_NOT_DATA.getCode(), "模板不存在");
+            }
+            addReport.setTemplateId(dynamicTbDO.getId());
+            addReport.setReportName(dynamicTbDO.getTbName());
+        }
+
+        taskOrderItemReportMapper.insert(addReport);
+
+        // 添加提交人
+        BoilerTaskOrderItemReportUserDO userDO = new BoilerTaskOrderItemReportUserDO();
+        userDO.setUserId(getLoginUserId());
+        userDO.setReportId(addReport.getId());
+        taskOrderItemReportUserMapper.insert(userDO);
+
+        if ("1".equals(addFromExistingVO.getAddType())) {
+            // 引用上次模板:复制源报告的 DynamicTbInsDO + DynamicTbValDO
+            copyReportInstance(sourceReport.getId(), addReport.getId(), sourceReport.getTemplateId());
+        } else {
+            // 模板生成:创建空模板实例
+            BoilerTaskOrderSyncReportVO syncReportVO = new BoilerTaskOrderSyncReportVO();
+            syncReportVO.setRefId(addReport.getId());
+            syncReportVO.setReportType("record");
+            syncReportData(syncReportVO);
+        }
+
+        return addReport.getId();
+    }
+
+    /**
+     * 复制报告的模板实例数据(DynamicTbInsDO + DynamicTbValDO)
+     */
+    private void copyReportInstance(String sourceReportId, String targetReportId, String templateId) {
+        // 查询源报告的模板实例
+        DynamicTbInsDO sourceIns = dynamicTbInsMapper.selectOne(
+                new LambdaQueryWrapper<DynamicTbInsDO>()
+                        .eq(DynamicTbInsDO::getRefId, sourceReportId)
+                        .eq(DynamicTbInsDO::getTbId, templateId)
+        );
+        if (sourceIns == null) {
+            // 源报告没有模板实例,走创建空实例
+            BoilerTaskOrderSyncReportVO syncReportVO = new BoilerTaskOrderSyncReportVO();
+            syncReportVO.setRefId(targetReportId);
+            syncReportVO.setReportType("record");
+            syncReportData(syncReportVO);
+            return;
+        }
+
+        // 创建新实例
+        DynamicTbInsDO newIns = new DynamicTbInsDO();
+        newIns.setTbId(sourceIns.getTbId());
+        newIns.setRefId(targetReportId);
+        newIns.setRefName(sourceIns.getRefName());
+        newIns.setNote(sourceIns.getNote());
+        newIns.setCreateorName(sourceIns.getCreateorName());
+        dynamicTbInsMapper.insert(newIns);
+
+        // 复制实例值
+        List<DynamicTbValDO> sourceVals = dynamicTbValMapper.selectList(
+                new LambdaQueryWrapper<DynamicTbValDO>()
+                        .eq(DynamicTbValDO::getInsId, sourceIns.getId())
+        );
+        if (CollUtil.isNotEmpty(sourceVals)) {
+            for (DynamicTbValDO val : sourceVals) {
+                DynamicTbValDO newVal = new DynamicTbValDO();
+                newVal.setInsId(newIns.getId());
+                newVal.setColCode(val.getColCode());
+                newVal.setValValue(val.getValValue());
+                newVal.setNote(val.getNote());
+                newVal.setCreateorName(val.getCreateorName());
+                dynamicTbValMapper.insert(newVal);
+            }
+        }
+    }
+
+    @Override
+    public List<BoilerTaskOrderItemReportRespVO> getHistoryInstructionsByEquipId(String equipId, String currentOrderItemId) {
+        // 查该设备的所有任务单项,按创建时间倒序(最近的在前面)
+        List<BoilerTaskOrderItemDO> orderItems = boilerTaskOrderItemMapper.selectList(
+                new LambdaQueryWrapperX<BoilerTaskOrderItemDO>()
+                        .eq(BoilerTaskOrderItemDO::getEquipId, equipId)
+                        .orderByDesc(BoilerTaskOrderItemDO::getCreateTime)
+        );
+        if (CollUtil.isEmpty(orderItems)) {
+            return List.of();
+        }
+
+        // 跳过当前任务单项,取上一次的任务单
+        BoilerTaskOrderItemDO previousItem = null;
+        for (BoilerTaskOrderItemDO item : orderItems) {
+            if (!item.getId().equals(currentOrderItemId)) {
+                previousItem = item;
+                break;
+            }
+        }
+        if (previousItem == null) {
+            return List.of();
+        }
+
+        // 查询上次任务单下的作业指导书(reportType=700)
+        List<BoilerTaskOrderItemReportDO> reports = taskOrderItemReportMapper.selectList(
+                new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
+                        .eq(BoilerTaskOrderItemReportDO::getOrderItemId, previousItem.getId())
+                        .eq(BoilerTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.WORK_INSTRUCTION.getType())
+        );
+
+        return BeanUtils.toBean(reports, BoilerTaskOrderItemReportRespVO.class);
+    }
+
     @Override
     public Boolean opinionNotice(MajorIssuesSubmitVO majorIssuesSubmitVO) {
 
@@ -6070,7 +6365,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
     }
 
     @Override
-    public byte[] getReportOutputStreamMerge(String orderItemId) {
+    public byte[] getReportOutputStreamMerge(String orderItemId,boolean isCover) {
 
 //        List<BoilerTaskOrderItemReportDO> taskOrderReportDOS = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>().
 //                eq(BoilerTaskOrderItemReportDO::getOrderItemId, orderItemId).
@@ -6079,7 +6374,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
 //                .orderByAsc(BoilerTaskOrderItemReportDO::getSort));
 
         BoilerTaskOrderItemDO taskOrderItemDO = boilerTaskOrderItemMapper.selectById(orderItemId);
-        if (taskOrderItemDO.getIssueUrl() != null && !taskOrderItemDO.getIssueUrl().isEmpty()){
+        if (taskOrderItemDO.getIssueUrl() != null && !taskOrderItemDO.getIssueUrl().isEmpty() && !isCover){
             try {
 
                 log.info("---获取已生成报告PDF---");

+ 11 - 83
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderissuereport/BoilerTaskOrderIssueReportServiceImpl.java

@@ -503,7 +503,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                             try {
 
                                 // 生成报告URL
-                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO,false);
                                 String reportUrl = reportUrlInfo.getReportUrl();
                                 String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -532,79 +532,6 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                     }
 
                 }
-                /*if (item.getMiniProgramPush() != null && item.getMiniProgramPush()) {
-                    //根据接收人电话获取平台用户信息
-//                    MemberUserRespDTO memberUser = memberUserApi.getUserByMobile(item.getRecipientPhone()).getCheckedData();
-                    MemberUserRespVO memberUser = memberRemoteService.getUserByMobile(item.getRecipientPhone());
-                    // 获取不到平台用户信息时创建一个平台用户账号
-                    if (ObjectUtil.isEmpty(memberUser)) {
-                        MemberUserCreateReqVO memberUserReqVo = new MemberUserCreateReqVO();
-                        memberUserReqVo.setMobile(item.getRecipientPhone());
-                        memberUserReqVo.setName(item.getRecipientPhone());
-                        memberUserReqVo.setRegisterIp(getClientIP());
-                        memberUser = memberRemoteService.createUser(memberUserReqVo);
-                        if (ObjectUtil.isEmpty(memberUser)) {
-                            throw exception(new ErrorCode(1007,"创建用户失败"));
-                        }
-                    }
-
-                    if (ObjectUtil.isNotEmpty(memberUser)) {
-                        SendMpMessageReqVO param = new SendMpMessageReqVO();
-                        param.setMemberId(memberUser.getId());
-                        if (EnvEnum.LOCAL.getEnvName().equals(env)){
-                            param.setTemplateId("y_D6jCp4MuYMABo5O0mTrREGmI6rip0Feke-r9PkV_g");
-                        } else if (EnvEnum.PROD.getEnvName().equals(env)) {
-                            param.setTemplateId("fTvRP72t6_8xZZ1u8F0PhYOUHUVreor7aCD3qIF596Y");
-                        }
-                        List<SendMpMessageReqVO.TemplateData> list1 = new ArrayList<>();
-                        list1.add(new SendMpMessageReqVO.TemplateData("thing2", itemReportDOS.get(0).getReportName(), null));
-                        list1.add(new SendMpMessageReqVO.TemplateData("time4", taskOrderDO.getCheckDate().toString(), null));
-                        list1.add(new SendMpMessageReqVO.TemplateData("thing6", TaskOrderStatusEnum.getByStatus(taskOrderDO.getTaskStatus()).getName(), null));
-                        param.setTemplateDataList(list1);
-                        SendMpMessageReqVO.MiniProgram mini = new SendMpMessageReqVO.MiniProgram();
-                        mini.setPagePath("pagesSub/reportArchive/index");
-                        mini.setUsePath(true);
-                        param.setMiniProgram(mini);
-                        param.setBusinessId(taskOrderDO.getId());
-                        param.setBusinessType(1);
-//                        memberUserApi.sendMpMessage(param).getCheckedData();
-                        memberMessageRemoteService.sendMpMessage(param);
-
-                        // 生成url
-                        MemberUserRespVO finalMemberUser = memberUser;
-                        taskOrderItemDOList.forEach(taskOrderItemDO -> {
-                            try {
-
-                                // 生成报告URL
-                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
-                                String reportUrl = reportUrlInfo.getReportUrl();
-                                String fileUrl = reportUrlInfo.getFileUrl();
-
-                                // 公众模版发送
-                                List<BoilerTaskOrderItemReportDO> reports = itemReportDOS.stream().filter(x -> x.getOrderItemId().equals(taskOrderItemDO.getId())).toList();
-                                if (CollUtil.isNotEmpty(reports)) {
-                                    //更新任务单出具报告记录-公众号推送人员信息
-                                    LambdaUpdateWrapper<BoilerTaskOrderIssueReportDO> updateWrapper = new LambdaUpdateWrapper<>();
-                                    updateWrapper.set(BoilerTaskOrderIssueReportDO::getOrderItemReportId, reports.get(0).getId());
-                                    updateWrapper.set(BoilerTaskOrderIssueReportDO::getRecipientMemberUserId, finalMemberUser.getId());
-                                    updateWrapper.eq(BoilerTaskOrderIssueReportDO::getId, taskOrderIssueReport.getId());
-                                    taskOrderIssueReportMapper.update(updateWrapper);
-                                    // }
-                                    BoilerTaskOrderItemDO updateOb = new BoilerTaskOrderItemDO();
-                                    updateOb.setId(taskOrderItemDO.getId());
-                                    updateOb.setIssueUrl(fileUrl);
-                                    taskOrderItemMapper.updateById(updateOb);
-                                }
-                            } catch (Exception e) {
-                                log.error("公众模版发送失败", e);
-                                throw new RuntimeException(e);
-                            }
-                        });
-                    } else {
-                        //todo 获取不到平台用户信息是创建一个平台用户账号
-                    }
-
-                }*/
             });
         });
 
@@ -742,7 +669,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                 finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
                     try {
                         // 生成报告URL
-                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO,false);
                         String reportUrl = reportUrlInfo.getReportUrl();
                         String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -856,7 +783,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                 finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
                     try {
                         // 生成报告URL
-                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO,false);
                         String reportUrl = reportUrlInfo.getReportUrl();
                         String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -1401,7 +1328,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                     finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
                         try {
                             // 生成报告URL
-                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO,false);
                             String reportUrl = reportUrlInfo.getReportUrl();
                             String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -1515,7 +1442,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                     finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
                         try {
                             // 生成报告URL
-                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO, false);
                             String reportUrl = reportUrlInfo.getReportUrl();
                             String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -1937,7 +1864,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                     BoilerTaskOrderItemDO updateOb = new BoilerTaskOrderItemDO();
 
                     //生成报告pdf
-                    ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                    ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO,true);
                     String reportUrl = reportUrlInfo.getReportUrl();
                     String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -2844,16 +2771,17 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
     /**
      * 生成报告URL
      * @param taskOrderItemDO 任务单项目
+     * @param isCover 是否覆盖原文件
      * @return ReportUrlInfo 包含reportUrl(完整路径)和fileUrl(文件名称)
      */
-    private ReportUrlInfo generateReportUrl(BoilerTaskOrderItemDO taskOrderItemDO) {
+    private ReportUrlInfo generateReportUrl(BoilerTaskOrderItemDO taskOrderItemDO,boolean isCover) {
         String reportUrl = "";
         String fileUrl = "";
         byte[] pdfByte = null;
-        if (StringUtils.isNotEmpty(taskOrderItemDO.getIssueUrl())) {
+        if (StringUtils.isNotEmpty(taskOrderItemDO.getIssueUrl()) && !isCover) {
             fileUrl = taskOrderItemDO.getIssueUrl();
         } else {
-            pdfByte = taskOrderService.getReportOutputStreamMerge(taskOrderItemDO.getId());
+            pdfByte = taskOrderService.getReportOutputStreamMerge(taskOrderItemDO.getId(),isCover);
             if (pdfByte != null){
                 fileUrl = fileApi.createFile(pdfByte);
             }
@@ -2867,7 +2795,7 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
                     SignValuesDTO valuesDTO1 = new SignValuesDTO();
                     valuesDTO1.setSealType("JYZ");
                     valuesDTO1.setTextonce(0);
-                    valuesDTO1.setText("机构公章或");
+                    valuesDTO1.setText("广州特种设备检测研究院(章)");
                     valuesDTOList.add(valuesDTO1);
                     SignValuesDTO valuesDTO2 = new SignValuesDTO();
                     valuesDTO2.setSealType(SIGN_GZ_INS_SEAL2);

+ 48 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/comm/QC01001_202400OFData.java

@@ -4,6 +4,7 @@ import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInsta
 import cn.start.tz.module.pressure2.controller.admin.equipboiler.vo.EquipBoilerReportVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
 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.boilertaskorderreport.BoilerTaskOrderReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
@@ -12,6 +13,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeT
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderreport.PipeTaskOrderReportDO;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorder.BoilerTaskOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitem.BoilerTaskOrderItemMapper;
+import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitemreport.BoilerTaskOrderItemReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderreport.BoilerTaskOrderReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equippipe.EquipPipeMapper;
@@ -62,6 +64,9 @@ public class QC01001_202400OFData implements IDynamicOFData {
     @Resource
     private PipeTaskOrderItemReportMapper pipeTaskOrderItemReportMapper;
 
+    @Resource
+    private BoilerTaskOrderItemReportMapper boilerTaskOrderItemReportMapper;
+
     @Resource
     private PipeTaskOrderItemService pipeTaskOrderItemService;
 
@@ -195,6 +200,49 @@ public class QC01001_202400OFData implements IDynamicOFData {
                 }
 
             }
+            else {
+                BoilerTaskOrderItemReportDO itemReportDO1 = boilerTaskOrderItemReportMapper.selectById(refId);
+                if (itemReportDO1 != null){
+                    //编制人员信息
+                    AdminUserRespDTO userInfo = adminUserApi.getUser(itemReportDO1.getPrepareId()).getData();
+                    if (userInfo != null){
+                        if (userInfo.getSignUrl() != null){
+                            result.put("prepareName",userInfo.getSignUrl());
+                        }else{
+                            result.put("prepareName",itemReportDO1.getPrepareName());
+                        }
+                    }
+                    if (itemReportDO1.getPrepareTime() != null){
+                        result.put("prepareTime",itemReportDO1.getPrepareTime().format(dateFormat));
+                    }
+
+                    //审核人员信息
+                    userInfo = adminUserApi.getUser(itemReportDO1.getApprovalId()).getData();
+                    if (userInfo != null){
+                        if (userInfo.getSignUrl() != null){
+                            result.put("approvalName",userInfo.getSignUrl());
+                        }else{
+                            result.put("approvalName",itemReportDO1.getApprovalName());
+                        }
+                    }
+                    if (itemReportDO1.getApprovalTime() != null){
+                        result.put("approvalTime",itemReportDO1.getApprovalTime().format(dateFormat));
+                    }
+
+                    //批准人员信息
+                    userInfo = adminUserApi.getUser(itemReportDO1.getRatifyId()).getData();
+                    if (userInfo != null){
+                        if (userInfo.getSignUrl() != null){
+                            result.put("ratifyName",userInfo.getSignUrl());
+                        }else{
+                            result.put("ratifyName",itemReportDO1.getRatifyName());
+                        }
+                    }
+                    if (itemReportDO1.getRatifyTime() != null){
+                        result.put("ratifyTime",itemReportDO1.getRatifyTime().format(dateFormat));
+                    }
+                }
+            }
 
         }else if (equipMainTpe.equals("pipe")){
 

+ 8 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderService.java

@@ -185,7 +185,7 @@ public interface PipeTaskOrderService extends IService<PipeTaskOrderDO>  {
 
     void orderConfirmFinish(OrderConfirmFinishVO orderItemRatifyVO);
 
-    byte[] getReportOutputStreamMerge(String orderId);
+    byte[] getReportOutputStreamMerge(String orderId,boolean isCover);
 
     PageResult<AdminUserRespDTO> getRecheckUserPage(PipeRecheckUserPageReqVO pageReqVO);
 
@@ -205,6 +205,13 @@ public interface PipeTaskOrderService extends IService<PipeTaskOrderDO>  {
 
     Boolean generateInspectionPlan(MajorIssuesSubmitVO majorIssuesSubmitVO);
 
+    /**
+     * 校验任务单下是否有已审批完成的检验方案
+     * @param orderId 任务单ID
+     * @return true=存在已审批的检验方案
+     */
+    boolean checkSchemeApproved(String orderId);
+
     void majorIssuesRecovery(@Valid TaskOrderMajorIssuesVO taskOrderMajorIssuesVO);
 
     Boolean updatePayStatus(UpdatePayStatusDTO payInfo);

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

@@ -1398,7 +1398,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                             repsVO.setName(connectRecordReportDO.getProjectName());
                             repsVO.setTemplateId(dynamicTbDO.getId());
                             repsVO.setIsAutoAmount("0");
-                            repsVO.setFee(ConversionUtil.convert(connectRecordReportDO.getFee()));
+                            repsVO.setIsFee(connectRecordReportDO.getIsFee());
+                            repsVO.setFee("1".equals(connectRecordReportDO.getIsFee()) ? ConversionUtil.convert(connectRecordReportDO.getFee()) : BigDecimal.ZERO);
                             repsVO.setReportType(dynamicTbDO.getTbType());
                             repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
                             repsVO.setProjectType(connectRecordReportDO.getProjectType());
@@ -1415,7 +1416,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                                 //repsVO.setName(dynamicTbDO.getTbName());
                                 repsVO.setConnectId(connectRecordReportDO.getId());
                                 repsVO.setName(connectRecordReportDO.getProjectName());
-                                repsVO.setFee(ConversionUtil.convert(connectRecordReportDO.getFee()));
+                                repsVO.setIsFee(connectRecordReportDO.getIsFee());
+                                repsVO.setFee("1".equals(connectRecordReportDO.getIsFee()) ? ConversionUtil.convert(connectRecordReportDO.getFee()) : BigDecimal.ZERO);
                                 repsVO.setTemplateId(dynamicTbDO.getId());
                                 repsVO.setIsAutoAmount("0");
                                 repsVO.setReportType(dynamicTbDO.getTbType());
@@ -1458,11 +1460,13 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         //vo.setReportTemplateUrl(templateDO.getReportTemplateUrl());
             vo.setProjectType(templateDO.getProjectType());
             // 将 String 类型的 fee 转换为 BigDecimal
-            if (StringUtils.isNotBlank(templateDO.getFee())) {
-                vo.setFee(new BigDecimal(templateDO.getFee()));
-            } else {
-                vo.setFee(BigDecimal.ZERO);
-            }
+//            if (StringUtils.isNotBlank(templateDO.getFee())) {
+//                vo.setFee(new BigDecimal(templateDO.getFee()));
+//            } else {
+//                vo.setFee(BigDecimal.ZERO);
+//            }
+            vo.setIsFee(templateDO.getIsFee());
+            vo.setFee("1".equals(templateDO.getIsFee()) ? ConversionUtil.convert(templateDO.getFee()) : BigDecimal.ZERO);
         }else if (templateDO.getReportTemplateId() != null){
             DynamicTbDO recordDO = dynamicTbMapper.selectById(templateDO.getReportTemplateId());
             vo.setOrderId(reqVO.getOrderId());
@@ -1473,11 +1477,13 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             vo.setReportType(recordDO.getTbType());
             vo.setProjectType(templateDO.getProjectType());
             // 将 String 类型的 fee 转换为 BigDecimal
-            if (StringUtils.isNotBlank(templateDO.getFee())) {
-                vo.setFee(new BigDecimal(templateDO.getFee()));
-            } else {
-                vo.setFee(BigDecimal.ZERO);
-            }
+//            if (StringUtils.isNotBlank(templateDO.getFee())) {
+//                vo.setFee(new BigDecimal(templateDO.getFee()));
+//            } else {
+//                vo.setFee(BigDecimal.ZERO);
+//            }
+            vo.setIsFee(templateDO.getIsFee());
+            vo.setFee("1".equals(templateDO.getIsFee()) ? ConversionUtil.convert(templateDO.getFee()) : BigDecimal.ZERO);
         }
         return vo;
     }
@@ -3454,7 +3460,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
 //        byte[] pdf1 =  pdfService.pdf(dynamicTbInsDO1.getTbId(), dynamicTbInsDO1.getId());
         byte[] pdf1 =getRecordOutputStreamMerge(pipeTaskOrderDO.getId());
         // 报告模板
-        byte[] pdf2 =getReportOutputStreamMerge(pipeTaskOrderDO.getId());
+        byte[] pdf2 =getReportOutputStreamMerge(pipeTaskOrderDO.getId(),false);
 //        byte[] pdf2 = externalOAService.pdf(dynamicTbInsDO1.getTbId(), dynamicTbInsDO1.getId());
         ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes1 = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf1), "检验记录_" + pipeTaskOrderDO.getOrderNo() + ".pdf");
         ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes2 = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf2), "检验报告_" + pipeTaskOrderDO.getOrderNo() + ".pdf");
@@ -3566,6 +3572,13 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         addReport.setPrepareId(taskOrderMajorIssuesVO.getPrepareId());
         addReport.setPrepareName(taskOrderMajorIssuesVO.getPrepareName());
         addReport.setPrepareTime(LocalDateTime.now());
+        //检验方案读取记录下来的编制时间
+        if (dynamicTbDO.getTbType() != null && TaskOrderItemReportTypeEnum.INSPECTION_PLAN.getType().intValue() == dynamicTbDO.getTbType()) {
+            PipeTaskOrderDO taskOrderDO = pipeTaskOrderMapper.selectById(orderId);
+            if (taskOrderDO != null && taskOrderDO.getSchemeEnterTime() != null){
+                addReport.setPrepareTime(taskOrderDO.getSchemeEnterTime());
+            }
+        }
         addReport.setPrepareJson(taskOrderMajorIssuesVO.getPrepareJson());
         addReport.setReportUrl(taskOrderMajorIssuesVO.getReportUrl());
 
@@ -4583,6 +4596,54 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
 
     }
 
+    @Override
+    @Transactional
+    public boolean checkSchemeApproved(String orderId) {
+
+        PipeTaskOrderDO taskOrderDO = pipeTaskOrderMapper.selectById(orderId);
+
+        if (taskOrderDO == null){
+            throw new ServiceException(404, "任务单不存在");
+        }
+
+        //管道定检才需要判断检验方案
+        if (taskOrderDO.getCheckType() != 100){
+            return true;
+        }else{
+            List<PipeTaskOrderItemReportDO> pipeTaskOrderItemReportDOS = taskOrderItemReportMapper.selectList(
+                    new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>()
+                            .eq(PipeTaskOrderItemReportDO::getOrderId, orderId)
+                            .eq(PipeTaskOrderItemReportDO::getReportType, 600)
+                            .eq(PipeTaskOrderItemReportDO::getStatus, AcceptOrderStatusEnum.AUDIT.getStatus())
+                            .isNotNull(PipeTaskOrderItemReportDO::getRatifyTime)
+                            .orderByDesc(PipeTaskOrderItemReportDO::getRatifyTime)
+            );
+
+            if (pipeTaskOrderItemReportDOS.isEmpty()){
+                return false;
+            }else{
+
+                //记录审批时间
+                PipeTaskOrderItemReportDO lastReport = pipeTaskOrderItemReportDOS.get(0);
+                if (taskOrderDO.getSchemeEnterTime() == null || taskOrderDO.getSchemeApprovalTime() == null || taskOrderDO.getSchemeRatifyTime() == null){
+
+                    if (lastReport != null){
+                        PipeTaskOrderDO updateTaskOrderDO = new PipeTaskOrderDO();
+                        updateTaskOrderDO.setId(orderId);
+                        updateTaskOrderDO.setSchemeEnterTime(lastReport.getPrepareTime());
+                        updateTaskOrderDO.setSchemeApprovalTime(lastReport.getApprovalTime());
+                        updateTaskOrderDO.setSchemeRatifyTime(lastReport.getRatifyTime());
+                        pipeTaskOrderMapper.updateById(updateTaskOrderDO);
+                    }
+
+                }
+
+                return true;
+            }
+        }
+
+    }
+
     @Override
     @Transactional
     public Boolean auditInitiateApproval(String id, Integer status, String reason) {
@@ -4669,6 +4730,21 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             } else {
                 itemReportDO.setRatifyId(userId);
                 itemReportDO.setRatifyTime(LocalDateTime.now());
+                //检验方案读取记录下来的审批日期
+                if (reportDO.getReportType() != null && TaskOrderItemReportTypeEnum.INSPECTION_PLAN.getType().intValue() == reportDO.getReportType()) {
+                    PipeTaskOrderDO taskOrderDO = pipeTaskOrderMapper.selectById(reportDO.getOrderId());
+                    if (taskOrderDO != null){
+                        if (taskOrderDO.getSchemeEnterTime() != null){
+                            itemReportDO.setPrepareTime(taskOrderDO.getSchemeEnterTime());
+                        }
+                        if (taskOrderDO.getSchemeApprovalTime() != null){
+                            itemReportDO.setApprovalTime(taskOrderDO.getSchemeApprovalTime());
+                        }
+                        if (taskOrderDO.getSchemeRatifyTime() != null){
+                            itemReportDO.setRatifyTime(taskOrderDO.getSchemeRatifyTime());
+                        }
+                    }
+                }
 
                 if (userRespDTO != null) {
                     itemReportDO.setRatifyName(userRespDTO.getNickname());
@@ -4840,6 +4916,13 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
                 updateReport.setId(id);
                 updateReport.setApprovalId(userId);
                 updateReport.setApprovalTime(LocalDateTime.now());
+                //检验方案读取记录下来的审核日期
+                if (reqVO.getReportType() != null && TaskOrderItemReportTypeEnum.INSPECTION_PLAN.getType().intValue() == reqVO.getReportType()) {
+                    PipeTaskOrderDO taskOrderDO = pipeTaskOrderMapper.selectById(itemReportDO.getOrderId());
+                    if (taskOrderDO != null && taskOrderDO.getSchemeApprovalTime() != null){
+                        updateReport.setApprovalTime(taskOrderDO.getSchemeApprovalTime());
+                    }
+                }
 
                 if (userRespDTO != null) {
                     updateReport.setApprovalName(userRespDTO.getNickname());
@@ -5247,7 +5330,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
     }
 
     @Override
-    public byte[] getReportOutputStreamMerge(String orderId) {
+    public byte[] getReportOutputStreamMerge(String orderId,boolean isCover) {
 
 //        List<PipeTaskOrderItemReportDO> taskOrderReportDOS = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>().
 //                eq(PipeTaskOrderItemReportDO::getOrderId, orderId).
@@ -5257,7 +5340,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
 //                .orderByAsc(PipeTaskOrderItemReportDO::getReportType)); //主报告排最前面
 
         PipeTaskOrderDO taskOrderDO = pipeTaskOrderMapper.selectById(orderId);
-        if (taskOrderDO.getIssueUrl() != null && !taskOrderDO.getIssueUrl().isEmpty()){
+        if (taskOrderDO.getIssueUrl() != null && !taskOrderDO.getIssueUrl().isEmpty() && !isCover){
             try {
 
                 log.info("---获取已生成报告PDF---");

+ 11 - 10
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderissuereport/PipeTaskOrderIssueReportServiceImpl.java

@@ -496,7 +496,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                         taskOrderItemDOList.forEach(taskOrderItemDO -> {
                             try {
 
-                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO,false);
                                 String reportUrl = reportUrlInfo.getReportUrl();
                                 String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -670,7 +670,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
 
                         try {
 
-                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO,false);
                             String reportUrl = reportUrlInfo.getReportUrl();
                             String fileUrl = reportUrlInfo.getFileUrl();
                             log.info("报告url:{}", reportUrl);
@@ -802,7 +802,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                 finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
                     try {
 
-                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO,false);
                         String reportUrl = reportUrlInfo.getReportUrl();
                         String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -1357,7 +1357,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
 
                             try {
 
-                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO,false);
                                 String reportUrl = reportUrlInfo.getReportUrl();
                                 String fileUrl = reportUrlInfo.getFileUrl();
                                 log.info("报告url:{}", reportUrl);
@@ -1491,7 +1491,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                         try {
 
                             // 生成报告URL
-                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO,false);
                             String reportUrl = reportUrlInfo.getReportUrl();
                             String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -1960,7 +1960,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
             PipeTaskOrderDO taskOrderDO = taskOrderMapper.selectById(orderId);
 
             //生成报告pdf
-            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO,true);
             String reportUrl = reportUrlInfo.getReportUrl();
             String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -2829,16 +2829,17 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
     /**
      * 生成报告URL
      * @param taskOrderDO 任务单项目
+     * @param isCover 是否覆盖原文件
      * @return ReportUrlInfo 包含reportUrl(完整路径)和fileUrl(文件名称)
      */
-    private ReportUrlInfo generateReportUrl(PipeTaskOrderDO taskOrderDO) {
+    private ReportUrlInfo generateReportUrl(PipeTaskOrderDO taskOrderDO, boolean isCover) {
         String reportUrl = "";
         String fileUrl = "";
         byte[] pdfByte = null;
-        if (StringUtils.isNotEmpty(taskOrderDO.getIssueUrl())) {
+        if (StringUtils.isNotEmpty(taskOrderDO.getIssueUrl()) && !isCover) {
             fileUrl = taskOrderDO.getIssueUrl();
         } else {
-            pdfByte = taskOrderService.getReportOutputStreamMerge(taskOrderDO.getId());
+            pdfByte = taskOrderService.getReportOutputStreamMerge(taskOrderDO.getId(),isCover);
             if (pdfByte != null){
                 fileUrl = fileApi.createFile(pdfByte);
             }
@@ -2852,7 +2853,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                     SignValuesDTO valuesDTO1 = new SignValuesDTO();
                     valuesDTO1.setSealType("JYZ");
                     valuesDTO1.setTextonce(0);
-                    valuesDTO1.setText("机构公章或");
+                    valuesDTO1.setText("广州特种设备检测研究院(章)");
                     valuesDTOList.add(valuesDTO1);
                     SignValuesDTO valuesDTO2 = new SignValuesDTO();
                     valuesDTO2.setSealType(SIGN_GZ_INS_SEAL2);