Jelajahi Sumber

pms 瑞鹰平均油耗 修复bug

zhangcl 1 bulan lalu
induk
melakukan
2c029bb4a1

+ 18 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/IotRyDailyReportController.java

@@ -37,7 +37,9 @@ import javax.validation.Valid;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -1263,6 +1265,8 @@ public class IotRyDailyReportController {
         BigDecimal totalPowerConsumption = BigDecimal.ZERO;
         // 总油耗
         BigDecimal totalFuelConsumption = BigDecimal.ZERO;
+        // 平均油耗
+        BigDecimal averageFuelConsumption = BigDecimal.ZERO;
         // key队伍id      value施工井数
         BigDecimal constructionWells = BigDecimal.ZERO;
         // key队伍id      value完工井数
@@ -1320,6 +1324,20 @@ public class IotRyDailyReportController {
             result.put("totalPowerConsumption", totalPowerConsumption);
             // 累计油耗
             result.put("totalFuelConsumption", totalFuelConsumption);
+            // 平均油耗
+            if (ObjUtil.isNotEmpty(pageReqVO.getCreateTime())) {
+                LocalDateTime[] createTimes = pageReqVO.getCreateTime();
+                // 获取开始时间和结束时间
+                LocalDateTime startTime = createTimes[0];
+                LocalDateTime endTime = createTimes[1];
+                // 截断到日期(忽略时分秒)
+                LocalDate startDate = startTime.toLocalDate();
+                LocalDate endDate = endTime.toLocalDate();
+                // 计算天数:日期差 + 1(包含首尾两天)
+                long days = ChronoUnit.DAYS.between(startDate, endDate) + 1;
+                averageFuelConsumption = totalFuelConsumption.divide(new BigDecimal(days), 2, RoundingMode.HALF_UP);
+                result.put("averageFuelConsumption", averageFuelConsumption);
+            }
 
             // 汇总 指定搜索时间段内的 总进尺  累计用电量 累计油耗
             if ("1".equals(pageReqVO.getProjectClassification())) {

+ 6 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/vo/IotRyDailyReportStatisticsRespVO.java

@@ -54,10 +54,14 @@ public class IotRyDailyReportStatisticsRespVO {
     @ExcelProperty("累计用电量(kWh)")
     private BigDecimal cumulativePowerConsumption = BigDecimal.ZERO;
 
-    @Schema(description = "累计油耗()")
-    @ExcelProperty("累计油耗()")
+    @Schema(description = "累计油耗()")
+    @ExcelProperty("累计油耗()")
     private BigDecimal cumulativeFuelConsumption = BigDecimal.ZERO;
 
+    @Schema(description = "平均油耗(升)")
+    @ExcelProperty("平均油耗(升)")
+    private BigDecimal averageFuelConsumption = BigDecimal.ZERO;
+
     @Schema(description = "运行时效")
     private BigDecimal transitTime = BigDecimal.ZERO;
 

+ 44 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrydailyreport/IotRyDailyReportServiceImpl.java

@@ -1195,6 +1195,21 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
 
         }
 
+        Long days;
+        if (ObjUtil.isNotEmpty(pageReqVO.getCreateTime())) {
+            LocalDateTime[] createTimes = pageReqVO.getCreateTime();
+            // 获取开始时间和结束时间
+            LocalDateTime startTime = createTimes[0];
+            LocalDateTime endTime = createTimes[1];
+            // 截断到日期(忽略时分秒)
+            LocalDate startDate = startTime.toLocalDate();
+            LocalDate endDate = endTime.toLocalDate();
+            // 计算天数:日期差 + 1(包含首尾两天)
+            days = ChronoUnit.DAYS.between(startDate, endDate) + 1;
+        } else {
+            days = 0l;
+        }
+
         // 生成返回的数据列表集合
         projectDeptPair.forEach((deptId, dept) -> {
             IotRyDailyReportStatisticsRespVO statistics = new IotRyDailyReportStatisticsRespVO();
@@ -1206,7 +1221,13 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
             statistics.setCumulativeConstructWells(cumulativeConstructWellsPair.get(deptId));
             statistics.setCumulativeCompletedWells(cumulativeCompletedWellsPair.get(deptId));
             statistics.setCumulativePowerConsumption(cumulativePowerConsumptionPair.get(deptId));
-            statistics.setCumulativeFuelConsumption(cumulativeFuelConsumptionPair.get(deptId));
+            // 累计油耗
+            BigDecimal cumulativeFuelConsumption = cumulativeFuelConsumptionPair.get(deptId);
+            statistics.setCumulativeFuelConsumption(cumulativeFuelConsumption);
+            // 平均油耗
+            if (ObjUtil.isNotEmpty(cumulativeFuelConsumption) && ObjUtil.isNotEmpty(pageReqVO.getCreateTime())) {
+                statistics.setAverageFuelConsumption(cumulativeFuelConsumption.divide(new BigDecimal(days), 2, RoundingMode.HALF_UP));
+            }
             statistics.setTransitTime(cumulativeTransitTimePair.get(deptId));
             statistics.setNonProductiveTime(cumulativeNonProductionPair.get(deptId));
             result.add(statistics);
@@ -1552,6 +1573,21 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
             }
         }
 
+        Long days;
+        if (ObjUtil.isNotEmpty(pageReqVO.getCreateTime())) {
+            LocalDateTime[] createTimes = pageReqVO.getCreateTime();
+            // 获取开始时间和结束时间
+            LocalDateTime startTime = createTimes[0];
+            LocalDateTime endTime = createTimes[1];
+            // 截断到日期(忽略时分秒)
+            LocalDate startDate = startTime.toLocalDate();
+            LocalDate endDate = endTime.toLocalDate();
+            // 计算天数:日期差 + 1(包含首尾两天)
+            days = ChronoUnit.DAYS.between(startDate, endDate) + 1;
+        } else {
+            days = 0l;
+        }
+
         // 生成返回的数据列表集合
         teamDeptPair.forEach((teamDeptId, dept) -> {
             IotRyDailyReportStatisticsRespVO statistics = new IotRyDailyReportStatisticsRespVO();
@@ -1563,7 +1599,13 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
             statistics.setCumulativeConstructWells(totalTasksPair.get(teamDeptId));
             statistics.setCumulativeCompletedWells(completedTasksPair.get(teamDeptId));
             statistics.setCumulativePowerConsumption(cumulativePowerConsumptionPair.get(teamDeptId));
-            statistics.setCumulativeFuelConsumption(cumulativeFuelConsumptionPair.get(teamDeptId));
+            // 累计油耗
+            BigDecimal cumulativeFuelConsumption = cumulativeFuelConsumptionPair.get(teamDeptId);
+            statistics.setCumulativeFuelConsumption(cumulativeFuelConsumption);
+            // 平均油耗
+            if (ObjUtil.isNotEmpty(cumulativeFuelConsumption) && ObjUtil.isNotEmpty(pageReqVO.getCreateTime())) {
+                statistics.setAverageFuelConsumption(cumulativeFuelConsumption.divide(new BigDecimal(days), 2, RoundingMode.HALF_UP));
+            }
             statistics.setTransitTime(cumulativeTransitTimePair.get(teamDeptId));
             result.add(statistics);
         });

+ 6 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java

@@ -275,9 +275,15 @@ public class DeptServiceImpl implements DeptService {
         Set<Long> parentIds = new HashSet<>();
         parentIds.add(DeptDO.PARENT_ID_ROOT);
 
+        // 存储最终需要返回的部门列表
+        List<DeptDO> resultDepts = new ArrayList<>();
+
         // 查询当前登录人所属部门
         Long userId = SecurityFrameworkUtils.getLoginUserId();
         AdminUserDO user = userMapper.selectById(userId);
+        if (ObjUtil.isEmpty(user)) {
+            return resultDepts;
+        }
         AtomicReference<Long> deptId = new AtomicReference<>(user.getDeptId());
         if (CollUtil.isNotEmpty(reqVO.getDeptIds())) {
             // 如果传递了参数 则是要查询指定部门的所有子部门
@@ -285,8 +291,6 @@ public class DeptServiceImpl implements DeptService {
                 deptId.set(departmentId);
             });
         }
-        // 存储最终需要返回的部门列表
-        List<DeptDO> resultDepts = new ArrayList<>();
 
         DataPermissionUtils.executeIgnore(() -> {
             DeptDO dept = getDept(deptId.get());