Parcourir la source

签名确认、进度查询

xuzhancheng il y a 1 mois
Parent
commit
a2e5912f29
35 fichiers modifiés avec 638 ajouts et 157 suppressions
  1. 38 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/appointmentconfirmorder/vo/PipeAppointmentConfirmOrderItemDetailVO.java
  2. 45 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/appointmentconfirmorder/vo/PipeAppointmentConfirmOrderItemListVO.java
  3. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/appointmentconfirmorder/vo/PipeAppointmentConfirmOrderRespVO.java
  4. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/appointmentconfirmorder/vo/PipeAppointmentEquipsPageRespVO.java
  5. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerTaskOrderRespVO.java
  6. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/vo/PipeTaskOrderRespVO.java
  7. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/reporttemplate/vo/ReportMockPreviewVO.java
  8. 4 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/appointmentconfirmorder/PipeAppointmentConfirmOrderAppController.java
  9. 14 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderAppApiController.java
  10. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderIssueReportAppController.java
  11. 14 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/PipeTaskOrderAppApiController.java
  12. 11 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/BoilerAppReportTemplateController.java
  13. 9 6
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/BoilerAppTaskOrderItemReportController.java
  14. 15 4
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/PipeAppReportTemplateController.java
  15. 11 3
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/PipeAppTaskOrderItemReportController.java
  16. 3 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/appapi/boilertaskorder/AppApiBoilerTaskOrderController.java
  17. 42 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/appapi/boilertaskorder/vo/TaskOrderAppPushReqVO.java
  18. 3 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/notificationformreport/NotificationformReportDO.java
  19. 11 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/orderreport/OrderReportDO.java
  20. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/boilertaskorderitem/BoilerTaskOrderItemQueryMapper.java
  21. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/pipetaskorderitem/PipeTaskOrderItemQueryMapper.java
  22. 67 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/PipeAppointmentConfirmOrderServiceImpl.java
  23. 10 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderService.java
  24. 72 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  25. 8 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderissuereport/BoilerTaskOrderIssueReportServiceImpl.java
  26. 14 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0405_202400ReportOFData.java
  27. 18 26
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/comm/QC01012_202500OFData.java
  28. 10 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0413_202400ReportOFData.java
  29. 9 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0424_202403ReportOFData.java
  30. 1 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java
  31. 10 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderService.java
  32. 70 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  33. 8 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderissuereport/PipeTaskOrderIssueReportServiceImpl.java
  34. 5 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/tasksign/TaskSignService.java
  35. 87 107
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/tasksign/TaskSignServiceImpl.java

+ 38 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/appointmentconfirmorder/vo/PipeAppointmentConfirmOrderItemDetailVO.java

@@ -0,0 +1,38 @@
+package cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Schema(description = "管理后台 - 管道约检确认设备项明细 Response VO")
+@Data
+public class PipeAppointmentConfirmOrderItemDetailVO {
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "项目id")
+    private String itemId;
+
+    @Schema(description = "管道编号")
+    private String pipeNo;
+
+    @Schema(description = "设备代码")
+    private String equipCode;
+
+    @Schema(description = "管道名称")
+    private String equipName;
+
+    @Schema(description = "使用登记证编号")
+    private String useRegisterNo;
+
+    @Schema(description = "产品编号")
+    private String productNo;
+
+    @Schema(description = "下次法定检验时间")
+    private LocalDate nextCheckDate;
+
+    @Schema(description = "下次年度检验时间")
+    private LocalDate nextYearCheckDate;
+}

+ 45 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/appointmentconfirmorder/vo/PipeAppointmentConfirmOrderItemListVO.java

@@ -0,0 +1,45 @@
+package cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Schema(description = "管理后台 - 管道约检确认设备项 Response VO")
+@Data
+public class PipeAppointmentConfirmOrderItemListVO {
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "订单id")
+    private String orderId;
+
+    @Schema(description = "工程编号")
+    private String projectNo;
+
+    @Schema(description = "工程名称")
+    private String projectName;
+
+    @Schema(description = "使用登记证编号")
+    private String useRegisterNo;
+
+    @Schema(description = "设备代码")
+    private String equipCode;
+
+    @Schema(description = "设备id")
+    private String equipId;
+
+    @Schema(description = "产品编号")
+    private String productNo;
+
+    @Schema(description = "下次法定检验时间")
+    private LocalDate nextCheckDate;
+
+    @Schema(description = "下次年度检验时间")
+    private LocalDate nextYearCheckDate;
+
+    @Schema(description = "管线明细列表")
+    private List<PipeAppointmentConfirmOrderItemDetailVO> detailList;
+}

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

@@ -254,6 +254,9 @@ public class PipeAppointmentConfirmOrderRespVO {
     @Schema(description ="约检确认单异常信息")
     private PipeOrderExceptionRespVO orderExceptionRespVO;
 
+    @Schema(description = "设备项列表(管道工程 → 管线明细)")
+    private List<PipeAppointmentConfirmOrderItemListVO> itemList;
+
     @Schema(description = "小组信息")
     private List<TeamItemVO> teamList;
 }

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

@@ -72,4 +72,7 @@ public class PipeAppointmentEquipsPageRespVO {
     private String projectName;
 
     private String pipeCategory;
+
+    @Schema(description = "管道名称")
+    private String equipName;
 }

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

@@ -316,6 +316,9 @@ public class BoilerTaskOrderRespVO {
     @Schema(description = "主报告id")
     private String reportId;
 
+    @Schema(description = "报告url")
+    private String reportUrl;
+
     @Schema(description = "批准时间")
     private LocalDateTime ratifyTime;
 

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

@@ -319,6 +319,9 @@ public class PipeTaskOrderRespVO {
     @Schema(description = "主报告id")
     private String reportId;
 
+    @Schema(description = "报告url")
+    private String reportUrl;
+
     @Schema(description = "批准时间")
     private LocalDateTime ratifyTime;
 

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

@@ -10,6 +10,9 @@ public class ReportMockPreviewVO {
     @Schema(description = "模版id")
     private String templateId;
 
+    @Schema(description = "报告id")
+    private String id;
+
     @Schema(description = "type 默认100 100报告记录 200报告结论 300 报告模板 400 金额计算&关联关系")
     private Integer type;
 

+ 4 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/appointmentconfirmorder/PipeAppointmentConfirmOrderAppController.java

@@ -5,6 +5,7 @@ import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.framework.ratelimiter.core.annotation.RateLimiter;
 import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.*;
 import cn.start.tz.module.pressure2.controller.app.appointmentconfirmorder.vo.AppAppointmentRefuseVO;
+import cn.start.tz.module.pressure2.service.appointmentconfirmorder.AppointmentConfirmOrderService;
 import cn.start.tz.module.pressure2.service.appointmentconfirmorder.PipeAppointmentConfirmOrderService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -25,6 +26,8 @@ public class PipeAppointmentConfirmOrderAppController {
 
     @Resource
     private PipeAppointmentConfirmOrderService pipeAppointmentConfirmOrderService;
+    @Resource
+    private AppointmentConfirmOrderService appointmentConfirmOrderService;
 
     // ======================== 已实现的接口 ========================
 
@@ -74,7 +77,7 @@ public class PipeAppointmentConfirmOrderAppController {
     @PermitAll
     public CommonResult<PageResult<AppointmentConfirmOrderRespVO>> getAppointmentConfirmOrderPageMini(@Valid AppointmentConfirmOrderPageReqVO pageReqVO) {
         pageReqVO.setEquipMainType(300);
-        return success(pipeAppointmentConfirmOrderService.getAppointmentConfirmOrderPage(pageReqVO));
+        return success(appointmentConfirmOrderService.getAppointmentConfirmOrderPage(pageReqVO));
     }
 
     // TODO: 待提供更多信息 - PipeAppointmentConfirmOrderService.getEquipsListForExport

+ 14 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderAppApiController.java

@@ -5,6 +5,7 @@ import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.*;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskordersignfile.vo.BoilerTaskOrderSignFilePageReqVO;
 import cn.start.tz.module.pressure2.controller.app.taskorder.vo.ServeOrderSignRespVo;
+import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderPushReqVO;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
@@ -56,4 +57,17 @@ public class BoilerTaskOrderAppApiController {
         taskSignService.orderSignSubmit(reqVO);
         return success(true);
     }
+
+    @GetMapping("/payment-bill/page")
+    @Operation(summary = "缴费账单分页")
+    public CommonResult<PageResult<TaskOrderPaymentRespVo>> getPaymentBillPage(@Valid BoilerTaskOrderPageReqVO pageReqVO) {
+        pageReqVO.setEquipMainType("200");
+        return success(boilerTaskOrderService.getPaymentBillPage(pageReqVO));
+    }
+
+    @GetMapping("/payment-bill/get")
+    @Operation(summary = "获得缴费账单详情")
+    public CommonResult<TaskOrderPaymentRespVo> getPaymentBillDetail(@RequestParam("id") String id) {
+        return success(boilerTaskOrderService.getPaymentBillDetail(id));
+    }
 }

+ 2 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderIssueReportAppController.java

@@ -14,10 +14,12 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import static cn.start.tz.framework.common.pojo.CommonResult.success;
+import static cn.start.tz.framework.security.core.util.SecurityFrameworkUtils.getLoginUserMobile;
 
 @Tag(name = "小程序 - 锅炉出具报告")
 @RestController

+ 14 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/PipeTaskOrderAppApiController.java

@@ -6,6 +6,7 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTa
 import cn.start.tz.module.pressure2.controller.admin.boilertaskordersignfile.vo.BoilerTaskOrderSignFilePageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderRespVO;
 import cn.start.tz.module.pressure2.controller.app.taskorder.vo.ServeOrderSignRespVo;
+import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderPushReqVO;
 import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
 import cn.start.tz.module.pressure2.service.tasksign.TaskSignService;
@@ -54,4 +55,17 @@ public class PipeTaskOrderAppApiController {
         taskSignService.orderSignSubmit(reqVO);
         return success(true);
     }
+
+    @GetMapping("/payment-bill/page")
+    @Operation(summary = "缴费账单分页")
+    public CommonResult<PageResult<TaskOrderPaymentRespVo>> getPaymentBillPage(@Valid BoilerTaskOrderPageReqVO pageReqVO) {
+        pageReqVO.setEquipMainType("300");
+        return success(pipeTaskOrderService.getPaymentBillPage(pageReqVO));
+    }
+
+    @GetMapping("/payment-bill/get")
+    @Operation(summary = "获得缴费账单详情")
+    public CommonResult<TaskOrderPaymentRespVo> getPaymentBillDetail(@RequestParam("id") String id) {
+        return success(pipeTaskOrderService.getPaymentBillDetail(id));
+    }
 }

+ 11 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/BoilerAppReportTemplateController.java

@@ -1,8 +1,10 @@
 package cn.start.tz.module.pressure2.controller.app.taskorderitemreport;
 
 import cn.start.tz.framework.ratelimiter.core.annotation.RateLimiter;
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorderinput.vo.PipeTaskOrderInputPrintReqVO;
 import cn.start.tz.module.pressure2.controller.admin.reporttemplate.vo.ReportMockPreviewVO;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.OrderFromPdfReqVO;
+import cn.start.tz.module.pressure2.service.pipetaskorderinput.PipeTaskOrderInputService;
 import cn.start.tz.module.pressure2.service.reporttemplate.ReportTemplateService;
 import cn.start.tz.module.pressure2.service.tasksign.TaskSignService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -26,6 +28,9 @@ public class BoilerAppReportTemplateController {
     @Resource
     private ReportTemplateService reportTemplateService;
 
+    @Resource
+    private PipeTaskOrderInputService pipeTaskOrderInputService;
+
     @Resource
     private TaskSignService taskSignService;
 
@@ -33,13 +38,17 @@ public class BoilerAppReportTemplateController {
     @Operation(summary = "报告预览(pdf流)")
     public void reportPreview(@Valid @RequestBody ReportMockPreviewVO reportPreviewVO,
                               HttpServletResponse response) throws Exception {
-        ByteArrayOutputStream bos = reportTemplateService.reportTemplateMockPreview(reportPreviewVO);
+//        ByteArrayOutputStream bos = reportTemplateService.reportTemplateMockPreview(reportPreviewVO);
+        PipeTaskOrderInputPrintReqVO reqVO = new PipeTaskOrderInputPrintReqVO();
+        reqVO.setTemplateId(reportPreviewVO.getTemplateId());
+        reqVO.setId(reportPreviewVO.getId());
+        ByteArrayOutputStream byteArrayOutputStream = pipeTaskOrderInputService.printPipeTaskOrderInput(reqVO);
         if (Integer.valueOf(100).equals(reportPreviewVO.getFileType())) {
             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
         } else {
             response.setContentType("application/pdf");
         }
-        response.getOutputStream().write(bos.toByteArray());
+        response.getOutputStream().write(byteArrayOutputStream.toByteArray());
     }
 
     @PostMapping("/service-from/printFrom")

+ 9 - 6
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/BoilerAppTaskOrderItemReportController.java

@@ -4,9 +4,11 @@ import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerOrderItemPageRespVO;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderRespVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.BoilerTaskOrderItemReportPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.BoilerTaskOrderItemReportRespVO;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
+import cn.start.tz.module.pressure2.service.boilertaskorderissuereport.BoilerTaskOrderIssueReportService;
 import cn.start.tz.module.pressure2.service.boilertaskorderitemreport.BoilerTaskOrderItemReportService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -27,15 +29,16 @@ public class BoilerAppTaskOrderItemReportController {
     private BoilerTaskOrderItemReportService boilerTaskOrderItemReportService;
     @Resource
     private BoilerTaskOrderService boilerTaskOrderService;
+    @Resource
+    private BoilerTaskOrderIssueReportService boilerTaskOrderIssueReportService;
 
     // ======================== 已实现的接口 ========================
 
-    // TODO: 待提供更多信息 - boilerTaskOrderItemReportService.getTaskOrderItemReportPage
-    // @GetMapping("/page")
-    // @Operation(summary = "获得任务单设备关联报告分页")
-    // public CommonResult<PageResult<BoilerTaskOrderItemReportRespVO>> getAppTaskOrderItemReportPage(@Valid BoilerTaskOrderItemReportPageReqVO pageReqVO) {
-    //     return success(boilerTaskOrderItemReportService.getTaskOrderItemReportPage(pageReqVO));
-    // }
+    @GetMapping("/page")
+    @Operation(summary = "获得报告档案分页")
+    public CommonResult<PageResult<BoilerTaskOrderRespVO>> getArchivePage(@Valid BoilerTaskOrderPageReqVO pageReqVO) {
+        return success(boilerTaskOrderIssueReportService.archivePage(pageReqVO));
+    }
 
     // TODO: 待提供更多信息 - boilerTaskOrderService.appInspectionOpinionPage
     // @GetMapping("/inspection-opinion/page")

+ 15 - 4
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/PipeAppReportTemplateController.java

@@ -1,7 +1,9 @@
 package cn.start.tz.module.pressure2.controller.app.taskorderitemreport;
 
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorderinput.vo.PipeTaskOrderInputPrintReqVO;
 import cn.start.tz.module.pressure2.controller.admin.reporttemplate.vo.ReportMockPreviewVO;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.OrderFromPdfReqVO;
+import cn.start.tz.module.pressure2.service.pipetaskorderinput.PipeTaskOrderInputService;
 import cn.start.tz.module.pressure2.service.reporttemplate.ReportTemplateService;
 import cn.start.tz.module.pressure2.service.tasksign.TaskSignService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -27,14 +29,23 @@ public class PipeAppReportTemplateController {
 
     @Resource
     private TaskSignService taskSignService;
-
+    @Resource
+    private PipeTaskOrderInputService pipeTaskOrderInputService;
     @PostMapping("/reportPreview")
     @Operation(summary = "报告预览(pdf流)")
     public void reportPreview(@Valid @RequestBody ReportMockPreviewVO reportPreviewVO,
                               HttpServletResponse response) throws Exception {
-        ByteArrayOutputStream bos = reportTemplateService.reportTemplateMockPreview(reportPreviewVO);
-        response.setContentType("application/pdf");
-        response.getOutputStream().write(bos.toByteArray());
+//        ByteArrayOutputStream bos = reportTemplateService.reportTemplateMockPreview(reportPreviewVO);
+        PipeTaskOrderInputPrintReqVO reqVO = new PipeTaskOrderInputPrintReqVO();
+        reqVO.setTemplateId(reportPreviewVO.getTemplateId());
+        reqVO.setId(reportPreviewVO.getId());
+        ByteArrayOutputStream byteArrayOutputStream = pipeTaskOrderInputService.printPipeTaskOrderInput(reqVO);
+        if (Integer.valueOf(100).equals(reportPreviewVO.getFileType())) {
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        } else {
+            response.setContentType("application/pdf");
+        }
+        response.getOutputStream().write(byteArrayOutputStream.toByteArray());
     }
 
     @PostMapping("/service-from/printFrom")

+ 11 - 3
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/PipeAppTaskOrderItemReportController.java

@@ -4,8 +4,11 @@ import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeOrderItemPageRespVO;
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderPageReqVO;
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderRespVO;
 import cn.start.tz.module.pressure2.controller.app.taskorderitemreport.vo.InspectionOpinionUploadReqVo;
 import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
+import cn.start.tz.module.pressure2.service.pipetaskorderissuereport.PipeTaskOrderIssueReportService;
 import cn.start.tz.module.pressure2.service.pipetaskorderitemreport.PipeTaskOrderItemReportService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -26,11 +29,16 @@ public class PipeAppTaskOrderItemReportController {
     private PipeTaskOrderItemReportService pipeTaskOrderItemReportService;
     @Resource
     private PipeTaskOrderService pipeTaskOrderService;
+    @Resource
+    private PipeTaskOrderIssueReportService pipeTaskOrderIssueReportService;
 
-    // ======================== 待Service接入后实现的接口 ========================
+    // ======================== 实现的接口 ========================
 
-    // TODO: 待提供更多信息 - pipeTaskOrderItemReportService.getTaskOrderItemReportPage
-    // @GetMapping("/page")
+    @GetMapping("/page")
+    @Operation(summary = "获得报告档案分页")
+    public CommonResult<PageResult<PipeTaskOrderRespVO>> getArchivePage(@Valid PipeTaskOrderPageReqVO pageReqVO) {
+        return success(pipeTaskOrderIssueReportService.archivePage(pageReqVO));
+    }
 
     // TODO: 待提供更多信息 - pipeTaskOrderService.appInspectionOpinionPage
     // @GetMapping("/inspection-opinion/page")

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

@@ -10,6 +10,7 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskordersignfile.vo.
 import cn.start.tz.module.pressure2.controller.admin.bpmtaskinfo.vo.BpmTaskRespVO;
 import cn.start.tz.module.pressure2.controller.admin.costfield.vo.CostFieldRespVO;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.OrderFromPdfReqVO;
+import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderAppPushReqVO;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderPushReqVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
@@ -563,8 +564,8 @@ public class AppApiBoilerTaskOrderController {
 
     @GetMapping("/order-sign/submit")
     @Operation(summary = "服务单签名提交(app)")
-    public CommonResult<Boolean> orderSignSubmit(@Valid TaskOrderPushReqVO reqVO)  throws Exception {
-        taskSignService.orderSignSubmit(reqVO);
+    public CommonResult<Boolean> orderSignSubmit(@Valid TaskOrderAppPushReqVO reqVO)  throws Exception {
+        taskSignService.orderAppSignSubmit(reqVO);
         return success(true);
     }
 //

+ 42 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/appapi/boilertaskorder/vo/TaskOrderAppPushReqVO.java

@@ -0,0 +1,42 @@
+package cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class TaskOrderAppPushReqVO {
+
+    @Schema(description = "id")
+    @NotNull(message = "受理单id不能为空")
+    private String id;
+
+
+    /**
+     * 接收人
+     */
+    @Schema(description = "接收人")
+    private String receiver;
+
+    /**
+     * 服务单接收人电话
+     */
+    @Schema(description = "接收人电话")
+    private String receiverPhone;
+    @Schema(description = "接收人Email")
+    private String receiverEmail;
+
+    @Schema(description = "业务类型(100=任务单,200=检验结果告知,300=安全检查记录,400=重大问题线索)", example = "2")
+    @NotNull(message = "业务类型不能为空")
+    private Integer businessType;
+
+    @Schema(description = "用户签名url", example = "https://www.iocoder.cn")
+    private String signUrl;
+
+    @Schema(description = "设备id", example = "https://www.iocoder.cn")
+    private String orderItemId;
+
+    // PRESSURE2_ORDER_REPORT表的id
+    @Schema(description = "受理单ID")
+    private String orderReportId;
+}

+ 3 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/notificationformreport/NotificationformReportDO.java

@@ -1,6 +1,8 @@
 package cn.start.tz.module.pressure2.dal.dataobject.notificationformreport;
 
 import lombok.*;
+
+import java.time.LocalDate;
 import java.util.*;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -42,7 +44,7 @@ public class NotificationformReportDO extends BaseDO {
 
     private String signUrl;
 
-    private LocalDateTime signDate;
+    private LocalDate signDate;
 
     private String reportNo;
 

+ 11 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/orderreport/OrderReportDO.java

@@ -1,6 +1,8 @@
 package cn.start.tz.module.pressure2.dal.dataobject.orderreport;
 
 import lombok.*;
+
+import java.time.LocalDate;
 import java.util.*;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -48,4 +50,13 @@ public class OrderReportDO extends BaseDO {
      */
     private String insId;
 
+    /**
+     * 签名图片地址
+     */
+    private String signUrl;
+
+    /**
+     * 签名时间
+     */
+    private LocalDate signDate;
 }

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/boilertaskorderitem/BoilerTaskOrderItemQueryMapper.java

@@ -42,12 +42,18 @@ public interface BoilerTaskOrderItemQueryMapper extends BaseMapperX<BoilerTaskOr
                 selectAs(BoilerTaskOrderDO::getUseUnitName,BoilerTaskOrderRespVO::getUseUnitName).
                 selectAs(BoilerTaskOrderDO::getDeptId,BoilerTaskOrderRespVO::getDeptId).
                 selectAs(BoilerTaskOrderDO::getCheckType,BoilerTaskOrderRespVO::getCheckType).
+                selectAs(BoilerTaskOrderDO::getCheckDate,BoilerTaskOrderRespVO::getCheckDate).
+                selectAs(BoilerTaskOrderDO::getUnitName,BoilerTaskOrderRespVO::getUnitName).
+                selectAs(EquipBoilerDO::getEquipDistrict,BoilerTaskOrderRespVO::getEquipDistrict).
+                selectAs(EquipBoilerDO::getEquipStreet,BoilerTaskOrderRespVO::getEquipStreet).
                 selectAs(EquipBoilerDO::getEquipName,BoilerTaskOrderRespVO::getEquipName).
                 selectAs(EquipBoilerDO::getUseRegisterNo,BoilerTaskOrderRespVO::getUseRegisterNo).
                 selectAs(EquipBoilerDO::getEquipCode,BoilerTaskOrderRespVO::getEquipCode).
                 selectAs(EquipBoilerDO::getProductCode,BoilerTaskOrderRespVO::getProductNo).
                 selectAs(BoilerTaskOrderItemReportDO::getReportNo,BoilerTaskOrderRespVO::getReportNo).
                 selectAs(BoilerTaskOrderItemReportDO::getId,BoilerTaskOrderRespVO::getReportId).
+                selectAs(BoilerTaskOrderItemReportDO::getReportUrl,BoilerTaskOrderRespVO::getReportUrl).
+                selectAs(BoilerTaskOrderItemReportDO::getTemplateId,BoilerTaskOrderRespVO::getTemplateId).
                 selectAs(BoilerTaskOrderItemReportDO::getRatifyId,BoilerTaskOrderRespVO::getRatifyId).
                 selectAs(BoilerTaskOrderItemReportDO::getRatifyName,BoilerTaskOrderRespVO::getRatifyName).
                 selectAs(BoilerTaskOrderItemReportDO::getRatifyTime,BoilerTaskOrderRespVO::getRatifyTime).

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/mysql/pipetaskorderitem/PipeTaskOrderItemQueryMapper.java

@@ -46,6 +46,10 @@ public interface PipeTaskOrderItemQueryMapper extends BaseMapperX<PipeTaskOrderI
                 selectAs(PipeTaskOrderDO::getUseUnitName,PipeTaskOrderRespVO::getUseUnitName).
                 selectAs(PipeTaskOrderDO::getDeptId,PipeTaskOrderRespVO::getDeptId).
                 selectAs(PipeTaskOrderDO::getCheckType,PipeTaskOrderRespVO::getCheckType).
+                selectAs(PipeTaskOrderDO::getCheckDate,PipeTaskOrderRespVO::getCheckDate).
+                selectAs(PipeTaskOrderDO::getUnitName,PipeTaskOrderRespVO::getUnitName).
+                selectAs(EquipPipeDO::getEquipDistrict,PipeTaskOrderRespVO::getEquipDistrict).
+                selectAs(EquipPipeDO::getEquipStreet,PipeTaskOrderRespVO::getEquipStreet).
                 selectAs(PipeTaskOrderInputDO::getMainChecker,PipeTaskOrderRespVO::getMainChecker).
                 selectAs(PipeTaskOrderInputDO::getId,PipeTaskOrderRespVO::getInputId).
                 selectAs(EquipPipeDO::getProjectName,PipeTaskOrderRespVO::getEquipName).
@@ -54,6 +58,8 @@ public interface PipeTaskOrderItemQueryMapper extends BaseMapperX<PipeTaskOrderI
 //                selectAs(EquipPipeDO::getProductCode,PipeTaskOrderRespVO::getProductNo).
                 selectAs(PipeTaskOrderItemReportDO::getReportNo,PipeTaskOrderRespVO::getReportNo).
                 selectAs(PipeTaskOrderItemReportDO::getId,PipeTaskOrderRespVO::getReportId).
+                selectAs(PipeTaskOrderItemReportDO::getReportUrl,PipeTaskOrderRespVO::getReportUrl).
+                selectAs(PipeTaskOrderItemReportDO::getTemplateId,PipeTaskOrderRespVO::getTemplateId).
                 selectAs(PipeTaskOrderItemReportDO::getRatifyId,PipeTaskOrderRespVO::getRatifyId).
                 selectAs(PipeTaskOrderItemReportDO::getRatifyName,PipeTaskOrderRespVO::getRatifyName).
                 selectAs(PipeTaskOrderItemReportDO::getRatifyTime,PipeTaskOrderRespVO::getRatifyTime).

+ 67 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/PipeAppointmentConfirmOrderServiceImpl.java

@@ -311,6 +311,73 @@ public class PipeAppointmentConfirmOrderServiceImpl implements PipeAppointmentCo
         if (area != null) {
             appointmentConfirmOrderRespVO.setEquipDistrictName(area.getName());
         }
+
+        // 查询设备项列表(管道工程)
+        List<PipeAppointmentConfirmOrderItemDO> itemList = appointmentConfirmOrderItemMapper.selectList(
+                PipeAppointmentConfirmOrderItemDO::getOrderId, id);
+        if (CollUtil.isNotEmpty(itemList)) {
+            // 收集 equipId,批量从 EquipPipeDO 查询工程信息
+            List<String> equipIds = itemList.stream().map(PipeAppointmentConfirmOrderItemDO::getEquipId).filter(StringUtils::isNotBlank).toList();
+            Map<String, EquipPipeDO> equipPipeMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(equipIds)) {
+                List<EquipPipeDO> equipPipes = equipPipeMapper.selectByIds(equipIds);
+                equipPipeMap = equipPipes.stream().collect(Collectors.toMap(EquipPipeDO::getId, Function.identity()));
+            }
+            // 收集所有 itemId,查询关联的 detail 记录
+            List<String> itemIds = itemList.stream().map(PipeAppointmentConfirmOrderItemDO::getId).toList();
+            List<PipeAppointmentConfirmOrderItemDetailDO> allDetails = pipeAppointmentConfirmOrderItemDetailMapper.selectList(
+                    PipeAppointmentConfirmOrderItemDetailDO::getItemId, itemIds);
+            // 按 itemId 分组
+            Map<String, List<PipeAppointmentConfirmOrderItemDetailDO>> detailMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(allDetails)) {
+                detailMap = allDetails.stream()
+                        .collect(Collectors.groupingBy(PipeAppointmentConfirmOrderItemDetailDO::getItemId));
+            }
+            // 收集 detail 的 equipId,批量从 EquipPipeDetailDO 查询管线明细
+            List<String> detailEquipIds = allDetails.stream().map(PipeAppointmentConfirmOrderItemDetailDO::getEquipId).filter(StringUtils::isNotBlank).distinct().toList();
+            Map<String, EquipPipeDetailDO> equipDetailMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(detailEquipIds)) {
+                List<EquipPipeDetailDO> equipDetails = equipPipeDetailMapper.selectByIds(detailEquipIds);
+                equipDetailMap = equipDetails.stream().collect(Collectors.toMap(EquipPipeDetailDO::getId, Function.identity()));
+            }
+            // 组装 ItemListVO
+            List<PipeAppointmentConfirmOrderItemListVO> itemVOList = new ArrayList<>();
+            for (PipeAppointmentConfirmOrderItemDO item : itemList) {
+                EquipPipeDO equipPipe = equipPipeMap.get(item.getEquipId());
+                PipeAppointmentConfirmOrderItemListVO itemVO = new PipeAppointmentConfirmOrderItemListVO();
+                itemVO.setId(item.getId());
+                itemVO.setOrderId(item.getOrderId());
+                if (equipPipe != null) {
+                    itemVO.setProjectNo(equipPipe.getProjectNo());
+                    itemVO.setProjectName(equipPipe.getProjectName());
+                    itemVO.setUseRegisterNo(equipPipe.getCertificateNo());
+                    itemVO.setNextCheckDate(equipPipe.getNextLegalCheckDate() != null ? equipPipe.getNextLegalCheckDate().toLocalDate() : null);
+                    itemVO.setNextYearCheckDate(equipPipe.getNextYearCheckDate() != null ? equipPipe.getNextYearCheckDate().toLocalDate() : null);
+                }
+                // 组装管线明细(从 EquipPipeDetailDO 取数据)
+                List<PipeAppointmentConfirmOrderItemDetailDO> details = detailMap.getOrDefault(item.getId(), new ArrayList<>());
+                Map<String, EquipPipeDetailDO> finalEquipDetailMap = equipDetailMap;
+                List<PipeAppointmentConfirmOrderItemDetailVO> detailVOList = details.stream().map(d -> {
+                    EquipPipeDetailDO equipDetail = finalEquipDetailMap.get(d.getEquipId());
+                    PipeAppointmentConfirmOrderItemDetailVO dvo = new PipeAppointmentConfirmOrderItemDetailVO();
+                    dvo.setId(d.getId());
+                    dvo.setItemId(d.getItemId());
+                    if (equipDetail != null) {
+                        dvo.setPipeNo(equipDetail.getPipeNo());
+                        dvo.setEquipCode(equipDetail.getPipeRegCode());
+                        dvo.setEquipName(equipDetail.getPipeName());
+                        dvo.setUseRegisterNo(equipDetail.getCertificateNo());
+                        dvo.setNextCheckDate(equipDetail.getNextLegalCheckDate() != null ? equipDetail.getNextLegalCheckDate().toLocalDate() : null);
+                        dvo.setNextYearCheckDate(equipDetail.getNextYearCheckDate() != null ? equipDetail.getNextYearCheckDate().toLocalDate() : null);
+                    }
+                    return dvo;
+                }).toList();
+                itemVO.setDetailList(detailVOList);
+                itemVOList.add(itemVO);
+            }
+            appointmentConfirmOrderRespVO.setItemList(itemVOList);
+        }
+
         //获取部门电话
         if (StringUtils.isNotEmpty(appointmentConfirmOrderDO.getDeptId()) && StringUtils.isEmpty(appointmentConfirmOrderDO.getDeptPhone())) {
 //            OrgContactDTO orgContactDTO = orgContactApi.selectOne(appointmentConfirmOrderDO.getDeptId()).getCheckedData();

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

@@ -208,4 +208,14 @@ public interface BoilerTaskOrderService extends IService<BoilerTaskOrderDO>  {
 
     void majorIssuesRecovery(@Valid TaskOrderMajorIssuesVO taskOrderMajorIssuesVO);
 
+    /**
+     * 缴费账单分页
+     */
+    cn.start.tz.framework.common.pojo.PageResult<cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo> getPaymentBillPage(BoilerTaskOrderPageReqVO pageReqVO);
+
+    /**
+     * 获得缴费账单详情
+     */
+    cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo getPaymentBillDetail(String id);
+
 }

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

@@ -60,6 +60,7 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitem.vo.Boil
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemrecheck.vo.BoilerTaskOrderItemRecheckRespVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.BoilerTaskOrderItemReportRespVO;
 import cn.start.tz.module.pressure2.controller.admin.bpmtaskinfo.vo.BpmTaskRespVO;
+import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo;
 import cn.start.tz.module.pressure2.controller.admin.costfield.vo.CostFieldRespVO;
 import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
 import cn.start.tz.module.pressure2.controller.admin.inspectionnature.vo.InspectionNatureTemplateDetailRespVO;
@@ -6065,4 +6066,75 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         return "05";
     }
 
+    @Override
+    public PageResult<TaskOrderPaymentRespVo> getPaymentBillPage(BoilerTaskOrderPageReqVO pageReqVO) {
+        PageResult<BoilerTaskOrderRespVO> pageResult = getBoilerTaskOrderPage(pageReqVO);
+        PageResult<TaskOrderPaymentRespVo> result = new PageResult<>();
+        result.setTotal(pageResult.getTotal());
+        List<TaskOrderPaymentRespVo> list = new ArrayList<>();
+        if (CollUtil.isNotEmpty(pageResult.getList())) {
+            for (BoilerTaskOrderRespVO vo : pageResult.getList()) {
+                TaskOrderPaymentRespVo paymentVo = convertToPaymentRespVo(vo, null);
+                list.add(paymentVo);
+            }
+        }
+        result.setList(list);
+        return result;
+    }
+
+    @Override
+    public TaskOrderPaymentRespVo getPaymentBillDetail(String id) {
+        BoilerTaskOrderRespVO taskOrder = getBoilerTaskOrder(id);
+        if (taskOrder == null) return null;
+        // 查询设备明细
+        List<BoilerTaskOrderItemDO> items = boilerTaskOrderItemMapper.selectList(
+                BoilerTaskOrderItemDO::getOrderId, id);
+        return convertToPaymentRespVo(taskOrder, items);
+    }
+
+    private TaskOrderPaymentRespVo convertToPaymentRespVo(BoilerTaskOrderRespVO vo, List<BoilerTaskOrderItemDO> items) {
+        TaskOrderPaymentRespVo paymentVo = new TaskOrderPaymentRespVo();
+        paymentVo.setOrderId(vo.getId());
+        paymentVo.setOrderNo(vo.getOrderNo());
+        paymentVo.setUnitName(vo.getUnitName());
+        paymentVo.setCheckTypeStr(getCheckTypeDesc(vo.getCheckType()));
+        paymentVo.setCheckType(vo.getCheckType());
+        paymentVo.setCheckDate(vo.getCheckDate());
+        if (StringUtils.isNotBlank(vo.getEquipDistrictName()) || StringUtils.isNotBlank(vo.getEquipStreetName())) {
+            String district = vo.getEquipDistrictName() != null ? vo.getEquipDistrictName() : "";
+            String street = vo.getEquipStreetName() != null ? vo.getEquipStreetName() : "";
+            if (StringUtils.isNotBlank(district) && StringUtils.isNotBlank(street)) {
+                paymentVo.setAddressInfo(district + "-" + street);
+            } else if (StringUtils.isNotBlank(district)) {
+                paymentVo.setAddressInfo(district);
+            } else {
+                paymentVo.setAddressInfo(street);
+            }
+        }
+        paymentVo.setEquipDistrict(vo.getEquipDistrict());
+        paymentVo.setEquipStreet(vo.getEquipStreet());
+        paymentVo.setEquipNum(vo.getEquipNum());
+        paymentVo.setPaymentStatus(vo.getPaymentStatus());
+        if (CollUtil.isNotEmpty(items)) {
+            List<TaskOrderPaymentRespVo.orderItemInfo> infoList = items.stream().map(item -> {
+                TaskOrderPaymentRespVo.orderItemInfo info = new TaskOrderPaymentRespVo.orderItemInfo();
+                info.setEquipCode(item.getEquipCode());
+                info.setFee(item.getFee());
+                return info;
+            }).collect(Collectors.toList());
+            paymentVo.setOrderItemInfoList(infoList);
+        }
+        return paymentVo;
+    }
+
+    private String getCheckTypeDesc(Integer checkType) {
+        if (checkType == null) return null;
+        switch (checkType) {
+            case 100: return "内部检验";
+            case 200: return "外部检验";
+            case 300: return "耐压检验";
+            default: return String.valueOf(checkType);
+        }
+    }
+
 }

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

@@ -1917,6 +1917,14 @@ public class BoilerTaskOrderIssueReportServiceImpl extends ServiceImpl<BoilerTas
         for (BoilerTaskOrderRespVO taskOrderRespVO : taskOrderRespVOPageResult.getList()) {
             List<BoilerTaskOrderIssueReportVO> itemReports = reportGroupByItemId.get(taskOrderRespVO.getId());
 
+            // 设置区域和街道名称
+            if (taskOrderRespVO.getEquipDistrict() != null) {
+                taskOrderRespVO.setEquipDistrictName(AreaUtils.getAreaName(taskOrderRespVO.getEquipDistrict()));
+            }
+            if (taskOrderRespVO.getEquipStreet() != null) {
+                taskOrderRespVO.setEquipStreetName(AreaUtils.getAreaName(taskOrderRespVO.getEquipStreet()));
+            }
+
             // 设置报告类型(如果有报告发放记录)
             if (CollUtil.isNotEmpty(itemReports)) {
                 // 设置报告类型

+ 14 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0405_202400ReportOFData.java

@@ -8,6 +8,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.boileracceptorderuser.BoilerA
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskordersignfile.BoilerTaskOrderSignFileDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equipboiler.EquipBoilerDO;
+import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
 import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boileracceptorderitem.BoilerAcceptOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
@@ -15,6 +16,7 @@ import cn.start.tz.module.pressure2.dal.mysql.boileracceptorderuser.BoilerAccept
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
 import cn.start.tz.module.pressure2.service.dynamicOFData.IDynamicOFData;
+import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.fastjson2.JSONObject;
@@ -39,6 +41,9 @@ public class QR0405_202400ReportOFData implements IDynamicOFData {
     @Resource
     private AcceptOrderMapper acceptOrderMapper;
 
+    @Resource
+    private OrderReportService orderReportService;
+
     @Resource
     private BoilerAcceptOrderItemMapper acceptOrderItemMapper;
 
@@ -76,12 +81,20 @@ public class QR0405_202400ReportOFData implements IDynamicOFData {
         result.put("unitCode", acceptOrderDO.getUnitCode());
         result.put("zipCode", acceptOrderDO.getZipCode());
 //        result.put("contact", acceptOrderDO.getUnitContact());
-        // 填充签名
+        // 检验员签名
+        String orderReportDOId = ruleVO.getParams().getString("orderReportDOId");
+        if (orderReportDOId != null){
+            OrderReportDO orderReportDO = orderReportService.getById(orderReportDOId);
+            result.put("checkName", orderReportDO.getSignUrl());
+            result.put("checkDate", orderReportDO.getSignUrl());
+        }
+        // 填充客户签名
         BoilerTaskOrderDO one = boilerTaskOrderService.getOne(new LambdaQueryWrapper<BoilerTaskOrderDO>().eq(BoilerTaskOrderDO::getAcceptOrderId, refId));
         if (one != null){
             BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(one.getId(), 100);
             if (boilerTaskOrderSignFileDO != null){
                 result.put("contact", boilerTaskOrderSignFileDO.getSignUrl());
+                result.put("contactDate", boilerTaskOrderSignFileDO.getSignDate());
             }
         }
         result.put("contactPhone", acceptOrderDO.getUnitPhone());

+ 18 - 26
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/comm/QC01012_202500OFData.java

@@ -122,6 +122,8 @@ public class QC01012_202500OFData implements IDynamicOFData {
 
             NotificationformReportDO formReportDO = notificationformReportMapper.selectById(refId);
             if (formReportDO != null){
+                result.put("checkName",formReportDO.getSignUrl());
+                result.put("enterDate",formReportDO.getSignDate());
 
                 String orderId = formReportDO.getTaskOrderId();
                 BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(orderId);
@@ -232,20 +234,20 @@ public class QC01012_202500OFData implements IDynamicOFData {
                     }
                     result.put("remainDays",15);
 
-                    Set<String> checkIds = reportDOList.stream().map(BoilerTaskOrderItemReportDO::getEnterId)
-                            .filter(ObjectUtil::isNotNull)
-                            .collect(Collectors.toSet());
-                    if (!checkIds.isEmpty()){
-                        List<AdminUserRespDTO> userList = adminUserApi.getUserList(checkIds).getData();
-                        if (!userList.isEmpty()){
-                            String checkNames = userList.stream()
-                                    .map(AdminUserRespDTO::getSignUrl)
-                                    .filter(Objects::nonNull) // 过滤掉null值
-                                    .filter(signUrl -> !signUrl.isEmpty()) // 过滤掉空字符串
-                                    .collect(Collectors.joining(","));
-                            result.put("checkName",checkNames);
-                        }
-                    }
+//                    Set<String> checkIds = reportDOList.stream().map(BoilerTaskOrderItemReportDO::getEnterId)
+//                            .filter(ObjectUtil::isNotNull)
+//                            .collect(Collectors.toSet());
+//                    if (!checkIds.isEmpty()){
+//                        List<AdminUserRespDTO> userList = adminUserApi.getUserList(checkIds).getData();
+//                        if (!userList.isEmpty()){
+//                            String checkNames = userList.stream()
+//                                    .map(AdminUserRespDTO::getSignUrl)
+//                                    .filter(Objects::nonNull) // 过滤掉null值
+//                                    .filter(signUrl -> !signUrl.isEmpty()) // 过滤掉空字符串
+//                                    .collect(Collectors.joining(","));
+//                            result.put("checkName",checkNames);
+//                        }
+//                    }
 
                     if (formReportDO.getCreateTime() != null) {
                         result.put("enterDate", formReportDO.getCreateTime().format(dateFormat));
@@ -267,7 +269,8 @@ public class QC01012_202500OFData implements IDynamicOFData {
 
             NotificationformReportDO formReportDO = notificationformReportMapper.selectById(refId);
             if (formReportDO != null){
-
+                result.put("checkName",formReportDO.getSignUrl());
+                result.put("enterDate",formReportDO.getSignDate());
                 String orderId = formReportDO.getTaskOrderId();
                 PipeTaskOrderDO taskOrderDO = pipeTaskOrderMapper.selectById(orderId);
                 List<PipeTaskOrderItemDO> itemDOS = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapper<PipeTaskOrderItemDO>()
@@ -379,17 +382,6 @@ public class QC01012_202500OFData implements IDynamicOFData {
                             .filter(ObjectUtil::isNotNull)
                             .collect(Collectors.toSet());
 
-                    if (!checkIds.isEmpty()){
-                        List<AdminUserRespDTO> userList = adminUserApi.getUserList(checkIds).getData();
-                        if (!userList.isEmpty()){
-                            String checkNames = userList.stream()
-                                    .map(AdminUserRespDTO::getSignUrl)
-                                    .filter(Objects::nonNull) // 过滤掉null值
-                                    .filter(signUrl -> !signUrl.isEmpty()) // 过滤掉空字符串
-                                    .collect(Collectors.joining(","));
-                            result.put("checkName",checkNames);
-                        }
-                    }
 
                     if (formReportDO.getCreateTime() != null) {
                         result.put("enterDate", formReportDO.getCreateTime().format(dateFormat));

+ 10 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0413_202400ReportOFData.java

@@ -8,6 +8,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.boilertaskordersignfile.Boile
 import cn.start.tz.module.pressure2.dal.dataobject.dynamictbcol.DynamicTbColDO;
 import cn.start.tz.module.pressure2.dal.dataobject.dynamictbval.DynamicTbValDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
+import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipeacceptorderitem.PipeAcceptOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipeacceptorderuser.PipeAcceptOrderUserDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitem.PipeTaskOrderItemDO;
@@ -25,6 +26,7 @@ import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOr
 import cn.start.tz.module.pressure2.service.dynamicOFData.IDynamicOFData;
 import cn.start.tz.module.pressure2.service.dynamictbcol.DynamicTbColService;
 import cn.start.tz.module.pressure2.service.dynamictbval.DynamicTbValService;
+import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.fastjson2.JSONObject;
@@ -56,6 +58,9 @@ public class QR0413_202400ReportOFData implements IDynamicOFData {
     @Resource
     private PipeAcceptOrderItemMapper pipeAcceptOrderItemMapper;
 
+    @Resource
+    private OrderReportService orderReportService;
+
     @Resource
     private AdminUserApi adminUserApi;
     @Resource
@@ -87,7 +92,11 @@ public class QR0413_202400ReportOFData implements IDynamicOFData {
         result.put("unitCode", acceptOrderDO.getUnitCode());
         result.put("zipCode", acceptOrderDO.getZipCode());
 //        result.put("contact", acceptOrderDO.getUnitContact());
-        // 填充签名
+        // 检验员签名
+        OrderReportDO orderReportDO = orderReportService.getOne(new LambdaQueryWrapper<OrderReportDO>().eq(OrderReportDO::getAcceptOrderId, acceptOrderDO.getId()));
+        result.put("checkName", orderReportDO.getSignUrl());
+        result.put("checkDate", orderReportDO.getSignUrl());
+        // 填充客户签名
         BoilerTaskOrderDO one = boilerTaskOrderService.getOne(new LambdaQueryWrapper<BoilerTaskOrderDO>().eq(BoilerTaskOrderDO::getAcceptOrderId, refId));
         if (one != null){
             BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(one.getId(), 100);

+ 9 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0424_202403ReportOFData.java

@@ -6,6 +6,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskordersignfile.BoilerTaskOrderSignFileDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
+import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipeacceptorderitem.PipeAcceptOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipeacceptorderuser.PipeAcceptOrderUserDO;
 import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
@@ -15,6 +16,7 @@ import cn.start.tz.module.pressure2.dal.mysql.pipeacceptorderuser.PipeAcceptOrde
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
 import cn.start.tz.module.pressure2.service.dynamicOFData.IDynamicOFData;
+import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
 import cn.start.tz.module.pressure2.service.tasksign.TaskSignService;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
@@ -45,7 +47,8 @@ public class QR0424_202403ReportOFData implements IDynamicOFData {
 
     @Resource
     private PipeAcceptOrderItemMapper pipeAcceptOrderItemMapper;
-
+    @Resource
+    private OrderReportService orderReportService;
     @Resource
     private AdminUserApi adminUserApi;
     @Resource
@@ -77,7 +80,11 @@ public class QR0424_202403ReportOFData implements IDynamicOFData {
         result.put("unitCode", acceptOrderDO.getUnitCode());
         result.put("zipCode", acceptOrderDO.getZipCode());
 //        result.put("contact", acceptOrderDO.getUnitContact());
-        // 填充签名
+        // 检验员签名
+        OrderReportDO orderReportDO = orderReportService.getOne(new LambdaQueryWrapper<OrderReportDO>().eq(OrderReportDO::getAcceptOrderId, acceptOrderDO.getId()));
+        result.put("checkName", orderReportDO.getSignUrl());
+        result.put("checkDate", orderReportDO.getSignUrl());
+        // 填充客户签名
         BoilerTaskOrderDO one = boilerTaskOrderService.getOne(new LambdaQueryWrapper<BoilerTaskOrderDO>().eq(BoilerTaskOrderDO::getAcceptOrderId, refId));
         if (one != null){
             BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(one.getId(), 100);

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

@@ -153,6 +153,7 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
             ruleVO.setReportType(1);
             JSONObject params = new JSONObject();
             params.put("equipMainType", "boiler");
+            params.put("orderReportDOId", orderReportDO.getId());
             ruleVO.setParams(params);
 
             BoilerConnectTbServiceDO tbServiceDO = boilerConnectTbServiceMapper.selectOne(BoilerConnectTbServiceDO::getTbId, reportTemplateDO.getId());

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

@@ -201,4 +201,14 @@ public interface PipeTaskOrderService extends IService<PipeTaskOrderDO>  {
 
     Boolean updatePayStatus(UpdatePayStatusDTO payInfo);
 
+    /**
+     * 缴费账单分页
+     */
+    cn.start.tz.framework.common.pojo.PageResult<cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo> getPaymentBillPage(BoilerTaskOrderPageReqVO pageReqVO);
+
+    /**
+     * 获得缴费账单详情
+     */
+    cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo getPaymentBillDetail(String id);
+
 }

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

@@ -33,6 +33,7 @@ import cn.start.tz.module.member.api.user.dto.MemberUserRespDTO;
 import cn.start.tz.module.pressure2.api.taskorder.dto.UpdatePayStatusDTO;
 import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.TeamItemVO;
 import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.BoilerDeleteTask;
+import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo;
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorderitemreport.vo.OrderItemReportUpdateVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
@@ -5416,4 +5417,73 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         }
         return true;
     }
+
+    @Override
+    public PageResult<TaskOrderPaymentRespVo> getPaymentBillPage(BoilerTaskOrderPageReqVO pageReqVO) {
+        PageResult<PipeTaskOrderRespVO> pageResult = getPipeTaskOrderPage(pageReqVO);
+        PageResult<TaskOrderPaymentRespVo> result = new PageResult<>();
+        result.setTotal(pageResult.getTotal());
+        List<TaskOrderPaymentRespVo> list = new ArrayList<>();
+        if (CollUtil.isNotEmpty(pageResult.getList())) {
+            for (PipeTaskOrderRespVO vo : pageResult.getList()) {
+                list.add(toPaymentRespVo(vo, null));
+            }
+        }
+        result.setList(list);
+        return result;
+    }
+
+    @Override
+    public TaskOrderPaymentRespVo getPaymentBillDetail(String id) {
+        PipeTaskOrderRespVO taskOrder = getPipeTaskOrder(id);
+        if (taskOrder == null) return null;
+        List<PipeTaskOrderItemDO> items = pipeTaskOrderItemMapper.selectList(
+                PipeTaskOrderItemDO::getOrderId, id);
+        return toPaymentRespVo(taskOrder, items);
+    }
+
+    private TaskOrderPaymentRespVo toPaymentRespVo(PipeTaskOrderRespVO vo, List<PipeTaskOrderItemDO> items) {
+        TaskOrderPaymentRespVo paymentVo = new TaskOrderPaymentRespVo();
+        paymentVo.setOrderId(vo.getId());
+        paymentVo.setOrderNo(vo.getOrderNo());
+        paymentVo.setUnitName(vo.getUnitName());
+        paymentVo.setCheckTypeStr(getCheckDesc(vo.getCheckType()));
+        paymentVo.setCheckType(vo.getCheckType());
+        paymentVo.setCheckDate(vo.getCheckDate());
+        if (StringUtils.isNotBlank(vo.getEquipDistrictName()) || StringUtils.isNotBlank(vo.getEquipStreetName())) {
+            String district = vo.getEquipDistrictName() != null ? vo.getEquipDistrictName() : "";
+            String street = vo.getEquipStreetName() != null ? vo.getEquipStreetName() : "";
+            if (StringUtils.isNotBlank(district) && StringUtils.isNotBlank(street)) {
+                paymentVo.setAddressInfo(district + "-" + street);
+            } else if (StringUtils.isNotBlank(district)) {
+                paymentVo.setAddressInfo(district);
+            } else {
+                paymentVo.setAddressInfo(street);
+            }
+        }
+        paymentVo.setEquipDistrict(vo.getEquipDistrict());
+        paymentVo.setEquipStreet(vo.getEquipStreet());
+        paymentVo.setEquipNum(vo.getEquipNum());
+        paymentVo.setPaymentStatus(vo.getPaymentStatus());
+        if (CollUtil.isNotEmpty(items)) {
+            List<TaskOrderPaymentRespVo.orderItemInfo> infoList = items.stream().map(item -> {
+                TaskOrderPaymentRespVo.orderItemInfo info = new TaskOrderPaymentRespVo.orderItemInfo();
+                info.setEquipCode(item.getEquipCode());
+                info.setFee(item.getFee());
+                return info;
+            }).collect(Collectors.toList());
+            paymentVo.setOrderItemInfoList(infoList);
+        }
+        return paymentVo;
+    }
+
+    private String getCheckDesc(Integer checkType) {
+        if (checkType == null) return null;
+        switch (checkType) {
+            case 100: return "定期检验";
+            case 200: return "年度检查";
+            default: return String.valueOf(checkType);
+        }
+    }
+
 }

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

@@ -1940,6 +1940,14 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
         for (PipeTaskOrderRespVO taskOrderRespVO : taskOrderRespVOPageResult.getList()) {
             List<PipeTaskOrderIssueReportVO> itemReports = reportGroupByItemId.get(taskOrderRespVO.getId());
 
+            // 设置区域和街道名称
+            if (taskOrderRespVO.getEquipDistrict() != null) {
+                taskOrderRespVO.setEquipDistrictName(AreaUtils.getAreaName(taskOrderRespVO.getEquipDistrict()));
+            }
+            if (taskOrderRespVO.getEquipStreet() != null) {
+                taskOrderRespVO.setEquipStreetName(AreaUtils.getAreaName(taskOrderRespVO.getEquipStreet()));
+            }
+
             // 设置报告类型(如果有报告发放记录)
             if (CollUtil.isNotEmpty(itemReports)) {
                 // 设置报告类型

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

@@ -4,8 +4,10 @@ import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskordersignfile.vo.BoilerTaskOrderSignFilePageReqVO;
 import cn.start.tz.module.pressure2.controller.app.taskorder.vo.ServeOrderSignRespVo;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.OrderFromPdfReqVO;
+import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderAppPushReqVO;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderPushReqVO;
 import jakarta.validation.Valid;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.ByteArrayOutputStream;
 
@@ -25,5 +27,7 @@ public interface TaskSignService {
      */
     ByteArrayOutputStream printFromPdf(OrderFromPdfReqVO reqVO) throws Exception;
 
-    String printFromPdfDownload(OrderFromPdfReqVO reqVO);
+
+    @Transactional
+    void orderAppSignSubmit(TaskOrderAppPushReqVO reqVO) throws Exception;
 }

+ 87 - 107
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/tasksign/TaskSignServiceImpl.java

@@ -1,26 +1,19 @@
 package cn.start.tz.module.pressure2.service.tasksign;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.start.tz.framework.common.exception.ErrorCode;
 import cn.start.tz.framework.common.exception.ServiceException;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.start.tz.module.infra.api.file.FileApi;
 import cn.start.tz.module.infra.api.sign.SignApi;
-import cn.start.tz.module.infra.api.sign.dto.CntSignReqDTO;
-import cn.start.tz.module.infra.api.sign.dto.CntSignResponseRepsDTO;
-import cn.start.tz.module.infra.api.sign.dto.QrCodeValuesDTO;
-import cn.start.tz.module.infra.api.sign.dto.SignValuesDTO;
 import cn.start.tz.module.pressure2.constant.TemplateIdConstants;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderSyncReportVO;
-import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.MajorIssuesSubmitVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskordersignfile.vo.BoilerTaskOrderSignFilePageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskordersignfile.vo.BoilerTaskOrderSignFileRespVO;
 import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
-import cn.start.tz.module.pressure2.controller.admin.pipetaskorderinput.vo.PipeTaskOrderInputPrintReqVO;
 import cn.start.tz.module.pressure2.controller.app.taskorder.vo.ServeOrderSignRespVo;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.OrderFromPdfReqVO;
+import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderAppPushReqVO;
 import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderPushReqVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilerconnecttbservice.BoilerConnectTbServiceDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
@@ -42,21 +35,16 @@ import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemreport.PipeTaskOrderItemReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskordersecuritycheck.PipeTaskOrderSecurityCheckMapper;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
-import cn.start.tz.module.pressure2.service.boilertaskordersecuritycheck.BoilerTaskOrderSecurityCheckService;
 import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
 import cn.start.tz.module.pressure2.service.dynamictbins.DynamicTbInsService;
-import cn.start.tz.module.pressure2.service.notificationformreport.NotificationformReportService;
 import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
+import cn.start.tz.framework.ip.core.utils.AreaUtils;
 import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
 import cn.start.tz.module.pressure2.service.pdf.PdfService;
 import cn.start.tz.module.pressure2.service.pipetaskorderinput.PipeTaskOrderInputService;
 import cn.start.tz.module.system.api.user.AdminUserApi;
-import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
 import cn.start.tz.module.system.enums.common.IsYesOrNoEnum;
 import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.google.common.collect.Lists;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
@@ -68,6 +56,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
@@ -79,8 +68,6 @@ import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.rendering.PDFRenderer;
 
 import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.start.tz.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-import static cn.start.tz.module.pressure.enums.ErrorCodeConstants.TASK_ORDER_NOT_EXISTS;
 import static java.time.LocalDate.now;
 
 @Service
@@ -347,6 +334,18 @@ public class TaskSignServiceImpl implements TaskSignService {
                 resp.setEquipDistrict(vo.getEquipDistrict());
                 resp.setEquipStreet(vo.getEquipStreet());
                 resp.setCheckType(StringUtils.isNotBlank(vo.getCheckType()) ? Integer.valueOf(vo.getCheckType()) : null);
+                if (StringUtils.isNotBlank(vo.getCheckDate())) {
+                    resp.setCheckDate(LocalDate.parse(vo.getCheckDate()));
+                }
+                String districtName = AreaUtils.getAreaName(vo.getEquipDistrict());
+                String streetName = AreaUtils.getAreaName(vo.getEquipStreet());
+                if (StringUtils.isNotBlank(districtName) && StringUtils.isNotBlank(streetName)) {
+                    resp.setAddressInfo(districtName + "-" + streetName);
+                } else if (StringUtils.isNotBlank(districtName)) {
+                    resp.setAddressInfo(districtName);
+                } else if (StringUtils.isNotBlank(streetName)) {
+                    resp.setAddressInfo(streetName);
+                }
                 resp.setSignUrl(vo.getSignUrl());
                 resp.setSignFilePdf(vo.getSignFilePdf());
                 resp.setIsSignature(vo.getIsSignature());
@@ -501,97 +500,78 @@ public class TaskSignServiceImpl implements TaskSignService {
         }
     }
 
-    /**
-     * 服务单文件下载(小程序)
-     *
-     * @param reqVO 参数
-     * @return 结果
-     */
+    @Transactional
     @Override
-    public String printFromPdfDownload(OrderFromPdfReqVO reqVO) {
-        String filePath = null;
-//        try {
-//            BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(reqVO.getOrderId());
-//            if (ObjectUtil.isEmpty(taskOrderDO)) {
-//                throw exception(TASK_ORDER_NOT_EXISTS);
-//            }
-//
-////            TaskOrderFileVersionDO taskOrderFileVersionDO = orderFileVersionService.selectLastOneByOrderIdAndBusinessType(reqVO.getOrderId(), reqVO.getBusinessType(), reqVO.getOrderItemId(), reqVO.getSecurityCheckId());
-////            if (ObjectUtil.isEmpty(taskOrderFileVersionDO)) {
-////                throw exception(new ErrorCode(1000, "任务单相关文件版本不存在"));
-////            }
-//
-////            String notifierSignImageData = null;
-////            //业务类型=400并且告知人-签名人用户id不为空
-////            if (Integer.valueOf(400).equals(taskOrderFileVersionDO.getBusinessType()) && StringUtils.isNotEmpty(taskOrderFileVersionDO.getNotifierUserId())) {
-////                AdminUserRespDTO checkedData = adminUserApi.getUser(taskOrderFileVersionDO.getNotifierUserId()).getCheckedData();
-////                if (ObjectUtil.isNotEmpty(checkedData) && StringUtils.isNotEmpty(checkedData.getSignUrl())) {
-////                    notifierSignImageData = checkedData.getSignUrl();
-////                }
-////            }
-//
-//            //获取任务单签名文件信息
-//            BoilerTaskOrderSignFileDO taskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), reqVO.getBusinessType(), reqVO.getOrderItemId(), reqVO.getSecurityCheckId());
-//            if (ObjectUtil.isNotEmpty(taskOrderSignFileDO) && StringUtils.isNotEmpty(taskOrderSignFileDO.getSignUrl())) {
-//                ByteArrayOutputStream byteArrayOutputStream = null;
-//                byte[] imageData = fileApi.getFileByPath(taskOrderSignFileDO.getSignUrl()).getData();
-//                PipeTaskOrderInputPrintReqVO printReqVO = new PipeTaskOrderInputPrintReqVO();
-//                if (Integer.valueOf(100).equals(taskOrderSignFileDO.getBusinessType())) {
-//                    List<OrderReportDO> orderReportDOS = orderReportMapper.selectList(OrderReportDO::getTaskOrderId, taskOrderDO.getId());
-//                    OrderReportDO orderReportDO = orderReportDOS.get(0);
-//                    printReqVO.setId(orderReportDO.getId());
-//                    printReqVO.setTemplateId(orderReportDO.getTemplateId());
-//                } else if (Integer.valueOf(200).equals(taskOrderSignFileDO.getBusinessType())) {
-//
-//                } else if (Integer.valueOf(300).equals(taskOrderSignFileDO.getBusinessType()) || Integer.valueOf(400).equals(taskOrderSignFileDO.getBusinessType())) {
-//                }
-//                byteArrayOutputStream = pipeTaskOrderInputService.printPipeTaskOrderInput(printReqVO);
-//
-//                if (Objects.equals(env, "uat") && Integer.valueOf(100).equals(taskOrderSignFileDO.getBusinessType())) {
-//                    if (Integer.valueOf(100).equals(reqVO.getBusinessType())) {
-//                        List<SignValuesDTO> valuesDTOList = Lists.newArrayList();
-//                        SignValuesDTO valuesDTO1 = new SignValuesDTO();
-//                        valuesDTO1.setTextonce(0);
-//                        if (Integer.valueOf(200).equals(taskOrderDO.getCheckType())) {
-//                            valuesDTO1.setSealType("6");
-//                            valuesDTO1.setText("机构公章或");
-//                        } else {
-//                            valuesDTO1.setSealType("6");
-//                            valuesDTO1.setText("机构公章或");
-//                        }
-//                        valuesDTOList.add(valuesDTO1);
-//                        byte[] byteUrl = this.sign(byteArrayOutputStream.toByteArray(), valuesDTOList, null);
-//                        //上传至资源服务器并获取url
-//                        filePath = fileApi.createFile(byteUrl);
-//                        LambdaUpdateWrapper<BoilerTaskOrderSignFileDO> updateWrapper = new LambdaUpdateWrapper<>();
-//                        updateWrapper.eq(BoilerTaskOrderSignFileDO::getId, taskOrderSignFileDO.getId());
-//                        updateWrapper.set(BoilerTaskOrderSignFileDO::getSignFilePdf, filePath);
-//                        boilerTaskOrderSignFileService.update(updateWrapper);
-//                    }
-//                } else {
-//                    filePath = fileApi.createFile(byteArrayOutputStream.toByteArray());
-//                    LambdaUpdateWrapper<BoilerTaskOrderSignFileDO> updateWrapper = new LambdaUpdateWrapper<>();
-//                    updateWrapper.eq(BoilerTaskOrderSignFileDO::getId, taskOrderSignFileDO.getId());
-//                    updateWrapper.set(BoilerTaskOrderSignFileDO::getSignFilePdf, filePath);
-//                    boilerTaskOrderSignFileService.update(updateWrapper);
-//                }
-//            } else {
-//                throw exception(new ErrorCode(1000, "不存在签名信息pdf下载失败"));
-//            }
-//        } catch (Exception e) {
-//            throw new RuntimeException(e);
-//        }
-        return filePath;
-    }
+    public void orderAppSignSubmit(TaskOrderAppPushReqVO reqVO) throws Exception {
+        // 根据id查询任务单
+        BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(reqVO.getId());
+        // 如果任务单不存在,抛出异常
+        if (taskOrderDO == null) {
+            throw new ServiceException(404, "任务单不存在");
+        }
 
-//    private byte[] sign(byte[] bytes, List<SignValuesDTO> valuesDTOList, QrCodeValuesDTO qrCodeValuesDTO) throws Exception {
-//        CntSignReqDTO signReqDTO = new CntSignReqDTO();
-//        signReqDTO.setBytes(bytes);
-//        signReqDTO.setValuesDTOList(valuesDTOList);
-//        signReqDTO.setQrCodeValuesDTO(qrCodeValuesDTO);
-//        CntSignResponseRepsDTO signRepsDTO = signApi.sign(signReqDTO).getCheckedData();
-//        String signUrl = signRepsDTO.getRecord_saved_urls().get(0);
-//        log.info("signUrl:" + signUrl);
-//        return signApi.getSignFile(signUrl).getCheckedData();
-//    }
+        if (reqVO.getBusinessType().equals(100)) {
+            OrderReportDO byId = orderReportService.getById(reqVO.getOrderReportId());
+            byId.setSignDate(now());
+            byId.setSignUrl(reqVO.getSignUrl());
+            if (taskOrderDO.getEquipMainType().equals(200)) {
+                orderReportService.generateBoilerOrderReport(taskOrderDO.getAcceptOrderId());
+            } else {
+                orderReportService.generatePipeOrderReport(taskOrderDO.getAcceptOrderId());
+            }
+        } else if (reqVO.getBusinessType().equals(200)) {
+            List<NotificationformReportDO> formReportDOS = notificationformReportMapper
+                    .selectList(NotificationformReportDO::getTaskOrderId, taskOrderDO.getId());
+            NotificationformReportDO notificationformReportDO = formReportDOS.get(0);
+            if (notificationformReportDO != null){
+                notificationformReportDO.setSignUrl(reqVO.getSignUrl());
+                notificationformReportDO.setSignDate(now());
+            }
+            if (taskOrderDO.getEquipMainType().equals(200)) {
+                formReportDOS.forEach(formReportDO -> {
+                    JSONObject params = new JSONObject();
+                    params.put("equipMainType", "boiler");
+                    DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(formReportDO.getTemplateId());
+                    CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
+                    ruleVO.setTemplateId(formReportDO.getTemplateId());
+                    ruleVO.setRefId(formReportDO.getId());
+                    ruleVO.setRefName(dynamicTbDO.getTbName());
+                    ruleVO.setReportType(1);
+                    ruleVO.setParams(params);
+                    //获取tbCode的服务方法名
+                    BoilerConnectTbServiceDO tbServiceDO = boilerConnectTbServiceMapper.selectOne(BoilerConnectTbServiceDO::getTbId, dynamicTbDO.getId());
+                    if (tbServiceDO != null) {
+                        ruleVO.setServiceName(tbServiceDO.getInitServiceName());
+                        dynamicTbInsService.createInstantiateWithRule(ruleVO);
+                    } else {
+                        //throw new ServiceException(500, "生成报表数据失败,初始化服务方法未配置");
+                        ruleVO.setServiceName("");
+                        dynamicTbInsService.createInstantiateWithRule(ruleVO);
+                    }
+                });
+            } else if (taskOrderDO.getEquipMainType().equals(300)) {
+                formReportDOS.forEach(formReportDO -> {
+                    JSONObject params = new JSONObject();
+                    params.put("equipMainType", "pipe");
+                    DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(formReportDO.getTemplateId());
+                    CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
+                    ruleVO.setTemplateId(formReportDO.getTemplateId());
+                    ruleVO.setRefId(formReportDO.getId());
+                    ruleVO.setRefName(dynamicTbDO.getTbName());
+                    ruleVO.setReportType(1);
+                    ruleVO.setParams(params);
+                    //获取tbCode的服务方法名
+                    BoilerConnectTbServiceDO tbServiceDO = boilerConnectTbServiceMapper.selectOne(BoilerConnectTbServiceDO::getTbId, dynamicTbDO.getId());
+                    if (tbServiceDO != null) {
+                        ruleVO.setServiceName(tbServiceDO.getInitServiceName());
+                        dynamicTbInsService.createInstantiateWithRule(ruleVO);
+                    } else {
+                        //throw new ServiceException(500, "生成报表数据失败,初始化服务方法未配置");
+                        ruleVO.setServiceName("");
+                        dynamicTbInsService.createInstantiateWithRule(ruleVO);
+                    }
+                });
+            }
+        }
+    }
 }