Jelajahi Sumber

定时扫描超时未被解锁的用户

marxjaw 3 bulan lalu
induk
melakukan
bb94e87ccf

+ 3 - 0
yt-app/app-feign/src/main/java/com/ytpm/feign/AppFeign.java

@@ -87,4 +87,7 @@ public interface AppFeign {
 
     @PostMapping("/wx/delDefaultConfig")
     void delAppConfig(@RequestParam("appId") String appId);
+
+    @PostMapping("/user/unLockUser")
+    void unLockUser(@RequestParam("userIds")String userIds);
 }

+ 4 - 0
yt-app/app-service/src/main/java/com/ytpm/controller/dyz/UserController.java

@@ -262,4 +262,8 @@ public class UserController {
     public List<YtDyzUser> queryTodayBanned(@RequestBody AppUserTodayBannedParam appUserTodayBannedParam){
         return appUserMapper.queryTodayBanned(appUserTodayBannedParam.getStartTime(), appUserTodayBannedParam.getEndTime(), appUserTodayBannedParam.getUserIdList());
     }
+    @PostMapping("/unLockUser")
+    public void unLockUser(@RequestParam("userIds")String userIds){
+        appUserMapper.unlockUser(userIds);
+    }
 }

+ 2 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/dyz/AppUserMapper.java

@@ -171,4 +171,6 @@ public interface AppUserMapper {
      * 根据应用ID删除默认配置
      */
     void delByAppId(@Param("appId")String appId);
+
+    void unlockUser(@Param("appId")String userIds);
 }

+ 9 - 0
yt-app/app-service/src/main/resources/mapper/dyz/AppUserMapper.xml

@@ -159,6 +159,15 @@
         </set>
         where user_id = #{userId}
     </update>
+    <update id="unlockUser">
+        update yt_dyz_user
+        set user_status = 1
+        where user_status > 1
+          and user_id in
+        <foreach collection="userIds.split(',')" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </update>
     <delete id="delByAppId">
         delete from yt_app_default_config where app_id = #{appId}
     </delete>

+ 2 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/RiskManageApplication.java

@@ -5,8 +5,10 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.bind.annotation.RestController;
 
+@EnableScheduling
 @RestController
 @SpringBootApplication
 @EnableDiscoveryClient

+ 5 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/dao/RiskUserMapper.java

@@ -52,4 +52,9 @@ public interface RiskUserMapper {
      * 查询访问控制详情
      */
     RiskAccessView selectByAppId(@Param("appId") String appId);
+
+    /**
+     * 查询超过24小时的锁定用户ID
+     */
+    List<String> getTimedUser();
 }

+ 37 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/timer/CustomTimer.java

@@ -0,0 +1,37 @@
+package com.ytpm.timer;
+
+import cn.hutool.core.collection.CollUtil;
+import com.ytpm.dao.RiskUserMapper;
+import com.ytpm.feign.AppFeign;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Marx
+ * @date 2025/8/8 12:47
+ */
+@Slf4j(topic = "CustomTimer")
+@Component
+public class CustomTimer {
+
+    @Resource
+    private RiskUserMapper riskUserMapper;
+    @Resource
+    private AppFeign appFeign;
+
+    /**
+     * 每两个小时检查一次到期用户进行解锁
+     */
+    @Scheduled(cron = "0 0 0/2 * * ? ")
+    public void unlockTimedUser(){
+        log.error("准备执行用户超时未解锁检查,当前时间:{}",new Date());
+       List<String> idList = riskUserMapper.getTimedUser();
+       if(CollUtil.isEmpty(idList))return;
+       appFeign.unLockUser(String.join(",", idList));
+    }
+}

+ 13 - 0
yt-risk/risk-manage/src/main/resources/mapper/RiskUserMapper.xml

@@ -145,4 +145,17 @@
         join yt_platform_user_access pua on a.user_id = pua.user_id and pua.enabled = 1
         where a.app_id = #{appId}
     </select>
+    <select id="getTimedUser" resultType="java.lang.String">
+        SELECT
+            user_id
+        FROM
+            yt_platform_banned
+        GROUP BY
+            user_id
+        HAVING
+            TIMESTAMPDIFF(
+                    HOUR,
+                    max( banned_time ),
+                    NOW()) > 24
+    </select>
 </mapper>