|
@@ -1,340 +0,0 @@
|
|
|
-
|
|
|
-package cn.com.ctop.toutiao.modules.agent.service.impl;
|
|
|
-
|
|
|
-import cn.com.ctop.common.module.entity.CtopOauthToken;
|
|
|
-import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
|
|
|
-import cn.com.ctop.toutiao.modules.agent.entity.TransactionDetails;
|
|
|
-import cn.com.ctop.toutiao.modules.agent.mapper.CtopAccountTransactionDetailsMapper;
|
|
|
-import cn.com.ctop.toutiao.modules.agent.mapper.CtopAgentAccountMapper;
|
|
|
-import cn.com.ctop.toutiao.modules.agent.service.AgentManagementService;
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.http.client.ClientProtocolException;
|
|
|
-import org.apache.http.client.methods.CloseableHttpResponse;
|
|
|
-import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
|
|
|
-import org.apache.http.entity.ContentType;
|
|
|
-import org.apache.http.entity.StringEntity;
|
|
|
-import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
-import org.apache.http.impl.client.HttpClientBuilder;
|
|
|
-import org.jeecg.common.api.vo.Result;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-import java.io.BufferedReader;
|
|
|
-import java.io.IOException;
|
|
|
-import java.io.InputStreamReader;
|
|
|
-import java.net.URI;
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
-import static java.util.stream.Collectors.toList;
|
|
|
-
|
|
|
-/**
|
|
|
- * 代理商管理
|
|
|
- *
|
|
|
- * @author zzy
|
|
|
- * @create: 2021-07-14
|
|
|
- */
|
|
|
-@Service
|
|
|
-@Slf4j
|
|
|
-public class AgentManagementServiceImpl implements AgentManagementService {
|
|
|
-
|
|
|
- private final String OPEN_API_URL_PREFIX = "https://ad.oceanengine.com/open_api/2/";
|
|
|
- private final String ACCOUNT_LIST_URL = "agent/advertiser/select/";
|
|
|
- private final String ACCOUNT_TRANSACTION_DETAILS_URL = "advertiser/fund/transaction/get/";
|
|
|
- private final String ADVERTISER_ID = "73970348172";
|
|
|
- private final String RECHARGE = "RECHARGE";
|
|
|
- private final String TRANSFER = "TRANSFER";
|
|
|
- @Resource
|
|
|
- CtopOauthTokenMapper ctopOauthTokenMapper;
|
|
|
-
|
|
|
- @Resource
|
|
|
- CtopAgentAccountMapper ctopAgentAccountMapper;
|
|
|
- @Resource
|
|
|
- CtopAccountTransactionDetailsMapper ctopAccountTransactionDetailsMapper;
|
|
|
-
|
|
|
- /**
|
|
|
- * 同步代理商下账号
|
|
|
- *
|
|
|
- * @author zzy
|
|
|
- * @create: 2021-07-14
|
|
|
- */
|
|
|
-
|
|
|
- @Override
|
|
|
- public Result synchronousAccount() {
|
|
|
- log.info("开始同步账号信息");
|
|
|
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
|
|
|
- List<String> dataList = new ArrayList();
|
|
|
- Result result = new Result();
|
|
|
- try {
|
|
|
- //分页查询第一页数据
|
|
|
- JSONObject agentAccountList = selectAgentAdvertiser(1, 2000);
|
|
|
- JSONObject data = (JSONObject) agentAccountList.get("data");
|
|
|
- if (data.size() > 0) {
|
|
|
- JSONObject page_info = (JSONObject) data.get("page_info");
|
|
|
- int total_page = (int) page_info.get("total_page");
|
|
|
- //查询其他页数据
|
|
|
- for (int i = 0; i < total_page; i++) {
|
|
|
- JSONObject agenttList = selectAgentAdvertiser(i + 1, 2000);
|
|
|
- JSONObject agentData = (JSONObject) agenttList.get("data");
|
|
|
- List<Long> list = (List<Long>) agentData.get("list");
|
|
|
- list.stream().forEach(str -> {
|
|
|
- dataList.add(str.toString());
|
|
|
- });
|
|
|
-
|
|
|
- }
|
|
|
- //查询数据库已存在id
|
|
|
- List<String> accountIdList = ctopAgentAccountMapper.getAllAccountId();
|
|
|
- if (!accountIdList.isEmpty()) {
|
|
|
- //筛选巨量引擎剔除的用户
|
|
|
- List<String> removeList = accountIdList.stream().filter(item -> !dataList.contains(item)).collect(toList());
|
|
|
- //筛选巨量引擎新增的用户
|
|
|
- List<String> addList = dataList.stream().filter(item -> !accountIdList.contains(item)).collect(toList());
|
|
|
- //修改剔除的用户状态
|
|
|
- if (!removeList.isEmpty()) {
|
|
|
- ctopAgentAccountMapper.updateAccountState(removeList, 1);
|
|
|
- }
|
|
|
- //保存新增的用户
|
|
|
- if (!addList.isEmpty()) {
|
|
|
- ctopAgentAccountMapper.insertAccountData(addList, ADVERTISER_ID, df.format(new Date()));
|
|
|
- }
|
|
|
- } else {
|
|
|
- ctopAgentAccountMapper.insertAccountData(dataList, ADVERTISER_ID, df.format(new Date()));
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- result.setSuccess(true);
|
|
|
- result.setMessage("success");
|
|
|
- return result;
|
|
|
- } catch (Exception e) {
|
|
|
- log.info("同步失败:{}", e.toString());
|
|
|
- result.error500("同步失败");
|
|
|
- return result;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 同步账户交易流水
|
|
|
- *
|
|
|
- * @author zzy
|
|
|
- * @create: 2021-07-15
|
|
|
- */
|
|
|
- @Override
|
|
|
- public Result synchronousAccountTransactionDetails() {
|
|
|
- log.info("开始同步账号交易流水");
|
|
|
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
|
|
|
- List<TransactionDetails> transactionDetailsList = new ArrayList<>();
|
|
|
- try {
|
|
|
- List<String> accountIdList = ctopAgentAccountMapper.getAllAccountId();
|
|
|
- if (!accountIdList.isEmpty()) {
|
|
|
- List<String> transactionSeqList = ctopAccountTransactionDetailsMapper.getTransactionSeq(df.format(new Date()));
|
|
|
- accountIdList.stream().forEach(str -> {
|
|
|
- if (!str.isEmpty()) {
|
|
|
- //查询账号下充值的交易流水
|
|
|
- JSONObject jsonObject = queryAccountTransactionDetails(str, RECHARGE, 1, 1000);
|
|
|
- JSONObject data = (JSONObject) jsonObject.get("data");
|
|
|
- List<Object> dataList = (List<Object>) data.get("list");
|
|
|
- if (!dataList.isEmpty()) {
|
|
|
- //充值类存在记录
|
|
|
- //保存第一页数据
|
|
|
- dataList.stream().forEach(ob -> {
|
|
|
- TransactionDetails transactionDetails = JSONObject.toJavaObject((JSON) ob, TransactionDetails.class);
|
|
|
- //订单号不存在
|
|
|
- if (transactionSeqList.isEmpty() || !transactionSeqList.contains(transactionDetails.getTransaction_seq())) {
|
|
|
- transactionDetailsList.add(transactionDetails);
|
|
|
- }
|
|
|
-
|
|
|
- });
|
|
|
- JSONObject page_info = (JSONObject) data.get("page_info");
|
|
|
- int total_page = (int) page_info.get("total_page");
|
|
|
- //查询其他页数据
|
|
|
- if (total_page > 1) {
|
|
|
- for (int i = 2; i <= total_page; i++) {
|
|
|
- JSONObject jo = queryAccountTransactionDetails(str, RECHARGE, i, 1000);
|
|
|
- JSONObject accountData = (JSONObject) jo.get("data");
|
|
|
- List<Object> rechargeList = (List<Object>) accountData.get("list");
|
|
|
- rechargeList.stream().forEach(transactionDetails -> {
|
|
|
- TransactionDetails transactionDetailsOther = JSONObject.toJavaObject((JSON) transactionDetails, TransactionDetails.class);
|
|
|
- //订单号不存在
|
|
|
- if (transactionSeqList.isEmpty() || !transactionSeqList.contains(transactionDetailsOther.getTransaction_seq())) {
|
|
|
- transactionDetailsList.add(transactionDetailsOther);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //查询账号下转账的交易流水
|
|
|
- JSONObject transferJsonObject = queryAccountTransactionDetails(str, TRANSFER, 1, 1000);
|
|
|
- JSONObject transferData = (JSONObject) transferJsonObject.get("data");
|
|
|
- List<Object> transferDataList = (List<Object>) transferData.get("list");
|
|
|
- if (!transferDataList.isEmpty()) {
|
|
|
- //转账类存在记录
|
|
|
- //保存第一页数据
|
|
|
- transferDataList.stream().forEach(ob -> {
|
|
|
- TransactionDetails transactionDetails = JSONObject.toJavaObject((JSON) ob, TransactionDetails.class);
|
|
|
- //订单号不存在
|
|
|
- if (transactionSeqList.isEmpty() || !transactionSeqList.contains(transactionDetails.getTransaction_seq())) {
|
|
|
- transactionDetailsList.add(transactionDetails);
|
|
|
- }
|
|
|
- });
|
|
|
- JSONObject transferPageInfo = (JSONObject) transferData.get("page_info");
|
|
|
- int transferTotalPage = (int) transferPageInfo.get("total_page");
|
|
|
- //查询其他页数据
|
|
|
- if (transferTotalPage > 1) {
|
|
|
- for (int i = 2; i <= transferTotalPage; i++) {
|
|
|
- JSONObject jo = queryAccountTransactionDetails(str, TRANSFER, i, 1000);
|
|
|
- JSONObject accountData = (JSONObject) jo.get("data");
|
|
|
- List<Object> rechargeList = (List<Object>) accountData.get("list");
|
|
|
- rechargeList.stream().forEach(transactionDetails -> {
|
|
|
- TransactionDetails transactionDetailsOther = JSONObject.toJavaObject((JSON) transactionDetails, TransactionDetails.class);
|
|
|
- //订单号不存在
|
|
|
- if (transactionSeqList.isEmpty() || !transactionSeqList.contains(transactionDetailsOther.getTransaction_seq())) {
|
|
|
- transactionDetailsList.add(transactionDetailsOther);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- //保存数据
|
|
|
- if (!transactionDetailsList.isEmpty()) {
|
|
|
- ctopAccountTransactionDetailsMapper.saveAccountTransactionDetails(transactionDetailsList, df.format(new Date()));
|
|
|
- log.info("新增交易记录:{}条", transactionDetailsList.size());
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- log.info("同步失败:{}", e.toString());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 查询账号流水
|
|
|
- *
|
|
|
- * @return
|
|
|
- * @author zzy
|
|
|
- * @Param AccountId 账户id transaction_type 流水类型 RECHARGE:充值 TRANSFER:转账 pageNum 当前页 pageSize 每页显示数量
|
|
|
- * @create: 2021-07-14
|
|
|
- */
|
|
|
- @Override
|
|
|
- public JSONObject queryAccountTransactionDetails(String AccountId, String transaction_type, int pageNum, int pageSize) {
|
|
|
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
|
|
|
- Calendar ca = Calendar.getInstance();
|
|
|
- ca.setTime(new Date());
|
|
|
- ca.add(Calendar.DATE, -1);
|
|
|
- // 请求参数
|
|
|
- Map data = new HashMap() {
|
|
|
- {
|
|
|
- put("advertiser_id", AccountId);
|
|
|
- put("start_date", df.format(ca.getTime()));
|
|
|
- put("end_date", df.format(ca.getTime()));
|
|
|
- put("transaction_type", transaction_type);
|
|
|
- put("page", pageNum);
|
|
|
- put("page_size", pageSize);
|
|
|
- }
|
|
|
- };
|
|
|
- return sendHttpRequest(data, ACCOUNT_TRANSACTION_DETAILS_URL);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取token
|
|
|
- *
|
|
|
- * @author zzy
|
|
|
- * @create: 2021-07-14
|
|
|
- */
|
|
|
- @Override
|
|
|
- public String getToken() {
|
|
|
- CtopOauthToken ctopOauthToken = ctopOauthTokenMapper.selectByAccountId(Long.parseLong(ADVERTISER_ID));
|
|
|
- if (ctopOauthToken != null) {
|
|
|
- return ctopOauthToken.getAccessToken();
|
|
|
- } else {
|
|
|
- log.info("未查询到Token");
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取账户列表
|
|
|
- *
|
|
|
- * @author zzy
|
|
|
- * @Param pageNum 当前页 pageSize 每页显示数量
|
|
|
- * @create: 2021-07-14
|
|
|
- */
|
|
|
- @Override
|
|
|
- public JSONObject selectAgentAdvertiser(int pageNum, int pageSize) {
|
|
|
- // 请求参数
|
|
|
- Map data = new HashMap() {
|
|
|
- {
|
|
|
- put("advertiser_id", ADVERTISER_ID);
|
|
|
- put("page", pageNum);
|
|
|
- put("page_size", pageSize);
|
|
|
- }
|
|
|
- };
|
|
|
- return sendHttpRequest(data, ACCOUNT_LIST_URL);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据地址请求巨量殷勤,返回响应结果
|
|
|
- *
|
|
|
- * @author zzy
|
|
|
- * @Param data 请求参数 apiUrl请求路径
|
|
|
- * @create: 2021-07-14
|
|
|
- */
|
|
|
- public JSONObject sendHttpRequest(Map data, String apiUrl) {
|
|
|
- String access_token = getToken();
|
|
|
- // 构造请求
|
|
|
- HttpEntityEnclosingRequestBase httpEntity = new HttpEntityEnclosingRequestBase() {
|
|
|
- @Override
|
|
|
- public String getMethod() {
|
|
|
- return "GET";
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- httpEntity.setHeader("Access-Token", access_token);
|
|
|
-
|
|
|
- CloseableHttpResponse response = null;
|
|
|
- CloseableHttpClient client = null;
|
|
|
-
|
|
|
- try {
|
|
|
- client = HttpClientBuilder.create().build();
|
|
|
- httpEntity.setURI(URI.create(OPEN_API_URL_PREFIX + apiUrl));
|
|
|
- httpEntity.setEntity(new StringEntity(JSONObject.toJSONString(data), ContentType.APPLICATION_JSON));
|
|
|
-
|
|
|
- response = client.execute(httpEntity);
|
|
|
- if (response != null && response.getStatusLine().getStatusCode() == 200) {
|
|
|
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
|
|
|
- StringBuffer result = new StringBuffer();
|
|
|
- String line = "";
|
|
|
- while ((line = bufferedReader.readLine()) != null) {
|
|
|
- result.append(line);
|
|
|
- }
|
|
|
- bufferedReader.close();
|
|
|
- return JSONObject.parseObject(result.toString());
|
|
|
- }
|
|
|
-
|
|
|
- } catch (ClientProtocolException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } finally {
|
|
|
- try {
|
|
|
- if (response != null) {
|
|
|
- response.close();
|
|
|
- }
|
|
|
- client.close();
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
-}
|