Jelajahi Sumber

Merge #20 into master from pingkang

微小广告分成比例

* pingkang: (1 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/20
huangpingkang 10 bulan lalu
induk
melakukan
9bd1498a05

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

@@ -105,4 +105,21 @@ public class AdqAssetController {
         }
         return MessageModel.ok();
     }
+
+    @GetMapping("/miniAppAdIncomeRate")
+    public MessageModel miniAppAdIncomeRate(@RequestParam(required = false) String appId,
+                                        String startDate, String endDate) {
+        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.getAdqAdIncomeRate(app, appletId, startDate, endDate);
+                }
+            });
+        }
+        return MessageModel.ok();
+    }
 }

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

@@ -21,4 +21,6 @@ public interface AdqAdIncomeMapper {
     List<JSONObject> queryAdqAdIncomeRetryJob();
 
     void insertAdUnitList(@Param("list") JSONArray list);
+
+    void insertAdIncomeRate(@Param("list") JSONArray results);
 }

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

@@ -86,6 +86,14 @@
             )
         </foreach>
     </insert>
+    <insert id="insertAdIncomeRate">
+        replace into media_api.adq_ad_income_rate
+        (stat_date,app_id,share_rate,ad_give_rate)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+        (#{item.stat_date}, #{item.app_id}, #{item.share_rate}, #{item.ad_give_rate})
+        </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

@@ -10,4 +10,5 @@ public interface IAdqAdIncomeService {
     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);
+    void getAdqAdIncomeRate(String appId, Long appletId, String startDate, String endDate);
 }

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

@@ -35,7 +35,7 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
     @Autowired
     private AdqErrorLogMapper adqErrorLogMapper;
 
-    private static final Map<String, String> adSlotMap = new HashMap<String, String>(){{
+    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", "公众号视频后贴");
@@ -108,7 +108,7 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
                             //System.out.println(report);
                             reports.add(report);
 
-                            dorisLoadManager.add("media_api","adq_publisher_adunit_general", report);
+                            dorisLoadManager.add("media_api", "adq_publisher_adunit_general", report);
                         }
                     }
 
@@ -189,7 +189,7 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
                             //System.out.println(report);
                             reports.add(report);
 
-                            dorisLoadManager.add("media_api","adq_publisher_adunit_general",report);
+                            dorisLoadManager.add("media_api", "adq_publisher_adunit_general", report);
                         }
                     }
 
@@ -253,7 +253,6 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
             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");
@@ -267,8 +266,8 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
                     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("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")));
                         }
@@ -291,4 +290,56 @@ public class AdqAdIncomeServiceImpl implements IAdqAdIncomeService {
         }
     }
 
+    public void getAdqAdIncomeRate(String appId, Long appletId, String startDate, String endDate) {
+        try {
+            Object tokenObj = redis2Template_db5.opsForValue().get("wechat-applet-access-token-key-" + appletId);
+            if (tokenObj == null) {
+                log.error("微小广告分成比例获取token为空 {} {}", appId, appletId);
+                return;
+            }
+            String url = "https://api.weixin.qq.com/wedata/wedata_get_data?access_token=" + tokenObj;
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("chart_id", "1001001002");
+            paramsMap.put("target_id", "");
+            paramsMap.put("begin_date", startDate.replace("-", ""));
+            paramsMap.put("end_date", endDate.replace("-", ""));
+            paramsMap.put("time_unit", 0);
+            String s = HttpUtils.httpPostRequest(url, paramsMap, null);
+            JSONObject jsonObject = JSONObject.parseObject(s);
+            JSONArray results = new JSONArray();
+            if (!Check.isNull(jsonObject)) {
+                Integer code = jsonObject.getInteger("errcode");
+                if (code == 0) {
+                    JSONArray list = jsonObject.getJSONArray("chart_result");
+                    if (!Check.isNull(list)) {
+                        JSONArray chartData = list.getJSONObject(0).getJSONArray("chart_data");
+                        for (int i = 0; i < chartData.size(); i++) {
+                            JSONObject chartJson = chartData.getJSONObject(i);
+                            JSONArray value = chartJson.getJSONArray("value");
+                            if (!Check.isNull(value)) {
+                                JSONObject result = new JSONObject();
+                                result.put("stat_date", value.getInteger(0));
+                                result.put("app_id", appId);
+                                result.put("share_rate", value.getDoubleValue(1));
+                                result.put("ad_give_rate", value.getDoubleValue(2));
+                                results.add(result);
+                            }
+                        }
+
+                    }
+                } else {
+                    log.error("微小广告分成比例拉取失败,app_id:{} ,返回信息:{}", appId, jsonObject);
+                }
+            } else {
+                log.error("微小广告分成比例拉取失败,app_id:{} ,返回为空。", appId);
+            }
+            if (!Check.isNull(results)) {
+                adqAdIncomeMapper.insertAdIncomeRate(results);
+            }
+            log.info("微小广告分成比例拉取完成,app_id:{} {}~{}", appId, startDate, endDate);
+        } catch (Exception e) {
+            log.error("微小广告分成比例拉取失败,app_id:{}。", appId, e);
+        }
+    }
+
 }

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

@@ -35,6 +35,7 @@ import java.io.InputStreamReader;
 import java.net.URI;
 import java.net.URLEncoder;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.HashMap;
@@ -115,7 +116,7 @@ public class HttpUtils {
                 return httpPostRequest(newUrl, param, headers);
             } else if (statusCode == HttpStatus.SC_OK) {
                 respentity = response.getEntity();
-                strReturn = EntityUtils.toString(respentity);
+                strReturn = EntityUtils.toString(respentity, StandardCharsets.UTF_8);
                 return strReturn;
             }
         } catch (Exception e) {

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

@@ -166,4 +166,16 @@ public class AdqAccountReportJob {
             }
         });
     }
+
+    @XxlJob("miniAppAdIncomeRate")
+    public void miniAppAdIncomeRate() {
+        List<JSONObject> adqMiniApp = adqAdIncomeService.getAdqAllMiniApp(null);
+        String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+        String yesDate = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
+        for (JSONObject jsonObject : adqMiniApp) {
+            String app = jsonObject.getString("app_id");
+            Long appletId = jsonObject.getLong("applet_id");
+            adqAdIncomeService.getAdqAdIncomeRate(app, appletId, yesDate, yesDate);
+        }
+    }
 }