Просмотр исходного кода

添加用户黑名单消息通知

lining 1 год назад
Родитель
Сommit
4c382f5a58

+ 8 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/FeishuController.java

@@ -28,6 +28,9 @@ public class FeishuController {
     IBindAppErrorWarnService bindAppErrorWarnService;
     @Autowired
     IBytedanceProductUpdateService bytedanceProductUpdateService;
+
+    @Autowired
+    IUserLoginRecordService userLoginRecordService;
     @GetMapping("/test")
     public void test() throws Exception {
 //        bytedanceProductUpdateService.initNew();
@@ -42,4 +45,9 @@ public class FeishuController {
         List<String> list = array.toJavaList(String.class);
         unbindWarnPushService.send(list, false);
     }
+
+    @PostMapping("/sendLoginTimes")
+    public String sendLoginTimes(){
+      return userLoginRecordService.queryUserLoginRecord();
+    }
 }

+ 19 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/UserLoginRecord.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.job.bytedance.data.entity;
+
+import lombok.Data;
+
+/**
+ * @author lining
+ * @ClassName UserLoginRecord
+ * @description: TODO
+ * @date 2025年05月09日
+ * @version: 1.0
+ */
+@Data
+public class UserLoginRecord {
+    private Long uid;
+
+    private String openId;
+
+    private Long loginTimes;
+}

+ 18 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/UserLoginRecordMapper.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.job.bytedance.data.mapper;
+
+import cn.com.ctop.job.bytedance.data.entity.UserLoginRecord;
+
+import java.util.List;
+
+/**
+ * @author lining
+ * @ClassName UserLoginRecordMapper
+ * @description: TODO
+ * @date 2025年05月09日
+ * @version: 1.0
+ */
+public interface UserLoginRecordMapper {
+
+    List<UserLoginRecord> queryUserLoginRecord();
+
+}

+ 13 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/UserLoginRecordMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.com.ctop.job.bytedance.data.mapper.UserLoginRecordMapper">
+
+    <select id="queryUserLoginRecord" resultType="cn.com.ctop.job.bytedance.data.entity.UserLoginRecord">
+        select lulr.uid, lu.open_id , count(1) as login_times
+        from thirtpart.ly_user_login_record lulr
+                 left join thirtpart.ly_user lu on lulr.uid = lu.id
+        where FROM_UNIXTIME(lulr.created_at) >= CURDATE() and lulr.uid not in (select uid from thirtpart.ly_user_black_list)
+        group by uid  HAVING login_times > 500 order by login_times desc;
+    </select>
+
+</mapper>

+ 16 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IUserLoginRecordService.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.job.bytedance.data.service;
+
+import cn.com.ctop.job.bytedance.data.entity.UserLoginRecord;
+
+import java.util.List;
+
+/**
+ * @author lining
+ * @ClassName IUserLoginRecord
+ * @description: TODO
+ * @date 2025年05月09日
+ * @version: 1.0
+ */
+public interface IUserLoginRecordService {
+    String queryUserLoginRecord();
+}

+ 50 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/UserLoginRecordServiceImpl.java

@@ -0,0 +1,50 @@
+package cn.com.ctop.job.bytedance.data.service.impl;
+
+import cn.com.ctop.job.bytedance.data.entity.UserLoginRecord;
+import cn.com.ctop.job.bytedance.data.mapper.UserLoginRecordMapper;
+import cn.com.ctop.job.bytedance.data.service.IUserLoginRecordService;
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author lining
+ * @ClassName UserLoginRecordServiceImpl
+ * @description: TODO
+ * @date 2025年05月09日
+ * @version: 1.0
+ */
+@Service
+@Slf4j
+public class UserLoginRecordServiceImpl implements IUserLoginRecordService {
+    public static final String WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/cddc4569-c5bb-4764-b79e-7d2e896a97b1";
+    @Autowired
+    private UserLoginRecordMapper userLoginRecordMapper;
+    @Override
+    public String queryUserLoginRecord() {
+        List<UserLoginRecord> userLoginRecords = userLoginRecordMapper.queryUserLoginRecord();
+
+        String date = DateUtils.getNowDate("YYYY-MM-dd HH:mm:ss");
+        StringBuilder text = new StringBuilder(date);
+        text.append("\n");
+        if (userLoginRecords != null && userLoginRecords.size() > 0){
+            userLoginRecords.forEach(userLoginRecord -> {
+                text.append("用户ID:").append(userLoginRecord.getUid()).append("\n")
+                        .append("用户openid:").append(userLoginRecord.getOpenId()).append("\n")
+                        .append("登录次数:").append(userLoginRecord.getLoginTimes()).append("\n");
+            });
+            log.info("登录次数消息:{}", text);
+            try {
+                FeishuRobotUtil.sendTextToWebhook(text.toString(), WEBHOOK_URL);
+            } catch (Exception e) {
+                log.error("发送飞书消息失败", e);
+            }
+        }
+
+        return text.toString();
+    }
+}

+ 7 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/FeishuPushJob.java

@@ -21,6 +21,8 @@ public class FeishuPushJob {
     ITotalRankPushService totalRankPushService;
     @Autowired
     IDateReportsPushService dateReportsPushService;
+    @Autowired
+    IUserLoginRecordService userLoginRecordService;
 
     @XxlJob("unbindWarnPush")
     public void unbindWarnPush(){
@@ -46,4 +48,9 @@ public class FeishuPushJob {
     public void dateReportsPush(){
         dateReportsPushService.send();
     }
+
+    @XxlJob("loginRecordPush")
+    public void loginRecordPush(){
+        userLoginRecordService.queryUserLoginRecord();
+    }
 }