浏览代码

头条团长 活动

zhaoxian 2 年之前
父节点
当前提交
3394874821

+ 0 - 9
ruixuan-live/src/main/java/com/ruixuan/bytedance/controller/BytedanceColonelActivityController.java

@@ -52,15 +52,6 @@ public class BytedanceColonelActivityController extends BaseController {
     }
 
     /**
-     * 新增团长活动 信息
-     */
-    @ApiOperation(value = "新增团长活动 信息")
-    @PostMapping
-    public void add() {
-        bytedanceColonelActivityService.addBytedanceColonelActivityList(1L);
-    }
-
-    /**
      * 修改团长活动 信息
      */
     @ApiOperation(value = "修改团长活动 信息")

+ 20 - 6
ruixuan-live/src/main/java/com/ruixuan/bytedance/controller/BytedanceController.java

@@ -1,6 +1,7 @@
 package com.ruixuan.bytedance.controller;
 
 import com.ruixuan.bytedance.service.IBytedanceColonelActivityService;
+import com.ruixuan.bytedance.service.IBytedanceService;
 import com.ruixuan.common.core.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
 public class BytedanceController extends BaseController {
 
     @Autowired
-    private IBytedanceColonelActivityService bytedanceColonelActivityService;
+    private IBytedanceService bytedanceService;
 
 
     /**
@@ -30,7 +31,7 @@ public class BytedanceController extends BaseController {
     @ApiOperation(value = "新增团长活动 信息")
     @GetMapping("/addBytedanceColonelActivityList")
     public void addBytedanceColonelActivityList() {
-        bytedanceColonelActivityService.addBytedanceColonelActivityList(1L);
+        bytedanceService.addBytedanceColonelActivityList(1L);
     }
 
     /**
@@ -39,7 +40,7 @@ public class BytedanceController extends BaseController {
     @ApiOperation(value = "新增团长活动详情")
     @GetMapping("/addBytedanceColonelActivityDetail")
     public void addBytedanceColonelActivityDetail(@ApiParam("activityId") @RequestParam(value = "活动ID", required = true) Long activityId) {
-        bytedanceColonelActivityService.addBytedanceColonelActivityDetail(activityId);
+        bytedanceService.addBytedanceColonelActivityDetail(activityId);
     }
 
 
@@ -48,10 +49,23 @@ public class BytedanceController extends BaseController {
      */
     @ApiOperation(value = "新增活动商品")
     @GetMapping("/addBytedanceColonelActivityProduct")
-    public void addBytedanceOrderSearchList(@ApiParam("activityId") @RequestParam(value = "活动ID", required = true) Long activityId,
-                                            @ApiParam("cursor") @RequestParam(value = "商品信息", required = true) String productInfo
+    public void addBytedanceColonelActivityProduct(@ApiParam("activityId") @RequestParam(value = "活动ID", required = true) Long activityId,
+                                                   @ApiParam("productInfo") @RequestParam(value = "商品信息", required = true) String productInfo
     ) {
-        bytedanceColonelActivityService.addBytedanceColonelActivityProduct(activityId, productInfo);
+        bytedanceService.addBytedanceColonelActivityProduct(activityId, productInfo);
+    }
+
+
+    /**
+     * 新增团长订单
+     */
+    @ApiOperation(value = "新增团长订单")
+    @GetMapping("/addBytedanceInstituteOrderColonel")
+    public void addBytedanceInstituteOrderColonel(@ApiParam("startTime") @RequestParam(value = "开始时间", required = true) String startTime,
+                                                  @ApiParam("endTime") @RequestParam(value = "结束时间", required = true) String endTime,
+                                                  @ApiParam("cursor") @RequestParam(value = "索引", required = true) String cursor
+    ) {
+        bytedanceService.addBytedanceInstituteOrderColonel(startTime, endTime, cursor);
     }
 
 

+ 306 - 0
ruixuan-live/src/main/java/com/ruixuan/bytedance/entity/BytedanceOrderList.java

@@ -0,0 +1,306 @@
+package com.ruixuan.bytedance.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruixuan.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 团长订单对象 bytedance_order_list
+ *
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+@Data
+public class BytedanceOrderList implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 订单号
+     */
+    private Long orderId;
+
+    /**
+     * APP ID(1128:抖音,2329:抖音极速版,1112: 火山,32: 西瓜, 13: 头条)
+     */
+    @Excel(name = "APP ID(1128:抖音,2329:抖音极速版,1112: 火山,32: 西瓜, 13: 头条)")
+    private String buyerAppId;
+
+    /**
+     * 独立抖客百应ID
+     */
+    @Excel(name = "独立抖客百应ID")
+    private String distributorBuyinId;
+
+    /**
+     * 独立抖客昵称
+     */
+    @Excel(name = "独立抖客昵称")
+    private String distributorName;
+
+    /**
+     * 独立抖客推广费率,此处保存为真实数据x1万之后,如真实是0.35,这里是3500
+     */
+    @Excel(name = "独立抖客推广费率,此处保存为真实数据x1万之后,如真实是0.35,这里是3500")
+    private String adsPromotionRate;
+
+    /**
+     * 商品id
+     */
+    @Excel(name = "商品id")
+    private String productId;
+
+    /**
+     * 商品名称
+     */
+    @Excel(name = "商品名称")
+    private String productName;
+
+    /**
+     * 商品图片URL
+     */
+    @Excel(name = "商品图片URL")
+    private String productImg;
+
+    /**
+     * 作者账号昵称(抖音/火山作者)
+     */
+    @Excel(name = "作者账号昵称(抖音/火山作者)")
+    private String authorAccount;
+
+    /**
+     * 作者抖店open_id
+     */
+    @Excel(name = "作者抖店open_id")
+    private String authorOpenid;
+
+    /**
+     * 店铺ID
+     */
+    @Excel(name = "店铺ID")
+    private Integer shopId;
+
+    /**
+     * 商家名称
+     */
+    @Excel(name = "商家名称")
+    private String shopName;
+
+    /**
+     * 订单支付金额,单位分
+     */
+    @Excel(name = "订单支付金额,单位分")
+    private Integer totalPayAmount;
+
+    /**
+     * 订单状态(PAY_SUCC:支付完成 REFUND:退款 SETTLE:结算 CONFIRM: 确认收货)
+     */
+    @Excel(name = "订单状态(PAY_SUCC:支付完成 REFUND:退款 SETTLE:结算 CONFIRM: 确认收货)")
+    private String flowPoint;
+
+    /**
+     * App名称(抖音,火山,西瓜,头条)
+     */
+    @Excel(name = "App名称", readConverterExp = "抖=音,火山,西瓜,头条")
+    private String app;
+
+    /**
+     * 付款时间
+     */
+    @Excel(name = "付款时间")
+    private Long paySuccessTime;
+
+    /**
+     * 结算时间
+     */
+    @Excel(name = "结算时间")
+    private Long settleTime;
+
+    /**
+     * 预估参与结算金额,单位分
+     */
+    @Excel(name = "预估参与结算金额,单位分")
+    private Integer payGoodsAmount;
+
+    /**
+     * 实际参与结算金额,单位分
+     */
+    @Excel(name = "实际参与结算金额,单位分")
+    private Integer settledGoodsAmount;
+
+    /**
+     * 商品数目
+     */
+    @Excel(name = "商品数目")
+    private Integer itemNum;
+
+    /**
+     * 退款订单退款时间
+     */
+    @Excel(name = "退款订单退款时间")
+    private Long refundTime;
+
+    /**
+     * 达人抖音号
+     */
+    @Excel(name = "达人抖音号")
+    private String authorShortId;
+
+    /**
+     * 团长类型。0:普通;1:一级团长;2: 二级团长
+     */
+    @Excel(name = "团长类型。0:普通;1:一级团长;2: 二级团长")
+    private String colonelType;
+
+    /**
+     * 达人百应ID
+     */
+    @Excel(name = "达人百应ID")
+    private String authorBuyinId;
+
+    /**
+     * 带货体裁。shop_list:橱窗;video:视频;live:直播;others:其他
+     */
+    @Excel(name = "带货体裁。shop_list:橱窗;video:视频;live:直播;others:其他")
+    private String mediaType;
+
+    /**
+     * 达人佣金率,此处保存为真实数据x1万之后,如真实是0.35,这里是3500
+     */
+    @Excel(name = "达人佣金率,此处保存为真实数据x1万之后,如真实是0.35,这里是3500")
+    private Long commissionRate;
+
+    /**
+     * 带货体裁 id(只返回视频/直播间 id)
+     */
+    @Excel(name = "带货体裁 id(只返回视频/直播间 id)")
+    private Long mediaId;
+
+    /**
+     * 是否托管 0否,1是
+     */
+    @Excel(name = "是否托管 0否,1是")
+    private String isTrusteeship;
+
+    /**
+     * 分销类型。ProductDetail:商品分销;Live:直播分销;Activity:频道活动;Mix:营销活动
+     */
+    @Excel(name = "分销类型。ProductDetail:商品分销;Live:直播分销;Activity:频道活动;Mix:营销活动")
+    private String goodShareType;
+
+    /**
+     * 团长服务费率(35%返回3500)
+     */
+    @Excel(name = "团长服务费率(35%返回3500)")
+    private Long colonelCommissionRate;
+
+    /**
+     * 团长活动ID
+     */
+    @Excel(name = "团长活动ID")
+    private Long colonelActivityId;
+
+    /**
+     * 团长预估服务费,单位分
+     */
+    @Excel(name = "团长预估服务费,单位分")
+    private Long colonelEstimatedCommission;
+
+    /**
+     * 团长结算服务费,单位分
+     */
+    @Excel(name = "团长结算服务费,单位分")
+    private Long colonelRealCommission;
+
+    /**
+     * 团长技术服务费率,单位分
+     */
+    @Excel(name = "团长技术服务费率,单位分")
+    private Long colonelTechServiceFeeRate;
+
+    /**
+     * 团长预估技术服务费,单位分
+     */
+    @Excel(name = "团长预估技术服务费,单位分")
+    private Long colonelTechServiceFee;
+
+    /**
+     * 团长结算技术服务费,单位分
+     */
+    @Excel(name = "团长结算技术服务费,单位分")
+    private Long colonelSettledTechServiceFee;
+
+    /**
+     * 团长机构ID
+     */
+    @Excel(name = "团长机构ID")
+    private Long colonelInstitutionId;
+
+    /**
+     * 团长机构名称
+     */
+    @Excel(name = "团长机构名称")
+    private String colonelInstitutionName;
+
+    /**
+     * 团长百应ID
+     */
+    @Excel(name = "团长百应ID")
+    private Long colonelBuyinId;
+
+    /**
+     * 二级团长服务费率(35%返回3500)
+     */
+    @Excel(name = "二级团长服务费率(35%返回3500)")
+    private Long secondCommissionRate;
+
+    /**
+     * 二级团长活动ID
+     */
+    @Excel(name = "二级团长活动ID")
+    private Long secondActivityId;
+
+    /**
+     * 二级团长预估服务费,单位分
+     */
+    @Excel(name = "二级团长预估服务费,单位分")
+    private Long secondEstimatedCommission;
+
+    /**
+     * 二级团长结算服务费,单位分
+     */
+    @Excel(name = "二级团长结算服务费,单位分")
+    private Long secondRealCommission;
+
+    /**
+     * 二级团长机构ID
+     */
+    @Excel(name = "二级团长机构ID")
+    private Long secondInstitutionId;
+
+    /**
+     * 二级团长机构名称
+     */
+    @Excel(name = "二级团长机构名称")
+    private String secondInstitutionName;
+
+    /**
+     * 二级团长百应ID
+     */
+    @Excel(name = "二级团长百应ID")
+    private Long secondColonelBuyinId;
+
+    /**
+     * 更新时间 [联盟侧订单更新时间]
+     */
+    @JsonFormat(pattern = "yyyyMMdd")
+    private Long updateTime;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 21 - 0
ruixuan-live/src/main/java/com/ruixuan/bytedance/mapper/BytedanceMapper.java

@@ -0,0 +1,21 @@
+package com.ruixuan.bytedance.mapper;
+
+import com.ruixuan.bytedance.entity.BytedanceAccessToken;
+import com.ruixuan.bytedance.entity.BytedanceColonelActivity;
+import com.ruixuan.bytedance.entity.BytedanceColonelActivityDetail;
+import com.ruixuan.bytedance.entity.BytedanceOrderList;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface BytedanceMapper {
+
+
+    void replaceBatchActivitys(@Param("activityList") List<BytedanceColonelActivity> activityList);
+
+    void insertDetail(BytedanceColonelActivityDetail activityDetail);
+
+    BytedanceColonelActivityDetail getDetailByActivityId(@Param("activityId") Long activityId);
+
+    void replaceBatchOrders(List<BytedanceOrderList> list);
+}

+ 0 - 19
ruixuan-live/src/main/java/com/ruixuan/bytedance/service/IBytedanceColonelActivityService.java

@@ -53,23 +53,4 @@ public interface IBytedanceColonelActivityService {
      */
     public int deleteBytedanceColonelActivityById(Long id);
 
-
-    //-------------------------------------
-
-    /**
-     * job新增团长活动列表
-     */
-    public void addBytedanceColonelActivityList(Long page);
-
-
-    /**
-     * job 新增团长活动详情
-     */
-    void addBytedanceColonelActivityDetail(Long activityId);
-
-
-    /**
-     * job 新增活动商品
-     */
-    void addBytedanceColonelActivityProduct(Long activityId,String productInfo);
 }

+ 28 - 0
ruixuan-live/src/main/java/com/ruixuan/bytedance/service/IBytedanceService.java

@@ -0,0 +1,28 @@
+package com.ruixuan.bytedance.service;
+
+
+/**
+ * 调用媒体服务
+ *
+ * @date 2023-08-11
+ */
+public interface IBytedanceService {
+    /**
+     * job新增团长活动列表
+     */
+    public void addBytedanceColonelActivityList(Long page);
+
+
+    /**
+     * job 新增团长活动详情
+     */
+    void addBytedanceColonelActivityDetail(Long activityId);
+
+
+    /**
+     * job 新增活动商品
+     */
+    void addBytedanceColonelActivityProduct(Long activityId, String productInfo);
+
+    void addBytedanceInstituteOrderColonel(String startTime, String endTime, String cursor);
+}

+ 0 - 162
ruixuan-live/src/main/java/com/ruixuan/bytedance/service/impl/BytedanceColonelActivityServiceImpl.java

@@ -1,36 +1,14 @@
 package com.ruixuan.bytedance.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
-import com.doudian.open.api.alliance_colonelActivityProduct.AllianceColonelActivityProductRequest;
-import com.doudian.open.api.alliance_colonelActivityProduct.AllianceColonelActivityProductResponse;
-import com.doudian.open.api.alliance_colonelActivityProduct.param.AllianceColonelActivityProductParam;
-import com.doudian.open.api.alliance_instituteColonelActivityList.AllianceInstituteColonelActivityListRequest;
-import com.doudian.open.api.alliance_instituteColonelActivityList.AllianceInstituteColonelActivityListResponse;
-import com.doudian.open.api.alliance_instituteColonelActivityList.data.ActivityListItem;
-import com.doudian.open.api.alliance_instituteColonelActivityList.data.AllianceInstituteColonelActivityListData;
-import com.doudian.open.api.alliance_instituteColonelActivityList.param.AllianceInstituteColonelActivityListParam;
-import com.doudian.open.api.buyin_colonelActivityDetail.BuyinColonelActivityDetailRequest;
-import com.doudian.open.api.buyin_colonelActivityDetail.BuyinColonelActivityDetailResponse;
-import com.doudian.open.api.buyin_colonelActivityDetail.data.BuyinColonelActivityDetailData;
-import com.doudian.open.api.buyin_colonelActivityDetail.param.BuyinColonelActivityDetailParam;
-import com.doudian.open.api.buyin_decryptContactInfo.BuyinDecryptContactInfoRequest;
-import com.doudian.open.api.buyin_decryptContactInfo.BuyinDecryptContactInfoResponse;
-import com.doudian.open.api.buyin_decryptContactInfo.data.BuyinDecryptContactInfoData;
-import com.doudian.open.api.buyin_decryptContactInfo.param.BuyinDecryptContactInfoParam;
-import com.doudian.open.core.AccessToken;
 import com.ruixuan.bytedance.entity.BytedanceColonelActivity;
-import com.ruixuan.bytedance.entity.BytedanceColonelActivityDetail;
 import com.ruixuan.bytedance.mapper.BytedanceColonelActivityMapper;
 import com.ruixuan.bytedance.service.IBytedanceAccessTokenService;
 import com.ruixuan.bytedance.service.IBytedanceColonelActivityService;
-import com.ruixuan.common.utils.Check;
 import com.ruixuan.common.utils.DateUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -106,144 +84,4 @@ public class BytedanceColonelActivityServiceImpl implements IBytedanceColonelAct
     }
 
 
-    /**
-     * 新增团长活动 信息
-     *
-     * @param bytedanceColonelActivity 团长活动 信息
-     */
-    @Override
-    public void addBytedanceColonelActivityList(Long page) {
-        AccessToken accessToken = tokenService.getAccessToken(1L);
-        AllianceInstituteColonelActivityListRequest request = new AllianceInstituteColonelActivityListRequest();
-        AllianceInstituteColonelActivityListParam param = request.getParam();
-        param.setStatus(0);
-        param.setSearchType(0L);
-        param.setSortType(0L);
-        param.setPage(page);
-        param.setPageSize(20L);
-        AllianceInstituteColonelActivityListResponse response = request.execute(accessToken);
-        if (Check.isNull(response) || !"10000".equals(response.getCode())) {
-            log.error("\n【请求接口】: {}\n【请求参数】:{}\n【响应数据】:{}", "/alliance/instituteColonelActivityList;(团长活动查询接口)", param, response);
-            return;
-        }
-        AllianceInstituteColonelActivityListData data = response.getData();
-        List<ActivityListItem> activityList = data.getActivityList();
-        if (Check.isNotNull(activityList)) {
-            List<BytedanceColonelActivity> list = new ArrayList<>();
-            for (ActivityListItem activityItem : activityList) {
-                BytedanceColonelActivity activity = new BytedanceColonelActivity();
-                BeanUtils.copyProperties(activityItem, activity);
-                activity.setActivityStartTime(DateUtils.strDateToInt(activityItem.getActivityStartTime()));
-                activity.setActivityEndTime(DateUtils.strDateToInt(activityItem.getActivityEndTime()));
-                activity.setApplicationStartTime(DateUtils.strDateToInt(activityItem.getApplicationStartTime()));
-                activity.setApplicationEndTime(DateUtils.strDateToInt(activityItem.getApplicationEndTime()));
-                if (Check.isNotNull(activityItem.getCategoriesLimit())) {
-                    activity.setCategoriesLimit(JSONObject.toJSON(activityItem.getCategoriesLimit()).toString());
-                }
-                activity.setInstitutionId(data.getInstitutionId());
-                activity.setColonelBuyinId(data.getColonelBuyinId());
-                list.add(activity);
-            }
-            bytedanceColonelActivityMapper.replaceBatch(list);
-
-            //添加详情
-            for (BytedanceColonelActivity activity : list) {
-                BytedanceColonelActivityDetail activityDetail = bytedanceColonelActivityMapper.getDetailByActivityId(activity.getActivityId());
-                if (Check.isNull(activityDetail)) {
-                    addBytedanceColonelActivityDetail(activity.getActivityId());
-                }
-            }
-
-            int size = data.getActivityList().size();
-            if (size >= 20) {
-                addBytedanceColonelActivityList(page + 1);
-            }
-        }
-    }
-
-    @Override
-    public void addBytedanceColonelActivityDetail(Long activityId) {
-        AccessToken accessToken = tokenService.getAccessToken(1L);
-        BuyinColonelActivityDetailRequest request = new BuyinColonelActivityDetailRequest();
-        BuyinColonelActivityDetailParam param = request.getParam();
-        param.setActivityId(activityId);
-        BuyinColonelActivityDetailResponse response = request.execute(accessToken);
-        if (Check.isNull(response) || !"10000".equals(response.getCode())) {
-            log.error("\n【请求接口】: {}\n【请求参数】:{}\n【响应数据】:{}", "/buyin/colonelActivityDetail;(获取团长活动详情)", param, response);
-            return;
-        }
-        BuyinColonelActivityDetailData data = response.getData();
-        if (Check.isNotNull(data)) {
-            BytedanceColonelActivityDetail activityDetail = new BytedanceColonelActivityDetail();
-            BeanUtils.copyProperties(data, activityDetail);
-            if (Check.isNotNull(data.getIsNewShop())) {
-                activityDetail.setIsNewShop(data.getIsNewShop() ? 1 : 0);
-            }
-            if (Check.isNotNull(data.getHasThreshold())) {
-                activityDetail.setHasThreshold(data.getHasThreshold() ? 1 : 0);
-            }
-            if (Check.isNotNull(data.getShopType())) {
-                activityDetail.setShopType(JSONObject.toJSON(data.getShopType()).toString());
-            }
-            if (Check.isNotNull(data.getWechatId())) {
-                activityDetail.setWechatId(decryptContactInfo(accessToken, data.getWechatId(), activityId));
-            }
-            if (Check.isNotNull(data.getPhoneNum())) {
-                activityDetail.setPhoneNum(decryptContactInfo(accessToken, data.getPhoneNum(), activityId));
-            }
-            //招商类目
-            if (Check.isNotNull(data.getCategories())) {
-                activityDetail.setCategories(JSONObject.toJSON(data.getCategories()).toString());
-            }
-            activityDetail.setApplyStartTime(DateUtils.strDateToInt(data.getApplyStartTime()));
-            activityDetail.setApplyEndTime(DateUtils.strDateToInt(data.getApplyEndTime()));
-            bytedanceColonelActivityMapper.insertDetail(activityDetail);
-        }
-
-    }
-
-    @Override
-    public void addBytedanceColonelActivityProduct(Long activityId, String productInfo) {
-        AccessToken accessToken = tokenService.getAccessToken(1L);
-
-        AllianceColonelActivityProductRequest request = new AllianceColonelActivityProductRequest();
-        AllianceColonelActivityProductParam param = request.getParam();
-        param.setActivityId(activityId);
-        param.setProductInfo(productInfo);//商品ID/名称(支持根据商品id或者商品名称搜索,商品ID精准匹配,商品名称模糊匹配)
-        param.setPage(1L);//页码,从1开始。分页模式下生效,超过10000条会被限制,推荐使用游标模式 retrieve_mode=1
-        param.setCount(20L);//每页数量(每页最多20)
-//        param.setSearchType(4L);//0:报名时间;1:活动价格排序;2:活动佣金比例排序;4:更新时间排序
-//        param.setSortType(0L);//排序顺序。0:升序;1:降序
-//        param.setCooperationInfo("23412312");//商家ID or 商家名称 or 一级团长名称 or 一级团长ID
-//        param.setCooperationType(0);//合作类型. 0: 不限; 1: 商家; 2: 团长
-//        param.setStatus(0L);//活动商品状态,不传查所有状态。0:待审核;1:推广中;2:申请未通过;3:合作已终止;6:合作已到期
-//        param.setRetrieveMode(1);//获取模式。0: 分页模式(默认),最多返回10000条数据;1: 游标模式(推荐),返回条数无限制
-
-        AllianceColonelActivityProductResponse response = request.execute(accessToken);
-        System.out.println(response);
-        if (Check.isNull(response) || !"10000".equals(response.getCode())) {
-            log.error("\n【请求接口】: {}\n【请求参数】:{}\n【响应数据】:{}", "/buyin/colonelActivityDetail;(获取团长活动详情)", param, response);
-            return;
-        }
-    }
-
-    /**
-     * 联系方式解密
-     */
-    public String decryptContactInfo(AccessToken accessToken, String text, Long activityId) {
-        try {
-            BuyinDecryptContactInfoRequest request = new BuyinDecryptContactInfoRequest();
-            BuyinDecryptContactInfoParam param = request.getParam();
-            param.setText(text);
-            BuyinDecryptContactInfoResponse response = request.execute(accessToken);
-            BuyinDecryptContactInfoData data = response.getData();
-            return data.getContactInfo();
-        } catch (Exception e) {
-            e.printStackTrace();
-            log.error("联系方式解密失败,活动ID:{}", activityId);
-        }
-        return null;
-    }
-
-
 }

+ 268 - 0
ruixuan-live/src/main/java/com/ruixuan/bytedance/service/impl/BytedanceServiceImpl.java

@@ -0,0 +1,268 @@
+package com.ruixuan.bytedance.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doudian.open.api.alliance_colonelActivityProduct.AllianceColonelActivityProductRequest;
+import com.doudian.open.api.alliance_colonelActivityProduct.AllianceColonelActivityProductResponse;
+import com.doudian.open.api.alliance_colonelActivityProduct.param.AllianceColonelActivityProductParam;
+import com.doudian.open.api.alliance_instituteColonelActivityList.AllianceInstituteColonelActivityListRequest;
+import com.doudian.open.api.alliance_instituteColonelActivityList.AllianceInstituteColonelActivityListResponse;
+import com.doudian.open.api.alliance_instituteColonelActivityList.data.ActivityListItem;
+import com.doudian.open.api.alliance_instituteColonelActivityList.data.AllianceInstituteColonelActivityListData;
+import com.doudian.open.api.alliance_instituteColonelActivityList.param.AllianceInstituteColonelActivityListParam;
+import com.doudian.open.api.buyin_colonelActivityDetail.BuyinColonelActivityDetailRequest;
+import com.doudian.open.api.buyin_colonelActivityDetail.BuyinColonelActivityDetailResponse;
+import com.doudian.open.api.buyin_colonelActivityDetail.data.BuyinColonelActivityDetailData;
+import com.doudian.open.api.buyin_colonelActivityDetail.param.BuyinColonelActivityDetailParam;
+import com.doudian.open.api.buyin_decryptContactInfo.BuyinDecryptContactInfoRequest;
+import com.doudian.open.api.buyin_decryptContactInfo.BuyinDecryptContactInfoResponse;
+import com.doudian.open.api.buyin_decryptContactInfo.data.BuyinDecryptContactInfoData;
+import com.doudian.open.api.buyin_decryptContactInfo.param.BuyinDecryptContactInfoParam;
+import com.doudian.open.api.buyin_instituteOrderColonel.BuyinInstituteOrderColonelRequest;
+import com.doudian.open.api.buyin_instituteOrderColonel.BuyinInstituteOrderColonelResponse;
+import com.doudian.open.api.buyin_instituteOrderColonel.data.ColonelOrderInfo;
+import com.doudian.open.api.buyin_instituteOrderColonel.data.ColonelOrderInfoSecond;
+import com.doudian.open.api.buyin_instituteOrderColonel.data.Data;
+import com.doudian.open.api.buyin_instituteOrderColonel.data.OrdersItem;
+import com.doudian.open.api.buyin_instituteOrderColonel.param.BuyinInstituteOrderColonelParam;
+import com.doudian.open.core.AccessToken;
+import com.ruixuan.bytedance.entity.BytedanceColonelActivity;
+import com.ruixuan.bytedance.entity.BytedanceColonelActivityDetail;
+import com.ruixuan.bytedance.entity.BytedanceOrderList;
+import com.ruixuan.bytedance.mapper.BytedanceColonelActivityMapper;
+import com.ruixuan.bytedance.mapper.BytedanceMapper;
+import com.ruixuan.bytedance.service.IBytedanceAccessTokenService;
+import com.ruixuan.bytedance.service.IBytedanceService;
+import com.ruixuan.common.utils.Check;
+import com.ruixuan.common.utils.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class BytedanceServiceImpl implements IBytedanceService {
+
+    @Autowired
+    private IBytedanceAccessTokenService tokenService;
+
+    @Autowired
+    private BytedanceColonelActivityMapper bytedanceColonelActivityMapper;
+
+    @Autowired
+    private BytedanceMapper bytedanceMapper;
+
+    /**
+     * 新增团长活动 信息
+     *
+     * @param bytedanceColonelActivity 团长活动 信息
+     */
+    @Override
+    public void addBytedanceColonelActivityList(Long page) {
+        AccessToken accessToken = tokenService.getAccessToken(1L);
+        AllianceInstituteColonelActivityListRequest request = new AllianceInstituteColonelActivityListRequest();
+        AllianceInstituteColonelActivityListParam param = request.getParam();
+        param.setStatus(0);
+        param.setSearchType(0L);
+        param.setSortType(0L);
+        param.setPage(page);
+        param.setPageSize(20L);
+        AllianceInstituteColonelActivityListResponse response = request.execute(accessToken);
+        if (Check.isNull(response) || !"10000".equals(response.getCode())) {
+            log.error("\n【请求接口】: {}\n【请求参数】:{}\n【响应数据】:{}", "/alliance/instituteColonelActivityList;(团长活动查询接口)", param, response);
+            return;
+        }
+        AllianceInstituteColonelActivityListData data = response.getData();
+        List<ActivityListItem> activityList = data.getActivityList();
+        if (Check.isNotNull(activityList)) {
+            List<BytedanceColonelActivity> list = new ArrayList<>();
+            for (ActivityListItem activityItem : activityList) {
+                BytedanceColonelActivity activity = new BytedanceColonelActivity();
+                BeanUtils.copyProperties(activityItem, activity);
+                activity.setActivityStartTime(DateUtils.strDateToInt(activityItem.getActivityStartTime()));
+                activity.setActivityEndTime(DateUtils.strDateToInt(activityItem.getActivityEndTime()));
+                activity.setApplicationStartTime(DateUtils.strDateToInt(activityItem.getApplicationStartTime()));
+                activity.setApplicationEndTime(DateUtils.strDateToInt(activityItem.getApplicationEndTime()));
+                if (Check.isNotNull(activityItem.getCategoriesLimit())) {
+                    activity.setCategoriesLimit(JSONObject.toJSON(activityItem.getCategoriesLimit()).toString());
+                }
+                activity.setInstitutionId(data.getInstitutionId());
+                activity.setColonelBuyinId(data.getColonelBuyinId());
+                list.add(activity);
+            }
+            bytedanceMapper.replaceBatchActivitys(list);
+
+            //添加详情
+            for (BytedanceColonelActivity activity : list) {
+                BytedanceColonelActivityDetail activityDetail = bytedanceColonelActivityMapper.getDetailByActivityId(activity.getActivityId());
+                if (Check.isNull(activityDetail)) {
+                    addBytedanceColonelActivityDetail(activity.getActivityId());
+                }
+            }
+
+            int size = data.getActivityList().size();
+            if (size >= 20) {
+                addBytedanceColonelActivityList(page + 1);
+            }
+        }
+    }
+
+    @Override
+    public void addBytedanceColonelActivityDetail(Long activityId) {
+        AccessToken accessToken = tokenService.getAccessToken(1L);
+        BuyinColonelActivityDetailRequest request = new BuyinColonelActivityDetailRequest();
+        BuyinColonelActivityDetailParam param = request.getParam();
+        param.setActivityId(activityId);
+        BuyinColonelActivityDetailResponse response = request.execute(accessToken);
+        if (Check.isNull(response) || !"10000".equals(response.getCode())) {
+            log.error("\n【请求接口】: {}\n【请求参数】:{}\n【响应数据】:{}", "/buyin/colonelActivityDetail;(获取团长活动详情)", param, response);
+            return;
+        }
+        BuyinColonelActivityDetailData data = response.getData();
+        if (Check.isNotNull(data)) {
+            BytedanceColonelActivityDetail activityDetail = new BytedanceColonelActivityDetail();
+            BeanUtils.copyProperties(data, activityDetail);
+            if (Check.isNotNull(data.getIsNewShop())) {
+                activityDetail.setIsNewShop(data.getIsNewShop() ? 1 : 0);
+            }
+            if (Check.isNotNull(data.getHasThreshold())) {
+                activityDetail.setHasThreshold(data.getHasThreshold() ? 1 : 0);
+            }
+            if (Check.isNotNull(data.getShopType())) {
+                activityDetail.setShopType(JSONObject.toJSON(data.getShopType()).toString());
+            }
+            if (Check.isNotNull(data.getWechatId())) {
+                activityDetail.setWechatId(decryptContactInfo(accessToken, data.getWechatId(), activityId));
+            }
+            if (Check.isNotNull(data.getPhoneNum())) {
+                activityDetail.setPhoneNum(decryptContactInfo(accessToken, data.getPhoneNum(), activityId));
+            }
+            //招商类目
+            if (Check.isNotNull(data.getCategories())) {
+                activityDetail.setCategories(JSONObject.toJSON(data.getCategories()).toString());
+            }
+            activityDetail.setApplyStartTime(DateUtils.strDateToInt(data.getApplyStartTime()));
+            activityDetail.setApplyEndTime(DateUtils.strDateToInt(data.getApplyEndTime()));
+            bytedanceMapper.insertDetail(activityDetail);
+        }
+
+    }
+
+    @Override
+    public void addBytedanceColonelActivityProduct(Long activityId, String productInfo) {
+        AccessToken accessToken = tokenService.getAccessToken(1L);
+
+        AllianceColonelActivityProductRequest request = new AllianceColonelActivityProductRequest();
+        AllianceColonelActivityProductParam param = request.getParam();
+        param.setActivityId(activityId);
+        param.setProductInfo(productInfo);//商品ID/名称(支持根据商品id或者商品名称搜索,商品ID精准匹配,商品名称模糊匹配)
+        param.setPage(1L);//页码,从1开始。分页模式下生效,超过10000条会被限制,推荐使用游标模式 retrieve_mode=1
+        param.setCount(20L);//每页数量(每页最多20)
+//        param.setSearchType(4L);//0:报名时间;1:活动价格排序;2:活动佣金比例排序;4:更新时间排序
+//        param.setSortType(0L);//排序顺序。0:升序;1:降序
+//        param.setCooperationInfo("23412312");//商家ID or 商家名称 or 一级团长名称 or 一级团长ID
+//        param.setCooperationType(0);//合作类型. 0: 不限; 1: 商家; 2: 团长
+//        param.setStatus(0L);//活动商品状态,不传查所有状态。0:待审核;1:推广中;2:申请未通过;3:合作已终止;6:合作已到期
+//        param.setRetrieveMode(1);//获取模式。0: 分页模式(默认),最多返回10000条数据;1: 游标模式(推荐),返回条数无限制
+
+        AllianceColonelActivityProductResponse response = request.execute(accessToken);
+        System.out.println(response);
+        if (Check.isNull(response) || !"10000".equals(response.getCode())) {
+            log.error("\n【请求接口】: {}\n【请求参数】:{}\n【响应数据】:{}", "/buyin/colonelActivityDetail;(获取团长活动详情)", param, response);
+            return;
+        }
+    }
+
+    @Override
+    public void addBytedanceInstituteOrderColonel(String startTime, String endTime, String cursor) {
+        AccessToken accessToken = tokenService.getAccessToken(1L);
+
+        BuyinInstituteOrderColonelRequest request = new BuyinInstituteOrderColonelRequest();
+        BuyinInstituteOrderColonelParam param = request.getParam();
+        param.setSize(200L);
+        param.setCursor(cursor);
+        param.setStartTime(startTime.concat(" 00:00:00"));
+        param.setEndTime(endTime.concat(" 23:59:59"));
+        param.setTimeType("pay");//	查询时间类型。pay: 支付时间(默认); update:联盟侧更新时间,非订单状态更新时间
+        BuyinInstituteOrderColonelResponse response = request.execute(accessToken);
+        System.out.println(response);
+        if (Check.isNull(response) || !"10000".equals(response.getCode())) {
+            log.error("\n【请求接口】: {}\n【请求参数】:{}\n【响应数据】:{}", "/buyin/colonelActivityDetail;(获取团长活动详情)", param, response);
+            return;
+        }
+
+        Data data = response.getData();
+        if (Check.isNotNull(data)) {
+            List<OrdersItem> orders = data.getOrders();
+            cursor = data.getCursor();
+            if (Check.isNotNull(orders) && orders.size() > 0) {
+                List<BytedanceOrderList> list = new ArrayList<>();
+                BytedanceOrderList orderList = new BytedanceOrderList();
+                for (OrdersItem order : orders) {
+                    BeanUtils.copyProperties(order, orderList);
+                    orderList.setUpdateTime(DateUtils.strDateToInt(order.getUpdateTime()));
+                    orderList.setPaySuccessTime(DateUtils.strDateToInt(order.getPaySuccessTime()));
+                    orderList.setRefundTime(DateUtils.strDateToInt(order.getRefundTime()));
+                    orderList.setSettleTime(DateUtils.strDateToInt(order.getSettleTime()));
+                    ColonelOrderInfo colonelInfo = order.getColonelOrderInfo();
+                    if (Check.isNotNull(colonelInfo)) {
+                        orderList.setColonelCommissionRate(colonelInfo.getCommissionRate());
+                        orderList.setColonelActivityId(colonelInfo.getActivityId());
+                        orderList.setColonelBuyinId(colonelInfo.getColonelBuyinId());
+                        orderList.setColonelEstimatedCommission(colonelInfo.getEstimatedCommission());
+                        orderList.setColonelInstitutionId(colonelInfo.getInstitutionId());
+                        orderList.setColonelInstitutionName(colonelInfo.getInstitutionName());
+                        orderList.setColonelRealCommission(colonelInfo.getRealCommission());
+                        orderList.setColonelSettledTechServiceFee(colonelInfo.getSettledTechServiceFee());
+                        orderList.setColonelTechServiceFee(colonelInfo.getTechServiceFee());
+                        orderList.setColonelTechServiceFeeRate(colonelInfo.getTechServiceFeeRate());
+                    }
+                    ColonelOrderInfoSecond secondInfo = order.getColonelOrderInfoSecond();
+                    if (Check.isNotNull(secondInfo)) {
+                        orderList.setSecondCommissionRate(secondInfo.getCommissionRate());
+                        orderList.setSecondActivityId(secondInfo.getActivityId());
+                        orderList.setSecondColonelBuyinId(secondInfo.getColonelBuyinId());
+                        orderList.setSecondInstitutionId(secondInfo.getInstitutionId());
+                        orderList.setSecondInstitutionName(secondInfo.getInstitutionName());
+                        orderList.setSecondEstimatedCommission(secondInfo.getEstimatedCommission());
+                        orderList.setSecondRealCommission(secondInfo.getRealCommission());
+                    }
+                    list.add(orderList);
+                }
+
+                bytedanceMapper.replaceBatchOrders(list);
+
+                int size = orders.size();
+                if (size >= 200) {
+                    addBytedanceInstituteOrderColonel(startTime, endTime, cursor);
+                }
+
+            }
+
+        }
+
+
+    }
+
+    /**
+     * 联系方式解密
+     */
+    public String decryptContactInfo(AccessToken accessToken, String text, Long activityId) {
+        try {
+            BuyinDecryptContactInfoRequest request = new BuyinDecryptContactInfoRequest();
+            BuyinDecryptContactInfoParam param = request.getParam();
+            param.setText(text);
+            BuyinDecryptContactInfoResponse response = request.execute(accessToken);
+            BuyinDecryptContactInfoData data = response.getData();
+            return data.getContactInfo();
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("联系方式解密失败,活动ID:{}", activityId);
+        }
+        return null;
+    }
+
+}

+ 231 - 0
ruixuan-live/src/main/resources/mapper/bytedance/BytedanceMapper.xml

@@ -0,0 +1,231 @@
+<?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="com.ruixuan.bytedance.mapper.BytedanceMapper">
+
+    <insert id="replaceBatchActivitys">
+        replace into bytedance_colonel_activity(
+        institution_id,
+        activity_id,
+        colonel_buyin_id,
+        activity_name,
+        activity_start_time,
+        activity_end_time,
+        status,
+        application_start_time,
+        application_end_time,
+        categories_limit
+        )
+        values
+        <foreach collection="activityList" item="cell" separator=",">
+            (
+            #{cell.institutionId},
+            #{cell.activityId},
+            #{cell.colonelBuyinId},
+            #{cell.activityName},
+            #{cell.activityStartTime},
+            #{cell.activityEndTime},
+            #{cell.status},
+            #{cell.applicationStartTime},
+            #{cell.applicationEndTime},
+            #{cell.categoriesLimit}
+            )
+        </foreach>
+    </insert>
+
+
+    <insert id="insertDetail"
+            parameterType="com.ruixuan.bytedance.entity.BytedanceColonelActivityDetail" useGeneratedKeys="true"
+            keyProperty="id">
+        insert into bytedance_colonel_activity_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="institutionId != null">institution_id,</if>
+            <if test="activityId != null">activity_id,</if>
+            <if test="activityName != null">activity_name,</if>
+            <if test="isNewShop != null">is_new_shop,</if>
+            <if test="shopType != null">shop_type,</if>
+            <if test="activityDesc != null">activity_desc,</if>
+            <if test="applyStartTime != null">apply_start_time,</if>
+            <if test="applyEndTime != null">apply_end_time,</if>
+            <if test="commissionRate != null">commission_rate,</if>
+            <if test="wechatId != null">wechat_id,</if>
+            <if test="phoneNum != null">phone_num,</if>
+            <if test="estimatedSingleSale != null">estimated_single_sale,</if>
+            <if test="activityType != null">activity_type,</if>
+            <if test="specifiedShopIds != null">specified_shop_ids,</if>
+            <if test="categories != null">categories,</if>
+            <if test="shopScore != null">shop_score,</if>
+            <if test="minPromotionDays != null">min_promotion_days,</if>
+            <if test="thresholdCrossBorder != null">threshold_cross_border,</if>
+            <if test="hasThreshold != null">has_threshold,</if>
+            <if test="colonelBuyinId != null">colonel_buyin_id,</if>
+            <if test="monthsOfProtection != null">months_of_protection,</if>
+            <if test="colonelName != null">colonel_name,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="institutionId != null">#{institutionId},</if>
+            <if test="activityId != null">#{activityId},</if>
+            <if test="activityName != null">#{activityName},</if>
+            <if test="isNewShop != null">#{isNewShop},</if>
+            <if test="shopType != null">#{shopType},</if>
+            <if test="activityDesc != null">#{activityDesc},</if>
+            <if test="applyStartTime != null">#{applyStartTime},</if>
+            <if test="applyEndTime != null">#{applyEndTime},</if>
+            <if test="commissionRate != null">#{commissionRate},</if>
+            <if test="wechatId != null">#{wechatId},</if>
+            <if test="phoneNum != null">#{phoneNum},</if>
+            <if test="estimatedSingleSale != null">#{estimatedSingleSale},</if>
+            <if test="activityType != null">#{activityType},</if>
+            <if test="specifiedShopIds != null">#{specifiedShopIds},</if>
+            <if test="categories != null">#{categories},</if>
+            <if test="shopScore != null">#{shopScore},</if>
+            <if test="minPromotionDays != null">#{minPromotionDays},</if>
+            <if test="thresholdCrossBorder != null">#{thresholdCrossBorder},</if>
+            <if test="hasThreshold != null">#{hasThreshold},</if>
+            <if test="colonelBuyinId != null">#{colonelBuyinId},</if>
+            <if test="monthsOfProtection != null">#{monthsOfProtection},</if>
+            <if test="colonelName != null">#{colonelName},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
+
+    <select id="getDetailByActivityId" resultType="com.ruixuan.bytedance.entity.BytedanceColonelActivityDetail">
+        select id,
+               institution_id,
+               activity_id,
+               activity_name,
+               is_new_shop,
+               shop_type,
+               activity_desc,
+               apply_start_time,
+               apply_end_time,
+               commission_rate,
+               wechat_id,
+               phone_num,
+               estimated_single_sale,
+               activity_type,
+               specified_shop_ids,
+               categories,
+               shop_score,
+               min_promotion_days,
+               threshold_cross_border,
+               has_threshold,
+               colonel_buyin_id,
+               months_of_protection,
+               colonel_name
+        from bytedance_colonel_activity_detail
+        where activity_id = #{activityId}
+    </select>
+
+
+
+    <insert id="replaceBatchOrders">
+        replace into bytedance_order_list(
+        order_id,
+        buyer_app_id,
+        distributor_buyin_id,
+        distributor_name,
+        ads_promotion_rate,
+        product_id,
+        product_name,
+        product_img,
+        author_account,
+        author_openid,
+        shop_id,
+        shop_name,
+        total_pay_amount,
+        flow_point,
+        app,
+        update_time,
+        pay_success_time,
+        settle_time,
+        pay_goods_amount,
+        settled_goods_amount,
+        item_num,
+        refund_time,
+        author_short_id,
+        colonel_type,
+        author_buyin_id,
+        media_type,
+        commission_rate,
+        media_id,
+        is_trusteeship,
+        good_share_type,
+        colonel_commission_rate,
+        colonel_activity_id,
+        colonel_estimated_commission,
+        colonel_real_commission,
+        colonel_tech_service_fee_rate,
+        colonel_tech_service_fee,
+        colonel_settled_tech_service_fee,
+        colonel_institution_id,
+        colonel_institution_name,
+        colonel_buyin_id,
+        second_commission_rate,
+        second_activity_id,
+        second_estimated_commission,
+        second_real_commission,
+        second_institution_id,
+        second_institution_name,
+        second_colonel_buyin_id
+        )
+        values
+        <foreach collection="activityList" item="cell" separator=",">
+            (
+            #{cell.orderId},
+            #{cell.buyerAppId},
+            #{cell.distributorBuyinId},
+            #{cell.distributorName},
+            #{cell.adsPromotionRate},
+            #{cell.productId},
+            #{cell.productName},
+            #{cell.productImg},
+            #{cell.authorAccount},
+            #{cell.authorOpenid},
+            #{cell.shopId},
+            #{cell.shopName},
+            #{cell.totalPayAmount},
+            #{cell.flowPoint},
+            #{cell.app},
+            #{cell.updateTime},
+            #{cell.paySuccessTime},
+            #{cell.settleTime},
+            #{cell.payGoodsAmount},
+            #{cell.settledGoodsAmount},
+            #{cell.itemNum},
+            #{cell.refundTime},
+            #{cell.authorShortId},
+            #{cell.colonelType},
+            #{cell.authorBuyinId},
+            #{cell.mediaType},
+            #{cell.commissionRate},
+            #{cell.mediaId},
+            #{cell.isTrusteeship},
+            #{cell.goodShareType},
+            #{cell.colonelCommissionRate},
+            #{cell.colonelActivityId},
+            #{cell.colonelEstimatedCommission},
+            #{cell.colonelRealCommission},
+            #{cell.colonelTechServiceFeeRate},
+            #{cell.colonelTechServiceFee},
+            #{cell.colonelSettledTechServiceFee},
+            #{cell.colonelInstitutionId},
+            #{cell.colonelInstitutionName},
+            #{cell.colonelBuyinId},
+            #{cell.secondCommissionRate},
+            #{cell.secondActivityId},
+            #{cell.secondEstimatedCommission},
+            #{cell.secondRealCommission},
+            #{cell.secondInstitutionId},
+            #{cell.secondInstitutionName},
+            #{cell.secondColonelBuyinId}
+            )
+        </foreach>
+    </insert>
+
+</mapper>