Преглед изворни кода

Merge #19 into master from pingkang

素材日报修改;小程序广告位列表

* pingkang: (2 commits)
  素材日报修改;小程序广告位列表
  素材日报修改;小程序广告位列表

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-adq/change/19
huangpingkang пре 10 месеци
родитељ
комит
4aa49ae1f1

+ 16 - 1
job-adq/src/main/java/cn/com/ctop/job/adq/controller/AdqAssetController.java

@@ -74,7 +74,7 @@ public class AdqAssetController {
     public MessageModel miniAppAdIncome(@RequestParam(required = false) String appId,
                                         @RequestParam(required = false) String startDate,
                                         @RequestParam(required = false) String endDate) {
-        List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqMiniApp(appId);
+        List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqAllMiniApp(appId);
         String start = startDate == null ? DateUtils.getNowAddDate("yyyy-MM-dd", -1) : startDate;
         String end = endDate == null ? DateUtils.getNowDate("yyyy-MM-dd") : endDate;
         for (JSONObject jsonObject : adqMiniApp) {
@@ -90,4 +90,19 @@ public class AdqAssetController {
         return MessageModel.ok();
     }
 
+    @GetMapping("/miniAppAdUnitList")
+    public MessageModel miniAppAdUnitList(@RequestParam(required = false) String appId) {
+        List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqAllMiniApp(appId);
+        for (JSONObject jsonObject : adqMiniApp) {
+            String app = jsonObject.getString("app_id");
+            Long appletId = jsonObject.getLong("applet_id");
+            dailyExecutorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    adqAdIncomeService.getAdqAdUnitList(app, appletId, 1);
+                }
+            });
+        }
+        return MessageModel.ok();
+    }
 }

+ 4 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/AdqAdIncomeMapper.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.job.adq.data.mapper;
 
 import cn.com.ctop.job.adq.data.entity.AdqPublisherAdunitGeneral;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import org.apache.ibatis.annotations.Param;
@@ -15,6 +16,9 @@ public interface AdqAdIncomeMapper {
     void insertAdqAdIncomeSD(List<AdqPublisherAdunitGeneral> reports);
 
     List<JSONObject> queryAdqIaaMiniApp(@Param("appId")String appId);
+    List<JSONObject> queryAdqAllMiniApp(@Param("appId")String appId);
 
     List<JSONObject> queryAdqAdIncomeRetryJob();
+
+    void insertAdUnitList(@Param("list") JSONArray list);
 }

+ 60 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/xml/AdqAdIncomeMapper.xml

@@ -35,6 +35,57 @@
             )
         </foreach>
     </insert>
+    <insert id="insertAdUnitList">
+        replace into media_api.adq_ad_unit_list
+        (
+        app_id,
+        ad_unit_id,
+        ad_slot,
+        ad_slot_name,
+        active_value,
+        ad_form_type,
+        ad_unit_name,
+        ad_unit_size,
+        ad_unit_status,
+        ad_unit_type,
+        bid_floor,
+        bind_adunit,
+        bind_type,
+        is_allow_playable,
+        reward_hosted_status,
+        slot_id,
+        templ_hosted_status,
+        templ_type_list,
+        unlock_reward_duration,
+        video_duration_max,
+        video_duration_min
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.app_id},
+            #{item.ad_unit_id},
+            #{item.ad_slot},
+            #{item.ad_slot_name},
+            #{item.active_value},
+            #{item.ad_form_type},
+            #{item.ad_unit_name},
+            #{item.ad_unit_size},
+            #{item.ad_unit_status},
+            #{item.ad_unit_type},
+            #{item.bid_floor},
+            #{item.bind_adunit},
+            #{item.bind_type},
+            #{item.is_allow_playable},
+            #{item.reward_hosted_status},
+            #{item.slot_id},
+            #{item.templ_hosted_status},
+            #{item.templ_type_list},
+            #{item.unlock_reward_duration},
+            #{item.video_duration_max},
+            #{item.video_duration_min}
+            )
+        </foreach>
+    </insert>
 
     <select id="queryAdqIaaMiniApp" resultType="com.alibaba.fastjson.JSONObject">
         select m.app_id,l.id applet_id
@@ -45,6 +96,15 @@
             and m.app_id = #{appId}
         </if>
     </select>
+    <select id="queryAdqAllMiniApp" resultType="com.alibaba.fastjson.JSONObject">
+        select m.app_id,l.id applet_id
+        from deepthink.mini_app_info m
+        join thirtpart.ly_applet l on m.app_id = l.app_id
+        where  m.app_id like 'wx%'
+        <if test="appId != null">
+            and m.app_id = #{appId}
+        </if>
+    </select>
     <select id="queryAdqAdIncomeRetryJob" resultType="com.alibaba.fastjson.JSONObject">
         SELECT t1.msg as 'msg',t1.is_send AS 'isSend', t1.id AS 'id', t1.advertiser_id AS 'advertiserId', t1.start_date AS 'startDate', t1.end_date AS 'endDate', t1.data_dimension AS 'dataDimension', t1.data_type AS 'dataType', t1.msg
         FROM media_api.adq_error_log t1

+ 3 - 1
job-adq/src/main/java/cn/com/ctop/job/adq/data/service/IAdqAdIncomeService.java

@@ -6,6 +6,8 @@ import java.util.List;
 
 public interface IAdqAdIncomeService {
     List<JSONObject> getAdqAdIncomeRetryJob();
-    List<JSONObject> getAdqMiniApp(String appId);
+    List<JSONObject> getAdqIaaMiniApp(String appId);
+    List<JSONObject> getAdqAllMiniApp(String appId);
     void getAdqAdIncome(String startDt, String endDt, String appId, Long appletId, Integer page, Integer isLog, Long errId, Integer isSend);
+    void getAdqAdUnitList(String appId, Long appletId, Integer page);
 }

+ 72 - 20
job-adq/src/main/java/cn/com/ctop/job/adq/data/service/impl/AdqAdIncomeServiceImpl.java

@@ -35,16 +35,34 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
     @Autowired
     private AdqErrorLogMapper adqErrorLogMapper;
 
-    private static final Map<String, String> adSlotMap = new HashMap<>();
+    private static final Map<String, String> adSlotMap = new HashMap<String, String>(){{
+        put("SLOT_ID_BIZ_BOTTOM", "公众号底部广告");
+        put("SLOT_ID_BIZ_MID_CONTEXT", "公众号文中广告");
+        put("SLOT_ID_BIZ_VIDEO_END", "公众号视频后贴");
+        put("SLOT_ID_BIZ_SPONSOR", "公众号互选广告");
+        put("SLOT_ID_BIZ_CPS", "公众号返佣商品");
+        put("SLOT_ID_WEAPP_BANNER", "小程序banner");
+        put("SLOT_ID_WEAPP_REWARD_VIDEO", "小程序激励视频");
+        put("SLOT_ID_WEAPP_INTERSTITIAL", "小程序插屏广告");
+        put("SLOT_ID_WEAPP_VIDEO_FEEDS", "小程序视频广告");
+        put("SLOT_ID_WEAPP_VIDEO_BEGIN", "小程序视频前贴");
+        put("SLOT_ID_WEAPP_BOX", "小程序格子广告");
+        put("SLOT_ID_WEAPP_TEMPLATE", "小程序原生模板广告");
+        put("SLOT_ID_WEAPP_COVER", "封面广告");
+    }};
 
     public List<JSONObject> getAdqAdIncomeRetryJob() {
         return adqAdIncomeMapper.queryAdqAdIncomeRetryJob();
     }
 
-    public List<JSONObject> getAdqMiniApp(String appId) {
+    public List<JSONObject> getAdqIaaMiniApp(String appId) {
         return adqAdIncomeMapper.queryAdqIaaMiniApp(appId);
     }
 
+    public List<JSONObject> getAdqAllMiniApp(String appId) {
+        return adqAdIncomeMapper.queryAdqAllMiniApp(appId);
+    }
+
     public void getAdqAdIncome(String startDt, String endDt, String appId, Long appletId, Integer page, Integer isLog, Long errId, Integer isSend) {
         if (page == 1) {
             getAdqAdIncomeCover(startDt, endDt, appId, appletId, page, isLog, errId, isSend);
@@ -86,7 +104,7 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
                             AdqPublisherAdunitGeneral report = JSONObject.parseObject(statItem.toJSONString(), AdqPublisherAdunitGeneral.class);
                             report.setAppId(appId);
                             report.setStatDate(Integer.valueOf(report.getDate().replace("-", "")));
-                            report.setAdSlotName(getAdSlotName(report.getAdSlot()));
+                            report.setAdSlotName(adSlotMap.get(report.getAdSlot()));
                             //System.out.println(report);
                             reports.add(report);
 
@@ -167,7 +185,7 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
                             AdqPublisherAdunitGeneral report = JSONObject.parseObject(dataJson.toJSONString(), AdqPublisherAdunitGeneral.class);
                             report.setAppId(appId);
                             report.setStatDate(Integer.valueOf(report.getDate().replace("-", "")));
-                            report.setAdSlotName(getAdSlotName(report.getAdSlot()));
+                            report.setAdSlotName(adSlotMap.get(report.getAdSlot()));
                             //System.out.println(report);
                             reports.add(report);
 
@@ -219,24 +237,58 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
         }
     }
 
+    public void getAdqAdUnitList(String appId, Long appletId, Integer page) {
+        try {
+            String url = "https://api.weixin.qq.com/publisher/stat";
+            Object tokenObj = redis2Template_db5.opsForValue().get("wechat-applet-access-token-key-" + appletId);
+            if (tokenObj == null) {
+                log.error("微小获取小程序广告位清单拉取获取token为空 {} {}", appId, appletId);
+                return;
+            }
+            int pageSize = 100;
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("access_token", tokenObj.toString());
+            paramsMap.put("action", "get_adunit_list");
+            paramsMap.put("page", page);
+            paramsMap.put("page_size", pageSize);
+            String s = HttpUtils.httpGet(url, paramsMap, null);
+            JSONObject jsonObject = JSONObject.parseObject(s);
+            List<AdqPublisherAdunitGeneral> reports = new ArrayList<>();
+            int totalPage = 1;
+            if (!Check.isNull(jsonObject)) {
+                Integer code = jsonObject.getInteger("ret");
+                if (code == 2009) {
+                    return; //无效的流量主
+                }
+                if (code == 0) {
+                    JSONArray list = jsonObject.getJSONArray("ad_unit");
+                    Integer totalNum = jsonObject.getInteger("total_num");
+                    totalPage = (int) Math.ceil(totalNum * 1.0 / pageSize);
+                    if (!Check.isNull(list)) {
+                        for (int i = 0; i < list.size(); i++) {
+                            JSONObject adUnitJson = list.getJSONObject(i);
+                            adUnitJson.put("ad_unit_size",adUnitJson.getString("ad_unit_size"));
+                            adUnitJson.put("templ_type_list",adUnitJson.getString("templ_type_list"));
+                            adUnitJson.put("app_id", appId);
+                            adUnitJson.put("ad_slot_name", adSlotMap.get(adUnitJson.getString("ad_slot")));
+                        }
+                        adqAdIncomeMapper.insertAdUnitList(list);
+                    }
+                } else {
+                    log.error("微小获取小程序广告位清单拉取失败,app_id:{} ,返回信息:{}", appId, jsonObject);
+                }
+            } else {
+                log.error("微小获取小程序广告位清单拉取失败,app_id:{} ,返回为空。", appId);
+            }
 
-    private String getAdSlotName(String adSlot) {
-        if (adSlotMap.isEmpty()) {
-            adSlotMap.put("SLOT_ID_BIZ_BOTTOM", "公众号底部广告");
-            adSlotMap.put("SLOT_ID_BIZ_MID_CONTEXT", "公众号文中广告");
-            adSlotMap.put("SLOT_ID_BIZ_VIDEO_END", "公众号视频后贴");
-            adSlotMap.put("SLOT_ID_BIZ_SPONSOR", "公众号互选广告");
-            adSlotMap.put("SLOT_ID_BIZ_CPS", "公众号返佣商品");
-            adSlotMap.put("SLOT_ID_WEAPP_BANNER", "小程序banner");
-            adSlotMap.put("SLOT_ID_WEAPP_REWARD_VIDEO", "小程序激励视频");
-            adSlotMap.put("SLOT_ID_WEAPP_INTERSTITIAL", "小程序插屏广告");
-            adSlotMap.put("SLOT_ID_WEAPP_VIDEO_FEEDS", "小程序视频广告");
-            adSlotMap.put("SLOT_ID_WEAPP_VIDEO_BEGIN", "小程序视频前贴");
-            adSlotMap.put("SLOT_ID_WEAPP_BOX", "小程序格子广告");
-            adSlotMap.put("SLOT_ID_WEAPP_TEMPLATE", "小程序原生模板广告");
-            adSlotMap.put("SLOT_ID_WEAPP_COVER", "封面广告");
+            if (totalPage > page) {
+                getAdqAdUnitList(appId, appletId, page + 1);
+            } else {
+                log.info("微小获取小程序广告位清单拉取完成,app_id:{} page:{}。", appId, page);
+            }
+        } catch (Exception e) {
+            log.error("微小获取小程序广告位清单拉取失败,app_id:{}。", appId, e);
         }
-        return adSlotMap.get(adSlot);
     }
 
 }

+ 1 - 1
job-adq/src/main/java/cn/com/ctop/job/adq/data/service/impl/AdqMaterialReportServiceImpl.java

@@ -55,7 +55,7 @@ public class AdqMaterialReportServiceImpl implements IAdqMaterialReportService {
             paramsMap.put("time_line", "REPORTING_TIME");
             JSONArray group_by = new JSONArray();
             group_by.add("date");
-            group_by.add("adgroup_id");
+            //group_by.add("adgroup_id");
             JSONArray fieldsList = FieldsConfig.getMaterialDailyFieldsList();
             if ("REPORT_LEVEL_MATERIAL_IMAGE".equals(level)) {
                 group_by.add("image_id");

+ 2 - 2
job-adq/src/main/java/cn/com/ctop/job/adq/data/utils/FieldsConfig.java

@@ -133,8 +133,8 @@ public class FieldsConfig {
     public static JSONArray getMaterialDailyFieldsList(){
         JSONArray fields = new JSONArray();
         fields.add("account_id");
-        fields.add("adgroup_id");
-        fields.add("adgroup_name");
+        //fields.add("adgroup_id");
+        //fields.add("adgroup_name");
         fields.add("date");
         fields.add("cost");
         fields.add("view_count");

+ 11 - 1
job-adq/src/main/java/cn/com/ctop/job/adq/handler/AdqAccountReportJob.java

@@ -127,7 +127,7 @@ public class AdqAccountReportJob {
 
     @XxlJob("miniAppAdIncome")
     public void miniAppAdIncome() {
-        List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqMiniApp(null);
+        List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqAllMiniApp(null);
         String start = DateUtils.getNowAddDate("yyyy-MM-dd", -1);
         String end = DateUtils.getNowDate("yyyy-MM-dd");
         for (JSONObject jsonObject : adqMiniApp) {
@@ -137,6 +137,16 @@ public class AdqAccountReportJob {
         }
     }
 
+    @XxlJob("miniAppAdUnitList")
+    public void miniAppAdUnitList() {
+        List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqAllMiniApp(null);
+        for (JSONObject jsonObject : adqMiniApp) {
+            String app = jsonObject.getString("app_id");
+            Long appletId = jsonObject.getLong("applet_id");
+            adqAdIncomeService.getAdqAdUnitList(app, appletId, 1);
+        }
+    }
+
     @XxlJob("yesMaterialDaily")
     public void yesMaterialDaily() throws Exception {
         String param = XxlJobHelper.getJobParam(); // 执行参数