提交 0567e027 authored 作者: 吕本才's avatar 吕本才 提交者: Coding

Accept Merge Request #104: (qa -> master)

Merge Request: 上线财务成本统计需求 Created By: @吕本才 Accepted By: @吕本才 URL: https://g-pkkp8204.coding.net/p/wangxiaolu-sfa/d/wangxiaolu-sfa-module-job/git/merge/104?initial=true
...@@ -118,6 +118,7 @@ ...@@ -118,6 +118,7 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --> <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency> <dependency>
<groupId>com.squareup.okhttp3</groupId> <groupId>com.squareup.okhttp3</groupId>
......
package com.sfa.job; package com.sfa.job;
import com.sfa.common.security.annotation.EnableCustomConfig;
import com.sfa.common.security.annotation.EnableRyFeignClients;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.sfa.common.security.annotation.EnableCustomConfig;
import com.sfa.common.security.annotation.EnableRyFeignClients;
/** /**
* 定时任务 * 定时任务
...@@ -14,7 +14,7 @@ import com.sfa.common.security.annotation.EnableRyFeignClients; ...@@ -14,7 +14,7 @@ import com.sfa.common.security.annotation.EnableRyFeignClients;
@EnableCustomConfig @EnableCustomConfig
@EnableRyFeignClients @EnableRyFeignClients
@SpringBootApplication @SpringBootApplication
@MapperScan({"com.sfa.job.domain.job.mapper","com.sfa.job.domain.system.mapper"}) @MapperScan({"com.sfa.job.domain.job.mapper","com.sfa.job.domain.system.mapper","com.sfa.job.domain.order.mapper"})
public class SfaJobApplication public class SfaJobApplication
{ {
public static void main(String[] args) { public static void main(String[] args) {
......
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;
}
package com.sfa.job.constants;
public class Constants {
/**
* 采集数据方式
*/
public static final String SYNC_TYPE_XXL_JOB = "xxl-job";
}
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.SyncOrderDetailDto;
import com.sfa.job.service.order.FinanceOrderSyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
/**
* 调度任务信息操作处理
*
* @author ruoyi
*/
@Slf4j
@RestController
@RequestMapping("/finance/order")
public class FinanceOrderDetailSyncController extends BaseController {
@Autowired
private FinanceOrderSyncService syncService;
@GetMapping("/syncWdtOrderDetail")
public SyncOrderDetailDto syncWangdiantongOrderDetail(Date startTime, Date endTime) {
log.info("接口开始同步-旺店通订单明细api接口数据");
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
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("/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接口数据");
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
SyncOrderDetailDto detailDto = syncService.syncWdtRefundOrder(startTime, endTime, 1);
log.info("结束接口同步-旺店通退换订单明细api接口数据, 共同步退换货订单{}条数据,退换货订单明细{}条,退换货同步批次号:{},订单的开始时间{}和结束时间{},数量:{}",
detailDto.getOrderCount(),detailDto.getOrderDetailCount(),detailDto.getBatchNo(),
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()),detailDto.getRemark() );
return detailDto;
}
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
public interface CollectErrorLogDao {
// 插入一条记录
void insert(SyncOrderDetailDto collectErrorLog);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.pojo.response.CollectOrderLogDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
public interface CollectOrderLogDao {
// 插入一条记录
void insert(SyncOrderDetailDto collectOrderLog);
CollectOrderLogDto selectOrderSyncLatest(Integer syncType, String method);
}
package com.sfa.job.domain.order.dao;
import java.util.Map;
public interface FinanceBaseZbjTypeDao {
Map<String, String> selectBaseZbjType();
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.FinanceOrder;
import java.util.List;
public interface FinanceOrderDao {
void saveOrUpdateBatch(List<FinanceOrder> mergeList);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.FinanceOrderDetail;
import java.util.List;
public interface FinanceOrderDetailDao {
void saveOrUpdateBatch(List<FinanceOrderDetail> mergeList);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.FinanceBaseProduct;
import java.util.Map;
public interface FinianceBaseProductDao {
Map<String, FinanceBaseProduct> selectBaseProduct();
}
package com.sfa.job.domain.order.dao;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2024-11-22 16
* @describe :
*/
public interface IProductDao {
Map<String, String> selectProdSeries();
}
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);
}
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 cn.hutool.core.util.ObjectUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.constants.Constants;
import com.sfa.job.domain.order.dao.CollectErrorLogDao;
import com.sfa.job.domain.order.entity.CollectErrorLog;
import com.sfa.job.domain.order.mapper.CollectErrorLogMapper;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.Date;
@DS("bi")
@Repository
public class CollectErrorLogImpl implements CollectErrorLogDao {
@Autowired
private CollectErrorLogMapper collectErrorLogMapper;
@Override
public void insert(SyncOrderDetailDto detailDto) {
// 记录错误日志表 collect_error_info
CollectErrorLog errorInfo = new CollectErrorLog();
errorInfo.setBatchNo(detailDto.getBatchNo());
errorInfo.setType(Constants.SYNC_TYPE_XXL_JOB);
errorInfo.setErrorMsg(ObjectUtil.isNotEmpty(detailDto.getMessage())? StringUtils.substring(detailDto.getMessage(),0,2000):"");
errorInfo.setEndTime(detailDto.getEndTime());
errorInfo.setStartTime(detailDto.getStartTime());
errorInfo.setCollectTime(new Date());
collectErrorLogMapper.insert(errorInfo);
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.job.domain.order.dao.CollectOrderLogDao;
import com.sfa.job.domain.order.entity.CollectOrderLog;
import com.sfa.job.domain.order.mapper.CollectOrderLogMapper;
import com.sfa.job.pojo.response.CollectOrderLogDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("bi")
@Repository
public class CollectOrderLogDaoImpl implements CollectOrderLogDao {
@Autowired
private CollectOrderLogMapper logInfoMapper;
@Override
public void insert(SyncOrderDetailDto detailDto) {
CollectOrderLog collectOrderLog = new CollectOrderLog();
BeanUtils.copyProperties(detailDto,collectOrderLog);
collectOrderLog.setSyncType(detailDto.getSyncType());
collectOrderLog.setMethod(detailDto.getMethod());
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, 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"));
if(ObjectUtils.isNotEmpty(orderList)){
// 最新的数据日期
CollectOrderLog collectOrderLog = orderList.get(0);
return BeanUtils.transitionDto(collectOrderLog, CollectOrderLogDto.class);
}
return null;
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.job.domain.order.dao.FinianceBaseProductDao;
import com.sfa.job.domain.order.entity.FinanceBaseProduct;
import com.sfa.job.domain.order.mapper.FinanceBaseProductMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@DS("bi")
@Repository
public class FinianceBaseProductDaoImpl implements FinianceBaseProductDao {
@Autowired
FinanceBaseProductMapper mapper;
@Override
public Map<String, FinanceBaseProduct> selectBaseProduct() {
// 查询所有商品
List<FinanceBaseProduct> list = mapper.selectList(new LambdaQueryWrapper<>()) ;
// 以料号为key,商品对象为value,放入map中
Map<String, FinanceBaseProduct> map = list.stream()
.collect(HashMap::new, (k, v) -> k.put(v.getPrdCode(), v), HashMap::putAll);
return map;
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.job.domain.order.dao.FinanceBaseZbjTypeDao;
import com.sfa.job.domain.order.entity.FinanceBaseZbjType;
import com.sfa.job.domain.order.mapper.FinanceBaseZbjTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@DS("bi")
@Repository
public class FinianceBaseZbjTypeDaoImpl implements FinanceBaseZbjTypeDao {
@Autowired
FinanceBaseZbjTypeMapper mapper;
@Override
public Map<String, String> selectBaseZbjType() {
List<FinanceBaseZbjType> list = mapper.selectList(new LambdaQueryWrapper<>());
// 以fenxiaoName为key,直播间渠道类型为value,放入map中
Map<String, String> map = list.stream()
.collect(HashMap::new, (k, v) -> k.put(v.getFenxiaoName(), v.getZbjQdType()), HashMap::putAll);
return map;
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.FinanceOrderDao;
import com.sfa.job.domain.order.entity.FinanceOrder;
import com.sfa.job.domain.order.mapper.FinanceOrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("bi")
@Repository
public class FinianceOrderDaoImpl implements FinanceOrderDao {
private static final int BATCH_SIZE = 1000;
@Autowired
private FinanceOrderMapper financeOrderMapper;
@Override
public void saveOrUpdateBatch(List<FinanceOrder> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<FinanceOrder> batchLists = mergeList.subList(i, toIndex);
financeOrderMapper.saveOrUpdateBatch(batchLists);
}
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.FinanceOrderDetailDao;
import com.sfa.job.domain.order.entity.FinanceOrderDetail;
import com.sfa.job.domain.order.mapper.FinanceOrderDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@DS("bi")
@Repository
public class FinianceOrderDetailDaoImpl implements FinanceOrderDetailDao {
private static final int BATCH_SIZE = 1000;
@Autowired
private FinanceOrderDetailMapper financeOrderDetailMapper;
@Override
public void saveOrUpdateBatch(List<FinanceOrderDetail> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<FinanceOrderDetail> batchLists = mergeList.subList(i, toIndex);
financeOrderDetailMapper.saveOrUpdateBatch(batchLists);
}
}
}
package com.sfa.job.domain.order.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.job.domain.order.dao.IProductDao;
import com.sfa.job.domain.order.entity.PrdInfo;
import com.sfa.job.domain.order.mapper.PrdInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2024-11-22 16
* @describe :
*/
@Service
public class ProductDaoImpl implements IProductDao {
@Autowired
PrdInfoMapper prdInfoMapper;
@Override
public Map<String, String> selectProdSeries() {
List<PrdInfo> prdInfos = prdInfoMapper.selectList(
new LambdaQueryWrapper<PrdInfo>()
.select(PrdInfo::getSeries, PrdInfo::getPrdCode, PrdInfo::getPrdName)
.groupBy(PrdInfo::getSeries, PrdInfo::getPrdCode, PrdInfo::getPrdName));
// 转换成map
Map<String, String> prodSeriesMap = new HashMap<>();
if (ObjectUtil.isNotEmpty(prdInfos)) {
prdInfos.stream().forEach(prdInfoDto -> {
prodSeriesMap.put(prdInfoDto.getPrdCode(), prdInfoDto.getPrdName());
});
}
return prodSeriesMap;
}
}
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);
}
}
}
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.time.LocalDateTime;
import java.util.Date;
import java.util.Map;
/**
* CollectErrorInfo 类表示采集错误记录,与数据库表 market_bi.collect_error_info 相对应。
* 包含了采集错误记录的各种信息,如唯一键、入参信息、类型、采集时间、删除标志、创建和更新的用户及时间等。
*/
@TableName(value ="collect_error_log")
@Data
public class CollectErrorLog {
/**
* 唯一键,自动递增
*/
private Long ceiId;
/**
* 入参信息,存储为 JSON 格式
*/
private Map<String, Object> param;
/**
* 类型,如 xxljob、影刀等
*/
private String type;
/**
* 采集时间
*/
private Date collectTime;
/**
* 是否删除标志,'0' 表示未删除,'1' 表示已删除
*/
private char delFlag;
/**
* 创建者
*/
private String createBy;
/**
* 创建人 UserID
*/
private Long createUserId;
/**
* 创建时间,默认为当前时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private String updateBy;
/**
* 修改人 UserID
*/
private Long updateUserId;
/**
* 更新时间,自动更新为当前时间
*/
private LocalDateTime updateTime;
/**
* 采集批次
*/
private String batchNo;
/**
* 本批次采集开始时间
*/
private Date startTime;
/**
* 本批次采集结束时间
*/
private Date endTime;
/**
* 错误信息
*/
private String errorMsg;
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 采集订单日志信息
*
* @TableName collect_order_log_info
* @author lvbencai
* @date 2025-01-16 22:58:38
* @description
*/
@Data
@TableName("collect_order_log")
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 Date startTime;
/**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/
private Date endTime;
/**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/;
/**
* 采集批次信息,可存储长度不超过 30 个字符,使用 utf8mb4 字符集和 utf8mb4_0900_ai_ci 校对规则
*/
private String batchNo;
/**
* 采集的最新时间,代表上一次采集的结束时间,存储为日期时间类型
*/
private Date latestTime;
// 2025年01月22日17:24:37增加,用于分批次查询
private Integer pageNo;
/**
* 是否删除的标志,'0' 表示未删除,'1' 表示已删除,使用 utf8mb3 字符集和 utf8mb3_general_ci 校对规则
*/
private String delFlag;
/**
* 创建者信息,存储为长度不超过 20 个字符的字符串
*/
private String createBy;
/**
* 创建人的用户 ID,存储为长整型
*/
private Long createUserId;
/**
* 创建时间,存储为日期时间类型,使用数据库的当前时间作为默认值
*/
private Date createTime;
/**
* 更新者信息,存储为长度不超过 20 个字符的字符串
*/
private String updateBy;
/**
* 修改人的用户 ID,存储为长整型
*/
private Long updateUserId;
/**
* 更新时间,存储为日期时间类型,更新时自动更新为当前时间
*/
private Date updateTime;
private Integer syncType;
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.math.BigDecimal;
/**
* finance_base_product 表对应的 料号基本信息表。
* 主要字段实际成本、标准成本、规格、口味
* @author lvbencai
* @date 2025年01月07日10:04:25
*/
@Data
public class FinanceBaseProduct {
// 唯一标识主键
@TableId(type = IdType.AUTO)
private Integer fbpId;
// 料号
private String prdCode;
// 品名
private String prdName;
// 规格
private String prdBarCode;
// 实际成本
private BigDecimal actualCost;
// 标准成本
private BigDecimal standardCost;
// 一级分类
private String firstCategory;
// 二级分类
private String secondCategory;
// 规格
private String spec;
// 口味
private String flavor;
// 系列
private String series;
// 产品分类编码
private String productClassificationCode;
// 产品分类
private String productClassification;
// 主分群码(重复字段,可根据实际需求调整)
private String mainGroupCode;
// 主分群码名称
private String mainGroupName;
// 料件类别(重复字段,可根据实际需求调整)
private String materialType;
// 料件类别描述
private String materialTypeName;
// 基础单位
private String basicUnit;
// 生命周期状态
private String lifeCycleStatus;
// 生命周期
private String lifeCycle;
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.time.LocalDateTime;
/**
* finance_base_zbj_type 表对应的直播间分类细腻系表。
* 主要字段直播间渠道类型、分销商名称
* @author lvbcai
* @date 2025年01月07日10:04:25
*/
@Data
public class FinanceBaseZbjType {
// 唯一键
@TableId(type = IdType.AUTO)
private Long fbztId;
// 分销商名称
private String fenxiaoName;
// 直播间渠道类型 有分销商id,不是以上几类的,统一为达人 没有分销商id的,默认为商城
private String zbjQdType;
// 采集批次
private String batchNo;
// 备注
private String remark;
// 是否删除标志 0 未删除 1 已删除
private char delFlag;
// 创建者
private String createBy;
// 创建人 UserID
private Long createUserId;
// 创建时间
private LocalDateTime createTime;
// 更新者
private String updateBy;
// 修改人 UserID
private Long updateUserId;
// 更新时间
private LocalDateTime updateTime;
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 商品-管理表
* @TableName pro_info
*/
@TableName(value ="prd_info")
@Data
public class PrdInfo implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer prdId;
/**
* 商品编码
*/
private String prdCode;
/**
* 商品名称
*/
private String prdName;
/**
* 商品系列
*/
private Integer seriesId;
/**
* 商品系列
*/
private String series;
/**
* 商品规格-69码
*/
private String prdSpec;
/**
* 销售状态:1:在售,0:停售
*/
private Integer saleStatus;
/**
* 0:正常;1:删除
*/
private Integer status;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
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 {
/**
* 金额明细记录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;
}
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 {
/**
* 退换单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;
}
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 {
/**
* 退换单明细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;
}
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;
/**
* 店铺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;
}
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;
/**
* 货品类型(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.CollectErrorLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CollectErrorLogMapper extends BaseMapper<CollectErrorLog> {
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.CollectOrderLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CollectOrderLogMapper extends BaseMapper<CollectOrderLog> {
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.FinanceBaseProduct;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface FinanceBaseProductMapper extends BaseMapper<FinanceBaseProduct> {
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.FinanceBaseZbjType;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface FinanceBaseZbjTypeMapper extends BaseMapper<FinanceBaseZbjType> {
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.FinanceOrderDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface FinanceOrderDetailMapper extends BaseMapper<FinanceOrderDetail> {
void saveOrUpdateBatch(@Param(value = "list") List<FinanceOrderDetail> mergeList);
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.FinanceOrder;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface FinanceOrderMapper extends BaseMapper<FinanceOrder> {
void saveOrUpdateBatch(List<FinanceOrder> batchLists);
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.PrdInfo;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【prd_info(商品-管理表)】的数据库操作Mapper
* @createDate 2024-11-22 16:48:35
* @Entity com.link.bi.domain.entity.PrdInfo
*/
@Repository
@Mapper
public interface PrdInfoMapper extends BaseMapper<PrdInfo> {
}
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);
}
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);
}
package com.sfa.job.pojo.request;
import lombok.Data;
/**
* @author lvbencai
* @date 2025-01-22 21:15:39
* @Description: 旺店通查询订单请求参数,可以按照旺店通的来定义
*/
@Data
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.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 采集订单日志信息
*
* @author lvbencai
* @date 2025-02-24 14:24:39
* @description
*/
@Data
public class CollectOrderLogDto implements Serializable {
/**
* 唯一键,用于唯一标识采集订单日志信息记录
*/
@TableId(value = "cli_id",type= IdType.AUTO)
private Long cliId;
/**
* 采集订单的数量,存储为字符串,长度不超过 20 个字符
*/
private Date endTime;
/**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/
private Date startTime;
/**
* 采集批次信息,可存储长度不超过 30 个字符,使用 utf8mb4 字符集和 utf8mb4_0900_ai_ci 校对规则
*/
private String batchNo;
/**
* 采集的最新时间,代表上一次采集的结束时间,存储为日期时间类型
*/
private Date latestTime;
// 2025年01月22日17:24:37增加,用于分批次查询
private Integer pageNo;
/**
* 是否删除的标志,'0' 表示未删除,'1' 表示已删除,使用 utf8mb3 字符集和 utf8mb3_general_ci 校对规则
*/
private String delFlag;
/**
* 创建者信息,存储为长度不超过 20 个字符的字符串
*/
private String createBy;
/**
* 创建人的用户 ID,存储为长整型
*/
private Long createUserId;
/**
* 创建时间,存储为日期时间类型,使用数据库的当前时间作为默认值
*/
private Date createTime;
/**
* 更新者信息,存储为长度不超过 20 个字符的字符串
*/
private String updateBy;
/**
* 修改人的用户 ID,存储为长整型
*/
private Long updateUserId;
/**
* 更新时间,存储为日期时间类型,更新时自动更新为当前时间
*/
private Date updateTime;
private Integer syncType;
private Integer totalCount;
}
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;
}
package com.sfa.job.pojo.response;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
/**
* 商品-dto
*/
@Data
public class PrdInfoDto implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer prdId;
/**
* 商品编码
*/
private String prdCode;
/**
* 商品名称
*/
private String prdName;
/**
* 商品系列
*/
private Integer seriesId;
/**
* 商品系列
*/
private String series;
/**
* 商品规格-69码
*/
private String prdSpec;
/**
* 销售状态:1:在售,0:停售
*/
private Integer saleStatus;
/**
* 0:正常;1:删除
*/
private Integer status;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
package com.sfa.job.pojo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 财务同步旺店通接口-返回数据Dto
*/
@Data
public class SyncOrderDetailDto {
private String method;
private String remark;
/**
* 订单数量
*/
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 Date latestTime;
private Integer syncType;
private String batchNo;
private Integer pageNo;
private Integer totalCount;
/**
* 错误信息
*/
private String message;
private Integer code = 200;
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.setEndTime(endTime);
this.setLatestTime(endTime);
this.setTotalCount(totalCount);
this.setBatchNo(batchNo);
this.setMethod(method);
this.setSyncType(syncType);
this.setRemark(remark);
return this;
}
}
package com.sfa.job.pojo.response;
import com.alibaba.fastjson2.JSONArray;
import lombok.Data;
/**
* @author lvbencai
* @date 2025-01-22 21:15:39
* @Description: 旺店通查询订单请求参数, 可以按照旺店通的来定义
*/
@Data
public class WangdiantongQueryDto {
private JSONArray result;
private Integer totalCount;
private Integer nextBeginPageNo;
}
package com.sfa.job.service.order;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
import java.util.Date;
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);
}
...@@ -67,7 +67,7 @@ public class FeiShuUtil { ...@@ -67,7 +67,7 @@ public class FeiShuUtil {
.build(); .build();
FindByDepartmentUserResp resp = client.contact().user().findByDepartment(req); FindByDepartmentUserResp resp = client.contact().user().findByDepartment(req);
if(!resp.success()) { if(!resp.success()) {
System.out.println(String.format("code:%s,msg:%s,reqId:%s, resp:%s", log.warn(String.format("code:%s,msg:%s,reqId:%s, resp:%s",
resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), "UTF-8"))))); resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), "UTF-8")))));
return null; return null;
} }
......
package com.sfa.job.util;
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.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;
@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(HashMap<String, Object> params, Integer beginPageNo, String method) {
WangdiantongQueryDto wangdiantongQueryDto = new WangdiantongQueryDto();
JSONArray allArray = new JSONArray();
Integer totalCount = 0;
try {
// 最大处理量,超过了,不再查询
int maxDealCount = 1000;
int size = 0;
int pageNo = beginPageNo.intValue();
// 出现了查询的分页数量不足的情况
int maxPage = 0;
do {
// 使用配置类中的属性
String url = wangdiantongConfig.getUrl();
String sid = wangdiantongConfig.getSid();
String key = wangdiantongConfig.getKey();
String salt = wangdiantongConfig.getSalt();
String appsecret = wangdiantongConfig.getAppsecret();
String v = "1.0";
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;
String sign = DigestUtils.md5DigestAsHex(signParams.toString().getBytes());
log.debug(signParams);
log.debug(sign);
StringBuilder urlParams = new StringBuilder()
.append("sid=").append(sid)
.append("&key=").append(key)
.append("&salt=").append(salt)
.append("&method=").append(method)
.append("&v=").append(v)
.append("&timestamp=").append(System.currentTimeMillis() / 1000 - 1325347200)
.append("&sign=").append(sign)
.append("&page_size=").append(200)
.append("&page_no=").append(pageNo)
.append("&calc_total=").append(1);
log.info("查询订单数据url:" + url + "?" + urlParams);
RequestBody body = RequestBody.create(MediaType.get("application/json"), JSONObject.toJSONString(paramsList));
Request urlRequestBuild = new Request.Builder().url(url + "?" + urlParams).post(body).build();
OkHttpClient client = new OkHttpClient();
Response execute = client.newCall(urlRequestBuild).execute();
JSONObject responseJson = JSONObject.parseObject(execute.body().string());
JSONObject dataR = responseJson.getJSONObject("data");
JSONObject messageJson = responseJson.getJSONObject("message");
if (ObjectUtils.isNotEmpty(messageJson)) {
log.error("访问旺店通接口错误" + messageJson.toString());
throw new ServiceException("访问旺店通接口错误" + messageJson.toString());
}
totalCount = dataR.getInteger("total_count");
maxPage = (totalCount + 199) / 200;
JSONArray orderJsonArray = dataR.getJSONArray("order");
allArray.addAll(orderJsonArray);
size = allArray.size();
log.info("当前入参{},查询返回的order条数:{},总条数totalCount:{},page_no:{}", JSONObject.toJSONString(params), orderJsonArray.size(), totalCount, pageNo);
// 计算下一次分页的页码
pageNo++;
} while (size < maxDealCount && pageNo <= maxPage);
if (pageNo >= maxPage) {
// 已经到最后一页了,设置成-1,表示已经处理完了,不再查询
beginPageNo = -1;
} else {
beginPageNo = pageNo;
}
wangdiantongQueryDto.setNextBeginPageNo(beginPageNo);
wangdiantongQueryDto.setResult(allArray);
wangdiantongQueryDto.setTotalCount(totalCount);
} catch (Exception e) {
// 记录异常日志
log.error("异常信息:{}" + e.getMessage(), e);
throw new ServiceException("旺店通接口获取数据错误" + e.getMessage());
}
return wangdiantongQueryDto;
}
}
package com.sfa.job.xxljob.order;
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.SyncOrderDetailDto;
import com.sfa.job.service.order.FinanceOrderSyncService;
import com.xxl.job.core.context.XxlJobContext;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author : 吕本才
* @date : 2025-01-15 13:03:51
* @describe : 财务订单数据
*/
@Component
@Slf4j
public class FinanceOrderTask {
@Autowired
FinanceOrderSyncService financeOrderSyncService;
/**
* 同步部门数据
*/
@XxlJob("syncWangdiantongOrderDetail")
public SyncOrderDetailDto syncWangdiantongOrderDetail() {
Long st = 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.syncWdtOrder(null, null,0);
XxlJobHelper.log("xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}",
detailDto.getOrderCount(),detailDto.getOrderDetailCount(),detailDto.getBatchNo(),
DateUtil.formatDateTime(detailDto.getStartTime()),DateUtil.formatDateTime(detailDto.getEndTime()) );
if(ObjectUtil.equals(HttpStatus.HTTP_OK,detailDto.getCode()) ){
XxlJobHelper.handleSuccess(JSONObject.toJSONString(detailDto));
}else{
XxlJobHelper.handleFail(detailDto.getMessage());
}
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;
}
}
<?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">
<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,
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.revertReason},
#{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 = VALUES(revert_reason),
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.WdtSwapOrderDetailMapper">
<insert id="saveOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_swap_order_detail (
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.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
oid = VALUES(oid),
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,
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.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
tid = VALUES(tid),
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论