Bladeren bron

生成一个受理单、服务单

xzc 1 week geleden
bovenliggende
commit
78b1a8fac6
12 gewijzigde bestanden met toevoegingen van 250 en 54 verwijderingen
  1. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskordersignfile/vo/TaskOrderPushReqVO.java
  2. 7 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/orderreport/OrderReportController.java
  3. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskordersignfile/BoilerTaskOrderSignFileService.java
  4. 29 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskordersignfile/BoilerTaskOrderSignFileServiceImpl.java
  5. 42 10
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0405_202400ReportOFData.java
  6. 24 6
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0405_202402ReportOFData.java
  7. 16 6
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0418_202402ReportOFData.java
  8. 4 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamictbins/DynamicTbInsServiceImpl.java
  9. 5 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamictbval/DynamicTbValServiceImpl.java
  10. 8 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportService.java
  11. 82 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java
  12. 28 28
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/tasksign/TaskSignServiceImpl.java

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

@@ -41,4 +41,7 @@ public class TaskOrderPushReqVO {
 
     @Schema(description = "设备类型")
     private String equipMainType;
+
+    @Schema(description = "报告ID")
+    private String reportId;
 }

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

@@ -124,4 +124,11 @@ public class OrderReportController {
         return success(orderReportService.serviceFromSendEmail(pageReqVO));
     }
 
+    @PostMapping("/refreshSingleOrderReport")
+    @Operation(summary = "刷新单个报告的动态报表实例")
+    public CommonResult<Boolean> refreshSingleOrderReport(@RequestBody Map<String, String> body) {
+        orderReportService.refreshSingleOrderReport(body.get("orderReportId"), body.get("equipMainType"));
+        return success(true);
+    }
+
 }

+ 2 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskordersignfile/BoilerTaskOrderSignFileService.java

@@ -64,6 +64,8 @@ public interface BoilerTaskOrderSignFileService extends IService<BoilerTaskOrder
 
     BoilerTaskOrderSignFileDO selectLastOneByOrderIdAndBusinessType(String orderId, Integer businessType);
 
+    BoilerTaskOrderSignFileDO selectLastOneByOrderIdAndBusinessType(String orderId, Integer businessType, String orderItemId);
+
     List<BoilerTaskOrderSignFileDO> selectByOrderIdAndBusinessType(String orderId, Integer businessType);
 
     PageResult<BoilerTaskOrderSignFileRespVO> getTaskOrderSignFilePage(BoilerTaskOrderSignFilePageReqVO pageReqVO);

+ 29 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskordersignfile/BoilerTaskOrderSignFileServiceImpl.java

@@ -43,6 +43,8 @@ import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.framework.common.util.object.BeanUtils;
 
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskordersignfile.BoilerTaskOrderSignFileMapper;
+import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
+import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
 
 import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.start.tz.framework.common.util.servlet.ServletUtils.getClientIP;
@@ -78,6 +80,9 @@ public class BoilerTaskOrderSignFileServiceImpl extends ServiceImpl<BoilerTaskOr
     @Resource
     private EquipPipeMapper equipPipeMapper;
 
+    @Resource
+    private OrderReportMapper orderReportMapper;
+
     @Override
     public String createBoilerTaskOrderSignFile(BoilerTaskOrderSignFileSaveReqVO createReqVO) {
         // 插入
@@ -143,6 +148,18 @@ public class BoilerTaskOrderSignFileServiceImpl extends ServiceImpl<BoilerTaskOr
         lambdaQueryWrapperX.last("limit 1");
         return boilerTaskOrderSignFileMapper.selectOne(lambdaQueryWrapperX);
 
+    }
+    @Override
+    public BoilerTaskOrderSignFileDO selectLastOneByOrderIdAndBusinessType(String orderId, Integer businessType, String orderItemId) {
+
+        LambdaQueryWrapperX<BoilerTaskOrderSignFileDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<>();
+        lambdaQueryWrapperX.eqIfPresent(BoilerTaskOrderSignFileDO::getOrderId, orderId);
+        lambdaQueryWrapperX.eqIfPresent(BoilerTaskOrderSignFileDO::getOrderItemId, orderItemId);
+        lambdaQueryWrapperX.eqIfPresent(BoilerTaskOrderSignFileDO::getBusinessType, businessType);
+        lambdaQueryWrapperX.orderByDesc(BoilerTaskOrderSignFileDO::getUpdateTime);
+        lambdaQueryWrapperX.last("limit 1");
+        return boilerTaskOrderSignFileMapper.selectOne(lambdaQueryWrapperX);
+
     }
     @Override
     public List<BoilerTaskOrderSignFileDO> selectByOrderIdAndBusinessType(String orderId, Integer businessType) {
@@ -247,8 +264,17 @@ public class BoilerTaskOrderSignFileServiceImpl extends ServiceImpl<BoilerTaskOr
 //            orderFileVersionService.documentHistoricalVersions(enterReqVO, getLoginUserId());
 //        }
 
+        // 当有 reportId 时,查找对应 OrderReportDO,用 reportId 作为 orderItemId 区分不同报告的签名记录
+        String orderItemId = reqVO.getOrderItemId();
+        if (StringUtils.isNotBlank(reqVO.getReportId())) {
+            OrderReportDO orderReportDO = orderReportMapper.selectById(reqVO.getReportId());
+            if (orderReportDO != null) {
+                orderItemId = reqVO.getReportId();
+            }
+        }
+
         BoilerTaskOrderSignFileDO taskOrderSignFileDO =
-                selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), reqVO.getBusinessType(), reqVO.getOrderItemId(), reqVO.getSecurityCheckId());
+                selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), reqVO.getBusinessType(), orderItemId, reqVO.getSecurityCheckId());
         if (ObjectUtil.isNotNull(taskOrderSignFileDO)) {
             taskOrderSignFileDO.setEquipMainType(reqVO.getEquipMainType());
             taskOrderSignFileDO.setReceiver(reqVO.getReceiver());
@@ -256,6 +282,7 @@ public class BoilerTaskOrderSignFileServiceImpl extends ServiceImpl<BoilerTaskOr
             taskOrderSignFileDO.setIsSignature(IsYesOrNoEnum.UNKNOWN.getKey());
             taskOrderSignFileDO.setIsPush(IsYesOrNoEnum.YES.getKey());
             taskOrderSignFileDO.setPushDateTime(LocalDateTime.now());
+            taskOrderSignFileDO.setOrderItemId(orderItemId);
             updateById(taskOrderSignFileDO);
         } else {
             taskOrderSignFileDO = new BoilerTaskOrderSignFileDO();
@@ -267,7 +294,7 @@ public class BoilerTaskOrderSignFileServiceImpl extends ServiceImpl<BoilerTaskOr
             taskOrderSignFileDO.setIsSignature(IsYesOrNoEnum.UNKNOWN.getKey());
             taskOrderSignFileDO.setIsPush(IsYesOrNoEnum.YES.getKey());
             taskOrderSignFileDO.setPushDateTime(LocalDateTime.now());
-            taskOrderSignFileDO.setOrderItemId(reqVO.getOrderItemId());
+            taskOrderSignFileDO.setOrderItemId(orderItemId);
             taskOrderSignFileDO.setSecurityCheckId(reqVO.getSecurityCheckId());
             save(taskOrderSignFileDO);
         }

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

@@ -103,11 +103,26 @@ public class QR0405_202400ReportOFData implements IDynamicOFData {
         }
         // 填充客户签名
         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());
+//        if (one != null){
+//            BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(one.getId(), 100);
+//            if (boilerTaskOrderSignFileDO != null){
+//                result.put("contact", boilerTaskOrderSignFileDO.getSignUrl());
+//                result.put("contactDate", boilerTaskOrderSignFileDO.getSignDate());
+//            }
+//        }
+        if (one != null) {
+            if (orderReportDOId != null) {
+                BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(one.getId(), 100, orderReportDOId);
+                if (boilerTaskOrderSignFileDO != null) {
+                    result.put("contact", boilerTaskOrderSignFileDO.getSignUrl());
+                    result.put("contactDate", boilerTaskOrderSignFileDO.getSignDate());
+                }
+            } else {
+                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());
@@ -209,11 +224,28 @@ public class QR0405_202400ReportOFData implements IDynamicOFData {
         }
         // 填充客户签名
         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());
+        //        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("contact", " ");
+        result.put("contactDate", "-");
+        if (one != null) {
+            if (orderReportDOId != null) {
+                BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(one.getId(), 100, orderReportDOId);
+                if (boilerTaskOrderSignFileDO != null) {
+                    result.put("contact", boilerTaskOrderSignFileDO.getSignUrl());
+                    result.put("contactDate", boilerTaskOrderSignFileDO.getSignDate());
+                }
+            } else {
+                BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(one.getId(), 100);
+                if (boilerTaskOrderSignFileDO != null) {
+                    result.put("contact", boilerTaskOrderSignFileDO.getSignUrl());
+                    result.put("contactDate", boilerTaskOrderSignFileDO.getSignDate());
+                }
             }
         }
         result.put("contactPhone", taskOrderDO.getUnitPhone());

+ 24 - 6
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0405_202402ReportOFData.java

@@ -89,6 +89,7 @@ public class QR0405_202402ReportOFData implements IDynamicOFData {
 
         //受理单ID
         String refId = ruleVO.getRefId();
+        String orderReportDOId = ruleVO.getParams().getString("orderReportDOId");
 
         JSONObject result = new JSONObject();
         AcceptOrderDO acceptOrderDO = acceptOrderMapper.selectById(refId);
@@ -104,12 +105,29 @@ public class QR0405_202402ReportOFData implements IDynamicOFData {
         result.put("contact", acceptOrderDO.getUnitContact());
 
         // 填充客户签名
-        BoilerTaskOrderDO taskOrderDO = boilerTaskOrderService.getOne(new LambdaQueryWrapper<BoilerTaskOrderDO>().eq(BoilerTaskOrderDO::getAcceptOrderId, refId));
-        if (taskOrderDO != null){
-            BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100);
-            if (boilerTaskOrderSignFileDO != null){
-                result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
-                result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
+            BoilerTaskOrderDO taskOrderDO = boilerTaskOrderService.getOne(new LambdaQueryWrapper<BoilerTaskOrderDO>().eq(BoilerTaskOrderDO::getAcceptOrderId, refId));
+//        if (taskOrderDO != null){
+//            BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100);
+//            if (boilerTaskOrderSignFileDO != null){
+//                result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
+//                result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
+//            }
+//        }
+        result.put("unitPerson", " ");
+        result.put("unitPersonDate", "-");
+        if (taskOrderDO != null) {
+            if (orderReportDOId != null) {
+                BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100, orderReportDOId);
+                if (boilerTaskOrderSignFileDO != null) {
+                    result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
+                    result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
+                }
+            } else {
+                BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100);
+                if (boilerTaskOrderSignFileDO != null) {
+                    result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
+                    result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
+                }
             }
         }
         result.put("SLCK", "");

+ 16 - 6
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0418_202402ReportOFData.java

@@ -98,6 +98,7 @@ public class QR0418_202402ReportOFData implements IDynamicOFData {
 
         //受理单ID
         String refId = ruleVO.getRefId();
+        String orderReportDOId = ruleVO.getParams().getString("orderReportDOId");
 
         JSONObject result = new JSONObject();
         AcceptOrderDO acceptOrderDO = acceptOrderMapper.selectById(refId);
@@ -138,14 +139,23 @@ public class QR0418_202402ReportOFData implements IDynamicOFData {
 
             }
         }
-
+        result.put("unitPerson", " ");
+        result.put("unitPersonDate", "-");
         // 填充客户签名
         BoilerTaskOrderDO taskOrderDO = boilerTaskOrderService.getOne(new LambdaQueryWrapper<BoilerTaskOrderDO>().eq(BoilerTaskOrderDO::getAcceptOrderId, refId));
-        if (taskOrderDO != null){
-            BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100);
-            if (boilerTaskOrderSignFileDO != null){
-                result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
-                result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
+        if (taskOrderDO != null) {
+            if (orderReportDOId != null) {
+                BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100, orderReportDOId);
+                if (boilerTaskOrderSignFileDO != null) {
+                    result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
+                    result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
+                }
+            } else {
+                BoilerTaskOrderSignFileDO boilerTaskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), 100);
+                if (boilerTaskOrderSignFileDO != null) {
+                    result.put("unitPerson", boilerTaskOrderSignFileDO.getSignUrl());
+                    result.put("unitPersonDate", boilerTaskOrderSignFileDO.getSignDate());
+                }
             }
         }
 

+ 4 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamictbins/DynamicTbInsServiceImpl.java

@@ -251,7 +251,10 @@ public class DynamicTbInsServiceImpl extends ServiceImpl<DynamicTbInsMapper, Dyn
 
     private DynamicTbInsDO initInstance(InitInstanceVO initInstanceVO) {
 
-        List<DynamicTbInsDO> list = this.lambdaQuery().eq(DynamicTbInsDO::getRefId, initInstanceVO.getRefId()).list();
+        List<DynamicTbInsDO> list = this.lambdaQuery()
+                .eq(DynamicTbInsDO::getRefId, initInstanceVO.getRefId())
+                .eq(DynamicTbInsDO::getTbId, initInstanceVO.getTemplateId())
+                .list();
         DynamicTbInsDO ins = new DynamicTbInsDO();
         if (CollectionUtil.isNotEmpty(list)) {
             ins = list.get(0);

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

@@ -285,7 +285,11 @@ public class DynamicTbValServiceImpl extends ServiceImpl<DynamicTbValMapper, Dyn
     @Override
     public DynamicTBAndColVO getDynamicTbInsAndValByRefId(DynamicTBViewOrAddVO tbViewOrAddVO) {
         DynamicTBAndColVO result = new DynamicTBAndColVO();
-        DynamicTbInsDO dynamicTBInsDO = dynamicTbInsService.lambdaQuery().eq(DynamicTbInsDO::getRefId, tbViewOrAddVO.getRefId()).one();
+        DynamicTbInsDO dynamicTBInsDO = dynamicTbInsService.lambdaQuery()
+                .eq(DynamicTbInsDO::getRefId, tbViewOrAddVO.getRefId())
+                .eq(DynamicTbInsDO::getTbId, tbViewOrAddVO.getTemplateId())
+                .orderByDesc(DynamicTbInsDO::getCreateTime)
+                .one();
 
         List<DynamicTbColDO> dynamicTbColDOS = dynamicTbColMapper.selectList(DynamicTbColDO::getTbId, dynamicTBInsDO.getTbId());
         dynamicTbColDOS.addAll(dynamicTbColMapper.selectList(DynamicTbColDO::getColRound, 3));

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

@@ -87,4 +87,12 @@ public interface OrderReportService extends IService<OrderReportDO>  {
     Boolean serviceFromSendEmail(@Valid TaskOrderSignFilePageReqVO pageReqVO);
 
     List<OrderReportDO> getListByOrderIdSet(Set<String> orderIdSet);
+
+    /**
+     * 刷新单个报告的动态报表实例(仅刷新指定报告,不影响同一受理单下的其他报告)
+     *
+     * @param orderReportId 报告ID
+     * @param equipMainType 设备类型 (boiler/pipe)
+     */
+    void refreshSingleOrderReport(String orderReportId, String equipMainType);
 }

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

@@ -6,8 +6,11 @@ import cn.hutool.core.util.StrUtil;
 import cn.start.tz.framework.common.exception.ErrorCode;
 import cn.start.tz.framework.common.exception.ServiceException;
 import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.infra.api.config.ConfigApi;
 import cn.start.tz.module.infra.api.file.FileApi;
+import cn.start.tz.module.pressure2.controller.admin.acceptorder.vo.AcceptOrderRespVO;
 import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
+import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilerconnectrecordreport.BoilerConnectRecordReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilerconnecttbservice.BoilerConnectTbServiceDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
@@ -23,6 +26,7 @@ import cn.start.tz.module.pressure2.dal.mysql.boilerconnecttbservice.BoilerConne
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorder.BoilerTaskOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.notificationformreport.NotificationformReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorder.PipeTaskOrderMapper;
+import cn.start.tz.module.pressure2.service.acceptorder.AcceptOrderService;
 import cn.start.tz.module.pressure2.service.boilerconnectrecordreport.BoilerConnectRecordReportService;
 import cn.start.tz.module.pressure2.service.boilertaskorderitem.BoilerTaskOrderItemService;
 import cn.start.tz.module.pressure2.service.boilertaskorderitemreport.BoilerTaskOrderItemReportService;
@@ -125,6 +129,10 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
     @Resource
     private MailSendApi mailSendApi;
 
+    @Resource
+    private ConfigApi configApi;
+
+
     private final String ACCEPT = "1";
     private final String TASK = "2";
 
@@ -219,6 +227,45 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
                 orderReportDO.setInsId(instantiateWithRule.getId());
             }
 
+            orderReportMapper.insertOrUpdate(orderReportDO);
+        }
+        // 锅炉设备检验,定检存在委托收费项目时,需要生成一张受理单一张服务单
+        String code = configApi.getConfigValueByKey("boiler_legal_service_code").getCheckedData();
+        if (code != null && !code.isEmpty()) {
+            // 判断是否存在服务收费项目
+            if (list.stream().noneMatch(item -> "2".equals(item.getType()))) return;
+            // 生成服务单
+            DynamicTbDO reportTemplateDO = dynamicTbService.list(new LambdaQueryWrapper<DynamicTbDO>().eq(DynamicTbDO::getTbCode, code)).get(0);
+            if (reportTemplateDO == null) return;
+
+            // 按 acceptOrderId + templateId 查重,避免重复生成
+            OrderReportDO exist = getOne(new LambdaQueryWrapperX<OrderReportDO>()
+                    .eq(OrderReportDO::getAcceptOrderId, acceptOrderId)
+                    .eq(OrderReportDO::getTemplateId, reportTemplateDO.getId())
+            );
+            OrderReportDO orderReportDO = exist == null ? new OrderReportDO() : exist;
+            orderReportDO.setAcceptOrderId(acceptOrderId);
+            orderReportDO.setOrderType(ACCEPT);
+            orderReportDO.setTemplateId(reportTemplateDO.getId());
+
+            // 生成报表数据
+            CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
+            ruleVO.setTemplateId(reportTemplateDO.getId());
+            ruleVO.setRefId(acceptOrderId);
+            ruleVO.setRefName(reportTemplateDO.getTbName());
+            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());
+            if (tbServiceDO != null) {
+                ruleVO.setServiceName(tbServiceDO.getInitServiceName());
+                DynamicTbInsDO instantiateWithRule = dynamicTbInsService.createInstantiateWithRule(ruleVO);
+                orderReportDO.setInsId(instantiateWithRule.getId());
+            }
+
             orderReportMapper.insertOrUpdate(orderReportDO);
         }
     }
@@ -447,6 +494,41 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
         }
     }
 
+    @Override
+    public void refreshSingleOrderReport(String orderReportId, String equipMainType) {
+        OrderReportDO orderReportDO = orderReportMapper.selectById(orderReportId);
+        if (orderReportDO == null) {
+            throw new ServiceException(500, "报告不存在");
+        }
+        String templateId = orderReportDO.getTemplateId();
+        String refId = orderReportDO.getAcceptOrderId();
+
+        DynamicTbDO reportTemplateDO = dynamicTbService.getById(templateId);
+        if (reportTemplateDO == null) {
+            throw new ServiceException(500, "报告模板不存在");
+        }
+
+        CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
+        ruleVO.setTemplateId(templateId);
+        ruleVO.setRefId(refId);
+        ruleVO.setRefName(reportTemplateDO.getTbName());
+        ruleVO.setReportType(1);
+        JSONObject params = new JSONObject();
+        params.put("equipMainType", equipMainType);
+        params.put("orderReportDOId", orderReportDO.getId());
+        ruleVO.setParams(params);
+
+        BoilerConnectTbServiceDO tbServiceDO = boilerConnectTbServiceMapper.selectOne(
+                BoilerConnectTbServiceDO::getTbId, templateId);
+        if (tbServiceDO != null) {
+            ruleVO.setServiceName(tbServiceDO.getInitServiceName());
+            DynamicTbInsDO instantiateWithRule = dynamicTbInsService.createInstantiateWithRule(ruleVO);
+            orderReportDO.setInsId(instantiateWithRule.getId());
+        }
+
+        orderReportMapper.updateById(orderReportDO);
+    }
+
     @Override
     public Boolean serviceFromSendEmail(TaskOrderSignFilePageReqVO pageReqVO) {
 

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

@@ -215,7 +215,7 @@ public class TaskSignServiceImpl implements TaskSignService {
         BoilerTaskOrderSignFileDO proceedTaskOrderSignFileDO = saveOrUpdateSignFile(taskOrderSignFileDO, taskOrderDO, reqVO);
 
         // 根据业务类型生成对应的报告
-        String url = handleReportGeneration(taskOrderDO, reqVO);
+        String url = handleReportGeneration(taskOrderDO, reqVO, proceedTaskOrderSignFileDO.getOrderItemId());
 
         proceedTaskOrderSignFileDO.setSignFilePdf(url);
 
@@ -301,10 +301,20 @@ public class TaskSignServiceImpl implements TaskSignService {
         }
 
         if (reqVO.getBusinessType() == BUSINESS_TYPE_ACCEPT_REPORT) {
-            // 受理单:优先按任务单ID查询报告,兜底按受理单ID查询
-            OrderReportDO orderReport = orderReportMapper.selectOne(
-                    new LambdaQueryWrapperX<OrderReportDO>().eq(OrderReportDO::getTaskOrderId, reqVO.getOrderId()));
-
+            // 受理单:优先通过 signFileId → orderItemId(reportId) 定位正确报告,支持多报告场景
+            OrderReportDO orderReport = null;
+            if (StringUtils.isNotBlank(reqVO.getSignFileId())) {
+                BoilerTaskOrderSignFileDO signFileDO = boilerTaskOrderSignFileService.getById(reqVO.getSignFileId());
+                if (signFileDO != null && StringUtils.isNotBlank(signFileDO.getOrderItemId())) {
+                    orderReport = orderReportMapper.selectById(signFileDO.getOrderItemId());
+                }
+            }
+            // 兜底:按任务单ID查询报告
+            if (orderReport == null) {
+                orderReport = orderReportMapper.selectOne(
+                        new LambdaQueryWrapperX<OrderReportDO>().eq(OrderReportDO::getTaskOrderId, reqVO.getOrderId()));
+            }
+            // 再兜底:按受理单ID查询
             if (orderReport == null) {
                 BoilerTaskOrderDO taskOrder = boilerTaskOrderMapper.selectById(reqVO.getOrderId());
                 if (taskOrder != null && StringUtils.isNotBlank(taskOrder.getAcceptOrderId())) {
@@ -518,9 +528,9 @@ public class TaskSignServiceImpl implements TaskSignService {
     /**
      * 根据业务类型生成对应的报告
      */
-    private String handleReportGeneration(BoilerTaskOrderDO taskOrderDO, TaskOrderPushReqVO reqVO) throws Exception {
+    private String handleReportGeneration(BoilerTaskOrderDO taskOrderDO, TaskOrderPushReqVO reqVO, String orderItemId) throws Exception {
         if (reqVO.getBusinessType().equals(BUSINESS_TYPE_ACCEPT_REPORT)) {
-            return generateAcceptReport(taskOrderDO);
+            return generateAcceptReport(taskOrderDO, orderItemId);
 
         } else if (reqVO.getBusinessType().equals(BUSINESS_TYPE_NOTIFICATIONFORM_REPORT)) {
             List<NotificationformReportDO> notificationReportDOs = notificationformReportMapper
@@ -541,30 +551,20 @@ public class TaskSignServiceImpl implements TaskSignService {
     /**
      * 生成受理单(业务类型 100)
      */
-    private String generateAcceptReport(BoilerTaskOrderDO taskOrderDO) throws Exception {
-        if (taskOrderDO.getEquipMainType().equals(EQUIP_TYPE_BOILER)) {
-            orderReportService.generateBoilerOrderReport(taskOrderDO.getAcceptOrderId());
-        } else {
-            orderReportService.generatePipeOrderReport(taskOrderDO.getAcceptOrderId());
-        }
+    private String generateAcceptReport(BoilerTaskOrderDO taskOrderDO, String orderItemId) throws Exception {
+        // orderItemId 存储的是 reportId,直接用于定位和刷新单个报告,避免影响同一受理单下的其他报告
+        String equipMainType = taskOrderDO.getEquipMainType().equals(EQUIP_TYPE_BOILER) ? "boiler" : "pipe";
+        orderReportService.refreshSingleOrderReport(orderItemId, equipMainType);
 
-        String templateId = null; // Initialize templateId
-        String instanceId = null;
-        OrderReportDO orderReport = null;
-        BoilerTaskOrderDO taskOrder = boilerTaskOrderMapper.selectById(taskOrderDO.getId());
-        if (taskOrder != null && StringUtils.isNotBlank(taskOrder.getAcceptOrderId())) {
-            orderReport = orderReportMapper.selectOne(
-                    new LambdaQueryWrapperX<OrderReportDO>()
-                            .eq(OrderReportDO::getAcceptOrderId, taskOrder.getAcceptOrderId())
-                            .orderByDesc(OrderReportDO::getCreateTime)
-                            .last("limit 1"));
+        // 直接按 reportId 精确获取报告,而非按 acceptOrderId + 最新记录
+        OrderReportDO orderReport = orderReportMapper.selectById(orderItemId);
+        if (orderReport == null) {
+            throw new ServiceException(500, "报告不存在");
         }
 
-        if (orderReport != null) {
-            StringUtils.isBlank(templateId);
-            templateId = orderReport.getTemplateId();
-            instanceId = orderReport.getInsId();
-        }
+        String templateId = orderReport.getTemplateId();
+        String instanceId = orderReport.getInsId();
+
         byte[] pdf = pdfService.pdf(templateId, instanceId);
         return fileApi.createFile(pdf);
     }