|
|
@@ -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);
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
}
|