소스 검색

pms 瑞都 单井队 显示 生产动态明细

zhangcl 3 일 전
부모
커밋
2c38c1e5cd

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

@@ -1258,6 +1258,8 @@ public class IotRdDailyReportController {
         Map<Long, BigDecimal> groupIdMixSandPair = new HashMap<>();
         // 已经完工的任务id集合
         Set<Long> finishedTaskIds = new HashSet<>();
+        // key日报id   value生产动态明细
+        Map<Long, List<IotRdDailyReportDetailRespVO>> reportDetailsPair = new HashMap<>();
 
         DataPermissionUtils.executeIgnore(() -> {
             IotProjectTaskPageReqVO taskReqVO = new IotProjectTaskPageReqVO();
@@ -1511,11 +1513,72 @@ 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)) {
@@ -1735,6 +1798,8 @@ public class IotRdDailyReportController {
             if (ObjUtil.isNotEmpty(reportVO.getCreateTime())) {
                 reportVO.setCreateTimeStr(LocalDateTimeUtil.format(reportVO.getCreateTime(), DatePattern.NORM_DATE_PATTERN));
             }
+            // 生产动态明细
+            findAndThen(reportDetailsPair, reportVO.getId(), details -> reportVO.setReportDetails(details));
             // 部门信息 任务中关联的施工队伍
             findAndThen(taskTeamsPair, reportVO.getTaskId(), deptNames -> reportVO.setDeptName(deptNames));
             // 日报关联的项目信息
@@ -1847,6 +1912,8 @@ public class IotRdDailyReportController {
         Map<Long, BigDecimal> groupIdMixSandPair = new HashMap<>();
         // 已经完工的任务id集合
         Set<Long> finishedTaskIds = new HashSet<>();
+        // key日报id   value生产动态明细
+        Map<Long, List<IotRdDailyReportDetailRespVO>> reportDetailsPair = new HashMap<>();
 
         DataPermissionUtils.executeIgnore(() -> {
             IotProjectTaskPageReqVO taskReqVO = new IotProjectTaskPageReqVO();
@@ -2103,11 +2170,72 @@ 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)) {
@@ -2321,6 +2449,8 @@ public class IotRdDailyReportController {
             if (ObjUtil.isNotEmpty(reportVO.getCreateTime())) {
                 reportVO.setCreateTimeStr(LocalDateTimeUtil.format(reportVO.getCreateTime(), DatePattern.NORM_DATE_PATTERN));
             }
+            // 生产动态明细
+            findAndThen(reportDetailsPair, reportVO.getId(), details -> reportVO.setReportDetails(details));
             // 施工状态 导出使用
             if (StrUtil.isNotBlank(reportVO.getRdStatus())) {
                 if (constructStatusPair.containsKey(reportVO.getRdStatus())) {