forked from dyf/fys-Multi-tenant
feat(device): 新增发送紧急通知功能
- 在 AppDeviceXinghanController 中添加 sendAlarmMessage接口 - 在 DeviceXinghanBizService 中实现 sendAlarmMessage 方法 - 新增 XinghanSendAlarmMessageRule 类用于处理紧急通知发送逻辑 - 在 DeviceRedisKeyConstants 中添加 DEVICE_ALARM_MESSAGE_KEY_PREFIX 常量 - 修改 XinghanDeviceDataRule 和 XinghanSendMsgRule 中的相关逻辑
This commit is contained in:
@ -39,8 +39,7 @@ import static com.fuyuanshen.common.core.constant.GlobalConstants.GLOBAL_REDIS_K
|
||||
import static com.fuyuanshen.common.core.utils.Bitmap80x12Generator.buildArr;
|
||||
import static com.fuyuanshen.common.core.utils.Bitmap80x12Generator.generateFixedBitmapData;
|
||||
import static com.fuyuanshen.common.core.utils.ImageToCArrayConverter.convertHexToDecimal;
|
||||
import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_BOOT_LOGO_KEY_PREFIX;
|
||||
import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_KEY_PREFIX;
|
||||
import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.*;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@ -62,7 +61,7 @@ public class DeviceXinghanBizService {
|
||||
"ins_DetectGrade", Map.of(1, "低档", 2, "中档", 3, "高档"),
|
||||
"ins_LightGrade", Map.of(1, "强光", 2, "弱光"),
|
||||
"ins_SOSGrade", Map.of(1, "爆闪模式", 2, "红蓝模式"),
|
||||
"ins_ShakeBit", Map.of(0, "未静止报警", 1, "正在静止报警")
|
||||
"ins_ShakeBit", Map.of(1, "开启报警")
|
||||
// 再加 4、5、6…… 档,直接往 Map 里塞即可
|
||||
);
|
||||
|
||||
@ -166,6 +165,7 @@ public class DeviceXinghanBizService {
|
||||
list.add(bo.getPosition());
|
||||
list.add(bo.getCode());
|
||||
RedisUtils.setCacheList(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + deviceObj.getDeviceImei() + ":app_send_message_data", list);
|
||||
RedisUtils.expire(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + deviceObj.getDeviceImei() + ":app_send_message_data", Duration.ofSeconds(5 * 60L));
|
||||
|
||||
Map<String, Object> payload = Map.of("ins_TexTrans",
|
||||
Collections.singletonList(0));
|
||||
@ -195,6 +195,62 @@ public class DeviceXinghanBizService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送报警信息
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
public int sendAlarmMessage(AppDeviceSendMsgBo bo) {
|
||||
try {
|
||||
List<Long> deviceIds = bo.getDeviceIds();
|
||||
if (deviceIds == null || deviceIds.isEmpty()) {
|
||||
throw new ServiceException("请选择设备");
|
||||
}
|
||||
|
||||
for (Long deviceId : deviceIds) {
|
||||
Device device = deviceMapper.selectById(deviceId);
|
||||
if (device == null) {
|
||||
throw new ServiceException("设备不存在" + deviceId);
|
||||
}
|
||||
if(isDeviceOffline(device.getDeviceImei())){
|
||||
throw new ServiceException(device.getDeviceName()+",设备已断开连接");
|
||||
}
|
||||
try {
|
||||
|
||||
RedisUtils.setCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DEVICE_ALARM_MESSAGE_KEY_PREFIX, bo.getSendMsg(),Duration.ofSeconds(5 * 60L));
|
||||
|
||||
Map<String, Object> payload = Map.of("ins_BreakNews",
|
||||
Collections.singletonList(0));
|
||||
String topic = MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei();
|
||||
String json = JsonUtils.toJsonString(payload);
|
||||
|
||||
try {
|
||||
mqttGateway.sendMsgToMqtt(topic, 1, json);
|
||||
} catch (Exception e) {
|
||||
log.error("发送紧急通知失败, topic={}, payload={}", topic, json, e);
|
||||
throw new ServiceException("发送紧急通知失败:" + e.getMessage());
|
||||
}
|
||||
log.info("发送紧急通知=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),json);
|
||||
|
||||
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.eq("id", deviceId)
|
||||
.eq("binding_user_id", AppLoginHelper.getUserId())
|
||||
.set("send_msg", bo.getSendMsg());
|
||||
deviceMapper.update(updateWrapper);
|
||||
recordDeviceLog(device.getId(), device.getDeviceName(), "发送紧急通知", bo.getSendMsg(), AppLoginHelper.getUserId());
|
||||
} catch (Exception e) {
|
||||
log.info("设备发送告警信息信息失败:{}" ,deviceId);
|
||||
throw new ServiceException("设备发送告警信息信息失败");
|
||||
}
|
||||
|
||||
}
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
throw new ServiceException("发送告警信息指令失败");
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ---------------------------------- 私有通用方法 ---------------------------------- */
|
||||
|
||||
private void sendCommand(DeviceInstructDto dto,
|
||||
|
Reference in New Issue
Block a user