Просмотр исходного кода

pms 瑞都 新建临时日报导致的空指针问题

zhangcl 13 часов назад
Родитель
Сommit
a13ee5fff8

+ 123 - 120
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportServiceImpl.java

@@ -627,10 +627,11 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
                     // 如果 startDate endDate 都存在 计算施工周期天数 考虑到日报审批后才会更新任务状态
                     // 所以计算任务施工周期时 要筛选出施工完成的任务
                     String taskStatus = StrUtil.EMPTY;
-                    if (taskStatusPair.containsKey(period.getTaskId())) {
+                    if (ObjUtil.isNotEmpty(period) && taskStatusPair.containsKey(period.getTaskId())) {
                         taskStatus = taskStatusPair.get(period.getTaskId());
                     }
-                    if (StrUtil.isNotBlank(period.getStartDate()) && StrUtil.isNotBlank(period.getEndDate()) && "wg".equals(taskStatus)) {
+                    if (ObjUtil.isNotEmpty(period) && StrUtil.isNotBlank(period.getStartDate())
+                            && StrUtil.isNotBlank(period.getEndDate()) && "wg".equals(taskStatus)) {
                         // 计算 startDate endDate 之间的差值
                         try {
                             // 1. 解析日期字符串为LocalDateTime
@@ -838,123 +839,124 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
                     // 拆分 uniqueKey
                     String[] deptIdTaskIdArray = dt.split("-");
                     Long deptId = Long.valueOf(deptIdTaskIdArray[0]);
-                    Long projectId = Long.valueOf(deptIdTaskIdArray[1]);
-                    Long taskId = Long.valueOf(deptIdTaskIdArray[2]);
-                    IotRdDailyReportStatisticsRespVO uniqueReport = new IotRdDailyReportStatisticsRespVO();
-                    List<IotRdDailyReportStatisticsItemVO> items = new ArrayList<>();
-                    /* if (teamDeptPair.containsKey(deptId)) {
-                        uniqueReport.setDeptName(teamDeptPair.get(deptId));
-                    } */
-                    // 任务 非生产时间 加和 相除
-                    if (taskNonProductValuesPair.containsKey(taskId)) {
-                        List<BigDecimal> tempNptValues = taskNonProductValuesPair.get(taskId);
-                        // 根据集合 tempNptValues 计算 分母天数
-                        // 1. 计算分子:集合中所有BigDecimal元素的总和
-                        BigDecimal numerator = tempNptValues.stream()
-                                .reduce(BigDecimal.ZERO, BigDecimal::add);
-                        // 2. 计算分母:size * 24(转为BigDecimal避免类型问题)
-                        int denominatorInt = tempNptValues.size() * 24;
-                        BigDecimal denominator = BigDecimal.valueOf(denominatorInt);
-                        // 3. 计算比率:处理分母为0的情况,避免除零异常
-                        BigDecimal nonProductionRate;
-                        if (denominator.compareTo(BigDecimal.ZERO) == 0) {
-                            nonProductionRate = BigDecimal.ZERO; // 分母为0时比率设为0
-                        } else {
-                            // 除法:指定精度(保留4位小数)和舍入模式(四舍五入),可根据业务调整
-                            nonProductionRate = numerator.divide(denominator, 4, RoundingMode.HALF_UP);
+                    if (!"null".equals(deptIdTaskIdArray[1]) && !"null".equals(deptIdTaskIdArray[2])) {
+                        Long projectId = Long.valueOf(deptIdTaskIdArray[1]);
+                        Long taskId = Long.valueOf(deptIdTaskIdArray[2]);
+                        IotRdDailyReportStatisticsRespVO uniqueReport = new IotRdDailyReportStatisticsRespVO();
+                        List<IotRdDailyReportStatisticsItemVO> items = new ArrayList<>();
+                        /* if (teamDeptPair.containsKey(deptId)) {
+                            uniqueReport.setDeptName(teamDeptPair.get(deptId));
+                        } */
+                        // 任务 非生产时间 加和 相除
+                        if (taskNonProductValuesPair.containsKey(taskId)) {
+                            List<BigDecimal> tempNptValues = taskNonProductValuesPair.get(taskId);
+                            // 根据集合 tempNptValues 计算 分母天数
+                            // 1. 计算分子:集合中所有BigDecimal元素的总和
+                            BigDecimal numerator = tempNptValues.stream()
+                                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+                            // 2. 计算分母:size * 24(转为BigDecimal避免类型问题)
+                            int denominatorInt = tempNptValues.size() * 24;
+                            BigDecimal denominator = BigDecimal.valueOf(denominatorInt);
+                            // 3. 计算比率:处理分母为0的情况,避免除零异常
+                            BigDecimal nonProductionRate;
+                            if (denominator.compareTo(BigDecimal.ZERO) == 0) {
+                                nonProductionRate = BigDecimal.ZERO; // 分母为0时比率设为0
+                            } else {
+                                // 除法:指定精度(保留4位小数)和舍入模式(四舍五入),可根据业务调整
+                                nonProductionRate = numerator.divide(denominator, 4, RoundingMode.HALF_UP);
+                            }
+                            uniqueReport.setNonProductionRate(nonProductionRate);
+                        }
+                        uniqueReport.setTaskId(taskId);
+                        if (taskDeptNamePair.containsKey(taskId)) {
+                            uniqueReport.setDeptName(taskDeptNamePair.get(taskId));
+                        }
+                        if (taskCreateTimePair.containsKey(taskId)) {
+                            uniqueReport.setCreateTime(taskCreateTimePair.get(taskId));
+                        }
+                        if (taskFuelPair.containsKey(taskId)) {
+                            uniqueReport.setTotalDailyFuel(taskFuelPair.get(taskId));
+                        }
+                        if (taskProjectDeptPair.containsKey(taskId)) {
+                            uniqueReport.setProjectDeptName(taskProjectDeptPair.get(taskId));
+                        }
+                        if (projectPair.containsKey(projectId)) {
+                            uniqueReport.setManufactureName(projectPair.get(projectId));
+                        }
+                        if (taskPair.containsKey(taskId)) {
+                            uniqueReport.setWellName(taskPair.get(taskId));
+                        }
+                        // 施工周期
+                        if (taskPeriodPair.containsKey(taskId)) {
+                            uniqueReport.setPeriod(taskPeriodPair.get(taskId));
+                        }
+                        // 任务开始日期
+                        if (taskStartDatePair.containsKey(taskId)) {
+                            LocalDateTime startDate = taskStartDatePair.get(taskId);
+                            uniqueReport.setTaskStartDate(LocalDateTimeUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
+                        }
+                        if (taskStatusPair.containsKey(taskId)) {
+                            uniqueReport.setRdStatus(taskStatusPair.get(taskId));
+                        }
+                        if (taskTechniquePair.containsKey(taskId)) {
+                            uniqueReport.setTechniques(taskTechniquePair.get(taskId));
+                        }
+                        // 总工作量
+                        if (taskWorkloadPair.containsKey(taskId)) {
+                            uniqueReport.setWorkloadDesign(taskWorkloadPair.get(taskId));
+                        }
+                        // 以队伍为维度 设置每种施工工艺的工作量 总和
+                        if (bridgePlugPair.containsKey(taskId)) {
+                            // 钻可溶桥塞  钻复合桥塞
+                            IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
+                            item.setUnit("个数");
+                            item.setWorkload(bridgePlugPair.get(taskId));
+                            items.add(item);
+                        }
+                        if (runCountPair.containsKey(taskId)) {
+                            // 通刮洗  冲砂
+                            IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
+                            item.setUnit("趟数");
+                            item.setWorkload(runCountPair.get(taskId));
+                            items.add(item);
+                        }
+                        if (hourCountPair.containsKey(taskId)) {
+                            // 液氮泵车(时间D)  千型泵车(时间H)
+                            IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
+                            item.setUnit("小时");
+                            item.setWorkload(hourCountPair.get(taskId));
+                            items.add(item);
+                        }
+                        if (waterVolumePair.containsKey(taskId)) {
+                            // 注水
+                            IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
+                            item.setUnit("方");
+                            item.setWorkload(waterVolumePair.get(taskId));
+                            items.add(item);
+                        }
+                        if (finishedTaskIds.contains(taskId)) {
+                            // 涉及到 井数 工作量 只有完工的任务 井数 +1
+                            IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
+                            item.setUnit("井数");
+                            item.setWorkload(new BigDecimal(1));
+                            items.add(item);
+                        }
+                        if (cumulativeWorkingLayersPair.containsKey(taskId)) {
+                            // 压裂大包 压裂总包
+                            IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
+                            item.setUnit("段数");
+                            item.setWorkload(cumulativeWorkingLayersPair.get(taskId));
+                            items.add(item);
+                        }
+                        if (pumpTripsPair.containsKey(taskId) || mixSandPair.containsKey(taskId)) {
+                            // 主压裂车 当日泵车台次
+                            IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
+                            item.setUnit("台次");
+                            BigDecimal tempPumpTrip = pumpTripsPair.get(taskId);
+                            BigDecimal tempMixSand = mixSandPair.get(taskId);
+                            item.setWorkload((ObjUtil.isEmpty(tempPumpTrip)?BigDecimal.ZERO:tempPumpTrip).add(ObjUtil.isEmpty(tempMixSand)?BigDecimal.ZERO:tempMixSand));
+                            items.add(item);
                         }
-                        uniqueReport.setNonProductionRate(nonProductionRate);
-                    }
-                    uniqueReport.setTaskId(taskId);
-                    if (taskDeptNamePair.containsKey(taskId)) {
-                        uniqueReport.setDeptName(taskDeptNamePair.get(taskId));
-                    }
-                    if (taskCreateTimePair.containsKey(taskId)) {
-                        uniqueReport.setCreateTime(taskCreateTimePair.get(taskId));
-                    }
-                    if (taskFuelPair.containsKey(taskId)) {
-                        uniqueReport.setTotalDailyFuel(taskFuelPair.get(taskId));
-                    }
-                    if (taskProjectDeptPair.containsKey(taskId)) {
-                        uniqueReport.setProjectDeptName(taskProjectDeptPair.get(taskId));
-                    }
-                    if (projectPair.containsKey(projectId)) {
-                        uniqueReport.setManufactureName(projectPair.get(projectId));
-                    }
-                    if (taskPair.containsKey(taskId)) {
-                        uniqueReport.setWellName(taskPair.get(taskId));
-                    }
-                    // 施工周期
-                    if (taskPeriodPair.containsKey(taskId)) {
-                        uniqueReport.setPeriod(taskPeriodPair.get(taskId));
-                    }
-                    // 任务开始日期
-                    if (taskStartDatePair.containsKey(taskId)) {
-                        LocalDateTime startDate = taskStartDatePair.get(taskId);
-                        uniqueReport.setTaskStartDate(LocalDateTimeUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
-                    }
-                    if (taskStatusPair.containsKey(taskId)) {
-                        uniqueReport.setRdStatus(taskStatusPair.get(taskId));
-                    }
-                    if (taskTechniquePair.containsKey(taskId)) {
-                        uniqueReport.setTechniques(taskTechniquePair.get(taskId));
-                    }
-                    // 总工作量
-                    if (taskWorkloadPair.containsKey(taskId)) {
-                        uniqueReport.setWorkloadDesign(taskWorkloadPair.get(taskId));
-                    }
-                    // 以队伍为维度 设置每种施工工艺的工作量 总和
-                    if (bridgePlugPair.containsKey(taskId)) {
-                        // 钻可溶桥塞  钻复合桥塞
-                        IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
-                        item.setUnit("个数");
-                        item.setWorkload(bridgePlugPair.get(taskId));
-                        items.add(item);
-                    }
-                    if (runCountPair.containsKey(taskId)) {
-                        // 通刮洗  冲砂
-                        IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
-                        item.setUnit("趟数");
-                        item.setWorkload(runCountPair.get(taskId));
-                        items.add(item);
-                    }
-                    if (hourCountPair.containsKey(taskId)) {
-                        // 液氮泵车(时间D)  千型泵车(时间H)
-                        IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
-                        item.setUnit("小时");
-                        item.setWorkload(hourCountPair.get(taskId));
-                        items.add(item);
-                    }
-                    if (waterVolumePair.containsKey(taskId)) {
-                        // 注水
-                        IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
-                        item.setUnit("方");
-                        item.setWorkload(waterVolumePair.get(taskId));
-                        items.add(item);
-                    }
-                    if (finishedTaskIds.contains(taskId)) {
-                        // 涉及到 井数 工作量 只有完工的任务 井数 +1
-                        IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
-                        item.setUnit("井数");
-                        item.setWorkload(new BigDecimal(1));
-                        items.add(item);
-                    }
-                    if (cumulativeWorkingLayersPair.containsKey(taskId)) {
-                        // 压裂大包 压裂总包
-                        IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
-                        item.setUnit("段数");
-                        item.setWorkload(cumulativeWorkingLayersPair.get(taskId));
-                        items.add(item);
-                    }
-                    if (pumpTripsPair.containsKey(taskId) || mixSandPair.containsKey(taskId)) {
-                        // 主压裂车 当日泵车台次
-                        IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
-                        item.setUnit("台次");
-                        BigDecimal tempPumpTrip = pumpTripsPair.get(taskId);
-                        BigDecimal tempMixSand = mixSandPair.get(taskId);
-                        item.setWorkload((ObjUtil.isEmpty(tempPumpTrip)?BigDecimal.ZERO:tempPumpTrip).add(ObjUtil.isEmpty(tempMixSand)?BigDecimal.ZERO:tempMixSand));
-                        items.add(item);
-                    }
                     /* if (mixSandPair.containsKey(taskId)) {
                         // 当日仪表/混砂 台次
                         IotRdDailyReportStatisticsItemVO item = new IotRdDailyReportStatisticsItemVO();
@@ -962,8 +964,9 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
                         item.setWorkload(mixSandPair.get(taskId));
                         items.add(item);
                     } */
-                    uniqueReport.setItems(items);
-                    result.add(uniqueReport);
+                        uniqueReport.setItems(items);
+                        result.add(uniqueReport);
+                    }
                 });
             }
         }