Explorar el Código

头条余额信息获取

yumeng hace 1 año
padre
commit
d6b41d7ce0

+ 15 - 19
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceController.java

@@ -2,19 +2,12 @@ package cn.com.ctop.job.bytedance.controller;
 
 import cn.com.ctop.job.bytedance.data.constant.CtopAdConstant;
 import cn.com.ctop.job.bytedance.data.entity.OauthToken;
-import cn.com.ctop.job.bytedance.data.service.IByteDanceAdvertiserDataService;
-import cn.com.ctop.job.bytedance.data.service.IBytedanceCampaignReportDailyService;
-import cn.com.ctop.job.bytedance.data.service.IBytedanceCampaignReportHourlyService;
-import cn.com.ctop.job.bytedance.data.service.IBytedanceCreativeReportDailyService;
-import cn.com.ctop.job.bytedance.data.service.IBytedanceCreativeReportHourlyService;
-import cn.com.ctop.job.bytedance.data.service.IBytedanceFileVideoGetService;
-import cn.com.ctop.job.bytedance.data.service.IBytedanceMaterialReportDailyService;
-import cn.com.ctop.job.bytedance.data.service.IBytedanceProjectService;
-import cn.com.ctop.job.bytedance.data.service.IOauthTokenService;
+import cn.com.ctop.job.bytedance.data.service.*;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.context.XxlJobHelper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -173,20 +166,23 @@ public class BytedanceController {
         fileVideoService.getFileVideoData(oauthToken, null, null, 1, 100);
     }
 
+    @Autowired
+    private IBytedanceFundService bytedanceFundService;
 
     @GetMapping(value = "/getReports")
     public void getReports() {
-        List<JSONObject> tokens = tokenService.getAgentTokens();
-        String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
-        String yesterda = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
-        String yesterda2 = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -2);
-        String yesterda3 = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -3);
-        for (JSONObject obj : tokens) {
-            advertiserDataService.getAgentReport(obj, yesterda, yesterda);
-      /*      advertiserDataService.getAgentReport(obj, yesterda2, yesterda2);
-            advertiserDataService.getAgentReport(obj, yesterda3, yesterda3);*/
-
+        String param = "1757332980444167";
+        String token = tokenService.getByAccountId(Long.valueOf(param));
+        if (Check.isNull(token)) {
+            log.error("此账户未获取到相关token,accountId:{}", param);
+            return;
         }
+        OauthToken oauthToken = new OauthToken();
+        oauthToken.setAccessToken(token);
+        oauthToken.setAccountId(Long.parseLong(param));
+
+        bytedanceFundService.getBytedanceFundInfo(oauthToken);
+
     }
 
 }

+ 1 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/constant/BytedanceConstant.java

@@ -35,4 +35,5 @@ public class BytedanceConstant {
     public static final String BYTEDANCE_V3_PROMOTION_LIST_GET = "/v3.0/promotion/list/";
 
     public static final String BYTEDANCE_V3_PROJECT_LIST_GET = "/v3.0/project/list/";
+    public static final String BYTEDANCE_FUND_GET = "https://ad.oceanengine.com/open_api/2/advertiser/fund/get/";
 }

+ 8 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceFundMapper.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 BytedanceFundMapper {
+    void replaceFundGet(@Param("data") JSONObject data);
+}

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

@@ -0,0 +1,56 @@
+<?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.BytedanceFundMapper" >
+
+
+     <insert id="replaceFundGet" parameterType="com.alibaba.fastjson.JSONObject">
+         replace
+         into bytedance_fund_get(
+        advertiser_id,
+        name,
+        email,
+        balance,
+        valid_balance,
+        cash,
+        valid_cash,
+        grant_amount,
+        default_grant,
+        common_grant,
+        search_grant,
+        union_grant,
+        valid_grant,
+        return_goods_abs,
+        valid_return_goods_abs,
+        return_goods_cost,
+        return_goods_grant,
+        compensation_grant,
+        return_goods_valid_grant,
+        compensation_valid_grant,
+        wallet_id,
+        wallet_name) values (
+         #{data.advertiser_id},
+         #{data.name},
+         #{data.email},
+         #{data.balance},
+         #{data.valid_balance},
+         #{data.cash},
+         #{data.valid_cash},
+         #{data.grant_amount},
+         #{data.default_grant},
+         #{data.common_grant},
+         #{data.search_grant},
+         #{data.union_grant},
+         #{data.valid_grant},
+         #{data.return_goods_abs},
+         #{data.valid_return_goods_abs},
+         #{data.return_goods_cost},
+         #{data.return_goods_grant},
+         #{data.compensation_grant},
+         #{data.return_goods_valid_grant},
+         #{data.compensation_valid_grant},
+         #{data.wallet_id},
+         #{data.wallet_name}
+         )
+
+     </insert>
+</mapper>

+ 7 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceFundService.java

@@ -0,0 +1,7 @@
+package cn.com.ctop.job.bytedance.data.service;
+
+import cn.com.ctop.job.bytedance.data.entity.OauthToken;
+
+public interface IBytedanceFundService {
+    void getBytedanceFundInfo(OauthToken oauthToken);
+}

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

@@ -0,0 +1,54 @@
+package cn.com.ctop.job.bytedance.data.service.impl;
+
+import cn.com.ctop.job.bytedance.data.constant.BytedanceConstant;
+import cn.com.ctop.job.bytedance.data.entity.OauthToken;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceFundMapper;
+import cn.com.ctop.job.bytedance.data.service.IBytedanceFundService;
+import cn.com.ctop.job.bytedance.data.utils.Check;
+import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class BytedanceFundServiceImpl implements IBytedanceFundService {
+    @Autowired
+    private BytedanceFundMapper bytedanceFundMapper;
+
+
+    @Override
+    public void getBytedanceFundInfo(OauthToken oauthToken) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", oauthToken.getAccountId());
+        params.put("grant_type_split", "ON");
+        String resultStr = HttpUtils.httpGetRequest(BytedanceConstant.BYTEDANCE_FUND_GET, headers, params);
+        if (!Check.isNull(resultStr)) {
+            JSONObject result = JSONObject.parseObject(resultStr);
+            if (!Check.isNull(result)) {
+                Integer code = result.getInteger("code");
+                if (code != 0) {
+                    log.error("获取余额信息失败,accountId:{},返回信息:{}", oauthToken.getAccountId(), result);
+                    return;
+                }
+                JSONObject data = result.getJSONObject("data");
+                if (!Check.isNull(data)) {
+                    BigDecimal grant = data.getBigDecimal("grant");
+                    data.put("grant_amount", grant);
+                    bytedanceFundMapper.replaceFundGet(data);
+                    log.error("余额信息入库完成,accountId:{}", oauthToken.getAccountId());
+                }
+            }
+
+        }
+
+    }
+}

+ 28 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/HttpGetWithBodyEntity.java

@@ -0,0 +1,28 @@
+package cn.com.ctop.job.bytedance.data.utils;
+
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+
+import java.net.URI;
+
+public class HttpGetWithBodyEntity extends HttpEntityEnclosingRequestBase {
+    private final static String METHOD_NAME = "GET";
+
+    @Override
+    public String getMethod() {
+        return METHOD_NAME;
+    }
+
+    public HttpGetWithBodyEntity() {
+        super();
+    }
+
+    public HttpGetWithBodyEntity(final URI uri) {
+        super();
+        setURI(uri);
+    }
+
+    HttpGetWithBodyEntity(final String uri) {
+        super();
+        setURI(URI.create(uri));
+    }
+}

+ 27 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/HttpUtils.java

@@ -38,6 +38,7 @@ import java.nio.charset.Charset;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 @Slf4j
@@ -171,6 +172,32 @@ public class HttpUtils {
     }
 
 
+    public static String httpGetRequest(String url, Map<String, String> headers, JSONObject params) {
+        HttpClient httpClient = createSslClientDefault();
+        String strReturn = "";
+        try {
+            HttpGetWithBodyEntity httpGet = new HttpGetWithBodyEntity(url);
+            if (headers != null) {
+                Iterator<String> keyIter = headers.keySet().iterator();
+                while (keyIter.hasNext()) {
+                    String curKey = keyIter.next();
+                    if (curKey != null && headers.get(curKey) != null) {
+                        httpGet.addHeader(curKey, headers.get(curKey));
+                    }
+                }
+            }
+            httpGet.setEntity(new StringEntity(params.toJSONString(), Charset.forName("UTF-8")));
+            HttpEntity respentity;
+            HttpResponse response = httpClient.execute(httpGet);
+            respentity = response.getEntity();
+            strReturn = EntityUtils.toString(respentity);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+        return strReturn;
+    }
+
     public static HttpClient getHttpclient() {
         RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(180000).setConnectTimeout(30000)
                 .setConnectionRequestTimeout(30000).setStaleConnectionCheckEnabled(true).build();

+ 52 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceFundJob.java

@@ -0,0 +1,52 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.job.bytedance.data.constant.CtopAdConstant;
+import cn.com.ctop.job.bytedance.data.entity.OauthToken;
+import cn.com.ctop.job.bytedance.data.service.IBytedanceFundService;
+import cn.com.ctop.job.bytedance.data.service.IOauthTokenService;
+import cn.com.ctop.job.bytedance.data.utils.Check;
+import cn.com.ctop.job.bytedance.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 BytedanceFundJob {
+    @Autowired
+    private IOauthTokenService tokenService;
+    @Autowired
+    private IBytedanceFundService bytedanceFundService;
+    private static ExecutorService fundGetExecutorService = Executors.newFixedThreadPool(2);
+
+    @XxlJob("fundGet")
+    public void bytedanceAdvertiserDailyReport() 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;
+        }
+        OauthToken oauthToken = new OauthToken();
+        oauthToken.setAccessToken(token);
+        oauthToken.setAccountId(Long.parseLong(param));
+        fundGetExecutorService.submit(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        bytedanceFundService.getBytedanceFundInfo(oauthToken);
+                    }
+                });
+    }
+
+
+}