Quellcode durchsuchen

拒检、校核、费用

xzc vor 3 Tagen
Ursprung
Commit
dd5956ec80
13 geänderte Dateien mit 328 neuen und 126 gelöschten Zeilen
  1. 23 0
      build-prod/updata.sql
  2. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/boilertaskorder/vo/BoilerOrderItemPageRespVO.java
  3. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/pipetaskorder/vo/PipeOrderItemPageRespVO.java
  4. 4 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/AcceptOrderServiceImpl.java
  5. 4 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/PipeAcceptOrderServiceImpl.java
  6. 107 40
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  7. 8 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java
  8. 4 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemsuspend/BoilerTaskOrderItemSuspendServiceImpl.java
  9. 97 29
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  10. 8 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java
  11. 8 5
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemsuspend/PipeTaskOrderItemSuspendServiceImpl.java
  12. 29 23
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/boilertaskorderitem/BoilerTaskOrderItemMapper.xml
  13. 24 26
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/pipetaskorderitem/PipeTaskOrderItemMapper.xml

+ 23 - 0
build-prod/updata.sql

@@ -68,6 +68,29 @@ COMMENT ON COLUMN "PRESSURE_APPOINTMENT_CONFIRM_ORDER"."ANNOTATOR_NAME" IS '备
 ALTER TABLE "PRESSURE2_DYNAMIC_TB" ADD COLUMN "IMAGE_OFFSET" VARCHAR(150);
 COMMENT ON COLUMN "PRESSURE2_DYNAMIC_TB"."IMAGE_OFFSET" IS '偏移量';
 --已加
+CREATE TABLE "PRESSURE2_DEFAULT_APPROVAL"
+(
+    "ID" VARCHAR(64) NOT NULL,
+    "USER_ID" VARCHAR(64) DEFAULT NULL,
+    "RECHECK_ID" VARCHAR(64) DEFAULT NULL,
+    "APPROVE_EMPLOYEE_NO" VARCHAR(64) DEFAULT NULL,
+    "CREATOR" VARCHAR(64) DEFAULT '',
+    "CREATE_TIME" DATETIME(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    "UPDATER" VARCHAR(64) DEFAULT '',
+    "UPDATE_TIME" DATETIME(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    "DELETED" BIT DEFAULT 0 NOT NULL,
+    NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
+
+COMMENT ON TABLE "PRESSURE2_DEFAULT_APPROVAL" IS '承压2默认审批配置表';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."ID" IS 'ID';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."USER_ID" IS '用户ID';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."RECHECK_ID" IS '校核人ID';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."APPROVE_EMPLOYEE_NO" IS '审核人工号';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."CREATOR" IS '创建者';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."CREATE_TIME" IS '创建时间';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."UPDATER" IS '更新者';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."UPDATE_TIME" IS '更新时间';
+COMMENT ON COLUMN "PRESSURE2_DEFAULT_APPROVAL"."DELETED" IS '是否删除';
 
 --20260704
 ALTER TABLE "PRESSURE2_BOILER_TASK_ORDER_ITEM" ADD COLUMN "ENTER_PDF_URL" VARCHAR(50);

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

@@ -296,6 +296,12 @@ public class BoilerOrderItemPageRespVO {
     @Schema(description = "校核项目列表")
     private List<BoilerTaskOrderItemRecheckRespVO> recheckList;
 
+    @Schema(description = "校核人ID")
+    private String recheckId;
+
+    @Schema(description = "待校核记录数量(固定统计 recheckStatus in 100,300)")
+    private Integer recheckCount;
+
     @Schema(description = "任务单id")
     private String orderId;
 

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

@@ -285,6 +285,12 @@ public class PipeOrderItemPageRespVO {
     @Schema(description = "校核项目列表")
     private List<PipeTaskOrderItemRecheckRespVO> recheckList;
 
+    @Schema(description = "校核人ID")
+    private String recheckId;
+
+    @Schema(description = "待校核记录数量(固定统计 recheckStatus in 100,300)")
+    private Integer recheckCount;
+
     @Schema(description = "任务单id")
     private String orderId;
 

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

@@ -474,7 +474,10 @@ public class AcceptOrderServiceImpl implements AcceptOrderService {
             return appointmentConfirmOrderRefuseItemDO;
         }).toList();
 
-        appointmentConfirmOrderRefuseItemMapper.insertBatch(list);
+        // type=300 无需上报,不进入上报中心,只删除受理单设备
+        if (300 != appointmentRefuseVO.getType()) {
+            appointmentConfirmOrderRefuseItemMapper.insertBatch(list);
+        }
 
         acceptOrderItemMapper.delete(new LambdaQueryWrapperX< BoilerAcceptOrderItemDO>().
                 eq(BoilerAcceptOrderItemDO::getOrderId, appointmentRefuseVO.getOrderId()).

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

@@ -478,7 +478,10 @@ public class PipeAcceptOrderServiceImpl implements PipeAcceptOrderService {
             return appointmentConfirmOrderRefuseItemDO;
         }).toList();
 
-        appointmentConfirmOrderRefuseItemMapper.insertBatch(list);
+        // type=300 无需上报,不进入上报中心,只删除受理单设备
+        if (300 != appointmentRefuseVO.getType()) {
+            appointmentConfirmOrderRefuseItemMapper.insertBatch(list);
+        }
 
         updateAcceptOrderByPipeDetail(appointmentRefuseVO.getOrderId(),equipContainerDOS,equipDetailIds);
 

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

@@ -3918,40 +3918,61 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
         pageResult.setList(itemlist);
         pageResult.setTotal(total);
 
-        if (pageResult == null) {
-            return PageResult.empty();
+        if (CollUtil.isEmpty(itemlist)) {
+            return pageResult;
         }
 
-        List<String> list = pageResult.getList().stream().map(BoilerOrderItemPageRespVO::getManagerId).filter(Objects::nonNull).toList();
-        if (!list.isEmpty()) {
-            Map<String, AdminUserRespDTO> userMap = adminUserApi.getUserMap(list);
-            pageResult.getList().forEach(item -> {
+        // 1. 设置项目负责人 manager
+        List<String> managerIds = itemlist.stream().map(BoilerOrderItemPageRespVO::getManagerId).filter(Objects::nonNull).distinct().toList();
+        if (!managerIds.isEmpty()) {
+            Map<String, AdminUserRespDTO> userMap = adminUserApi.getUserMap(managerIds);
+            itemlist.forEach(item -> {
                 item.setManager(userMap.get(item.getManagerId()));
-
                 item.setRemainingDays(10);
             });
         }
 
-        List<String> reportIds = pageResult.getList().stream().map(BoilerOrderItemPageRespVO::getReportId).filter(Objects::nonNull).toList();
-        List<BoilerTaskOrderItemRecheckRespVO> taskOrderItemRecheckDOS = new ArrayList<>();
-
-        if (!CollectionUtils.isEmpty(reportIds)) {
-            taskOrderItemRecheckDOS = taskOrderItemRecheckMapper.selectListByReportIds(reportIds);
+        // 2. 设置校核人姓名 recheckName
+        List<String> recheckIds = itemlist.stream().map(BoilerOrderItemPageRespVO::getRecheckId).filter(Objects::nonNull).distinct().toList();
+        if (!recheckIds.isEmpty()) {
+            Map<String, AdminUserRespDTO> recheckUserMap = adminUserApi.getUserMap(recheckIds);
+            itemlist.forEach(item -> {
+                if (item.getRecheckId() != null) {
+                    AdminUserRespDTO recheckUser = recheckUserMap.get(item.getRecheckId());
+                    if (recheckUser != null) {
+                        item.setRecheckName(recheckUser.getNickname());
+                    }
+                }
+            });
         }
 
-        if (taskOrderItemRecheckDOS == null) {
-            taskOrderItemRecheckDOS = new ArrayList<>();
+        // 3. 批量查询所有 orderItemId 下的报告,按 (orderItemId, recheckId) 分组组装到 reportDOList
+        List<String> orderItemIds = itemlist.stream().map(BoilerOrderItemPageRespVO::getId).distinct().toList();
+        final Map<String, List<BoilerTaskOrderItemReportDO>> reportMap;
+        if (!orderItemIds.isEmpty()) {
+            List<BoilerTaskOrderItemReportDO> allReports = taskOrderItemReportMapper.selectList(
+                    new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
+                            .in(BoilerTaskOrderItemReportDO::getOrderItemId, orderItemIds)
+                            .isNotNull(BoilerTaskOrderItemReportDO::getRecheckId)
+                            .ne(BoilerTaskOrderItemReportDO::getRecheckId, "")
+                            .orderByAsc(BoilerTaskOrderItemReportDO::getSort));
+            reportMap = allReports.stream()
+                    .collect(Collectors.groupingBy(r -> r.getOrderItemId() + "|" + r.getRecheckId()));
+        } else {
+            reportMap = new HashMap<>();
         }
-        Map<String, List<BoilerTaskOrderItemRecheckRespVO>> recheckList = taskOrderItemRecheckDOS.stream()
-                .collect(Collectors.groupingBy(BoilerTaskOrderItemRecheckRespVO::getMainReportId));
 
-        // 查询 reportId -> 部件名 映射(电站锅炉内检有部件的报告,用于检验项目名前加"部件名-")
-        Set<String> allReportIds = new HashSet<>(reportIds);
-        taskOrderItemRecheckDOS.forEach(r -> {
-            if (r.getReportId() != null) {
-                allReportIds.add(r.getReportId());
-            }
+        // 4. 设置 reportDOList,收集所有 reportId,查询部件名映射
+        Set<String> allReportIds = new HashSet<>();
+        itemlist.forEach(item -> {
+            String key = item.getId() + "|" + item.getRecheckId();
+            List<BoilerTaskOrderItemReportDO> reports = reportMap.getOrDefault(key, new ArrayList<>());
+            item.setReportDOList(reports);
+            reports.forEach(r -> {
+                if (r.getId() != null) allReportIds.add(r.getId());
+            });
         });
+
         Map<String, String> reportIdToPartName = new HashMap<>();
         if (!allReportIds.isEmpty()) {
             List<BoilerTaskOrderItemReportDO> partReportList = taskOrderItemReportMapper.selectList(
@@ -3971,36 +3992,77 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
                     .filter(r -> r.getItemPartId() != null)
                     .collect(Collectors.toMap(BoilerTaskOrderItemReportDO::getId,
                             r -> finalPartIdToName.getOrDefault(r.getItemPartId(), ""), (a, b) -> a)));
+            // 将部件名拼到 reportName 前面(用于前端展示)
+            itemlist.forEach(item -> {
+                if (item.getReportDOList() != null) {
+                    item.getReportDOList().forEach(r -> {
+                        String partName = reportIdToPartName.get(r.getId());
+                        if (StringUtils.isNotBlank(partName) && StringUtils.isNotBlank(r.getReportName())) {
+                            r.setReportName(partName + "-" + r.getReportName());
+                        }
+                    });
+                }
+            });
         }
 
-        pageResult.getList().forEach(item -> {
+        // 5. 批量查询所有 reportUser,按 reportId 分组
+        final Map<String, List<String>> reportIdToUserIds;
+        if (!allReportIds.isEmpty()) {
+            List<BoilerTaskOrderItemReportUserDO> reportUsers = taskOrderItemReportUserMapper.selectList(
+                    BoilerTaskOrderItemReportUserDO::getReportId, allReportIds);
+            reportIdToUserIds = reportUsers.stream()
+                    .collect(Collectors.groupingBy(BoilerTaskOrderItemReportUserDO::getReportId,
+                            Collectors.mapping(BoilerTaskOrderItemReportUserDO::getUserId, Collectors.toList())));
+        } else {
+            reportIdToUserIds = new HashMap<>();
+        }
+
+        // 收集所有 userIds 批量查询
+        Set<String> allUserIds = new LinkedHashSet<>();
+        itemlist.forEach(item -> {
+            if (item.getReportDOList() != null) {
+                item.getReportDOList().forEach(r -> {
+                    List<String> uids = reportIdToUserIds.get(r.getId());
+                    if (uids != null) allUserIds.addAll(uids);
+                });
+            }
+            if (StringUtils.isNotBlank(item.getMainChecker())) {
+                allUserIds.add(item.getMainChecker());
+            }
+        });
+        final Map<String, AdminUserRespDTO> allUserMap;
+        if (!allUserIds.isEmpty()) {
+            allUserMap = adminUserApi.getUserMap(new ArrayList<>(allUserIds));
+        } else {
+            allUserMap = new HashMap<>();
+        }
+
+        // 6. 设置检验员 checkUsers 和地区名
+        itemlist.forEach(item -> {
             if (item.getEquipStreet() != null) {
                 item.setEquipStreetName(AreaUtils.getArea(item.getEquipStreet()).getName());
             }
             if (item.getEquipDistrict() != null) {
                 item.setEquipDistrictName(AreaUtils.getArea(item.getEquipDistrict()).getName());
             }
-
-            List<BoilerTaskOrderItemReportUserDO> taskOrderUserDOList = taskOrderItemReportUserMapper.selectList(BoilerTaskOrderItemReportUserDO::getReportId, item.getReportId());
-            List<String> uIds = new ArrayList<>(taskOrderUserDOList.stream().map(BoilerTaskOrderItemReportUserDO::getUserId).toList());
+            // 设置检验员 checkUsers(该行所有报告的检验员去重)
+            Set<String> userIds = new LinkedHashSet<>();
+            if (item.getReportDOList() != null) {
+                item.getReportDOList().forEach(r -> {
+                    List<String> uids = reportIdToUserIds.get(r.getId());
+                    if (uids != null) userIds.addAll(uids);
+                });
+            }
             if (StringUtils.isNotBlank(item.getMainChecker())) {
-                uIds.add(item.getMainChecker());
+                userIds.add(item.getMainChecker());
             }
-
-            if (!uIds.isEmpty()) {
-                List<AdminUserRespDTO> checkUsers = adminUserApi.getUserList(uIds).getData();
+            if (!userIds.isEmpty()) {
+                List<AdminUserRespDTO> checkUsers = userIds.stream()
+                        .map(allUserMap::get)
+                        .filter(Objects::nonNull)
+                        .collect(Collectors.toList());
                 item.setCheckUsers(checkUsers);
             }
-
-            item.setRecheckList(recheckList.get(item.getReportId()));
-
-            // 设置部件名(电站锅炉内检有部件的报告,检验项目名前加"部件名-")
-            item.setPartName(reportIdToPartName.get(item.getReportId()));
-            List<BoilerTaskOrderItemRecheckRespVO> itemRecheckList = item.getRecheckList();
-            if (itemRecheckList != null) {
-                itemRecheckList.forEach(r -> r.setPartName(reportIdToPartName.get(r.getReportId())));
-            }
-
         });
         return pageResult;
 
@@ -6496,6 +6558,11 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             updateOrder.setId(id);
             updateOrder.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
             updateOrder.setConfirmDate(now());
+            // 服务收费金额为0时,报告办结后结算状态改为已结算
+            BigDecimal serviceAmount = taskOrderDO.getServiceAmount();
+            if (serviceAmount == null || serviceAmount.compareTo(BigDecimal.ZERO) == 0) {
+                updateOrder.setPaymentStatus(1);
+            }
             boilerTaskOrderMapper.updateById(updateOrder);
 
             List<BoilerTaskOrderItemDO> taskOrderItemDOList = boilerTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemDO>().

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

@@ -60,6 +60,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -823,6 +824,13 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                 updateOrder.setId(boilerTaskOrderItemDO.getOrderId());
                 updateOrder.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
                 updateOrder.setConfirmDate(now());
+                // 应收法定金额为0时,非税状态改为已缴费
+                BigDecimal shouldAmount = boilerTaskOrderDO.getShouldAmount();
+                if (shouldAmount == null || shouldAmount.compareTo(BigDecimal.ZERO) == 0) {
+                    updateOrder.setNoTaxPaymentStatus(1);
+                    updateOrder.setIsPay(true);
+                    updateOrder.setNoTaxPayTime(LocalDateTime.now());
+                }
                 boilerTaskOrderMapper.updateById(updateOrder);
 
                 //任务单办结后添加任务单非税开单申请

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

@@ -285,7 +285,10 @@ public class BoilerTaskOrderItemSuspendServiceImpl extends ServiceImpl<BoilerTas
         }
 
         //锅炉全是定检
-        appointmentConfirmOrderRefuseItemMapper.insertBatch(refuseItemDOList);
+        // flag=0 无需上报,不进入上报中心,只删除任务单设备
+        if (submitReqVO.getFlag() != 0) {
+            appointmentConfirmOrderRefuseItemMapper.insertBatch(refuseItemDOList);
+        }
 
         //重置设备排期标识
         if (ObjectUtil.isNotEmpty(refuseItemDOList)) {

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

@@ -2805,9 +2805,6 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
     @Override
     public PageResult<PipeOrderItemPageRespVO> recheckOrderItemPage(BoilerTaskOrderPageReqVO pageReqVO) {
 
-//        String userId = getLoginUserId();
-//        pageReqVO.setUserId(userId);
-
         //获取权限参数
         pageReqVO = DeptDataPermissionUtil.generateDeptDataPermissionReq(pageReqVO);
 
@@ -2856,54 +2853,120 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         pageResult.setList(itemlist);
         pageResult.setTotal(total);
 
-        if (pageResult == null) {
-            return PageResult.empty();
+        if (CollUtil.isEmpty(itemlist)) {
+            return pageResult;
         }
 
-        List<String> list = pageResult.getList().stream().map(PipeOrderItemPageRespVO::getManagerId).filter(Objects::nonNull).toList();
-        if (!list.isEmpty()) {
-            Map<String, AdminUserRespDTO> userMap = adminUserApi.getUserMap(list);
-            pageResult.getList().forEach(item -> {
+        // 1. 设置项目负责人 manager
+        List<String> managerIds = itemlist.stream().map(PipeOrderItemPageRespVO::getManagerId).filter(Objects::nonNull).distinct().toList();
+        if (!managerIds.isEmpty()) {
+            Map<String, AdminUserRespDTO> userMap = adminUserApi.getUserMap(managerIds);
+            itemlist.forEach(item -> {
                 item.setManager(userMap.get(item.getManagerId()));
-
                 item.setRemainingDays(10);
             });
         }
 
-        List<String> reportIds = pageResult.getList().stream().map(PipeOrderItemPageRespVO::getReportId).filter(Objects::nonNull).toList();
-        List<PipeTaskOrderItemRecheckRespVO> taskOrderItemRecheckDOS = new ArrayList<>();
+        // 2. 设置校核人姓名 recheckName
+        List<String> recheckIds = itemlist.stream().map(PipeOrderItemPageRespVO::getRecheckId).filter(Objects::nonNull).distinct().toList();
+        if (!recheckIds.isEmpty()) {
+            Map<String, AdminUserRespDTO> recheckUserMap = adminUserApi.getUserMap(recheckIds);
+            itemlist.forEach(item -> {
+                if (item.getRecheckId() != null) {
+                    AdminUserRespDTO recheckUser = recheckUserMap.get(item.getRecheckId());
+                    if (recheckUser != null) {
+                        item.setRecheckName(recheckUser.getNickname());
+                    }
+                }
+            });
+        }
 
-        if (!CollectionUtils.isEmpty(reportIds)) {
-            taskOrderItemRecheckDOS = taskOrderItemRecheckMapper.selectListByReportIds(reportIds);
+        // 3. 批量查询所有 orderId 下的报告,按 (orderId, recheckId) 分组组装到 reportDOList
+        //    管道:一个任务单只有一个设备输入,所以按 orderId 聚合
+        List<String> orderIds = itemlist.stream().map(PipeOrderItemPageRespVO::getOrderId).filter(Objects::nonNull).distinct().toList();
+        final Map<String, List<PipeTaskOrderItemReportDO>> reportMap;
+        if (!orderIds.isEmpty()) {
+            List<PipeTaskOrderItemReportDO> allReports = taskOrderItemReportMapper.selectList(
+                    new LambdaQueryWrapperX<PipeTaskOrderItemReportDO>()
+                            .in(PipeTaskOrderItemReportDO::getOrderId, orderIds)
+                            .isNotNull(PipeTaskOrderItemReportDO::getRecheckId)
+                            .ne(PipeTaskOrderItemReportDO::getRecheckId, "")
+                            .orderByAsc(PipeTaskOrderItemReportDO::getSort));
+            reportMap = allReports.stream()
+                    .collect(Collectors.groupingBy(r -> r.getOrderId() + "|" + r.getRecheckId()));
+        } else {
+            reportMap = new HashMap<>();
         }
 
-        if (taskOrderItemRecheckDOS == null) {
-            taskOrderItemRecheckDOS = new ArrayList<>();
+        // 4. 设置 reportDOList,收集所有 reportId
+        Set<String> allReportIds = new HashSet<>();
+        itemlist.forEach(item -> {
+            String key = item.getOrderId() + "|" + item.getRecheckId();
+            List<PipeTaskOrderItemReportDO> reports = reportMap.getOrDefault(key, new ArrayList<>());
+            item.setReportDOList(reports);
+            reports.forEach(r -> {
+                if (r.getId() != null) allReportIds.add(r.getId());
+            });
+        });
+
+        // 5. 批量查询所有 reportUser,按 reportId 分组
+        final Map<String, List<String>> reportIdToUserIds;
+        if (!allReportIds.isEmpty()) {
+            List<PipeTaskOrderItemReportUserDO> reportUsers = pipeTaskOrderItemReportUserMapper.selectList(
+                    PipeTaskOrderItemReportUserDO::getReportId, allReportIds);
+            reportIdToUserIds = reportUsers.stream()
+                    .collect(Collectors.groupingBy(PipeTaskOrderItemReportUserDO::getReportId,
+                            Collectors.mapping(PipeTaskOrderItemReportUserDO::getUserId, Collectors.toList())));
+        } else {
+            reportIdToUserIds = new HashMap<>();
         }
-        Map<String, List<PipeTaskOrderItemRecheckRespVO>> recheckList = taskOrderItemRecheckDOS.stream()
-                .collect(Collectors.groupingBy(PipeTaskOrderItemRecheckRespVO::getMainReportId));
 
-        pageResult.getList().forEach(item -> {
+        // 6. 收集所有 userIds 批量查询用户
+        Set<String> allUserIds = new LinkedHashSet<>();
+        itemlist.forEach(item -> {
+            if (item.getReportDOList() != null) {
+                item.getReportDOList().forEach(r -> {
+                    List<String> uids = reportIdToUserIds.get(r.getId());
+                    if (uids != null) allUserIds.addAll(uids);
+                });
+            }
+            if (StringUtils.isNotBlank(item.getMainChecker())) {
+                allUserIds.add(item.getMainChecker());
+            }
+        });
+        final Map<String, AdminUserRespDTO> allUserMap;
+        if (!allUserIds.isEmpty()) {
+            allUserMap = adminUserApi.getUserMap(new ArrayList<>(allUserIds));
+        } else {
+            allUserMap = new HashMap<>();
+        }
+
+        // 7. 设置检验员 checkUsers 和地区名
+        itemlist.forEach(item -> {
             if (item.getEquipStreet() != null) {
                 item.setEquipStreetName(AreaUtils.getArea(item.getEquipStreet()).getName());
             }
             if (item.getEquipDistrict() != null) {
                 item.setEquipDistrictName(AreaUtils.getArea(item.getEquipDistrict()).getName());
             }
-
-            List<PipeTaskOrderItemReportUserDO> taskOrderUserDOList = pipeTaskOrderItemReportUserMapper.selectList(PipeTaskOrderItemReportUserDO::getReportId, item.getReportId());
-            List<String> uIds = new ArrayList<>(taskOrderUserDOList.stream().map(PipeTaskOrderItemReportUserDO::getUserId).toList());
+            // 设置检验员 checkUsers(该行所有报告的检验员去重)
+            Set<String> userIds = new LinkedHashSet<>();
+            if (item.getReportDOList() != null) {
+                item.getReportDOList().forEach(r -> {
+                    List<String> uids = reportIdToUserIds.get(r.getId());
+                    if (uids != null) userIds.addAll(uids);
+                });
+            }
             if (StringUtils.isNotBlank(item.getMainChecker())) {
-                uIds.add(item.getMainChecker());
+                userIds.add(item.getMainChecker());
             }
-
-            if (!uIds.isEmpty()) {
-                List<AdminUserRespDTO> checkUsers = adminUserApi.getUserList(uIds).getData();
+            if (!userIds.isEmpty()) {
+                List<AdminUserRespDTO> checkUsers = userIds.stream()
+                        .map(allUserMap::get)
+                        .filter(Objects::nonNull)
+                        .collect(Collectors.toList());
                 item.setCheckUsers(checkUsers);
             }
-
-            item.setRecheckList(recheckList.get(item.getReportId()));
-
         });
         return pageResult;
 
@@ -5431,6 +5494,11 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             updateOrder.setId(id);
             updateOrder.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
             updateOrder.setConfirmDate(now());
+            // 服务收费金额为0时,报告办结后结算状态改为已结算
+            BigDecimal serviceAmount = taskOrderDO.getServiceAmount();
+            if (serviceAmount == null || serviceAmount.compareTo(BigDecimal.ZERO) == 0) {
+                updateOrder.setPaymentStatus(1);
+            }
             pipeTaskOrderMapper.updateById(updateOrder);
 
             List<PipeTaskOrderItemDO> taskOrderItemDOList = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDO>().

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

@@ -63,6 +63,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -810,6 +811,13 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
             updateOrder.setId(taskOrderItemReportDO.getOrderId());
             updateOrder.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
             updateOrder.setConfirmDate(now());
+            // 应收法定金额为0时,非税状态改为已缴费
+            BigDecimal shouldAmount = pipeTaskOrderDO.getShouldAmount();
+            if (shouldAmount == null || shouldAmount.compareTo(BigDecimal.ZERO) == 0) {
+                updateOrder.setNoTaxPaymentStatus(1);
+                updateOrder.setIsPay(true);
+                updateOrder.setNoTaxPayTime(LocalDateTime.now());
+            }
             pipeTaskOrderMapper.updateById(updateOrder);
 
             pipeTaskOrderInputMapper.update(new LambdaUpdateWrapper<PipeTaskOrderInputDO>()

+ 8 - 5
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemsuspend/PipeTaskOrderItemSuspendServiceImpl.java

@@ -299,11 +299,14 @@ public class PipeTaskOrderItemSuspendServiceImpl extends ServiceImpl<PipeTaskOrd
                         .eq(PipeTaskOrderItemDetailDO::getOrderItemId, taskOrderItemDO.getId())
                         .in(PipeTaskOrderItemDetailDO::getEquipDetailId, equipDetailIds));
 
-                if(taskOrderDO.getCheckType() != null && Arrays.asList(100,300).contains(taskOrderDO.getCheckType())){
-                    appointmentConfirmOrderRefuseItemMapper.insertBatch(refuseItemDOList);
-                }else{
-                    List<AppointmentConfirmRefuseYearItemDO> appointmentConfirmRefuseYearItemDOList = BeanUtils.toBean(refuseItemDOList, AppointmentConfirmRefuseYearItemDO.class);
-                    appointmentConfirmRefuseYearItemMapper.insertBatch(appointmentConfirmRefuseYearItemDOList);
+                // flag=0 无需上报,不进入上报中心,只删除任务单设备
+                if (submitReqVO.getFlag() != 0) {
+                    if(taskOrderDO.getCheckType() != null && Arrays.asList(100,300).contains(taskOrderDO.getCheckType())){
+                        appointmentConfirmOrderRefuseItemMapper.insertBatch(refuseItemDOList);
+                    }else{
+                        List<AppointmentConfirmRefuseYearItemDO> appointmentConfirmRefuseYearItemDOList = BeanUtils.toBean(refuseItemDOList, AppointmentConfirmRefuseYearItemDO.class);
+                        appointmentConfirmRefuseYearItemMapper.insertBatch(appointmentConfirmRefuseYearItemDOList);
+                    }
                 }
 
                 //判断设备下的管线是否已删除完

+ 29 - 23
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/boilertaskorderitem/BoilerTaskOrderItemMapper.xml

@@ -151,21 +151,35 @@
     <select id="selectJoinPageBatchReport">
         select rownum,a.* from (
         select btoi.ID,btoi.MAIN_CHECKER,
-        bto.ORDER_NO,bto.MANAGER_ID,bto.UNIT_NAME,bto.UNIT_CODE,bto.CHECK_TYPE,bto.CHECK_DATE,bto.REASON,
-        bto.SUBMIT_ID,btoir.RECHECK_SUBMIT_TIME as SUBMIT_TIME,eb.EQUIP_DISTRICT,eb.EQUIP_STREET,eb.PRODUCT_CODE,eb.EQUIP_CODE,
-        btoir.RECHECK_STATUS,btoir.STATUS,btoir.TASK_STATUS,btoir.RECHECK_REASON,btoir.RETURN_REASON,
-        btoir.REPORT_NAME,btoir.REPORT_URL,btoir.ID as REPORT_ID,btoir.REPORT_TYPE,btoir.PREPARE_NAME,
-        btoir.APPROVAL_NAME,btoir.RATIFY_NAME,btoir.RECHECK_NAME,btoir.IS_REPORTED,btoir.PROCESS_INSTANCE_ID,
-        btoir.CREATE_TIME as CONFIRM_IME,btoir.RECTIFICATION_STATUS,btoir.RECTIFICATION_URL,
-        btoir.PREPARE_JSON,btoir.SIGN_URL,btoir.RECTIFICATION_VIDEO,btoir.RECTIFICATION_IMAGE,
-        btoir.REPORT_CONCLUSION,btoir.REJECTION_REASON,btoir.IMAGE,btoir.VIDEO,btoir.ATTACHMENT,
-        btoir.REPORT_NO as SUBREPORT_NO,btoir.APPROVAL_ID,btoir.RECHECK_ID,eb.ID as EQUIP_ID
+        MAX(bto.ORDER_NO) as ORDER_NO,
+        MAX(bto.MANAGER_ID) as MANAGER_ID,
+        MAX(bto.UNIT_NAME) as UNIT_NAME,
+        MAX(bto.UNIT_CODE) as UNIT_CODE,
+        MAX(bto.CHECK_TYPE) as CHECK_TYPE,
+        MAX(bto.CHECK_DATE) as CHECK_DATE,
+        MAX(bto.REASON) as REASON,
+        MAX(bto.SUBMIT_ID) as SUBMIT_ID,
+        MIN(btoir.RECHECK_SUBMIT_TIME) as SUBMIT_TIME,
+        MAX(eb.EQUIP_DISTRICT) as EQUIP_DISTRICT,
+        MAX(eb.EQUIP_STREET) as EQUIP_STREET,
+        MAX(eb.PRODUCT_CODE) as PRODUCT_CODE,
+        MAX(eb.EQUIP_CODE) as EQUIP_CODE,
+        btoir.RECHECK_ID,
+        MAX(btoir.RECHECK_NAME) as RECHECK_NAME,
+        MAX(eb.ID) as EQUIP_ID,
+        MAX(btoi.ORDER_ID) as ORDER_ID,
+        MAX(rc.RECHECK_COUNT) as RECHECK_COUNT
         from PRESSURE2_BOILER_TASK_ORDER_ITEM btoi
         left join PRESSURE_TASK_ORDER bto on bto.ID = btoi.ORDER_ID
         left join PRESSURE2_EQUIP_BOILER eb on eb.ID = btoi.EQUIP_ID
         left join PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT btoir on btoir.ORDER_ITEM_ID = btoi.ID
         left join PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT_USER btoiru on btoiru.REPORT_ID = btoir.ID and btoiru.DELETED = 0
-        --left join PRESSURE2_BOILER_TASK_ORDER_ITEM_RECHECK btoir1 on btoir1.MAIN_REPORT_ID = btoir.ID
+        left join (
+            SELECT ORDER_ITEM_ID, RECHECK_ID, COUNT(1) as RECHECK_COUNT
+            FROM PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT
+            WHERE DELETED = 0 AND RECHECK_STATUS IN (100, 300)
+            GROUP BY ORDER_ITEM_ID, RECHECK_ID
+        ) rc ON rc.ORDER_ITEM_ID = btoi.ID AND rc.RECHECK_ID = btoir.RECHECK_ID
         <where>
             btoi.DELETED = 0 AND btoir.RECHECK_ID != ''
             <if test="orderNo != null and orderNo != ''">
@@ -241,30 +255,21 @@
                 AND 1 = 2
             </if>
 <!--            order by bto.CREATE_TIME desc-->
-            order by bto.CREATE_TIME desc,btoir.sort
+            group by btoi.ID, btoir.RECHECK_ID
+            order by MAX(bto.CREATE_TIME) desc
         </where>
         ) a
         OFFSET ${(pageNo - 1) * pageSize} ROWS FETCH NEXT #{pageSize} ROWS ONLY
     </select>
 
     <select id="selectJoinPageBatchReportCount">
-        select count(1) from (
-        select btoi.ID,
-        bto.ORDER_NO,bto.MANAGER_ID,bto.UNIT_NAME,bto.UNIT_CODE,bto.CHECK_TYPE,bto.CHECK_DATE,bto.REASON,
-        bto.SUBMIT_ID,btoir.RECHECK_SUBMIT_TIME as SUBMIT_TIME,eb.EQUIP_DISTRICT,eb.EQUIP_STREET,eb.PRODUCT_CODE,eb.EQUIP_CODE,
-        btoir.RECHECK_STATUS,btoir.STATUS,btoir.TASK_STATUS,btoir.RECHECK_REASON,btoir.RETURN_REASON,
-        btoir.REPORT_NAME,btoir.REPORT_URL,btoir.ID as REPORT_ID,btoir.REPORT_TYPE,btoir.PREPARE_NAME,
-        btoir.APPROVAL_NAME,btoir.RATIFY_NAME,btoir.RECHECK_NAME,btoir.IS_REPORTED,btoir.PROCESS_INSTANCE_ID,
-        btoir.CREATE_TIME as CONFIRM_IME,btoir.RECTIFICATION_STATUS,btoir.RECTIFICATION_URL,
-        btoir.PREPARE_JSON,btoir.SIGN_URL,btoir.RECTIFICATION_VIDEO,btoir.RECTIFICATION_IMAGE,
-        btoir.REPORT_CONCLUSION,btoir.REJECTION_REASON,btoir.IMAGE,btoir.VIDEO,btoir.ATTACHMENT,
-        btoir.REPORT_NO as SUBREPORT_NO,btoir.APPROVAL_ID,btoir.RECHECK_ID,eb.ID as EQUIP_ID
+        select count(*) from (
+        select btoi.ID, btoir.RECHECK_ID
         from PRESSURE2_BOILER_TASK_ORDER_ITEM btoi
         left join PRESSURE_TASK_ORDER bto on bto.ID = btoi.ORDER_ID
         left join PRESSURE2_EQUIP_BOILER eb on eb.ID = btoi.EQUIP_ID
         left join PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT btoir on btoir.ORDER_ITEM_ID = btoi.ID
         left join PRESSURE2_BOILER_TASK_ORDER_ITEM_REPORT_USER btoiru on btoiru.REPORT_ID = btoir.ID and btoiru.DELETED = 0
-        --left join PRESSURE2_BOILER_TASK_ORDER_ITEM_RECHECK btoir1 on btoir1.MAIN_REPORT_ID = btoir.ID
         <where>
             btoi.DELETED = 0 AND btoir.RECHECK_ID != ''
             <if test="orderNo != null and orderNo != ''">
@@ -330,6 +335,7 @@
             <if test="hasPermission != null and hasPermission == false">
                 AND 1 = 2
             </if>
+            group by btoi.ID, btoir.RECHECK_ID
         </where>
         ) a
     </select>

+ 24 - 26
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/pipetaskorderitem/PipeTaskOrderItemMapper.xml

@@ -145,21 +145,30 @@
     <select id="selectJoinPageBatchReport">
         select rownum,a.* from (
         select btoi.ID,btoi.MAIN_CHECKER,
-        bto.ORDER_NO,bto.MANAGER_ID,bto.UNIT_NAME,bto.UNIT_CODE,bto.CHECK_TYPE,bto.CHECK_DATE,bto.REASON,
-        bto.SUBMIT_ID,btoir.RECHECK_SUBMIT_TIME as SUBMIT_TIME,
-        btoir.RECHECK_STATUS,btoir.STATUS,btoir.TASK_STATUS,btoir.RECHECK_REASON,btoir.RETURN_REASON,
-        btoir.REPORT_NAME,btoir.REPORT_URL,btoir.ID as REPORT_ID,btoir.REPORT_TYPE,btoir.PREPARE_NAME,
-        btoir.APPROVAL_NAME,btoir.RATIFY_NAME,btoir.RECHECK_NAME,btoir.IS_REPORTED,btoir.PROCESS_INSTANCE_ID,
-        btoir.CREATE_TIME as CONFIRM_IME,btoir.RECTIFICATION_STATUS,btoir.RECTIFICATION_URL,
-        btoir.PREPARE_JSON,btoir.SIGN_URL,btoir.RECTIFICATION_VIDEO,btoir.RECTIFICATION_IMAGE,
-        btoir.REPORT_CONCLUSION,btoir.REJECTION_REASON,btoir.IMAGE,btoir.VIDEO,btoir.ATTACHMENT,
-        btoir.REPORT_NO as SUBREPORT_NO,btoir.APPROVAL_ID,btoir.RECHECK_ID
-        ,WM_CONCAT(DISTINCT epp.PROJECT_NO) as PROJECT_NO
+        MAX(bto.ORDER_NO) as ORDER_NO,
+        MAX(bto.MANAGER_ID) as MANAGER_ID,
+        MAX(bto.UNIT_NAME) as UNIT_NAME,
+        MAX(bto.UNIT_CODE) as UNIT_CODE,
+        MAX(bto.CHECK_TYPE) as CHECK_TYPE,
+        MAX(bto.CHECK_DATE) as CHECK_DATE,
+        MAX(bto.REASON) as REASON,
+        MAX(bto.SUBMIT_ID) as SUBMIT_ID,
+        MIN(btoir.RECHECK_SUBMIT_TIME) as SUBMIT_TIME,
+        btoir.RECHECK_ID,
+        MAX(btoir.RECHECK_NAME) as RECHECK_NAME,
+        MAX(btoi.ORDER_ID) as ORDER_ID,
+        MAX(rc.RECHECK_COUNT) as RECHECK_COUNT,
+        WM_CONCAT(DISTINCT epp.PROJECT_NO) as PROJECT_NO
         from PRESSURE2_PIPE_TASK_ORDER_INPUT btoi
         left join PRESSURE_TASK_ORDER bto on bto.ID = btoi.ORDER_ID
         left join PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT btoir on btoir.ORDER_ID = btoi.ORDER_ID
         left join PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT_USER btoiru on btoiru.REPORT_ID = btoir.ID and btoiru.DELETED = 0
-        left join PRESSURE2_PIPE_TASK_ORDER_ITEM_RECHECK btoir1 on btoir1.MAIN_REPORT_ID = btoir.ID
+        left join (
+            SELECT ORDER_ID, RECHECK_ID, COUNT(1) as RECHECK_COUNT
+            FROM PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT
+            WHERE DELETED = 0 AND RECHECK_STATUS IN (100, 300)
+            GROUP BY ORDER_ID, RECHECK_ID
+        ) rc ON rc.ORDER_ID = btoi.ORDER_ID AND rc.RECHECK_ID = btoir.RECHECK_ID
         left join PRESSURE2_PIPE_TASK_ORDER_ITEM ptoi on ptoi.ORDER_ID = btoi.ORDER_ID and ptoi.DELETED = 0
         left join (
         -- 先对 PROJECT_NO 和 PROJECT_NAME 去重
@@ -235,12 +244,12 @@
             <if test="hasPermission != null and hasPermission == false">
                 AND 1 = 2
             </if>
-            group by btoi.ID,btoir.ID
+            group by btoi.ID, btoir.RECHECK_ID
             <if test="projectNo != null and projectNo != ''">
                 HAVING WM_CONCAT(epp.PROJECT_NO) LIKE CONCAT('%',#{projectNo},'%')
             </if>
             <!--            order by bto.CREATE_TIME desc-->
-            order by bto.CREATE_TIME desc,btoir.sort
+            order by MAX(bto.CREATE_TIME) desc
         </where>
         ) a
         OFFSET ${(pageNo - 1) * pageSize} ROWS FETCH NEXT #{pageSize} ROWS ONLY
@@ -248,22 +257,11 @@
 
     <select id="selectJoinPageBatchReportCount">
         select count(*) from (
-        select btoi.ID,
-        bto.ORDER_NO,bto.MANAGER_ID,bto.UNIT_NAME,bto.UNIT_CODE,bto.CHECK_TYPE,bto.CHECK_DATE,bto.REASON,
-        bto.SUBMIT_ID,btoir.RECHECK_SUBMIT_TIME as SUBMIT_TIME,
-        btoir.RECHECK_STATUS,btoir.STATUS,btoir.TASK_STATUS,btoir.RECHECK_REASON,btoir.RETURN_REASON,
-        btoir.REPORT_NAME,btoir.REPORT_URL,btoir.ID as REPORT_ID,btoir.REPORT_TYPE,btoir.PREPARE_NAME,
-        btoir.APPROVAL_NAME,btoir.RATIFY_NAME,btoir.RECHECK_NAME,btoir.IS_REPORTED,btoir.PROCESS_INSTANCE_ID,
-        btoir.CREATE_TIME as CONFIRM_IME,btoir.RECTIFICATION_STATUS,btoir.RECTIFICATION_URL,
-        btoir.PREPARE_JSON,btoir.SIGN_URL,btoir.RECTIFICATION_VIDEO,btoir.RECTIFICATION_IMAGE,
-        btoir.REPORT_CONCLUSION,btoir.REJECTION_REASON,btoir.IMAGE,btoir.VIDEO,btoir.ATTACHMENT,
-        btoir.REPORT_NO as SUBREPORT_NO,btoir.APPROVAL_ID,btoir.RECHECK_ID
-        ,WM_CONCAT(DISTINCT epp.PROJECT_NO) as PROJECT_NO
+        select btoi.ID, btoir.RECHECK_ID
         from PRESSURE2_PIPE_TASK_ORDER_INPUT btoi
         left join PRESSURE_TASK_ORDER bto on bto.ID = btoi.ORDER_ID
         left join PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT btoir on btoir.ORDER_ID = btoi.ORDER_ID
         left join PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT_USER btoiru on btoiru.REPORT_ID = btoir.ID and btoiru.DELETED = 0
-        left join PRESSURE2_PIPE_TASK_ORDER_ITEM_RECHECK btoir1 on btoir1.MAIN_REPORT_ID = btoir.ID
         left join PRESSURE2_PIPE_TASK_ORDER_ITEM ptoi on ptoi.ORDER_ID = btoi.ORDER_ID and ptoi.DELETED = 0
         left join (
         -- 先对 PROJECT_NO 和 PROJECT_NAME 去重
@@ -330,7 +328,7 @@
             <if test="hasPermission != null and hasPermission == false">
                 AND 1 = 2
             </if>
-            group by btoi.ID,btoir.ID
+            group by btoi.ID, btoir.RECHECK_ID
             <if test="projectNo != null and projectNo != ''">
                 HAVING WM_CONCAT(epp.PROJECT_NO) LIKE CONCAT('%',#{projectNo},'%')
             </if>