From dc0fe96652b8bf9c19f24ac7e75a7b1f7914f117 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Wed, 8 Oct 2025 13:38:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fuyuanshen/equipment/domain/Device.java | 2 ++ .../domain/query/DeviceQueryCriteria.java | 3 ++- .../equipment/service/impl/DeviceServiceImpl.java | 14 ++++++++------ .../resources/mapper/equipment/DeviceMapper.xml | 3 +++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java index 778ab9db..967029dc 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java @@ -163,6 +163,8 @@ public class Device extends TenantEntity { /** * 在线状态(0离线,1在线,2异常) + * online_status */ private Integer onlineStatus; + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java index 684bc86e..9ab461dc 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java @@ -117,7 +117,8 @@ public class DeviceQueryCriteria extends BaseEntity { /** * 设备在线状态 - * 0:离线;1:在线 + * 0:离线;1:在线;2:故障 + * online_status */ private Integer onlineStatus; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java index 5fbe8fab..39e72cf5 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -342,6 +342,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme for (Long id : ids) { DeviceAssignments deviceAssignment = deviceAssignmentsMapper.selectById(id); + if (deviceAssignment == null) { + continue; + } Device device = deviceMapper.selectById(deviceAssignment.getDeviceId()); if (StringUtils.isNotEmpty(deviceAssignment.getAssigneeName())) { @@ -814,11 +817,11 @@ public class DeviceServiceImpl extends ServiceImpl impleme if (StringUtils.isNotBlank(device.getDeviceImei())) { DeviceAlarmVo latestAlarm = deviceAlarmMapper.selectLatestByDeviceImei(device.getDeviceImei()); // 判断是否正在告警:未处理的告警(treatmentState=1)且不是电子围栏告警(deviceAction!=3) - if (latestAlarm != null && - latestAlarm.getTreatmentState() != null && - latestAlarm.getTreatmentState() == 1 && - latestAlarm.getDeviceAction() != null && - latestAlarm.getDeviceAction() != 3) { + if (latestAlarm != null && + latestAlarm.getTreatmentState() != null && + latestAlarm.getTreatmentState() == 1 && + latestAlarm.getDeviceAction() != null && + latestAlarm.getDeviceAction() != 3) { vo.setIsAlarming(true); } else { vo.setIsAlarming(false); @@ -834,5 +837,4 @@ public class DeviceServiceImpl extends ServiceImpl impleme } - } diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml index 76dfcd90..a8008360 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml @@ -71,6 +71,9 @@ and da.active = #{criteria.deviceStatus} + + and d.online_status = #{criteria.onlineStatus} + and d.group_id = #{criteria.groupId} From 6c99cef65d736c22b50bba6ff364c83ed095b481 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Wed, 8 Oct 2025 14:11:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A3=E9=99=A4=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/mqtt/rule/bjq/BjqModeRule.java | 59 +++++++++++++++---- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqModeRule.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqModeRule.java index 6b58b053..349452d4 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqModeRule.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqModeRule.java @@ -1,11 +1,16 @@ package com.fuyuanshen.global.mqtt.rule.bjq; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.fuyuanshen.common.core.constant.GlobalConstants; 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.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.IDeviceAlarmService; import com.fuyuanshen.global.mqtt.base.MqttMessageRule; import com.fuyuanshen.global.mqtt.base.MqttRuleContext; import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants; @@ -16,6 +21,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.time.Duration; +import java.util.Date; import java.util.concurrent.CompletableFuture; 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 { private final DeviceService deviceService; + private final IDeviceAlarmService deviceAlarmService; + @Override public String getCommandType() { @@ -45,18 +53,18 @@ public class BjqModeRule implements MqttMessageRule { String mainLightMode = convertArr[1].toString(); String batteryRemainingTime = convertArr[2].toString(); - if(StringUtils.isNotBlank(mainLightMode)){ - log.info("设备离线mainLightMode:{}",mainLightMode); - if("0".equals(mainLightMode)){ + if (StringUtils.isNotBlank(mainLightMode)) { + log.info("设备离线mainLightMode:{}", 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"); - 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); - if("1".equals(messageSendingValue)){ - //设置为故障状态 + if ("1".equals(messageSendingValue)) { + // 设置为故障状态 RedisUtils.setCacheObject(deviceOnlineStatusRedisKey, "2"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); 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; - if(RedisUtils.getCacheObject(deviceRedisKey) != null){ + if (RedisUtils.getCacheObject(deviceRedisKey) != null) { RedisUtils.deleteObject(deviceRedisKey); } + cancelAlarm(context.getDeviceImei()); } } // 发送设备状态和位置信息到Redis - syncSendDeviceDataToRedisWithFuture(context.getDeviceImei(),mainLightMode); - String deviceRedisKey = GlobalConstants.GLOBAL_REDIS_KEY+DeviceRedisKeyConstants.DEVICE_KEY_PREFIX + context.getDeviceImei() + DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX; + syncSendDeviceDataToRedisWithFuture(context.getDeviceImei(), mainLightMode); + String deviceRedisKey = GlobalConstants.GLOBAL_REDIS_KEY + DeviceRedisKeyConstants.DEVICE_KEY_PREFIX + context.getDeviceImei() + DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX; // 存储到Redis RedisUtils.setCacheObject(deviceRedisKey, batteryRemainingTime); @@ -90,13 +99,13 @@ public class BjqModeRule implements MqttMessageRule { * * @param deviceImei 设备IMEI */ - public void syncSendDeviceDataToRedisWithFuture(String deviceImei,Object convertValue) { + public void syncSendDeviceDataToRedisWithFuture(String deviceImei, Object convertValue) { // CompletableFuture.runAsync(() -> { // // }); try { // 将设备状态信息存储到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 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); + } + } + } + }