提交 6b140908 authored 作者: 吕本才's avatar 吕本才

1、优化同步采集代码

2、退换货采集完善
上级 88e3aa04
......@@ -35,14 +35,25 @@ public class FinanceOrderDetailSyncController extends BaseController {
return detailDto;
}
@GetMapping("/updateZbjType")
public SyncOrderDetailDto updateZbjType(Date startTime, Date endTime) {
log.info("接口开始同步-旺店通订单明细api接口数据");
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
SyncOrderDetailDto detailDto = syncService.updateZbjType(startTime, endTime);
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接口数据");
log.info("开始接口同步-旺店通退换订单明细api接口数据");
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
SyncOrderDetailDto detailDto = syncService.syncWdtRefundOrder(startTime, endTime, 1);
log.info("接口结束同步-旺店通退换订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}",
log.info("结束接口同步-旺店通退换订单明细api接口数据, 共同步退换货订单{}条数据,退换货订单明细{}条,退换货同步批次号:{},订单的开始时间{}和结束时间{},数量:{}",
detailDto.getOrderCount(),detailDto.getOrderDetailCount(),detailDto.getBatchNo(),
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()) );
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()),detailDto.getRemark() );
return detailDto;
}
......
......@@ -7,5 +7,5 @@ public interface CollectOrderLogDao {
// 插入一条记录
void insert(SyncOrderDetailDto collectOrderLog);
CollectOrderLogDto selectOrderSyncLatest(Integer syncType);
CollectOrderLogDto selectOrderSyncLatest(Integer syncType, String method);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtRefundAmountDetail;
import java.util.List;
public interface WdtRefundAmountDetailDao {
void saveOrUpdateBatch(List<WdtRefundAmountDetail> mergeList);
}
......@@ -24,24 +24,27 @@ public class CollectOrderLogDaoImpl implements CollectOrderLogDao {
@Override
public void insert(SyncOrderDetailDto detailDto) {
CollectOrderLog collectOrderLog = new CollectOrderLog();
BeanUtils.copyProperties(detailDto,collectOrderLog);
collectOrderLog.setSyncType(detailDto.getSyncType());
collectOrderLog.setMethod(detailDto.getMethod());
collectOrderLog.setOrderCount(detailDto.getOrderCount());
collectOrderLog.setOrderDetailCount(detailDto.getOrderDetailCount());
collectOrderLog.setStartTime(detailDto.getStartTime());
collectOrderLog.setEndTime(detailDto.getEndTime());
collectOrderLog.setBatchNo(detailDto.getBatchNo());
collectOrderLog.setLatestTime(detailDto.getLatestTime() );
collectOrderLog.setPageNo(detailDto.getPageNo());
collectOrderLog.setTotalCount(detailDto.getTotalCount());
collectOrderLog.setRemark(detailDto.getRemark());
logInfoMapper.insert(collectOrderLog);
}
@Override
public CollectOrderLogDto selectOrderSyncLatest(Integer syncType) {
public CollectOrderLogDto selectOrderSyncLatest(Integer syncType, String method) {
// 查询最新发货日期
List<CollectOrderLog> orderList = logInfoMapper.selectList(
new LambdaQueryWrapper<CollectOrderLog>()
// 默认查询xxljob自动同步时间
.eq(CollectOrderLog::getSyncType,syncType)
.eq(CollectOrderLog::getMethod,method)
.eq(CollectOrderLog::getDelFlag,0)
.orderByDesc(CollectOrderLog::getUpdateTime)
.last("LIMIT 1"));
......
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.WdtRefundAmountDetailDao;
import com.sfa.job.domain.order.entity.WdtRefundAmountDetail;
import com.sfa.job.domain.order.mapper.WdtRefundAmountDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("bi")
@Repository
public class WdtRefundAmountDetailDaoImpl implements WdtRefundAmountDetailDao {
private static final int BATCH_SIZE = 1000;
@Autowired
private WdtRefundAmountDetailMapper amountDetailMapper;
@Override
public void saveOrUpdateBatch(List<WdtRefundAmountDetail> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<WdtRefundAmountDetail> batchLists = mergeList.subList(i, toIndex);
amountDetailMapper.saveOrUpdateBatch(batchLists);
}
}
}
......@@ -25,17 +25,28 @@ public class CollectOrderLog implements Serializable {
*/
@TableId(value = "cli_id",type= IdType.AUTO)
private Long cliId;
/**
* 方法,用于区分不同类别的同步
*/
private String method;
/**
* 备注,记录数量
*/
private String remark;
private Integer totalCount;
/**
* 采集订单的数量,存储为字符串,长度不超过 20 个字符
*/
private Integer orderCount;
private Date startTime;
/**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/
private Integer orderDetailCount;
private Date endTime;
/**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/;
/**
* 采集批次信息,可存储长度不超过 30 个字符,使用 utf8mb4 字符集和 utf8mb4_0900_ai_ci 校对规则
......@@ -86,6 +97,5 @@ public class CollectOrderLog implements Serializable {
private Integer syncType;
private Integer totalCount;
}
......@@ -13,19 +13,68 @@ import java.math.BigDecimal;
@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
/**
* 金额明细记录id
*/
private Integer recId;
/**
* 退换单id
*/
private Integer refundId;
/**
* 退换类型 1:货款 2:邮费 99:返现
*/
private Integer refundType;
/**
* 金额流向 0:商家->买家 1:买家->商家
*/
private Integer isReturn;
/**
* 退款金额
*/
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;
}
......@@ -14,67 +14,318 @@ import java.util.List;
@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; // 换出订单
/**
* 退换单id
*/
private Integer refundId;
/**
* 原始单号(关联的销售单平台订单号)
*/
private String srcTids;
/**
* 退换单号
*/
private String refundNo;
/**
* 备注
*/
private String remark;
/**
* 退换单类型 1:售前退款;2:退货;3:换货;4:退款不退货;6:保价退款
*/
private Integer type;
/**
* 入库状态 0:无需入库;1:待入库;2:部分入库;3:全部入库;4:终止入库
*/
private Integer stockinStatus;
/**
* 标记名称
*/
private String flagName;
/**
* 退回货品数量
*/
private BigDecimal returnGoodsCount;
/**
* 退款订单中收件人电话(仅自有平台及线下平台返回)
*/
private String receiverTelno;
/**
* 退款订单中收件人姓名(仅自有平台及线下平台返回)
*/
private String receiverName;
/**
* 修改时间
*/
private String modified;
/**
* 便签数量
*/
private Integer noteCount;
/**
* 店铺编号
*/
private String shopNo;
/**
* 建单方式 0:API抓单;1:手工建单;2:Excel导入;3:分销商推送
*/
private Integer fromType;
/**
* 建单时间
*/
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;
/**
* 退换单状态 10:已取消;20:待审核;30:已审核...
*/
private Integer status;
/**
* 店铺id
*/
private Integer shopId;
/**
* 订单id
*/
private Integer tradeId;
/**
* 原始退换单号
*/
private String rawRefundNos;
/**
* 支付订单号
*/
private String payId;
/**
* 分销退换单号
*/
private String providerRefundNo;
/**
* 店铺平台id
*/
private Integer shopPlatformId;
/**
* 原始单号
*/
private String tidList;
/**
* 子平台id
*/
private Integer subPlatformId;
/**
* 退回仓库id
*/
private Integer returnWarehouseId;
/**
* 平台id
*/
private Integer platformId;
/**
* 奇门货主编号
*/
private String wmsOwnerNo;
/**
* 退回仓库类型
*/
private Integer warehouseType;
/**
* 拦截原因
*/
private Integer badReason;
/**
* 最后修改时间
*/
private String modifiedDate;
/**
* 退换信息
*/
private String returnMaskInfo;
/**
* 处理状态
*/
private Integer processStatus;
/**
* 退款原因id
*/
private Integer reasonId;
/**
* 驳回原因id
*/
private Integer revertReason;
/**
* 客户id
*/
private Integer customerId;
/**
* 发货方式
*/
private Integer consignMode;
/**
* 退款创建时间
*/
private String refundTime;
/**
* 分销原始单号
*/
private String fenxiaoTid;
/**
* 分销商编码
*/
private String fenxiaoNickNo;
/**
* wms单号
*/
private String wmsCode;
/**
* 平台状态
*/
private Integer rrStatus;
/**
* 退款成功时间
*/
private String currentPhaseTimeout;
/**
* 退换单详情
*/
private List<WdtRefundOrderDetail> detailList;
/**
* 金额明细
*/
private List<WdtRefundAmountDetail> amountDetailList;
/**
* 换出订单
*/
private WdtSwapOrder swapOrder;
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* 退换货订单明细数据
* @author lvbencai
......@@ -12,46 +13,213 @@ import java.math.BigDecimal;
@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; // 赠品类型
/**
* 退换单明细Id
*/
private Integer recId;
/**
* 退换单id
*/
private Integer refundId;
/**
* 原始子单号
*/
private String oid;
/**
* 订单明细id
*/
private Integer tradeOrderId;
/**
* 平台id
*/
private Integer platformId;
/**
* 原始单号
*/
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;
/**
* 平台货品id
*/
private String goodsId;
/**
* 平台规格id
*/
private String specId;
/**
* 系统货品id
*/
private Integer sysGoodsId;
/**
* 系统规格id
*/
private Integer sysSpecId;
/**
* 规格码
*/
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;
/**
* 订单id
*/
private Integer salesTradeId;
/**
* 总折扣金额
*/
private BigDecimal discount;
/**
* 已支付金额
*/
private BigDecimal paid;
/**
* 组合装id
*/
private Integer suiteId;
/**
* 组合装数量
*/
private BigDecimal suiteNum;
/**
* 创建时间
*/
private String created;
/**
* 最后修改时间
*/
private String modifiedDate;
/**
* 赠品类型
*/
private Integer giftType;
}
......@@ -6,8 +6,6 @@ import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 退换货订单数据
* @author lvbencai
......@@ -16,20 +14,73 @@ import java.util.List;
@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
/**
* 换出订单原始单号
*/
private String tid;
/**
* 店铺编号
*/
private String shopNo;
/**
* 店铺名称
*/
private String shopName;
/**
* 仓库名称
*/
private String warehouseNo;
/**
* 店铺id
*/
private Integer shopId;
/**
* 仓库id
*/
private Integer warehouseId;
/**
* 省份id
*/
private Integer swapProvince;
/**
* 城市id
*/
private Integer swapCity;
/**
* 地区
*/
private String swapArea;
/**
* 地区id
*/
private Integer swapDistrict;
/**
* 换货新订单物流公司id
*/
private Integer swapLogisticsId;
/**
* 换货邮费
*/
private BigDecimal postAmount;
/**
* 其他金额
*/
private BigDecimal otherAmount;
/**
* 换出订单明细
*/
private List<WdtSwapOrderDetail> swapOrderDetailList;
}
......@@ -13,19 +13,68 @@ import java.math.BigDecimal;
@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
/**
* 原始子单号
*/
private String oid;
/**
* 货品类型(1 单品,2 组合装)
*/
private Byte targetType;
/**
* 换出货品id
*/
private Integer targetId;
/**
* 是否残次品
*/
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;
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtRefundAmountDetail;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface WdtRefundAmountDetailMapper extends BaseMapper<WdtRefundAmountDetail> {
void saveOrUpdateBatch(List<WdtRefundAmountDetail> batchLists);
}
......@@ -26,12 +26,12 @@ public class CollectOrderLogDto implements Serializable {
/**
* 采集订单的数量,存储为字符串,长度不超过 20 个字符
*/
private Integer orderCount;
private Date endTime;
/**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/
private Integer orderDetailCount;
private Date startTime;
/**
* 采集批次信息,可存储长度不超过 30 个字符,使用 utf8mb4 字符集和 utf8mb4_0900_ai_ci 校对规则
......
......@@ -11,6 +11,7 @@ import java.util.Date;
@Data
public class SyncOrderDetailDto {
private String method;
private String remark;
/**
* 订单数量
*/
......@@ -32,15 +33,18 @@ public class SyncOrderDetailDto {
private String message;
private Integer code = 200;
public SyncOrderDetailDto setDetailInfo(int size, int mergerListSize, int beginPageNo, Integer totalCount, String batchNo, Date endTime, Date startTime) {
public SyncOrderDetailDto setDetailInfo(String method, String remark, int syncType, int size, int mergerListSize, Integer totalCount, String batchNo, Date endTime, Date startTime) {
// 接口测试使用
this.setOrderCount(size);
this.setOrderDetailCount(mergerListSize);
this.setStartTime(startTime);
this.setPageNo(beginPageNo);
this.setEndTime(endTime);
this.setLatestTime(endTime);
this.setTotalCount(totalCount);
this.setBatchNo(batchNo);
this.setMethod(method);
this.setSyncType(syncType);
this.setRemark(remark);
return this;
}
}
......@@ -9,4 +9,6 @@ public interface FinanceOrderSyncService {
SyncOrderDetailDto syncWdtOrder(Date startTime, Date endTime, Integer syncType);
SyncOrderDetailDto syncWdtRefundOrder(Date startTime, Date endTime, Integer syncType);
SyncOrderDetailDto updateZbjType(Date startTime, Date endTime);
}
......@@ -26,7 +26,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 旺店通订单Service业务层处理
......@@ -49,6 +48,14 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
WdtRefundOrderDao wdtRefundOrderDao;
@Autowired
WdtRefundOrderDetailDao wdtRefundOrderDetailDao;
@Autowired
WdtSwapOrderDao wdtSwapOrderDao;
@Autowired
WdtSwapOrderDetailDao wdtSwapOrderDetailDao;
@Autowired
WdtRefundAmountDetailDao amountDetailDao;
@Autowired
FinianceBaseProductDao baseProductDao;
@Autowired
......@@ -71,32 +78,31 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
public SyncOrderDetailDto syncWdtOrder(Date startTime, Date endTime, Integer syncType) {
SyncOrderDetailDto detailDto = new SyncOrderDetailDto();
String batchNo = syncType + DateUtils.dateTimeNow() + Thread.currentThread().getId();
AtomicInteger beginPageNo = new AtomicInteger(0);
String method = "sales.TradeQuery.queryWithDetail";
try {
detailDto.setBatchNo(batchNo);
detailDto.setStartTime(startTime);
detailDto.setEndTime(endTime);
detailDto.setPageNo(0);
// 调用新方法设置时间范围
Date[] startTimeArray = {startTime};
Date[] endTimeArray = {endTime};
setupTimeRange(startTimeArray, endTimeArray, syncType, beginPageNo);
startTime = startTimeArray[0];
endTime = endTimeArray[0];
setupTimeRange(detailDto, syncType,60, method);
startTime = detailDto.getStartTime();
endTime = detailDto.getEndTime();
// 调用查询旺店通接口api 获取最新日期前的2小时
Date currentLatest = DateUtils.addHours(new Date(), -2);
if (currentLatest.compareTo(startTime) < 0) {
detailDto.setTotalCount(0);
detailDto.setBatchNo(batchNo);
detailDto.setStartTime(startTime);
detailDto.setEndTime(endTime);
detailDto.setMessage(String.format("开始时间%s不能大于当前时间%s", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(currentLatest)));
log.warn(String.format("开始时间%s不能大于当前时间%s", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(currentLatest)));
return detailDto;
}
if (!validateStartTime(startTime,endTime,batchNo)) {
if (!validateStartTime(detailDto )) {
return detailDto;
}
log.info("查询订单参数:开始时间{},结束时间{},当前页:{}", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(endTime), beginPageNo.get());
log.info("查询订单参数:开始时间{},结束时间{},当前页:{}", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(endTime), detailDto.getPageNo());
WdtOrderQueryVO wdtOrderQueryVO = new WdtOrderQueryVO();
wdtOrderQueryVO.setStart_time(com.alibaba.fastjson2.util.DateUtils.format(startTime));
......@@ -105,13 +111,12 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
params.putAll(BeanUtil.beanToMap(wdtOrderQueryVO));
// 旺店通入参 和其他入参分开传入 旺店通入参bean转map
String method = "sales.TradeQuery.queryWithDetail";
WangdiantongQueryDto wangdiantongQueryDto = wangdiantongUtil.queryWithDetail(params, beginPageNo, method);
WangdiantongQueryDto wangdiantongQueryDto = wangdiantongUtil.queryWithDetail(params,detailDto.getPageNo(), method);
JSONArray orderAllArray = wangdiantongQueryDto.getResult();
if (ObjectUtils.isEmpty(orderAllArray)) {
throw new ServiceException("旺店通没有查询到订单数据");
}
detailDto.setPageNo(wangdiantongQueryDto.getNextBeginPageNo());
//转化成orderList
List<FinanceOrder> orders = JSONArray.parseArray(orderAllArray.toString(), FinanceOrder.class, JSONReader.Feature.SupportSmartMatch);
......@@ -185,7 +190,7 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
orderDetail.setStandardCost(new BigDecimal(0));
orderDetail.setSumActualCost(new BigDecimal(0));
orderDetail.setSumStandardCost(new BigDecimal(0));
}else{
} else {
orderDetail.setActualCost(ObjectUtils.isNotEmpty(baseProductMap.get(orderDetail.getGoodsNo())) ?
baseProductMap.get(orderDetail.getGoodsNo()).getActualCost() :
new BigDecimal(0)
......@@ -206,23 +211,11 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
// 批量插入
orderDetailDao.saveOrUpdateBatch(mergeList);
String remark = String.format("订单数量:%s,详情数量:%s", orders.size(), mergeList.size());
log.info("插入订单和订单详情完成,批次{}开始时间{},结束时间{},订单数量:{},详情数量:{},下一次开始页数:{}", batchNo, DateUtil.formatDateTime(startTime),
DateUtil.formatDateTime(endTime), orders.size(), mergeList.size(), beginPageNo.get());
// dealCollectOrderLog(syncType, method, orders.size(), mergeList.size(), batchNo, endTime, beginPageNo, wangdiantongQueryDto);
DateUtil.formatDateTime(endTime), orders.size(), mergeList.size(), detailDto.getPageNo());
// 接口测试使用
// detailDto.setOrderCount(orders.size());
// detailDto.setOrderDetailCount(mergeList.size());
// detailDto.setStartTime(finalStartTime);
// detailDto.setPageNo(beginPageNo.get());
// detailDto.setEndTime(finalEndTime);
// detailDto.setTotalCount(wangdiantongQueryDto.getTotalCount());
// detailDto.setBatchNo(batchNo);
detailDto.setDetailInfo(orders.size(), mergeList.size(), beginPageNo.get(), wangdiantongQueryDto.getTotalCount(), batchNo, endTime, startTime);
detailDto.setDetailInfo(method, remark,syncType, orders.size(), mergeList.size(), wangdiantongQueryDto.getTotalCount(), batchNo, endTime, startTime);
orderLogInfoDao.insert(detailDto);
} catch (Exception e) {
detailDto.setCode(HttpStatus.HTTP_INTERNAL_ERROR);
......@@ -235,8 +228,10 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
return detailDto;
}
/**
* 同步退换货数据
*
* @param startTime
* @param endTime
* @param syncType
......@@ -246,20 +241,23 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
public SyncOrderDetailDto syncWdtRefundOrder(Date startTime, Date endTime, Integer syncType) {
SyncOrderDetailDto detailDto = new SyncOrderDetailDto();
String batchNo = syncType + DateUtils.dateTimeNow() + Thread.currentThread().getId();
AtomicInteger beginPageNo = new AtomicInteger(0);
String method = "aftersales.refund.Refund.search";
try {
detailDto.setBatchNo(batchNo);
detailDto.setStartTime(startTime);
detailDto.setEndTime(endTime);
detailDto.setPageNo(0);
// 调用新方法设置时间范围
Date[] startTimeArray = {startTime};
Date[] endTimeArray = {endTime};
setupTimeRange(startTimeArray, endTimeArray, syncType, beginPageNo);
startTime = startTimeArray[0];
endTime = endTimeArray[0];
if (!validateStartTime(startTime,endTime,batchNo)) {
setupTimeRange(detailDto, syncType, 60*24*1, method);
startTime = detailDto.getStartTime();
endTime = detailDto.getEndTime();
if (!validateStartTime(detailDto)) {
return detailDto;
}
log.info("查询订单参数:开始时间{},结束时间{},当前页:{}", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(endTime), beginPageNo.get());
log.info("查询订单参数:开始时间{},结束时间{},当前页:{}", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(endTime), detailDto.getPageNo());
// 旺店通入参 和其他入参分开传入 旺店通入参bean转map
WdtRefundQueryVO wdtOrderQueryVO = new WdtRefundQueryVO();
......@@ -269,29 +267,49 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
Map<String, Object> stringObjectMap = BeanUtil.beanToMap(wdtOrderQueryVO);
params.putAll(stringObjectMap);
// 退换单查询
String method = "aftersales.refund.Refund.search";
WangdiantongQueryDto wangdiantongQueryDto = wangdiantongUtil.queryWithDetail(params, beginPageNo, method);
WangdiantongQueryDto wangdiantongQueryDto = wangdiantongUtil.queryWithDetail(params, detailDto.getPageNo(), method);
JSONArray orderAllArray = wangdiantongQueryDto.getResult();
if (ObjectUtils.isEmpty(orderAllArray)) {
throw new ServiceException("旺店通没有查询到订单数据");
}
detailDto.setPageNo(wangdiantongQueryDto.getNextBeginPageNo());
// 保存数据
List<WdtRefundOrder> orders = JSONArray.parseArray(orderAllArray.toString(), WdtRefundOrder.class, JSONReader.Feature.SupportSmartMatch);
wdtRefundOrderDao.saveOrUpdateBatch(orders);
List<WdtRefundOrder> refundOrders = JSONArray.parseArray(orderAllArray.toString(), WdtRefundOrder.class, JSONReader.Feature.SupportSmartMatch);
wdtRefundOrderDao.saveOrUpdateBatch(refundOrders);
List<WdtRefundOrderDetail> mergeList = new ArrayList<>();
orders.forEach(order -> {
mergeList.addAll(order.getDetailList());
List<WdtRefundOrderDetail> refundOrderDetails = new ArrayList<>();
refundOrders.forEach(order -> {
refundOrderDetails.addAll(order.getDetailList());
});
wdtRefundOrderDetailDao.saveOrUpdateBatch(mergeList);
log.info("插入订单和订单详情完成,批次{}开始时间{},结束时间{},订单数量:{},详情数量:{},下一次开始页数:{}", batchNo, DateUtil.formatDateTime(startTime),
DateUtil.formatDateTime(endTime), orders.size(), mergeList.size(), beginPageNo.get());
detailDto.setDetailInfo(orders.size(), mergeList.size(), beginPageNo.get(), wangdiantongQueryDto.getTotalCount(), batchNo, endTime, startTime);
wdtRefundOrderDetailDao.saveOrUpdateBatch(refundOrderDetails);
// 换货信息
List<WdtSwapOrder> swapOrders = new ArrayList<>();
List<WdtSwapOrderDetail> swapOrderDetail = new ArrayList<>();
refundOrders.forEach(order -> {
if (ObjectUtils.isNotEmpty(order.getSwapOrder())) {
swapOrders.add(order.getSwapOrder());
swapOrderDetail.addAll(order.getSwapOrder().getSwapOrderDetailList());
}
});
wdtSwapOrderDao.saveOrUpdateBatch(swapOrders);
wdtSwapOrderDetailDao.saveOrUpdateBatch(swapOrderDetail);
// 金额明细
List<WdtRefundAmountDetail> amountDetailList = new ArrayList<>();
refundOrders.forEach(order -> {
if (ObjectUtils.isNotEmpty(order.getAmountDetailList())) {
amountDetailList.addAll(order.getAmountDetailList());
}
});
amountDetailDao.saveOrUpdateBatch(amountDetailList);
log.info("插入订单和订单详情完成,批次{}开始时间{},结束时间{},退货订单数量:{},详情数量:{},下一次开始页数:{}", batchNo, DateUtil.formatDateTime(startTime),
DateUtil.formatDateTime(endTime), refundOrders.size(), refundOrderDetails.size(), detailDto.getPageNo());
String remark = String.format("退货订单数量:%s,详情数量:%s,换货订单数量%s,换货详情数量%s,金额明细数量%s",
refundOrders.size(), refundOrderDetails.size(), swapOrders.size(), swapOrderDetail.size(), amountDetailList.size());
detailDto.setDetailInfo(method, remark, syncType,refundOrders.size(), refundOrderDetails.size(), wangdiantongQueryDto.getTotalCount(), batchNo, endTime, startTime);
orderLogInfoDao.insert(detailDto);
}catch (Exception e){
} catch (Exception e) {
detailDto.setCode(HttpStatus.HTTP_INTERNAL_ERROR);
detailDto.setMessage(e.toString());
log.error(e.getMessage(), e);
......@@ -300,48 +318,71 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
return detailDto;
}
/**
* 修改直播间类型
*
* @param startTime
* @param endTime
* @return
*/
@Override
public SyncOrderDetailDto updateZbjType(Date startTime, Date endTime) {
// 循环查询订单
return null;
}
private void setupTimeRange(Date[] startTime, Date[] endTime, Integer syncType, AtomicInteger beginPageNo) {
/**
* 设置开始时间和结束时间
* @param detailDto
* @param syncType
* @param interval
* @param method
*/
private void setupTimeRange(SyncOrderDetailDto detailDto, Integer syncType, Integer interval, String method) {
Date latestTime = null;
// startTime 为空,默认是定时任务调用
if (ObjectUtils.isEmpty(startTime[0])) {
if (ObjectUtils.isEmpty(detailDto.getStartTime())) {
// 继续下一页的标识 pageNo =-1 标识终止分页 pageNo >0 标识继续分页
boolean nextPageFlag = true;
Date latestTime = null;
// 查询最新的采集时间
CollectOrderLogDto collectOrderLog = orderLogInfoDao.selectOrderSyncLatest(syncType);
CollectOrderLogDto collectOrderLog = orderLogInfoDao.selectOrderSyncLatest(syncType, method);
if (ObjectUtils.isNotEmpty(collectOrderLog)) {
latestTime = collectOrderLog.getLatestTime();
Integer pageNoExist = collectOrderLog.getPageNo();
beginPageNo.set(ObjectUtil.isNotEmpty(pageNoExist) && pageNoExist > 0 ? collectOrderLog.getPageNo() : 0);
nextPageFlag = beginPageNo.get() > 0;
} else {
// 默认上个月的第一天 00:00:00
startTime[0] = DateUtil.beginOfDay(DateUtil.beginOfMonth(DateUtil.lastMonth()));
}
if (nextPageFlag) {
startTime[0] = DateUtils.addMinutes(latestTime, -60);
detailDto.setPageNo(ObjectUtil.isNotEmpty(pageNoExist) && pageNoExist > 0 ? collectOrderLog.getPageNo() : 0);
nextPageFlag = detailDto.getPageNo() > 0;
if (nextPageFlag) {
detailDto.setStartTime(collectOrderLog.getStartTime());
detailDto.setEndTime(collectOrderLog.getEndTime());
} else {
// 调用查询旺店通接口api 获取最新日期前的一个小时
detailDto.setStartTime(DateUtils.addMinutes(latestTime, -5));
detailDto.setEndTime(DateUtils.addMinutes(detailDto.getStartTime(), interval));
}
} else {
// 调用查询旺店通接口api 获取最新日期前的一个小时
startTime[0] = DateUtils.addMinutes(latestTime, -3);
// 默认上个月的第一天 00:00:00
detailDto.setStartTime(DateUtil.beginOfDay(DateUtil.beginOfMonth(DateUtil.lastMonth())));
detailDto.setEndTime(DateUtils.addMinutes(detailDto.getStartTime(), interval));
}
}
if (ObjectUtils.isEmpty(endTime[0])) {
endTime[0] = DateUtils.addMinutes(startTime[0], 60);
}
latestTime = detailDto.getEndTime();
detailDto.setLatestTime(latestTime);
}
private boolean validateStartTime(Date startTime, Date endTime, String batchNo) {
private boolean validateStartTime(SyncOrderDetailDto detailDto) {
Date currentLatest = DateUtils.addHours(new Date(), -2);
if (currentLatest.compareTo(startTime) < 0) {
SyncOrderDetailDto detailDto = new SyncOrderDetailDto();
if (currentLatest.compareTo(detailDto.getEndTime()) < 0) {
// SyncOrderDetailDto detailDto = new SyncOrderDetailDto();
detailDto.setTotalCount(0);
detailDto.setBatchNo(batchNo);
detailDto.setStartTime(startTime);
detailDto.setEndTime(endTime);
String message = String.format("开始时间%s不能大于当前时间%s", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(currentLatest));
// detailDto.setBatchNo(batchNo);
// detailDto.setStartTime(startTime);
// detailDto.setEndTime(endTime);
String message = String.format("结束时间%s不能大于当前时间%s", DateUtil.formatDateTime(detailDto.getEndTime()), DateUtil.formatDateTime(currentLatest));
detailDto.setMessage(message);
log.warn(message);
return false;
......
......@@ -15,7 +15,6 @@ import org.springframework.util.DigestUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Component
......@@ -38,10 +37,11 @@ public class WangdiantongUtil {
public WangdiantongUtil(WangdiantongConfig wangdiantongConfig) {
this.wangdiantongConfig = wangdiantongConfig;
}
/**
* 卖家账号/接口账号/盐/接口名称
*/
public WangdiantongQueryDto queryWithDetail(HashMap<String, Object> params, AtomicInteger beginPageNo,String method) {
public WangdiantongQueryDto queryWithDetail(HashMap<String, Object> params, Integer beginPageNo, String method) {
WangdiantongQueryDto wangdiantongQueryDto = new WangdiantongQueryDto();
JSONArray allArray = new JSONArray();
Integer totalCount = 0;
......@@ -49,7 +49,7 @@ public class WangdiantongUtil {
// 最大处理量,超过了,不再查询
int maxDealCount = 1000;
int size = 0;
int pageNo = beginPageNo.get();
int pageNo = beginPageNo.intValue();
// 出现了查询的分页数量不足的情况
int maxPage = 0;
do {
......@@ -106,11 +106,11 @@ public class WangdiantongUtil {
} while (size < maxDealCount && pageNo <= maxPage);
if (pageNo >= maxPage) {
// 已经到最后一页了,设置成-1,表示已经处理完了,不再查询
beginPageNo.set(-1);
beginPageNo = -1;
} else {
beginPageNo.set(pageNo);
beginPageNo = pageNo;
}
wangdiantongQueryDto.setNextBeginPageNo(pageNo);
wangdiantongQueryDto.setNextBeginPageNo(beginPageNo);
wangdiantongQueryDto.setResult(allArray);
wangdiantongQueryDto.setTotalCount(totalCount);
} catch (Exception e) {
......
<?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.WdtRefundAmountDetailMapper">
<insert id="saveOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_refund_amount_detail (
rec_id,
refund_id,
refund_type,
is_return,
refund_amount,
receive_amount,
is_guarantee,
account_id,
pay_account,
account_name,
account_bank,
is_auto,
remark
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.recId},
#{item.refundId},
#{item.refundType},
#{item.isReturn},
#{item.refundAmount},
#{item.receiveAmount},
#{item.isGuarantee},
#{item.accountId},
#{item.payAccount},
#{item.accountName},
#{item.accountBank},
#{item.isAuto},
#{item.remark}
)
</foreach>
ON DUPLICATE KEY UPDATE
refund_id = VALUES(refund_id),
refund_type = VALUES(refund_type),
is_return = VALUES(is_return),
refund_amount = VALUES(refund_amount),
receive_amount = VALUES(receive_amount),
is_guarantee = VALUES(is_guarantee),
account_id = VALUES(account_id),
pay_account = VALUES(pay_account),
account_name = VALUES(account_name),
account_bank = VALUES(account_bank),
is_auto = VALUES(is_auto),
remark = VALUES(remark)
</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">
<mapper namespace="com.sfa.job.domain.order.mapper.WdtSwapOrderDetailMapper">
<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
oid,
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},
......@@ -28,6 +37,7 @@
)
</foreach>
ON DUPLICATE KEY UPDATE
oid = VALUES(oid),
target_type = VALUES(target_type),
target_id = VALUES(target_id),
defect = VALUES(defect),
......
......@@ -4,15 +4,24 @@
<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
tid,
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},
......@@ -28,6 +37,7 @@
)
</foreach>
ON DUPLICATE KEY UPDATE
tid = VALUES(tid),
shop_no = VALUES(shop_no),
shop_name = VALUES(shop_name),
warehouse_no = VALUES(warehouse_no),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论