Commit 993e1323 by fanjiaxin

推客分佣单入库

parent b0ee19e7
Pipeline #75499 failed with stages
in 26 seconds
package com.netease.yanxuan.wx.store.sharer.biz.job;
import com.netease.mail.yanxuan.dschedule.core.biz.model.ReturnT;
import com.netease.mail.yanxuan.dschedule.core.handler.IJobHandler;
import com.netease.mail.yanxuan.dschedule.core.handler.annotation.JobHandler;
import com.netease.yanxuan.wx.store.sharer.biz.service.ICommissionOrderService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @Description 微信小店佣金订单数据同步失败重试任务
* @Author fanjiaxin
* @Date 2025/3/27 19:08
*/
@Slf4j
@RequiredArgsConstructor
@Component
@JobHandler("weChatCommissionOrderFailRetryJob")
public class WeChatCommissionOrderFailRetryJob extends IJobHandler {
private final ICommissionOrderService iCommissionOrderService;
@Override
public ReturnT<String> execute(String... strings) {
log.info("[op:weChatCommissionOrderFailRetryJob] start...");
iCommissionOrderService.doCommissionOrderFailRetry();
log.info("[op:weChatCommissionOrderFailRetryJob] end...");
return ReturnT.SUCCESS;
}
}
package com.netease.yanxuan.wx.store.sharer.biz.job;
import com.netease.mail.yanxuan.dschedule.core.biz.model.ReturnT;
import com.netease.mail.yanxuan.dschedule.core.handler.IJobHandler;
import com.netease.mail.yanxuan.dschedule.core.handler.annotation.JobHandler;
import com.netease.yanxuan.wx.store.sharer.biz.service.ICommissionOrderService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @Description 微信小店佣金单数据同步任务
* @Author fanjiaxin
* @Date 2025/3/27 19:08
*/
@Slf4j
@RequiredArgsConstructor
@Component
@JobHandler("weChatCommissionOrderSyncJob")
public class WeChatCommissionOrderSyncJob extends IJobHandler {
private final ICommissionOrderService iCommissionOrderService;
@Override
public ReturnT<String> execute(String... strings) {
log.info("[op:weChatCommissionOrderSyncJob] start...");
Long syncStartTimestamp = iCommissionOrderService.getLatestCommissionSyncTimestamp();
long syncEndTimestamp = System.currentTimeMillis() / 1000;
iCommissionOrderService.doCommissionOrderSync(syncStartTimestamp, syncEndTimestamp);
log.info("[op:weChatCommissionOrderSyncJob] end...");
return ReturnT.SUCCESS;
}
}
package com.netease.yanxuan.wx.store.sharer.biz.service;
/**
* @Description 订单-业务层
* @Author fanjiaxin
* @Date 2025/3/10 12:28
*/
public interface ICommissionOrderService {
/**
* 获取最新分佣单同步时间戳
*/
Long getLatestCommissionSyncTimestamp();
/**
* 佣金订单列表同步
*/
void doCommissionOrderSync(Long startTime, Long endTime);
/**
* 佣金订单失败重试
*/
void doCommissionOrderFailRetry();
}
package com.netease.yanxuan.wx.store.sharer.biz.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.netease.yanxuan.wx.store.sharer.biz.service.ICommissionOrderService;
import com.netease.yanxuan.wx.store.sharer.dal.mapper.*;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.*;
import com.netease.yanxuan.wx.store.sharer.integration.config.WeChatConfig;
import com.netease.yanxuan.wx.store.sharer.integration.handler.impl.WeChatCommissionOrderDetailRequest;
import com.netease.yanxuan.wx.store.sharer.integration.handler.impl.WeChatCommissionOrderListRequest;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo.WeChatCommissionOrderDetailVO;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo.WeChatCommissionOrderItemVO;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo.WeChatCommissionOrderListVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
/**
* @Description 订单-业务实现类
* @Author fanjiaxin
* @Date 2025/3/10 12:31
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class CommissionOrderServiceImpl implements ICommissionOrderService {
private final SharerOrderSyncFailMapper sharerOrderSyncFailMapper;
private final SharerOrderMapper sharerOrderMapper;
private final SharerOrderProductMapper sharerOrderProductMapper;
private final SharerOrderCommissionMapper sharerOrderCommissionMapper;
private final SharerOrderCommissionSharerMapper sharerOrderCommissionSharerMapper;
private final SharerOrderCommissionSubAgencyMapper sharerOrderCommissionSubAgencyMapper;
private final SharerOrderCommissionPromoterAgencyMapper sharerOrderCommissionPromoterAgencyMapper;
private final SharerOrderCommissionFinderMapper sharerOrderCommissionFinderMapper;
private final SharerOrderCommissionTalentMapper sharerOrderCommissionTalentMapper;
private final SharerOrderBuyerMapper sharerOrderBuyerMapper;
private final WeChatConfig weChatConfig;
private final WeChatCommissionOrderListRequest weChatCommissionOrderListRequest;
private final WeChatCommissionOrderDetailRequest weChatCommissionOrderDetailRequest;
private static final int COMMISSION_ORDER_SYNC_PAGE_SIZE = 30;
private static final int COMMISSION_ORDER_SYNC_MAX_RETRY_COUNT = 5;
@Override
public Long getLatestCommissionSyncTimestamp() {
// 同步成功最大时间戳记录
LambdaQueryWrapper<SharerOrder> orderLqw = Wrappers.lambdaQuery();
orderLqw.select(SharerOrder::getOrderCreateTime);
orderLqw.orderByDesc(SharerOrder::getOrderCreateTime);
orderLqw.last("LIMIT 1");
SharerOrder sharerOrder = sharerOrderMapper.selectOne(orderLqw);
long maxTimeStamp = 0L;
if(null != sharerOrder && null != sharerOrder.getOrderCreateTime()){
maxTimeStamp = Math.max(maxTimeStamp, sharerOrder.getOrderCreateTime().getTime() / 1000);
}
return maxTimeStamp;
}
@Override
public void doCommissionOrderSync(Long startTime, Long endTime) {
WeChatCommissionOrderListVO listVO;
String nextKey = null;
while (true){
listVO = weChatCommissionOrderListRequest.handle(weChatConfig.getShopAppid(),
startTime, endTime, nextKey, COMMISSION_ORDER_SYNC_PAGE_SIZE);
if(null == listVO || CollectionUtils.isEmpty(listVO.getList())){
return;
}
nextKey = listVO.getNext_key();
for (WeChatCommissionOrderItemVO itemVO : listVO.getList()) {
// 推客分佣单入库
doSyncCommissionOrder(itemVO.getOrder_id(), itemVO.getSku_id());
}
}
}
@Override
public void doCommissionOrderFailRetry() {
int pageNum = 1;
int pageSize = 10;
Page<SharerOrderSyncFail> pageData;
LambdaQueryWrapper<SharerOrderSyncFail> failLqw = Wrappers.lambdaQuery();
failLqw.lt(SharerOrderSyncFail::getRetryCount, COMMISSION_ORDER_SYNC_MAX_RETRY_COUNT);
while (true) {
pageData = sharerOrderSyncFailMapper.selectPage(new Page<>(pageNum++, pageSize), failLqw);
if (null == pageData || CollectionUtils.isEmpty(pageData.getRecords())) {
// 如果返回值为空,直接终止循环
break;
}
for (SharerOrderSyncFail fail : pageData.getRecords()) {
LambdaQueryWrapper<SharerOrder> orderLqw = Wrappers.lambdaQuery();
orderLqw.eq(SharerOrder::getOrderId, fail.getOrderId());
orderLqw.eq(SharerOrder::getSkuId, fail.getSkuId());
Long count = sharerOrderMapper.selectCount(orderLqw);
if(null != count && count > 0){
// 已经同步,溢出失败记录
sharerOrderSyncFailMapper.deleteById(fail.getId());
continue;
}
// 推客分佣单入库
doSyncCommissionOrder(fail.getOrderId(), fail.getSkuId());
}
}
}
/**
* 推客分佣单信息入库
*/
private void doSyncCommissionOrder(String orderId, String skuId) {
WeChatCommissionOrderDetailVO detailVO;
try {
detailVO = weChatCommissionOrderDetailRequest.handle(orderId, skuId);
} catch (Exception e) {
log.error("[op:doSyncCommissionOrder] 推客分佣单获取详情异常", e);
String failMsg = StringUtils.substring(e.getMessage(), 0, 5000);
doSaveCommissionOrderSyncFail(orderId, skuId, String.join("推客分佣单获取详情异常;", failMsg));
return;
}
try {
if(null == detailVO){
log.info("[op:doSyncCommissionOrder] 推客分佣单不存在");
return;
}
doSaveCommissionOrder(detailVO);
} catch (Exception e) {
log.error("[op:doSyncCommissionOrder] 推客分佣单信息入库异常", e);
String failMsg = StringUtils.substring(e.getMessage(), 0, 5000);
doSaveCommissionOrderSyncFail(orderId, skuId, String.join("推客分佣单信息入库异常;", failMsg));
}
}
/**
* 保存分佣单同步失败记录
*/
private void doSaveCommissionOrderSyncFail(String orderId, String skuId, String failMsg) {
try {
LambdaQueryWrapper<SharerOrderSyncFail> failLqw = Wrappers.lambdaQuery();
failLqw.eq(SharerOrderSyncFail::getOrderId, orderId);
failLqw.eq(SharerOrderSyncFail::getSkuId, skuId);
failLqw.last("LIMIT 1");
SharerOrderSyncFail sharerOrderSyncFail = sharerOrderSyncFailMapper.selectOne(failLqw);
Date date = new Date();
if(null == sharerOrderSyncFail){
sharerOrderSyncFail = new SharerOrderSyncFail();
sharerOrderSyncFail.setOrderId(orderId);
sharerOrderSyncFail.setSkuId(skuId);
sharerOrderSyncFail.setRetryCount(0);
sharerOrderSyncFail.setFailMsg(failMsg);
sharerOrderSyncFail.setCreateTime(date);
sharerOrderSyncFail.setUpdateTime(date);
sharerOrderSyncFailMapper.insert(sharerOrderSyncFail);
}else{
LambdaUpdateWrapper<SharerOrderSyncFail> failLuw = Wrappers.lambdaUpdate();
failLuw.setSql("retry_count = retry_count + 1");
failLuw.set(SharerOrderSyncFail::getFailMsg, failMsg);
failLuw.set(SharerOrderSyncFail::getUpdateTime, date);
failLuw.eq(SharerOrderSyncFail::getId, sharerOrderSyncFail.getId());
sharerOrderSyncFailMapper.update(null, failLuw);
}
} catch (Exception e) {
log.error("[op:doSaveCommissionOrderSyncFail] 保存分佣单同步失败记录异常", e);
}
}
/**
* 保存分佣单
*/
private void doSaveCommissionOrder(WeChatCommissionOrderDetailVO detailVO){
if(null == detailVO){
return;
}
SharerOrder sharerOrder = new SharerOrder();
sharerOrder.setOrderId(detailVO.getOrder_id());
sharerOrder.setSkuId(String.valueOf(detailVO.getSku_id()));
sharerOrder.setCommissionStatus(String.valueOf(detailVO.getStatus()));
String orderStatus = null;
try {
orderStatus = String.valueOf(detailVO.getOrder_detail().getOrder_info().getStatus());
}catch (Exception e){
log.error("[op:doSaveCommissionOrder] 分佣单状态转换异常", e);
}
sharerOrder.setOrderStatus(orderStatus);
sharerOrder.setOrderCreateTime(getDate(detailVO.getCreate_time()));
sharerOrder.setOrderUpdateTime(getDate(detailVO.getUpdate_time()));
sharerOrder.setCreateTime(new Date());
sharerOrderMapper.insert(sharerOrder);
WeChatCommissionOrderDetailVO.OrderDetailVO orderDetail = detailVO.getOrder_detail();
if(null == orderDetail){
log.info("[op:doSaveCommissionOrder] orderDetail is null");
return;
}
// 商品信息
doSaveCommissionOrderProduct(orderDetail, sharerOrder.getId());
// 分佣信息
doSaveCommissionOrderCommission(orderDetail.getCommission_info(), sharerOrder.getId());
// 买家信息
doSaveCommissionOrderBuyer(orderDetail.getBuyer_info(), sharerOrder.getId());
}
/**
* 商品信息
*/
private void doSaveCommissionOrderProduct(WeChatCommissionOrderDetailVO.OrderDetailVO detailVO,
Long sharerOrderId){
WeChatCommissionOrderDetailVO.ProductInfoVO productInfo = detailVO.getProduct_info();
if(null == productInfo){
log.info("[op:doSaveCommissionOrderProduct] productInfo is null");
return;
}
SharerOrderProduct productInfoPO = new SharerOrderProduct();
productInfoPO.setSharerOrderId(sharerOrderId);
productInfoPO.setShopAppid(null != detailVO.getShop_info() ? detailVO.getShop_info().getAppid() : null);
productInfoPO.setProductId(productInfo.getProduct_id());
productInfoPO.setThumbImg(productInfo.getThumb_img());
productInfoPO.setActualPayment(productInfo.getActual_payment());
productInfoPO.setTitle(productInfo.getTitle());
sharerOrderProductMapper.insert(productInfoPO);
}
/**
* 分佣信息
*/
private void doSaveCommissionOrderCommission(WeChatCommissionOrderDetailVO.CommissionInfoVO commissionInfo,
Long sharerOrderId){
if(null == commissionInfo){
log.info("[op:doSaveCommissionOrderCommission] commissionInfo is null");
return;
}
SharerOrderCommission commissionInfoPO = new SharerOrderCommission();
commissionInfoPO.setSharerOrderId(sharerOrderId);
commissionInfoPO.setServiceRatio(commissionInfo.getService_ratio());
commissionInfoPO.setServiceAmount(commissionInfo.getService_amount());
commissionInfoPO.setProfitShardingSucTime(getDate(commissionInfo.getProfit_sharding_suc_time()));
commissionInfoPO.setPromotionChannel(commissionInfo.getPromotion_channel());
commissionInfoPO.setPromotionInfo(JSON.toJSONString(commissionInfo.getPromotion_info()));
sharerOrderCommissionMapper.insert(commissionInfoPO);
// 分佣推客
doSaveCommissionOrderCommissionSharer(commissionInfo.getSharer_info(), sharerOrderId, commissionInfoPO.getId());
// 分佣带货机构
doSaveCommissionOrderCommissionSubAgency(commissionInfo.getSub_agency_info(), sharerOrderId, commissionInfoPO.getId());
// 分佣推客机构
doSaveCommissionOrderCommissionPromoterAgency(commissionInfo.getPromoter_agency_info(), sharerOrderId, commissionInfoPO.getId());
// 分佣视频号达人信息
doSaveCommissionOrderCommissionFinder(commissionInfo.getFinder_info(), sharerOrderId, commissionInfoPO.getId());
// 分佣新带货达人信息
doSaveCommissionOrderCommissionTalent(commissionInfo.getTalent_info(), sharerOrderId, commissionInfoPO.getId());
}
/**
* 分佣推客
*/
private void doSaveCommissionOrderCommissionSharer(WeChatCommissionOrderDetailVO.SharerInfoVO sharerInfo,
Long sharerOrderId, Long sharerOrderCommissionId){
if(null == sharerInfo){
log.info("[op:doSaveCommissionOrderCommissionSharer] sharerInfo is null");
return;
}
SharerOrderCommissionSharer sharerInfoPO = new SharerOrderCommissionSharer();
sharerInfoPO.setSharerOrderId(sharerOrderId);
sharerInfoPO.setSharerOrderCommissionId(sharerOrderCommissionId);
sharerInfoPO.setSharerAppid(sharerInfo.getSharer_appid());
sharerInfoPO.setNickname(sharerInfo.getNickname());
sharerInfoPO.setRatio(sharerInfo.getRatio());
sharerInfoPO.setAmount(sharerInfo.getAmount());
sharerInfoPO.setOpensharerid(sharerInfo.getOpensharerid());
sharerOrderCommissionSharerMapper.insert(sharerInfoPO);
}
/**
* 分佣带货机构
*/
private void doSaveCommissionOrderCommissionSubAgency(WeChatCommissionOrderDetailVO.AgencyInfoVO agencyInfo,
Long sharerOrderId, Long sharerOrderCommissionId){
if(null == agencyInfo){
log.info("[op:doSaveCommissionOrderCommissionSubAgency] agencyInfo is null");
return;
}
SharerOrderCommissionSubAgency agencyInfoPO = new SharerOrderCommissionSubAgency();
agencyInfoPO.setSharerOrderId(sharerOrderId);
agencyInfoPO.setSharerOrderCommissionId(sharerOrderCommissionId);
agencyInfoPO.setAppid(agencyInfo.getAppid());
agencyInfoPO.setNickname(agencyInfo.getNickname());
agencyInfoPO.setRatio(agencyInfo.getRatio());
agencyInfoPO.setAmount(agencyInfo.getAmount());
agencyInfoPO.setProfitShardingSucTime(getDate(agencyInfo.getProfit_sharding_suc_time()));
sharerOrderCommissionSubAgencyMapper.insert(agencyInfoPO);
}
/**
* 分佣推客机构
*/
private void doSaveCommissionOrderCommissionPromoterAgency(WeChatCommissionOrderDetailVO.AgencyInfoVO agencyInfo,
Long sharerOrderId, Long sharerOrderCommissionId){
if(null == agencyInfo){
log.info("[op:doSaveCommissionOrderCommissionPromoterAgency] agencyInfo is null");
return;
}
SharerOrderCommissionPromoterAgency agencyInfoPO = new SharerOrderCommissionPromoterAgency();
agencyInfoPO.setSharerOrderId(sharerOrderId);
agencyInfoPO.setSharerOrderCommissionId(sharerOrderCommissionId);
agencyInfoPO.setAppid(agencyInfo.getAppid());
agencyInfoPO.setNickname(agencyInfo.getNickname());
agencyInfoPO.setRatio(agencyInfo.getRatio());
agencyInfoPO.setAmount(agencyInfo.getAmount());
agencyInfoPO.setProfitShardingSucTime(getDate(agencyInfo.getProfit_sharding_suc_time()));
sharerOrderCommissionPromoterAgencyMapper.insert(agencyInfoPO);
}
/**
* 分佣视频号达人信息
*/
private void doSaveCommissionOrderCommissionFinder(WeChatCommissionOrderDetailVO.FinderInfoVO finderInfo,
Long sharerOrderId, Long sharerOrderCommissionId){
if(null == finderInfo){
log.info("[op:doSaveCommissionOrderCommissionFinder] finderInfo is null");
return;
}
SharerOrderCommissionFinder finderInfoPO = new SharerOrderCommissionFinder();
finderInfoPO.setSharerOrderId(sharerOrderId);
finderInfoPO.setSharerOrderCommissionId(sharerOrderCommissionId);
finderInfoPO.setNickname(finderInfo.getNickname());
finderInfoPO.setRatio(finderInfo.getRatio());
finderInfoPO.setAmount(finderInfo.getAmount());
finderInfoPO.setOpenfinderid(finderInfo.getOpenfinderid());
sharerOrderCommissionFinderMapper.insert(finderInfoPO);
}
/**
* 分佣新带货达人信息
*/
private void doSaveCommissionOrderCommissionTalent(WeChatCommissionOrderDetailVO.TalentInfoVO talentInfo,
Long sharerOrderId, Long sharerOrderCommissionId){
if(null == talentInfo){
log.info("[op:doSaveCommissionOrderCommissionTalent] talentInfo is null");
return;
}
SharerOrderCommissionTalent sharerOrderCommissionTalent = new SharerOrderCommissionTalent();
sharerOrderCommissionTalent.setSharerOrderId(sharerOrderId);
sharerOrderCommissionTalent.setSharerOrderCommissionId(sharerOrderCommissionId);
sharerOrderCommissionTalent.setTalent_appid(talentInfo.getTalent_appid());
sharerOrderCommissionTalent.setNickname(talentInfo.getNickname());
sharerOrderCommissionTalent.setRatio(talentInfo.getRatio());
sharerOrderCommissionTalent.setAmount(talentInfo.getAmount());
sharerOrderCommissionTalent.setOpentalentid(talentInfo.getOpentalentid());
sharerOrderCommissionTalentMapper.insert(sharerOrderCommissionTalent);
}
/**
* 买家信息
*/
private void doSaveCommissionOrderBuyer(WeChatCommissionOrderDetailVO.BuyerInfoVO buyerInfo,
Long sharerOrderId){
if(null == buyerInfo){
log.info("[op:doSaveCommissionOrderBuyer] buyerInfo is null");
return;
}
SharerOrderBuyer buyerInfoPO = new SharerOrderBuyer();
buyerInfoPO.setSharerOrderId(sharerOrderId);
buyerInfoPO.setOpenId(buyerInfo.getOpen_id());
buyerInfoPO.setUnionId(buyerInfo.getUnion_id());
sharerOrderBuyerMapper.insert(buyerInfoPO);
}
private Date getDate(Long wechatTime){
return new Date(wechatTime * 1000);
}
}
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderBuyer;
/**
* 推客佣金单买家表Mapper
*/
public interface SharerOrderBuyerMapper extends BaseMapper<SharerOrderBuyer> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderCommissionFinder;
/**
* 推客佣金单分佣视频号达人表Mapper
*/
public interface SharerOrderCommissionFinderMapper extends BaseMapper<SharerOrderCommissionFinder> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderCommission;
/**
* 推客佣金单分佣表Mapper
*/
public interface SharerOrderCommissionMapper extends BaseMapper<SharerOrderCommission> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderCommissionPromoterAgency;
/**
* 推客佣金单分佣推客机构表Mapper
*/
public interface SharerOrderCommissionPromoterAgencyMapper extends BaseMapper<SharerOrderCommissionPromoterAgency> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderCommissionSharer;
/**
* 推客佣金单分佣推客表Mapper
*/
public interface SharerOrderCommissionSharerMapper extends BaseMapper<SharerOrderCommissionSharer> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderCommissionSubAgency;
/**
* 推客佣金单分佣帮卖机构表Mapper
*/
public interface SharerOrderCommissionSubAgencyMapper extends BaseMapper<SharerOrderCommissionSubAgency> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderCommissionTalent;
/**
* 推客佣金单分佣达人表Mapper
*/
public interface SharerOrderCommissionTalentMapper extends BaseMapper<SharerOrderCommissionTalent> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrder;
/**
* 推客佣金单表Mapper
*/
public interface SharerOrderMapper extends BaseMapper<SharerOrder> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderProduct;
/**
* 推客佣金单商品表Mapper
*/
public interface SharerOrderProductMapper extends BaseMapper<SharerOrderProduct> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.netease.yanxuan.wx.store.sharer.dal.meta.model.po.SharerOrderSyncFail;
/**
* 推客佣金单同步失败表Mapper
*/
public interface SharerOrderSyncFailMapper extends BaseMapper<SharerOrderSyncFail> {
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* 推客佣金单表
*/
@Data
@TableName("SHARER_ORDER")
public class SharerOrder {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 订单号
*/
private String orderId;
/**
* 商品skuid
*/
private String skuId;
/**
* 佣金单状态
*/
private String commissionStatus;
/**
* 订单状态
*/
private String orderStatus;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单更新时间
*/
private Date orderUpdateTime;
/**
* 创建时间
*/
private Date createTime;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 推客佣金单买家表
*/
@Data
@TableName("SHARER_ORDER_BUYER")
public class SharerOrderBuyer {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 购买者的openid
*/
private String openId;
/**
* 购买者的unionid
*/
private String unionId;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* 推客佣金单分佣表
*/
@Data
@TableName("SHARER_ORDER_COMMSSION")
public class SharerOrderCommission {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 服务费率[0, 1000000]
*/
private Integer serviceRatio;
/**
* 服务费金额
*/
private Integer serviceAmount;
/**
* 服务费结算时间
*/
private Date profitShardingSucTime;
/**
* 0-橱窗带货,1-推客带货
*/
private Integer promotionChannel;
/**
* 作为推客的时候,推广的一些参数
*/
private String promotionInfo;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 推客佣金单分佣视频号达人表
*/
@Data
@TableName("SHARER_ORDER_COMMSSION_FINDER")
public class SharerOrderCommissionFinder {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 佣金单分佣ID
*/
private Long sharerOrderCommissionId;
/**
* 视频号昵称
*/
private String nickname;
/**
* 佣金率[0, 1000000]
*/
private Integer ratio;
/**
* 佣金
*/
private Integer amount;
/**
* 视频号openfinderid
*/
private String openfinderid;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* 推客佣金单分佣推客机构表
*/
@Data
@TableName("SHARER_ORDER_COMMSSION_PROMOTER_AGENCY")
public class SharerOrderCommissionPromoterAgency {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 佣金单分佣ID
*/
private Long sharerOrderCommissionId;
/**
* 推客机构appid
*/
private String appid;
/**
* 推客机构昵称
*/
private String nickname;
/**
* 推客机构服务费率[0, 1000000]
*/
private Integer ratio;
/**
* 推客机构服务费
*/
private Integer amount;
/**
* 推客机构服务费结算时间
*/
private Date profitShardingSucTime;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 推客佣金单分佣推客表
*/
@Data
@TableName("SHARER_ORDER_COMMSSION_SHARER")
public class SharerOrderCommissionSharer {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 佣金单分佣ID
*/
private Long sharerOrderCommissionId;
/**
* 推客appid
*/
private String sharerAppid;
/**
* 推客昵称
*/
private String nickname;
/**
* 推客佣金率[0, 1000000]
*/
private Integer ratio;
/**
* 推客佣金
*/
private Integer amount;
/**
* 推客的opensharerid
*/
private String opensharerid;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* 推客佣金单分佣帮卖机构表
*/
@Data
@TableName("SHARER_ORDER_COMMSSION_SUB_AGENCY")
public class SharerOrderCommissionSubAgency {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 佣金单分佣ID
*/
private Long sharerOrderCommissionId;
/**
* 帮卖机构appid
*/
private String appid;
/**
* 帮卖机构昵称
*/
private String nickname;
/**
* 帮卖机构服务费率[0, 1000000]
*/
private Integer ratio;
/**
* 帮卖机构服务费
*/
private Integer amount;
/**
* 帮卖机构服务费结算时间
*/
private Date profitShardingSucTime;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 推客佣金单分佣达人表
*/
@Data
@TableName("SHARER_ORDER_COMMSSION_TALENT")
public class SharerOrderCommissionTalent {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 佣金单分佣ID
*/
private Long sharerOrderCommissionId;
/**
* 新带货达人appid
*/
private String talent_appid;
/**
* 达人昵称
*/
private String nickname;
/**
* 达人佣金率[0, 1000000]
*/
private Integer ratio;
/**
* 达人佣金
*/
private Integer amount;
/**
* 带货助手的opentalentid
*/
private String opentalentid;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 推客佣金单商品表
*/
@Data
@TableName("SHARER_ORDER_PRODUCT")
public class SharerOrderProduct {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 佣金单ID
*/
private Long sharerOrderId;
/**
* 店铺ID
*/
private String shopAppid;
/**
* 商品id
*/
private String productId;
/**
* sku小图
*/
private String thumbImg;
/**
* 可分佣金额
*/
private Integer actualPayment;
/**
* 商品标题
*/
private String title;
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.dal.meta.model.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* 推客佣金单同步失败表
*/
@Data
@TableName("SHARER_ORDER_SYNC_FAIL")
public class SharerOrderSyncFail {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 订单号
*/
private String orderId;
/**
* 商品skuid
*/
private String skuId;
/**
* 重试次数
*/
private Integer retryCount;
/**
* 失败信息
*/
private String failMsg;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
\ No newline at end of file
......@@ -68,4 +68,17 @@ public class WeChatApi {
* 设置推客的单个商品的分佣比例信息
*/
public static final String SET_SHARER_PRODUCT_COMMISSION_INFO = "/channels/ec/promoter/set_sharer_product_commission_info";
// -------------------------------------- 分佣单 --------------------------------------
/**
* 获取分佣单列表
*/
public static final String GET_COMMISSION_ORDER_LIST = "/channels/ec/league/headsupplier/order/list/get";
/**
* 获取分佣单详情
*/
public static final String GET_COMMISSION_ORDER_DETAIL = "/channels/ec/league/headsupplier/order/get";
}
package com.netease.yanxuan.wx.store.sharer.integration.handler.impl;
import com.alibaba.fastjson.JSONObject;
import com.netease.yanxuan.wx.store.sharer.integration.config.WeChatConfig;
import com.netease.yanxuan.wx.store.sharer.integration.constant.WeChatApi;
import com.netease.yanxuan.wx.store.sharer.integration.core.WeChatContextHolder;
import com.netease.yanxuan.wx.store.sharer.integration.handler.IWeChatRequest;
import com.netease.yanxuan.wx.store.sharer.integration.handler.WeChatRestTemplateHandler;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.bo.WeChatCommissionOrderDetailBO;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo.WeChatCommissionOrderDetailVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
/**
* @Description 微信小店-分佣单详情请求
* @Author fanjiaxin
* @Date 2025/3/11 17:33
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class WeChatCommissionOrderDetailRequest implements IWeChatRequest {
private final WeChatContextHolder weChatContextHolder;
private final WeChatRestTemplateHandler weChatRestTemplateHandler;
private final WeChatConfig weChatConfig;
@Override
public HttpMethod getRequestMethod() {
return HttpMethod.POST;
}
@Override
public String getRequestUrl() {
return weChatConfig.getUrl() + WeChatApi.GET_COMMISSION_ORDER_DETAIL
+ "?" + WeChatApi.WECHAT_REQUEST_TOKEN_FIELD_NAME + "="
+ weChatContextHolder.getShopAccessToken();
}
/**
* 处理
*/
public WeChatCommissionOrderDetailVO handle(String orderId, String skuId) {
WeChatCommissionOrderDetailBO params = WeChatCommissionOrderDetailBO.builder()
.order_id(orderId)
.sku_id(skuId)
.build();
log.info("[op:WeChatCommissionOrderDetailRequest.handle] requestParam={}", JSONObject.toJSONString(params));
WeChatCommissionOrderDetailVO res = weChatRestTemplateHandler.execute(getRequestUrl(), getRequestMethod(),
params, WeChatCommissionOrderDetailVO.class);
log.info("[op:WeChatCommissionOrderDetailRequest.res] res={}", JSONObject.toJSONString(res));
return res;
}
}
package com.netease.yanxuan.wx.store.sharer.integration.handler.impl;
import com.alibaba.fastjson.JSONObject;
import com.netease.yanxuan.wx.store.sharer.integration.config.WeChatConfig;
import com.netease.yanxuan.wx.store.sharer.integration.constant.WeChatApi;
import com.netease.yanxuan.wx.store.sharer.integration.core.WeChatContextHolder;
import com.netease.yanxuan.wx.store.sharer.integration.handler.IWeChatRequest;
import com.netease.yanxuan.wx.store.sharer.integration.handler.WeChatRestTemplateHandler;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.bo.WeChatCommissionOrderListBO;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.bo.WeChatTimeRangeBO;
import com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo.WeChatCommissionOrderListVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
/**
* @Description 微信小店-分佣单列表请求
* @Author fanjiaxin
* @Date 2025/3/11 17:33
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class WeChatCommissionOrderListRequest implements IWeChatRequest {
private final WeChatContextHolder weChatContextHolder;
private final WeChatRestTemplateHandler weChatRestTemplateHandler;
private final WeChatConfig weChatConfig;
@Override
public HttpMethod getRequestMethod() {
return HttpMethod.POST;
}
@Override
public String getRequestUrl() {
return weChatConfig.getUrl() + WeChatApi.GET_COMMISSION_ORDER_LIST
+ "?" + WeChatApi.WECHAT_REQUEST_TOKEN_FIELD_NAME + "="
+ weChatContextHolder.getShopAccessToken();
}
/**
* 处理
*/
public WeChatCommissionOrderListVO handle(String shopAppid, Long startTime, Long endTime, String nextKey, Integer pageSize) {
WeChatCommissionOrderListBO params = WeChatCommissionOrderListBO.builder()
.appid(shopAppid)
.create_time_range(WeChatTimeRangeBO.builder().start_time(startTime).end_time(endTime).build())
.next_key(nextKey)
.page_size(pageSize)
.build();
log.info("[op:WeChatCommissionOrderListRequest.handle] requestParam={}", JSONObject.toJSONString(params));
WeChatCommissionOrderListVO res = weChatRestTemplateHandler.execute(getRequestUrl(), getRequestMethod(),
params, WeChatCommissionOrderListVO.class);
log.info("[op:WeChatCommissionOrderListRequest.res] res={}", JSONObject.toJSONString(res));
return res;
}
}
package com.netease.yanxuan.wx.store.sharer.integration.meta.model.bo;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 分佣单详情-业务对象
* @Author fanjiaxin
* @Date 2025/3/11 18:43
*/
@Data
@Builder
public class WeChatCommissionOrderDetailBO implements Serializable {
private static final long serialVersionUID = 1996751915518651231L;
/**
* 订单ID
*/
private String order_id;
/**
* 商品SKU ID
*/
private String sku_id;
}
package com.netease.yanxuan.wx.store.sharer.integration.meta.model.bo;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 分佣单列表-业务对象
* @Author fanjiaxin
* @Date 2025/3/11 18:43
*/
@Data
@Builder
public class WeChatCommissionOrderListBO implements Serializable {
private static final long serialVersionUID = 1996751915518651231L;
/**
* 佣金单所属小店appid
*/
private String appid;
/**
* 创建时间范围
*/
private WeChatTimeRangeBO create_time_range;
/**
* 分页参数,第一页为空,后面返回前面一页返回的数据
*/
private String next_key;
/**
* 一页获取多少个推客,最大 30
*/
private Integer page_size;
}
package com.netease.yanxuan.wx.store.sharer.integration.meta.model.bo;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 时间范围-业务对象
* @Author fanjiaxin
* @Date 2025/3/11 18:43
*/
@Data
@Builder
public class WeChatTimeRangeBO implements Serializable {
private static final long serialVersionUID = 1996751915518651231L;
/**
* 开始时间,秒级时间戳
*/
private Long start_time;
/**
* 结束时间,秒级时间戳
*/
private Long end_time;
}
package com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo;
import lombok.Data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* @Description 分佣单列表项-视图对象
* @Author fanjiaxin
* @Date 2025/5/11 19:05
*/
@Data
public class WeChatCommissionOrderDetailVO extends WeChatCoreVO {
private static final long serialVersionUID = 8529644543147459802L;
/**
* 订单号
*/
private String order_id;
/**
* 商品skuid
*/
private Long sku_id;
/**
* 秒级时间戳
*/
private Long create_time;
/**
* 秒级时间戳
*/
private Long update_time;
/**
* 佣金单状态,枚举值详情请参考 CommissionOrderStatus
*/
private Integer status;
/**
* 订单详情,结构体详情请参考OrderDetail
*/
private OrderDetailVO order_detail;
@Data
public class OrderDetailVO {
/**
* 小店商家信息,结构体详情请参考BizInfo
*/
private BizInfoVO shop_info;
/**
* 佣金单商品信息,结构体详情请参考 ProductInfo
*/
private ProductInfoVO product_info;
/**
* 订单信息,结构体详情请参考 OrderInfo
*/
private OrderInfoVO order_info;
/**
* 分佣信息,结构体详情请参考 CommissionInfo
*/
private CommissionInfoVO commission_info;
/**
* 买家信息,结构体详情请参考 BuyerInfo
*/
private BuyerInfoVO buyer_info;
}
@Data
public class BizInfoVO {
/**
* 所属小店appid
*/
private String appid;
}
@Data
public class ProductInfoVO {
/**
* 商品id
*/
private String product_id;
/**
* sku小图
*/
private String thumb_img;
/**
* 可分佣金额
*/
private Integer actual_payment;
/**
* 商品标题
*/
private String title;
}
@Data
public class OrderInfoVO {
/**
* 订单状态,枚举值详情请参考OrderStatus
*/
private Integer status;
}
@Data
public class CommissionInfoVO {
/**
* 视频号达人信息,结构体详情请参考 FinderInfo
*/
private FinderInfoVO finder_info;
/**
* 服务费率[0, 1000000]
*/
private Integer service_ratio;
/**
* 服务费金额
*/
private Integer service_amount;
/**
* 服务费结算时间
*/
private Long profit_sharding_suc_time;
/**
* 0-橱窗带货,1-推客带货
*/
private Integer promotion_channel;
/**
* 推客分佣信息,结构体详情请参考 SharerInfo
*/
private SharerInfoVO sharer_info;
/**
* 新带货达人信息,结构体详情请参考 TalentInfo
*/
private TalentInfoVO talent_info;
/**
* 作为推客的时候,推广的一些参数,结构体详情请参考 PromotionInfo
*/
private PromotionInfoVO promotion_info;
/**
* 帮卖机构分佣,结构体详情请参考 AgencyInfo
*/
private AgencyInfoVO sub_agency_info;
/**
* 推客机构分佣,结构体详情请参考 AgencyInfo
*/
private AgencyInfoVO promoter_agency_info;
}
@Data
public class BuyerInfoVO {
/**
* 购买者的openid
*/
private String open_id;
/**
* 购买者的unionid
*/
private String union_id;
}
@Data
public class FinderInfoVO {
/**
* 视频号昵称
*/
private String nickname;
/**
* 佣金率[0, 1000000]
*/
private Integer ratio;
/**
* 佣金
*/
private Integer amount;
/**
* 视频号openfinderid
*/
private String openfinderid;
}
@Data
public class SharerInfoVO {
/**
* 推客appid
*/
private String sharer_appid;
/**
* 推客昵称
*/
private String nickname;
/**
* 佣金率[0, 1000000]
*/
private Integer ratio;
/**
* 佣金
*/
private Integer amount;
/**
* 推客的opensharerid
*/
private String opensharerid;
}
@Data
public class TalentInfoVO {
/**
* 新带货达人appid
*/
private String talent_appid;
/**
* 达人昵称
*/
private String nickname;
/**
* 佣金率[0, 1000000]
*/
private Integer ratio;
/**
* 佣金
*/
private Integer amount;
/**
* 带货助手的opentalentid
*/
private String opentalentid;
}
@Data
public class AgencyInfoVO {
/**
* 机构appid
*/
private String appid;
/**
* 帮卖机构昵称
*/
private String nickname;
/**
* 服务费率[0, 1000000]
*/
private Integer ratio;
/**
* 服务费
*/
private Integer amount;
/**
* 服务费结算时间
*/
private Long profit_sharding_suc_time;
}
@Data
public class PromotionInfoVO {
/**
* 推客推广的类型 【0:无 3:私域商品推广 4:带货内容推广 6:自营内容推广】
*/
private Integer channel_type;
/**
* 推广渠道来自视频号时的视频号信息
*/
private PromotionFinderInfoVO finder_info;
/**
* 推广渠道来自公众号的公众号信息
*/
private PromotionMpInfoVO mp_info;
/**
* 推广渠道来自带货内容推广时的带货助手信息
*/
private PromotionTalentInfoVO talent_info;
}
@Data
public class PromotionTalentInfoVO {
/**
* 带货助手的appid
*/
private String talent_appid;
/**
* 达人昵称
*/
private String nickname;
/**
* 带货助手的opentalentid
*/
private String opentalentid;
}
@Data
public class PromotionFinderInfoVO {
/**
* 视频号 id
*/
private String finder_id;
/**
* 昵称
*/
private String nickname;
/**
* 视频号的openfinderid
*/
private String openfinderid;
}
@Data
public class PromotionMpInfoVO {
/**
* 公众号的 appid
*/
private String appid;
/**
* 昵称
*/
private String nickname;
}
/**
* 佣金单状态枚举类
*/
@Getter
@RequiredArgsConstructor
public enum CommissionOrderStatus {
WAITING_SETTLEMENT(20, "待结算"),
SETTLED(100, "已结算"),
CANCELED(200, "取消结算");
private final Integer code;
private final String description;
}
/**
* 订单状态枚举类
*/
@Getter
@RequiredArgsConstructor
public enum OrderStatus {
PENDING_PAYMENT(10, "待付款"),
AWAITING_GIFT_RECEIPT(12, "待收礼"),
PENDING_SHIPMENT(20, "待发货"),
PARTIALLY_SHIPPED(21, "部分发货"),
PENDING_DELIVERY(30, "待收货"),
COMPLETED(100, "完成"),
CANCELLED_AFTER_FULL_AFTERSALES(200, "全部商品售后之后,订单取消"),
CANCELLED_DUE_TO_NON_PAYMENT(250, "未付款用户主动取消或超时未付款订单自动取消");
private final Integer code;
private final String description;
}
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 分佣单列表项-视图对象
* @Author fanjiaxin
* @Date 2025/5/11 19:05
*/
@Data
public class WeChatCommissionOrderItemVO implements Serializable {
private static final long serialVersionUID = 8529644543147459802L;
/**
* 订单ID
*/
private String order_id;
/**
* 商品SKU ID
*/
private String sku_id;
}
package com.netease.yanxuan.wx.store.sharer.integration.meta.model.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @Description 分佣单列表-视图对象
* @Author fanjiaxin
* @Date 2025/5/11 19:05
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WeChatCommissionOrderListVO extends WeChatCoreVO {
private static final long serialVersionUID = 8529644543147459802L;
/**
* 是否还有剩余商品
*/
private Boolean has_more;
/**
* 分页参数,第一页为空,后面返回前面一页返回的数据
*/
private String next_key;
/**
* 集合
*/
private List<WeChatCommissionOrderItemVO> list;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment