Explorar o código

飞书发送人员配置化

zhaotx hai 5 meses
pai
achega
8dd454c253
Modificáronse 14 ficheiros con 238 adicións e 15 borrados
  1. 6 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/ICutGroupRankPushService.java
  2. 11 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IDateReportsPushService.java
  3. 6 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IMovieRankPushService.java
  4. 6 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IReportsAdPushService.java
  5. 6 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IReportsByBusinessPushService.java
  6. 6 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/ITotalRankPushService.java
  7. 7 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/CutGroupRankPushServiceImpl.java
  8. 18 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/DateReportsPushServiceImpl.java
  9. 37 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/MovieRankPushServiceImpl.java
  10. 43 4
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ReportsAdPushServiceImpl.java
  11. 7 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ReportsByBusinessPushServiceImpl.java
  12. 35 3
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/TotalRankPushServiceImpl.java
  13. 38 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/FeishuSendObjectUtils.java
  14. 12 7
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/FeishuPushJob.java

+ 6 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/ICutGroupRankPushService.java

@@ -1,6 +1,12 @@
 package cn.com.ctop.job.bytedance.data.service;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
+
+import java.util.List;
+
 public interface ICutGroupRankPushService
 {
     void send();
+
+    void send(List<FeishuSendObject> sendObjects);
 }

+ 11 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IDateReportsPushService.java

@@ -1,12 +1,22 @@
 package cn.com.ctop.job.bytedance.data.service;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
+
+import java.util.List;
+
 public interface IDateReportsPushService {
     void send();
 
+    void send(List<FeishuSendObject> sendObjects);
+
     /**
      * 零点15执行的 比上一天多了个描述
      */
     void preSend();
 
-    public void send12hour();
+    void preSend(List<FeishuSendObject> sendObjects);
+
+    void send12hour();
+
+    void send12hour(List<FeishuSendObject> sendObjects);
 }

+ 6 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IMovieRankPushService.java

@@ -1,9 +1,15 @@
 package cn.com.ctop.job.bytedance.data.service;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
+
+import java.util.List;
+
 public interface IMovieRankPushService {
 
 
     void send();
 
+    void send(List<FeishuSendObject> sendObjects);
+
     void test();
 }

+ 6 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IReportsAdPushService.java

@@ -1,8 +1,14 @@
 package cn.com.ctop.job.bytedance.data.service;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
+
+import java.util.List;
+
 public interface IReportsAdPushService {
 
     void send();
 
+    void send(List<FeishuSendObject> sendObjects);
+
     void test();
 }

+ 6 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IReportsByBusinessPushService.java

@@ -1,9 +1,15 @@
 package cn.com.ctop.job.bytedance.data.service;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
+
+import java.util.List;
+
 public interface IReportsByBusinessPushService {
 
     void send();
 
+    void send(List<FeishuSendObject> sendObjects);
+
     void preSend();
     void test();
 }

+ 6 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/ITotalRankPushService.java

@@ -1,7 +1,13 @@
 package cn.com.ctop.job.bytedance.data.service;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
+
+import java.util.List;
+
 public interface ITotalRankPushService {
     void send();
 
+    void send(List<FeishuSendObject> sendObjects);
+
     void test();
 }

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

@@ -1,8 +1,10 @@
 package cn.com.ctop.job.bytedance.data.service.impl;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
 import cn.com.ctop.job.bytedance.data.mapper.ReportsAdPushMapper;
 import cn.com.ctop.job.bytedance.data.service.ICutGroupRankPushService;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import cn.com.ctop.job.bytedance.data.utils.FeishuSendObjectUtils;
 import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -55,6 +57,11 @@ public class CutGroupRankPushServiceImpl implements ICutGroupRankPushService {
         send(userIds, chatids);
     }
 
+    @Override
+    public void send(List<FeishuSendObject> sendObjects) {
+        send(FeishuSendObjectUtils.userIds(sendObjects), FeishuSendObjectUtils.chatIds(sendObjects));
+    }
+
     /**
      *
      * @param userIds 单聊用户列表

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

@@ -1,9 +1,11 @@
 package cn.com.ctop.job.bytedance.data.service.impl;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
 import cn.com.ctop.job.bytedance.data.mapper.ReportsAdPushMapper;
 import cn.com.ctop.job.bytedance.data.service.IDateReportsPushService;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import cn.com.ctop.job.bytedance.data.utils.FeishuSendObjectUtils;
 import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -58,6 +60,11 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         sendParam("", userIds, chatid);
     }
 
+    @Override
+    public void send(List<FeishuSendObject> sendObjects) {
+        sendParam("", FeishuSendObjectUtils.userIds(sendObjects), FeishuSendObjectUtils.chatIds(sendObjects));
+    }
+
     /**
      * 12点推送
      */
@@ -78,6 +85,12 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         sendParam("注:当天ROI数据有微小1%-2%差异,以次日10点推送为准,番茄ROI数据需要次日9点左右获取;暂不包含广点通数据", userIds, chatid);
     }
 
+    @Override
+    public void send12hour(List<FeishuSendObject> sendObjects){
+        sendParam("注:当天ROI数据有微小1%-2%差异,以次日10点推送为准,番茄ROI数据需要次日9点左右获取;暂不包含广点通数据",
+                FeishuSendObjectUtils.userIds(sendObjects), FeishuSendObjectUtils.chatIds(sendObjects));
+    }
+
     /**
      * 9点预推送给开发人员
      */
@@ -95,6 +108,11 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         sendParam("", userIds, chatid);
     }
 
+    @Override
+    public void preSend(List<FeishuSendObject> sendObjects) {
+        sendParam("", FeishuSendObjectUtils.userIds(sendObjects), FeishuSendObjectUtils.chatIds(sendObjects));
+    }
+
 
     private void sendParam(String description, List<String> userIds, List<String> chatid){
         String token;

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

@@ -1,9 +1,11 @@
 package cn.com.ctop.job.bytedance.data.service.impl;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
 import cn.com.ctop.job.bytedance.data.mapper.ReportsAdPushMapper;
 import cn.com.ctop.job.bytedance.data.service.IMovieRankPushService;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import cn.com.ctop.job.bytedance.data.utils.FeishuSendObjectUtils;
 import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -54,6 +56,11 @@ public class MovieRankPushServiceImpl implements IMovieRankPushService {
     }
 
     @Override
+    public void send(List<FeishuSendObject> sendObjects) {
+        send(FeishuSendObjectUtils.userIds(sendObjects), FeishuSendObjectUtils.chatIds(sendObjects), true);
+    }
+
+    @Override
     public void test() {
         send(Arrays.asList("HR-00446"), Arrays.asList(), false);
     }
@@ -129,6 +136,10 @@ public class MovieRankPushServiceImpl implements IMovieRankPushService {
                 sendToFeishu(token, template_variables, userId);
             }
 
+            for (String chatId : chatIds) {
+                sendToChatGroup(token, template_variables, chatId);
+            }
+
             //给所有优化师发
             if (sendToOptimizers){
                 for (String userId : mobileMap.values()) {
@@ -198,4 +209,30 @@ public class MovieRankPushServiceImpl implements IMovieRankPushService {
             log.error("发送飞书消息失败", e);
         }
     }
+
+    private void sendToChatGroup(String token, JSONObject template_variable, String chatId) {
+        JSONObject content = new JSONObject();
+        JSONObject contentData = new JSONObject();
+        contentData.put("template_id", TEMPLATE_ID);
+        contentData.put("template_version_name", TEMPLATE_VERSION);
+        contentData.put("template_variable", template_variable);
+        content.put("type", "template");
+        content.put("data", contentData);
+
+        JSONObject request = new JSONObject();
+        request.put("receive_id", chatId);
+        request.put("msg_type", "interactive");
+        request.put("content", content.toJSONString());
+        try (CloseableHttpClient client = HttpClients.createDefault()) {
+            HttpPost httpPost = new HttpPost("https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id");
+            httpPost.setHeader("Authorization", "Bearer " + token);
+            HttpEntity entity = new StringEntity(request.toJSONString(), "UTF-8");
+            httpPost.setEntity(entity);
+            httpPost.setHeader("Content-Type", "application/json; charset=utf-8");
+            CloseableHttpResponse respon = client.execute(httpPost);
+            log.info("剧单群聊发送结果:{}", EntityUtils.toString(respon.getEntity(), "UTF-8"));
+        } catch (IOException e) {
+            log.error("发送飞书消息失败", e);
+        }
+    }
 }

+ 43 - 4
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ReportsAdPushServiceImpl.java

@@ -1,9 +1,10 @@
 package cn.com.ctop.job.bytedance.data.service.impl;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
 import cn.com.ctop.job.bytedance.data.mapper.ReportsAdPushMapper;
 import cn.com.ctop.job.bytedance.data.service.IReportsAdPushService;
-import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import cn.com.ctop.job.bytedance.data.utils.FeishuSendObjectUtils;
 import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -53,7 +54,7 @@ public class ReportsAdPushServiceImpl implements IReportsAdPushService {
                 ,"HR-00704" //段鹏举
                 ,"HR-00642" //孟阳
         );
-        send(userIds);
+        sendToUserIds(userIds);
     }
 
     @Override
@@ -65,11 +66,20 @@ public class ReportsAdPushServiceImpl implements IReportsAdPushService {
 //                ,"HR-00459" //angaoqi
 //                ,"HR-00439" //huangpingkang
         );
-        send(userIds);
+        sendToUserIds(userIds);
     }
 
 
-    public void send(List<String> userIds) {
+    @Override
+    public void send(List<FeishuSendObject> sendObjects) {
+        send(FeishuSendObjectUtils.userIds(sendObjects), FeishuSendObjectUtils.chatIds(sendObjects));
+    }
+
+    private void sendToUserIds(List<String> userIds) {
+        send(userIds, Arrays.asList());
+    }
+
+    private void send(List<String> userIds, List<String> chatIds) {
         String today = DateUtils.getNowDate("yyyy-MM-dd");
         Long todayLong = Long.parseLong(today.replaceAll("-", ""));
         int hour = Integer.parseInt(DateUtils.getNowDate("H"));
@@ -173,6 +183,9 @@ public class ReportsAdPushServiceImpl implements IReportsAdPushService {
         for (String userId : userIds){
             sendToFeishu(token, template_variables, userId);
         }
+        for (String chatId : chatIds){
+            sendToChatGroup(token, template_variables, chatId);
+        }
     }
 
     private void sendToFeishu(String token, JSONObject template_variable, String receive_id) {
@@ -201,4 +214,30 @@ public class ReportsAdPushServiceImpl implements IReportsAdPushService {
             log.error("发送飞书消息失败", e);
         }
     }
+
+    private void sendToChatGroup(String token, JSONObject template_variable, String chatId) {
+        JSONObject content = new JSONObject();
+        JSONObject contentData = new JSONObject();
+        contentData.put("template_id",TEMPLATE_ID);
+        contentData.put("template_version_name", TEMPLATE_VERSION);
+        contentData.put("template_variable", template_variable);
+        content.put("type", "template");
+        content.put("data", contentData);
+
+        JSONObject request = new JSONObject();
+        request.put("receive_id", chatId);
+        request.put("msg_type", "interactive");
+        request.put("content", content.toJSONString());
+        try (CloseableHttpClient client = HttpClients.createDefault()){
+            HttpPost httpPost = new HttpPost("https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id");
+            httpPost.setHeader("Authorization", "Bearer "+token);
+            HttpEntity entity = new StringEntity(request.toJSONString(), "UTF-8");
+            httpPost.setEntity(entity);
+            httpPost.setHeader("Content-Type", "application/json; charset=utf-8");
+            CloseableHttpResponse respon = client.execute(httpPost);
+            System.out.println("发送结果: "+ EntityUtils.toString(respon.getEntity(), "UTF-8"));
+        }catch (IOException e){
+            log.error("发送飞书消息失败", e);
+        }
+    }
 }

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

@@ -1,9 +1,11 @@
 package cn.com.ctop.job.bytedance.data.service.impl;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
 import cn.com.ctop.job.bytedance.data.mapper.ReportsAdPushMapper;
 import cn.com.ctop.job.bytedance.data.service.IReportsByBusinessPushService;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import cn.com.ctop.job.bytedance.data.utils.FeishuSendObjectUtils;
 import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -54,6 +56,11 @@ public class ReportsByBusinessPushServiceImpl implements IReportsByBusinessPushS
         sendParam("", userIds, chatid);
     }
 
+    @Override
+    public void send(List<FeishuSendObject> sendObjects) {
+        sendParam("", FeishuSendObjectUtils.userIds(sendObjects), FeishuSendObjectUtils.chatIds(sendObjects));
+    }
+
     /**
      * 9点预推送给开发人员
      */

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 35 - 3
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/TotalRankPushServiceImpl.java


+ 38 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/FeishuSendObjectUtils.java

@@ -0,0 +1,38 @@
+package cn.com.ctop.job.bytedance.data.utils;
+
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+public class FeishuSendObjectUtils {
+
+    private FeishuSendObjectUtils() {
+    }
+
+    public static List<String> userIds(List<FeishuSendObject> sendObjects) {
+        if (sendObjects == null || sendObjects.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return sendObjects.stream()
+                .filter(sendObject -> sendObject.getSendType() == FeishuSendObject.SendType.USER)
+                .map(FeishuSendObject::getFsUserId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+    }
+
+    public static List<String> chatIds(List<FeishuSendObject> sendObjects) {
+        if (sendObjects == null || sendObjects.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return sendObjects.stream()
+                .filter(sendObject -> sendObject.getSendType() == FeishuSendObject.SendType.CHAT_GROUP)
+                .map(FeishuSendObject::getChatGroupId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+    }
+}

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

@@ -1,12 +1,13 @@
 package cn.com.ctop.job.bytedance.handler;
 
+import cn.com.ctop.job.bytedance.data.entity.FeishuSendObject;
 import cn.com.ctop.job.bytedance.data.service.*;
-import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -58,7 +59,7 @@ public class FeishuPushJob {
         reportsAdPushExecutor.submit(new Runnable() {
             @Override
             public void run() {
-                reportsAdPushService.send();
+                reportsAdPushService.send(getSendObjects("reportsAdPush"));
             }
         });
 
@@ -83,7 +84,7 @@ public class FeishuPushJob {
         totalRankPushExecutor.submit(new Runnable() {
             @Override
             public void run() {
-                totalRankPushService.send();
+                totalRankPushService.send(getSendObjects("totalRankPush"));
             }
         });
 
@@ -93,12 +94,12 @@ public class FeishuPushJob {
     //短剧业务概况(投放)
     @XxlJob("dateReportsPush")
     public void dateReportsPush() {
-        dateReportsPushService.send();
+        dateReportsPushService.send(getSendObjects("dateReportsPush"));
     }
 
     @XxlJob("reportsByBusinessPush")
     public void reportByBusinessPush() {
-        reportsByBusinessPushService.send();
+        reportsByBusinessPushService.send(getSendObjects("reportsByBusinessPush"));
     }
 
     //短剧业务概况预投放(12点)
@@ -116,7 +117,7 @@ public class FeishuPushJob {
     //剪辑排行榜
     @XxlJob("cutGroupRankPush")
     public void cutGroupRankPush() {
-        cutGroupRankPushService.send();
+        cutGroupRankPushService.send(getSendObjects("cutGroupRankPush"));
     }
 
     @XxlJob("loginRecordPush")
@@ -145,9 +146,13 @@ public class FeishuPushJob {
         movieRankExecutor.submit(new Runnable() {
             @Override
             public void run() {
-                movieRankPushService.send();
+                movieRankPushService.send(getSendObjects("movieTopPush"));
             }
         });
 
     }
+
+    private List<FeishuSendObject> getSendObjects(String jobName) {
+        return feishuService.getFeishuSendObjectList(jobName);
+    }
 }