huangpingkang пре 1 година
родитељ
комит
02af45db1f

+ 12 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/config/DianZhongConfig.java

@@ -4,16 +4,28 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 @Configuration
 @ConfigurationProperties(prefix = "dianzhong.client")
 public class DianZhongConfig {
     private static List<DZConfig> dzConfig;
+    private static final Map<String, String> tokenMap = new ConcurrentHashMap<>();
 
     public List<DZConfig> getDzConfig() {
         return dzConfig;
     }
 
+    public String getToken(String clientId) {
+        if (tokenMap.isEmpty()) {
+            for (DZConfig config : dzConfig) {
+                tokenMap.put(config.getClientId(), config.getToken());
+            }
+        }
+        return tokenMap.get(clientId);
+    }
+
     public void setDzConfig(List<DZConfig> dzConfig) {
         DianZhongConfig.dzConfig = dzConfig;
     }

+ 1 - 10
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/DianZhongController.java

@@ -1,12 +1,8 @@
 package cn.com.ctop.job.bytedance.controller;
 
 import cn.com.ctop.job.bytedance.config.DianZhongConfig;
-import cn.com.ctop.job.bytedance.data.service.IBytedancePromoterReportService;
-import cn.com.ctop.job.bytedance.data.service.IChannelService;
 import cn.com.ctop.job.bytedance.data.service.IDianZhongService;
-import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
-import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,12 +36,7 @@ public class DianZhongController {
             String token = config.getToken();
             String queryStartTime = DateUtils.getQueryStartTime(statDate, "yyyy-MM-dd HH:mm:ss", allDay);
             String queryEndTime = DateUtils.getQueryEndTime(statDate, "yyyy-MM-dd HH:mm:ss", allDay);
-            System.out.println(type);
-            System.out.println(clientId);
-            System.out.println(token);
-            System.out.println(queryStartTime);
-            System.out.println(queryEndTime);
-            //dianZhongService.getDownloadUrl(type, clientId, token, statDate,queryStartTime,queryEndTime);
+            dianZhongService.getDownloadUrl(type, clientId, token, queryStartTime, queryEndTime,null,false);
         }
     }
 

+ 4 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/DianZhongMapper.java

@@ -3,6 +3,10 @@ package cn.com.ctop.job.bytedance.data.mapper;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface DianZhongMapper {
     void insertDownloadTask(@Param("item") JSONObject jsonObject);
+
+    List<JSONObject> getDZRetry();
 }

+ 11 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/DianZhongMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="cn.com.ctop.job.bytedance.data.mapper.DianZhongMapper">
 
     <insert id="insertDownloadTask">
-        replace into media_api.dianzhong_data_download_url
+        insert into media_api.dianzhong_data_download_url
         (stat_date,task_id,`type`,client_id) values
         (
         #{item.stat_date},
@@ -11,5 +11,15 @@
         #{item.type},
         #{item.client_id}
         )
+        on duplicate key update
+        stat_date= VALUES(stat_date),`type`= VALUES(`type`),client_id= VALUES(client_id)
     </insert>
+
+
+
+    <select id="getDZRetry" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT 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', t3.access_token AS 'accessToken'
+        FROM bytedance_error_log t1
+        where data_dimension like 'dianzhong%'
+    </select>
 </mapper>

+ 6 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IDianZhongService.java

@@ -1,6 +1,11 @@
 package cn.com.ctop.job.bytedance.data.service;
 
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
+
 public interface IDianZhongService {
     void getDownloadUrl(String dataType, String clientId, String token,
-                        String statDay, String startTime, String endTime);
+                        String startTime, String endTime,Long errId,boolean isLog);
+    List<JSONObject> getDZRetry();
 }

+ 33 - 16
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/DianZhongServiceImpl.java

@@ -4,6 +4,7 @@ import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.DianZhongMapper;
 import cn.com.ctop.job.bytedance.data.service.IDianZhongService;
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.crypto.SecureUtil;
@@ -12,6 +13,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 @Slf4j
 public class DianZhongServiceImpl implements IDianZhongService {
@@ -21,8 +24,12 @@ public class DianZhongServiceImpl implements IDianZhongService {
     @Autowired
     private DianZhongMapper dianZhongMapper;
 
+    public List<JSONObject> getDZRetry(){
+        return dianZhongMapper.getDZRetry();
+    }
+
     public void getDownloadUrl(String dataType, String clientId, String token,
-                                String statDay, String startTime, String endTime) {
+                               String startTime, String endTime, Long errId, boolean isLog) {
         long l = System.currentTimeMillis();
         JSONObject param = new JSONObject()
                 .fluentPut("clientId", clientId)
@@ -30,43 +37,53 @@ public class DianZhongServiceImpl implements IDianZhongService {
                 .fluentPut("edate", String.valueOf(DateUtil.parse(endTime, "yyyy-MM-dd HH:mm:ss").getTime() / 1000))
                 .fluentPut("timestamp", l)
                 .fluentPut("signKey", getSignKey(clientId, token, l));
+        if ("user".equals(dataType)) {
+            param.put("queryField", "loginTime");
+        }
         try {
             String url = "https://routine.wqxsw.com/flames/channel/query/" + dataType;
             String response = HttpUtils.httpPostRequest(url, param, null);
             JSONObject responseJson = JSONObject.parseObject(response);
-            System.out.println(response);
             if ("0".equals(responseJson.getString("retCode"))) {
                 String taskId = responseJson.getString("data");
                 JSONObject jsonObject = new JSONObject()
-                        .fluentPut("stat_date", statDay.replace("-", ""))
+                        .fluentPut("stat_date", DateUtils.transformFormat(endTime,"yyyy-MM-dd HH:mm:ss","yyyyMMdd"))
                         .fluentPut("task_id", taskId)
                         .fluentPut("type", dataType)
                         .fluentPut("client_id", clientId);
                 dianZhongMapper.insertDownloadTask(jsonObject);
                 log.info("获取点众数据下载地址成功 {} {} {}~{} ", dataType, clientId, startTime, endTime);
+
+                if (errId != null) {
+                    promoterReportMapper.deleteInfoByErrorId(errId);
+                }
             } else {
                 log.error("获取点众数据下载地址错误 {} {} {}~{} msg:{}", dataType, clientId, startTime, endTime, responseJson.getString("retMsg"));
+                if (isLog) {
+                    promoterReportMapper.replaceErrorInfo(
+                            BytedanceErrorLog.builder()
+                                    .msg(responseJson.getString("retMsg"))
+                                    .advertiserId(Long.valueOf(clientId))
+                                    .dataDimension("dianzhong_url")
+                                    .dataType(dataType)
+                                    .startDate(startTime)
+                                    .endDate(endTime)
+                                    .build());
+                }
+            }
+        } catch (Exception e) {
+            log.error("获取点众数据下载地址错误 {} {} {}~{} ", dataType, clientId, startTime, endTime, e);
+            if (isLog) {
                 promoterReportMapper.replaceErrorInfo(
                         BytedanceErrorLog.builder()
-                                .msg(responseJson.getString("retMsg"))
+                                .msg(e.getMessage())
                                 .advertiserId(Long.valueOf(clientId))
-                                .dataDimension("dianzhong")
+                                .dataDimension("dianzhong_url")
                                 .dataType(dataType)
                                 .startDate(startTime)
                                 .endDate(endTime)
                                 .build());
             }
-        } catch (Exception e) {
-            log.error("获取点众数据下载地址错误 {} {} {}~{} ", dataType, clientId, startTime, endTime, e);
-            promoterReportMapper.replaceErrorInfo(
-                    BytedanceErrorLog.builder()
-                            .msg(e.getMessage())
-                            .advertiserId(Long.valueOf(clientId))
-                            .dataDimension("dianzhong")
-                            .dataType(dataType)
-                            .startDate(startTime)
-                            .endDate(endTime)
-                            .build());
         }
     }
 

+ 34 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceReportRetryJob.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.job.bytedance.handler;
 
 
+import cn.com.ctop.job.bytedance.config.DianZhongConfig;
 import cn.com.ctop.job.bytedance.data.enums.AccountTypeEnum;
 import cn.com.ctop.job.bytedance.data.service.*;
 import cn.com.ctop.job.bytedance.data.utils.Check;
@@ -10,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -47,6 +49,12 @@ public class BytedanceReportRetryJob {
     @Autowired
     private IBytedanceMaterialReportService bytedanceMaterialReportService;
 
+    @Autowired
+    private IDianZhongService dianZhongService;
+
+    @Resource
+    private DianZhongConfig dianZhongConfig;
+
 
     private static ExecutorService hourAccountRetrExecutorService = Executors.newFixedThreadPool(2);
     private static ExecutorService dailyAccountRetrExecutorService = Executors.newFixedThreadPool(2);
@@ -245,6 +253,32 @@ public class BytedanceReportRetryJob {
             log.info("巨量星图重试列表为空");
         }
 
+        List<JSONObject> dzRetry = dianZhongService.getDZRetry();
+        if (!Check.isNull(dzRetry)) {
+            for (int i = 0; i < dzRetry.size(); i++) {
+                JSONObject jsonObject = dzRetry.get(i);
+                Long id = jsonObject.getLong("id");
+                String clientId = jsonObject.getString("advertiserId");
+                String startDate = jsonObject.getString("startDate");
+                String endDate = jsonObject.getString("endDate");
+                String dataDimension = jsonObject.getString("dataDimension");
+                String dataType = jsonObject.getString("dataType");
+                String token = dianZhongConfig.getToken(clientId);
+                if ("dianzhong_url".equals(dataDimension)) {
+                    changduExecutorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            if (!Check.isNull(token)) {
+                                dianZhongService.getDownloadUrl(dataType, clientId, token, startDate, endDate, id, false);
+                            }
+                        }
+                    });
+                }
+            }
+        } else {
+            log.info("点众重试列表为空");
+        }
+
     }
 
 

+ 43 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/DianZhongJob.java

@@ -0,0 +1,43 @@
+package cn.com.ctop.job.bytedance.handler;
+
+
+import cn.com.ctop.job.bytedance.config.DianZhongConfig;
+import cn.com.ctop.job.bytedance.data.service.IDianZhongService;
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@Component
+public class DianZhongJob {
+    @Autowired
+    private IDianZhongService dianZhongService;
+
+    @Resource
+    private DianZhongConfig dianZhongConfig;
+
+    /**
+     * 番茄数据拉取
+     */
+    @XxlJob("dzDownloadUrl")
+    public void dzDownloadUrl() {
+        List<DianZhongConfig.DZConfig> dzConfig = dianZhongConfig.getDzConfig();
+        for (DianZhongConfig.DZConfig config : dzConfig) {
+            String statDate = DateUtils.dateAddByType(new Date(), -10, Calendar.MINUTE, "yyyy-MM-dd");
+            String clientId = config.getClientId();
+            String token = config.getToken();
+            String queryStartTime = DateUtils.getQueryStartTime(statDate, "yyyy-MM-dd HH:mm:ss", false);
+            String queryEndTime = DateUtils.getQueryEndTime(statDate, "yyyy-MM-dd HH:mm:ss", false);
+            dianZhongService.getDownloadUrl("user", clientId, token, queryStartTime, queryEndTime, null, true);
+            dianZhongService.getDownloadUrl("order", clientId, token, queryStartTime, queryEndTime, null, true);
+        }
+    }
+
+}