Sfoglia il codice sorgente

fix:ios服务端RedisKey监听逻辑优化

hidewnd 1 settimana fa
parent
commit
a4c7d2038b

+ 55 - 24
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/monitor/RedisKeyExpirationListener.java

@@ -1,18 +1,19 @@
 package com.ytpm.lemonios.monitor;
 
+import cn.hutool.core.util.StrUtil;
 import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.feign.RiskFeign;
 import com.ytpm.lemonios.dao.AppUserMapper;
 import com.ytpm.risk.enums.BannedTypeEnum;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.data.redis.connection.Message;
 import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
 import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.lang.NonNull;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
 import java.util.Objects;
@@ -27,9 +28,15 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
 
     @Resource
     private AppUserMapper appUserMapper;
-    @Autowired
+    @Resource
     private RiskFeign riskFeign;
 
+    @Value("${spring.application.name:}")
+    private String applicationName;
+
+    private static final String FLAG_LOCK = "lock";
+    private static final String FLAG_UNLOCK = "unlock";
+
     /**
      * Creates new {@link } for {@code __keyevent@*__:expired} messages.
      *
@@ -38,42 +45,66 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
     public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
         super(listenerContainer);
     }
- 
+
     /**
      * 监听redis过期的 key 进行处理
      */
     @Override
-    public void onMessage(Message message, byte[] pattern) {
+    public void onMessage(@NonNull Message message, byte[] pattern) {
         String key = String.valueOf(message);
-        log.error("App-Service 发现预定风控用户:{}",key);
-        if(key.startsWith("lock_")){
+        // 全局监听
+        if (key.startsWith("lock_") || key.startsWith("unlock_")) {
             String[] arr = key.split("_");
-            lockUser(arr[1], UserStatusEnum.RISK.getCode());
+            if (arr.length < 2) {
+                return;
+            }
+            handleUserLock(key, arr[1], arr[0]);
         }
-        /**
-         * 用户解锁
-         */
-        if(key.startsWith("unlock_")){
+        // 仅限自身服务的监听
+        String serviceKey = StrUtil.replace(applicationName, "-service", "");
+        if (key.startsWith(serviceKey)) {
             String[] arr = key.split("_");
-            YtDyzUser dyzUser = new YtDyzUser();
-            dyzUser.setUserId(arr[1]);
-            dyzUser.setUserStatus(1);
-            appUserMapper.updateUser(dyzUser);
-            riskFeign.addBlockingRecord(arr[1]);
+            if (arr.length < 3) {
+                return;
+            }
+            handleUserLock(key, arr[2], arr[1]);
+        }
+    }
+
+    private void handleUserLock(String key, String userId, String flag) {
+        YtDyzUser dyzUser = appUserMapper.selectPrimaryKey(userId);
+        if (Objects.nonNull(dyzUser)) {
+            log.info("App-Service 发现预定风控用户:{}", key);
+            // 用户锁定
+            if (FLAG_LOCK.equals(flag)) {
+                lockUser(dyzUser, UserStatusEnum.RISK.getCode());
+            }
+            // 用户解锁
+            if (FLAG_UNLOCK.equals(flag)) {
+                unLockUser(dyzUser);
+            }
         }
     }
 
     /**
      * 锁定用户
      */
-     private void lockUser(@RequestParam("userId")String userId, @RequestParam("userStatus")Integer userStatus){
-        YtDyzUser dyzUser = appUserMapper.selectPrimaryKey(userId);
+    private void lockUser(YtDyzUser dyzUser, Integer userStatus) {
         YtDyzUser newUser = new YtDyzUser();
-        newUser.setUserId(userId);
+        newUser.setUserId(dyzUser.getUserId());
         newUser.setUserStatus(userStatus);
-        newUser.setRiskReason(BannedTypeEnum.CHANNEL.getDesc()+"禁止登录");
-        if(Objects.nonNull(dyzUser)){
-            appUserMapper.updateUser(newUser);
-        }
+        newUser.setRiskReason(BannedTypeEnum.CHANNEL.getDesc() + "禁止登录");
+        appUserMapper.updateUser(newUser);
+    }
+
+    /**
+     * 解锁用户
+     */
+    private void unLockUser(YtDyzUser dyzUser) {
+        YtDyzUser newUser = new YtDyzUser();
+        newUser.setUserId(dyzUser.getUserId());
+        newUser.setUserStatus(UserStatusEnum.NORMAL.getCode());
+        appUserMapper.updateUser(newUser);
+        riskFeign.addBlockingRecord(dyzUser.getUserId());
     }
 }