@ -1,11 +1,16 @@
package com.fuyuanshen.global.mqtt.rule.bjq ;
package com.fuyuanshen.global.mqtt.rule.bjq ;
import cn.hutool.core.bean.BeanUtil ;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper ;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper ;
import com.fuyuanshen.common.core.constant.GlobalConstants ;
import com.fuyuanshen.common.core.constant.GlobalConstants ;
import com.fuyuanshen.common.core.utils.StringUtils ;
import com.fuyuanshen.common.core.utils.StringUtils ;
import com.fuyuanshen.common.core.utils.date.DurationUtils ;
import com.fuyuanshen.common.redis.utils.RedisUtils ;
import com.fuyuanshen.common.redis.utils.RedisUtils ;
import com.fuyuanshen.equipment.domain.Device ;
import com.fuyuanshen.equipment.domain.Device ;
import com.fuyuanshen.equipment.domain.bo.DeviceAlarmBo ;
import com.fuyuanshen.equipment.domain.vo.DeviceAlarmVo ;
import com.fuyuanshen.equipment.service.DeviceService ;
import com.fuyuanshen.equipment.service.DeviceService ;
import com.fuyuanshen.equipment.service.IDeviceAlarmService ;
import com.fuyuanshen.global.mqtt.base.MqttMessageRule ;
import com.fuyuanshen.global.mqtt.base.MqttMessageRule ;
import com.fuyuanshen.global.mqtt.base.MqttRuleContext ;
import com.fuyuanshen.global.mqtt.base.MqttRuleContext ;
import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants ;
import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants ;
@ -16,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component ;
import org.springframework.stereotype.Component ;
import java.time.Duration ;
import java.time.Duration ;
import java.util.Date ;
import java.util.concurrent.CompletableFuture ;
import java.util.concurrent.CompletableFuture ;
import static com.fuyuanshen.common.core.constant.GlobalConstants.FUNCTION_ACCESS_KEY ;
import static com.fuyuanshen.common.core.constant.GlobalConstants.FUNCTION_ACCESS_KEY ;
@ -31,6 +37,8 @@ import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.*;
public class BjqModeRule implements MqttMessageRule {
public class BjqModeRule implements MqttMessageRule {
private final DeviceService deviceService ;
private final DeviceService deviceService ;
private final IDeviceAlarmService deviceAlarmService ;
@Override
@Override
public String getCommandType ( ) {
public String getCommandType ( ) {
@ -45,18 +53,18 @@ public class BjqModeRule implements MqttMessageRule {
String mainLightMode = convertArr [ 1 ] . toString ( ) ;
String mainLightMode = convertArr [ 1 ] . toString ( ) ;
String batteryRemainingTime = convertArr [ 2 ] . toString ( ) ;
String batteryRemainingTime = convertArr [ 2 ] . toString ( ) ;
if ( StringUtils . isNotBlank ( mainLightMode ) ) {
if ( StringUtils . isNotBlank ( mainLightMode ) ) {
log . info ( " 设备离线mainLightMode: {} " , mainLightMode ) ;
log . info ( " 设备离线mainLightMode: {} " , mainLightMode ) ;
if ( " 0 " . equals ( mainLightMode ) ) {
if ( " 0 " . equals ( mainLightMode ) ) {
//设备离线
// 设备离线
String deviceOnlineStatusRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + DeviceRedisKeyConstants . DEVICE_ONLINE_STATUS_KEY_PREFIX ;
String deviceOnlineStatusRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + DeviceRedisKeyConstants . DEVICE_ONLINE_STATUS_KEY_PREFIX ;
RedisUtils . setCacheObject ( deviceOnlineStatusRedisKey , " 0 " ) ;
RedisUtils . setCacheObject ( deviceOnlineStatusRedisKey , " 0 " ) ;
String sendMessageIng = GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + " :messageSending " ;
String sendMessageIng = GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + " :messageSending " ;
String messageSendingValue = RedisUtils . getCacheObject ( sendMessageIng ) ;
String messageSendingValue = RedisUtils . getCacheObject ( sendMessageIng ) ;
if ( " 1 " . equals ( messageSendingValue ) ) {
if ( " 1 " . equals ( messageSendingValue ) ) {
//设置为故障状态
// 设置为故障状态
RedisUtils . setCacheObject ( deviceOnlineStatusRedisKey , " 2 " ) ;
RedisUtils . setCacheObject ( deviceOnlineStatusRedisKey , " 2 " ) ;
UpdateWrapper < Device > updateWrapper = new UpdateWrapper < > ( ) ;
UpdateWrapper < Device > updateWrapper = new UpdateWrapper < > ( ) ;
updateWrapper . eq ( " device_imei " , context . getDeviceImei ( ) ) ;
updateWrapper . eq ( " device_imei " , context . getDeviceImei ( ) ) ;
@ -66,14 +74,15 @@ public class BjqModeRule implements MqttMessageRule {
// 解除告警
// 解除告警
String deviceRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DeviceRedisKeyConstants . DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + DEVICE_ALARM_KEY_PREFIX ;
String deviceRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DeviceRedisKeyConstants . DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + DEVICE_ALARM_KEY_PREFIX ;
if ( RedisUtils . getCacheObject ( deviceRedisKey ) ! = null ) {
if ( RedisUtils . getCacheObject ( deviceRedisKey ) ! = null ) {
RedisUtils . deleteObject ( deviceRedisKey ) ;
RedisUtils . deleteObject ( deviceRedisKey ) ;
}
}
cancelAlarm ( context . getDeviceImei ( ) ) ;
}
}
}
}
// 发送设备状态和位置信息到Redis
// 发送设备状态和位置信息到Redis
syncSendDeviceDataToRedisWithFuture ( context . getDeviceImei ( ) , mainLightMode ) ;
syncSendDeviceDataToRedisWithFuture ( context . getDeviceImei ( ) , mainLightMode ) ;
String deviceRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DeviceRedisKeyConstants . DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX ;
String deviceRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DeviceRedisKeyConstants . DEVICE_KEY_PREFIX + context . getDeviceImei ( ) + DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX ;
// 存储到Redis
// 存储到Redis
RedisUtils . setCacheObject ( deviceRedisKey , batteryRemainingTime ) ;
RedisUtils . setCacheObject ( deviceRedisKey , batteryRemainingTime ) ;
@ -90,13 +99,13 @@ public class BjqModeRule implements MqttMessageRule {
*
*
* @param deviceImei 设备IMEI
* @param deviceImei 设备IMEI
*/
*/
public void syncSendDeviceDataToRedisWithFuture ( String deviceImei , Object convertValue ) {
public void syncSendDeviceDataToRedisWithFuture ( String deviceImei , Object convertValue ) {
// CompletableFuture.runAsync(() -> {
// CompletableFuture.runAsync(() -> {
//
//
// });
// });
try {
try {
// 将设备状态信息存储到Redis中
// 将设备状态信息存储到Redis中
String deviceRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DeviceRedisKeyConstants . DEVICE_KEY_PREFIX + deviceImei + DEVICE_LIGHT_MODE_KEY_PREFIX ;
String deviceRedisKey = GlobalConstants . GLOBAL_REDIS_KEY + DeviceRedisKeyConstants . DEVICE_KEY_PREFIX + deviceImei + DEVICE_LIGHT_MODE_KEY_PREFIX ;
// 存储到Redis
// 存储到Redis
RedisUtils . setCacheObject ( deviceRedisKey , convertValue . toString ( ) ) ;
RedisUtils . setCacheObject ( deviceRedisKey , convertValue . toString ( ) ) ;
@ -107,5 +116,29 @@ public class BjqModeRule implements MqttMessageRule {
}
}
/**
* 解除告警
*
* @param deviceImei 设备IMEI
*/
public void cancelAlarm ( String deviceImei ) {
DeviceAlarmVo deviceAlarmVo = deviceAlarmService . queryLatestByDeviceImei ( deviceImei ) ;
DeviceAlarmBo deviceAlarmBo = new DeviceAlarmBo ( ) ;
if ( deviceAlarmVo ! = null ) {
if ( deviceAlarmVo . getFinishTime ( ) = = null ) {
BeanUtil . copyProperties ( deviceAlarmVo , deviceAlarmBo ) ;
deviceAlarmBo . setFinishTime ( new Date ( ) ) ;
String durationBetween = DurationUtils . getDurationBetween ( deviceAlarmVo . getStartTime ( ) , deviceAlarmBo . getFinishTime ( ) ) ;
deviceAlarmBo . setDurationTime ( durationBetween ) ;
// 0已处理, 1未处理
deviceAlarmBo . setTreatmentState ( 0 ) ;
// 告警状态, 0 解除告警, 1 告警中
deviceAlarmBo . setAlarmState ( 0 ) ;
deviceAlarmService . updateByBo ( deviceAlarmBo ) ;
}
}
}
}
}