Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

ZHAOXIAN před 1 rokem
rodič
revize
2230f610ad
18 změnil soubory, kde provedl 1329 přidání a 244 odebrání
  1. 17 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceProductUpdateMapper.java
  2. 22 4
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/ReportsAdPushMapper.java
  3. 46 9
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceProductUpdateMapper.xml
  4. 198 38
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/ReportsAdPushMapper.xml
  5. 10 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceProductUpdateService.java
  6. 6 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/ICutGroupRankPushService.java
  7. 2 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IDateReportsPushService.java
  8. 2 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IReportsAdPushService.java
  9. 9 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IReportsByBusinessPushService.java
  10. 379 117
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceProductUpdateServiceImpl.java
  11. 194 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/CutGroupRankPushServiceImpl.java
  12. 20 6
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/DateReportsPushServiceImpl.java
  13. 2 2
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/OptimizerRankPushServiceImpl.java
  14. 102 62
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ReportsAdPushServiceImpl.java
  15. 282 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ReportsByBusinessPushServiceImpl.java
  16. 3 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/TotalRankPushServiceImpl.java
  17. 10 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceProductUploadJob.java
  18. 25 5
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/FeishuPushJob.java

+ 17 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceProductUpdateMapper.java

@@ -17,4 +17,21 @@ public interface BytedanceProductUpdateMapper {
 
 
     int updateInstanceId(@Param("advertiserId") String advertiserId, @Param("instanceId") String instanceId);
     int updateInstanceId(@Param("advertiserId") String advertiserId, @Param("instanceId") String instanceId);
 
 
+    JSONObject getVideoInfo(@Param("videoId") Long videoId);
+    List<JSONObject> getVideoDetail(@Param("videoId") Long videoId);
+
+
+    List<JSONObject> getUploadList();
+
+    JSONObject getDeveloperAccount();
+
+    int insertAlbumInfo(@Param("albumId") String albumId,
+                        @Param("videoId") Long videoId);
+
+    List<JSONObject> selectWaitingAlbums();
+
+    int updateAlbumInfo(@Param("albumId") String albumId,
+                        @Param("canPromotion") int status,
+                        @Param("cannotReason") String failReason);
+
 }
 }

+ 22 - 4
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/ReportsAdPushMapper.java

@@ -9,11 +9,24 @@ import java.util.Map;
 public interface ReportsAdPushMapper {
 public interface ReportsAdPushMapper {
 
 
     List<JSONObject> selectUserList();
     List<JSONObject> selectUserList();
+    Map<String, String> allBusinessPushData(@Param("date") Long date);
+    List<Map<String, String>> allBusinessTopMovie(@Param("date") Long date);
+    JSONObject businessTypeData(@Param("date") Long date, @Param("businessTypes") List<Integer> businessTypes);
 
 
+
+    //给老板的
     Map<String, String> tmpPushData(@Param("date") Long date);
     Map<String, String> tmpPushData(@Param("date") Long date);
-    Map<String, String> tmpPushHourData(@Param("date") Long date, @Param("hour") String hour);
     List<Map<String, String>> tmpTopMovie(@Param("date") Long date);
     List<Map<String, String>> tmpTopMovie(@Param("date") Long date);
+    //部门前后项数据排名
+    List<Map<String, String>> deptRank2(@Param("date") Long date);
+
 
 
+
+    //给投手的
+    Map<String, String> adDailyData(@Param("date") Long date);
+    Map<String, String> adHourData(@Param("date") Long date, @Param("hour") String hour);
+
+    List<JSONObject> todayTopMovie(@Param("date") Long date, @Param("hour") String hour);
     //所有优化师消耗排名
     //所有优化师消耗排名
     List<Map<String, String>> optimizerCostRank(@Param("date") Long date, @Param("hour") String hour);
     List<Map<String, String>> optimizerCostRank(@Param("date") Long date, @Param("hour") String hour);
     //优化师当日数据
     //优化师当日数据
@@ -23,12 +36,17 @@ public interface ReportsAdPushMapper {
     //全部部门排行
     //全部部门排行
     List<Map<String, String>> deptCostRank(@Param("date") Long date, @Param("hour") String hour);
     List<Map<String, String>> deptCostRank(@Param("date") Long date, @Param("hour") String hour);
 
 
+
+
     //漏绑账户预警
     //漏绑账户预警
     List<Map<String, String>> unbindData(@Param("date") Long date, @Param("last90Day") Long last90Day,
     List<Map<String, String>> unbindData(@Param("date") Long date, @Param("last90Day") Long last90Day,
                                          @Param("list") List<String> list);
                                          @Param("list") List<String> list);
-
     //错绑账户预警
     //错绑账户预警
     List<Map<String, String>> bindAppErrorData(@Param("last30Day") Long last30Day);
     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);
 }
 }

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

@@ -1,11 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?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" >
 <!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.BytedanceProductUpdateMapper">
 <mapper namespace="cn.com.ctop.job.bytedance.data.mapper.BytedanceProductUpdateMapper">
+    <insert id="insertAlbumInfo">
+        insert into deepthink.bytedance_upload_album
+        (album_id, ly_video_id)
+        values
+        (#{albumId}, #{videoId})
+    </insert>
     <update id="updateInstanceId">
     <update id="updateInstanceId">
         update deepthink.bytedance_product_main_advertiser
         update deepthink.bytedance_product_main_advertiser
         set mini_instance_id = #{instanceId}
         set mini_instance_id = #{instanceId}
         where advertiser_id = #{advertiserId}
         where advertiser_id = #{advertiserId}
     </update>
     </update>
+    <update id="updateAlbumInfo">
+        update deepthink.bytedance_upload_album
+        set can_promotion = #{canPromotion}, cannot_reason = #{cannotReason}
+        where album_id = #{albumId}
+    </update>
 
 
 
 
     <select id="getIAPPlatformList" resultType="com.alibaba.fastjson.JSONObject">
     <select id="getIAPPlatformList" resultType="com.alibaba.fastjson.JSONObject">
@@ -13,39 +24,41 @@
         FROM deepthink.bytedance_product_main_advertiser t1
         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_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
         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>
     <select id="getIAAPlatformList" resultType="com.alibaba.fastjson.JSONObject">
     <select id="getIAAPlatformList" resultType="com.alibaba.fastjson.JSONObject">
         select t1.*, t3.access_token
         select t1.*, t3.access_token
         FROM deepthink.bytedance_product_main_advertiser t1
         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_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
         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>
     <select id="getIAPVideoList" resultType="com.alibaba.fastjson.JSONObject">
     <select id="getIAPVideoList" resultType="com.alibaba.fastjson.JSONObject">
-        select third.album_id, 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',
+        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,
         '天津星链视界信息技术有限公司' as copyright_owner, '其他' as playlet_gender, video.update_sort as playlet_num, '2' as playlet_duration,
         '天津星链视界信息技术有限公司' as copyright_owner, '其他' as playlet_gender, video.update_sort as playlet_num, '2' as playlet_duration,
         payinfo.sort as start_pay_playlet, '5' as membership_types, '1' as has_paid_content, '2' as has_motivation_types,
         payinfo.sort as start_pay_playlet, '5' as membership_types, '1' as has_paid_content, '2' as has_motivation_types,
         payinfo.maxpay as max_charge, payinfo.minpay as min_charge, maxpay as recommended_charge, maxpay as price,
         payinfo.maxpay as max_charge, payinfo.minpay as min_charge, maxpay as recommended_charge, maxpay as price,
         2 as has_paid_content, 1 as has_motivation_content
         2 as has_paid_content, 1 as has_motivation_content
-        FROM (select * from thirtpart.ly_third_videos where submission_status=2
+        FROM (select video_id, album_id, 1 as platform_type from thirtpart.ly_third_videos where submission_status=2 and platform=2
         and video_id in (select video_id from thirtpart.ly_video_audit_records where audit_status=2)
         and video_id in (select video_id from thirtpart.ly_video_audit_records where audit_status=2)
+        union select ly_video_id as video_id, album_id, 2 as platform_type from deepthink.bytedance_upload_album where can_promotion=1
         ) third
         ) third
         LEFT JOIN (select * from thirtpart.ly_video_details where platform_config is not null group by video_id) detail ON third.video_id = detail.video_id
         LEFT JOIN (select * from thirtpart.ly_video_details where platform_config is not null group by video_id) detail ON third.video_id = detail.video_id
-        LEFT JOIN (select * from thirtpart.ly_videos where play_platform like '%2%') video ON third.video_id = video.id and third.platform=2
+        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 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
         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>
     <select id="getIAAVideoList" resultType="com.alibaba.fastjson.JSONObject">
     <select id="getIAAVideoList" resultType="com.alibaba.fastjson.JSONObject">
-        select third.album_id, 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',
+        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,
         '天津星链视界信息技术有限公司' as copyright_owner, '其他' as playlet_gender, video.update_sort as playlet_num, '2' as playlet_duration,
         '天津星链视界信息技术有限公司' as copyright_owner, '其他' as playlet_gender, video.update_sort as playlet_num, '2' as playlet_duration,
         '5' as membership_types, '1' as has_paid_content, '2' as has_motivation_types,payinfo.sort as starting_unlock_episode
         '5' as membership_types, '1' as has_paid_content, '2' as has_motivation_types,payinfo.sort as starting_unlock_episode
-        FROM (select * from thirtpart.ly_third_videos where submission_status=2
+        FROM (select video_id, album_id, 1 as platform_type from thirtpart.ly_third_videos where submission_status=2 and platform=2
         and video_id in (select video_id from thirtpart.ly_video_audit_records where audit_status=2)
         and video_id in (select video_id from thirtpart.ly_video_audit_records where audit_status=2)
+        union select ly_video_id as video_id, album_id, 2 as platform_type from deepthink.bytedance_upload_album where can_promotion=1
         ) third
         ) third
         LEFT JOIN (select * from thirtpart.ly_video_details where platform_config is not null group by video_id) detail ON third.video_id = detail.video_id
         LEFT JOIN (select * from thirtpart.ly_video_details where platform_config is not null group by video_id) detail ON third.video_id = detail.video_id
-        LEFT JOIN (select * from thirtpart.ly_videos where play_platform like '%2%') video ON third.video_id = video.id and third.platform=2
+        LEFT JOIN (select * from thirtpart.ly_videos where play_platform like '%2%') video ON third.video_id = video.id
         LEFT JOIN thirtpart.ly_video_category category ON video.category_id = category.id
         LEFT JOIN thirtpart.ly_video_category category ON video.category_id = category.id
         LEFT JOIN (select video_id, max(sort) as sort from thirtpart.ly_video_details where is_pay=0 group by video_id) payinfo ON video.id = payinfo.video_id
         LEFT JOIN (select video_id, max(sort) as sort from thirtpart.ly_video_details where is_pay=0 group by video_id) payinfo ON video.id = payinfo.video_id
         where video.is_free = 0
         where video.is_free = 0
@@ -60,4 +73,28 @@
         from deepthink.bytedance_product_group_types
         from deepthink.bytedance_product_group_types
         where `type`=1
         where `type`=1
     </select>
     </select>
+    <select id="getVideoInfo" resultType="com.alibaba.fastjson.JSONObject">
+        select id, name, label, cover_img, sylloge from thirtpart.ly_videos where id = #{videoId}
+    </select>
+    <select id="getVideoDetail" resultType="com.alibaba.fastjson.JSONObject">
+        select video_id, name, is_pay, pay_amount, url, sort from thirtpart.ly_video_details where video_id=#{videoId} order by sort
+    </select>
+    <select id="getUploadList"  resultType="com.alibaba.fastjson.JSONObject">
+        select id,name
+        from thirtpart.ly_videos
+        where id not in
+        (select video_id from thirtpart.ly_third_videos where platform=2 and submission_status=2
+        and video_id in (select video_id from thirtpart.ly_video_audit_records where audit_status=2))
+        and id in (select video_id from thirtpart.ly_third_videos where platform=1)
+        and id not in (select ly_video_id from deepthink.bytedance_upload_album)
+    </select>
+    <select id="getDeveloperAccount" resultType="com.alibaba.fastjson.JSONObject">
+        select app_id, secret as app_secret from deepthink.bytedance_auth_config where auth_status=1 limit 1
+    </select>
+    <select id="selectWaitingAlbums"  resultType="com.alibaba.fastjson.JSONObject">
+        select album_id, tb2.name
+        from deepthink.bytedance_upload_album tb1
+        left join thirtpart.ly_videos tb2 on tb1.ly_video_id=tb2.id
+        where can_promotion is null or can_promotion=0
+    </select>
 </mapper>
 </mapper>

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

@@ -1,11 +1,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?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" >
 <!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">
 <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 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,
         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,
         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,
         ifnull(sum(cost_amount),0) AS cost_amount,
         ifnull(sum(cost_amount),0) AS cost_amount,
         round(ifnull(sum(pay_amount), 0), 2) AS pay_amount,
         round(ifnull(sum(pay_amount), 0), 2) AS pay_amount,
+        ifnull(sum(share_iaa_amount), 0) as share_iaa_amount,
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) - ifnull(round(sum(real_cost_amount), 2), 0) AS real_profit,
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) - ifnull(round(sum(real_cost_amount), 2), 0) AS real_profit,
         ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) - ifnull(sum(cost_amount), 0) AS water_profit,
         ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) - ifnull(sum(cost_amount), 0) AS water_profit,
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as end_amount,
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as end_amount,
@@ -13,62 +18,120 @@
         from
         from
         (select sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
         (select sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
         from application.media_ad_report_daily
         from application.media_ad_report_daily
-        where stat_date = #{date}
+        where stat_date = #{date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         ) tb1,
         ) tb1,
         (select sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         (select sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         from application.user_data_report_daily
         from application.user_data_report_daily
-        where stat_date = #{date}
+        where stat_date = #{date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         ) tb2
         ) tb2
     </select>
     </select>
-    <select id="tmpPushHourData" resultType="java.util.Map">
+    <select id="adHourData" 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,
         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,
         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,
         ifnull(sum(cost_amount),0) AS cost_amount,
         ifnull(sum(cost_amount),0) AS cost_amount,
         round(ifnull(sum(pay_amount), 0), 2) AS pay_amount,
         round(ifnull(sum(pay_amount), 0), 2) AS pay_amount,
+        ifnull(sum(share_iaa_amount), 0) as share_iaa_amount,
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) - ifnull(round(sum(real_cost_amount), 2), 0) AS real_profit,
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) - ifnull(round(sum(real_cost_amount), 2), 0) AS real_profit,
         ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) - ifnull(sum(cost_amount), 0) AS water_profit,
         ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) - ifnull(sum(cost_amount), 0) AS water_profit,
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as end_amount
         ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as end_amount
         from
         from
         (select sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
         (select sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
         from application.media_ad_report_hourly
         from application.media_ad_report_hourly
-        where stat_date = #{date} and `hour`= #{hour}
+        where stat_date = #{date} and `hour`= #{hour} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         ) tb1,
         ) tb1,
         (select sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         (select sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         from application.user_data_report_hourly
         from application.user_data_report_hourly
-        where stat_date = #{date} and `hour`= #{hour}
+        where stat_date = #{date} and `hour`= #{hour} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         ) tb2
         ) tb2
     </select>
     </select>
     <select id="tmpTopMovie" resultType="java.util.Map">
     <select id="tmpTopMovie" resultType="java.util.Map">
-        select case ot1.movie_source when 2 then movie_name else concat('欢瑞自制-', movie_name) end as movie_name,
-        ot1.rk, ot1.share_end_amount, ot1.end_amount,  ot2.cost_amount, ot2.real_cost_amount,
-        concat(round(if(ifnull(cost_amount,0)=0, 0, end_amount/cost_amount*100), 2), '%') AS water_roi,
-        concat(round(if(ifnull(real_cost_amount,0)=0, 0, share_end_amount/real_cost_amount*100), 2), '%') AS real_roi
-        FROM
-        (select ifnull(tb2.movie_name, tb1.movie_id) as movie_name, movie_source,
-        rank() over (order by sum(end_amount) desc) as rk, sum(end_amount) as end_amount, sum(share_end_amount) as share_end_amount
+        select tb4.standard_movie_id, tb4.standard_movie_name as movie_name, group_concat(distinct case tb4.movie_source when 2 then 2 else 1 end) as movie_source,
+        rank() over (order by sum(end_amount) desc) as rk,
+        sum(share_end_amount) as share_end_amount, sum(end_amount) as end_amount,  sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount,
+        concat(round(if(ifnull(sum(cost_amount),0)=0, 0, sum(end_amount)/sum(cost_amount)*100), 2), '%') AS water_roi,
+        concat(round(if(ifnull(sum(real_cost_amount),0)=0, 0, sum(share_end_amount)/sum(real_cost_amount)*100), 2), '%') AS real_roi
         from
         from
-        (select
-        ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) as end_amount,
-        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as share_end_amount,
-        movie_id
+        (select product_id from application.media_product_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        union select movie_id from application.user_data_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        ) tb1
+        left join
+        (select product_id, round(ifnull(sum(cost_amount),0),2) as cost_amount, sum(real_cost_amount) as real_cost_amount
+        from application.media_product_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by product_id
+        ) tb2 on tb1.product_id=tb2.product_id
+        left join
+        (select movie_id, ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) as end_amount,
+        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as share_end_amount
+        from application.user_data_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by movie_id
+        ) tb3 on tb1.product_id=tb3.movie_id
+        left join
+        (select moive_id, standard_movie_id, standard_movie_name, movie_source from deepthink.all_moive
+        ) tb4 on tb1.product_id=tb4.moive_id
+        where 1=1 and tb1.product_id!='-9999'
+        group by tb4.standard_movie_name
+        order by sum(end_amount) desc
+        limit 10
+    </select>
+
+    <select id="adDailyData" 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,
+        ifnull(sum(cost_amount),0) AS cost_amount,
+        round(ifnull(sum(pay_amount), 0), 2) AS pay_amount,
+        ifnull(sum(share_iaa_amount), 0) as share_iaa_amount,
+        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) - ifnull(round(sum(real_cost_amount), 2), 0) AS real_profit,
+        ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) - ifnull(sum(cost_amount), 0) AS water_profit,
+        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as end_amount,
+        date_format(update_time, '%Y-%m-%d %H:%i:%s') as update_time
         from
         from
-        application.user_data_report_daily udrd
-        where stat_date = ${date} and movie_id != '-9999'
+        (select sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
+        from application.media_ad_report_daily
+        where stat_date = #{date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        ) tb1,
+        (select sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
+        sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
+        from application.user_data_report_daily
+        where stat_date = #{date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        ) tb2
+    </select>
+
+    <select id="todayTopMovie" resultType="com.alibaba.fastjson.JSONObject" >
+        select tb4.standard_movie_id,
+        tb4.standard_movie_name as movie_name,
+        group_concat(distinct case tb4.movie_source when 2 then 2 else 1 end) as movie_source,
+        sum(share_end_amount) as share_end_amount, sum(end_amount) as end_amount,
+        sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount,
+        concat(round(if(ifnull(sum(cost_amount),0)=0, 0, sum(end_amount)/sum(cost_amount)*100), 2), '%') AS water_roi,
+        concat(round(if(ifnull(sum(real_cost_amount),0)=0, 0, sum(share_end_amount)/sum(real_cost_amount)*100), 2), '%') AS real_roi,
+        round(ifnull(sum(hour_cost_amount), 0), 2) as hour_cost_amount
+        from
+        (select product_id from application.media_product_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        union select movie_id from application.user_data_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))) tb1
+        left join
+        (select product_id, round(ifnull(sum(cost_amount),0),2) as cost_amount, sum(real_cost_amount) as real_cost_amount
+        from application.media_product_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by product_id
+        ) tb2 on tb1.product_id=tb2.product_id
+        left join
+        (select movie_id, ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) as end_amount,
+        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as share_end_amount
+        from application.user_data_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         group by movie_id
         group by movie_id
-        having ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0)>0
-        order by end_amount desc
-        ) tb1
+        ) tb3 on tb1.product_id=tb3.movie_id
         left join
         left join
-        (select distinct moive_id, REGEXP_REPLACE(movie_name, '[^a-zA-Z一-龥]', '') as movie_name, movie_source from deepthink.all_moive) tb2 on tb1.movie_id=tb2.moive_id
-        group by movie_name order by rk limit 10) ot1
+        (select moive_id, standard_movie_id, standard_movie_name, movie_source from deepthink.all_moive
+        ) tb4 on tb1.product_id=tb4.moive_id
         left join
         left join
-        (select REGEXP_REPLACE(product_name, '[^a-zA-Z一-龥]', '') as product_name, round(ifnull(sum(cost_amount),0),2) as cost_amount, sum(real_cost_amount) as real_cost_amount
-        from application.media_product_report_daily where stat_date=${date} group by REGEXP_REPLACE(product_name, '[^a-zA-Z一-龥]', '')
-        ) ot2 on ot1.movie_name=ot2.product_name
-        group by case ot1.movie_source when 2 then movie_name else concat('欢瑞自制-', movie_name) end
-        order by rk
+        (select product_id, ifnull(sum(cost_amount), 0) as hour_cost_amount from application.media_product_report_hourly
+        where stat_date=${date} and `hour`=${hour}  and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by product_id) tb5 on tb1.product_id=tb5.product_id
+        where 1=1 and tb1.product_id != '-9999'
+        group by tb4.standard_movie_name
+        order by sum(end_amount) desc
+        limit 10
     </select>
     </select>
 
 
 
 
@@ -80,10 +143,12 @@
         from
         from
         (select cast(advertiser_id as char) advertiser_id, user_id from deepthink.advertiser_bind_info) tb1
         (select cast(advertiser_id as char) advertiser_id, user_id from deepthink.advertiser_bind_info) tb1
         left join (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
         left join (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
-        from application.media_ad_report_daily where stat_date=#{date} group by advertiser_id) tb2
+        from application.media_ad_report_daily where stat_date=#{date}  and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by advertiser_id) tb2
         on tb1.advertiser_id = tb2.advertiser_id
         on tb1.advertiser_id = tb2.advertiser_id
         left join (select advertiser_id, sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         left join (select advertiser_id, sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
-        from application.user_data_report_daily where stat_date=#{date} group by advertiser_id) tb3
+        from application.user_data_report_daily where stat_date=#{date}  and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by advertiser_id) tb3
         on tb1.advertiser_id = tb3.advertiser_id
         on tb1.advertiser_id = tb3.advertiser_id
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         on tb1.user_id=tb4.user_id
         on tb1.user_id=tb4.user_id
@@ -106,13 +171,13 @@
         left join
         left join
         (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
         (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
         from application.media_ad_report_daily
         from application.media_ad_report_daily
-        where stat_date = #{date}
+        where stat_date = #{date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         group by advertiser_id) tb2 on tb1.advertiser_id = tb2.advertiser_id
         group by advertiser_id) tb2 on tb1.advertiser_id = tb2.advertiser_id
         left join
         left join
         (select advertiser_id, sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         (select advertiser_id, sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         from application.user_data_report_daily
         from application.user_data_report_daily
-        where stat_date = #{date}
+        where stat_date = #{date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         group by advertiser_id) tb3 on tb1.advertiser_id = tb3.advertiser_id
         group by advertiser_id) tb3 on tb1.advertiser_id = tb3.advertiser_id
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         on tb1.user_id=tb4.user_id
         on tb1.user_id=tb4.user_id
@@ -131,13 +196,13 @@
         left join
         left join
         (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
         (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
         from application.media_ad_report_hourly
         from application.media_ad_report_hourly
-        where stat_date = #{date} and `hour`= #{hour}
+        where stat_date = #{date} and `hour`= #{hour} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         group by advertiser_id) tb2 on tb1.advertiser_id = tb2.advertiser_id
         group by advertiser_id) tb2 on tb1.advertiser_id = tb2.advertiser_id
         left join
         left join
         (select advertiser_id, sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         (select advertiser_id, sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         from application.user_data_report_hourly
         from application.user_data_report_hourly
-        where stat_date = #{date} and `hour`= #{hour}
+        where stat_date = #{date} and `hour`= #{hour} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
         group by advertiser_id) tb3 on tb1.advertiser_id = tb3.advertiser_id
         group by advertiser_id) tb3 on tb1.advertiser_id = tb3.advertiser_id
         left join (select user_id, nick_name, phonenumber from deepthink.sys_user) tb4
         left join (select user_id, nick_name, phonenumber from deepthink.sys_user) tb4
         on tb1.user_id=tb4.user_id
         on tb1.user_id=tb4.user_id
@@ -154,10 +219,12 @@
         from
         from
         (select cast(advertiser_id as char) advertiser_id, user_id from deepthink.advertiser_bind_info) tb1
         (select cast(advertiser_id as char) advertiser_id, user_id from deepthink.advertiser_bind_info) tb1
         left join (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
         left join (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
-        from application.media_ad_report_daily where stat_date=#{date} group by advertiser_id) tb2
+        from application.media_ad_report_daily where stat_date=#{date}  and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by advertiser_id) tb2
         on tb1.advertiser_id = tb2.advertiser_id
         on tb1.advertiser_id = tb2.advertiser_id
         left join (select advertiser_id, sum(cost_amount) as cost_amount_hour
         left join (select advertiser_id, sum(cost_amount) as cost_amount_hour
-        from application.media_ad_report_hourly where stat_date=#{date} and `hour`= ${hour} group by advertiser_id) tb3
+        from application.media_ad_report_hourly where stat_date=#{date} and `hour`= ${hour}  and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by advertiser_id) tb3
         on tb1.advertiser_id = tb3.advertiser_id
         on tb1.advertiser_id = tb3.advertiser_id
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         on tb1.user_id=tb4.user_id
         on tb1.user_id=tb4.user_id
@@ -240,10 +307,12 @@
         from
         from
         (select cast(advertiser_id as char) advertiser_id, user_id from deepthink.advertiser_bind_info) tb1
         (select cast(advertiser_id as char) advertiser_id, user_id from deepthink.advertiser_bind_info) tb1
         left join (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
         left join (select advertiser_id, sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount
-        from application.media_ad_report_daily where stat_date=${date} group by advertiser_id) tb2
+        from application.media_ad_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by advertiser_id) tb2
         on tb1.advertiser_id = tb2.advertiser_id
         on tb1.advertiser_id = tb2.advertiser_id
         left join (select advertiser_id, sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
         left join (select advertiser_id, sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
-        from application.user_data_report_daily where stat_date=${date} group by advertiser_id) tb3
+        from application.user_data_report_daily where stat_date=${date} and ma_appid in (select app_id from deepthink.mini_app_info where business_type in (1,2,3,8))
+        group by advertiser_id) tb3
         on tb1.advertiser_id = tb3.advertiser_id
         on tb1.advertiser_id = tb3.advertiser_id
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         left join (select user_id, nick_name, phonenumber, dept_id from deepthink.sys_user) tb4
         on tb1.user_id=tb4.user_id
         on tb1.user_id=tb4.user_id
@@ -253,4 +322,95 @@
         having sum(cost_amount)>1
         having sum(cost_amount)>1
         order by rk
         order by rk
     </select>
     </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>
+    <select id="allBusinessPushData" 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,
+        ifnull(sum(cost_amount),0) AS cost_amount,
+        round(ifnull(sum(pay_amount), 0), 2) AS pay_amount,
+        ifnull(sum(share_iaa_amount), 0) as share_iaa_amount,
+        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) - ifnull(round(sum(real_cost_amount), 2), 0) AS real_profit,
+        ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) - ifnull(sum(cost_amount), 0) AS water_profit,
+        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as end_amount,
+        date_format(update_time, '%Y-%m-%d %H:%i:%s') as update_time
+        from
+        (select sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount, max(update_time) as update_time
+        from application.media_ad_report_daily
+        where stat_date = #{date}
+        ) tb1,
+        (select sum(pay_amount) as pay_amount, sum(iaa_amount) as iaa_amount,
+        sum(share_iaa_amount) as share_iaa_amount, sum(share_pay_amount) as share_pay_amount
+        from application.user_data_report_daily
+        where stat_date = #{date}
+        ) tb2
+    </select>
+    <select id="allBusinessTopMovie" resultType="java.util.Map">
+        select tb4.standard_movie_id, tb4.standard_movie_name as movie_name, group_concat(distinct case tb4.movie_source when 2 then 2 else 1 end) as movie_source,
+        rank() over (order by sum(end_amount) desc) as rk,
+        sum(share_end_amount) as share_end_amount, sum(end_amount) as end_amount,  sum(cost_amount) as cost_amount, sum(real_cost_amount) as real_cost_amount,
+        concat(round(if(ifnull(sum(cost_amount),0)=0, 0, sum(end_amount)/sum(cost_amount)*100), 2), '%') AS water_roi,
+        concat(round(if(ifnull(sum(real_cost_amount),0)=0, 0, sum(share_end_amount)/sum(real_cost_amount)*100), 2), '%') AS real_roi
+        from
+        (select product_id from application.media_product_report_daily where stat_date=${date}
+        union select movie_id from application.user_data_report_daily where stat_date=${date}
+        ) tb1
+        left join
+        (select product_id, round(ifnull(sum(cost_amount),0),2) as cost_amount, sum(real_cost_amount) as real_cost_amount
+        from application.media_product_report_daily where stat_date=${date}
+        group by product_id
+        ) tb2 on tb1.product_id=tb2.product_id
+        left join
+        (select movie_id, ifnull(sum(iaa_amount), 0) + ifnull(sum(pay_amount), 0) as end_amount,
+        ifnull(sum(share_iaa_amount), 0) + ifnull(sum(share_pay_amount), 0) as share_end_amount
+        from application.user_data_report_daily where stat_date=${date}
+        group by movie_id
+        ) tb3 on tb1.product_id=tb3.movie_id
+        left join
+        (select moive_id, standard_movie_id, standard_movie_name, movie_source from deepthink.all_moive
+        ) tb4 on tb1.product_id=tb4.moive_id
+        where 1=1 and tb1.product_id!='-9999'
+        group by tb4.standard_movie_name
+        order by sum(end_amount) desc
+        limit 10
+    </select>
+    <select id="businessTypeData" resultType="com.alibaba.fastjson.JSONObject">
+        select ifnull(sum(share_pay_amount),0) as iap_end_amount,
+        ifnull(sum(share_iaa_amount),0) as iaa_end_amount
+        from application.user_data_report_daily where stat_date=${date}
+        and ma_appid in
+        (select app_id from deepthink.mini_app_info where business_type in
+        <if test="businessTypes != null and businessTypes.size > 0">
+            <foreach item="item" index="index" collection="businessTypes" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>)
+    </select>
 </mapper>
 </mapper>

+ 10 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceProductUpdateService.java

@@ -1,8 +1,17 @@
 package cn.com.ctop.job.bytedance.data.service;
 package cn.com.ctop.job.bytedance.data.service;
 
 
+import java.io.IOException;
+
 public interface IBytedanceProductUpdateService {
 public interface IBytedanceProductUpdateService {
 
 
     void run() throws Exception;
     void run() throws Exception;
 
 
     void initNew();
     void initNew();
-}
+
+    void test() throws Exception;
+
+
+    void uploadAlbum() throws IOException;
+
+    void refreshAlbumStatus() throws IOException;
+}

+ 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();
+}

+ 2 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IDateReportsPushService.java

@@ -9,4 +9,6 @@ public interface IDateReportsPushService {
     void preSend();
     void preSend();
 
 
     public void send12hour();
     public void send12hour();
+
+    void test();
 }
 }

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

@@ -3,4 +3,6 @@ package cn.com.ctop.job.bytedance.data.service;
 public interface IReportsAdPushService {
 public interface IReportsAdPushService {
 
 
     void send();
     void send();
+
+    void test();
 }
 }

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

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

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

@@ -5,6 +5,7 @@ import cn.com.ctop.job.bytedance.data.service.IBytedanceProductUpdateService;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
 import cn.com.ctop.job.bytedance.utils.FeishuRobotUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -12,6 +13,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 @Slf4j
 @Slf4j
@@ -20,12 +22,13 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
     @Resource
     @Resource
     BytedanceProductUpdateMapper bytedanceProductUpdateMapper;
     BytedanceProductUpdateMapper bytedanceProductUpdateMapper;
 
 
-    public static final String APP_ID = "ttba3acc87250c6f7901";
+
+    //商品上传结果通知群
     public static final String HOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/92e2445e-76df-44fb-8f61-f55ac94f49bd";
     public static final String HOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/92e2445e-76df-44fb-8f61-f55ac94f49bd";
 
 
     @Override
     @Override
     public void run() throws Exception {
     public void run() throws Exception {
-        List<String> errors = new ArrayList<>();
+        Set<String> errors = new HashSet<>();
         log.info("付费商品库更新中...");
         log.info("付费商品库更新中...");
         iapProductUpdate(errors);
         iapProductUpdate(errors);
         log.info("付费商品库更新完成");
         log.info("付费商品库更新完成");
@@ -33,16 +36,17 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         iaaProductUpdate(errors);
         iaaProductUpdate(errors);
         log.info("免费商品库更新完成");
         log.info("免费商品库更新完成");
         if (!Check.isNull(errors)){
         if (!Check.isNull(errors)){
-//            List<String> users = Arrays.asList(
-//                    "44fbaed6" //zhaotx
-//                    ,"58e7a98a"  //xsq
-//            );
-            FeishuRobotUtil.sendTextToWebhook(StringUtils.join(errors, "\n"), HOOK_URL);
+            List<String> info = new ArrayList<>();
+            info.add("商品上传报错通知");
+            info.addAll(errors);
+            FeishuRobotUtil.sendTextToWebhook(StringUtils.join(info, "\n"), HOOK_URL);
         }
         }
-
     }
     }
 
 
 
 
+    /**
+     * 初始化新的字节小程序; 新增字节用的商品库时调用
+     */
     @Override
     @Override
     public void initNew(){
     public void initNew(){
         List<JSONObject> iapPlatformList = bytedanceProductUpdateMapper.getIAPPlatformList();
         List<JSONObject> iapPlatformList = bytedanceProductUpdateMapper.getIAPPlatformList();
@@ -51,6 +55,18 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         initNew(iapPlatformList);
         initNew(iapPlatformList);
     }
     }
 
 
+    @Override
+    public void test() throws Exception {
+//        uploadAlbum(31084L, 1742489802322972L, "d22b45ce9033303d22c5f34abcd4600811b18d88");
+//        uploadAlbum();
+//        Thread.sleep(1000);
+        refreshAlbumStatus();
+//        List<String> errors = new ArrayList<>();
+//        iapProductUpdate(errors);
+//        System.out.println(errors);
+
+    }
+
     public void initNew(List<JSONObject> platformList)  {
     public void initNew(List<JSONObject> platformList)  {
         //为广告主账户创建新的字节小程序
         //为广告主账户创建新的字节小程序
         //step1 查询表里广告主是否都有自己的字节小程序、
         //step1 查询表里广告主是否都有自己的字节小程序、
@@ -96,11 +112,15 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         }
         }
     }
     }
 
 
-    private void iapProductUpdate(List<String> errorBlanket){
+    /**
+     * 付费短剧更新
+     * @param errorBlanket
+     */
+    private void iapProductUpdate(Set<String> errorBlanket){
         //IAP
         //IAP
-        List<JSONObject> iapPlatformList = bytedanceProductUpdateMapper.getIAPPlatformList();
-        List<JSONObject> iapVideoList = bytedanceProductUpdateMapper.getIAPVideoList();
-        List<JSONObject> iapProductTypeEnums = bytedanceProductUpdateMapper.getIAPProductTypeEnums();
+        List<JSONObject> iapPlatformList = bytedanceProductUpdateMapper.getIAPPlatformList(); //商品库列表
+        List<JSONObject> iapVideoList = bytedanceProductUpdateMapper.getIAPVideoList(); //剧目列表
+        List<JSONObject> iapProductTypeEnums = bytedanceProductUpdateMapper.getIAPProductTypeEnums(); //商品类型
         Map<String, Map<String, String>> advertiserToLinkMap = new HashMap<>();
         Map<String, Map<String, String>> advertiserToLinkMap = new HashMap<>();
 
 
         for (JSONObject obj : iapPlatformList){
         for (JSONObject obj : iapPlatformList){
@@ -112,7 +132,8 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
                 System.out.println("没有找到字节小程序的实例ID: " + advertiserId);
                 System.out.println("没有找到字节小程序的实例ID: " + advertiserId);
                 continue;
                 continue;
             }
             }
-            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(advertiserId, accessToken, instanceId, iapVideoList, errorBlanket);
+            List<JSONObject> iapVideoDouyinList = iapVideoList.stream().filter(obj1 -> "1".equals(obj1.getString("platform_type"))).collect(Collectors.toList());
+            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(advertiserId, accessToken, instanceId, iapVideoDouyinList, errorBlanket);
             advertiserToLinkMap.put(advertiserId, albumIdToLinkMap);
             advertiserToLinkMap.put(advertiserId, albumIdToLinkMap);
         }
         }
 
 
@@ -129,72 +150,109 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
                 System.out.println("\n\n\n");
                 System.out.println("\n\n\n");
                 continue;
                 continue;
             }
             }
+            Integer platformType1 = obj.getInteger("platform_type");
+
             for (JSONObject platform : iapPlatformList) {
             for (JSONObject platform : iapPlatformList) {
-                String url = "https://ad.oceanengine.com/open_api/2/dpa/product/update/";
-                Map<String, String> headers = new HashMap<>();
-                headers.put("Access-Token", platform.getString("access_token"));
-                headers.put("Content-Type", "application/json");
-
-                JSONObject request = new JSONObject();
-                String album_id = obj.getString("album_id");
-                request.put("product_id", obj.getLongValue("album_id"));
-                JSONObject product_info = new JSONObject();
-                product_info.put("name", obj.getString("name"));
-                product_info.put("image_url", obj.getString("img"));
-                product_info.put("status", 1);
-                product_info.put("stock", 1);
-                JSONObject productType = iapProductTypeMap.get(theme);
-                product_info.put("first_category_id", productType.getString("first_type_id"));
-                product_info.put("sub_category_id", productType.getString("second_type_id"));
-                product_info.put("third_category_id", productType.getString("third_type_id"));
-                product_info.put("first_category", productType.getString("first_type_name"));
-                product_info.put("sub_category", productType.getString("second_type_name"));
-                product_info.put("third_category", productType.getString("third_type_name"));
-                request.put("advertiser_id", platform.getLongValue("advertiser_id"));
-                request.put("platform_id", platform.getLongValue("platform_id"));
-                JSONObject profession = new JSONObject();
-                profession.put("copyright_owner", obj.getString("copyright_owner"));
-                profession.put("playlet_gender", "3");
-                profession.put("playlet_num", obj.getString("playlet_num"));
-                profession.put("playlet_duration", obj.getString("playlet_duration"));
-                profession.put("start_pay_playlet", obj.getString("start_pay_playlet"));
-                if (platform.getDouble("max_charge") > 0.0){
-                    profession.put("max_charge", platform.getString("max_charge"));
-                }
-                if (platform.getDouble("min_charge") > 0.0){
-                    profession.put("min_charge", platform.getString("min_charge"));
-                }
-                if (platform.getDouble("recommended_charge") > 0.0){
-                    profession.put("recommended_charge", platform.getString("recommended_charge"));
+                Integer platformType2 = platform.getInteger("platform_type");
+                if (!Objects.equals(platformType1, platformType2)){
+                    continue;
                 }
                 }
-                profession.put("has_paid_content", "1");
-                profession.put("has_motivation_content", "2");
-                profession.put("membership_types", platform.getString("membership_types"));
-                profession.put("micro_app_link", advertiserToLinkMap.get(platform.getString("advertiser_id")).get(album_id));
-                //price_info
-                JSONObject price_info = new JSONObject();
-                price_info.put("price", platform.getDoubleValue("single_price"));
-                product_info.put("price_info", price_info);
-                product_info.put("profession", profession);
-                request.put("product_info", product_info);
-
-
-//                System.out.println("请求地址:" + url);
-//                System.out.println("请求头:" + headers);
-//                System.out.println("请求参数:" + request.toJSONString());
-                String res = HttpUtils.httpPostRequest(url, request, headers);
-//                System.out.println(res);
-                JSONObject btRes = JSONObject.parseObject(res);
-                int code = btRes.getIntValue("code");
-                if (code != 0){
-                    errorBlanket.add("上传付费商品失败,code: " + code + ", msg: " + btRes.getString("message")+", 关联剧目: " + obj.getString("name"));
+                int rescode = uploadIapProduct(platform, obj, advertiserToLinkMap, errorBlanket, iapProductTypeMap.get(theme));
+                if (rescode!= 0){
+//                    return;
                 }
                 }
 //                System.out.println("\n\n\n");
 //                System.out.println("\n\n\n");
             }
             }
         }
         }
     }
     }
 
 
-    private void iaaProductUpdate(List<String> errorBlanket){
+    /**
+     * 付费短剧更新
+     * @param platform 商品库信息
+     * @param album 剧信息
+     * @param advertiserToLinkMap
+     * @param errorBlanket
+     * @param productType 商品短剧类型
+     */
+    private int uploadIapProduct(JSONObject platform, JSONObject album,
+                                  Map<String, Map<String, String>> advertiserToLinkMap,
+                                  Set<String> errorBlanket,
+                                  JSONObject productType){
+        String url = "https://ad.oceanengine.com/open_api/2/dpa/product/update/";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Access-Token", platform.getString("access_token"));
+        headers.put("Content-Type", "application/json");
+
+        JSONObject request = new JSONObject();
+        String album_id = album.getString("album_id");
+        request.put("product_id", album.getLongValue("album_id"));
+        JSONObject product_info = new JSONObject();
+        product_info.put("name", album.getString("name"));
+        product_info.put("image_url", album.getString("img"));
+        product_info.put("status", 1);
+        product_info.put("stock", 1);
+        product_info.put("first_category_id", productType.getString("first_type_id"));
+        product_info.put("sub_category_id", productType.getString("second_type_id"));
+        product_info.put("third_category_id", productType.getString("third_type_id"));
+        product_info.put("first_category", productType.getString("first_type_name"));
+        product_info.put("sub_category", productType.getString("second_type_name"));
+        product_info.put("third_category", productType.getString("third_type_name"));
+        request.put("advertiser_id", platform.getLongValue("advertiser_id"));
+        request.put("platform_id", platform.getLongValue("platform_id"));
+        JSONObject profession = new JSONObject();
+        profession.put("copyright_owner", album.getString("copyright_owner"));
+        profession.put("playlet_gender", "3");
+        profession.put("playlet_num", album.getString("playlet_num"));
+        profession.put("playlet_duration", album.getString("playlet_duration"));
+        profession.put("start_pay_playlet", album.getString("start_pay_playlet"));
+        if (platform.getDouble("max_charge") > 0.0){
+            profession.put("max_charge", platform.getString("max_charge"));
+        }
+        if (platform.getDouble("min_charge") > 0.0){
+            profession.put("min_charge", platform.getString("min_charge"));
+        }
+        if (platform.getDouble("recommended_charge") > 0.0){
+            profession.put("recommended_charge", platform.getString("recommended_charge"));
+        }
+        profession.put("has_paid_content", "1");
+        profession.put("has_motivation_content", "2");
+        profession.put("membership_types", platform.getString("membership_types"));
+        Map<String, String> linkObj = advertiserToLinkMap.get(platform.getString("advertiser_id"));
+        String play_platform = album.getString("play_platform");
+        List<String> ad_carrier = new ArrayList<>();
+        if (linkObj != null){
+            profession.put("micro_app_link", linkObj.get(album_id));
+            ad_carrier.add("字节小程序");
+            if (play_platform.contains("1")){
+                ad_carrier.add("微信小程序");
+            }
+        }else {
+            profession.put("album_id", album_id);
+            ad_carrier.add("微信小程序");
+        }
+        profession.put("ad_carrier", JSON.toJSONString(ad_carrier));
+
+        //price_info
+        JSONObject price_info = new JSONObject();
+        price_info.put("price", platform.getDoubleValue("single_price"));
+        product_info.put("price_info", price_info);
+        product_info.put("profession", profession);
+        request.put("product_info", product_info);
+
+
+//        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");
+        if (code != 0){
+            errorBlanket.add("上传付费商品失败,code: " + code + ", msg: " + btRes.getString("message")+", 关联剧目: " + album.getString("name"));
+        }
+        return code;
+    }
+
+    private void iaaProductUpdate(Set<String> errorBlanket){
         //IAA
         //IAA
         List<JSONObject> iaaPlatformList = bytedanceProductUpdateMapper.getIAAPlatformList();
         List<JSONObject> iaaPlatformList = bytedanceProductUpdateMapper.getIAAPlatformList();
         List<JSONObject> iaaVideoList = bytedanceProductUpdateMapper.getIAAVideoList();
         List<JSONObject> iaaVideoList = bytedanceProductUpdateMapper.getIAAVideoList();
@@ -211,7 +269,8 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
                 System.out.println("没有找到字节小程序的实例ID: " + advertiserId);
                 System.out.println("没有找到字节小程序的实例ID: " + advertiserId);
                 continue; //todo
                 continue; //todo
             }
             }
-            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(advertiserId, accessToken, instanceId, iaaVideoList, errorBlanket);
+            List<JSONObject> iaaVideoDouyinList = iaaVideoList.stream().filter(obj1 -> "1".equals(obj1.getString("platform_type"))).collect(Collectors.toList());
+            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(advertiserId, accessToken, instanceId, iaaVideoDouyinList, errorBlanket);
             advertiserToLinkMap.put(advertiserId, albumIdToLinkMap);
             advertiserToLinkMap.put(advertiserId, albumIdToLinkMap);
         }
         }
 
 
@@ -228,51 +287,16 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
                 System.out.println("\n\n\n");
                 System.out.println("\n\n\n");
                 continue;
                 continue;
             }
             }
-
+            Integer platformType1 = obj.getInteger("platform_type");
 
 
             for (JSONObject platform : iaaPlatformList) {
             for (JSONObject platform : iaaPlatformList) {
-                String url = "https://ad.oceanengine.com/open_api/2/dpa/product/update/";
-                Map<String, String> headers = new HashMap<>();
-                headers.put("Access-Token", platform.getString("access_token"));
-                headers.put("Content-Type", "application/json");
-                String album_id = obj.getString("album_id");
-                JSONObject request = new JSONObject();
-                request.put("product_id", obj.getLongValue("album_id"));
-                JSONObject product_info = new JSONObject();
-                product_info.put("name", obj.getString("name"));
-                product_info.put("image_url", obj.getString("img"));
-                product_info.put("status", 1);
-                product_info.put("stock", 1);
-                JSONObject productType = iaaProductTypeMap.get(theme);
-                product_info.put("first_category_id", productType.getString("first_type_id"));
-                product_info.put("sub_category_id", productType.getString("second_type_id"));
-                product_info.put("third_category_id", productType.getString("third_type_id"));
-                product_info.put("first_category", productType.getString("first_type_name"));
-                product_info.put("sub_category", productType.getString("second_type_name"));
-                product_info.put("third_category", productType.getString("third_type_name"));
-                JSONObject profession = new JSONObject();
-                profession.put("copyright_owner", obj.getString("copyright_owner"));
-                profession.put("playlet_gender", "3");
-                profession.put("playlet_num", obj.getString("playlet_num"));
-                profession.put("playlet_duration", obj.getString("playlet_duration"));
-                profession.put("has_paid_content", "2");
-                profession.put("has_motivation_content", "2");
-                profession.put("membership_types", "5");
-                profession.put("starting_unlock_episode", obj.getString("starting_unlock_episode"));
-                profession.put("micro_app_link", advertiserToLinkMap.get(platform.getString("advertiser_id")).get(album_id));
-                product_info.put("profession", profession);
-                request.put("product_info", product_info);
-                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());
-                String res = HttpUtils.httpPostRequest(url, request, headers);
-                JSONObject btRes = JSONObject.parseObject(res);
-                int code = btRes.getIntValue("code");
-                if (code != 0){
-                    errorBlanket.add("上传免费商品失败,code: " + code + ", msg: " + btRes.getString("message")+", 关联剧目: " + obj.getString("name"));
+                Integer platformType2 = platform.getInteger("platform_type");
+                if (!Objects.equals(platformType1, platformType2)){
+                    continue;
+                }
+                int code = uploadIaaProduct(platform, obj, advertiserToLinkMap, errorBlanket, iaaProductTypeMap.get(theme));
+                if (code !=0){
+
                 }
                 }
 //                System.out.println(res);
 //                System.out.println(res);
 //                System.out.println("\n\n\n");
 //                System.out.println("\n\n\n");
@@ -280,6 +304,69 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         }
         }
     }
     }
 
 
+    private int uploadIaaProduct(JSONObject platform, JSONObject album, Map<String,
+            Map<String, String>> advertiserToLinkMap,
+                                  Set<String> errorBlanket,
+                                  JSONObject productType){
+        String url = "https://ad.oceanengine.com/open_api/2/dpa/product/update/";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Access-Token", platform.getString("access_token"));
+        headers.put("Content-Type", "application/json");
+        String album_id = album.getString("album_id");
+        JSONObject request = new JSONObject();
+        request.put("product_id", album.getLongValue("album_id"));
+        JSONObject product_info = new JSONObject();
+        product_info.put("name", album.getString("name"));
+        product_info.put("image_url", album.getString("img"));
+        product_info.put("status", 1);
+        product_info.put("stock", 1);
+        product_info.put("first_category_id", productType.getString("first_type_id"));
+        product_info.put("sub_category_id", productType.getString("second_type_id"));
+        product_info.put("third_category_id", productType.getString("third_type_id"));
+        product_info.put("first_category", productType.getString("first_type_name"));
+        product_info.put("sub_category", productType.getString("second_type_name"));
+        product_info.put("third_category", productType.getString("third_type_name"));
+        JSONObject profession = new JSONObject();
+        profession.put("copyright_owner", album.getString("copyright_owner"));
+        profession.put("playlet_gender", "3");
+        profession.put("playlet_num", album.getString("playlet_num"));
+        profession.put("playlet_duration", album.getString("playlet_duration"));
+        profession.put("has_paid_content", "2");
+        profession.put("has_motivation_content", "2");
+        profession.put("membership_types", "5");
+        profession.put("starting_unlock_episode", album.getString("starting_unlock_episode"));
+        Map<String, String> linkObj = advertiserToLinkMap.get(platform.getString("advertiser_id"));
+        String play_platform = album.getString("play_platform");
+        List<String> ad_carrier = new ArrayList<>();
+        if (linkObj != null){
+            profession.put("micro_app_link", linkObj.get(album_id));
+            ad_carrier.add("字节小程序");
+            if (play_platform.contains("1")){
+                ad_carrier.add("微信小程序");
+            }
+        }else {
+            profession.put("album_id", album_id);
+            ad_carrier.add("微信小程序");
+        }
+        profession.put("ad_carrier", JSON.toJSONString(ad_carrier));
+
+        product_info.put("profession", profession);
+        request.put("product_info", product_info);
+        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());
+        String res = HttpUtils.httpPostRequest(url, request, headers);
+        JSONObject btRes = JSONObject.parseObject(res);
+        int code = btRes.getIntValue("code");
+        if (code != 0){
+            errorBlanket.add("上传免费商品失败,code: " + code + ", msg: " + btRes.getString("message")+", 关联剧目: " + album.getString("name"));
+        }
+        return code;
+    }
+
     /**
     /**
      *
      *
      * @param advertiserId 商品库主账户ID,也是创建字节小程序的ID
      * @param advertiserId 商品库主账户ID,也是创建字节小程序的ID
@@ -287,7 +374,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
      * @param instanceId 字节小程序的实例ID
      * @param instanceId 字节小程序的实例ID
      * @return map key: album_id, value: 对应的字节小程序推广链接,sslocal开头
      * @return map key: album_id, value: 对应的字节小程序推广链接,sslocal开头
      */
      */
-    private Map<String, String> getBytedancePlayletPromoteLink(String advertiserId, String accessToken, String instanceId, List<JSONObject> requests, List<String> errorBlanket){
+    private Map<String, String> getBytedancePlayletPromoteLink(String advertiserId, String accessToken, String instanceId, List<JSONObject> requests, Set<String> errorBlanket){
         JSONArray playletDetailInfo = getPlayletDetail(advertiserId, accessToken, instanceId, errorBlanket);
         JSONArray playletDetailInfo = getPlayletDetail(advertiserId, accessToken, instanceId, errorBlanket);
         if (playletDetailInfo == null || playletDetailInfo.isEmpty()){
         if (playletDetailInfo == null || playletDetailInfo.isEmpty()){
             return null;
             return null;
@@ -375,7 +462,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
     }
     }
 
 
-    private JSONArray getPlayletDetail(String advertiserId, String accessToken, String instanceId, List<String> errorBlanket) {
+    private JSONArray getPlayletDetail(String advertiserId, String accessToken, String instanceId, Set<String> errorBlanket) {
         String getPlayletDetailUrl = "https://api.oceanengine.com/open_api/v3.0/tools/asset_link/list/";
         String getPlayletDetailUrl = "https://api.oceanengine.com/open_api/v3.0/tools/asset_link/list/";
         getPlayletDetailUrl = getPlayletDetailUrl.replace("${ADVERTISER_ID}", advertiserId);
         getPlayletDetailUrl = getPlayletDetailUrl.replace("${ADVERTISER_ID}", advertiserId);
         getPlayletDetailUrl = getPlayletDetailUrl.replace("${INSTANCE_ID}", instanceId);
         getPlayletDetailUrl = getPlayletDetailUrl.replace("${INSTANCE_ID}", instanceId);
@@ -404,4 +491,179 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
     }
     }
 
 
+
+    public void uploadAlbum() throws IOException {
+        List<String> info = new ArrayList<>();
+        info.add("仅微小剧目上传通知");
+        List<JSONObject> wxVideoInfos = bytedanceProductUpdateMapper.getUploadList();
+        JSONObject developerAccount = bytedanceProductUpdateMapper.getDeveloperAccount();
+        Long appId = developerAccount.getLong("app_id");
+        String appAccessToken = getAppAccessToken(appId, developerAccount.getString("app_secret"));
+        if (appAccessToken == null){
+            System.out.println("获取app_access_token失败");
+            info.add("获取app_access_token失败");
+            FeishuRobotUtil.sendTextToWebhook(StringUtils.join(info, "\n"), HOOK_URL);
+            return;
+        }
+        for (JSONObject vi : wxVideoInfos){
+            Long videoId = vi.getLong("id");
+            String albumId = uploadAlbum(videoId, appId, appAccessToken);
+            if (albumId == null){
+                info.add("上传短剧失败,videoId: " + videoId + ", 剧目名称: " + vi.getString("name"));
+            }else {
+                bytedanceProductUpdateMapper.insertAlbumInfo(albumId, videoId);
+                info.add("上传短剧成功,videoId: " + videoId + ", 剧目名称: " + vi.getString("name") + ", albumId: " + albumId);
+            }
+        }
+        FeishuRobotUtil.sendTextToWebhook(StringUtils.join(info, "\n"), HOOK_URL);
+    }
+
+    public void refreshAlbumStatus() throws IOException {
+        List<String> info = new ArrayList<>();
+        info.add("短剧审核状态更新通知");
+        JSONObject developerAccount = bytedanceProductUpdateMapper.getDeveloperAccount();
+        Long app_id = developerAccount.getLong("app_id");
+        String app_secret = developerAccount.getString("app_secret");
+        String appAccessToken = getAppAccessToken(app_id, app_secret);
+        if (appAccessToken == null){
+            System.out.println("获取app_access_token失败");
+            return;
+        }
+
+        List<JSONObject> listAlbum = bytedanceProductUpdateMapper.selectWaitingAlbums();
+        for (JSONObject album : listAlbum){
+            String al = album.getString("album_id");
+            String albumName = album.getString("name");
+            String url = "https://api.oceanengine.com/open_api/v3.0/dpa/album_status/get/";
+            Map<String, String> headers = new HashMap<>();
+            headers.put("App-Access-Token", appAccessToken);
+            Map<String, Object> params = new HashMap<>();
+            params.put("album_id", al);
+            params.put("app_id", app_id);
+            String res = HttpUtils.httpGet(url, params, headers);
+            if (res == null || res.isEmpty()){
+                System.out.println("获取短剧状态失败,albumId: " + al);
+            }else {
+                JSONObject resObj = JSONObject.parseObject(res);
+                int code = resObj.getIntValue("code");
+                if (code != 0){
+                    info.add("获取短剧状态失败,code: " + code + ", msg: " + resObj.getString("message")+", 剧目名称: " + albumName);
+                    continue;
+                }else {
+                    JSONObject data = resObj.getJSONObject("data");
+                    boolean isSuccess = data.getBooleanValue("can_promotion");
+                    if (isSuccess) {
+                        //更新状态
+                        bytedanceProductUpdateMapper.updateAlbumInfo(al, 1, null);
+                        info.add("短剧审核通过,albumId: " + al + ", 剧目名称: " + albumName);
+                    }else {
+                        String failReason = data.getString("can_not_promotion_reason");
+                        if ("RESOURCE_CREATING".equals(failReason) || "RESOURCE_AUDITING".equals(failReason)){
+                            //等待中
+                            bytedanceProductUpdateMapper.updateAlbumInfo(al, 0, failReason);
+                            info.add("短剧审核中,albumId: " + al + ", 剧目名称: " + albumName+", 当前状态: " + failReason);
+                        }else {
+                            //失败
+                            bytedanceProductUpdateMapper.updateAlbumInfo(al, 2, failReason);
+                            info.add("短剧审核失败,albumId: " + al + ", 剧目名称: " + albumName + ", 原因: " + failReason);
+                        }
+                    }
+
+                }
+            }
+        }
+        FeishuRobotUtil.sendTextToWebhook(StringUtils.join(info, "\n"), HOOK_URL);
+    }
+
+
+    /**
+     * 上传短剧
+     * @param videoId from ly_videos
+     * @return albumId
+     */
+    private String uploadAlbum(long videoId, Long appId, String appAccessToken){
+        JSONObject video = bytedanceProductUpdateMapper.getVideoInfo(videoId);
+        if (video == null){
+            System.out.println("没有找到视频信息,videoId: " + videoId);
+            return null;
+        }
+        String videoName = video.getString("name");
+        Integer sylloge = video.getInteger("sylloge");//总集数
+        List<JSONObject> videoDetail = bytedanceProductUpdateMapper.getVideoDetail(videoId);
+        if (videoDetail == null || videoDetail.isEmpty()){
+            System.out.println("没有找到视频剧集详情,videoId: " + videoId);
+            return null;
+        }
+
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("album_title", videoName);
+        requestBody.put("seq_num", sylloge);
+        requestBody.put("app_id", appId);
+
+        List<JSONObject> videoDetailList = new ArrayList<>();
+        for (JSONObject obj : videoDetail){
+            String videoUrl = obj.getString("url").replaceAll("oss\\.artlinkworld\\.cn", "bydance.artlinkworld.cn");//使用单独的域名
+            String title = obj.getString("name");
+            Integer seq = obj.getInteger("sort");
+
+            JSONObject meta = new JSONObject();
+            meta.put("url", videoUrl);
+            meta.put("title", title);
+            meta.put("seq", seq);
+            videoDetailList.add(meta);
+        }
+        requestBody.put("video_meta_mico", videoDetailList);
+
+        String url = "https://api.oceanengine.com/open_api/v3.0/dpa/album/create/";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("App-Access-Token", appAccessToken);
+        headers.put("Content-Type", "application/json");
+
+        System.out.println(requestBody.toJSONString());
+//        return null;
+        String res = HttpUtils.httpPostRequest(url, requestBody, headers);
+        System.out.println(">>> "+res);
+        if (res == null || res.isEmpty()){
+            System.out.println("上传短剧失败, 返回null");
+            return null;
+        }else {
+            JSONObject resObj = JSONObject.parseObject(res);
+            int code = resObj.getIntValue("code");
+            if (code != 0){
+                System.out.println("上传短剧失败,code: " + code + ", msg: " + resObj.getString("message"));
+                return null;
+            }else {
+                String albumId = resObj.getJSONObject("data").getString("album_id");
+                return albumId;
+            }
+        }
+    }
+
+
+    private String getAppAccessToken(Long app_id, String app_secret){
+        String url = "https://open.oceanengine.com/open_api/oauth2/app_access_token/";
+        if (app_id == null || app_secret == null){
+            return null;
+        }
+        JSONObject body = new JSONObject();
+        body.put("app_id", app_id);
+        body.put("secret", app_secret);
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        String res = HttpUtils.httpPostRequest(url, body, headers);
+        if (res == null || res.isEmpty()){
+            return null;
+        }else {
+            JSONObject resObj = JSONObject.parseObject(res);
+            int code = resObj.getIntValue("code");
+            if (code != 0){
+                System.out.println("获取app_access_token失败,code: " + code + ", msg: " + resObj.getString("message"));
+                return null;
+            }else {
+                return resObj.getJSONObject("data").getString("access_token");
+            }
+        }
+    }
+
+
 }
 }

+ 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);
+        }
+    }
+}

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

@@ -21,6 +21,7 @@ import org.springframework.stereotype.Service;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -33,7 +34,7 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
     @Autowired
     @Autowired
     ReportsAdPushMapper reportsPushMapper;
     ReportsAdPushMapper reportsPushMapper;
 
 
-    private static final String TEMPLATE_VERSION = "1.0.3";
+    private static final String TEMPLATE_VERSION = "1.0.9";
     private static final String TEMPLATE_ID = "AAqRhJzMBoO0E";
     private static final String TEMPLATE_ID = "AAqRhJzMBoO0E";
 
 
     /**
     /**
@@ -74,7 +75,7 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         List<String> chatid = Arrays.asList(
         List<String> chatid = Arrays.asList(
                 "oc_275f17aa4bf8fae649ef281a2b9250f6"
                 "oc_275f17aa4bf8fae649ef281a2b9250f6"
         );
         );
-        sendParam("注:当天ROI数据有微小1%-2%差异,以次日10点推送为准,番茄ROI数据需要次日9点左右获取", userIds, chatid);
+        sendParam("注:当天ROI数据有微小1%-2%差异,以次日10点推送为准,番茄ROI数据需要次日9点左右获取;暂不包含广点通数据", userIds, chatid);
     }
     }
 
 
     /**
     /**
@@ -91,7 +92,12 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         );
         );
         List<String> chatid = Arrays.asList(
         List<String> chatid = Arrays.asList(
         );
         );
-        sendParam("", userIds, chatid);
+        sendParam("暂不包含广点通当日数据", userIds, chatid);
+    }
+
+    @Override
+    public void test(){
+        sendParam("", Arrays.asList("44fbaed6"), Collections.EMPTY_LIST);
     }
     }
 
 
 
 
@@ -117,9 +123,10 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
                 new Pair<>("cost_amount", "消耗金额"),
                 new Pair<>("cost_amount", "消耗金额"),
                 new Pair<>("end_amount", "结算金额"),
                 new Pair<>("end_amount", "结算金额"),
                 new Pair<>("pay_amount", "充值金额"),
                 new Pair<>("pay_amount", "充值金额"),
-                new Pair<>("water_roi", "流水ROI"),
+                new Pair<>("share_iaa_amount", "广告预估收入"),
+//                new Pair<>("water_roi", "流水ROI"),
                 new Pair<>("real_roi", "真实ROI"),
                 new Pair<>("real_roi", "真实ROI"),
-                new Pair<>("water_profit", "流水利润"),
+//                new Pair<>("water_profit", "流水利润"),
                 new Pair<>("real_profit", "真实利润")
                 new Pair<>("real_profit", "真实利润")
         );
         );
         JSONArray dateIndicatorTable = new JSONArray();
         JSONArray dateIndicatorTable = new JSONArray();
@@ -164,8 +171,15 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         JSONArray movieRankTable = new JSONArray();
         JSONArray movieRankTable = new JSONArray();
         for (Map<String, String> movie : movieData){
         for (Map<String, String> movie : movieData){
             JSONObject obj = new JSONObject();
             JSONObject obj = new JSONObject();
+            String movieSource = String.valueOf(movie.get("movie_source"));
+            String movieName = String.valueOf(movie.get("movie_name"));
+            if (!Check.isNull(movieSource) && movieSource.contains("1")){
+                obj.put("movieNameColor", "blue");
+            }else {
+                obj.put("movieNameColor", "grey");
+            }
             obj.put("rank", String.valueOf(movie.get("rk")));
             obj.put("rank", String.valueOf(movie.get("rk")));
-            obj.put("movieName", String.valueOf(movie.get("movie_name")));
+            obj.put("movieName", movieName);
             obj.put("endAmount", String.valueOf(movie.get("share_end_amount")));
             obj.put("endAmount", String.valueOf(movie.get("share_end_amount")));
             obj.put("realROI", String.valueOf(movie.get("real_roi")));
             obj.put("realROI", String.valueOf(movie.get("real_roi")));
             movieRankTable.add(obj);
             movieRankTable.add(obj);

+ 2 - 2
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/OptimizerRankPushServiceImpl.java

@@ -32,7 +32,7 @@ public class OptimizerRankPushServiceImpl implements IOptimizerRankPushService {
     @Autowired
     @Autowired
     ReportsAdPushMapper reportsPushMapper;
     ReportsAdPushMapper reportsPushMapper;
 
 
-    private static final String TEMPLATE_VERSION = "1.0.5";
+    private static final String TEMPLATE_VERSION = "1.0.7";
     private static final String TEMPLATE_ID = "AAqRUxrkkWuZf";
     private static final String TEMPLATE_ID = "AAqRUxrkkWuZf";
 
 
     public void send() {
     public void send() {
@@ -124,7 +124,7 @@ public class OptimizerRankPushServiceImpl implements IOptimizerRankPushService {
             template_variable.put("object_list_5", object_list_5);
             template_variable.put("object_list_5", object_list_5);
             System.out.println("发送目标: nickName: "+nickName+", userId: "+ userId + ", feishuUserId: "+mobileMap.get(phoneNumber)+", rank: "+rank+", costAmount: "+costAmount);
             System.out.println("发送目标: nickName: "+nickName+", userId: "+ userId + ", feishuUserId: "+mobileMap.get(phoneNumber)+", rank: "+rank+", costAmount: "+costAmount);
             sendToFeishu(token, template_variable, mobileMap.get(phoneNumber));
             sendToFeishu(token, template_variable, mobileMap.get(phoneNumber));
-//            sendToFeishu(token, template_variable, "44fbaed6");
+            sendToFeishu(token, template_variable, "44fbaed6");
             //clear
             //clear
         }
         }
     }
     }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 102 - 62
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ReportsAdPushServiceImpl.java


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

@@ -0,0 +1,282 @@
+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.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.utils.FeishuRobotUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import javafx.util.Pair;
+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.Collections;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class ReportsByBusinessPushServiceImpl implements IReportsByBusinessPushService {
+
+
+    public static final String APP_ID = "cli_a772633aaeff5013";
+    public static final String APP_KEY = "lEHaMdEoBVrrLNc5RtC11f8XsANnKgB4";
+    @Autowired
+    ReportsAdPushMapper reportsPushMapper;
+
+    private static final String TEMPLATE_VERSION = "1.0.0";
+    private static final String TEMPLATE_ID = "AAq4oeDXECopo";
+
+
+    /**
+     * 10点正式推送
+     */
+    @Override
+    public void send() {
+        List<String> userIds = Arrays.asList(
+                "44fbaed6" //zhaotx
+//                ,"ebeeced9" //yumeng
+//                ,"265g9ef1" //wangshu
+//                ,"ee518161" //zhaozhicheng
+//                ,"c5f6b59d" //yuyang
+//                ,"d834552b" //hemenghao
+//                ,"a3235a61" //louzijun
+//                ,"58e7a98a"  //xsq
+        );
+        List<String> chatid = Arrays.asList(
+                "oc_275f17aa4bf8fae649ef281a2b9250f6"
+        );
+        sendParam("", userIds, chatid);
+    }
+
+    /**
+     * 9点预推送给开发人员
+     */
+    @Override
+    public void preSend() {
+        List<String> userIds = Arrays.asList(
+                "44fbaed6" //zhaotx
+                ,"ebeeced9" //yumeng
+                ,"58e7a98a"  //xsq
+                ,"2ga9669f" //angaoqi
+                ,"43gb7fbc" //huangpingkang
+        );
+        List<String> chatid = Arrays.asList(
+        );
+        sendParam("暂不包含广点通当日数据", userIds, chatid);
+    }
+
+    @Override
+    public void test(){
+        sendParam("", Arrays.asList("44fbaed6"), Collections.EMPTY_LIST);
+    }
+
+
+    private void sendParam(String description, List<String> userIds, List<String> chatid){
+        String token;
+        try {
+            token = FeishuRobotUtil.getTenantToken(APP_ID, APP_KEY);
+        }catch (IOException e){
+            log.error("获取飞书token失败", e);
+            return;
+        }
+        //日期时间 - 统统以昨日为准
+        String today = DateUtils.getNowAddDate("yyyy-MM-dd", -1);
+        String lastDay = DateUtils.getNowAddDate("yyyy-MM-dd", -2);
+        Long todayLong = Long.parseLong(today.replaceAll("-", ""));
+        Long lastDayLong = Long.parseLong(lastDay.replaceAll("-", ""));
+
+        Map<String, String> todayData = reportsPushMapper.allBusinessPushData(todayLong);
+        Map<String, String> lastDayData = reportsPushMapper.allBusinessPushData(lastDayLong);
+
+        String updateTime = String.valueOf(todayData.get("update_time"));
+        List<Pair<String, String>> columns = Arrays.asList(
+                new Pair<>("cost_amount", "消耗金额"),
+                new Pair<>("end_amount", "结算金额"),
+                new Pair<>("pay_amount", "充值金额"),
+                new Pair<>("share_iaa_amount", "广告预估收入"),
+//                new Pair<>("water_roi", "流水ROI"),
+                new Pair<>("real_roi", "真实ROI"),
+//                new Pair<>("water_profit", "流水利润"),
+                new Pair<>("real_profit", "真实利润")
+        );
+        JSONArray dateIndicatorTable = new JSONArray();
+        for (Pair<String, String> column : columns) {
+            String key = column.getKey();
+            String name = column.getValue();
+            JSONObject obj = new JSONObject();
+            if (!name.contains("ROI")){
+                String todayDataValue = String.valueOf(todayData.getOrDefault(key, "0"));
+                String lastDayDataValue = String.valueOf(lastDayData.getOrDefault(key, "0"));
+                obj.put("indicatorName", name);
+                obj.put("todayData", todayDataValue);
+                obj.put("lastDayData", lastDayDataValue);
+                double todayDataDouble = Double.parseDouble(todayDataValue);
+                double lastDayDataDouble = Double.parseDouble(lastDayDataValue);
+                if (lastDayDataDouble != 0) {
+                    double rate = (todayDataDouble - lastDayDataDouble) / lastDayDataDouble * 100;
+                    String rateStr = String.format("%.2f%%", rate);
+                    obj.put("roundRate", rateStr);
+                    if (rate > 0.0){
+                        obj.put("rateColor", "red");
+                    }else if (rate < 0.0){
+                        obj.put("rateColor", "green");
+                    }
+                } else {
+                    obj.put("roundRate", "0.00%");
+                    obj.put("rateColor", "black");
+                }
+            }else {
+                String todayDataValue = String.valueOf(todayData.get(key));
+                String lastDayDataValue = String.valueOf(lastDayData.get(key));
+                obj.put("indicatorName", name);
+                obj.put("todayData", todayDataValue);
+                obj.put("lastDayData", lastDayDataValue);
+                obj.put("roundRate", "-");
+                obj.put("rateColor", "black");
+            }
+            dateIndicatorTable.add(obj);
+        }
+
+        List<Map<String, String>> movieData = reportsPushMapper.allBusinessTopMovie(todayLong);
+        JSONArray movieRankTable = new JSONArray();
+        for (Map<String, String> movie : movieData){
+            JSONObject obj = new JSONObject();
+            String movieSource = String.valueOf(movie.get("movie_source"));
+            String movieName = String.valueOf(movie.get("movie_name"));
+            if (!Check.isNull(movieSource) && movieSource.contains("1")){
+                obj.put("movieNameColor", "blue");
+            }else {
+                obj.put("movieNameColor", "grey");
+            }
+            obj.put("rank", String.valueOf(movie.get("rk")));
+            obj.put("movieName", movieName);
+            obj.put("endAmount", String.valueOf(movie.get("share_end_amount")));
+            obj.put("realROI", String.valueOf(movie.get("real_roi")));
+            movieRankTable.add(obj);
+        }
+
+        List<Map<String, String>> deptData = reportsPushMapper.deptRank2(todayLong);
+        JSONArray deptRank = new JSONArray();
+        for (Map<String, String> dept : deptData){
+            JSONObject obj = new JSONObject();
+            obj.put("rank", String.valueOf(dept.get("rk")));
+            obj.put("deptName", String.valueOf(dept.get("dept_name")));
+            obj.put("todayCost", String.valueOf(dept.get("cost_amount")));
+            obj.put("ROI", String.valueOf(dept.get("real_roi")));
+            deptRank.add(obj);
+        }
+
+        JSONObject allBusinessData = reportsPushMapper.businessTypeData(todayLong, Arrays.asList(2,4,6));
+        JSONObject b6 = reportsPushMapper.businessTypeData(todayLong, Arrays.asList(6));
+        JSONObject b4 = reportsPushMapper.businessTypeData(todayLong, Arrays.asList(4));
+        JSONObject b2 = reportsPushMapper.businessTypeData(todayLong, Arrays.asList(2));
+        JSONArray businessTypeTable = new JSONArray();
+        JSONObject allObj = new JSONObject();
+        allObj.put("type", "整体");
+        allObj.put("iap_end_amount", allBusinessData.getString("iap_end_amount"));
+        allObj.put("iaa_end_amount", allBusinessData.getString("iaa_end_amount"));
+        businessTypeTable.add(allObj);
+        JSONObject b6Obj = new JSONObject();
+        b6Obj.put("type", "达人");
+        b6Obj.put("iap_end_amount", b6.getString("iap_end_amount"));
+        b6Obj.put("iaa_end_amount", b6.getString("iaa_end_amount"));
+        businessTypeTable.add(b6Obj);
+        JSONObject b4Obj = new JSONObject();
+        b4Obj.put("type", "端原生");
+        b4Obj.put("iap_end_amount", b4.getString("iap_end_amount"));
+        b4Obj.put("iaa_end_amount", b4.getString("iaa_end_amount"));
+        businessTypeTable.add(b4Obj);
+        JSONObject b2Obj = new JSONObject();
+        b2Obj.put("type", "自分销");
+        b2Obj.put("iap_end_amount", b2.getString("iap_end_amount"));
+        b2Obj.put("iaa_end_amount", b2.getString("iaa_end_amount"));
+        businessTypeTable.add(b2Obj);
+
+
+
+        JSONObject template_variable = new JSONObject();
+        template_variable.put("updateTime", updateTime);
+        template_variable.put("todayDate", today);
+        template_variable.put("lastDayDate", lastDay);
+        template_variable.put("dateIndicatorTable", dateIndicatorTable);
+        template_variable.put("movieRankTable", movieRankTable);
+        template_variable.put("deptRank", deptRank);
+        template_variable.put("description", description);
+        template_variable.put("businessTypeList", businessTypeTable);
+
+
+        for (String userId : userIds) {
+            sendToFeishu(token, template_variable, userId);
+        }
+
+        for (String chat : chatid) {
+            sendToChatGroup(token, template_variable, chat);
+        }
+    }
+
+    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);
+        }
+    }
+}

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

@@ -128,6 +128,9 @@ public class TotalRankPushServiceImpl implements ITotalRankPushService {
         sendToFeishu(token, sb.toString(), "2ga9669f");//angaoqi
         sendToFeishu(token, sb.toString(), "2ga9669f");//angaoqi
         sendToFeishu(token, sb.toString(), "b9e2ac3e");//wangdan
         sendToFeishu(token, sb.toString(), "b9e2ac3e");//wangdan
         sendToFeishu(token, sb.toString(), "bg5dcf61");//wangxuedi
         sendToFeishu(token, sb.toString(), "bg5dcf61");//wangxuedi
+        sendToFeishu(token, sb.toString(), "ga91e5d5");//yangcheng
+        sendToFeishu(token, sb.toString(), "e1db71eb");//maojun
+        sendToFeishu(token, sb.toString(), "dc653318");//zhangkaiwen
 
 
     }
     }
 
 

+ 10 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceProductUploadJob.java

@@ -28,4 +28,14 @@ public class BytedanceProductUploadJob {
     public void initProductLinkApp(){
     public void initProductLinkApp(){
         bytedanceProductUpdateService.initNew();
         bytedanceProductUpdateService.initNew();
     }
     }
+
+    @XxlJob("bytedanceProductUploadAlbum")
+    public void uploadAlbum() throws Exception {
+        bytedanceProductUpdateService.uploadAlbum();
+    }
+
+    @XxlJob("bytedanceProductRefreshAlbumStatus")
+    public void refreshAlbumStatus() throws Exception {
+        bytedanceProductUpdateService.refreshAlbumStatus();
+    }
 }
 }

+ 25 - 5
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/FeishuPushJob.java

@@ -23,6 +23,10 @@ public class FeishuPushJob {
     IDateReportsPushService dateReportsPushService;
     IDateReportsPushService dateReportsPushService;
     @Autowired
     @Autowired
     IUserLoginRecordService userLoginRecordService;
     IUserLoginRecordService userLoginRecordService;
+    @Autowired
+    ICutGroupRankPushService cutGroupRankPushService;
+    @Autowired
+    IReportsByBusinessPushService reportsByBusinessPushService;
 
 
     @XxlJob("unbindWarnPush")
     @XxlJob("unbindWarnPush")
     public void unbindWarnPush(){
     public void unbindWarnPush(){
@@ -32,35 +36,51 @@ public class FeishuPushJob {
     public void bindAppErrorWarnPush(){
     public void bindAppErrorWarnPush(){
         bindAppErrorWarnService.send();
         bindAppErrorWarnService.send();
     }
     }
+
+    //投放战报
     @XxlJob("reportsAdPush")
     @XxlJob("reportsAdPush")
     public void reportsAdPush(){
     public void reportsAdPush(){
         reportsAdPushService.send();
         reportsAdPushService.send();
     }
     }
+
+    //优化师实时战报(小组排行榜)
     @XxlJob("optimizerRankPush")
     @XxlJob("optimizerRankPush")
     public void optimizerRankPush(){
     public void optimizerRankPush(){
         optimizerRankPushService.send();
         optimizerRankPushService.send();
     }
     }
+
+    //优化师实时战绩
     @XxlJob("totalRankPush")
     @XxlJob("totalRankPush")
     public void totalRankPush(){
     public void totalRankPush(){
         totalRankPushService.send();
         totalRankPushService.send();
     }
     }
+
+    //短剧业务概况(投放)
     @XxlJob("dateReportsPush")
     @XxlJob("dateReportsPush")
     public void dateReportsPush(){
     public void dateReportsPush(){
         dateReportsPushService.send();
         dateReportsPushService.send();
     }
     }
 
 
-    @XxlJob("loginRecordPush")
-    public void loginRecordPush(){
-        userLoginRecordService.queryUserLoginRecord();
-    }
-
+    //短剧业务概况预投放(12点)
     @XxlJob("preDateReportsPush")
     @XxlJob("preDateReportsPush")
     public void preDataReportsPush(){
     public void preDataReportsPush(){
         dateReportsPushService.send12hour();
         dateReportsPushService.send12hour();
     }
     }
 
 
+    //短剧业务概况预投放-给开发
     @XxlJob("dataReportsToDeveloper")
     @XxlJob("dataReportsToDeveloper")
     public void dataReportsToDeveloper(){
     public void dataReportsToDeveloper(){
         dateReportsPushService.preSend();
         dateReportsPushService.preSend();
     }
     }
+
+    //剪辑排行榜
+    @XxlJob("cutGroupRankPush")
+    public void cutGroupRankPush(){
+        cutGroupRankPushService.send();
+    }
+
+    @XxlJob("loginRecordPush")
+    public void loginRecordPush(){
+        userLoginRecordService.queryUserLoginRecord();
+    }
 }
 }