diff --git a/start/pom.xml b/start/pom.xml
index 6d15eb7..defe1fe 100644
--- a/start/pom.xml
+++ b/start/pom.xml
@@ -39,7 +39,7 @@
org.springframework.boot
spring-boot-maven-plugin
- com.zcloud.iotalarm.IotAlarmApplication
+ com.zcloud.Application
diff --git a/start/src/main/java/com/zcloud/Application.java b/start/src/main/java/com/zcloud/Application.java
index 4f26433..a640057 100644
--- a/start/src/main/java/com/zcloud/Application.java
+++ b/start/src/main/java/com/zcloud/Application.java
@@ -16,4 +16,4 @@ public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
-}
+}
\ No newline at end of file
diff --git a/start/src/main/resources/nacos/config-mq.yml b/start/src/main/resources/nacos/config-mq.yml
index 9e1b0b3..0460f79 100644
--- a/start/src/main/resources/nacos/config-mq.yml
+++ b/start/src/main/resources/nacos/config-mq.yml
@@ -1,9 +1,13 @@
mq:
topic: springcloudStream-jjb-dragon-test
server: ${common.mq.host}
+ threshold-alarm-topic: iot-alarm-threshold-event
+ dcs-alarm-topic: iot-alarm-dcs-event
spring:
cloud:
stream:
+ function:
+ definition: thresholdAlarmConsumer;dcsAlarmConsumer
bindings:
input:
destination: springcloudStream-jjb-dragon-test
@@ -11,6 +15,12 @@ spring:
output:
destination: springcloudStream-jjb-dragon-test
group: ${spring.application.name}-${spring.profiles.active}
+ thresholdAlarmConsumer-in-0:
+ destination: iot-alarm-threshold-event
+ group: iot-alarm-main-service
+ dcsAlarmConsumer-in-0:
+ destination: iot-alarm-dcs-event
+ group: iot-alarm-main-service
rocketmq:
binder:
name-server: ${common.mq.host}
@@ -18,4 +28,12 @@ spring:
bindings:
input:
consumer:
- tags: a
\ No newline at end of file
+ tags: a
+ thresholdAlarmConsumer-in-0:
+ consumer:
+ messageModel: CLUSTERING
+ orderly: false
+ dcsAlarmConsumer-in-0:
+ consumer:
+ messageModel: CLUSTERING
+ orderly: false
\ No newline at end of file
diff --git a/web-app/src/main/java/com/zcloud/mq/consumer/DcsAlarmEventConsumer.java b/web-app/src/main/java/com/zcloud/mq/consumer/DcsAlarmEventConsumer.java
new file mode 100644
index 0000000..c6f805a
--- /dev/null
+++ b/web-app/src/main/java/com/zcloud/mq/consumer/DcsAlarmEventConsumer.java
@@ -0,0 +1,203 @@
+package com.zcloud.mq.consumer;
+
+import com.zcloud.domain.gateway.AlarmDisposeLogGateway;
+import com.zcloud.domain.gateway.AlarmRecordGateway;
+import com.zcloud.domain.gateway.DeviceRegionGateway;
+import com.zcloud.domain.gateway.RegionSensorRelGateway;
+import com.zcloud.domain.gateway.SensorDeviceGateway;
+import com.zcloud.domain.model.AlarmDisposeLogE;
+import com.zcloud.domain.model.AlarmRecordE;
+import com.zcloud.domain.model.DeviceRegionE;
+import com.zcloud.domain.model.RegionSensorRelE;
+import com.zcloud.domain.model.SensorDeviceE;
+import com.zcloud.mq.event.DcsAlarmEvent;
+import com.zcloud.service.AlarmMessageService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.UUID;
+import java.util.function.Consumer;
+
+/**
+ * DcsAlarmEventConsumer - DCS报警事件消费者
+ * 消费来自同步服务的DCS报警事件,生成报警记录并自动分配区域负责人
+ * @Author wangyan
+ * @Date 2026-04-03 00:00:00
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class DcsAlarmEventConsumer {
+
+ private final SensorDeviceGateway sensorDeviceGateway;
+ private final RegionSensorRelGateway regionSensorRelGateway;
+ private final DeviceRegionGateway deviceRegionGateway;
+ private final AlarmRecordGateway alarmRecordGateway;
+ private final AlarmDisposeLogGateway alarmDisposeLogGateway;
+ private final AlarmMessageService alarmMessageService;
+
+ @Bean
+ public Consumer dcsAlarmConsumer() {
+ return event -> {
+ try {
+ log.info("收到DCS报警事件: sourceRecordKey={}, sensorCode={}, alarmDesc={}, alarmTime={}",
+ event.getSourceRecordKey(), event.getSensorCode(), event.getAlarmDesc(), event.getAlarmTime());
+
+ // 1. 查找传感器信息
+ SensorDeviceE sensorDevice = sensorDeviceGateway.getBySensorCode(event.getSensorCode());
+ if (sensorDevice == null) {
+ log.warn("未找到传感器: sensorCode={}", event.getSensorCode());
+ return;
+ }
+
+ // 2. 查找传感器绑定的区域
+ RegionSensorRelE regionSensorRel = regionSensorRelGateway.getBySensorId(sensorDevice.getId());
+ DeviceRegionE deviceRegion = null;
+ if (regionSensorRel != null && regionSensorRel.getFireRegionId() != null) {
+ deviceRegion = deviceRegionGateway.getByFireRegionId(regionSensorRel.getFireRegionId());
+ }
+
+ if (deviceRegion == null) {
+ log.warn("未找到传感器绑定的区域配置: sensorCode={}, sensorId={}",
+ event.getSensorCode(), sensorDevice.getId());
+ }
+
+ // 3. 生成报警记录
+ AlarmRecordE alarmRecord = buildAlarmRecord(event, sensorDevice, deviceRegion, regionSensorRel);
+ Long alarmId = alarmRecordGateway.add(alarmRecord);
+
+ // 4. 记录处置日志(自动分配)
+ AlarmDisposeLogE disposeLog = buildAutoAssignLog(alarmId, alarmRecord.getAlarmNo(),
+ deviceRegion != null ? deviceRegion.getManagerId() : null, event.getTenantId(), event.getOrgId());
+ alarmDisposeLogGateway.add(disposeLog);
+
+ // 5. 发送报警自动推送消息给区域负责人
+ if (deviceRegion != null && deviceRegion.getManagerId() != null) {
+ alarmMessageService.sendAutoPushMessage(alarmRecord, deviceRegion.getManagerId());
+ }
+
+ log.info("DCS报警记录生成成功: alarmId={}, alarmNo={}, managerId={}",
+ alarmId, alarmRecord.getAlarmNo(), alarmRecord.getManagerId());
+
+ } catch (Exception e) {
+ log.error("处理DCS报警事件失败: sourceRecordKey={}, error={}",
+ event.getSourceRecordKey(), e.getMessage(), e);
+ // 抛出异常让 RocketMQ 进行消息重试
+ throw new RuntimeException("处理DCS报警事件失败", e);
+ }
+ };
+ }
+
+ /**
+ * 构建报警记录实体
+ */
+ private AlarmRecordE buildAlarmRecord(DcsAlarmEvent event, SensorDeviceE sensorDevice,
+ DeviceRegionE deviceRegion, RegionSensorRelE regionSensorRel) {
+ AlarmRecordE alarmRecord = new AlarmRecordE();
+
+ // 业务ID和报警编号
+ alarmRecord.setAlarmRecordId(UUID.randomUUID().toString().replace("-", ""));
+ alarmRecord.setAlarmNo(generateAlarmNo("DCS"));
+
+ // 报警来源
+ alarmRecord.setAlarmSource("DCS");
+
+ // 设备来源描述快照
+ alarmRecord.setDeviceSourceDesc(event.getDeviceSourceDesc());
+
+ // 传感器信息
+ alarmRecord.setSensorId(sensorDevice.getId());
+ alarmRecord.setSensorCode(event.getSensorCode());
+ alarmRecord.setUnitName(sensorDevice.getUnitName());
+
+ // 区域信息(从传感器绑定关系获取)
+ if (regionSensorRel != null && regionSensorRel.getFireRegionId() != null) {
+ alarmRecord.setFireRegionId(regionSensorRel.getFireRegionId());
+ }
+
+ // 负责人信息(自动分配)
+ if (deviceRegion != null) {
+ alarmRecord.setDepartmentId(deviceRegion.getDepartmentId());
+ alarmRecord.setManagerId(deviceRegion.getManagerId());
+ }
+
+ // 报警级别和类型(DCS报警默认为一般级别)
+ alarmRecord.setAlarmLevel("NORMAL");
+ alarmRecord.setAlarmType("DCS_ALARM");
+
+ // 报警描述
+ alarmRecord.setAlarmDesc(event.getAlarmDesc());
+
+ // 报警时间
+ alarmRecord.setAlarmTime(event.getAlarmTime());
+ alarmRecord.setAssignTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+
+ // 状态:10(报警中-待研判)
+ alarmRecord.setStatus(10);
+
+ // 活跃告警标识
+ alarmRecord.setActiveFlag(1);
+
+ // 外部记录唯一键(用于去重)
+ alarmRecord.setSourceRecordKey(event.getSourceRecordKey());
+
+ // 租户和组织
+ alarmRecord.setTenantId(event.getTenantId());
+ alarmRecord.setOrgId(event.getOrgId());
+
+ // 删除标识
+ alarmRecord.setDeleteEnum("FALSE");
+
+ return alarmRecord;
+ }
+
+ /**
+ * 构建自动分配处置日志
+ */
+ private AlarmDisposeLogE buildAutoAssignLog(Long alarmId, String alarmNo, Long managerId, Long tenantId, Long orgId) {
+ AlarmDisposeLogE disposeLog = new AlarmDisposeLogE();
+
+ disposeLog.setAlarmDisposalLogId(UUID.randomUUID().toString().replace("-", ""));
+ disposeLog.setAlarmId(alarmId);
+ disposeLog.setAlarmNo(alarmNo);
+
+ // 操作类型:自动分配
+ disposeLog.setActionType("AUTO_ASSIGN");
+
+ // 状态变更:从无到10(待研判)
+ disposeLog.setBeforeStatus(null);
+ disposeLog.setAfterStatus(10);
+
+ // 操作人:系统自动分配,operatorId 为 managerId
+ disposeLog.setOperatorId(managerId);
+
+ // 操作说明
+ disposeLog.setActionDesc("系统自动分配区域负责人");
+
+ // 操作时间
+ disposeLog.setActionTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+
+ // 租户和组织
+ disposeLog.setTenantId(tenantId);
+ disposeLog.setOrgId(orgId);
+
+ // 删除标识
+ disposeLog.setDeleteEnum("FALSE");
+
+ return disposeLog;
+ }
+
+ /**
+ * 生成报警编号
+ * 格式:DCS-yyyyMMddHHmmss-随机码(8位)
+ */
+ private String generateAlarmNo(String alarmSource) {
+ String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
+ String randomCode = UUID.randomUUID().toString().replace("-", "").substring(0, 8);
+ return alarmSource + "-" + timestamp + "-" + randomCode;
+ }
+}
\ No newline at end of file
diff --git a/web-app/src/main/java/com/zcloud/mq/consumer/ThresholdAlarmEventConsumer.java b/web-app/src/main/java/com/zcloud/mq/consumer/ThresholdAlarmEventConsumer.java
new file mode 100644
index 0000000..e0cfaaa
--- /dev/null
+++ b/web-app/src/main/java/com/zcloud/mq/consumer/ThresholdAlarmEventConsumer.java
@@ -0,0 +1,227 @@
+package com.zcloud.mq.consumer;
+
+import com.zcloud.domain.gateway.AlarmDisposeLogGateway;
+import com.zcloud.domain.gateway.AlarmRecordGateway;
+import com.zcloud.domain.gateway.DeviceRegionGateway;
+import com.zcloud.domain.gateway.SensorDeviceGateway;
+import com.zcloud.domain.model.AlarmDisposeLogE;
+import com.zcloud.domain.model.AlarmRecordE;
+import com.zcloud.domain.model.DeviceRegionE;
+import com.zcloud.domain.model.SensorDeviceE;
+import com.zcloud.mq.event.ThresholdAlarmEvent;
+import com.zcloud.service.AlarmMessageService;
+import com.zcloud.service.AlarmTodoService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.UUID;
+import java.util.function.Consumer;
+
+/**
+ * ThresholdAlarmEventConsumer - 阈值报警事件消费者
+ * 消费来自同步服务的阈值报警事件,生成报警记录并自动分配区域负责人
+ * @Author wangyan
+ * @Date 2026-04-03 00:00:00
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class ThresholdAlarmEventConsumer {
+
+ private final SensorDeviceGateway sensorDeviceGateway;
+ private final DeviceRegionGateway deviceRegionGateway;
+ private final AlarmRecordGateway alarmRecordGateway;
+ private final AlarmDisposeLogGateway alarmDisposeLogGateway;
+ private final AlarmMessageService alarmMessageService;
+ private final AlarmTodoService alarmTodoService;
+
+ @Bean
+ public Consumer thresholdAlarmConsumer() {
+ return event -> {
+ try {
+ log.info("收到阈值报警事件: sensorCode={}, currentValue={}, thresholdType={}, alarmTime={}",
+ event.getSensorCode(), event.getCurrentValue(), event.getThresholdType(), event.getAlarmTime());
+
+ // 1. 查找传感器信息
+ SensorDeviceE sensorDevice = sensorDeviceGateway.getBySensorCode(event.getSensorCode());
+ if (sensorDevice == null) {
+ log.warn("未找到传感器: sensorCode={}", event.getSensorCode());
+ return;
+ }
+
+ // 2. 查找区域配置
+ DeviceRegionE deviceRegion = null;
+ if (event.getFireRegionId() != null) {
+ deviceRegion = deviceRegionGateway.getByFireRegionId(event.getFireRegionId());
+ }
+
+ if (deviceRegion == null) {
+ log.warn("未找到区域配置: fireRegionId={}", event.getFireRegionId());
+ }
+
+ // 3. 生成报警记录
+ AlarmRecordE alarmRecord = buildAlarmRecord(event, sensorDevice, deviceRegion);
+ Long alarmId = alarmRecordGateway.add(alarmRecord);
+
+// 4. 记录处置日志(自动分配)
+ AlarmDisposeLogE disposeLog = buildAutoAssignLog(alarmId, alarmRecord.getAlarmNo(),
+ deviceRegion != null ? deviceRegion.getManagerId() : null, event.getTenantId(), event.getOrgId());
+ alarmDisposeLogGateway.add(disposeLog);
+
+ // 5. 发送报警自动推送消息给区域负责人
+ if (deviceRegion != null && deviceRegion.getManagerId() != null) {
+ alarmMessageService.sendAutoPushMessage(alarmRecord, deviceRegion.getManagerId());
+ }
+
+ // 6. 新增负责人待办(PC端)
+ if (deviceRegion != null && deviceRegion.getManagerId() != null) {
+ alarmTodoService.addManagerTodo(alarmRecord, deviceRegion.getManagerId());
+ }
+
+ log.info("阈值报警记录生成成功: alarmId={}, alarmNo={}, managerId={}",
+ alarmId, alarmRecord.getAlarmNo(), alarmRecord.getManagerId());
+
+ } catch (Exception e) {
+ log.error("处理阈值报警事件失败: sensorCode={}, error={}",
+ event.getSensorCode(), e.getMessage(), e);
+ // 抛出异常让 RocketMQ 进行消息重试
+ throw new RuntimeException("处理阈值报警事件失败", e);
+ }
+ };
+ }
+
+ /**
+ * 构建报警记录实体
+ */
+ private AlarmRecordE buildAlarmRecord(ThresholdAlarmEvent event, SensorDeviceE sensorDevice, DeviceRegionE deviceRegion) {
+ AlarmRecordE alarmRecord = new AlarmRecordE();
+
+ // 业务ID和报警编号
+ alarmRecord.setAlarmRecordId(UUID.randomUUID().toString().replace("-", ""));
+ alarmRecord.setAlarmNo(generateAlarmNo("THRESHOLD"));
+
+ // 报警来源
+ alarmRecord.setAlarmSource("THRESHOLD");
+
+ // 设备来源描述快照
+ alarmRecord.setDeviceSourceDesc(event.getDeviceSourceDesc());
+
+ // 传感器信息
+ alarmRecord.setSensorId(sensorDevice.getId());
+ alarmRecord.setSensorCode(event.getSensorCode());
+ alarmRecord.setUnitName(sensorDevice.getUnitName());
+
+ // 区域信息
+ if (event.getFireRegionId() != null) {
+ alarmRecord.setFireRegionId(event.getFireRegionId());
+ }
+
+ // 负责人信息(自动分配)
+ if (deviceRegion != null) {
+ alarmRecord.setDepartmentId(deviceRegion.getDepartmentId());
+ alarmRecord.setManagerId(deviceRegion.getManagerId());
+ }
+
+ // 报警级别和类型
+ alarmRecord.setAlarmLevel(mapThresholdTypeToAlarmLevel(event.getThresholdType()));
+ alarmRecord.setAlarmType("THRESHOLD_ALARM");
+ alarmRecord.setThresholdType(event.getThresholdType());
+
+ // 告警值和比较方向
+ alarmRecord.setCurrentValue(event.getCurrentValue());
+ alarmRecord.setCompareFlag(mapThresholdTypeToCompareFlag(event.getThresholdType()));
+
+ // 报警时间
+ alarmRecord.setAlarmTime(event.getAlarmTime());
+ alarmRecord.setAssignTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+
+ // 状态:10(报警中-待研判)
+ alarmRecord.setStatus(10);
+
+ // 活跃告警标识
+ alarmRecord.setActiveFlag(1);
+
+ // 租户和组织
+ alarmRecord.setTenantId(event.getTenantId());
+ alarmRecord.setOrgId(event.getOrgId());
+
+ // 删除标识
+ alarmRecord.setDeleteEnum("FALSE");
+
+ return alarmRecord;
+ }
+
+ /**
+ * 构建自动分配处置日志
+ */
+ private AlarmDisposeLogE buildAutoAssignLog(Long alarmId, String alarmNo, Long managerId, Long tenantId, Long orgId) {
+ AlarmDisposeLogE disposeLog = new AlarmDisposeLogE();
+
+ disposeLog.setAlarmDisposalLogId(UUID.randomUUID().toString().replace("-", ""));
+ disposeLog.setAlarmId(alarmId);
+ disposeLog.setAlarmNo(alarmNo);
+
+ // 操作类型:自动分配
+ disposeLog.setActionType("AUTO_ASSIGN");
+
+ // 状态变更:从无到10(待研判)
+ disposeLog.setBeforeStatus(null);
+ disposeLog.setAfterStatus(10);
+
+ // 操作人:系统自动分配,operatorId 为 null
+ disposeLog.setOperatorId(managerId);
+
+ // 操作说明
+ disposeLog.setActionDesc("系统自动分配区域负责人");
+
+ // 操作时间
+ disposeLog.setActionTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+
+ // 租户和组织
+ disposeLog.setTenantId(tenantId);
+ disposeLog.setOrgId(orgId);
+
+ // 删除标识
+ disposeLog.setDeleteEnum("FALSE");
+
+ return disposeLog;
+ }
+
+ /**
+ * 生成报警编号
+ * 格式:THRESHOLD-yyyyMMddHHmmss-随机码(8位)
+ */
+ private String generateAlarmNo(String alarmSource) {
+ String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
+ String randomCode = UUID.randomUUID().toString().replace("-", "").substring(0, 8);
+ return alarmSource + "-" + timestamp + "-" + randomCode;
+ }
+
+ /**
+ * 阈值类型映射为报警级别
+ * LOW_LOW/HIGH_HIGH -> 紧急
+ * LOW/HIGH -> 一般
+ */
+ private String mapThresholdTypeToAlarmLevel(String thresholdType) {
+ if ("LOW_LOW".equals(thresholdType) || "HIGH_HIGH".equals(thresholdType)) {
+ return "URGENT";
+ }
+ return "NORMAL";
+ }
+
+ /**
+ * 阈值类型映射为比较方向
+ * LOW/LOW_LOW -> DOWN(下降)
+ * HIGH/HIGH_HIGH -> UP(上升)
+ */
+ private String mapThresholdTypeToCompareFlag(String thresholdType) {
+ if ("LOW".equals(thresholdType) || "LOW_LOW".equals(thresholdType)) {
+ return "DOWN";
+ }
+ return "UP";
+ }
+}
\ No newline at end of file
diff --git a/web-app/src/main/java/com/zcloud/mq/event/DcsAlarmEvent.java b/web-app/src/main/java/com/zcloud/mq/event/DcsAlarmEvent.java
new file mode 100644
index 0000000..53d789f
--- /dev/null
+++ b/web-app/src/main/java/com/zcloud/mq/event/DcsAlarmEvent.java
@@ -0,0 +1,50 @@
+package com.zcloud.mq.event;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * DcsAlarmEvent - DCS报警事件
+ * 来自同步服务的DCS报警事件
+ * @Author wangyan
+ * @Date 2026-04-03 00:00:00
+ */
+@Data
+public class DcsAlarmEvent implements Serializable {
+
+ /**
+ * 源记录唯一键(用于去重)
+ */
+ private String sourceRecordKey;
+
+ /**
+ * 传感器编码
+ */
+ private String sensorCode;
+
+ /**
+ * 报警描述
+ */
+ private String alarmDesc;
+
+ /**
+ * 报警时间(格式:yyyy-MM-dd HH:mm:ss)
+ */
+ private String alarmTime;
+
+ /**
+ * 设备来源描述
+ */
+ private String deviceSourceDesc;
+
+ /**
+ * 租户ID
+ */
+ private Long tenantId;
+
+ /**
+ * 组织ID
+ */
+ private Long orgId;
+}
\ No newline at end of file
diff --git a/web-app/src/main/java/com/zcloud/mq/event/ThresholdAlarmEvent.java b/web-app/src/main/java/com/zcloud/mq/event/ThresholdAlarmEvent.java
new file mode 100644
index 0000000..570763a
--- /dev/null
+++ b/web-app/src/main/java/com/zcloud/mq/event/ThresholdAlarmEvent.java
@@ -0,0 +1,56 @@
+package com.zcloud.mq.event;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * ThresholdAlarmEvent - 阈值报警事件
+ * 来自同步服务的阈值报警事件
+ * @Author wangyan
+ * @Date 2026-04-03 00:00:00
+ */
+@Data
+public class ThresholdAlarmEvent implements Serializable {
+
+ /**
+ * 传感器编码
+ */
+ private String sensorCode;
+
+ /**
+ * 当前值
+ */
+ private BigDecimal currentValue;
+
+ /**
+ * 阈值类型(LOW_LOW/LOW/HIGH/HIGH_HIGH)
+ */
+ private String thresholdType;
+
+ /**
+ * 报警时间(格式:yyyy-MM-dd HH:mm:ss)
+ */
+ private String alarmTime;
+
+ /**
+ * 设备来源描述
+ */
+ private String deviceSourceDesc;
+
+ /**
+ * 消防区域ID
+ */
+ private Long fireRegionId;
+
+ /**
+ * 租户ID
+ */
+ private Long tenantId;
+
+ /**
+ * 组织ID
+ */
+ private Long orgId;
+}
\ No newline at end of file
diff --git a/web-app/src/main/java/com/zcloud/service/AlarmMessageService.java b/web-app/src/main/java/com/zcloud/service/AlarmMessageService.java
index 302de78..a28c27a 100644
--- a/web-app/src/main/java/com/zcloud/service/AlarmMessageService.java
+++ b/web-app/src/main/java/com/zcloud/service/AlarmMessageService.java
@@ -8,7 +8,6 @@ import com.zcloud.gbscommon.utils.UuidUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
@@ -29,11 +28,9 @@ public class AlarmMessageService {
@DubboReference
private MessageFacade messageFacade;
- @Value("${alarm.message.template.auto-push:}")
- private String autoPushTemplateCode;
-
- @Value("${alarm.message.template.dispose-push:}")
- private String disposePushTemplateCode;
+ // TODO: 后续需要配置消息模板编码
+ private static final String AUTO_PUSH_TEMPLATE_CODE = "MT0001XX";
+ private static final String DISPOSE_PUSH_TEMPLATE_CODE = "MT0001XX";
/**
* 发送报警自动推送消息
@@ -54,11 +51,12 @@ public class AlarmMessageService {
messageTargetCmd.setUserId(managerId);
messageSendCmd.setTargetCmd(messageTargetCmd);
- messageSendCmd.setSourceCode(autoPushTemplateCode);
+ messageSendCmd.setSourceCode(AUTO_PUSH_TEMPLATE_CODE);
messageSendCmd.setNeedTokenEnum(false);
Map params = new HashMap<>();
params.put("deviceSourceDesc", alarmRecord.getDeviceSourceDesc());
+ params.put("alarmNo", alarmRecord.getAlarmNo());
params.put("alarmLevel", alarmRecord.getAlarmLevel());
params.put("alarmTime", alarmRecord.getAlarmTime());
params.put("alarmDesc", alarmRecord.getAlarmDesc());
@@ -91,11 +89,12 @@ public class AlarmMessageService {
messageTargetCmd.setUserId(disposeUserId);
messageSendCmd.setTargetCmd(messageTargetCmd);
- messageSendCmd.setSourceCode(disposePushTemplateCode);
+ messageSendCmd.setSourceCode(DISPOSE_PUSH_TEMPLATE_CODE);
messageSendCmd.setNeedTokenEnum(false);
Map params = new HashMap<>();
params.put("deviceSourceDesc", alarmRecord.getDeviceSourceDesc());
+ params.put("alarmNo", alarmRecord.getAlarmNo());
params.put("alarmLevel", alarmRecord.getAlarmLevel());
params.put("assignTime", alarmRecord.getAssignTime());
params.put("disposeRemark", alarmRecord.getDisposeRemark());
diff --git a/web-domain/src/main/java/com/zcloud/domain/gateway/SensorDeviceGateway.java b/web-domain/src/main/java/com/zcloud/domain/gateway/SensorDeviceGateway.java
index 6af0e0a..e471efa 100644
--- a/web-domain/src/main/java/com/zcloud/domain/gateway/SensorDeviceGateway.java
+++ b/web-domain/src/main/java/com/zcloud/domain/gateway/SensorDeviceGateway.java
@@ -28,4 +28,9 @@ public interface SensorDeviceGateway {
* 根据ID获取
*/
SensorDeviceE getById(Long id);
+
+ /**
+ * 根据传感器编码获取
+ */
+ SensorDeviceE getBySensorCode(String sensorCode);
}
\ No newline at end of file
diff --git a/web-infrastructure/src/main/java/com/zcloud/gatewayimpl/SensorDeviceGatewayImpl.java b/web-infrastructure/src/main/java/com/zcloud/gatewayimpl/SensorDeviceGatewayImpl.java
index beb5e8c..df33fa8 100644
--- a/web-infrastructure/src/main/java/com/zcloud/gatewayimpl/SensorDeviceGatewayImpl.java
+++ b/web-infrastructure/src/main/java/com/zcloud/gatewayimpl/SensorDeviceGatewayImpl.java
@@ -4,6 +4,7 @@ import com.zcloud.domain.gateway.SensorDeviceGateway;
import com.zcloud.domain.model.SensorDeviceE;
import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.repository.SensorDeviceRepository;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -50,4 +51,19 @@ public class SensorDeviceGatewayImpl implements SensorDeviceGateway {
BeanUtils.copyProperties(d, sensorDeviceE);
return sensorDeviceE;
}
+
+ @Override
+ public SensorDeviceE getBySensorCode(String sensorCode) {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(SensorDeviceDO::getSensorCode, sensorCode)
+ .eq(SensorDeviceDO::getDeleteEnum, "FALSE");
+
+ SensorDeviceDO d = sensorDeviceRepository.getOne(wrapper);
+ if (d == null) {
+ return null;
+ }
+ SensorDeviceE sensorDeviceE = new SensorDeviceE();
+ BeanUtils.copyProperties(d, sensorDeviceE);
+ return sensorDeviceE;
+ }
}
\ No newline at end of file