Pārlūkot izejas kodu

设备离线通知redis操作切换至admin所在db进行操作

skyline 2 gadi atpakaļ
vecāks
revīzija
3413b5f368

+ 27 - 0
common/src/main/java/com/kym/common/config/RedisDBChangeUtil.java

@@ -0,0 +1,27 @@
+package com.kym.common.config;
+
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description redis db切换
+ * @date 2023-10-06 18:49
+ */
+@Component
+public class RedisDBChangeUtil {
+    private final StringRedisTemplate redisTemplate;
+
+    public RedisDBChangeUtil(StringRedisTemplate redisTemplate) {
+        this.redisTemplate = redisTemplate;
+    }
+
+    public void setDataBase(int num) {
+        LettuceConnectionFactory connectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
+        if (connectionFactory != null && num != connectionFactory.getDatabase()) {
+            connectionFactory.setDatabase(num);
+            this.redisTemplate.setConnectionFactory(connectionFactory);
+            connectionFactory.resetConnection();
+        }
+    }
+}

+ 12 - 3
service/src/main/java/com/kym/service/enplus/impl/EnNotifyServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.extra.mail.MailUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.kym.common.config.RedisDBChangeUtil;
 import com.kym.entity.admin.EquipmentInfo;
 import com.kym.entity.admin.MonitorLog;
 import com.kym.entity.common.RedisKeys;
@@ -21,7 +22,7 @@ import com.kym.service.utils.KymCache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -53,14 +54,17 @@ public class EnNotifyServiceImpl implements EnNotifyService {
 
     private final KymCache kymCache;
 
-    private final RedisTemplate<String, String> redisTemplate;
+    private final StringRedisTemplate redisTemplate;
+
+    private final RedisDBChangeUtil redisDBChangeUtil;
 
     @Value("${kym.notify-email}")
     private String notifyEmail;
 
     public EnNotifyServiceImpl(EnPlusService enPlusService, ChargeOrderService chargeOrderService,
                                AccountService accountService, WalletDetailService walletDetailService,
-                               MonitorLogService monitorLogService, EquipmentInfoService equipmentInfoService, KymCache kymCache, RedisTemplate<String, String> redisTemplate) {
+                               MonitorLogService monitorLogService, EquipmentInfoService equipmentInfoService,
+                               KymCache kymCache, StringRedisTemplate redisTemplate, RedisDBChangeUtil redisDBChangeUtil) {
         this.enPlusService = enPlusService;
         this.chargeOrderService = chargeOrderService;
         this.accountService = accountService;
@@ -69,6 +73,7 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         this.equipmentInfoService = equipmentInfoService;
         this.kymCache = kymCache;
         this.redisTemplate = redisTemplate;
+        this.redisDBChangeUtil = redisDBChangeUtil;
     }
 
 
@@ -89,6 +94,10 @@ public class EnNotifyServiceImpl implements EnNotifyService {
                 .eq(EquipmentInfo::getEquipmentId, connectorStatusInfo.getConnectorId().substring(0, 16))
                 .set(EquipmentInfo::getServiceStatus, connectorStatusInfo.getStatus())
                 .update();
+
+        // 切换到admin对应的db
+        redisDBChangeUtil.setDataBase(0);
+
         if (connectorStatusInfo.getStatus() == 0) {
             LOGGER.info("充电桩设备离线:{}", connectorStatusInfo.getConnectorId());
             // 如果设备离线,则存入redis