Jelajahi Sumber

风控24小时解锁改为redis 计时解锁以实现持久化

marxjaw 2 bulan lalu
induk
melakukan
bbc370bded

+ 0 - 4
yt-app/app-service/src/main/java/com/ytpm/controller/xjlrl/XjlrlUserController.java

@@ -13,10 +13,6 @@ import com.ytpm.app.param.AppUserTodayBannedParam;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.view.HourCountView;
 import com.ytpm.app.view.HourCountView;
 import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.app.view.YtAppUserListView;
-import com.ytpm.dao.qnjz.QNAdRecordMapper;
-import com.ytpm.dao.qnjz.QNLoginRecordMapper;
-import com.ytpm.dao.qnjz.QNQuestionMapper;
-import com.ytpm.dao.qnjz.QNUserMapper;
 import com.ytpm.dao.xjlrl.XjlrlAdRecordMapper;
 import com.ytpm.dao.xjlrl.XjlrlAdRecordMapper;
 import com.ytpm.dao.xjlrl.XjlrlLoginRecordMapper;
 import com.ytpm.dao.xjlrl.XjlrlLoginRecordMapper;
 import com.ytpm.dao.xjlrl.XjlrlQuestionMapper;
 import com.ytpm.dao.xjlrl.XjlrlQuestionMapper;

+ 0 - 1
yt-middle/middle-platform/src/main/java/com/ytpm/middle/monitor/RedisKeyExpirationListener.java

@@ -5,7 +5,6 @@ import com.ytpm.agent.view.AgentAppView;
 import com.ytpm.feign.AppFeign;
 import com.ytpm.feign.AppFeign;
 import com.ytpm.middle.dao.ApkMapper;
 import com.ytpm.middle.dao.ApkMapper;
 import com.ytpm.middle.util.RedisUtil;
 import com.ytpm.middle.util.RedisUtil;
-import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;

+ 29 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/config/redis/RedisListenerConfig.java

@@ -0,0 +1,29 @@
+package com.ytpm.config.redis;
+
+import com.ytpm.monitor.RedisKeyExpirationListener;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+
+/**
+ * redis 监听器配置
+ * @author marx
+ * @date 2025/7/29 16:09
+ */
+@Configuration
+public class RedisListenerConfig {
+
+    @Bean
+    RedisMessageListenerContainer listenerContainer(RedisConnectionFactory connectionFactory) {
+        RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
+        listenerContainer.setConnectionFactory(connectionFactory);
+        return listenerContainer;
+    }
+
+    @Bean
+    KeyExpirationEventMessageListener redisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
+        return new RedisKeyExpirationListener(listenerContainer);
+    }
+}

+ 51 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/monitor/RedisKeyExpirationListener.java

@@ -0,0 +1,51 @@
+package com.ytpm.monitor;
+
+import cn.hutool.core.util.StrUtil;
+import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.feign.AppFeign;
+import lombok.extern.slf4j.Slf4j;
+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.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * redis 监听器
+ */
+@Slf4j
+@Component
+@RefreshScope
+public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
+
+    @Resource
+    private AppFeign appFeign;
+    /**
+     * Creates new {@link } for {@code __keyevent@*__:expired} messages.
+     *
+     * @param listenerContainer must not be {@literal null}.
+     */
+    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
+        super(listenerContainer);
+    }
+ 
+    /**
+     * 监听redis过期的 key 对用户进行解锁
+     */
+    @Override
+    public void onMessage(Message message, byte[] pattern) {
+        String key = String.valueOf(message);
+        System.err.println("发现过期的key:"+key);
+        //判断key是以 unlock 开头,拆分key拿到用户ID对用户进行解锁
+        String[] keyArr = key.split("_");
+        String userId = keyArr[0];
+        if(StrUtil.isNotBlank(userId)){
+            YtDyzUser dyzUser = new YtDyzUser();
+            dyzUser.setUserId(userId);
+            dyzUser.setUserStatus(1);
+            appFeign.updateUserInfo(dyzUser);
+        }
+    }
+}

+ 12 - 7
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java

@@ -48,6 +48,7 @@ import com.ytpm.risk.view.RiskConfigView;
 import com.ytpm.risk.view.RiskDeblockingListView;
 import com.ytpm.risk.view.RiskDeblockingListView;
 import com.ytpm.risk.view.RiskTemplateView;
 import com.ytpm.risk.view.RiskTemplateView;
 import com.ytpm.service.RiskService;
 import com.ytpm.service.RiskService;
+import com.ytpm.util.RedisService;
 import com.ytpm.util.ReflectUtil;
 import com.ytpm.util.ReflectUtil;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -98,6 +99,8 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     private AppFeign appFeign;
     private AppFeign appFeign;
     @Value("${risk.banned.tips}")
     @Value("${risk.banned.tips}")
     private String tips;
     private String tips;
+    @Resource
+    private RedisService redisService;
     /**
     /**
      * 查询配置字段选项
      * 查询配置字段选项
      */
      */
@@ -659,14 +662,16 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             next.setRiskReason(tempName);
             next.setRiskReason(tempName);
             appFeign.updateUserInfo(next);
             appFeign.updateUserInfo(next);
         },300,TimeUnit.MILLISECONDS);
         },300,TimeUnit.MILLISECONDS);
+        //修改为解锁用户存入redis 24小时后进行解锁
+        redisService.setTimeOutHoursStr("unlock_"+dyzUser.getUserId(),dyzUser.getAppId(),24);
         //创建一次性定时任务用于24小时后解锁用户
         //创建一次性定时任务用于24小时后解锁用户
-        scheduled.schedule(()->{
-            YtDyzUser user = new YtDyzUser();
-            user.setUserId(dyzUser.getUserId());
-            user.setUserStatus(UserStatusEnum.NORMAL.getCode());
-            appFeign.updateUserInfo(user);
-            scheduled.shutdown();
-        },24, TimeUnit.HOURS);
+//        scheduled.schedule(()->{
+//            YtDyzUser user = new YtDyzUser();
+//            user.setUserId(dyzUser.getUserId());
+//            user.setUserStatus(UserStatusEnum.NORMAL.getCode());
+//            appFeign.updateUserInfo(user);
+//            scheduled.shutdown();
+//        },24, TimeUnit.HOURS);
         scheduled.shutdown();
         scheduled.shutdown();
         throw new CustomerException(errMsg);
         throw new CustomerException(errMsg);
     }
     }