瀏覽代碼

pms 保养查询 运行记录模板包含多个累计时长 公里数 属性

zhangcl 1 月之前
父節點
當前提交
5c550d3495

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaintenancebom/IotMaintenanceBomController.java

@@ -194,6 +194,7 @@ public class IotMaintenanceBomController {
         Map<Long, List<IotDeviceRunLogRespVO>> deviceRunLogPair = new HashMap<>();
         // key(设备id-累计时长属性名称)    value时长属性累计时长数值
         Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
+        // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
         List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
         // key(设备id-累计公里数属性名称)    value公里数属性累计公里数值
         Map<String, BigDecimal> tempTotalMileagePair = new HashMap<>();

+ 50 - 13
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorder/IotMainWorkOrderServiceImpl.java

@@ -177,6 +177,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
         } else {
             mainBomS = iotMaintenanceBomMapper.selectList(mainBomReqVO);
         }
+        Set<String> boundedMultiAttrNames = new HashSet<>();
         if (CollUtil.isNotEmpty(mainBomS)) {
             mainBomDeviceIds = CollUtil.isEmpty(mainBomS)
                     ? Collections.emptySet()
@@ -184,14 +185,38 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
                     .map(IotMaintenanceBomDO::getDeviceId) // 获取 deviceId
                     .filter(Objects::nonNull)      // 过滤非空值
                     .collect(Collectors.toSet());  // 收集到 Set 中
+            // 查询所有保养计划 保养项 中已经绑定的 多个累计时长 公里数 属性名称值
+            mainBomS.forEach(bom -> {
+                if (StrUtil.isNotBlank(bom.getType())) {
+                    // 累计公里数属性
+                    boundedMultiAttrNames.add(bom.getType());
+                }
+                if (StrUtil.isNotBlank(bom.getCode())) {
+                    // 累计时长属性
+                    boundedMultiAttrNames.add(bom.getCode());
+                }
+            });
         }
         deviceIds.addAll(mainBomDeviceIds);
         if (CollUtil.isEmpty(deviceIds)){
             // 没有设备信息,返回空列表
             return PageResult.empty();
         }
+        // 查询 运行记录模板中包含多个累计 时长 公里数 属性的集合
+        List<IotDeviceRunLogRespVO> multipleAccumulatedData = new ArrayList<>();
+        if (CollUtil.isNotEmpty(deviceIds) && CollUtil.isNotEmpty(boundedMultiAttrNames)) {
+            multipleAccumulatedData = iotDeviceRunLogService.multipleAccumulatedData(deviceIds, boundedMultiAttrNames);
+        }
+        // key(设备id-累计时长属性名称)    value时长属性累计时长数值
+        Map<String, BigDecimal> tempTotalRunDataPair = new HashMap<>();
+        if (CollUtil.isNotEmpty(multipleAccumulatedData)) {
+            multipleAccumulatedData.forEach(data -> {
+                String uniqueKey = StrUtil.join("-", data.getDeviceId(), data.getPointName());
+                tempTotalRunDataPair.put(uniqueKey, data.getTotalRunTime());
+            });
+        }
 
-        // 如果没有待执行的保养工单,
+        // 查询 运行记录模板中 正常的累计时长 公里数集合
         Map<Long, IotDeviceRunLogRespVO> deviceRunLogMap = iotDeviceRunLogService.getDeviceRunLogMap(new ArrayList<>(deviceIds));
         // 以设备为维度统计每个设备相关的保养项的最近保养距离 key设备id    value设备下每个保养项的的最小保养距离集合
         Map<Long, List<Map<String, Object>>> orderDistancePair = new HashMap<>();
@@ -206,25 +231,37 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
                 // 计算每个保养项 每个保养规则下的 距离保养时间 单位 小时
                 if (ObjUtil.isNotEmpty(bom.getRunningTimeRule()) && 0 == bom.getRunningTimeRule()) {
                     // 运行时间保养规则
+                    BigDecimal totalRunTime = BigDecimal.ZERO;
                     if (deviceRunLogMap.containsKey(bom.getDeviceId())) {
-                        BigDecimal totalRunTime = deviceRunLogMap.get(bom.getDeviceId()).getTotalRunTime();
-                        BigDecimal lastRunningTime = bom.getLastRunningTime();      // 上次保养运行时间
-                        BigDecimal runningTimePeriod = bom.getNextRunningTime();    // 运行时间周期
-                        BigDecimal timePeriodLead = bom.getTimePeriodLead();    // 运行时间周期提前量
-                        // runningTimeDistance = (lastRunningTime.add(runningTimePeriod).subtract(timePeriodLead)).subtract(totalRunTime);
-                        runningTimeDistance = runningTimePeriod.subtract(totalRunTime.subtract(lastRunningTime));
+                        totalRunTime = deviceRunLogMap.get(bom.getDeviceId()).getTotalRunTime();
+                    } else {
+                        // 运行记录模板中包含多个累计时长 公里数类型的属性
+                        String uniqueKey = StrUtil.join("-", bom.getDeviceId(), bom.getCode());
+                        if (tempTotalRunDataPair.containsKey(uniqueKey)) {
+                            totalRunTime = tempTotalRunDataPair.get(uniqueKey);
+                        }
                     }
+                    BigDecimal lastRunningTime = bom.getLastRunningTime();      // 上次保养运行时间
+                    BigDecimal runningTimePeriod = bom.getNextRunningTime();    // 运行时间周期
+                    BigDecimal timePeriodLead = bom.getTimePeriodLead();    // 运行时间周期提前量
+                    runningTimeDistance = runningTimePeriod.subtract(totalRunTime.subtract(lastRunningTime));
                 }
                 if (ObjUtil.isNotEmpty(bom.getMileageRule()) && 0 == bom.getMileageRule()) {
                     // 运行里程保养规则 累计运行里程规则 累计运行里程 >= (上次保养运行里程+运行里程周期-提前量)
+                    BigDecimal totalMileage = BigDecimal.ZERO;
                     if (deviceRunLogMap.containsKey(bom.getDeviceId())) {
-                        BigDecimal totalMileage = deviceRunLogMap.get(bom.getDeviceId()).getTotalMileage();
-                        BigDecimal lastRunningKilo = bom.getLastRunningKilometers();      // 上次保养运行里程
-                        BigDecimal runningKiloPeriod = bom.getNextRunningKilometers();    // 运行里程周期
-                        BigDecimal kiloCycleLead = bom.getKiloCycleLead();    // 运行里程周期提前量
-                        // runningKiloDistance = (lastRunningKilo.add(runningKiloPeriod).subtract(kiloCycleLead)).subtract(totalMileage);
-                        runningKiloDistance = runningKiloPeriod.subtract(totalMileage.subtract(lastRunningKilo));
+                        totalMileage = deviceRunLogMap.get(bom.getDeviceId()).getTotalMileage();
+                    } else {
+                        // 运行记录模板中包含多个累计时长 公里数类型的属性
+                        String uniqueKey = StrUtil.join("-", bom.getDeviceId(), bom.getType());
+                        if (tempTotalRunDataPair.containsKey(uniqueKey)) {
+                            totalMileage = tempTotalRunDataPair.get(uniqueKey);
+                        }
                     }
+                    BigDecimal lastRunningKilo = bom.getLastRunningKilometers();      // 上次保养运行里程
+                    BigDecimal runningKiloPeriod = bom.getNextRunningKilometers();    // 运行里程周期
+                    BigDecimal kiloCycleLead = bom.getKiloCycleLead();    // 运行里程周期提前量
+                    runningKiloDistance = runningKiloPeriod.subtract(totalMileage.subtract(lastRunningKilo));
                 }
                 if (ObjUtil.isNotEmpty(bom.getNaturalDateRule()) && 0 == bom.getNaturalDateRule()) {
                     // 自然日期保养规则