提交 955bf612 authored 作者: 吕本才's avatar 吕本才

1、增加退换货代码

2、优化调整部分代码
上级 5d9c9c8c
package com.sfa.job.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "wangdiantong")
public class WangdiantongConfig {
private String url;
private String sid;
private String key;
private String salt;
private String appsecret;
}
......@@ -2,7 +2,7 @@ package com.sfa.job.controller.finance;
import cn.hutool.core.date.DateUtil;
import com.sfa.common.core.web.controller.BaseController;
import com.sfa.job.pojo.response.FinanceSyncOrderDetailDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
import com.sfa.job.service.order.FinanceOrderSyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -24,16 +24,27 @@ public class FinanceOrderDetailSyncController extends BaseController {
@Autowired
private FinanceOrderSyncService syncService;
@GetMapping("/syncWangdiantongOrderDetail")
public FinanceSyncOrderDetailDto syncWangdiantongOrderDetail(Date startTime, Date endTime) {
@GetMapping("/syncWdtOrderDetail")
public SyncOrderDetailDto syncWangdiantongOrderDetail(Date startTime, Date endTime) {
log.info("接口开始同步-旺店通订单明细api接口数据");
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
FinanceSyncOrderDetailDto detailDto = syncService.syncWangdiantongOrder(startTime, endTime, 1);
SyncOrderDetailDto detailDto = syncService.syncWdtOrder(startTime, endTime, 1);
log.info("接口结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}",
detailDto.getOrderCount(),detailDto.getOrderDetailCount(),detailDto.getBatchNo(),
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()) );
return detailDto;
}
@GetMapping("/syncWdtRefundOrder")
public SyncOrderDetailDto syncWdtRefundOrder(Date startTime, Date endTime) {
log.info("接口开始同步-旺店通退换订单明细api接口数据");
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
SyncOrderDetailDto detailDto = syncService.syncWdtRefundOrder(startTime, endTime, 1);
log.info("接口结束同步-旺店通退换订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}",
detailDto.getOrderCount(),detailDto.getOrderDetailCount(),detailDto.getBatchNo(),
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()) );
return detailDto;
}
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtRefundOrder;
import java.util.List;
public interface WdtRefundOrderDao {
void saveOrUpdateBatch(List<WdtRefundOrder> mergeList);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtRefundOrderDetail;
import java.util.List;
public interface WdtRefundOrderDetailDao {
void saveOrUpdateBatch(List<WdtRefundOrderDetail> mergeList);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtSwapOrder;
import java.util.List;
public interface WdtSwapOrderDao {
void saveOrUpdateBatch(List<WdtSwapOrder> mergeList);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtSwapOrderDetail;
import java.util.List;
public interface WdtSwapOrderDetailDao {
void saveOrUpdateBatch(List<WdtSwapOrderDetail> mergeList);
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.WdtRefundOrderDao;
import com.sfa.job.domain.order.entity.WdtRefundOrder;
import com.sfa.job.domain.order.mapper.WdtRefundOrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("Bi")
@Repository
public class WdtRefundOrderDaoImpl implements WdtRefundOrderDao {
private static final int BATCH_SIZE = 1000;
@Autowired
private WdtRefundOrderMapper wdtRefundOrderMapper;
@Override
public void saveOrUpdateBatch(List<WdtRefundOrder> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<WdtRefundOrder> batchLists = mergeList.subList(i, toIndex);
wdtRefundOrderMapper.saveOrUpdateBatch(batchLists);
}
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.WdtRefundOrderDetailDao;
import com.sfa.job.domain.order.entity.WdtRefundOrderDetail;
import com.sfa.job.domain.order.mapper.WdtRefundOrderDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("Bi")
@Repository
public class WdtRefundOrderDetailDaoImpl implements WdtRefundOrderDetailDao {
private static final int BATCH_SIZE = 1000;
@Autowired
private WdtRefundOrderDetailMapper wdtRefundOrderDetailMapper;
@Override
public void saveOrUpdateBatch(List<WdtRefundOrderDetail> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<WdtRefundOrderDetail> batchLists = mergeList.subList(i, toIndex);
wdtRefundOrderDetailMapper.saveOrUpdateBatch(batchLists);
}
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.WdtSwapOrderDao;
import com.sfa.job.domain.order.entity.WdtSwapOrder;
import com.sfa.job.domain.order.mapper.WdtSwapOrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("Bi")
@Repository
public class WdtSwapOrderDaoImpl implements WdtSwapOrderDao {
private static final int BATCH_SIZE = 1000;
@Autowired
private WdtSwapOrderMapper swapOrderMapper;
@Override
public void saveOrUpdateBatch(List<WdtSwapOrder> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<WdtSwapOrder> batchLists = mergeList.subList(i, toIndex);
swapOrderMapper.saveOrUpdateBatch(batchLists);
}
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.WdtSwapOrderDetailDao;
import com.sfa.job.domain.order.entity.WdtSwapOrderDetail;
import com.sfa.job.domain.order.mapper.WdtSwapOrderDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("Bi")
@Repository
public class WdtSwapOrderDetailDaoImpl implements WdtSwapOrderDetailDao {
private static final int BATCH_SIZE = 1000;
@Autowired
private WdtSwapOrderDetailMapper swapOrderDetailMapper;
@Override
public void saveOrUpdateBatch(List<WdtSwapOrderDetail> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<WdtSwapOrderDetail> batchLists = mergeList.subList(i, toIndex);
swapOrderDetailMapper.saveOrUpdateBatch(batchLists);
}
}
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName(value = "wdt_refund_amount_detail")
public class WdtRefundAmountDetail {
private Integer recId; // 金额明细记录id
private Integer refundId; // 退换单id
private Integer refundType; // 退换类型 1:货款 2:邮费 99:返现
private Integer isReturn; // 金额流向 0:商家->买家 1:买家->商家
private BigDecimal refundAmount; // 退款金额
private BigDecimal receiveAmount; // 收款金额
private Boolean isGuarantee; // 是否担保支付
private Integer accountId; // 支付账户
private String payAccount; // 买家账号(仅自有平台及线下平台返回)
private String accountName; // 买家开户人姓名
private String accountBank; // 开户银行
private Boolean isAuto; // 是否系统自动生成
private String remark; // 备注
// getters & setters
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName(value = "wdt_refund_order")
public class WdtRefundOrder {
private Integer refundId; // 退换单id
private String srcTids; // 原始单号(关联的销售单平台订单号)
private String refundNo; // 退换单号
private String remark; // 备注
private Integer type; // 退换单类型 1:售前退款;2:退货;3:换货;4:退款不退货;6:保价退款
private Integer stockinStatus; // 入库状态 0:无需入库;1:待入库;2:部分入库;3:全部入库;4:终止入库
private String flagName; // 标记名称
private BigDecimal returnGoodsCount; // 退回货品数量
private String receiverTelno; // 退款订单中收件人电话(仅自有平台及线下平台返回)
private String receiverName; // 退款订单中收件人姓名(仅自有平台及线下平台返回)
private String modified; // 修改时间
private Integer noteCount; // 便签数量
private String shopNo; // 店铺编号
private Integer fromType; // 建单方式 0:API抓单;1:手工建单;2:Excel导入;3:分销商推送
private String created; // 建单时间
private String settleTime; // 结算时间
private String checkTime; // 审核时间
private String returnLogisticsNo; // 退货物流单号
private String tradeNoList; // 系统订单号列表
private BigDecimal guaranteeRefundAmount; // 平台退款金额(担保退款金额)
private BigDecimal returnGoodsAmount; // 退货金额
private String returnLogisticsName; // 物流公司名称
private String reasonName; // 退换说明
private String refundReason; // 退款原因
private String buyerNick; // 客户网名(仅自有平台及线下平台返回)
private String operatorName; // 建单者
private BigDecimal actualRefundAmount; // 实际退款金额
private String revertReasonName; // 驳回原因
private String returnWarehouseNo; // 退回仓库编号
private BigDecimal directRefundAmount; // 线下退款金额(非担保退款金额)
private BigDecimal receiveAmount; // 收款金额
private String customerName; // 客户姓名(仅自有平台及线下平台返回)
private String fenxiaoNickName; // 分销商昵称
private Integer status; // 退换单状态 10:已取消;20:待审核;30:已审核...
private Integer shopId; // 店铺id
private Integer tradeId; // 订单id
private String rawRefundNos; // 原始退换单号
private String payId; // 支付订单号
private String providerRefundNo; // 分销退换单号
private Integer shopPlatformId; // 店铺平台id
private String tidList; // 原始单号
private Integer subPlatformId; // 子平台id
private Integer returnWarehouseId; // 退回仓库id
private Integer platformId; // 平台id
private String wmsOwnerNo; // 奇门货主编号
private Integer warehouseType; // 退回仓库类型
private Integer badReason; // 拦截原因
private String modifiedDate; // 最后修改时间
private String returnMaskInfo; // 退换信息
private Integer processStatus; // 处理状态
private Integer reasonId; // 退款原因id
private Integer revertReason; // 驳回原因id
private Integer customerId; // 客户id
private Integer consignMode; // 发货方式
private String refundTime; // 退款创建时间
private String fenxiaoTid; // 分销原始单号
private String fenxiaoNickNo; // 分销商编码
private String wmsCode; // wms单号
private Integer rrStatus; // 平台状态
private String currentPhaseTimeout; // 退款成功时间
private List<WdtRefundOrderDetail> detailList; // 退换单详情
private List<WdtRefundAmountDetail> amountDetailList; // 金额明细
private WdtSwapOrder swapOrder; // 换出订单
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* 退换货订单明细数据
* @author lvbencai
* @date 2025-02-28 12:26:23
*/
@Data
@TableName(value = "wdt_refund_order_detail")
public class WdtRefundOrderDetail {
private Integer recId; // 退换单明细Id
private Integer refundId; // 退换单id
private String oid; // 原始子单号
private Integer tradeOrderId; // 订单明细id
private Integer platformId; // 平台id
private String tid; // 原始单号
private String tradeNo; // 系统订单编号
private BigDecimal num; // 数量
private BigDecimal price; // 价格
private BigDecimal originalPrice; // 原价
private BigDecimal checkedCostPrice; // 成本价
private BigDecimal refundNum; // 退款数量
private BigDecimal totalAmount; // 退款总额
private BigDecimal refundAmount; // 已退款金额
private Boolean isGuarantee; // 是否担保退款
private String goodsNo; // 货品编号
private String goodsName; // 货品名称
private String specName; // 规格名
private String specNo; // 商家编码
private String goodsId; // 平台货品id
private String specId; // 平台规格id
private Integer sysGoodsId; // 系统货品id
private Integer sysSpecId; // 系统规格id
private String specCode; // 规格码
private String barcode; // 条码
private BigDecimal stockinNum; // 入库数量
private String remark; // 备注
private String apiSpecName; // 平台规格名称
private String apiGoodsName; // 平台货品名称
private String modified; // 最后修改时间
private String suiteNo; // 组合装编号
private String suiteName; // 组合装名称
private String rawRefundNos; // 原始退款单号
private String rawRefundNo; // 原始退款单号
private Integer salesTradeId; // 订单id
private BigDecimal discount; // 总折扣金额
private BigDecimal paid; // 已支付金额
private Integer suiteId; // 组合装id
private BigDecimal suiteNum; // 组合装数量
private String created; // 创建时间
private String modifiedDate; // 最后修改时间
private Integer giftType; // 赠品类型
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName(value = "wdt_swap_order")
public class WdtSwapOrder {
private String tid; // 换出订单原始单号
private String shopNo; // 店铺编号
private String shopName; // 店铺名称
private String warehouseNo; // 仓库名称
private Integer shopId; // 店铺id
private Integer warehouseId; // 仓库id
private Integer swapProvince; // 省份id
private Integer swapCity; // 城市id
private String swapArea; // 地区
private Integer swapDistrict; // 地区id
private Integer swapLogisticsId; // 换货新订单物流公司id
private BigDecimal postAmount; // 换货邮费
private BigDecimal otherAmount; // 其他金额
private List<WdtSwapOrderDetail> swapOrderDetailList; // 换出订单明细
// getters & setters
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName(value = "wdt_swap_order_detail")
public class WdtSwapOrderDetail {
private String oid; // 原始子单号
private Byte targetType; // 货品类型(1 单品,2 组合装)
private Integer targetId; // 换出货品id
private Boolean defect; // 是否残次品
private String goodsName; // 货品名称
private String goodsNo; // 货品编号
private String specName; // 规格名称
private String specCode; // 规格码
private String merchantNo; // 商家编码
private BigDecimal price; // 零售价
private BigDecimal totalAmount; // 总价
private BigDecimal num; // 数量
private String remark; // 备注
// getters & setters
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtRefundOrderDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface WdtRefundOrderDetailMapper extends BaseMapper<WdtRefundOrderDetail> {
void saveOrUpdateBatch(@Param(value = "list") List<WdtRefundOrderDetail> mergeList);
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtRefundOrder;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface WdtRefundOrderMapper extends BaseMapper<WdtRefundOrder> {
void saveOrUpdateBatch(List<WdtRefundOrder> batchLists);
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtSwapOrderDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface WdtSwapOrderDetailMapper extends BaseMapper<WdtSwapOrderDetail> {
void saveOrUpdateBatch(@Param(value = "list") List<WdtSwapOrderDetail> mergeList);
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtSwapOrder;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface WdtSwapOrderMapper extends BaseMapper<WdtSwapOrder> {
void saveOrUpdateBatch(List<WdtSwapOrder> batchLists);
}
......@@ -8,7 +8,7 @@ import lombok.Data;
* @Description: 旺店通查询订单请求参数,可以按照旺店通的来定义
*/
@Data
public class WangdiantongQueryVO {
public class WdtOrderQueryVO {
private String start_time;
private String end_time;
}
package com.sfa.job.pojo.request;
import lombok.Data;
/**
* @author lvbencai
* @date 2025-01-22 21:15:39
* @Description: 旺店通查询订单请求参数,可以按照旺店通的来定义
*/
@Data
public class WdtRefundQueryVO {
private String settle_from;
private String settle_to;
}
package com.sfa.job.pojo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 财务同步旺店通接口-返回数据Dto
*/
@Data
public class FinanceSyncRefundOrderDetailDto {
/**
* 订单数量
*/
private Integer orderCount;
private Integer orderDetailCount;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
private Integer syncType;
private String batchNo;
private Integer pageNo;
private Integer totalCount;
/**
* 错误信息
*/
private String message;
private Integer code = 200;
}
......@@ -9,7 +9,7 @@ import java.util.Date;
* 财务同步旺店通接口-返回数据Dto
*/
@Data
public class FinanceSyncOrderDetailDto {
public class SyncOrderDetailDto {
/**
* 订单数量
*/
......
package com.sfa.job.service.order;
import com.sfa.job.pojo.response.FinanceSyncOrderDetailDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
import java.util.Date;
public interface FinanceOrderSyncService {
FinanceSyncOrderDetailDto syncWangdiantongOrder(Date startTime, Date endTime, Integer syncType);
SyncOrderDetailDto syncWdtOrder(Date startTime, Date endTime, Integer syncType);
SyncOrderDetailDto syncWdtRefundOrder(Date startTime, Date endTime, Integer syncType);
}
package com.sfa.job.util;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.lark.oapi.okhttp.*;
import com.sfa.common.core.exception.ServiceException;
import com.sfa.job.pojo.request.WangdiantongQueryVO;
import com.sfa.job.config.WangdiantongConfig;
import com.sfa.job.pojo.response.WangdiantongQueryDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Component
public class WangdiantongUtil {
// @Value("${wangdiantong.url}")
// private String url;
// @Value("${wangdiantong.sid}")
// private String sid ;
// @Value("${wangdiantong.key}")
// private String key ;
// @Value("${wangdiantong.salt}")
// private String salt ;
// @Value("${wangdiantong.appsecret}")
// private String appsecret;
private final WangdiantongConfig wangdiantongConfig;
@Autowired
public WangdiantongUtil(WangdiantongConfig wangdiantongConfig) {
this.wangdiantongConfig = wangdiantongConfig;
}
/**
* 卖家账号/接口账号/盐/接口名称
*/
public WangdiantongQueryDto queryWithDetail(WangdiantongQueryVO wangdiantongQuery, AtomicInteger beginPageNo) {
public WangdiantongQueryDto queryWithDetail(HashMap<String, Object> params, AtomicInteger beginPageNo,String method) {
WangdiantongQueryDto wangdiantongQueryDto = new WangdiantongQueryDto();
JSONArray allArray = new JSONArray();
Integer totalCount = 0;
......@@ -35,27 +51,16 @@ public class WangdiantongUtil {
int size = 0;
int pageNo = beginPageNo.get();
// 出现了查询的分页数量不足的情况
int maxPage = 0;
do {
String url = "http://wdt.wangdian.cn/openapi";
String sid = "wxl3";
String key = "wxl3-ota";
String salt = "78784988049166748bfdc83273ebb990";
String appsecret = "c65bd645bbed704bb7982037f9b948e3";
String method = "sales.TradeQuery.queryWithDetail";
// 使用配置类中的属性
String url = wangdiantongConfig.getUrl();
String sid = wangdiantongConfig.getSid();
String key = wangdiantongConfig.getKey();
String salt = wangdiantongConfig.getSalt();
String appsecret = wangdiantongConfig.getAppsecret();
String v = "1.0";
HashMap<String, Object> params = new HashMap<>();
// params.put("start_time", wangdiantongQuery.getStart_time());
// params.put("end_time", wangdiantongQuery.getEnd_time());
// bean 转map
Map<String, Object> stringObjectMap = BeanUtil.beanToMap(wangdiantongQuery);
params.putAll(stringObjectMap);
List<HashMap<String, Object>> paramsList = Arrays.asList(params);
String signParams = appsecret + "body" + JSONObject.toJSONString(paramsList) + "calc_total1" + "key" + key
+ "method" + method + "page_no" + pageNo + "page_size200" + "salt" + salt + "sid" + sid +
"timestamp" + (System.currentTimeMillis() / 1000 - 1325347200) + "v" + v + appsecret;
......@@ -89,13 +94,13 @@ public class WangdiantongUtil {
throw new ServiceException("访问旺店通接口错误" + messageJson.toString());
}
totalCount = dataR.getInteger("total_count");
maxPage = (totalCount+199)/200;
maxPage = (totalCount + 199) / 200;
JSONArray orderJsonArray = dataR.getJSONArray("order");
allArray.addAll(orderJsonArray);
size = allArray.size();
log.info("当前时间段{}-{},查询返回的order条数:{},总条数totalCount:{},page_no:{}", wangdiantongQuery.getStart_time(), wangdiantongQuery.getEnd_time(), orderJsonArray.size(), totalCount, pageNo);
log.info("当前入参{},查询返回的order条数:{},总条数totalCount:{},page_no:{}", JSONObject.toJSONString(params), orderJsonArray.size(), totalCount, pageNo);
// 计算下一次分页的页码
pageNo++;
} while (size < maxDealCount && pageNo <= maxPage);
......
......@@ -4,7 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson2.JSONObject;
import com.sfa.job.pojo.response.FinanceSyncOrderDetailDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
import com.sfa.job.service.order.FinanceOrderSyncService;
import com.xxl.job.core.context.XxlJobContext;
import com.xxl.job.core.context.XxlJobHelper;
......@@ -29,7 +29,7 @@ public class FinanceOrderTask {
* 同步部门数据
*/
@XxlJob("syncWangdiantongOrderDetail")
public FinanceSyncOrderDetailDto syncWangdiantongOrderDetail() {
public SyncOrderDetailDto syncWangdiantongOrderDetail() {
Long st = System.currentTimeMillis();
// 暂不考虑分片
XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext();
......@@ -42,7 +42,7 @@ public class FinanceOrderTask {
XxlJobHelper.log("xxl-job开始同步-旺店通订单明细api接口数据");
// 定时任务不设定开始时间和结束时间
FinanceSyncOrderDetailDto detailDto = financeOrderSyncService.syncWangdiantongOrder(null, null,0);
SyncOrderDetailDto detailDto = financeOrderSyncService.syncWdtOrder(null, null,0);
XxlJobHelper.log("xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}",
detailDto.getOrderCount(),detailDto.getOrderDetailCount(),detailDto.getBatchNo(),
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()) );
......@@ -53,5 +53,34 @@ public class FinanceOrderTask {
}
return detailDto;
}
/**
* 同步部门数据
*/
@XxlJob("syncWdtRefundOrder")
public SyncOrderDetailDto syncWdtRefundOrder() {
Long startTime = System.currentTimeMillis();
// 暂不考虑分片
XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext();
int shardingTotalCount = xxlJobContext.getShardTotal();
int shardingItem = xxlJobContext.getShardIndex();
XxlJobHelper.log(">>>>>>>>>>syncWangdiantongOrderDetail Job start<<<<<<<<<<");
// 简单模拟分片处理,这里输出每个分片的信息
XxlJobHelper.log("分片总数: " + shardingTotalCount + ", 当前分片: " + shardingItem);
XxlJobHelper.log("xxl-job开始同步-旺店通订单明细api接口数据");
// 定时任务不设定开始时间和结束时间
SyncOrderDetailDto detailDto = financeOrderSyncService.syncWdtRefundOrder(null, null,0);
Long endTime = System.currentTimeMillis();
XxlJobHelper.log("xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{},时长:{}",
detailDto.getOrderCount(),detailDto.getOrderDetailCount(),detailDto.getBatchNo(),
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()),
endTime-startTime);
if(ObjectUtil.equals(HttpStatus.HTTP_OK,detailDto.getCode()) ){
XxlJobHelper.handleSuccess(JSONObject.toJSONString(detailDto));
}else{
XxlJobHelper.handleFail(detailDto.getMessage());
}
return detailDto;
}
}
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sfa.job.domain.order.mapper.WdtRefundOrderDetailMapper">
<insert id="saveOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_refund_order_detail (
rec_id, refund_id, oid, trade_order_id, platform_id, tid, trade_no,
num, price, original_price, checked_cost_price, refund_num, total_amount,
refund_amount, is_guarantee, goods_no, goods_name, spec_name, spec_no,
goods_id, spec_id, sys_goods_id, sys_spec_id, spec_code, barcode,
stockin_num, remark, api_spec_name, api_goods_name, modified, suite_no,
suite_name, raw_refund_nos, raw_refund_no, sales_trade_id, discount, paid,
suite_id, suite_num, created, modified_date, gift_type
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.recId},
#{item.refundId},
#{item.oid},
#{item.tradeOrderId},
#{item.platformId},
#{item.tid},
#{item.tradeNo},
#{item.num},
#{item.price},
#{item.originalPrice},
#{item.checkedCostPrice},
#{item.refundNum},
#{item.totalAmount},
#{item.refundAmount},
#{item.isGuarantee},
#{item.goodsNo},
#{item.goodsName},
#{item.specName},
#{item.specNo},
#{item.goodsId},
#{item.specId},
#{item.sysGoodsId},
#{item.sysSpecId},
#{item.specCode},
#{item.barcode},
#{item.stockinNum},
#{item.remark},
#{item.apiSpecName},
#{item.apiGoodsName},
#{item.modified},
#{item.suiteNo},
#{item.suiteName},
#{item.rawRefundNos},
#{item.rawRefundNo},
#{item.salesTradeId},
#{item.discount},
#{item.paid},
#{item.suiteId},
#{item.suiteNum},
#{item.created},
#{item.modifiedDate},
#{item.giftType}
)
</foreach>
ON DUPLICATE KEY UPDATE
refund_id = VALUES(refund_id),
oid = VALUES(oid),
trade_order_id = VALUES(trade_order_id),
platform_id = VALUES(platform_id),
tid = VALUES(tid),
trade_no = VALUES(trade_no),
num = VALUES(num),
price = VALUES(price),
original_price = VALUES(original_price),
checked_cost_price = VALUES(checked_cost_price),
refund_num = VALUES(refund_num),
total_amount = VALUES(total_amount),
refund_amount = VALUES(refund_amount),
is_guarantee = VALUES(is_guarantee),
goods_no = VALUES(goods_no),
goods_name = VALUES(goods_name),
spec_name = VALUES(spec_name),
spec_no = VALUES(spec_no),
goods_id = VALUES(goods_id),
spec_id = VALUES(spec_id),
sys_goods_id = VALUES(sys_goods_id),
sys_spec_id = VALUES(sys_spec_id),
spec_code = VALUES(spec_code),
barcode = VALUES(barcode),
stockin_num = VALUES(stockin_num),
remark = VALUES(remark),
api_spec_name = VALUES(api_spec_name),
api_goods_name = VALUES(api_goods_name),
modified = VALUES(modified),
suite_no = VALUES(suite_no),
suite_name = VALUES(suite_name),
raw_refund_nos = VALUES(raw_refund_nos),
raw_refund_no = VALUES(raw_refund_no),
sales_trade_id = VALUES(sales_trade_id),
discount = VALUES(discount),
paid = VALUES(paid),
suite_id = VALUES(suite_id),
suite_num = VALUES(suite_num),
created = VALUES(created),
modified_date = VALUES(modified_date),
gift_type = VALUES(gift_type)
</insert>
</mapper>
<?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.sfa.job.domain.order.mapper.WdtRefundOrderMapper">
<insert id="saveOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_refund_order (
refund_id, src_tids, refund_no, remark, type,
stockin_status, flag_name, return_goods_count,
receiver_telno, receiver_name, modified, note_count,
shop_no, from_type, created, settle_time, check_time,
return_logistics_no, trade_no_list, guarantee_refund_amount,
return_goods_amount, return_logistics_name, reason_name,
refund_reason, buyer_nick, operator_name, actual_refund_amount,
revert_reason_name, return_warehouse_no, direct_refund_amount,
receive_amount, customer_name, fenxiao_nick_name, status,
shop_id, trade_id, raw_refund_nos, pay_id, provider_refund_no,
shop_platform_id, tid_list, sub_platform_id, return_warehouse_id,
platform_id, wms_owner_no, warehouse_type, bad_reason, modified_date,
return_mask_info, process_status, reason_id, revert_reason_id,
customer_id, consign_mode, refund_time, fenxiao_tid, fenxiao_nick_no,
wms_code, rr_status, current_phase_timeout
)
values
<foreach collection="list" item="item" separator=",">
(
#{item.refundId},
#{item.srcTids},
#{item.refundNo},
#{item.remark},
#{item.type},
#{item.stockinStatus},
#{item.flagName},
#{item.returnGoodsCount},
#{item.receiverTelno},
#{item.receiverName},
#{item.modified},
#{item.noteCount},
#{item.shopNo},
#{item.fromType},
#{item.created},
#{item.settleTime},
#{item.checkTime},
#{item.returnLogisticsNo},
#{item.tradeNoList},
#{item.guaranteeRefundAmount},
#{item.returnGoodsAmount},
#{item.returnLogisticsName},
#{item.reasonName},
#{item.refundReason},
#{item.buyerNick},
#{item.operatorName},
#{item.actualRefundAmount},
#{item.revertReasonName},
#{item.returnWarehouseNo},
#{item.directRefundAmount},
#{item.receiveAmount},
#{item.customerName},
#{item.fenxiaoNickName},
#{item.status},
#{item.shopId},
#{item.tradeId},
#{item.rawRefundNos},
#{item.payId},
#{item.providerRefundNo},
#{item.shopPlatformId},
#{item.tidList},
#{item.subPlatformId},
#{item.returnWarehouseId},
#{item.platformId},
#{item.wmsOwnerNo},
#{item.warehouseType},
#{item.badReason},
#{item.modifiedDate},
#{item.returnMaskInfo},
#{item.processStatus},
#{item.reasonId},
#{item.revertReasonId},
#{item.customerId},
#{item.consignMode},
#{item.refundTime},
#{item.fenxiaoTid},
#{item.fenxiaoNickNo},
#{item.wmsCode},
#{item.rrStatus},
#{item.currentPhaseTimeout}
)
</foreach>
ON DUPLICATE KEY UPDATE
src_tids = VALUES(src_tids),
refund_no = VALUES(refund_no),
remark = VALUES(remark),
type = VALUES(type),
stockin_status = VALUES(stockin_status),
flag_name = VALUES(flag_name),
return_goods_count = VALUES(return_goods_count),
receiver_telno = VALUES(receiver_telno),
receiver_name = VALUES(receiver_name),
modified = VALUES(modified),
note_count = VALUES(note_count),
shop_no = VALUES(shop_no),
from_type = VALUES(from_type),
created = VALUES(created),
settle_time = VALUES(settle_time),
check_time = VALUES(check_time),
return_logistics_no = VALUES(return_logistics_no),
trade_no_list = VALUES(trade_no_list),
guarantee_refund_amount = VALUES(guarantee_refund_amount),
return_goods_amount = VALUES(return_goods_amount),
return_logistics_name = VALUES(return_logistics_name),
reason_name = VALUES(reason_name),
refund_reason = VALUES(refund_reason),
buyer_nick = VALUES(buyer_nick),
operator_name = VALUES(operator_name),
actual_refund_amount = VALUES(actual_refund_amount),
revert_reason_name = VALUES(revert_reason_name),
return_warehouse_no = VALUES(return_warehouse_no),
direct_refund_amount = VALUES(direct_refund_amount),
receive_amount = VALUES(receive_amount),
customer_name = VALUES(customer_name),
fenxiao_nick_name = VALUES(fenxiao_nick_name),
status = VALUES(status),
shop_id = VALUES(shop_id),
trade_id = VALUES(trade_id),
raw_refund_nos = VALUES(raw_refund_nos),
pay_id = VALUES(pay_id),
provider_refund_no = VALUES(provider_refund_no),
shop_platform_id = VALUES(shop_platform_id),
tid_list = VALUES(tid_list),
sub_platform_id = VALUES(sub_platform_id),
return_warehouse_id = VALUES(return_warehouse_id),
platform_id = VALUES(platform_id),
wms_owner_no = VALUES(wms_owner_no),
warehouse_type = VALUES(warehouse_type),
bad_reason = VALUES(bad_reason),
modified_date = VALUES(modified_date),
return_mask_info = VALUES(return_mask_info),
process_status = VALUES(process_status),
reason_id = VALUES(reason_id),
revert_reason_id = VALUES(revert_reason_id),
customer_id = VALUES(customer_id),
consign_mode = VALUES(consign_mode),
refund_time = VALUES(refund_time),
fenxiao_tid = VALUES(fenxiao_tid),
fenxiao_nick_no = VALUES(fenxiao_nick_no),
wms_code = VALUES(wms_code),
rr_status = VALUES(rr_status),
current_phase_timeout = VALUES(current_phase_timeout)
</insert>
</mapper>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sfa.job.domain.order.mapper.WdtRefundOrderDetailMapper">
<insert id="saveOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_swap_order_detail (
oid, swap_order_tid, target_type, target_id, defect, goods_name, goods_no,
spec_name, spec_code, merchant_no, price, total_amount, num, remark
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.oid},
#{item.swapOrderTid},
#{item.targetType},
#{item.targetId},
#{item.defect},
#{item.goodsName},
#{item.goodsNo},
#{item.specName},
#{item.specCode},
#{item.merchantNo},
#{item.price},
#{item.totalAmount},
#{item.num},
#{item.remark}
)
</foreach>
ON DUPLICATE KEY UPDATE
target_type = VALUES(target_type),
target_id = VALUES(target_id),
defect = VALUES(defect),
goods_name = VALUES(goods_name),
goods_no = VALUES(goods_no),
spec_name = VALUES(spec_name),
spec_code = VALUES(spec_code),
merchant_no = VALUES(merchant_no),
price = VALUES(price),
total_amount = VALUES(total_amount),
num = VALUES(num),
remark = VALUES(remark)
</insert>
</mapper>
<?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.sfa.job.domain.order.mapper.WdtSwapOrderMapper">
<insert id="saveOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_swap_order (
tid, refund_id, shop_no, shop_name, warehouse_no, shop_id, warehouse_id,
swap_province, swap_city, swap_area, swap_district, swap_logistics_id,
post_amount, other_amount
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.tid},
#{item.refundId},
#{item.shopNo},
#{item.shopName},
#{item.warehouseNo},
#{item.shopId},
#{item.warehouseId},
#{item.swapProvince},
#{item.swapCity},
#{item.swapArea},
#{item.swapDistrict},
#{item.swapLogisticsId},
#{item.postAmount},
#{item.otherAmount}
)
</foreach>
ON DUPLICATE KEY UPDATE
shop_no = VALUES(shop_no),
shop_name = VALUES(shop_name),
warehouse_no = VALUES(warehouse_no),
shop_id = VALUES(shop_id),
warehouse_id = VALUES(warehouse_id),
swap_province = VALUES(swap_province),
swap_city = VALUES(swap_city),
swap_area = VALUES(swap_area),
swap_district = VALUES(swap_district),
swap_logistics_id = VALUES(swap_logistics_id),
post_amount = VALUES(post_amount),
other_amount = VALUES(other_amount)
</insert>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论