From 5115c9ec856ace9e7167f31842844051252e911b Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Fri, 12 Sep 2025 21:21:55 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E6=96=B0=E5=A2=9E=20EnergyConsumptionContr?= =?UTF-8?q?oller=EF=BC=8C=E6=8F=90=E4=BE=9B=E8=83=BD=E8=80=97=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=8E=A5=E5=8F=A3=20-=20=E6=96=B0=E5=A2=9E=20FlowCont?= =?UTF-8?q?roller=EF=BC=8C=E6=8F=90=E4=BE=9B=E4=BA=BA=E8=A1=8C=E6=B5=81?= =?UTF-8?q?=E9=87=8F=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3=20-=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20TbMeterRecordServiceImpl=EF=BC=8C=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E4=B8=8A=E6=AC=A1=E8=AF=BB=E6=95=B0=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cockpit/EnergyConsumptionController.java | 27 ++++++++++++ .../controller/cockpit/FlowController.java | 18 ++++++++ .../property/rocketmq/RocketMqConstants.java | 5 +++ .../rocketmq/consumer/PassRecordConsumer.java | 42 +++++++++++++++++++ .../TbMeterRecordServiceImpl.java | 15 +++---- 5 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/PassRecordConsumer.java diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java index 6ebb6c32..2d3af9f9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java @@ -1,8 +1,16 @@ package org.dromara.property.controller.cockpit; +import cn.hutool.core.date.DateUtil; +import jakarta.annotation.Resource; +import org.dromara.common.core.domain.R; +import org.dromara.property.service.smartDevicesService.ITbMeterRecordService; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Date; +import java.util.Map; + /** * 大屏能耗接口 */ @@ -10,6 +18,25 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/cockpit") public class EnergyConsumptionController { + @Resource + private ITbMeterRecordService tbMeterRecordService; + /** + * 获取近一个月水、电能耗 + * + * @return List + */ + @GetMapping("/energy/consumption") + public R getEnergyConsumption() { + Date now = new Date(); + String year = DateUtil.format(now, "yyyy"); + String month = DateUtil.format(now, "yyyy-MM"); + String day = DateUtil.format(now, "yyyy-MM-dd"); + + Map power = tbMeterRecordService.getEnergyTrend(null, null, 1L, day, month, year); + Map water = tbMeterRecordService.getEnergyTrend(null, null, 2L, day, month, year); + + return R.ok(Map.of("power", power, "water", water)); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java index 8c64eb28..e5442b99 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java @@ -1,5 +1,9 @@ package org.dromara.property.controller.cockpit; +import org.dromara.common.core.domain.R; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.property.rocketmq.RocketMqConstants; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -9,4 +13,18 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/cockpit") public class FlowController { + + /** + * 获取当天24小时人行流量 + * + * @return list + */ + @GetMapping("/personFlow/today") + public R getPersonFlowToday() { + if (RedisUtils.isExistsObject(RocketMqConstants.PASS_RECORD)) { + return R.ok(RedisUtils.getCacheObject(RocketMqConstants.PASS_RECORD)); + } else { + return R.fail("数据不存在"); + } + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java index b34618c9..2bfedb4a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java @@ -15,10 +15,15 @@ public interface RocketMqConstants { // 授权记录消费组 String AUTH_GROUP = "AUTH_GROUP"; + // 通行记录消费组 + String PASS_GROUP = "PASS_GROUP"; + /*-----------------------------------消息tag------------------------------------*/ // 仪表记录 String METER_RECORD = "METER_RECORD_TAG"; // 授权记录 String AUTH_RECORD = "AUTH_MESSAGE_REPORT"; + // 通行记录 + String PASS_RECORD = "PASS_RECORD_REPORT"; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/PassRecordConsumer.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/PassRecordConsumer.java new file mode 100644 index 00000000..8d3a055e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/PassRecordConsumer.java @@ -0,0 +1,42 @@ +package org.dromara.property.rocketmq.consumer; + +import cn.hutool.json.JSONUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.property.rocketmq.RocketMqConstants; +import org.dromara.property.rocketmq.domain.MeterResult; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author lsm + * @apiNote PassRecordConsumer + * @since 2025/9/12 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@RocketMQMessageListener( + topic = RocketMqConstants.TOPIC, + consumerGroup = RocketMqConstants.PASS_GROUP, + selectorExpression = RocketMqConstants.PASS_RECORD +) +public class PassRecordConsumer implements RocketMQListener { + + @Override + public void onMessage(MessageExt ext) { + log.info("消费通行记录上报数据,数据长度={}", ext.getBody().length); + try { + List result = JSONUtil.toList(new String(ext.getBody()), Object[].class); + RedisUtils.setCacheObject(RocketMqConstants.PASS_RECORD, result); + } catch (Exception e) { + log.error("消费仪表上报数据处理失败,", e); + } + + } +} 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 7d5011cd..860029fb 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 @@ -209,19 +209,20 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setCurrentReading(BigDecimal.ZERO); } - // 设置上次读数 + /// 设置上次读数 + BigDecimal previousReading; if (hasOldRecords) { TbMeterRecord oldRecord = oldRecordMap.get(info.getId()); - // 如果没有找到对应的旧记录,使用默认值 - record.setPreviousReading(Objects.requireNonNullElse(oldRecord, record).getCurrentReading()); + previousReading = (oldRecord != null) ? oldRecord.getCurrentReading() : record.getCurrentReading(); } else { - record.setPreviousReading(record.getCurrentReading()); + previousReading = record.getCurrentReading(); } - // 如果上次抄表记录为0,则设置为当前读数 - if (record.getPreviousReading().compareTo(BigDecimal.ZERO) == 0) { - record.setPreviousReading(record.getCurrentReading()); + // 如果上次读数为0,则使用当前读数(避免因采集器离线导致的异常) + if (previousReading.compareTo(BigDecimal.ZERO) == 0) { + previousReading = record.getCurrentReading(); } + record.setPreviousReading(previousReading); // 通信状态改为离线 TbMeterInfoBo bo = new TbMeterInfoBo();