소스 검색

refactor(order-report): 优化锅炉订单报表生成逻辑

- 移除已注释的动态表查询代码,简化主项目查找逻辑
- 修改主项目查询逻辑以支持一个受理单对应多个主项目
- 添加按受理单ID和模板ID查重机制,避免重复生成报表
- 将单条记录处理改为批量处理,提升性能
- 完善异常处理逻辑,添加模板不存在时的跳过处理
- 重构任务订单报表添加方法,支持多条记录同时更新
xuzhancheng 2 주 전
부모
커밋
406befaf92

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

@@ -116,21 +116,6 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
 
     @Override
     public void generateBoilerOrderReport(String acceptOrderId) {
-        OrderReportDO one = getOne(new LambdaQueryWrapperX<OrderReportDO>().eq(OrderReportDO::getAcceptOrderId, acceptOrderId));
-        OrderReportDO orderReportDO = one == null ? new OrderReportDO() : one;
-        orderReportDO.setAcceptOrderId(acceptOrderId);
-        orderReportDO.setOrderType(ACCEPT);
-
-        /*List<DynamicTbDO> list = dynamicTbService.list(new LambdaQueryWrapperX<DynamicTbDO>()
-                .eq(DynamicTbDO::getPjType, 3)
-                .eq(DynamicTbDO::getReportType, 300)
-        );
-        if (CollUtil.isEmpty(list)) {
-            return;
-        }
-        // 目前拿第一个
-        DynamicTbDO reportTemplateDO = list.get(0);*/
-        // 找到主项目
         List<EquipBoilerSchedulingCheckDO> list = equipBoilerSchedulingCheckService.list(
                 new LambdaQueryWrapper<EquipBoilerSchedulingCheckDO>()
                         .eq(EquipBoilerSchedulingCheckDO::getAcceptOrderId, acceptOrderId)
@@ -141,35 +126,43 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
                         .in(BoilerConnectRecordReportDO::getId, checkIds)
                         .eq(BoilerConnectRecordReportDO::getIsMainProject, "1")
         );
-        if (!boilerConnectRecordReportDOS.isEmpty()) {
-            BoilerConnectRecordReportDO boilerConnectRecordReportDO = boilerConnectRecordReportDOS.get(0);
+        if (boilerConnectRecordReportDOS.isEmpty()) {
+            throw new ServiceException(500, "生成报表数据失败,未找到主项目受理单配置");
+        }
+
+        // 一个受理单可能有多个主项目,每个主项目对应一个报告
+        for (BoilerConnectRecordReportDO boilerConnectRecordReportDO : boilerConnectRecordReportDOS) {
             DynamicTbDO reportTemplateDO = dynamicTbService.getById(boilerConnectRecordReportDO.getAcceptOrderTemplateId());
+            if (reportTemplateDO == null) continue;
+
+            // 按 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");
             ruleVO.setParams(params);
-            //获取tbCode的服务方法名
+
             BoilerConnectTbServiceDO tbServiceDO = boilerConnectTbServiceMapper.selectOne(BoilerConnectTbServiceDO::getTbId, reportTemplateDO.getId());
             if (tbServiceDO != null) {
                 ruleVO.setServiceName(tbServiceDO.getInitServiceName());
                 DynamicTbInsDO instantiateWithRule = dynamicTbInsService.createInstantiateWithRule(ruleVO);
                 orderReportDO.setInsId(instantiateWithRule.getId());
-            } else {
-                //throw new ServiceException(500, "生成报表数据失败,初始化服务方法未配置");
             }
 
-
             orderReportMapper.insertOrUpdate(orderReportDO);
-        }else {
-            throw new ServiceException(500, "生成报表数据失败,未找到主项目受理单配置");
         }
     }
 
@@ -235,13 +228,14 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
 
     @Override
     public void addBoilerOrderReport(String acceptOrderId, String taskOrderId) {
-        OrderReportDO one = getOne(new LambdaQueryWrapperX<OrderReportDO>().eq(OrderReportDO::getAcceptOrderId, acceptOrderId));
-        if (one == null){
-            return;
+        List<OrderReportDO> list = list(new LambdaQueryWrapperX<OrderReportDO>()
+                .eq(OrderReportDO::getAcceptOrderId, acceptOrderId));
+        if (CollUtil.isEmpty(list)) return;
+        for (OrderReportDO orderReportDO : list) {
+            orderReportDO.setTaskOrderId(taskOrderId);
+            orderReportDO.setOrderType(TASK);
+            updateById(orderReportDO);
         }
-        one.setTaskOrderId(taskOrderId);
-        one.setOrderType(TASK);
-        updateById(one);
     }
 
     @Override