diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java index 3b8b3b9fcf..27179073e8 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java @@ -170,6 +170,7 @@ public class DeviceServiceImpl implements DeviceService { for (DeviceModelRulesDO deviceModelRulesDO : deviceModelRulesDOList) { DevicePointRulesDO devicePointRulesDO = new DevicePointRulesDO(); BeanUtils.copyProperties(deviceModelRulesDO, devicePointRulesDO); + devicePointRulesDO.setId(null); devicePointRulesDO.setDeviceId(deviceId); devicePointRulesDOList.add(devicePointRulesDO); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml index 3804d3e6db..df35f684d8 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml @@ -30,6 +30,9 @@ left join iot_device iod on mo.machine_id = iod.id where mo.deleted = 0 and mo.machine_id is not null + and iod.id is not null + and iod.deleted = 0 + and mo.deleted = 0 and mo.code like concat(concat('%', #{pageReqVO.lineNode}), '%') diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java index 9157b7ad0b..487bb10d84 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java @@ -313,9 +313,10 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { ); if (energyDevice == null || StringUtils.isBlank(energyDevice.getRules())) { - return Collections.emptyList(); + return buildEmptyLast7Hours(LocalDateTime.now()); } + // 2. 解析规则 List rules = JsonUtils.parseArray(energyDevice.getRules(), OperationRulesVO.class); if (rules.isEmpty()) return Collections.emptyList(); @@ -371,6 +372,35 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { return result; } + + private List buildEmptyLast7Hours(LocalDateTime end) { + List result = new ArrayList<>(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH"); + LocalDateTime start = end.minusHours(7); + + for (int i = 0; i < 7; i++) { + LocalDateTime hourTime = start.plusHours(i); + HourEnergyValueVO vo = new HourEnergyValueVO(); + vo.setHour(hourTime.format(formatter)); + vo.setValue(formatDouble(0D)); + result.add(vo); + } + return result; + } + + private List buildEmptyLast7Days(LocalDate endDate) { + List result = new ArrayList<>(); + int days = 7; + for (int i = 0; i < days; i++) { + LocalDate day = endDate.minusDays(days - i).plusDays(1); // 确保顺序从过去到今天 + DayEnergyValueVO vo = new DayEnergyValueVO(); + vo.setDay(day.toString()); + vo.setValue(formatDouble(0D)); + result.add(vo); + } + return result; + } + @Override public List latestSevenDaysStatistics(Long deviceTypeId, Long orgId) { @@ -383,8 +413,9 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { .last("LIMIT 1") ); + if (energyDevice == null || StringUtils.isBlank(energyDevice.getRules())) { - return Collections.emptyList(); + return buildEmptyLast7Days(LocalDate.now()); } // 解析规则 @@ -413,7 +444,7 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { List> rows = tDengineService.queryLastDataByDaySafe(deviceIds, startDate, days); - // day -> deviceId -> cache + Map> dayCacheMap = new LinkedHashMap<>(); for (Map row : rows) {