Prechádzať zdrojové kódy

添加同步账户日流水接口

zhouzeyu@c-top.com.cn 3 rokov pred
rodič
commit
466e7eef00

+ 22 - 9
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/controller/AgentManagementController.java

@@ -1,18 +1,13 @@
-package cn.com.ctop.toutiao.modules.agent.controller;
+package org.jeecg.ctop.finance.agent.controller;
+
 
-import cn.com.ctop.toutiao.modules.agent.service.AgentManagementService;
-import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.ctop.finance.agent.service.AgentManagementService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
 @RestController
 @RequestMapping("/agent")
 @Slf4j
@@ -22,9 +17,27 @@ public class AgentManagementController {
     AgentManagementService agentManagementService;
 
     @RequestMapping("/queryAccountTransactionDetails")
-    public void  getList(){
+    public void getList() {
         Result recharge = agentManagementService.synchronousAccountTransactionDetails();
         log.info("123");
 
     }
+
+    @RequestMapping("/synchronousAccount")
+    public void synchronousAccount() {
+        Result recharge = agentManagementService.synchronousAccount();
+        log.info("123");
+
+    }
+
+
+    @RequestMapping("/synchronousAccountTransactionDay")
+    public void synchronousAccountTransactionDay() {
+        Result recharge = agentManagementService.synchronousAccountTransactionDay();
+        log.info("123");
+
+    }
+
+
+
 }

+ 1 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/entity/TransactionDetails.java

@@ -1,4 +1,4 @@
-package cn.com.ctop.toutiao.modules.agent.entity;
+package org.jeecg.ctop.finance.agent.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;

+ 5 - 4
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/mapper/CtopAccountTransactionDetailsMapper.java

@@ -1,15 +1,16 @@
-package cn.com.ctop.toutiao.modules.agent.mapper;
+package org.jeecg.ctop.finance.agent.mapper;
 
-import cn.com.ctop.toutiao.modules.agent.entity.TransactionDetails;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.ctop.finance.agent.entity.TransactionDetails;
 
 import java.util.List;
 
 @Mapper
 public interface CtopAccountTransactionDetailsMapper {
     //保存交易记录
-    public void saveAccountTransactionDetails(@Param("list") List<TransactionDetails> list, @Param("date")String date);
+    public void saveAccountTransactionDetails(@Param("list") List<TransactionDetails> list, @Param("date") String date);
+
     //根据日期查询当日所有交易订单号
-    public List<String> getTransactionSeq( @Param("date")String date);
+    public List<String> getTransactionSeq(@Param("date") String date);
 }

+ 24 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/agent/mapper/CtopAgentAccountMapper.java

@@ -0,0 +1,24 @@
+package org.jeecg.ctop.finance.agent.mapper;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface CtopAgentAccountMapper {
+    //获取所有账户
+    public List<String> getAllAccountId();
+    //根据账户id修改账户状态
+    public void updateAccountState(@Param("list") List<String> list, @Param("state") int state);
+    //批量插入新增数据
+    public void insertAccountData(@Param("list") List<String> list, @Param("agent_id") String agent_id, @Param("create_time") String create_time);
+    /**
+     * 根据accountId查询
+     *
+     * @param accountId
+     * @return
+     */
+    CtopOauthToken selectByAccountId(Long accountId);
+}

+ 2 - 2
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/mapper/xml/CtopAccountTransactionDetailsMapper.xml

@@ -1,6 +1,6 @@
 <?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.toutiao.modules.agent.mapper.CtopAccountTransactionDetailsMapper">
+<mapper namespace="org.jeecg.ctop.finance.agent.mapper.CtopAccountTransactionDetailsMapper">
    <!-- 批量插入新增数据-->
     <insert id="saveAccountTransactionDetails">
         insert  into ctop_account_transaction_details (advertiser_id,transaction_type,data_time,amount,cash,grant_amount,return_goods,transaction_seq,
@@ -24,7 +24,7 @@
     </insert>
 
     <select id="getTransactionSeq" parameterType="String" resultType="String">
-        select t.transaction_seq from ctop_account_transaction_details t where t.create_time=#{date}
+        select t.transaction_seq from ctop_account_transaction_details t
     </select>
 
 </mapper>

+ 55 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/agent/mapper/xml/CtopAgentAccountMapper.xml

@@ -0,0 +1,55 @@
+<?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.ctop.finance.agent.mapper.CtopAgentAccountMapper">
+    <resultMap id="BaseResultMap" type="cn.com.ctop.common.module.entity.CtopOauthToken">
+        <result column="id" property="id" jdbcType="BIGINT"/>
+        <result column="media_id" property="mediaId" jdbcType="VARCHAR"/>
+        <result column="advertiser_id" property="advertiserId" jdbcType="VARCHAR"/>
+        <result column="account_id" property="accountId" jdbcType="BIGINT"/>
+        <result column="access_token" property="accessToken" jdbcType="VARCHAR"/>
+        <result column="refresh_token" property="refreshToken" jdbcType="VARCHAR"/>
+        <result column="access_token_expires_in" property="accessTokenExpiresIn" jdbcType="TIMESTAMP"/>
+        <result column="refresh_token_expires_in" property="refreshTokenExpiresIn" jdbcType="TIMESTAMP"/>
+        <result column="agent_type" property="agentType" jdbcType="INTEGER"/>
+        <result column="app_id" property="appId" jdbcType="BIGINT"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,media_id,advertiser_id,account_id,access_token,refresh_token,access_token_expires_in,refresh_token_expires_in,agent_type,app_id,create_time,update_time
+   </sql>
+    <!--获取所有账户-->
+    <select id="getAllAccountId" resultType="String">
+        select account_id from ctop_agent_account where state=0
+    </select>
+   <!-- 根据账户id修改账户状态-->
+    <update id="updateAccountState">
+        update ctop_agent_account set state=#{state} where account_id in
+        <foreach item="item" index="index" collection="list" open="("  close=")" separator=",">
+            #{item}
+        </foreach>
+    </update>
+   <!-- 批量插入新增数据-->
+    <insert id="insertAccountData">
+        insert  into ctop_agent_account (account_id,agent_id,state,create_time) values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (
+            #{item},
+            #{agent_id},
+            0,
+            #{create_time}
+            )
+        </foreach>
+    </insert>
+
+    <select id="selectByAccountId" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from ctop_oauth_token
+        where account_id = #{accountId}
+        order by create_time desc
+        limit 1
+    </select>
+
+</mapper>

+ 9 - 3
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/service/AgentManagementService.java

@@ -1,4 +1,4 @@
-package cn.com.ctop.toutiao.modules.agent.service;
+package org.jeecg.ctop.finance.agent.service;
 
 import com.alibaba.fastjson.JSONObject;
 import org.jeecg.common.api.vo.Result;
@@ -8,15 +8,21 @@ public interface AgentManagementService {
     public String getToken();
 
     //查询代理商下账户
-    public  JSONObject selectAgentAdvertiser(int pageNum,int pageSize);
+    public  JSONObject selectAgentAdvertiser(int pageNum, int pageSize);
 
 
     //查询账号流水
-    public JSONObject queryAccountTransactionDetails(String AccountId,String transaction_type, int pageNum, int pageSize);
+    public JSONObject queryAccountTransactionDetails(String AccountId, String transaction_type, int pageNum, int pageSize);
+
+    //查询账号流水
+    public JSONObject queryAccountTransactionDay(String AccountId, int pageNum, int pageSize);
 
     //同步代理商账户入库
     public Result synchronousAccount();
 
     //同步账户交易流水
     public Result synchronousAccountTransactionDetails();
+
+    //同步账户日流水
+    public Result synchronousAccountTransactionDay();
 }

+ 458 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/agent/service/impl/AgentManagementServiceImpl.java

@@ -0,0 +1,458 @@
+package org.jeecg.ctop.finance.agent.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
+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.jeecg.ctop.finance.agent.entity.TransactionDay;
+import org.jeecg.ctop.finance.agent.entity.TransactionDetails;
+import org.jeecg.ctop.finance.agent.mapper.CtopAccountTransactionDayMapper;
+import org.jeecg.ctop.finance.agent.mapper.CtopAccountTransactionDetailsMapper;
+import org.jeecg.ctop.finance.agent.mapper.CtopAgentAccountMapper;
+import org.jeecg.ctop.finance.agent.service.AgentManagementService;
+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 ACCOUNT_TRANSACTION_DAY_URL = "advertiser/fund/daily_stat/";
+    private final String ADVERTISER_ID = "73970348172";
+    private final String RECHARGE = "RECHARGE";
+    private final String TRANSFER = "TRANSFER";
+
+    @Resource
+    CtopAgentAccountMapper ctopAgentAccountMapper;
+    @Resource
+    CtopAccountTransactionDetailsMapper ctopAccountTransactionDetailsMapper;
+
+    @Resource
+    CtopAccountTransactionDayMapper ctopAccountTransactionDayMapper;
+
+    /**
+     * 同步代理商下账号
+     *
+     * @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");
+            //dataList.addAll((List) data.get("list"));
+            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("开始同步账号交易流水");
+        Result result = new Result();
+        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");
+                        if(data!=null){
+                            List<Object> dataList = (List<Object>) data.get("list");
+                            if (dataList!=null&&!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");
+                        if(transferData!=null){
+                            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());
+            }
+            result.setSuccess(true);
+            result.setMessage("success");
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+            result.setMessage("error");
+            log.info("同步失败:{}", e.toString());
+        }
+
+
+        return result;
+    }
+    /**
+     * 同步账户日流水
+     *
+     * @author zzy
+     * @create: 2021-07-15
+     */
+    @Override
+    public Result synchronousAccountTransactionDay() {
+        log.info("开始同步账号日流水");
+        Result result = new Result();
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
+        Calendar ca = Calendar.getInstance();
+        ca.setTime(new Date());
+        ca.add(Calendar.DATE, -1);
+        List<TransactionDay> transactionDetailsList = new ArrayList<>();
+        try {
+            List<String> accountIdList = ctopAgentAccountMapper.getAllAccountId();
+            if (!accountIdList.isEmpty()) {
+                List<String> advertiserIdList = ctopAccountTransactionDayMapper.getAdvertiserIdByDate(df.format(ca.getTime()));
+                accountIdList.stream().forEach(str -> {
+                    if (!str.isEmpty()) {
+                        //查询账号下充值的交易流水
+                        JSONObject jsonObject = queryAccountTransactionDay(str, 1, 1000);
+                        JSONObject data = (JSONObject) jsonObject.get("data");
+                        if(data!=null){
+                            List<Object> dataList = (List<Object>) data.get("list");
+                            if (dataList!=null&&!dataList.isEmpty()) {
+                                //充值类存在记录
+                                //保存第一页数据
+                                dataList.stream().forEach(ob -> {
+                                    TransactionDay transactionDay = JSONObject.toJavaObject((JSON) ob, TransactionDay.class);
+                                    //订单号不存在
+                                    if (advertiserIdList.isEmpty() || !advertiserIdList.contains(transactionDay.getAdvertiserId())) {
+                                        transactionDetailsList.add(transactionDay);
+                                    }
+
+                                });
+                                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(obj -> {
+                                            TransactionDay transactionDay = JSONObject.toJavaObject((JSON) obj, TransactionDay.class);
+                                            //订单号不存在
+                                            if (advertiserIdList.isEmpty() || !advertiserIdList.contains(transactionDay.getAdvertiserId())) {
+                                                transactionDetailsList.add(transactionDay);
+                                            }
+                                        });
+                                    }
+                                }
+                            }
+                        }
+                    }
+                });
+            }
+            //保存数据
+            if (!transactionDetailsList.isEmpty()) {
+                ctopAccountTransactionDayMapper.saveAccountTransactionDay(transactionDetailsList,df.format(new Date()));
+                log.info("新增日流水记录:{}条", transactionDetailsList.size());
+            }
+            result.setSuccess(true);
+            result.setMessage("success");
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+            result.setMessage("error");
+            log.info("同步失败:{}", e.toString());
+        }
+
+
+        return result;
+    }
+
+    /**
+     * 查询账号流水明细
+     *
+     * @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);
+    }
+
+    /**
+     * 查询账号日流水
+     *
+     * @return
+     * @author zzy
+     * @Param AccountId 账户id       pageNum 当前页    pageSize 每页显示数量
+     * @create: 2021-07-14
+     */
+    @Override
+    public JSONObject queryAccountTransactionDay(String AccountId, 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("page", pageNum);
+                put("page_size", pageSize);
+            }
+        };
+        return sendHttpRequest(data, ACCOUNT_TRANSACTION_DAY_URL);
+    }
+
+
+    /**
+     * 获取token
+     *
+     * @author zzy
+     * @create: 2021-07-14
+     */
+    @Override
+    public String getToken() {
+        CtopOauthToken ctopOauthToken = ctopAgentAccountMapper.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;
+    }
+
+}

+ 0 - 16
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/mapper/CtopAgentAccountMapper.java

@@ -1,16 +0,0 @@
-package cn.com.ctop.toutiao.modules.agent.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-@Mapper
-public interface CtopAgentAccountMapper {
-    //获取所有账户
-    public List<String> getAllAccountId();
-    //根据账户id修改账户状态
-    public void updateAccountState(@Param("list")List<String> list,@Param("state")int state);
-    //批量插入新增数据
-    public void insertAccountData(@Param("list") List<String> list,@Param("agent_id")String agent_id,@Param("create_time")String create_time);
-}

+ 0 - 28
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/mapper/xml/CtopAgentAccountMapper.xml

@@ -1,28 +0,0 @@
-<?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.toutiao.modules.agent.mapper.CtopAgentAccountMapper">
-    <!--获取所有账户-->
-    <select id="getAllAccountId" resultType="String">
-        select account_id from ctop_agent_account where state=0
-    </select>
-   <!-- 根据账户id修改账户状态-->
-    <update id="updateAccountState">
-        update ctop_agent_account set state=#{state} where account_id in
-        <foreach item="item" index="index" collection="list" open="("  close=")" separator=",">
-            #{item}
-        </foreach>
-    </update>
-   <!-- 批量插入新增数据-->
-    <insert id="insertAccountData">
-        insert  into ctop_agent_account (account_id,agent_id,state,create_time) values
-        <foreach collection="list" item="item" index="index" separator=",">
-            (
-            #{item},
-            #{agent_id},
-            0,
-            #{create_time}
-            )
-        </foreach>
-    </insert>
-
-</mapper>

+ 0 - 340
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/agent/service/impl/AgentManagementServiceImpl.java

@@ -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");
-            //dataList.addAll((List) data.get("list"));
-            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;
-    }
-
-}