浏览代码

pms 瑞鹰 看板 钻井累计进就 修井累计完工井数

zhangcl 11 小时之前
父节点
当前提交
355f8700ce

+ 82 - 14
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/stat/IotStaticController.java

@@ -514,6 +514,41 @@ public class IotStaticController {
         return CommonResult.success(ImmutableMap.of("total", deviceCount,"today", deviceToday));
     }
 
+    /**
+     * 查询所有瑞鹰 钻井 进尺 修井完成总井口数
+     * @return
+     */
+    @GetMapping("/home/ry/count/zjxj")
+    public CommonResult<ImmutableMap<Object, Object>> getHomeZjXjStat() {
+        // 查询所有钻井进尺
+        IotRyDailyReportPageReqVO reqVO = new IotRyDailyReportPageReqVO();
+        reqVO.setProjectClassification("1");
+        BigDecimal totalFootage = BigDecimal.ZERO;
+        List<IotRyDailyReportDO> dailyReports = iotRyDailyReportMapper.dailyReports(reqVO);
+        // 使用Stream API计算总进尺
+        if (CollUtil.isNotEmpty(dailyReports)) {
+            totalFootage = dailyReports.stream()
+                    .map(IotRyDailyReportDO::getDailyFootage)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+
+        // 查询所有完工井数
+        IotRyDailyReportPageReqVO xjReqVO = new IotRyDailyReportPageReqVO();
+
+        List<IotRyDailyReportTaskCountVO> repairDeptTasks = iotRyDailyReportMapper.countRepairTasksByDept(xjReqVO);
+        // Java8 Stream 简洁累加(核心优化)
+        Integer completeWellCount = repairDeptTasks.stream()
+                // 过滤null元素,避免空指针
+                .filter(Objects::nonNull)
+                // 转换为int流,处理属性为null的情况(null则取0)
+                .mapToInt(task -> Optional.ofNullable(task.getCompletedTaskCount()).orElse(0))
+                // 累加求和(空集合时sum()返回0,无需手动判空)
+                .sum();
+
+        return CommonResult.success(ImmutableMap.of("zj", totalFootage,"xj", completeWellCount));
+    }
+
     @GetMapping("/home/maintain/count/{dept}")
     public CommonResult<ImmutableMap<Object, Object>> getHomeMaintainCountStat(@PathVariable("dept") String dept) {
         ImmutableMap<String, LocalDateTime> beginEndDay = DateUtils.getBeginEndDay(0);
@@ -1243,11 +1278,22 @@ public class IotStaticController {
             // 钻井
             deptTypeReqVO.setType("zj");
         }
+        // 找到钻井队伍对应的项目部 修井队伍对应的项目部
+        Set<Long> zjDeptIds = new HashSet<>();
+        Set<Long> xjDeptIds = new HashSet<>();
+        Set<String> xjDeptNames = new HashSet<>();
+        Set<String> zjDeptNames = new HashSet<>();
         List<IotDeptTypeDO> deptTypes = iotDeptTypeMapper.selectList(deptTypeReqVO);
         List<Long> zjOrXjDeptIds = new ArrayList<>();
         if (CollUtil.isNotEmpty(deptTypes)) {
             deptTypes.forEach(dept -> {
                 zjOrXjDeptIds.add(dept.getDeptId());
+                if ("zj".equals(dept.getType())) {
+                    zjDeptIds.add(dept.getDeptId());
+                }
+                if ("xj".equals(dept.getType())) {
+                    xjDeptIds.add(dept.getDeptId());
+                }
             });
         }
 
@@ -1262,6 +1308,22 @@ public class IotStaticController {
                     teamProjectPair.put(dept.getId(), dept.getParentId());
                 }
             });
+            // 筛选出所有钻井项目部
+            teamProjectPair.forEach((teamDeptId, projectDeptId) -> {
+                if (zjDeptIds.contains(teamDeptId)) {
+                    // 钻井部门
+                    if (projectDeptPair.containsKey(projectDeptId)) {
+                        zjDeptNames.add(projectDeptPair.get(projectDeptId));
+                    }
+                }
+                if (xjDeptIds.contains(teamDeptId)) {
+                    // 修井部门
+                    if (projectDeptPair.containsKey(projectDeptId)) {
+                        xjDeptNames.add(projectDeptPair.get(projectDeptId));
+                    }
+                }
+            });
+            // 筛选出所有修井项目部
         }
         IotRyDailyReportPageReqVO reqVO = new IotRyDailyReportPageReqVO();
         List<IotRyDailyReportTaskCountVO> repairTaskCounts = new ArrayList<>();
@@ -1303,6 +1365,8 @@ public class IotStaticController {
                 });
             }
             // 遍历所有项目部 没有产生运行数据的项目部 赋值 0
+            // 钻井 时 只显示 钻井相关的项目部
+            // 查询修井数据时,只显示修井相关的项目部
             projectDeptPair.forEach((projectDeptId, projectDeptName) -> {
                 if (!projectDeptMonthCountPair.containsKey(projectDeptName)) {
                     projectDeptMonthCountPair.put(projectDeptName, 0);
@@ -1317,11 +1381,13 @@ public class IotStaticController {
             LinkedList<Object> yearData = new LinkedList<>();
 
             projectDeptMonthCountPair.forEach( (k,v)->{
-                xAxis.add(k);
-                monthData.add(v);
-                if (projectDeptYearCountPair.containsKey(k)) {
-                    Integer yearCount = projectDeptYearCountPair.get(k);
-                    yearData.add(yearCount);
+                if (xjDeptNames.contains(k)) {
+                    xAxis.add(k);
+                    monthData.add(v);
+                    if (projectDeptYearCountPair.containsKey(k)) {
+                        Integer yearCount = projectDeptYearCountPair.get(k);
+                        yearData.add(yearCount);
+                    }
                 }
             });
             ImmutableMap<String, Serializable> monthResult = ImmutableMap.of("name", "月完井数~~en**monthWell", "data", monthData);
@@ -1392,15 +1458,17 @@ public class IotStaticController {
             LinkedList<Object> yearData = new LinkedList<>();
 
             projectDeptDailyFootagePair.forEach( (k,v)->{
-                xAxis.add(k);
-                dailyData.add(v);
-                if (projectDeptMonthFootagePair.containsKey(k)) {
-                    BigDecimal monthlyFootage = projectDeptMonthFootagePair.get(k);
-                    monthData.add(monthlyFootage);
-                }
-                if (projectDeptYearFootagePair.containsKey(k)) {
-                    BigDecimal annualFootage = projectDeptYearFootagePair.get(k);
-                    yearData.add(annualFootage);
+                if (zjDeptNames.contains(k)) {
+                    xAxis.add(k);
+                    dailyData.add(v);
+                    if (projectDeptMonthFootagePair.containsKey(k)) {
+                        BigDecimal monthlyFootage = projectDeptMonthFootagePair.get(k);
+                        monthData.add(monthlyFootage);
+                    }
+                    if (projectDeptYearFootagePair.containsKey(k)) {
+                        BigDecimal annualFootage = projectDeptYearFootagePair.get(k);
+                        yearData.add(annualFootage);
+                    }
                 }
             });