فهرست منبع

添加头条账户流水接口对接

syh 5 سال پیش
والد
کامیت
a3cd1e79a8

+ 164 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BytedanceFundDailyController.java

@@ -0,0 +1,164 @@
+package org.jeecg.modules.ctop.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.ctop.entity.BytedanceFundDaily;
+import org.jeecg.modules.ctop.service.IBytedanceFundDailyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+/**
+ * 账号日流水信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-04-08
+ */
+@Slf4j
+@Api(tags = "账号日流水信息")
+@RestController
+@RequestMapping("/ctop/bytedanceFundDaily")
+public class BytedanceFundDailyController {
+    @Autowired
+    private IBytedanceFundDailyService bytedanceFundDailyService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param bytedanceFundDaily
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "账号日流水信息-分页列表查询")
+    @ApiOperation(value = "账号日流水信息-分页列表查询", notes = "账号日流水信息-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<BytedanceFundDaily>> queryPageList(BytedanceFundDaily bytedanceFundDaily,
+                                                           @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                           HttpServletRequest req) {
+        Result<IPage<BytedanceFundDaily>> result = new Result<IPage<BytedanceFundDaily>>();
+        QueryWrapper<BytedanceFundDaily> queryWrapper = QueryGenerator.initQueryWrapper(bytedanceFundDaily, req.getParameterMap());
+        Page<BytedanceFundDaily> page = new Page<BytedanceFundDaily>(pageNo, pageSize);
+        IPage<BytedanceFundDaily> pageList = bytedanceFundDailyService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param bytedanceFundDaily
+     * @return
+     */
+    @AutoLog(value = "账号日流水信息-添加")
+    @ApiOperation(value = "账号日流水信息-添加", notes = "账号日流水信息-添加")
+    @PostMapping(value = "/add")
+    public Result<BytedanceFundDaily> add(@RequestBody BytedanceFundDaily bytedanceFundDaily) {
+        Result<BytedanceFundDaily> result = new Result<BytedanceFundDaily>();
+        try {
+            bytedanceFundDailyService.save(bytedanceFundDaily);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param bytedanceFundDaily
+     * @return
+     */
+    @AutoLog(value = "账号日流水信息-编辑")
+    @ApiOperation(value = "账号日流水信息-编辑", notes = "账号日流水信息-编辑")
+    @PutMapping(value = "/edit")
+    public Result<BytedanceFundDaily> edit(@RequestBody BytedanceFundDaily bytedanceFundDaily) {
+        Result<BytedanceFundDaily> result = new Result<BytedanceFundDaily>();
+        BytedanceFundDaily bytedanceFundDailyEntity = bytedanceFundDailyService.getById(bytedanceFundDaily.getId());
+        if (bytedanceFundDailyEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = bytedanceFundDailyService.updateById(bytedanceFundDaily);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "账号日流水信息-通过id删除")
+    @ApiOperation(value = "账号日流水信息-通过id删除", notes = "账号日流水信息-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            bytedanceFundDailyService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "账号日流水信息-批量删除")
+    @ApiOperation(value = "账号日流水信息-批量删除", notes = "账号日流水信息-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<BytedanceFundDaily> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<BytedanceFundDaily> result = new Result<BytedanceFundDaily>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.bytedanceFundDailyService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "账号日流水信息-通过id查询")
+    @ApiOperation(value = "账号日流水信息-通过id查询", notes = "账号日流水信息-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<BytedanceFundDaily> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<BytedanceFundDaily> result = new Result<BytedanceFundDaily>();
+        BytedanceFundDaily bytedanceFundDaily = bytedanceFundDailyService.getById(id);
+        if (bytedanceFundDaily == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(bytedanceFundDaily);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+}

+ 135 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/BytedanceFundDaily.java

@@ -0,0 +1,135 @@
+package org.jeecg.modules.ctop.entity;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * 账号日流水信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-04-08
+ */
+@Data
+@TableName("ctop_bytedance_fund_daily")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_bytedance_fund_daily对象", description = "账号日流水信息")
+public class BytedanceFundDaily {
+
+    /**
+     * id
+     */
+    @TableId
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 广告主id
+     */
+    @Excel(name = "广告主id", width = 15)
+    @ApiModelProperty(value = "广告主id")
+    private Long advertiserId;
+    /**
+     * 日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "日期")
+    private String date;
+    /**
+     * 日终结于
+     */
+    @Excel(name = "日终结余", width = 15)
+    @ApiModelProperty(value = "日终结于")
+    private java.math.BigDecimal balance;
+    /**
+     * 现金支出
+     */
+    @Excel(name = "现金支出", width = 15)
+    @ApiModelProperty(value = "现金支出")
+    private java.math.BigDecimal cashCost;
+    /**
+     * 总支出
+     */
+    @Excel(name = "总支出", width = 15)
+    @ApiModelProperty(value = "总支出")
+    private java.math.BigDecimal cost;
+    /**
+     * 冻结
+     */
+    @Excel(name = "冻结", width = 15)
+    @ApiModelProperty(value = "冻结")
+    private java.math.BigDecimal frozen;
+    /**
+     * 总存入
+     */
+    @Excel(name = "总存入", width = 15)
+    @ApiModelProperty(value = "总存入")
+    private java.math.BigDecimal income;
+    /**
+     * 赠款支出
+     */
+    @Excel(name = "赠款支出", width = 15)
+    @ApiModelProperty(value = "赠款支出")
+    private java.math.BigDecimal rewardCost;
+    /**
+     * 返货支出
+     */
+    @Excel(name = "返货支出", width = 15)
+    @ApiModelProperty(value = "返货支出")
+    private java.math.BigDecimal returnGoodsCos;
+    /**
+     * 总转入
+     */
+    @Excel(name = "总转入", width = 15)
+    @ApiModelProperty(value = "总转入")
+    private java.math.BigDecimal transferIn;
+    /**
+     * 总转出
+     */
+    @Excel(name = "总转出", width = 15)
+    @ApiModelProperty(value = "总转出")
+    private java.math.BigDecimal transferOut;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    public BytedanceFundDaily(JSONObject data, CtopOauthToken token) {
+        System.out.println(data.toJSONString());
+        this.advertiserId = token.getAccountId();
+        this.date = data.getString("date");
+        this.id = this.advertiserId + "_" + this.date;
+        this.balance = data.getBigDecimal("balance");
+        this.cashCost = data.getBigDecimal("cash_cost");
+        this.cost = data.getBigDecimal("cost");
+        this.frozen = data.getBigDecimal("frozen");
+        this.income = data.getBigDecimal("income");
+        this.rewardCost = data.getBigDecimal("reward_cost");
+        this.returnGoodsCos = data.getBigDecimal("return_goods_cost");
+        this.transferIn = data.getBigDecimal("transfer_in");
+        this.transferOut = data.getBigDecimal("transfer_out");
+        this.createTime = new Date();
+        this.updateTime = new Date();
+    }
+
+    public BytedanceFundDaily() {
+        this.createTime = new Date();
+        this.updateTime = new Date();
+    }
+}

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/BytedanceFundDailyMapper.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.ctop.entity.BytedanceFundDaily;
+
+/**
+ * 账号日流水信息
+ *
+ * @author: jeecg-boot
+ * @date: 2020-04-08
+ * @cersion: V1.0
+ */
+public interface BytedanceFundDailyMapper extends BaseMapper<BytedanceFundDaily> {
+
+}

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/BytedanceFundDailyMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.ctop.mapper.BytedanceFundDailyMapper">
+
+</mapper>

+ 16 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IBytedanceFundDailyService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.ctop.service;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.BytedanceFundDaily;
+
+/**
+ * 账号日流水信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-04-08
+ */
+public interface IBytedanceFundDailyService extends IService<BytedanceFundDaily> {
+    void loadFundDataByPage(CtopOauthToken token, String startDate, String endDate, Integer pageNum);
+}

+ 60 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BytedanceFundDailyServiceImpl.java

@@ -0,0 +1,60 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import lombok.var;
+import org.jeecg.modules.ctop.entity.BytedanceFundDaily;
+import org.jeecg.modules.ctop.mapper.BytedanceFundDailyMapper;
+import org.jeecg.modules.ctop.service.IBytedanceFundDailyService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 账号日流水信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-04-08
+ */
+@Slf4j
+@Service
+public class BytedanceFundDailyServiceImpl extends ServiceImpl<BytedanceFundDailyMapper, BytedanceFundDaily> implements IBytedanceFundDailyService {
+    @Override
+    public void loadFundDataByPage(CtopOauthToken token, String startDate, String endDate, Integer pageNum) {
+        Integer pageSize = 100;
+        JSONObject result = getAdvertiserFundDailyStat(token, startDate, endDate, pageNum, pageSize);
+        System.out.println(result);
+        var code = result.getInteger("code");
+        var message = result.getString("message");
+        if (null == code || code != 0) {
+            log.error("账号日流水数据获取异常:{};accountId:{}", message, token.getAccountId());
+            return;
+        }
+        JSONArray dataArray = result.getJSONObject("data").getJSONArray("list");
+        if (null == dataArray || dataArray.size() <= 0) {
+            return;
+        }
+        for (var i = 0; i < dataArray.size(); i++) {
+            var data = dataArray.getJSONObject(i);
+            var fundDaily = new BytedanceFundDaily(data, token);
+            this.saveOrUpdate(fundDaily);
+        }
+        loadFundDataByPage(token, startDate, endDate, pageNum + 1);
+    }
+
+    public static JSONObject getAdvertiserFundDailyStat(CtopOauthToken token, String startDate, String endDate, Integer pageNum, Integer pageSize) {
+        // 请求地址
+        String url = "https://ad.oceanengine.com/open_api/2/advertiser/fund/daily_stat/";
+        // 请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", token.getAccountId());
+        params.put("start_date", startDate);
+        params.put("end_date", endDate);
+        params.put("page", pageNum);
+        params.put("page_size", pageSize);
+        return HttpUtils.bytedanceGetRequest(token.getAccessToken(), url, params);
+    }
+}

+ 11 - 13
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -5,16 +5,15 @@ import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.service.IUserAllocationService;
-import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.common.module.utils.HttpUtils;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouCreativeService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouHistoryReportTaskService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
-import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.ctop.service.IBytedanceFundDailyService;
 import org.jeecg.modules.ctop.service.IPerformanceSaleService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -23,6 +22,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -134,26 +134,24 @@ public class SampleTest {
     private static CountDownLatch countDownLatch = null;
 
     @Autowired
-    private IKuaishouWebInterfaceService kuaishouWebInterfaceService;
+    private IBytedanceFundDailyService fundDailyService;
     @Test
     public void testLoadJob() {
-//        try {
-//            kuaishouWebInterfaceService.adkuaishouWebLogin("18606113995", "SsjX666!@");
-//            kuaishouWebInterfaceService.deleteAllComment(new HashMap<>());
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
-
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        String endDate = "2020-04-07";
+        String startDate = "2019-09-01";
+        CtopOauthToken token = tokenService.getTokenByAccountId(1654676647522317L);
+//        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        List<CtopOauthToken> tokens = new ArrayList<>();
+        tokens.add(token);
         if (null != tokens && tokens.size() > 0) {
             countDownLatch = new CountDownLatch(tokens.size());
-            tokens.forEach(token -> {
+            tokens.forEach(getToken -> {
                 //拉取往期数据
                 executorService.submit(new Runnable() {
                     @Override
                     public void run() {
                         try {
-                            reportService.loadBytedanceHistoryData(token);
+                            fundDailyService.loadFundDataByPage(getToken, startDate, endDate, 1);
                             countDownLatch.countDown();
                         } catch (Exception e) {
                             e.printStackTrace();