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

+ 40 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceXingTuController.java

@@ -0,0 +1,40 @@
+package cn.com.ctop.job.bytedance.controller;
+
+import cn.com.ctop.job.bytedance.data.service.IBytedanceXingTuService;
+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 java.util.List;
+
+@RestController
+@RequestMapping("/bytedance/bytedanceXingTu")
+@Api(tags = "头条星图")
+@Slf4j
+public class BytedanceXingTuController {
+    @Autowired
+    private IBytedanceXingTuService bytedanceXingTuService;
+
+
+    @GetMapping("/taskList")
+    public void productData(@RequestParam(required = false) Long advertiserId,
+                            @RequestParam(required = false) String startDate,
+                            @RequestParam(required = false) String endDate) {
+        startDate = startDate == null ? DateUtils.getNowAddDate("yyyy-MM-dd", -1) : startDate;
+        endDate = endDate == null ? DateUtils.getNowDate("yyyy-MM-dd") : endDate;
+        List<JSONObject> xingTuAccount = bytedanceXingTuService.getXingTuAccount(advertiserId);
+        for (JSONObject jsonObject : xingTuAccount) {
+            Long advId = jsonObject.getLong("advertiser_id");
+            String accessToken = jsonObject.getString("access_token");
+            bytedanceXingTuService.getXingTuTaskList(advId, accessToken, startDate, endDate, 1, null, 1, null);
+        }
+
+    }
+
+}

+ 41 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceXingTuTask.java

@@ -0,0 +1,41 @@
+package cn.com.ctop.job.bytedance.data.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BytedanceXingTuTask {
+    private Long challengeTaskId;
+    private Long advertiserId;
+    // challenge_info fields
+    private Integer accountDivideDay;
+    private String anchorTitle;
+    private String authorList; // JSON string
+    private Integer authorScope;
+    private String authorTaskName;
+    private Integer budget;
+    private String commissionInfo; // JSON string
+    private Integer commissionRate;
+    private Integer commissionType;
+    private String demandDesc;
+    private Long endTime;
+    private Integer maxUploadItemCnt;
+    private String microAppId;
+    private Integer omTaskStatus;
+    private String omTaskTag; // JSON string (array)
+    private String participateAuthorRange; // JSON string
+    private Integer providerScope;
+    private Integer sampleDelivery;
+    private String settlementInfo; // JSON string
+    private String startPage;
+    private Long startTime;
+    private String taskHeadImage;
+    private String taskIcon;
+
+    // demand_info fields
+    private String demandName;
+    private String attachments; // JSON string
+}

+ 14 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceXingTuMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.job.bytedance.data.mapper;
+
+
+import cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuTask;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface BytedanceXingTuMapper {
+    List<JSONObject> queryXingTuAccount(@Param("advertiserId") Long advertiserId);
+
+    void insertTaskId(List<BytedanceXingTuTask> tasks);
+}

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

@@ -0,0 +1,20 @@
+<?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.BytedanceXingTuMapper">
+    <insert id="insertTaskId" parameterType="java.util.List">
+        INSERT ignore INTO media_api.bytedance_xingtu_task_list (challenge_task_id,advertiser_id)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (#{item.challengeTaskId},#{item.advertiserId})
+        </foreach>
+    </insert>
+
+    <select id="queryXingTuAccount" resultType="com.alibaba.fastjson.JSONObject">
+        select x.advertiser_id, access_token
+        from deepthink.bytedance_xingtu_advertiser_list x
+                 join deepthink.bytedance_auth_list a on x.admin_advertiser_id = a.admin_advertiser_id
+        <if test="advertiserId != null">
+            and x.advertiser_id = ${advertiserId}
+        </if>
+    </select>
+</mapper>

+ 12 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceXingTuService.java

@@ -0,0 +1,12 @@
+package cn.com.ctop.job.bytedance.data.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
+
+public interface IBytedanceXingTuService {
+    List<JSONObject> getXingTuAccount(Long advertiserId);
+    void getXingTuTaskList(Long advertiserId, String accessToken, String startDate, String endDate, Integer page,
+                           Long errorId, Integer isLog, Integer isSend);
+
+}

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

@@ -0,0 +1,116 @@
+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.entity.BytedanceXingTuTask;
+import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceXingTuMapper;
+import cn.com.ctop.job.bytedance.data.service.IBytedanceXingTuService;
+import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
+import cn.com.ctop.job.bytedance.data.utils.Check;
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class BytedanceXingTuServiceImpl implements IBytedanceXingTuService {
+    @Autowired
+    private BytedanceXingTuMapper bytedanceXingTuMapper;
+
+    @Autowired
+    private BytedancePromoterReportMapper promoterReportMapper;
+
+    @Override
+    public List<JSONObject> getXingTuAccount(Long advertiserId) {
+        return bytedanceXingTuMapper.queryXingTuAccount(advertiserId);
+    }
+
+    public void getXingTuTaskList(Long advertiserId, String accessToken, String startDate, String endDate, Integer page,
+                                  Long errorId, Integer isLog, Integer isSend) {
+        try {
+            String url = "https://api.oceanengine.com/open_api/2/star/demand/om_get_demand_list/";
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("star_id", advertiserId);
+            paramsMap.put("page_no", page);
+            int pageSize = 100;
+            paramsMap.put("page_size", pageSize);
+            Long startT = DateUtils.getTimestampFormat("yyyy-MM-dd HH:mm:ss", startDate + " 00:00:00");
+            Long endT = DateUtils.getTimestampFormat("yyyy-MM-dd HH:mm:ss", endDate + " 23:59:59");
+            paramsMap.put("create_start_time", startT);
+            paramsMap.put("create_end_time", endT);
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", "application/json");
+            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            JSONObject result = JSONObject.parseObject(s);
+            if (Check.isNull(result)) {
+                log.info("账户id:{},星图任务列表请求结果返回为空", advertiserId);
+                insertErrorLog(isLog, advertiserId, startDate, endDate, "xingtu_task_list", "请求结果返回为空");
+                return;
+            }
+            List<BytedanceXingTuTask> tasks = new ArrayList<>();
+            Integer code = result.getInteger("code");
+            boolean hasMore = false;
+            if (code == 0) {
+                JSONObject data = result.getJSONObject("data");
+                if (!Check.isNull(data)) {
+                    JSONArray rows = data.getJSONArray("demands");
+                    if (!Check.isNull(rows)) {
+                        hasMore = rows.size() == pageSize;
+                        for (int i = 0; i < rows.size(); i++) {
+                            JSONObject rowJson = rows.getJSONObject(i);
+                            Long demandId = rowJson.getLong("demand_id");
+                            BytedanceXingTuTask task = new BytedanceXingTuTask();
+                            task.setChallengeTaskId(demandId);
+                            task.setAdvertiserId(advertiserId);
+                            tasks.add(task);
+                        }
+                    }
+                }
+            } else {
+                log.info("账户id:{},日期:{}星图任务列表请求结果失败,返回数据:{}", advertiserId, startDate, result);
+                insertErrorLog(isLog, advertiserId, startDate, endDate, "xingtu_task_list", result.getString("message"));
+                return;
+            }
+            if (!Check.isNull(tasks)) {
+                bytedanceXingTuMapper.insertTaskId(tasks);
+                log.info("账户ID:{},星图任务列表请求成功,开始日期:{},结束日期:{},page:{}", advertiserId, startDate, endDate, page);
+            }
+            if (hasMore) {
+                getXingTuTaskList(advertiserId, accessToken, startDate, endDate, page + 1, errorId, isLog, isSend);
+            } else {
+                log.info("账户ID:{},日期:{}~{},星图任务列表请求成功", advertiserId, startDate,endDate);
+                if (errorId != null) {
+                    promoterReportMapper.deleteInfoByErrorId(errorId);
+                }
+                if (isSend != null && 1 == isSend) {
+                    AlertUtils.sendMessage(advertiserId, startDate, endDate, 1, "product_daily", 1, null);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void insertErrorLog(Integer isLog, Long advertiserId, String startDate, String endDate, String dataDimension, String msg) {
+        if (isLog != null && 1 == isLog) {
+            BytedanceErrorLog errorInfo = new BytedanceErrorLog();
+            errorInfo.setAdvertiserId(advertiserId);
+            errorInfo.setStartDate(startDate);
+            errorInfo.setEndDate(endDate);
+            errorInfo.setMsg(msg);
+            errorInfo.setDataDimension(dataDimension);
+            errorInfo.setDataType("daily");
+            promoterReportMapper.replaceErrorInfo(errorInfo);
+        }
+    }
+}