|
@@ -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()) {
|
|
|
// 自然日期保养规则
|