Procházet zdrojové kódy

Merge #24 into master from pingkang

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

* pingkang: (2 commits)
  微小广告收入汇总数据
  Merge branch 'master' of codeup.aliyun.com:60c06368dbbed34fe0f0c263/job/hr_job-adq into pingkang

Signed-off-by: 黄平康 <accounts_6361eaad7b63b44dd7833e63@mail.teambition.com>
Merged-by: 黄平康 <accounts_6361eaad7b63b44dd7833e63@mail.teambition.com>

CR-link: https://codeup.aliyun.com/60c06368dbbed34fe0f0c263/job/hr_job-adq/change/24
huangpingkang před 7 měsíci
rodič
revize
7f6829f473

+ 20 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/controller/AdqAssetController.java

@@ -90,6 +90,26 @@ public class AdqAssetController {
         return MessageModel.ok();
     }
 
+    @GetMapping("/miniAppAdPosIncome")
+    public MessageModel miniAppAdPosIncome(@RequestParam(required = false) String appId,
+                                        @RequestParam(required = false) String startDate,
+                                        @RequestParam(required = false) String endDate) {
+        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) {
+            String app = jsonObject.getString("app_id");
+            Long appletId = jsonObject.getLong("applet_id");
+            dailyExecutorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    adqAdIncomeService.getAdqAdPosIncome(start, end, app, appletId, 1, 1, null, null);
+                }
+            });
+        }
+        return MessageModel.ok();
+    }
+
     @GetMapping("/miniAppAdUnitList")
     public MessageModel miniAppAdUnitList(@RequestParam(required = false) String appId) {
         List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqAllMiniApp(appId);

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

@@ -30,4 +30,6 @@ public interface AdqAdIncomeMapper {
     void insertAdqGameDiviceSave(@Param("list")ArrayList<JSONObject> reports);
     void insertAdqGameDiviceSaveDetail(@Param("list")ArrayList<JSONObject> reports);
     void insertAdqGameDiviceTransfer(@Param("list")ArrayList<JSONObject> reports);
+
+    void insertAdqAdPosIncome(@Param("list")List<JSONObject> reports);
 }

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

@@ -139,6 +139,22 @@
           #{item.amt}, #{item.out_uuid}, #{item.remark}, #{item.src_account})
         </foreach>
     </insert>
+    <insert id="insertAdqAdPosIncome">
+        replace INTO media_api.adq_publisher_adpos_general (
+        app_id, ad_slot,ad_slot_name, stat_date,
+        click_count, click_rate, ecpm,
+        exposure_count, exposure_rate, income,
+        req_succ_count,slot_id, slot_str
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.app_id}, #{item.ad_slot}, #{item.ad_slot_name}, #{item.stat_date},
+            #{item.click_count}, #{item.click_rate}, #{item.ecpm},
+            #{item.exposure_count}, #{item.exposure_rate}, #{item.income},
+            #{item.req_succ_count}, #{item.slot_id}, #{item.slot_str}
+            )
+        </foreach>
+    </insert>
 
     <select id="queryAdqIaaMiniApp" resultType="com.alibaba.fastjson.JSONObject">
         select m.app_id,l.id applet_id

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

@@ -9,6 +9,7 @@ public interface IAdqAdIncomeService {
     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 getAdqAdPosIncome(String startDt, String endDt, String appId, Long appletId, Integer page, Integer isLog, Long errId, Integer isSend);
     void getAdqAdUnitList(String appId, Long appletId, Integer page);
     void getAdqAdIncomeRate(String appId, Long appletId, String startDate, String endDate);
     void getGameGiftList(String startDt, String endDt, String appId, Long appletId, Integer page, Integer isLog, Long errId, Integer isSend);

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

@@ -225,6 +225,80 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
         }
     }
 
+    //获取小程序广告汇总数据
+    public void getAdqAdPosIncome(String startDt, String endDt, String appId, Long appletId, Integer page, Integer isLog, Long errId, Integer isSend) {
+        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, startDt, endDt, appletId);
+                return;
+            }
+            int pageSize = 90;
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("access_token", tokenObj.toString());
+            paramsMap.put("action", "publisher_adpos_general");
+            paramsMap.put("page", page);
+            paramsMap.put("page_size", pageSize);
+            paramsMap.put("start_date", startDt);
+            paramsMap.put("end_date", endDt);
+            String s = HttpUtils.httpGet(url, paramsMap, null);
+            JSONObject jsonObject = JSONObject.parseObject(s);
+            List<JSONObject> reports = new ArrayList<>();
+            int totalPage = 1;
+            if (!Check.isNull(jsonObject)) {
+                Integer code = jsonObject.getInteger("ret");
+                JSONObject baseResp = jsonObject.getJSONObject("base_resp");
+                if (baseResp != null) {
+                    code = baseResp.getInteger("ret");
+                }
+                if (code == 2009) {
+                    return; //无效的流量主
+                }
+                if (code == 0) {
+                    JSONArray list = jsonObject.getJSONArray("list");
+                    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 dataJson = list.getJSONObject(i);
+                            dataJson.put("app_id", appId);
+                            dataJson.put("ad_slot_name",adSlotMap.get(dataJson.getString("ad_slot")));
+                            dataJson.put("stat_date", dataJson.getString("date").replace("-", ""));
+                            reports.add(dataJson);
+                        }
+                    }
+
+                } else {
+                    log.error("微小获取小程序广告汇总数据失败,app_id:{} {}~{},返回信息:{}", appId, startDt, endDt, jsonObject);
+                    insertErrorLog(isLog, System.currentTimeMillis(), "adq_publisher_adpos_general", startDt, endDt,
+                            jsonObject.fluentPut("app_id", appId).fluentPut("applet_id", appletId).toJSONString());
+                }
+            } else {
+                log.error("微小获取小程序广告汇总数据失败,app_id:{} {}~{},返回为空。", appId, startDt, endDt);
+                insertErrorLog(isLog, System.currentTimeMillis(), "adq_publisher_adpos_general", startDt, endDt,
+                        new JSONObject().fluentPut("app_id", appId).fluentPut("applet_id", appletId).fluentPut("msg", "返回为空").toJSONString());
+            }
+            if (!Check.isNull(reports)) {
+                adqAdIncomeMapper.insertAdqAdPosIncome(reports);
+            }
+
+            if (totalPage > page) {
+                getAdqAdPosIncome(startDt, endDt, appId, appletId, page + 1, isLog, errId, isSend);
+            } else {
+                log.info("微小获取小程序广告汇总数据完成,app_id:{} {}~{} page:{}。", appId, startDt, endDt, page);
+                if (errId != null) {
+                    adqErrorLogMapper.deleteInfoByErrorId(errId);
+                }
+                if (isSend != null && isSend == 1) {
+                    AlertUtils.sendMessage(System.currentTimeMillis(), startDt, endDt, 3, "daily", 1, "adq_ma_ad_income");
+                }
+            }
+        } catch (Exception e) {
+            log.error("微小获取小程序广告汇总数据失败,app_id:{} {}~{}。", appId, startDt, endDt, e);
+        }
+    }
+
     private void insertErrorLog(Integer isLog, Long advertiserId, String dataDimension, String startDate, String endDate, String msg) {
         if (isLog != null && isLog == 1) {
             AdqErrorLog errorInfo = new AdqErrorLog();

+ 12 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/handler/AdqAccountReportJob.java

@@ -136,6 +136,18 @@ public class AdqAccountReportJob {
         }
     }
 
+    @XxlJob("miniAppAdPosIncome")
+    public void miniAppAdPosIncome() {
+        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) {
+            String app = jsonObject.getString("app_id");
+            Long appletId = jsonObject.getLong("applet_id");
+            adqAdIncomeService.getAdqAdPosIncome(start, end, app, appletId, 1, 1, null, null);
+        }
+    }
+
     @XxlJob("miniAppAdUnitList")
     public void miniAppAdUnitList() {
         List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqAllMiniApp(null);

+ 7 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/handler/AdqRetryReportJob.java

@@ -207,6 +207,13 @@ public class AdqRetryReportJob {
                             adqAdIncomeService.getAdqAdIncome(startDate, endDate, appId, appletId, 1, null, id, isSend);
                         }
                     });
+                } else if ("adq_publisher_adpos_general".equals(dataDimension)) {
+                    adIncomeExecutorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            adqAdIncomeService.getAdqAdPosIncome(startDate, endDate, appId, appletId, 1, null, id, isSend);
+                        }
+                    });
                 } else if ("adq_ma_game_gift_list".equals(dataDimension)) {
                     adIncomeExecutorService.submit(new Runnable() {
                         @Override