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

Merge branch 'master' into zhaotx

zhaotx 1 год назад
Родитель
Сommit
759f76927b

+ 5 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/ReportsAdPushMapper.java

@@ -31,4 +31,9 @@ public interface ReportsAdPushMapper {
     List<Map<String, String>> bindAppErrorData(@Param("last30Day") Long last30Day);
     //部门前后项数据排名
     List<Map<String, String>> deptRank2(@Param("date") Long date);
+
+
+    List<Map<String, String>> cutDeptRank(@Param("date") Long date);
+    List<Map<String, String>> cutUserRank(@Param("date") Long date, @Param("deptId") Long deptId);
+    String updateTime(@Param("date") Long date);
 }

+ 1 - 2
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceCdpProjectListMapper.xml

@@ -185,8 +185,7 @@
     </insert>
 
     <select id="queryAllAdverIdList" resultType="Long">
-        SELECT advertiser_id
-        FROM deepthink.bytedance_advertiser_list
+        SELECT account_id FROM test.`account`
     </select>
 
     <select id="queryErrApps" resultType="Long">

+ 3 - 3
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceProductUpdateMapper.xml

@@ -24,14 +24,14 @@
         FROM deepthink.bytedance_product_main_advertiser t1
         left join deepthink.bytedance_advertiser_list t2 on t1.advertiser_id=t2.advertiser_id
         left join deepthink.bytedance_auth_list t3 on t2.admin_advertiser_id=t3.admin_advertiser_id
-        where t1.`type`=2 and t1.`_status`=0
+        where t1.`type`=2 and t1.`_status`=0 and platform_type=1
     </select>
     <select id="getIAAPlatformList" resultType="com.alibaba.fastjson.JSONObject">
         select t1.*, t3.access_token
         FROM deepthink.bytedance_product_main_advertiser t1
         left join deepthink.bytedance_advertiser_list t2 on t1.advertiser_id=t2.advertiser_id
         left join deepthink.bytedance_auth_list t3 on t2.admin_advertiser_id=t3.admin_advertiser_id
-        where t1.`type`=1 and t1.`_status`=0
+        where t1.`type`=1 and t1.`_status`=0 and platform_type=1
     </select>
     <select id="getIAPVideoList" resultType="com.alibaba.fastjson.JSONObject">
         select third.album_id, third.platform_type, detail.platform_config, video.id as video_id, detail.id as video_detail_id, video.name as name, video.cover_img as img,ifnull(category.name, '其他') as 'theme', video.play_platform,
@@ -47,7 +47,7 @@
         LEFT JOIN (select * from thirtpart.ly_videos) video ON third.video_id = video.id
         LEFT JOIN thirtpart.ly_video_category category ON video.category_id = category.id
         LEFT JOIN (select video_id, min(sort) as sort, max(pay_amount/100.0) as maxpay, min(pay_amount/100.0) as minpay from thirtpart.ly_video_details where is_pay=1 group by video_id) payinfo ON video.id = payinfo.video_id
-        where video.is_free = 1
+        where video.is_free = 1 or (payinfo.sort is not null and maxpay>0)
     </select>
     <select id="getIAAVideoList" resultType="com.alibaba.fastjson.JSONObject">
         select third.album_id, third.platform_type, detail.platform_config, video.id as video_id, detail.id as video_detail_id, video.name as name, video.cover_img as img,ifnull(category.name, '其他') as 'theme', video.play_platform,

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

@@ -1,6 +1,10 @@
 <?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.ReportsAdPushMapper">
+    <select id="updateTime" resultType="java.lang.String">
+        select date_format(max(update_time), '%Y-%m-%d %H:%i:%s') from application.media_ad_report_daily
+        where stat_date = ${date} limit 1
+    </select>
     <select id="tmpPushData" resultType="java.util.Map">
         select concat(round(if(ifnull(sum(cost_amount),0)=0, 0, (ifnull(sum(iaa_amount),0)+ifnull(sum(pay_amount), 0))/sum(cost_amount)*100 ), 2), '%') AS water_roi,
         concat(round(if(ifnull(sum(real_cost_amount),0)=0, 0, (ifnull(sum(share_iaa_amount),0)+ifnull(sum(share_pay_amount),0))/sum(real_cost_amount)*100), 2), '%') AS real_roi,
@@ -253,4 +257,33 @@
         having sum(cost_amount)>1
         order by rk
     </select>
+    <select id="cutDeptRank" resultType="java.util.Map">
+        select row_number() over (order by cost desc) as ranks,
+        dept_name as dept_name,
+        round(sum(cost),2) as todayData,
+        concat(round(ifnull(sum(conversion_num)/sum(click)*100,0),2),'%') as conversionRate
+        from
+        (select stat_datetime, customer_user_name2, CAST(cost AS float) as 'cost', conversion_num, click
+        from media_api.media_material_designer_report
+        where stat_datetime=${date} ) a
+        left join deepthink.sys_user b
+        on a.customer_user_name2=b.nick_name
+        left join deepthink.sys_dept c
+        on b.dept_id=c.dept_id
+        where dept_name is not null
+        group by dept_name
+    </select>
+    <select id="cutUserRank" resultType="java.util.Map">
+        select row_number() over (order by cost desc) as rankRank,
+        customer_user_name2 as user_id,
+        b.phonenumber as phonenumber,
+        CAST(cost AS float) as rankTodayData,
+        concat(round(ifnull(conversion_num/click*100,0),2),'%') as conversionRate
+        from media_api.media_material_designer_report a
+        left join deepthink.sys_user b
+        on a.customer_user_name2=b.nick_name
+        left join deepthink.sys_dept c
+        on b.dept_id=c.dept_id
+        where stat_datetime=${date} and b.dept_id=${deptId}
+    </select>
 </mapper>

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

@@ -0,0 +1,6 @@
+package cn.com.ctop.job.bytedance.data.service;
+
+public interface ICutGroupRankPushService
+{
+    void send();
+}

+ 3 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceCdpProjectServiceImpl.java

@@ -93,7 +93,9 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
             Map<String, Object> params = new HashMap<>();
             params.put("advertiser_id", advertiserId);
             JSONObject filtering = new JSONObject();
-            filtering.put("promotion_modify_time", date);
+            if (!Check.isNull(date)) {
+                filtering.put("promotion_modify_time", date);
+            }
             filtering.put("status_first", "PROMOTION_STATUS_ALL");
 
             params.put("filtering", filtering);

+ 5 - 5
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceProductUpdateServiceImpl.java

@@ -268,7 +268,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
                 continue; //todo
             }
             List<JSONObject> iaaVideoDouyinList = iaaVideoList.stream().filter(obj1 -> "1".equals(obj1.getString("platform_type"))).collect(Collectors.toList());
-            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(advertiserId, accessToken, instanceId, iaaVideoList, errorBlanket);
+            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(advertiserId, accessToken, instanceId, iaaVideoDouyinList, errorBlanket);
             advertiserToLinkMap.put(advertiserId, albumIdToLinkMap);
         }
 
@@ -294,7 +294,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
                 }
                 int code = uploadIaaProduct(platform, obj, advertiserToLinkMap, errorBlanket, iaaProductTypeMap.get(theme));
                 if (code !=0){
-                    return;
+
                 }
 //                System.out.println(res);
 //                System.out.println("\n\n\n");
@@ -353,9 +353,9 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         request.put("advertiser_id", platform.getLongValue("advertiser_id"));
         request.put("platform_id", platform.getLongValue("platform_id"));
 
-//                System.out.println("请求地址:" + url);
-//                System.out.println("请求头:" + headers);
-//                System.out.println("请求参数:" + request.toJSONString());
+                System.out.println("请求地址:" + url);
+                System.out.println("请求头:" + headers);
+                System.out.println("请求参数:" + request.toJSONString());
         String res = HttpUtils.httpPostRequest(url, request, headers);
         JSONObject btRes = JSONObject.parseObject(res);
         int code = btRes.getIntValue("code");

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

@@ -0,0 +1,194 @@
+package cn.com.ctop.job.bytedance.data.service.impl;
+
+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.utils.FeishuRobotUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+@Slf4j
+@Service
+public class CutGroupRankPushServiceImpl implements ICutGroupRankPushService {
+
+    @Autowired
+    ReportsAdPushMapper reportsPushMapper;
+
+    public static final String TEMPLATE_ID = "AAq4GJEHIXd03";
+    public static final String TEMPLATE_VERSION = "1.0.5";
+
+
+    @Override
+    public void send() {
+        List<String> userIds = Arrays.asList(
+                "44fbaed6"
+                ,"c5f6b59d" //yuyang
+                ,"58e7a98a"  //xsq
+                ,"ebeeced9" //yumeng
+                ,"aca3ef75" //renyupeng
+        );
+
+        List<String> chatids = Arrays.asList(
+        );
+        send(userIds, chatids);
+    }
+
+    /**
+     *
+     * @param userIds 单聊用户列表
+     * @param chatids 群聊用户列表
+     */
+    private void send(List<String> userIds, List<String> chatids){
+        List<JSONObject> users = reportsPushMapper.selectUserList();
+        List<String> mobiles = users.stream()
+                .filter(user -> (user.getLong("dept_id")==30205L || user.getLong("dept_id")==207L) && user.getString("phonenumber") != null)
+                .map(user -> user.getString("phonenumber"))
+                .filter(s -> s != null && s.length() == 11)
+                .collect(Collectors.toList());
+        String token;
+        Map<String, String> mobileMap;
+        try {
+            token = FeishuRobotUtil.getFsZtTenantToken();
+            mobileMap = FeishuRobotUtil.getFsUserIds(token, mobiles); //mobile -> userId
+            if (mobileMap == null){
+                log.error("获取飞书用户ID失败");
+                return;
+            }
+        }catch (IOException e){
+            log.error("获取飞书token失败", e);
+            return;
+        }
+
+        String yesterday = DateUtils.getNowAddDate("yyyy-MM-dd", -1);
+        Long yesterdayLong = Long.parseLong(yesterday.replace("-", ""));
+        List<Map<String, String>> cutDeptRank = reportsPushMapper.cutDeptRank(yesterdayLong);
+        JSONArray object_list_1 = new JSONArray();
+        for (Map<String, String> cutDept : cutDeptRank) {
+            JSONObject object = new JSONObject();
+            object.put("dept_name", cutDept.get("dept_name"));
+            object.put("todayData", cutDept.get("todayData"));
+            object.put("ranks", cutDept.get("ranks"));
+            object_list_1.add(object);
+        }
+
+        List<Map<String, String>> cutUserRank1 = reportsPushMapper.cutUserRank(yesterdayLong, 30205L);
+        JSONArray object_list_2 = new JSONArray();
+        for (Map<String, String> cutUser : cutUserRank1) {
+            JSONObject object = new JSONObject();
+            String phoneNumber = cutUser.get("phonenumber");
+            object.put("user_id", Arrays.asList(mobileMap.get(phoneNumber)));
+            object.put("rankTodayData", cutUser.get("rankTodayData"));
+            object.put("rankRank", cutUser.get("rankRank"));
+            object_list_2.add(object);
+        }
+
+        List<Map<String, String>> cutUserRank2 = reportsPushMapper.cutUserRank(yesterdayLong, 207L);
+        JSONArray object_list_3 = new JSONArray();
+        for (Map<String, String> cutUser : cutUserRank2) {
+            JSONObject object = new JSONObject();
+            String phoneNumber = cutUser.get("phonenumber");
+            object.put("user_id", Arrays.asList(mobileMap.get(phoneNumber)));
+            object.put("rankTodayData", cutUser.get("rankTodayData"));
+            object.put("rankRank", cutUser.get("rankRank"));
+            object_list_3.add(object);
+        }
+
+        JSONObject template_variable = new JSONObject();
+        template_variable.put("object_list_1", object_list_1);
+        template_variable.put("object_list_2", object_list_2);
+        template_variable.put("object_list_3", object_list_3);
+        template_variable.put("todaydate", yesterday.substring(5, 10));
+        template_variable.put("dataDate", reportsPushMapper.updateTime(yesterdayLong));
+
+        //发送给剪辑组用户
+        for (String userId : mobileMap.values()){
+            System.out.println("发送给用户: "+userId);
+            if (userId == null || userId.isEmpty()){
+                continue;
+            }
+            sendToFeishu(token, template_variable, userId);
+        }
+
+        //发送给各个负责人
+        for (String userId : userIds) {
+            sendToFeishu(token, template_variable, userId);
+        }
+
+        for (String chatid : chatids) {
+            sendToChatGroup(token, template_variable, chatid);
+        }
+
+
+    }
+
+    private void sendToFeishu(String token, JSONObject template_variable, String receive_id) {
+        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", receive_id);
+        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=user_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);
+        }
+    }
+
+    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);
+        }
+    }
+}

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

@@ -91,7 +91,7 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         );
         List<String> chatid = Arrays.asList(
         );
-        sendParam("暂不包含广点通数据", userIds, chatid);
+        sendParam("暂不包含广点通当日数据", userIds, chatid);
     }
 
 

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ReportsAdPushServiceImpl.java


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

@@ -23,6 +23,8 @@ public class FeishuPushJob {
     IDateReportsPushService dateReportsPushService;
     @Autowired
     IUserLoginRecordService userLoginRecordService;
+    @Autowired
+    ICutGroupRankPushService cutGroupRankPushService;
 
     @XxlJob("unbindWarnPush")
     public void unbindWarnPush(){
@@ -63,4 +65,9 @@ public class FeishuPushJob {
     public void dataReportsToDeveloper(){
         dateReportsPushService.preSend();
     }
+
+    @XxlJob("cutGroupRankPush")
+    public void cutGroupRankPush(){
+        cutGroupRankPushService.send();
+    }
 }