Răsfoiți Sursa

pms 瑞都 查询 平台井日报时 显示关联井的 生产动态明细

zhangcl 1 săptămână în urmă
părinte
comite
cde4dc40ee

+ 65 - 20
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/IotRdDailyReportController.java

@@ -2500,26 +2500,8 @@ public class IotRdDailyReportController {
         // key平台井标识  value平台井非生产时效集合
         Map<String, BigDecimal> platformNptPair = new HashMap<>();
 
-        // 查询每个日报的生产动态明细
-        IotRdDailyReportDetailPageReqVO detailReqVO = new IotRdDailyReportDetailPageReqVO();
-        detailReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        detailReqVO.setReportIds(convertList(reports, IotRdDailyReportDO::getId));
-        PageResult<IotRdDailyReportDetailDO> reportDetailsPage = iotRdDailyReportDetailMapper.selectPage(detailReqVO);
-        List<IotRdDailyReportDetailDO> reportDetails = reportDetailsPage.getList();
-        if (CollUtil.isNotEmpty(reportDetails)) {
-            // 设置每个日报的生产动态明细
-            reportDetails.forEach(detail -> {
-                if (reportDetailsPair.containsKey(detail.getReportId())) {
-                    List<IotRdDailyReportDetailRespVO> tempDetails = reportDetailsPair.get(detail.getReportId());
-                    tempDetails.add(BeanUtils.toBean(detail, IotRdDailyReportDetailRespVO.class));
-                    reportDetailsPair.put(detail.getReportId(), tempDetails);
-                } else {
-                    List<IotRdDailyReportDetailRespVO> tempDetails = new ArrayList<>();
-                    tempDetails.add(BeanUtils.toBean(detail, IotRdDailyReportDetailRespVO.class));
-                    reportDetailsPair.put(detail.getReportId(), tempDetails);
-                }
-            });
-        }
+
+        // 平台井 筛选关联的井的生产动态明细 赋值到 平台井列表 的 日报对象
 
         DataPermissionUtils.executeIgnore(() -> {
             // 查询日报关联的项目信息
@@ -2550,11 +2532,74 @@ public class IotRdDailyReportController {
             // relatedWellReqVO.setPlatformWell(2);
             List<IotRdDailyReportDO> relatedWellReports = iotRdDailyReportService.dailyReports(relatedWellReqVO);
 
+            // key日报id  value平台井platformGroup
+            Map<Long, String> platformWellPair = new HashMap<>();
+
+            // 查询每个日报的生产动态明细 平台井查询 主井 的生产动态明细
+            IotRdDailyReportDetailPageReqVO detailReqVO = new IotRdDailyReportDetailPageReqVO();
+            detailReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+            detailReqVO.setReportIds(convertList(relatedWellReports, IotRdDailyReportDO::getId));
+            PageResult<IotRdDailyReportDetailDO> reportDetailsPage = iotRdDailyReportDetailMapper.selectPage(detailReqVO);
+            List<IotRdDailyReportDetailDO> reportDetails = reportDetailsPage.getList();
+            if (CollUtil.isNotEmpty(reportDetails)) {
+                // 设置每个日报的生产动态明细
+                reportDetails.forEach(detail -> {
+                    if (reportDetailsPair.containsKey(detail.getReportId())) {
+                        List<IotRdDailyReportDetailRespVO> tempDetails = reportDetailsPair.get(detail.getReportId());
+                        tempDetails.add(BeanUtils.toBean(detail, IotRdDailyReportDetailRespVO.class));
+                        reportDetailsPair.put(detail.getReportId(), tempDetails);
+                    } else {
+                        List<IotRdDailyReportDetailRespVO> tempDetails = new ArrayList<>();
+                        tempDetails.add(BeanUtils.toBean(detail, IotRdDailyReportDetailRespVO.class));
+                        reportDetailsPair.put(detail.getReportId(), tempDetails);
+                    }
+                });
+            }
+
             // 按照日报创建时间倒序排列
             if (CollUtil.isNotEmpty(relatedWellReports)) {
                 relatedWellReports = relatedWellReports.stream()
                         .sorted(Comparator.comparing(IotRdDailyReportDO::getCreateTime).reversed())
                         .collect(Collectors.toList());
+                // 筛选 平台井 类型的日报
+                platformWellPair = relatedWellReports.stream()
+                        .collect(Collectors.toMap(
+                                IotRdDailyReportDO::getId,        // key:日报ID
+                                IotRdDailyReportDO::getPlatformGroup, // value:platformGroup
+                                (oldValue, newValue) -> oldValue  // 重复key时保留旧值(避免重复ID报错)
+                        ));
+            }
+
+            // 组装没有关联生产动态明细的 日报
+            // 1. 按 platformGroup 分组,存储每组的明细列表
+            Map<String, List<IotRdDailyReportDetailRespVO>> platformGroupDetailsMap = new HashMap<>();
+            // 2. 把已有明细的日报,按 platformGroup 汇总明细
+            if (CollUtil.isNotEmpty(platformWellPair) && CollUtil.isNotEmpty(reportDetailsPair)) {
+                platformWellPair.forEach((reportId, platformGroup) -> {
+                    List<IotRdDailyReportDetailRespVO> details = reportDetailsPair.get(reportId);
+                    if (CollUtil.isNotEmpty(details)) {
+                        platformGroupDetailsMap
+                                .computeIfAbsent(platformGroup, k -> new ArrayList<>())
+                                .addAll(details);
+                    }
+                });
+            }
+
+            // 3. 给没有明细的日报,赋值同平台组的明细(实现共享)
+            for (IotRdDailyReportDO report : reports) {
+                Long reportId = report.getId();
+                String platformGroup = platformWellPair.get(reportId);
+
+                // 如果当前日报没有明细 && 同组有共享明细 → 赋值
+                if (!reportDetailsPair.containsKey(reportId)
+                        && StrUtil.isNotBlank(platformGroup)
+                        && platformGroupDetailsMap.containsKey(platformGroup)) {
+
+                    List<IotRdDailyReportDetailRespVO> sharedDetails = platformGroupDetailsMap.get(platformGroup);
+                    if (CollUtil.isNotEmpty(sharedDetails)) {
+                        reportDetailsPair.put(reportId, sharedDetails);
+                    }
+                }
             }
 
             if (CollUtil.isNotEmpty(tasks)) {