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

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

@@ -0,0 +1,41 @@
+package cn.com.ctop.job.bytedance.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+@Configuration
+@ConfigurationProperties(prefix = "dianzhong.client")
+public class DianZhongConfig {
+    private static List<DZConfig> dzConfig;
+
+    public List<DZConfig> getDzConfig() {
+        return dzConfig;
+    }
+
+    public void setDzConfig(List<DZConfig> dzConfig) {
+        DianZhongConfig.dzConfig = dzConfig;
+    }
+
+    public static class DZConfig {
+        private String clientId;
+        private String token;
+
+        public String getClientId() {
+            return clientId;
+        }
+
+        public void setClientId(String clientId) {
+            this.clientId = clientId;
+        }
+
+        public String getToken() {
+            return token;
+        }
+
+        public void setToken(String token) {
+            this.token = token;
+        }
+    }
+}

+ 52 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/DianZhongController.java

@@ -0,0 +1,52 @@
+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;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/bytedance/dianzhong")
+@Api(tags = "点众拉取")
+@Slf4j
+public class DianZhongController {
+    @Autowired
+    private IDianZhongService dianZhongService;
+
+    @Resource
+    private DianZhongConfig dianZhongConfig;
+
+
+    @GetMapping("/getDownloadUrl")
+    public void downloadUrl(String type,
+                            @RequestParam(required = false) String statDate,
+                            @RequestParam(required = false, defaultValue = "false") Boolean allDay) {
+        List<DianZhongConfig.DZConfig> dzConfig = dianZhongConfig.getDzConfig();
+        for (DianZhongConfig.DZConfig config : dzConfig) {
+            String clientId = config.getClientId();
+            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);
+        }
+    }
+
+}

+ 17 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceErrorLog.java

@@ -1,12 +1,15 @@
 package cn.com.ctop.job.bytedance.data.entity;
 package cn.com.ctop.job.bytedance.data.entity;
 
 
 
 
+import lombok.Builder;
+
 /**
 /**
  * 头条报错误日志对象 bytedance_error_log
  * 头条报错误日志对象 bytedance_error_log
  *
  *
  * @author ruoyi
  * @author ruoyi
  * @date 2025-03-07
  * @date 2025-03-07
  */
  */
+@Builder
 public class BytedanceErrorLog {
 public class BytedanceErrorLog {
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 
@@ -42,6 +45,20 @@ public class BytedanceErrorLog {
     private Integer isSend;
     private Integer isSend;
     private String msg;
     private String msg;
 
 
+    public BytedanceErrorLog() {
+    }
+
+    public BytedanceErrorLog(Long id, Long advertiserId, String startDate, String endDate, String dataDimension, String dataType, Integer isSend, String msg) {
+        this.id = id;
+        this.advertiserId = advertiserId;
+        this.startDate = startDate;
+        this.endDate = endDate;
+        this.dataDimension = dataDimension;
+        this.dataType = dataType;
+        this.isSend = isSend;
+        this.msg = msg;
+    }
+
     public Long getId() {
     public Long getId() {
         return id;
         return id;
     }
     }

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

@@ -0,0 +1,8 @@
+package cn.com.ctop.job.bytedance.data.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.annotations.Param;
+
+public interface DianZhongMapper {
+    void insertDownloadTask(@Param("item") JSONObject jsonObject);
+}

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

@@ -0,0 +1,15 @@
+<?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" >
+<mapper namespace="cn.com.ctop.job.bytedance.data.mapper.DianZhongMapper">
+
+    <insert id="insertDownloadTask">
+        replace into media_api.dianzhong_data_download_url
+        (stat_date,task_id,`type`,client_id) values
+        (
+        #{item.stat_date},
+        #{item.task_id},
+        #{item.type},
+        #{item.client_id}
+        )
+    </insert>
+</mapper>

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

@@ -0,0 +1,6 @@
+package cn.com.ctop.job.bytedance.data.service;
+
+public interface IDianZhongService {
+    void getDownloadUrl(String dataType, String clientId, String token,
+                        String statDay, String startTime, String endTime);
+}

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

@@ -0,0 +1,76 @@
+package cn.com.ctop.job.bytedance.data.service.impl;
+
+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.HttpUtils;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.crypto.SecureUtil;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class DianZhongServiceImpl implements IDianZhongService {
+    @Autowired
+    private BytedancePromoterReportMapper promoterReportMapper;
+
+    @Autowired
+    private DianZhongMapper dianZhongMapper;
+
+    public void getDownloadUrl(String dataType, String clientId, String token,
+                                String statDay, String startTime, String endTime) {
+        long l = System.currentTimeMillis();
+        JSONObject param = new JSONObject()
+                .fluentPut("clientId", clientId)
+                .fluentPut("sdate", String.valueOf(DateUtil.parse(startTime, "yyyy-MM-dd HH:mm:ss").getTime() / 1000))
+                .fluentPut("edate", String.valueOf(DateUtil.parse(endTime, "yyyy-MM-dd HH:mm:ss").getTime() / 1000))
+                .fluentPut("timestamp", l)
+                .fluentPut("signKey", getSignKey(clientId, token, l));
+        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("task_id", taskId)
+                        .fluentPut("type", dataType)
+                        .fluentPut("client_id", clientId);
+                dianZhongMapper.insertDownloadTask(jsonObject);
+                log.info("获取点众数据下载地址成功 {} {} {}~{} ", dataType, clientId, startTime, endTime);
+            } else {
+                log.error("获取点众数据下载地址错误 {} {} {}~{} msg:{}", dataType, clientId, startTime, endTime, responseJson.getString("retMsg"));
+                promoterReportMapper.replaceErrorInfo(
+                        BytedanceErrorLog.builder()
+                                .msg(responseJson.getString("retMsg"))
+                                .advertiserId(Long.valueOf(clientId))
+                                .dataDimension("dianzhong")
+                                .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());
+        }
+    }
+
+    private static String getSignKey(String clientId, String token, long timeStamp) {
+        return SecureUtil.md5(clientId + token + timeStamp).toLowerCase();
+    }
+}

+ 71 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/DateUtils.java

@@ -185,4 +185,75 @@ public class DateUtils {
         return days;
         return days;
     }
     }
 
 
+    public static String getQueryStartTime(String td, String format, boolean isRecover) {
+        String today = getToday();
+        if (isRecover) {
+            return transformFormat(td + " 00:00:00", "yyyy-MM-dd HH:mm:ss", format);
+        } else if (today.equals(td)) {
+            String beforeDate = dateAddByType(new Date(), -120, Calendar.MINUTE, "yyyy-MM-dd");
+            if (beforeDate.compareTo(today) < 0) {
+                return transformFormat(today + " 00:00:00", "yyyy-MM-dd HH:mm:ss", format);
+            } else {
+                return dateAddByType(new Date(), -120, Calendar.MINUTE, format);
+            }
+        } else if (today.compareTo(td) > 0) {
+            return transformFormat(td + " 22:00:00", "yyyy-MM-dd HH:mm:ss", format);
+        } else {
+            return transformFormat(td + " 00:00:00", "yyyy-MM-dd HH:mm:ss", format);
+        }
+    }
+
+    public static String getQueryEndTime(String td, String format, boolean isRecover) {
+        String today = getToday();
+        if (isRecover) {
+            return transformFormat(td + " 23:59:59", "yyyy-MM-dd HH:mm:ss", format);
+        } else if (today.equals(td)) {
+            return formatDate(new Date(), format);
+        } else {
+            return transformFormat(td + " 23:59:59", "yyyy-MM-dd HH:mm:ss", format);
+        }
+    }
+
+    public static String getToday() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        return format.format(date);
+    }
+
+    public static String formatDate(Long timestamp, String formatPattern) {
+        return formatDate(new Date(timestamp), formatPattern);
+    }
+
+    public static String formatDate(Date date, String formatPattern) {
+        SimpleDateFormat format = new SimpleDateFormat(formatPattern);
+        return format.format(date);
+    }
+
+    public static String transformFormat(String date, String fromPattern, String toFormat) {
+        if (fromPattern.equals(toFormat)) {
+            return date;
+        }
+        SimpleDateFormat format1 = new SimpleDateFormat(fromPattern);
+        SimpleDateFormat format2 = new SimpleDateFormat(toFormat);
+        try {
+            return format2.format(format1.parse(date));
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    public static String dateAddByType(Date targetDay, int index, int calendarField, String format) {
+        String res;
+        try {
+            SimpleDateFormat smp = new SimpleDateFormat(format);
+            Calendar ca = Calendar.getInstance();
+            ca.setTime(targetDay);
+            ca.add(calendarField, index);
+            res = smp.format(ca.getTime());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return res;
+    }
+
 }
 }

+ 5 - 0
job-bytedance/src/main/resources/application.yml

@@ -181,4 +181,9 @@ api:
     api-prefix: https://ad.oceanengine.com/open_api
     api-prefix: https://ad.oceanengine.com/open_api
 
 
 
 
+dianzhong:
+  client:
+    dzConfig[0]:
+      clientId: 10003129
+      token: ckogrgCE4PEDxT1oL5