Przeglądaj źródła

检验项目签名

xzc 2 tygodni temu
rodzic
commit
f1709117a9
22 zmienionych plików z 467 dodań i 5 usunięć
  1. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportPageReqVO.java
  2. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportRespVO.java
  3. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilerconnectrecordreport/vo/BoilerConnectRecordReportSaveReqVO.java
  4. 7 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/BoilerTaskOrderItemReportController.java
  5. 21 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/vo/BoilerTaskOrderItemReportPushReqVO.java
  6. 18 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/vo/BoilerTaskOrderItemReportSignRespVO.java
  7. 7 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/PipeTaskOrderItemReportController.java
  8. 21 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/vo/PipeTaskOrderItemReportPushReqVO.java
  9. 18 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/vo/PipeTaskOrderItemReportSignRespVO.java
  10. 15 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/BoilerAppReportTemplateController.java
  11. 14 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/BoilerAppTaskOrderItemReportController.java
  12. 15 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/PipeAppReportTemplateController.java
  13. 14 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorderitemreport/PipeAppTaskOrderItemReportController.java
  14. 5 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/boilerconnectrecordreport/BoilerConnectRecordReportDO.java
  15. 16 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerAppTaskOrderItemReportService.java
  16. 104 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerAppTaskOrderItemReportServiceImpl.java
  17. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportService.java
  18. 20 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java
  19. 16 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeAppTaskOrderItemReportService.java
  20. 106 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeAppTaskOrderItemReportServiceImpl.java
  21. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportService.java
  22. 20 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java

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

@@ -73,4 +73,10 @@ public class BoilerConnectRecordReportPageReqVO extends PageParam {
 
     @Schema(description = "项目类型:MAIN-主项目, SUB-子项目, STANDALONE-独走项目")
     private String projectType;
+
+    /**
+     * 是否需要签名
+     */
+    @Schema(description = "是否需要签名")
+    private String isSign;
 }

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

@@ -88,4 +88,10 @@ public class BoilerConnectRecordReportRespVO {
     @Schema(description = "核准代号")
     @ExcelProperty("核准代号")
     private String approvalCode;
+
+    /**
+     * 是否需要签名
+     */
+    @Schema(description = "是否需要签名")
+    private String  isSign;
 }

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

@@ -61,4 +61,10 @@ public class BoilerConnectRecordReportSaveReqVO {
     private String operationInstruction;
     @Schema(description = "核准代号")
     private String approvalCode;
+
+    /**
+     * 是否需要签名
+     */
+    @Schema(description = "是否需要签名")
+    private String  isSign;
 }

+ 7 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorderitemreport/BoilerTaskOrderItemReportController.java

@@ -126,6 +126,13 @@ public class BoilerTaskOrderItemReportController {
         return success(true);
     }
 
+    @PostMapping("/miniProgramPush")
+    @Operation(summary = "小程序推送")
+    public CommonResult<Boolean> miniProgramPush(@Valid @RequestBody BoilerTaskOrderItemReportPushReqVO pushReqVO) {
+        boilerTaskOrderItemReportService.miniProgramPush(pushReqVO);
+        return success(true);
+    }
+
     @GetMapping("/updateReportBySummaryId")
     @Operation(summary = "根据OA流程ID更新单个报告状态")
     public CommonResult<Boolean> updateReportBySummaryId(@RequestParam("summaryId") String summaryId) {

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

@@ -0,0 +1,21 @@
+package cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 锅炉报告小程序推送 Request VO")
+@Data
+public class BoilerTaskOrderItemReportPushReqVO {
+
+    @Schema(description = "报告ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "报告ID不能为空")
+    private String id;
+
+    @Schema(description = "接收人名称")
+    private String recipient;
+
+    @Schema(description = "接收人电话")
+    private String recipientPhone;
+
+}

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

@@ -16,6 +16,24 @@ public class BoilerTaskOrderItemReportSignRespVO {
     @Schema(description = "任务单设备id")
     private String orderItemId;
 
+    @Schema(description = "任务单号")
+    private String orderNo;
+
+    @Schema(description = "使用单位名称")
+    private String useUnitName;
+
+    @Schema(description = "设备名称")
+    private String equipName;
+
+    @Schema(description = "设备代码/注册代码")
+    private String equipCode;
+
+    @Schema(description = "产品编号")
+    private String productNo;
+
+    @Schema(description = "报告模板ID")
+    private String templateId;
+
     @Schema(description = "报告编号")
     private String reportNo;
 

+ 7 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/PipeTaskOrderItemReportController.java

@@ -120,6 +120,13 @@ public class PipeTaskOrderItemReportController {
         return success(true);
     }
 
+    @PostMapping("/miniProgramPush")
+    @Operation(summary = "小程序推送")
+    public CommonResult<Boolean> miniProgramPush(@Valid @RequestBody PipeTaskOrderItemReportPushReqVO pushReqVO) {
+        pipeTaskOrderItemReportService.miniProgramPush(pushReqVO);
+        return success(true);
+    }
+
     @GetMapping("/updateReportBySummaryId")
     @Operation(summary = "根据OA流程ID更新单个报告状态")
     public CommonResult<Boolean> updateReportBySummaryId(@RequestParam("summaryId") String summaryId) {

+ 21 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/vo/PipeTaskOrderItemReportPushReqVO.java

@@ -0,0 +1,21 @@
+package cn.start.tz.module.pressure2.controller.admin.pipetaskorderitemreport.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 管道报告小程序推送 Request VO")
+@Data
+public class PipeTaskOrderItemReportPushReqVO {
+
+    @Schema(description = "报告ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "报告ID不能为空")
+    private String id;
+
+    @Schema(description = "接收人名称")
+    private String recipient;
+
+    @Schema(description = "接收人电话")
+    private String recipientPhone;
+
+}

+ 18 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorderitemreport/vo/PipeTaskOrderItemReportSignRespVO.java

@@ -16,6 +16,24 @@ public class PipeTaskOrderItemReportSignRespVO {
     @Schema(description = "任务单设备id")
     private String orderItemId;
 
+    @Schema(description = "任务单号")
+    private String orderNo;
+
+    @Schema(description = "使用单位名称")
+    private String useUnitName;
+
+    @Schema(description = "设备名称")
+    private String equipName;
+
+    @Schema(description = "设备代码/注册代码")
+    private String equipCode;
+
+    @Schema(description = "产品编号")
+    private String productNo;
+
+    @Schema(description = "报告模板ID")
+    private String templateId;
+
     @Schema(description = "报告编号")
     private String reportNo;
 

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

@@ -29,6 +29,8 @@ import java.io.ByteArrayOutputStream;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 
+import org.apache.commons.lang3.StringUtils;
+
 @Tag(name = "小程序 - 锅炉报告模版")
 @RestController
 @RequestMapping("/pressure2/app/report-template/boiler")
@@ -54,8 +56,16 @@ public class BoilerAppReportTemplateController {
                               HttpServletResponse response) throws Exception {
 //        ByteArrayOutputStream bos = reportTemplateService.reportTemplateMockPreview(reportPreviewVO);
         PipeTaskOrderInputPrintReqVO reqVO = new PipeTaskOrderInputPrintReqVO();
-        reqVO.setTemplateId(reportPreviewVO.getTemplateId());
         reqVO.setId(reportPreviewVO.getId());
+        // 如果前端没传 templateId,从报告表获取
+        if (StringUtils.isBlank(reportPreviewVO.getTemplateId()) && StringUtils.isNotBlank(reportPreviewVO.getId())) {
+            BoilerTaskOrderItemReportDO reportDO = boilerTaskOrderItemReportService.getById(reportPreviewVO.getId());
+            if (reportDO != null) {
+                reqVO.setTemplateId(reportDO.getTemplateId());
+            }
+        } else {
+            reqVO.setTemplateId(reportPreviewVO.getTemplateId());
+        }
         byte[] bytes = pipeTaskOrderInputService.printPipeTaskOrderInput(reqVO);
         if (Integer.valueOf(100).equals(reportPreviewVO.getFileType())) {
             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
@@ -111,7 +121,10 @@ public class BoilerAppReportTemplateController {
     @PostMapping("/image")
     @Operation(summary = "通用文件获取(图片/视频/PDF等)")
     @PermitAll
-    public void printFromPdf(HttpServletResponse response, @RequestParam("imageUrl") String imageUrl) throws Exception {
+    public void printFromPdf(HttpServletResponse response, @RequestParam(value = "imageUrl", required = false) String imageUrl) throws Exception {
+        if (StringUtils.isBlank(imageUrl)) {
+            return;
+        }
         CommonResult<byte[]> file = fileApi.getFileByPath(imageUrl);
         byte[] data = file.getData();
 

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

@@ -76,6 +76,20 @@ public class BoilerAppTaskOrderItemReportController {
         return success(boilerAppTaskOrderItemReportService.appOrderItemSignPage(pageReqVO));
     }
 
+    @GetMapping("/appUnsignedPage")
+    @Operation(summary = "获取当前人未签名数据")
+    @PermitAll
+    public CommonResult<PageResult<BoilerTaskOrderItemReportSignRespVO>> appUnsignedPage(@Valid BoilerTaskOrderItemReportPageReqVO pageReqVO) {
+        return success(boilerAppTaskOrderItemReportService.appUnsignedPage(pageReqVO));
+    }
+
+    @GetMapping("/appSignedPage")
+    @Operation(summary = "获取当前人已签名数据")
+    @PermitAll
+    public CommonResult<PageResult<BoilerTaskOrderItemReportSignRespVO>> appSignedPage(@Valid BoilerTaskOrderItemReportPageReqVO pageReqVO) {
+        return success(boilerAppTaskOrderItemReportService.appSignedPage(pageReqVO));
+    }
+
     @PutMapping("/appOrderItemSign")
     @Operation(summary = "任务单检验项目签名")
     @PermitAll

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

@@ -26,6 +26,8 @@ import java.io.ByteArrayOutputStream;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 
+import org.apache.commons.lang3.StringUtils;
+
 @Tag(name = "小程序 - 管道报告模版")
 @RestController
 @RequestMapping("/pressure2/app/report-template/pipe")
@@ -51,8 +53,16 @@ public class PipeAppReportTemplateController {
                               HttpServletResponse response) throws Exception {
 //        ByteArrayOutputStream bos = reportTemplateService.reportTemplateMockPreview(reportPreviewVO);
         PipeTaskOrderInputPrintReqVO reqVO = new PipeTaskOrderInputPrintReqVO();
-        reqVO.setTemplateId(reportPreviewVO.getTemplateId());
         reqVO.setId(reportPreviewVO.getId());
+        // 如果前端没传 templateId,从报告表获取
+        if (StringUtils.isBlank(reportPreviewVO.getTemplateId()) && StringUtils.isNotBlank(reportPreviewVO.getId())) {
+            PipeTaskOrderItemReportDO reportDO = pipeTaskOrderItemReportService.getById(reportPreviewVO.getId());
+            if (reportDO != null) {
+                reqVO.setTemplateId(reportDO.getTemplateId());
+            }
+        } else {
+            reqVO.setTemplateId(reportPreviewVO.getTemplateId());
+        }
         byte[] bytes = pipeTaskOrderInputService.printPipeTaskOrderInput(reqVO);
         if (Integer.valueOf(100).equals(reportPreviewVO.getFileType())) {
             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
@@ -108,7 +118,10 @@ public class PipeAppReportTemplateController {
     @PostMapping("/image")
     @Operation(summary = "通用文件获取(图片/视频/PDF等)")
     @PermitAll
-    public void printFromPdf(HttpServletResponse response, @RequestParam("imageUrl") String imageUrl) throws Exception {
+    public void printFromPdf(HttpServletResponse response, @RequestParam(value = "imageUrl", required = false) String imageUrl) throws Exception {
+        if (StringUtils.isBlank(imageUrl)) {
+            return;
+        }
         CommonResult<byte[]> file = fileApi.getFileByPath(imageUrl);
         byte[] data = file.getData();
 

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

@@ -77,6 +77,20 @@ public class PipeAppTaskOrderItemReportController {
         return success(pipeAppTaskOrderItemReportService.appOrderItemSignPage(pageReqVO));
     }
 
+    @GetMapping("/appUnsignedPage")
+    @Operation(summary = "获取当前人未签名数据")
+    @PermitAll
+    public CommonResult<PageResult<PipeTaskOrderItemReportSignRespVO>> appUnsignedPage(@Valid PipeTaskOrderItemReportPageReqVO pageReqVO) {
+        return success(pipeAppTaskOrderItemReportService.appUnsignedPage(pageReqVO));
+    }
+
+    @GetMapping("/appSignedPage")
+    @Operation(summary = "获取当前人已签名数据")
+    @PermitAll
+    public CommonResult<PageResult<PipeTaskOrderItemReportSignRespVO>> appSignedPage(@Valid PipeTaskOrderItemReportPageReqVO pageReqVO) {
+        return success(pipeAppTaskOrderItemReportService.appSignedPage(pageReqVO));
+    }
+
     @PutMapping("/appOrderItemSign")
     @Operation(summary = "管道任务单检验项目签名")
     @PermitAll

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

@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.annotation.*;
 import cn.start.tz.framework.mybatis.core.dataobject.BaseDO;
 
 /**
- * 记录和报告模板关联 DO
+ * 检验项目 DO
  *
  * @author 特种管理员
  */
@@ -85,6 +85,10 @@ public class BoilerConnectRecordReportDO extends BaseDO {
      * 核准代号
      */
     private String approvalCode;
+    /**
+     * 是否需要签名
+     */
+    private String isSign;
 
     public String isMain(){
         return String.valueOf("SUB".equals(this.projectType));

+ 16 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerAppTaskOrderItemReportService.java

@@ -51,6 +51,22 @@ public interface BoilerAppTaskOrderItemReportService {
      */
     PageResult<BoilerTaskOrderItemReportSignRespVO> appOrderItemSignPage(@Valid BoilerTaskOrderItemReportPageReqVO pageReqVO);
 
+    /**
+     * 小程序端-获取当前人未签名数据
+     *
+     * @param pageReqVO 分页请求
+     * @return 签名分页结果
+     */
+    PageResult<BoilerTaskOrderItemReportSignRespVO> appUnsignedPage(@Valid BoilerTaskOrderItemReportPageReqVO pageReqVO);
+
+    /**
+     * 小程序端-获取当前人已签名数据
+     *
+     * @param pageReqVO 分页请求
+     * @return 签名分页结果
+     */
+    PageResult<BoilerTaskOrderItemReportSignRespVO> appSignedPage(@Valid BoilerTaskOrderItemReportPageReqVO pageReqVO);
+
     /**
      * 小程序端-检验项目签名提交
      *

+ 104 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerAppTaskOrderItemReportServiceImpl.java

@@ -15,8 +15,14 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.v
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.BoilerTaskOrderItemReportSignRespVO;
 import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
 import cn.start.tz.module.pressure2.controller.app.taskorderitemreport.vo.InspectionOpinionUploadReqVo;
+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.equipboiler.EquipBoilerDO;
+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.equipboiler.EquipBoilerMapper;
 import cn.start.tz.module.pressure2.framework.appauth.core.context.AppAuthContextHolder;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.dynamictbins.DynamicTbInsService;
@@ -53,9 +59,18 @@ public class BoilerAppTaskOrderItemReportServiceImpl implements BoilerAppTaskOrd
     @Resource
     private BoilerTaskOrderService boilerTaskOrderService;
 
+    @Resource
+    private BoilerTaskOrderMapper boilerTaskOrderMapper;
+
     @Resource
     private BoilerTaskOrderItemReportMapper boilerTaskOrderItemReportMapper;
 
+    @Resource
+    private BoilerTaskOrderItemMapper boilerTaskOrderItemMapper;
+
+    @Resource
+    private EquipBoilerMapper equipBoilerMapper;
+
     @Resource
     private DynamicTbInsService dynamicTbInsService;
 
@@ -175,6 +190,95 @@ public class BoilerAppTaskOrderItemReportServiceImpl implements BoilerAppTaskOrd
         return result;
     }
 
+    @Override
+    public PageResult<BoilerTaskOrderItemReportSignRespVO> appUnsignedPage(BoilerTaskOrderItemReportPageReqVO pageReqVO) {
+        // 获取当前登录用户手机号
+        String mobile = AppAuthContextHolder.getMobile();
+        if (StringUtils.isEmpty(mobile)) {
+            return new PageResult<>();
+        }
+
+        // 查询当前用户未签名的数据(isSign=true 且 signUrl 为空 且 recipientPhone 匹配)
+        PageResult<BoilerTaskOrderItemReportDO> pageResult = boilerTaskOrderItemReportMapper.selectPage(pageReqVO,
+                new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
+                        .eq(BoilerTaskOrderItemReportDO::getIsSign, true)
+                        .and(wrapper -> wrapper
+                                .isNull(BoilerTaskOrderItemReportDO::getSignUrl)
+                                .or()
+                                .eq(BoilerTaskOrderItemReportDO::getSignUrl, ""))
+                        .eq(BoilerTaskOrderItemReportDO::getRecipientPhone, mobile));
+
+        return convertToSignRespVO(pageResult);
+    }
+
+    @Override
+    public PageResult<BoilerTaskOrderItemReportSignRespVO> appSignedPage(BoilerTaskOrderItemReportPageReqVO pageReqVO) {
+        // 获取当前登录用户手机号
+        String mobile = AppAuthContextHolder.getMobile();
+        if (StringUtils.isEmpty(mobile)) {
+            return new PageResult<>();
+        }
+
+        // 查询当前用户已签名的数据(isSign=true 且 signUrl 不为空 且 recipientPhone 匹配)
+        PageResult<BoilerTaskOrderItemReportDO> pageResult = boilerTaskOrderItemReportMapper.selectPage(pageReqVO,
+                new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
+                        .eq(BoilerTaskOrderItemReportDO::getIsSign, true)
+                        .isNotNull(BoilerTaskOrderItemReportDO::getSignUrl)
+                        .ne(BoilerTaskOrderItemReportDO::getSignUrl, "")
+                        .eq(BoilerTaskOrderItemReportDO::getRecipientPhone, mobile));
+
+        return convertToSignRespVO(pageResult);
+    }
+
+    /**
+     * 转换签名响应VO
+     */
+    private PageResult<BoilerTaskOrderItemReportSignRespVO> convertToSignRespVO(PageResult<BoilerTaskOrderItemReportDO> pageResult) {
+        List<BoilerTaskOrderItemReportSignRespVO> voList = new ArrayList<>();
+        if (pageResult.getList() != null) {
+            for (BoilerTaskOrderItemReportDO reportDO : pageResult.getList()) {
+                BoilerTaskOrderItemReportSignRespVO signVO = new BoilerTaskOrderItemReportSignRespVO();
+                BeanUtils.copyProperties(reportDO, signVO);
+                signVO.setSignDate(reportDO.getSignDate());
+                signVO.setSignUrl(reportDO.getSignUrl());
+                // 设置 isSign 字段(Boolean 转 String)
+                signVO.setIsSign(reportDO.getIsSign() != null && reportDO.getIsSign() ? "1" : "0");
+                // 设置 templateId
+                signVO.setTemplateId(reportDO.getTemplateId());
+
+                // 从设备表获取关联数据
+                if (StringUtils.isNotEmpty(reportDO.getOrderItemId())) {
+                    BoilerTaskOrderItemDO orderItem = boilerTaskOrderItemMapper.selectById(reportDO.getOrderItemId());
+                    if (orderItem != null) {
+                        // 获取任务单信息
+                        if (StringUtils.isNotEmpty(orderItem.getOrderId())) {
+                            BoilerTaskOrderDO taskOrder = boilerTaskOrderMapper.selectById(orderItem.getOrderId());
+                            if (taskOrder != null) {
+                                signVO.setOrderNo(taskOrder.getOrderNo());
+                                signVO.setUseUnitName(taskOrder.getUseUnitName());
+                            }
+                        }
+                        // 获取设备信息
+                        if (StringUtils.isNotEmpty(orderItem.getEquipId())) {
+                            EquipBoilerDO equip = equipBoilerMapper.selectById(orderItem.getEquipId());
+                            if (equip != null) {
+                                signVO.setEquipName(equip.getEquipName());
+                                signVO.setEquipCode(equip.getEquipCode());
+                            }
+                        }
+                    }
+                }
+
+                voList.add(signVO);
+            }
+        }
+
+        PageResult<BoilerTaskOrderItemReportSignRespVO> result = new PageResult<>();
+        result.setTotal(pageResult.getTotal());
+        result.setList(voList);
+        return result;
+    }
+
     @Override
     public void appOrderItemSign(BoilerTaskOrderItemReportSignReqVO reqVO) {
         BoilerTaskOrderItemReportDO reportDO = boilerTaskOrderItemReportMapper.selectById(reqVO.getReportId());

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportService.java

@@ -111,4 +111,10 @@ public interface BoilerTaskOrderItemReportService extends IService<BoilerTaskOrd
     void handleCompletion(String id);
 
     void updateBoilerReportConclusion(BoilerTaskOrderItemReportConclusionReq updateReqVO);
+
+    /**
+     * 小程序推送 - 更新报告接收人信息
+     * @param pushReqVO 推送参数
+     */
+    void miniProgramPush(BoilerTaskOrderItemReportPushReqVO pushReqVO);
 }

+ 20 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java

@@ -990,4 +990,24 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         }
 
     }
+
+    @Override
+    public void miniProgramPush(BoilerTaskOrderItemReportPushReqVO pushReqVO) {
+        // 获取报告信息
+        BoilerTaskOrderItemReportDO reportDO = boilerTaskOrderItemReportMapper.selectById(pushReqVO.getId());
+        if (reportDO == null) {
+            throw new RuntimeException("报告不存在");
+        }
+
+        // 更新接收人信息
+        LambdaUpdateWrapper<BoilerTaskOrderItemReportDO> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(BoilerTaskOrderItemReportDO::getId, pushReqVO.getId());
+        updateWrapper.set(BoilerTaskOrderItemReportDO::getIsSign, true);
+        updateWrapper.set(BoilerTaskOrderItemReportDO::getRecipient, pushReqVO.getRecipient());
+        updateWrapper.set(BoilerTaskOrderItemReportDO::getRecipientPhone, pushReqVO.getRecipientPhone());
+        // 签名url和日期为空,等待小程序端签名后更新
+        updateWrapper.set(BoilerTaskOrderItemReportDO::getSignUrl, null);
+        updateWrapper.set(BoilerTaskOrderItemReportDO::getSignDate, null);
+        boilerTaskOrderItemReportMapper.update(updateWrapper);
+    }
 }

+ 16 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeAppTaskOrderItemReportService.java

@@ -51,6 +51,22 @@ public interface PipeAppTaskOrderItemReportService {
      */
     PageResult<PipeTaskOrderItemReportSignRespVO> appOrderItemSignPage(@Valid PipeTaskOrderItemReportPageReqVO pageReqVO);
 
+    /**
+     * 小程序端-获取当前人未签名数据
+     *
+     * @param pageReqVO 分页请求
+     * @return 签名分页结果
+     */
+    PageResult<PipeTaskOrderItemReportSignRespVO> appUnsignedPage(@Valid PipeTaskOrderItemReportPageReqVO pageReqVO);
+
+    /**
+     * 小程序端-获取当前人已签名数据
+     *
+     * @param pageReqVO 分页请求
+     * @return 签名分页结果
+     */
+    PageResult<PipeTaskOrderItemReportSignRespVO> appSignedPage(@Valid PipeTaskOrderItemReportPageReqVO pageReqVO);
+
     /**
      * 小程序端-检验项目签名提交
      *

+ 106 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeAppTaskOrderItemReportServiceImpl.java

@@ -15,8 +15,15 @@ import cn.start.tz.module.pressure2.controller.admin.pipetaskorderitemreport.vo.
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorderitemreport.vo.PipeTaskOrderItemReportSignReqVO;
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorderitemreport.vo.PipeTaskOrderItemReportSignRespVO;
 import cn.start.tz.module.pressure2.controller.app.taskorderitemreport.vo.InspectionOpinionUploadReqVo;
+import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitem.PipeTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
+import cn.start.tz.module.pressure2.dal.mysql.equippipe.EquipPipeMapper;
+import cn.start.tz.module.pressure2.dal.mysql.pipetaskorder.PipeTaskOrderMapper;
+import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemreport.PipeTaskOrderItemReportMapper;
+import cn.start.tz.module.pressure2.framework.appauth.core.context.AppAuthContextHolder;
 import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
 import jakarta.annotation.Resource;
 import jodd.util.StringUtil;
@@ -50,9 +57,18 @@ public class PipeAppTaskOrderItemReportServiceImpl implements PipeAppTaskOrderIt
     @Resource
     private PipeTaskOrderService pipeTaskOrderService;
 
+    @Resource
+    private PipeTaskOrderMapper pipeTaskOrderMapper;
+
     @Resource
     private PipeTaskOrderItemReportMapper pipeTaskOrderItemReportMapper;
 
+    @Resource
+    private PipeTaskOrderItemMapper pipeTaskOrderItemMapper;
+
+    @Resource
+    private EquipPipeMapper equipPipeMapper;
+
     @Resource
     private RedissonClient redissonClient;
 
@@ -169,6 +185,96 @@ public class PipeAppTaskOrderItemReportServiceImpl implements PipeAppTaskOrderIt
         return result;
     }
 
+    @Override
+    public PageResult<PipeTaskOrderItemReportSignRespVO> appUnsignedPage(PipeTaskOrderItemReportPageReqVO pageReqVO) {
+        // 获取当前登录用户手机号
+        String mobile = AppAuthContextHolder.getMobile();
+        if (StringUtils.isEmpty(mobile)) {
+            return new PageResult<>();
+        }
+
+        // 查询当前用户未签名的数据(isSign=true 且 signUrl 为空 且 recipientPhone 匹配)
+        PageResult<PipeTaskOrderItemReportDO> pageResult = pipeTaskOrderItemReportMapper.selectPage(pageReqVO,
+                new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>()
+                        .eq(PipeTaskOrderItemReportDO::getIsSign, true)
+                        .and(wrapper -> wrapper
+                                .isNull(PipeTaskOrderItemReportDO::getSignUrl)
+                                .or()
+                                .eq(PipeTaskOrderItemReportDO::getSignUrl, ""))
+                        .eq(PipeTaskOrderItemReportDO::getRecipientPhone, mobile));
+
+        return convertToSignRespVO(pageResult);
+    }
+
+    @Override
+    public PageResult<PipeTaskOrderItemReportSignRespVO> appSignedPage(PipeTaskOrderItemReportPageReqVO pageReqVO) {
+        // 获取当前登录用户手机号
+        String mobile = AppAuthContextHolder.getMobile();
+        if (StringUtils.isEmpty(mobile)) {
+            return new PageResult<>();
+        }
+
+        // 查询当前用户已签名的数据(isSign=true 且 signUrl 不为空 且 recipientPhone 匹配)
+        PageResult<PipeTaskOrderItemReportDO> pageResult = pipeTaskOrderItemReportMapper.selectPage(pageReqVO,
+                new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>()
+                        .eq(PipeTaskOrderItemReportDO::getIsSign, true)
+                        .isNotNull(PipeTaskOrderItemReportDO::getSignUrl)
+                        .ne(PipeTaskOrderItemReportDO::getSignUrl, "")
+                        .eq(PipeTaskOrderItemReportDO::getRecipientPhone, mobile));
+
+        return convertToSignRespVO(pageResult);
+    }
+
+    /**
+     * 转换签名响应VO
+     */
+    private PageResult<PipeTaskOrderItemReportSignRespVO> convertToSignRespVO(PageResult<PipeTaskOrderItemReportDO> pageResult) {
+        List<PipeTaskOrderItemReportSignRespVO> voList = new ArrayList<>();
+        if (pageResult.getList() != null) {
+            for (PipeTaskOrderItemReportDO reportDO : pageResult.getList()) {
+                PipeTaskOrderItemReportSignRespVO signVO = new PipeTaskOrderItemReportSignRespVO();
+                BeanUtils.copyProperties(reportDO, signVO);
+                signVO.setSignDate(reportDO.getSignDate());
+                signVO.setSignUrl(reportDO.getSignUrl());
+                // 设置 isSign 字段(Boolean 转 String)
+                signVO.setIsSign(reportDO.getIsSign() != null && reportDO.getIsSign() ? "1" : "0");
+                // 设置 templateId
+                signVO.setTemplateId(reportDO.getTemplateId());
+
+                // 从设备表获取关联数据
+                if (StringUtils.isNotEmpty(reportDO.getOrderItemId())) {
+                    PipeTaskOrderItemDO orderItem = pipeTaskOrderItemMapper.selectById(reportDO.getOrderItemId());
+                    if (orderItem != null) {
+                        // 设置 equipCode(来自 orderItem)
+                        signVO.setEquipCode(orderItem.getEquipCode());
+                        // 获取任务单信息
+                        if (StringUtils.isNotEmpty(orderItem.getOrderId())) {
+                            PipeTaskOrderDO taskOrder = pipeTaskOrderMapper.selectById(orderItem.getOrderId());
+                            if (taskOrder != null) {
+                                signVO.setOrderNo(taskOrder.getOrderNo());
+                                signVO.setUseUnitName(taskOrder.getUseUnitName());
+                            }
+                        }
+                        // 获取设备信息
+                        if (StringUtils.isNotEmpty(orderItem.getEquipId())) {
+                            EquipPipeDO equip = equipPipeMapper.selectById(orderItem.getEquipId());
+                            if (equip != null) {
+                                signVO.setEquipName(equip.getProjectName());
+                            }
+                        }
+                    }
+                }
+
+                voList.add(signVO);
+            }
+        }
+
+        PageResult<PipeTaskOrderItemReportSignRespVO> result = new PageResult<>();
+        result.setTotal(pageResult.getTotal());
+        result.setList(voList);
+        return result;
+    }
+
     @Override
     public void appOrderItemSign(PipeTaskOrderItemReportSignReqVO reqVO) {
         PipeTaskOrderItemReportDO reportDO = pipeTaskOrderItemReportMapper.selectById(reqVO.getReportId());

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportService.java

@@ -109,4 +109,10 @@ public interface PipeTaskOrderItemReportService extends IService<PipeTaskOrderIt
      * 录入检验结论、结果、费用
      * */
     void updatePipeTaskOrderItemReportConclusion(PipeTaskOrderItemReportConclusionReq updateReqVO);
+
+    /**
+     * 小程序推送 - 更新报告接收人信息
+     * @param pushReqVO 推送参数
+     */
+    void miniProgramPush(PipeTaskOrderItemReportPushReqVO pushReqVO);
 }

+ 20 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java

@@ -981,4 +981,24 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         }
 
     }
+
+    @Override
+    public void miniProgramPush(PipeTaskOrderItemReportPushReqVO pushReqVO) {
+        // 获取报告信息
+        PipeTaskOrderItemReportDO reportDO = pipeTaskOrderItemReportMapper.selectById(pushReqVO.getId());
+        if (reportDO == null) {
+            throw new RuntimeException("报告不存在");
+        }
+
+        // 更新接收人信息
+        LambdaUpdateWrapper<PipeTaskOrderItemReportDO> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(PipeTaskOrderItemReportDO::getId, pushReqVO.getId());
+        updateWrapper.set(PipeTaskOrderItemReportDO::getIsSign, true);
+        updateWrapper.set(PipeTaskOrderItemReportDO::getRecipient, pushReqVO.getRecipient());
+        updateWrapper.set(PipeTaskOrderItemReportDO::getRecipientPhone, pushReqVO.getRecipientPhone());
+        // 签名url和日期为空,等待小程序端签名后更新
+        updateWrapper.set(PipeTaskOrderItemReportDO::getSignUrl, null);
+        updateWrapper.set(PipeTaskOrderItemReportDO::getSignDate, null);
+        pipeTaskOrderItemReportMapper.update(updateWrapper);
+    }
 }