From 0835e859d09df98cba6b29ecfc38f8e552275d7f Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Tue, 11 Mar 2025 21:15:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(iot):=20=E6=B7=BB=E5=8A=A0=E6=B8=A9?= =?UTF-8?q?=E5=BA=A6=E5=BC=82=E5=B8=B8=E4=BA=8B=E4=BB=B6=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 RecordDataServiceImpl 中增加事件名称参数 - 更新 TemperatureExceededEvent 类,添加事件名称字段 - 新增 EventLog 类用于记录事件日志- 创建 EventLogRepository 用于存储事件日志 - 实现 TemperatureExceededEventListener 监听温度异常事件并记录日志 --- .../entity/TemperatureExceededEvent.java | 4 +- .../service/impl/RecordDataServiceImpl.java | 10 ++-- .../TemperatureExceededEventListener.java | 45 +++++++++++++++ .../modules/iot/tsl/entity/EventLog.java | 55 +++++++++++++++++++ .../iot/tsl/repo/EventLogRepository.java | 7 +++ 5 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/TemperatureExceededEventListener.java create mode 100644 src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/EventLog.java create mode 100644 src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/EventLogRepository.java diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/TemperatureExceededEvent.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/TemperatureExceededEvent.java index 458aabf..4419632 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/TemperatureExceededEvent.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/TemperatureExceededEvent.java @@ -12,10 +12,12 @@ import org.springframework.context.ApplicationEvent; public class TemperatureExceededEvent extends ApplicationEvent { private final RecordData recordData; private final double reducedParameter; + private final String eventName; - public TemperatureExceededEvent(Object source, RecordData recordData, double reducedParameter) { + public TemperatureExceededEvent(Object source, RecordData recordData, double reducedParameter, String eventName) { super(source); this.recordData = recordData; this.reducedParameter = reducedParameter; + this.eventName = eventName; } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java index b7effd6..6356236 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java @@ -92,12 +92,12 @@ public class RecordDataServiceImpl extends ServiceImpl { - processParam(recordData, param); + processParam(recordData, param, event); }); } } - private void processParam(RecordData recordData, Param param) { + private void processParam(RecordData recordData, Param param, Event event) { // 获取参数的默认值和比较类型 Double defaultValue = param.getDefaultValue(); Param.CompareType compareType = param.getCompareType(); @@ -113,17 +113,17 @@ public class RecordDataServiceImpl extends ServiceImpl defaultValue) { - eventPublisher.publishEvent(new TemperatureExceededEvent(this, recordData, value)); + eventPublisher.publishEvent(new TemperatureExceededEvent(this, recordData, value, event.getName())); } break; case LT: if (value < defaultValue) { - eventPublisher.publishEvent(new TemperatureExceededEvent(this, recordData, value)); + eventPublisher.publishEvent(new TemperatureExceededEvent(this, recordData, value, event.getName())); } break; case EQ: if (value == defaultValue) { - eventPublisher.publishEvent(new TemperatureExceededEvent(this, recordData, value)); + eventPublisher.publishEvent(new TemperatureExceededEvent(this, recordData, value, event.getName())); } break; default: diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/TemperatureExceededEventListener.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/TemperatureExceededEventListener.java new file mode 100644 index 0000000..dd8d487 --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/TemperatureExceededEventListener.java @@ -0,0 +1,45 @@ +package com.zsc.edu.gateway.modules.iot.record.service.impl; + +import com.zsc.edu.gateway.modules.iot.device.repo.DeviceRepository; +import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; +import com.zsc.edu.gateway.modules.iot.record.entity.TemperatureExceededEvent; +import com.zsc.edu.gateway.modules.iot.tsl.entity.EventLog; +import com.zsc.edu.gateway.modules.iot.tsl.repo.EventLogRepository; +import com.zsc.edu.gateway.modules.iot.tsl.repo.EventRepository; +import jakarta.annotation.Resource; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author zhuang + */ +@Component +public class TemperatureExceededEventListener implements ApplicationListener { + + @Resource + private EventLogRepository eventLogRepository; + + @Resource + private DeviceRepository deviceRepository; + + @Resource + private EventRepository eventRepository; + + @EventListener + @Override + public void onApplicationEvent(TemperatureExceededEvent event) { + RecordData recordData = event.getRecordData(); + System.out.println(event.getEventName() + "数值如下:" + event.getReducedParameter()); + // 创建 EventLog 对象 + EventLog eventLog = new EventLog(); + eventLog.setName(event.getEventName()); + eventLog.setRecordId(recordData.getId()); + eventLog.setTriggerTime(LocalDateTime.now()); + eventLog.setIsRead(false); + // 保存 EventLog 对象到数据库 + eventLogRepository.insert(eventLog); + } +} \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/EventLog.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/EventLog.java new file mode 100644 index 0000000..bbf5c43 --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/entity/EventLog.java @@ -0,0 +1,55 @@ +package com.zsc.edu.gateway.modules.iot.tsl.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author zhuang + */ +@Setter +@Getter +@NoArgsConstructor +@AllArgsConstructor +@TableName("iot_event_log") +public class EventLog { + /** + * 序列化主键(有数据库提供,非自增) + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 关联上报数据id + */ + private String recordId; + + /** + * 关联上报数据 + */ + @TableField(exist = false) + private RecordData recordData; + + /** + * 触发时间 + */ + private LocalDateTime triggerTime; + + /** + * 是否已读 + */ + private Boolean isRead; +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/EventLogRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/EventLogRepository.java new file mode 100644 index 0000000..09fe9ea --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/repo/EventLogRepository.java @@ -0,0 +1,7 @@ +package com.zsc.edu.gateway.modules.iot.tsl.repo; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zsc.edu.gateway.modules.iot.tsl.entity.EventLog; + +public interface EventLogRepository extends BaseMapper { +}