forked from dyf/fys-Multi-tenant
feat(device): 新增报警类型枚举并优化设备指令处理逻辑
- 新增 AlarmTypeEnum 枚举类,定义 SOS 和静止报警类型 -优化 AppAuthController 中版本信息解析逻辑,增强空值处理 - 统一设备指令接口参数类型为 DeviceXinghanInstructDto - 在 DeviceXinghanBizService 中实现 SOS 报警创建逻辑 -重构 XinghanDeviceDataRule 报警处理流程,使用统一枚举类型- 添加蓝牙模式下 SOS 指令的特殊处理逻辑- 完善报警 Redis 缓存键构建和续期机制
This commit is contained in:
@ -23,6 +23,7 @@ import com.fuyuanshen.global.mqtt.base.MqttXinghanJson;
|
||||
import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants;
|
||||
import com.fuyuanshen.global.mqtt.constants.XingHanCommandTypeConstants;
|
||||
import com.fuyuanshen.global.mqtt.listener.domain.FunctionAccessStatus;
|
||||
import com.fuyuanshen.web.enums.AlarmTypeEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -127,18 +128,18 @@ public class XinghanDeviceDataRule implements MqttMessageRule {
|
||||
// 1. 处理 SOS 报警
|
||||
handleSingleAlarm(deviceImei,
|
||||
sos > 0,
|
||||
AlarmType.SOS);
|
||||
AlarmTypeEnum.SOS);
|
||||
int shake = Optional.ofNullable(status.getStaShakeBit()).orElse(0);
|
||||
// 2. 处理 Shake 报警
|
||||
handleSingleAlarm(deviceImei,
|
||||
shake > 0,
|
||||
AlarmType.SHAKE);
|
||||
AlarmTypeEnum.SHAKE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用:对单个报警源的“开始/结束”生命周期管理
|
||||
*/
|
||||
private void handleSingleAlarm(String deviceImei, boolean nowAlarming, AlarmType type) {
|
||||
private void handleSingleAlarm(String deviceImei, boolean nowAlarming, AlarmTypeEnum type) {
|
||||
String redisKey = buildAlarmRedisKey(deviceImei, type);
|
||||
|
||||
Long alarmId = RedisUtils.getCacheObject(redisKey);
|
||||
@ -184,7 +185,7 @@ public class XinghanDeviceDataRule implements MqttMessageRule {
|
||||
/**
|
||||
* 新建报警 Bo
|
||||
*/
|
||||
private DeviceAlarmBo createAlarmBo(String deviceImei, AlarmType type) {
|
||||
private DeviceAlarmBo createAlarmBo(String deviceImei, AlarmTypeEnum type) {
|
||||
Device device = deviceService.selectDeviceByImei(deviceImei);
|
||||
if (device == null) {
|
||||
return null;
|
||||
@ -212,24 +213,11 @@ public class XinghanDeviceDataRule implements MqttMessageRule {
|
||||
/**
|
||||
* key 构建
|
||||
*/
|
||||
private String buildAlarmRedisKey(String deviceImei, AlarmType type) {
|
||||
private String buildAlarmRedisKey(String deviceImei, AlarmTypeEnum type) {
|
||||
return StrUtil.format("{}{}{}{}:alarm_id",
|
||||
GLOBAL_REDIS_KEY, DEVICE_KEY_PREFIX, deviceImei, type.getSuffix());
|
||||
}
|
||||
|
||||
/**
|
||||
* 报警类型枚举
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
enum AlarmType {
|
||||
SOS("_sos", "SOS报警"),
|
||||
SHAKE("_shake", "静止报警");
|
||||
|
||||
private final String suffix;
|
||||
private final String desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步发送位置信息到Redis(使用CompletableFuture)
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user