From 7f813393c5abc6beb3896ec4f08624fd152214a5 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sat, 6 Sep 2025 17:07:59 +0800 Subject: [PATCH] =?UTF-8?q?refactor(property):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=B0=B4=E8=A1=A8=E6=8A=84=E8=A1=A8=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TbMeterRecordServiceImpl.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index e43c7040..1492aaeb 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.property.service.impl.smartDevicesImpl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; @@ -169,20 +170,24 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { continue; } + String newReadingTime = result.getRecordTime(); + Date newReadingTimeDate = DateUtil.parse(newReadingTime); + Date oldReadingTimeDate = DateUtil.offset(newReadingTimeDate, DateField.HOUR, -1); + // 获取设备id Collection meterIds = infoList.stream().map(TbMeterInfoVo::getId).toList(); // 取出上次抄表记录 LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.in(TbMeterRecord::getMeterId, meterIds) - .orderByDesc(TbMeterRecord::getReadingTime) - .last("limit " + meterIds.size()); + .eq(TbMeterRecord::getReadingTime, oldReadingTimeDate) + .orderByDesc(TbMeterRecord::getReadingTime); List recordOld = baseMapper.selectList(lqw); List recordNew = new ArrayList<>(infoList.size()); boolean hasOldRecords = CollUtil.isNotEmpty(recordOld); - log.info("当前采集器ip下{}抄表记录, ip:{}", hasOldRecords ? "有" : "无", result.getIp()); + log.info("当前采集器ip下{}前一小时抄表记录, ip:{}", hasOldRecords ? "有" : "无", result.getIp()); // 创建meterId到旧记录的映射,提高查找效率 Map oldRecordMap = hasOldRecords ? recordOld.stream().collect(Collectors.toMap(TbMeterRecord::getMeterId, Function.identity())) : @@ -197,10 +202,12 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setTenantId(info.getTenantId()); // 获取当前读数 - BigDecimal currentReading = BigDecimal.valueOf( - result.getCollectionValue().get(Integer.parseInt(info.getMeterCode())) - ); - record.setCurrentReading(currentReading); + int meterCode = Integer.parseInt(info.getMeterCode()); + if (meterCode + 1 <= result.getCollectionValue().size()){ + record.setCurrentReading(BigDecimal.valueOf(result.getCollectionValue().get(meterCode))); + }else { + record.setCurrentReading(BigDecimal.ZERO); + } // 设置上次读数 if (hasOldRecords) { @@ -209,10 +216,10 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setPreviousReading(oldRecord.getCurrentReading()); } else { // 如果没有找到对应的旧记录,使用默认值 - record.setPreviousReading(BigDecimal.ZERO); + record.setPreviousReading(record.getCurrentReading()); } } else { - record.setPreviousReading(BigDecimal.ZERO); + record.setPreviousReading(record.getCurrentReading()); } record.setReadingMethod(MeterRecordTypeEnum.AUTO_RECORD.getCode());