|
|
@@ -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());
|
|
|
}
|
|
|
}
|