Browse Source

快手账户操作记录

yangzian 3 years ago
parent
commit
c0a0890df2

+ 3 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/constant/KuaishouConstant.java

@@ -35,6 +35,9 @@ public class KuaishouConstant {
     //账户余额
     public static final String FUND_GET = "/rest/openapi/v1/advertiser/fund/get";
 
+    //快手账户操作记录
+    public static final String OPERATION_RECORD_LIST = "/rest/openapi/v1/tool/operation_record/list";
+
 
 
 

+ 71 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/entity/KuaishouAccountOperationRecordList.java

@@ -0,0 +1,71 @@
+package cn.com.ctop.job.kuaishou.data.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 快手账户操作记录
+ *
+ * @author jeecg-boot
+ * @date 2021-09-07
+ * @version V1.0
+ */
+@Data
+@TableName("kuaishou_tools_advertiser_operation_record_list")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "kuaishou_tools_advertiser_operation_record_list对象", description = "快手账户操作记录")
+public class KuaishouAccountOperationRecordList {
+
+  /** 主键ID */
+  @TableId(type = IdType.UUID)
+  @ApiModelProperty(value = "主键ID")
+  private int id;
+
+
+  private Long advertiserId;
+
+  /** 操作对象ID */
+  @ApiModelProperty(value = "操作对象ID")
+  private String objectId;
+
+
+  @ApiModelProperty(value = "操作对象名称")
+  private String objectName;
+
+  /** 操作类型 1:新增 2:修改 */
+  @ApiModelProperty(value = "操作类型 1:新增 2:修改")
+  private int operationType;
+
+  /** 操作目标类型 1:账户 2:计划 3:广告组 4:创意 5:视频 6:应用 7:人群包 */
+  @ApiModelProperty(value = "操作目标类型 1:账户 2:计划 3:广告组 4:创意 5:视频 6:应用 7:人群包")
+  private Integer operationTarget;
+
+  /** 访问操作人 1:广告主 2:代理商 3:系统 4:管理员 5:Market Api令牌 */
+  @ApiModelProperty(value = "操作人 1:广告主 2:代理商 3:系统 4:管理员 5:Market Api")
+  private String roleType;
+  /** 操作时间 */
+  @ApiModelProperty(value = "操作时间")
+  private String operationTime;
+
+  /** 日志内容[field_name:字段名称 original_data:原始数据 update_data:修改数据] */
+  @ApiModelProperty(value = "日志内容[field_name:字段名称 original_data:原始数据 update_data:修改数据]")
+  private String contentLog;
+
+  /** 创建时间 */
+  @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+  @ApiModelProperty(value = "创建时间")
+  private Date createTime;
+
+}

+ 23 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/mapper/OperationRecordMapper.java

@@ -0,0 +1,23 @@
+package cn.com.ctop.job.kuaishou.data.mapper;
+
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAccountOperationRecordList;
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouCampaignList;
+import cn.com.ctop.job.kuaishou.data.entity.OauthToken;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 账户操作记录
+ *
+ * @author
+ * @version V1.0
+ */
+public interface OperationRecordMapper{
+
+
+    void replaceAdvertiserOperationRecord(@Param("addList") List<KuaishouAccountOperationRecordList> addList);
+
+}

+ 37 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/mapper/xml/OperationRecordMapper.xml

@@ -0,0 +1,37 @@
+<?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.kuaishou.data.mapper.OperationRecordMapper">
+
+
+    <!-- 插入 快手账户操作记录信息 -->
+    <insert id="replaceAdvertiserOperationRecord">
+        replace into kuaishou_tools_advertiser_operation_record_list(
+        `advertiser_id`,
+        `object_id`,
+        `operation_type`,
+        `operation_target`,
+        `role_type`,
+        `object_name`,
+        `operation_time`,
+        `content_log`,
+        `create_time`
+        )
+        values
+        <foreach collection="addList" item="add" separator=",">
+            (
+            #{add.advertiserId},
+            #{add.objectId},
+            #{add.operationType},
+            #{add.operationTarget},
+            #{add.roleType},
+            #{add.objectName},
+            #{add.operationTime},
+            #{add.contentLog},
+            NOW()
+            )
+        </foreach>
+    </insert>
+
+
+
+</mapper>

+ 19 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/service/IOperationRecordService.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.job.kuaishou.data.service;
+
+import cn.com.ctop.job.kuaishou.data.entity.OauthToken;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 账户操作记录
+ *
+ * @version V1.0
+ */
+public interface IOperationRecordService {
+
+
+  void getOperationRecordList(String accessToken, Long advertiserId, String startDate, String endDate, int page);
+
+}

+ 90 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/service/impl/OperationRecordServiceImpl.java

@@ -0,0 +1,90 @@
+package cn.com.ctop.job.kuaishou.data.service.impl;
+
+import cn.com.ctop.job.kuaishou.data.constant.KuaishouConstant;
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAccountOperationRecordList;
+import cn.com.ctop.job.kuaishou.data.entity.OauthToken;
+import cn.com.ctop.job.kuaishou.data.mapper.OauthTokenMapper;
+import cn.com.ctop.job.kuaishou.data.mapper.OperationRecordMapper;
+import cn.com.ctop.job.kuaishou.data.service.IOauthTokenService;
+import cn.com.ctop.job.kuaishou.data.service.IOperationRecordService;
+import cn.com.ctop.job.kuaishou.data.utils.HttpUtils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 账户操作记录
+ *
+ * @version V1.0
+ */
+@Slf4j
+@Service
+public class OperationRecordServiceImpl implements IOperationRecordService {
+
+
+  @Value("${api.kuaishou.postUrl}")
+  private String postUrl;
+
+
+  @Autowired
+  private OperationRecordMapper operationRecordMapper;
+
+
+  @Override
+  public void getOperationRecordList(String accessToken, Long advertiserId, String startDate, String endDate, int page) {
+
+    log.info("快手账户操作记录=======》》》账户:{},日期{}---{},page----{}",advertiserId,startDate,endDate,page);
+    String url = postUrl + KuaishouConstant.OPERATION_RECORD_LIST;
+    Map<String, String> headers = new HashMap<>();
+    headers.put("Access-Token", accessToken);
+    Map<String, Object> param = new HashMap<>();
+    param.put("start_date", startDate);
+    param.put("end_date", endDate);
+    param.put("advertiser_id", advertiserId);
+
+    param.put("page_size", 500);
+    param.put("page", page);
+    String result = HttpUtils.httpPostRequest(url, param, headers);
+    JSONObject resultJson = JSONObject.parseObject(result);
+    Integer code = resultJson.getInteger("code");
+    String message = resultJson.getString("message");
+    if (null == code || code != 0) {
+      log.error("获取快手账户操作记录表异常:{},accountId:{}", message, advertiserId);
+      log.error("入参:{}", param);
+      return;
+    }
+    JSONArray details = resultJson.getJSONObject("data").getJSONArray("details");
+
+    if (null == details || details.size() <= 0) {
+      log.error("快手账户操作记录返回详情为空,accountId:{}", advertiserId);
+      return;
+    }
+
+    List<KuaishouAccountOperationRecordList> recordList = new ArrayList();
+
+    for (Object detail : details) {
+      JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(detail));
+      KuaishouAccountOperationRecordList operationRecordList = JSONObject.toJavaObject(jsonObject, KuaishouAccountOperationRecordList.class);
+      operationRecordList.setAdvertiserId(advertiserId);
+      recordList.add(operationRecordList);
+    }
+    operationRecordMapper.replaceAdvertiserOperationRecord(recordList);
+    getOperationRecordList(accessToken,advertiserId,startDate,endDate,page+1);
+
+    log.info("快手操作记录========获取完成:accountId:{}", advertiserId);
+
+
+  }
+
+
+}

+ 60 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/OperationRecordJob.java

@@ -0,0 +1,60 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.job.kuaishou.data.service.IKuaishouAccountReportDailyService;
+import cn.com.ctop.job.kuaishou.data.service.IKuaishouAccountReportHourlyService;
+import cn.com.ctop.job.kuaishou.data.service.IOauthTokenService;
+import cn.com.ctop.job.kuaishou.data.service.IOperationRecordService;
+import cn.com.ctop.job.kuaishou.data.utils.Check;
+import cn.com.ctop.job.kuaishou.data.utils.DateUtils;
+import com.xxl.job.core.context.XxlJobHelper;
+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 java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Component
+public class OperationRecordJob {
+  @Autowired
+  private IOauthTokenService tokenService;
+
+  @Autowired
+  private IOperationRecordService operationRecordService;
+
+  private static ExecutorService dailyExecutorService = Executors.newFixedThreadPool(3);
+  private static ExecutorService hourExecutorService = Executors.newFixedThreadPool(3);
+
+  /**
+   * 快手操作记录
+   *
+   * @throws Exception
+   */
+  @XxlJob("getOperationRecordList")
+  public void accountDailyReport() throws Exception {
+    String param = XxlJobHelper.getJobParam(); // 执行参数
+    if (Check.isNull(param)) {
+      log.error("入参为空");
+      return;
+    }
+    String token = tokenService.getByAccountId(Long.valueOf(param));
+    if (Check.isNull(token)) {
+      log.error("此账户未获取到相关token,accountId:{}", param);
+      return;
+    }
+
+    String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+    String endDate = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
+    String startDate = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -2);
+    dailyExecutorService.submit(
+        new Runnable() {
+          @Override
+          public void run() {
+            operationRecordService.getOperationRecordList(token,Long.valueOf(param), startDate, endDate, 1);
+          }
+        });
+  }
+
+}