Bläddra i källkod

Merge #46 into master from pingkang

Merge branch 'master' of codeup.aliyun.com:60c06368dbbed34fe0f0c263/job/hr_job-...

* pingkang: (2 commits)
  抖小广告位列表
  Merge branch 'master' of codeup.aliyun.com:60c06368dbbed34fe0f0c263/job/hr_job-...

Signed-off-by: 1129979389@qq.com <accounts_6361eaad7b63b44dd7833e63@mail.teambition.com>
Merged-by: 1129979389@qq.com <accounts_6361eaad7b63b44dd7833e63@mail.teambition.com>

CR-link: https://codeup.aliyun.com/60c06368dbbed34fe0f0c263/job/hr_job-bytedance/change/46
huangpingkang 1 år sedan
förälder
incheckning
13a5f8f3ea

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

@@ -119,6 +119,14 @@ public class BytedanceController {
         }
         }
     }
     }
 
 
+    @GetMapping("/miniAppAdPlacement")
+    public void miniAppAdPlacement() throws Exception {
+        List<String> appIds = bytedanceMiniAppService.getAllAppIds();
+        for (String appId : appIds) {
+            bytedanceMiniAppService.getAdPlacement(appId);
+        }
+    }
+
     @GetMapping("/flowDetailsReport")
     @GetMapping("/flowDetailsReport")
     public void flowDetailsReport(@RequestParam(required = false) Long advertiserId, String accessToken, String startDate, String endDate) {
     public void flowDetailsReport(@RequestParam(required = false) Long advertiserId, String accessToken, String startDate, String endDate) {
 
 

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

@@ -3,6 +3,7 @@ package cn.com.ctop.job.bytedance.data.mapper;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportHour;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportHour;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
@@ -18,5 +19,9 @@ public interface BytedanceMiniAppMapper {
 
 
     List<String> getIaaAppIds();
     List<String> getIaaAppIds();
 
 
+    List<String> getAllAppIds();
+
     List<JSONObject> getMaEcpmRetryJob();
     List<JSONObject> getMaEcpmRetryJob();
+
+    void insertAdPlacement(@Param("list")JSONArray result);
 }
 }

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

@@ -1,12 +1,31 @@
 <?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.BytedanceMiniAppMapper">
 <mapper namespace="cn.com.ctop.job.bytedance.data.mapper.BytedanceMiniAppMapper">
+    <insert id="insertAdPlacement">
+        replace into media_api.bytedance_ad_placement_list
+                (app_id,ad_placement_id,ad_placement_name,ad_placement_type,ad_placement_type_name,status)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.app_id},
+            #{item.ad_placement_id},
+            #{item.ad_placement_name},
+            #{item.ad_placement_type},
+            #{item.ad_placement_type_name},
+            #{item.status}
+            )
+        </foreach>
+    </insert>
     <select id="getEcpmKeys" resultType="java.lang.String">
     <select id="getEcpmKeys" resultType="java.lang.String">
         SELECT concat(event_timestamp,open_id,cost) as ecpm_keys from media_api.bytedance_webhook_ma_ecpm
         SELECT concat(event_timestamp,open_id,cost) as ecpm_keys from media_api.bytedance_webhook_ma_ecpm
         where stat_date >=  #{startDate} and stat_date &lt;= #{endDate}
         where stat_date >=  #{startDate} and stat_date &lt;= #{endDate}
           and event_time >= #{startTime} and event_time &lt;= #{endTime}
           and event_time >= #{startTime} and event_time &lt;= #{endTime}
     </select>
     </select>
 
 
+    <select id="getAllAppIds" resultType="java.lang.String">
+        select app_id from deepthink.mini_app_info where app_id like 'tt%'
+    </select>
+
     <select id="getIaaAppIds" resultType="java.lang.String">
     <select id="getIaaAppIds" resultType="java.lang.String">
         select app_id from deepthink.mini_app_info where business_method in('IAA','MIX') and app_id like 'tt%'
         select app_id from deepthink.mini_app_info where business_method in('IAA','MIX') and app_id like 'tt%'
     </select>
     </select>

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

@@ -6,6 +6,8 @@ import java.util.List;
 
 
 public interface IBytedanceMiniAppService {
 public interface IBytedanceMiniAppService {
     List<String> getIaaAppIds();
     List<String> getIaaAppIds();
+    List<String> getAllAppIds();
     void getMaEcpm(String startDt, String endDt, String appId, Integer isLog, Long errId, Integer isSend);
     void getMaEcpm(String startDt, String endDt, String appId, Integer isLog, Long errId, Integer isSend);
     List<JSONObject> getMaEcpmRetryJob();
     List<JSONObject> getMaEcpmRetryJob();
+    void getAdPlacement(String appId);
 }
 }

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

@@ -22,6 +22,15 @@ import java.util.Map;
 @Service
 @Service
 @Slf4j
 @Slf4j
 public class BytedanceMiniAppServiceImpl implements IBytedanceMiniAppService {
 public class BytedanceMiniAppServiceImpl implements IBytedanceMiniAppService {
+    private static final Map<Integer,String> adPlacementMap = new HashMap<Integer,String>(){{
+        put(1,"banner");
+        put(2,"激励视频广告");
+        put(3,"信息流广告");
+        put(4,"插屏广告");
+        put(5,"视频前贴片广告");
+        put(6,"视频后贴片广告");
+        put(9,"视频流广告");
+    }};
     @Resource
     @Resource
     private RedisTemplate redis2Template_db5;
     private RedisTemplate redis2Template_db5;
 
 
@@ -37,11 +46,59 @@ public class BytedanceMiniAppServiceImpl implements IBytedanceMiniAppService {
     }
     }
 
 
     @Override
     @Override
+    public List<String> getAllAppIds() {
+        return bytedanceMiniAppMapper.getAllAppIds();
+    }
+
+    @Override
     public List<JSONObject> getMaEcpmRetryJob() {
     public List<JSONObject> getMaEcpmRetryJob() {
         return bytedanceMiniAppMapper.getMaEcpmRetryJob();
         return bytedanceMiniAppMapper.getMaEcpmRetryJob();
     }
     }
 
 
     @Override
     @Override
+    public void getAdPlacement(String appId) {
+        try {
+            String url = "https://open.douyin.com/api/apps/v1/ad_placement/query/";
+            Object tokenObj = redis2Template_db5.opsForValue().get("client-token-key_" + appId);
+            if (tokenObj == null) {
+                log.error("抖小广告位列表拉取获取token为空 [{}]", appId);
+                return;
+            }
+
+            HashMap<String, String> headers = new HashMap<>();
+            headers.put("access-token", tokenObj.toString());
+            headers.put("Content-Type", "application/json; charset=UTF-8");
+
+            String s = HttpUtils.httpGet(url,null,headers);
+            JSONObject jsonObject = JSONObject.parseObject(s);
+
+            if (!Check.isNull(jsonObject)) {
+                Integer code = jsonObject.getInteger("err_no");
+                if (code == 0) {
+                    JSONObject data = jsonObject.getJSONObject("data");
+
+                    JSONArray result = data.getJSONArray("ad_placement_list");
+                    if (!Check.isNull(result)) {
+                        for (int i = 0; i < result.size(); i++) {
+                            JSONObject resultJson = result.getJSONObject(i);
+                            resultJson.put("app_id", appId);
+                            resultJson.put("ad_placement_type_name", adPlacementMap.get(resultJson.getInteger("ad_placement_type")));
+                        }
+                        bytedanceMiniAppMapper.insertAdPlacement(result);
+                    }
+                } else {
+                    log.error("[{}]抖小广告位列表拉取失败,返回信息:{}", appId, s);
+                }
+            } else {
+                log.error("[{}]抖小广告位列表拉取返回数据为空", appId);
+            }
+            log.info("[{}]抖小广告位列表拉取返回数据完成。", appId);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    @Override
     public void getMaEcpm(String startDt, String endDt, String appId, Integer isLog, Long errId, Integer isSend) {
     public void getMaEcpm(String startDt, String endDt, String appId, Integer isLog, Long errId, Integer isSend) {
         try {
         try {
             Long dataRangeSeconds = 3600L;
             Long dataRangeSeconds = 3600L;

+ 8 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceMiniAppJob.java

@@ -26,4 +26,12 @@ public class BytedanceMiniAppJob {
         }
         }
     }
     }
 
 
+    @XxlJob("miniAppAdPlacement")
+    public void miniAppAdPlacement() throws Exception {
+        List<String> appIds = bytedanceMiniAppService.getAllAppIds();
+        for (String appId : appIds) {
+            bytedanceMiniAppService.getAdPlacement(appId);
+        }
+    }
+
 }
 }