|
@@ -1,5 +1,6 @@
|
|
|
package com.ytpm.question.monitor;
|
|
package com.ytpm.question.monitor;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import com.ytpm.agent.enums.UserStatusEnum;
|
|
import com.ytpm.agent.enums.UserStatusEnum;
|
|
|
import com.ytpm.app.model.YtDyzUser;
|
|
import com.ytpm.app.model.YtDyzUser;
|
|
|
import com.ytpm.feign.RiskFeign;
|
|
import com.ytpm.feign.RiskFeign;
|
|
@@ -11,8 +12,8 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
|
|
|
import org.springframework.data.redis.connection.Message;
|
|
import org.springframework.data.redis.connection.Message;
|
|
|
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
|
|
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
|
|
|
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
|
|
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
|
|
|
|
|
+import org.springframework.lang.NonNull;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
-import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
@@ -33,6 +34,9 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
|
|
|
@Value("${spring.application.name:}")
|
|
@Value("${spring.application.name:}")
|
|
|
private String applicationName;
|
|
private String applicationName;
|
|
|
|
|
|
|
|
|
|
+ private static final String FLAG_LOCK = "lock";
|
|
|
|
|
+ private static final String FLAG_UNLOCK = "unlock";
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
*
|
|
*
|
|
|
* @param listenerContainer must not be {@literal null}.
|
|
* @param listenerContainer must not be {@literal null}.
|
|
@@ -45,44 +49,62 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
|
|
|
* 监听redis过期的 key 进行处理
|
|
* 监听redis过期的 key 进行处理
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
- public void onMessage(Message message, byte[] pattern) {
|
|
|
|
|
|
|
+ public void onMessage(@NonNull Message message, byte[] pattern) {
|
|
|
String key = String.valueOf(message);
|
|
String key = String.valueOf(message);
|
|
|
|
|
+ // 全局监听
|
|
|
if (key.startsWith("lock_") || key.startsWith("unlock_")) {
|
|
if (key.startsWith("lock_") || key.startsWith("unlock_")) {
|
|
|
- log.info("App-Service 发现预定风控用户:{}", key);
|
|
|
|
|
- }
|
|
|
|
|
- // 用户锁定
|
|
|
|
|
- if (key.startsWith("lock_")) {
|
|
|
|
|
String[] arr = key.split("_");
|
|
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("_");
|
|
String[] arr = key.split("_");
|
|
|
- YtDyzUser user = appUserMapper.selectPrimaryKey(arr[1]);
|
|
|
|
|
- if (user == null) {
|
|
|
|
|
|
|
+ if (arr.length < 3) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- YtDyzUser dyzUser = new YtDyzUser();
|
|
|
|
|
- dyzUser.setUserId(arr[1]);
|
|
|
|
|
- dyzUser.setUserStatus(1);
|
|
|
|
|
- appUserMapper.updateUser(dyzUser);
|
|
|
|
|
- riskFeign.addBlockingRecord(arr[1]);
|
|
|
|
|
|
|
+ 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();
|
|
YtDyzUser newUser = new YtDyzUser();
|
|
|
- newUser.setUserId(userId);
|
|
|
|
|
|
|
+ newUser.setUserId(dyzUser.getUserId());
|
|
|
newUser.setUserStatus(userStatus);
|
|
newUser.setUserStatus(userStatus);
|
|
|
newUser.setRiskReason(BannedTypeEnum.CHANNEL.getDesc() + "禁止登录");
|
|
newUser.setRiskReason(BannedTypeEnum.CHANNEL.getDesc() + "禁止登录");
|
|
|
- if (Objects.nonNull(dyzUser)) {
|
|
|
|
|
- appUserMapper.updateUser(newUser);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ 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());
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|