提交 56ddf0dc authored 作者: 吕本才's avatar 吕本才

feat(订单): 新增销售出库单同步功能及相关实体、Mapper和Service

实现销售出库单的同步功能,包括: 1. 新增WdtQimenStockoutOrder相关实体类、Mapper和Service 2. 添加销售出库单明细、货位明细、拣货位明细等子表结构 3. 实现批量插入或更新操作的批量处理逻辑 4. 增加销售出库单同步接口和控制器 5. 优化WdtQimenUtil工具类的签名生成日志 6. 调整SyncOrderDetailDto字段命名更准确 修复订单支付时间同步服务中参数类命名错误问题
上级 d0c30c20
package com.sfa.job.controller.order;
import com.sfa.job.pojo.order.response.WdtStockoutSalesQueryWithDetailDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
import com.sfa.job.service.order.IWdtQimenStockoutOrderSyncService;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 销售出库单同步Controller
*/
@RestController
@RequestMapping("/order/stockout")
public class WdtQimenStockoutOrderController {
@Autowired
private IWdtQimenStockoutOrderSyncService stockoutOrderSyncService;
/**
* 同步销售出库单
* @param startTime 开始时间(格式:yyyy-MM-dd HH:mm:ss)
* @param endTime 结束时间(格式:yyyy-MM-dd HH:mm:ss)
* @param shopNo 店铺编号
* @return 同步结果
*/
@GetMapping("/sync")
public SyncOrderDetailDto syncStockoutOrder(
@RequestParam("startTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
@RequestParam("endTime")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime,
@RequestParam(value = "pageSize", required = false, defaultValue = "200") Long pageSize) {
return stockoutOrderSyncService.syncStockoutOrder(startTime, endTime, 1,pageSize);
}
/**
* 同步单个销售出库单
* @param stockoutNo 出库单编号
* @return 同步结果
*/
@GetMapping("/sync/single")
public WdtStockoutSalesQueryWithDetailDto syncSingleStockoutOrder(
@RequestParam("stockoutNo") String stockoutNo) {
return stockoutOrderSyncService.syncSingleStockoutOrder(stockoutNo);
}
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtQimenStockOutPickPositionDetail;
import java.util.List;
/**
* 拣货位明细 DAO
*/
public interface WdtQimenStockOutPickPositionDetailDao {
/**
* 保存拣货位明细
* @param detail 拣货位明细
* @return 保存结果
*/
int save(WdtQimenStockOutPickPositionDetail detail);
/**
* 批量保存拣货位明细
* @param details 拣货位明细列表
* @return 保存结果
*/
int batchSave(List<WdtQimenStockOutPickPositionDetail> details);
/**
* 根据出库单明细ID查询拣货位明细
* @param stockoutDetailId 出库单明细ID
* @return 拣货位明细列表
*/
List<WdtQimenStockOutPickPositionDetail> listByStockoutDetailId(Integer stockoutDetailId);
/**
* 批量插入或更新拣货位明细
* @param details 拣货位明细列表
* @return 保存结果
*/
int insertOrUpdateBatch(List<WdtQimenStockOutPickPositionDetail> details);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutGovSubsidy;
import java.util.List;
/**
* 国补信息 DAO
*/
public interface WdtQimenStockoutGovSubsidyDao {
/**
* 保存国补信息
* @param subsidy 国补信息
* @return 保存结果
*/
int save(WdtQimenStockoutGovSubsidy subsidy);
/**
* 批量保存国补信息
* @param subsidies 国补信息列表
* @return 保存结果
*/
int batchSave(List<WdtQimenStockoutGovSubsidy> subsidies);
/**
* 批量插入或更新国补信息
* @param subsidies 国补信息列表
* @return 保存结果
*/
int insertOrUpdateBatch(List<WdtQimenStockoutGovSubsidy> subsidies);
/**
* 根据出库单号查询国补信息
* @param stockoutNo 出库单号
* @return 国补信息列表
*/
List<WdtQimenStockoutGovSubsidy> listByStockoutNo(String stockoutNo);
}
\ No newline at end of file
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutLogisticsDetail;
import java.util.List;
/**
* 物流单详情 DAO
*/
public interface WdtQimenStockoutLogisticsDetailDao {
/**
* 保存物流单详情
* @param detail 物流单详情
* @return 保存结果
*/
int save(WdtQimenStockoutLogisticsDetail detail);
/**
* 批量保存物流单详情
* @param details 物流单详情列表
* @return 保存结果
*/
int batchSave(List<WdtQimenStockoutLogisticsDetail> details);
/**
* 批量插入或更新物流单详情
* @param details 物流单详情列表
* @return 保存结果
*/
int insertOrUpdateBatch(List<WdtQimenStockoutLogisticsDetail> details);
/**
* 根据出库单号查询物流单详情
* @param stockoutNo 出库单号
* @return 物流单详情列表
*/
List<WdtQimenStockoutLogisticsDetail> listByStockoutNo(String stockoutNo);
}
\ No newline at end of file
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutOrder;
import java.util.List;
/**
* 销售出库单 DAO
*/
public interface WdtQimenStockoutOrderDao {
/**
* 保存销售出库单
* @param stockoutOrder 销售出库单
* @return 保存结果
*/
int save(WdtQimenStockoutOrder stockoutOrder);
/**
* 根据出库单编号查询
* @param stockoutNo 出库单编号
* @return 销售出库单
*/
WdtQimenStockoutOrder getByStockoutNo(String stockoutNo);
/**
* 查询所有销售出库单
* @return 销售出库单列表
*/
List<WdtQimenStockoutOrder> listAll();
int insertOrUpdate(WdtQimenStockoutOrder stockoutOrder);
/**
* 批量插入或更新销售出库单
* @param stockoutOrders 销售出库单列表
* @return 影响的行数
*/
int insertOrUpdateBatch(List<WdtQimenStockoutOrder> stockoutOrders);
}
\ No newline at end of file
package com.sfa.job.domain.order.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.job.domain.order.entity.WdtQimenStockoutOrder;
import com.sfa.job.domain.order.mapper.WdtQimenStockoutOrderMapper;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
/**
* 销售出库单 DAO 实现
*/
@Repository
public class WdtQimenStockoutOrderDaoImpl implements WdtQimenStockoutOrderDao {
private static final int BATCH_SIZE = 100; // 分批大小,可根据实际情况调整
@Resource
private WdtQimenStockoutOrderMapper stockoutOrderMapper;
@Override
public int save(WdtQimenStockoutOrder stockoutOrder) {
return stockoutOrderMapper.insert(stockoutOrder);
}
@Override
public WdtQimenStockoutOrder getByStockoutNo(String stockoutNo) {
return stockoutOrderMapper.selectOne(new LambdaQueryWrapper<WdtQimenStockoutOrder>()
.eq(WdtQimenStockoutOrder::getOrderNo, stockoutNo));
}
@Override
public List<WdtQimenStockoutOrder> listAll() {
return stockoutOrderMapper.selectList(null);
}
@Override
public int insertOrUpdate(WdtQimenStockoutOrder stockoutOrder) {
return stockoutOrderMapper.insertOrUpdate(stockoutOrder);
}
@Override
public int insertOrUpdateBatch(List<WdtQimenStockoutOrder> stockoutOrders) {
if (stockoutOrders == null || stockoutOrders.isEmpty()) {
return 0;
}
int totalUpdated = 0;
// 分批处理,避免MySQL packet too large错误
for (int i = 0; i < stockoutOrders.size(); i += BATCH_SIZE) {
int endIndex = Math.min(i + BATCH_SIZE, stockoutOrders.size());
List<WdtQimenStockoutOrder> batch = stockoutOrders.subList(i, endIndex);
totalUpdated += stockoutOrderMapper.insertOrUpdateBatch(batch);
}
return totalUpdated;
}
}
\ No newline at end of file
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutOrderDetail;
import java.util.List;
/**
* 销售出库单明细 DAO
*/
public interface WdtQimenStockoutOrderDetailDao {
/**
* 保存销售出库单明细
* @param stockoutOrderDetail 销售出库单明细
* @return 保存结果
*/
int save(WdtQimenStockoutOrderDetail stockoutOrderDetail);
/**
* 根据出库单编号查询明细
* @param stockoutNo 出库单编号
* @return 销售出库单明细列表
*/
List<WdtQimenStockoutOrderDetail> listByStockoutNo(String stockoutNo);
/**
* 批量保存销售出库单明细
* @param stockoutOrderDetails 销售出库单明细列表
* @return 保存结果
*/
int batchSave(List<WdtQimenStockoutOrderDetail> stockoutOrderDetails);
void insertOrUpdateBatch(List<WdtQimenStockoutOrderDetail> stockoutOrderDetailList);
}
package com.sfa.job.domain.order.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.job.domain.order.entity.WdtQimenStockoutOrderDetail;
import com.sfa.job.domain.order.mapper.WdtQimenStockoutOrderDetailMapper;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
/**
* 销售出库单明细 DAO 实现
*/
@Repository
public class WdtQimenStockoutOrderDetailDaoImpl implements WdtQimenStockoutOrderDetailDao {
private static final int BATCH_SIZE = 50; // 分批大小,避免MySQL packet too large错误
@Resource
private WdtQimenStockoutOrderDetailMapper stockoutOrderDetailMapper;
@Override
public int save(WdtQimenStockoutOrderDetail stockoutOrderDetail) {
return stockoutOrderDetailMapper.insert(stockoutOrderDetail);
}
@Override
public List<WdtQimenStockoutOrderDetail> listByStockoutNo(String stockoutNo) {
return stockoutOrderDetailMapper.selectList(new LambdaQueryWrapper<WdtQimenStockoutOrderDetail>()
.eq(WdtQimenStockoutOrderDetail::getStockoutNo, stockoutNo));
}
@Override
public int batchSave(List<WdtQimenStockoutOrderDetail> stockoutOrderDetails) {
int count = 0;
for (WdtQimenStockoutOrderDetail detail : stockoutOrderDetails) {
count += stockoutOrderDetailMapper.insert(detail);
}
return count;
}
@Override
public void insertOrUpdateBatch(List<WdtQimenStockoutOrderDetail> stockoutOrderDetailList) {
if (stockoutOrderDetailList == null || stockoutOrderDetailList.isEmpty()) {
return;
}
// 分批处理,避免MySQL packet too large错误
for (int i = 0; i < stockoutOrderDetailList.size(); i += BATCH_SIZE) {
int endIndex = Math.min(i + BATCH_SIZE, stockoutOrderDetailList.size());
List<WdtQimenStockoutOrderDetail> batch = stockoutOrderDetailList.subList(i, endIndex);
stockoutOrderDetailMapper.insertOrUpdateBatch(batch);
}
}
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutPositionDetail;
import java.util.List;
/**
* 出库货位明细 DAO
*/
public interface WdtQimenStockoutPositionDetailDao {
/**
* 保存出库货位明细
* @param detail 出库货位明细
* @return 保存结果
*/
int save(WdtQimenStockoutPositionDetail detail);
/**
* 批量保存出库货位明细
* @param details 出库货位明细列表
* @return 保存结果
*/
int batchSave(List<WdtQimenStockoutPositionDetail> details);
/**
* 根据出库单明细ID查询货位明细
* @param stockoutDetailId 出库单明细ID
* @return 货位明细列表
*/
List<WdtQimenStockoutPositionDetail> listByStockoutDetailId(Integer stockoutDetailId);
/**
* 批量插入或更新出库货位明细
* @param details 出库货位明细列表
* @return 保存结果
*/
int insertOrUpdateBatch(List<WdtQimenStockoutPositionDetail> details);
}
......@@ -32,7 +32,7 @@ public class CollectOrderLogDaoImpl implements CollectOrderLogDao {
collectOrderLog.setBatchNo(detailDto.getBatchNo());
collectOrderLog.setLatestTime(detailDto.getLatestTime() );
collectOrderLog.setPageNo(detailDto.getPageNo());
collectOrderLog.setTotalCount(detailDto.getTotalCount());
collectOrderLog.setTotalCount(detailDto.getOrderCount());
collectOrderLog.setRemark(detailDto.getRemark());
logInfoMapper.insert(collectOrderLog);
}
......
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sfa.job.domain.order.dao.WdtQimenStockOutPickPositionDetailDao;
import com.sfa.job.domain.order.entity.WdtQimenStockOutPickPositionDetail;
import com.sfa.job.domain.order.mapper.WdtQimenStockOutPickPositionDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 拣货位明细 DAO 实现
*/
@DS("bi")
@Repository
public class WdtQimenStockOutPickPositionDetailDaoImpl implements WdtQimenStockOutPickPositionDetailDao {
private static final int BATCH_SIZE = 50; // 分批大小,避免MySQL packet too large错误
@Autowired
private WdtQimenStockOutPickPositionDetailMapper wdtQimenStockOutPickPositionDetailMapper;
@Override
public int save(WdtQimenStockOutPickPositionDetail detail) {
return wdtQimenStockOutPickPositionDetailMapper.insert(detail);
}
@Override
public int batchSave(List<WdtQimenStockOutPickPositionDetail> details) {
if (details == null || details.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < details.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, details.size());
List<WdtQimenStockOutPickPositionDetail> batchList = details.subList(i, toIndex);
for (WdtQimenStockOutPickPositionDetail detail : batchList) {
count += wdtQimenStockOutPickPositionDetailMapper.insert(detail);
}
}
return count;
}
@Override
public List<WdtQimenStockOutPickPositionDetail> listByStockoutDetailId(Integer stockoutDetailId) {
return wdtQimenStockOutPickPositionDetailMapper.selectList(
new QueryWrapper<WdtQimenStockOutPickPositionDetail>()
.eq("stockout_detail_id", stockoutDetailId)
);
}
@Override
public int insertOrUpdateBatch(List<WdtQimenStockOutPickPositionDetail> details) {
if (details == null || details.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < details.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, details.size());
List<WdtQimenStockOutPickPositionDetail> batchList = details.subList(i, toIndex);
count += wdtQimenStockOutPickPositionDetailMapper.insertOrUpdateBatch(batchList);
}
return count;
}
}
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sfa.job.domain.order.dao.WdtQimenStockoutGovSubsidyDao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutGovSubsidy;
import com.sfa.job.domain.order.mapper.WdtQimenStockoutGovSubsidyMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 国补信息 DAO 实现
*/
@DS("bi")
@Repository
public class WdtQimenStockoutGovSubsidyDaoImpl implements WdtQimenStockoutGovSubsidyDao {
private static final int BATCH_SIZE = 50; // 分批大小,避免MySQL packet too large错误
@Autowired
private WdtQimenStockoutGovSubsidyMapper wdtQimenStockoutGovSubsidyMapper;
@Override
public int save(WdtQimenStockoutGovSubsidy subsidy) {
return wdtQimenStockoutGovSubsidyMapper.insert(subsidy);
}
@Override
public int batchSave(List<WdtQimenStockoutGovSubsidy> subsidies) {
if (subsidies == null || subsidies.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < subsidies.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, subsidies.size());
List<WdtQimenStockoutGovSubsidy> batchList = subsidies.subList(i, toIndex);
for (WdtQimenStockoutGovSubsidy subsidy : batchList) {
count += wdtQimenStockoutGovSubsidyMapper.insert(subsidy);
}
}
return count;
}
@Override
public int insertOrUpdateBatch(List<WdtQimenStockoutGovSubsidy> subsidies) {
if (subsidies == null || subsidies.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < subsidies.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, subsidies.size());
List<WdtQimenStockoutGovSubsidy> batchList = subsidies.subList(i, toIndex);
count += wdtQimenStockoutGovSubsidyMapper.insertOrUpdateBatch(batchList);
}
return count;
}
@Override
public List<WdtQimenStockoutGovSubsidy> listByStockoutNo(String stockoutNo) {
return wdtQimenStockoutGovSubsidyMapper.selectList(
new QueryWrapper<WdtQimenStockoutGovSubsidy>()
.eq("stockout_no", stockoutNo)
);
}
}
\ No newline at end of file
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sfa.job.domain.order.dao.WdtQimenStockoutLogisticsDetailDao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutLogisticsDetail;
import com.sfa.job.domain.order.mapper.WdtQimenStockoutLogisticsDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 物流单详情 DAO 实现
*/
@DS("bi")
@Repository
public class WdtQimenStockoutLogisticsDetailDaoImpl implements WdtQimenStockoutLogisticsDetailDao {
private static final int BATCH_SIZE = 50; // 分批大小,避免MySQL packet too large错误
@Autowired
private WdtQimenStockoutLogisticsDetailMapper wdtQimenStockoutLogisticsDetailMapper;
@Override
public int save(WdtQimenStockoutLogisticsDetail detail) {
return wdtQimenStockoutLogisticsDetailMapper.insert(detail);
}
@Override
public int batchSave(List<WdtQimenStockoutLogisticsDetail> details) {
if (details == null || details.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < details.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, details.size());
List<WdtQimenStockoutLogisticsDetail> batchList = details.subList(i, toIndex);
for (WdtQimenStockoutLogisticsDetail detail : batchList) {
count += wdtQimenStockoutLogisticsDetailMapper.insert(detail);
}
}
return count;
}
@Override
public int insertOrUpdateBatch(List<WdtQimenStockoutLogisticsDetail> details) {
if (details == null || details.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < details.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, details.size());
List<WdtQimenStockoutLogisticsDetail> batchList = details.subList(i, toIndex);
count += wdtQimenStockoutLogisticsDetailMapper.insertOrUpdateBatch(batchList);
}
return count;
}
@Override
public List<WdtQimenStockoutLogisticsDetail> listByStockoutNo(String stockoutNo) {
return wdtQimenStockoutLogisticsDetailMapper.selectList(
new QueryWrapper<WdtQimenStockoutLogisticsDetail>()
.eq("stockout_no", stockoutNo)
);
}
}
\ No newline at end of file
package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.WdtQimenStockoutPositionDetailDao;
import com.sfa.job.domain.order.entity.WdtQimenStockoutPositionDetail;
import com.sfa.job.domain.order.mapper.WdtQimenStockoutPositionDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 出库货位明细 DAO 实现
*/
@DS("bi")
@Repository
public class WdtQimenStockoutPositionDetailDaoImpl implements WdtQimenStockoutPositionDetailDao {
private static final int BATCH_SIZE = 50; // 分批大小,避免MySQL packet too large错误
@Autowired
private WdtQimenStockoutPositionDetailMapper wdtQimenStockoutPositionDetailMapper;
@Override
public int save(WdtQimenStockoutPositionDetail detail) {
return wdtQimenStockoutPositionDetailMapper.insert(detail);
}
@Override
public int batchSave(List<WdtQimenStockoutPositionDetail> details) {
if (details == null || details.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < details.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, details.size());
List<WdtQimenStockoutPositionDetail> batchList = details.subList(i, toIndex);
for (WdtQimenStockoutPositionDetail detail : batchList) {
count += wdtQimenStockoutPositionDetailMapper.insert(detail);
}
}
return count;
}
@Override
public List<WdtQimenStockoutPositionDetail> listByStockoutDetailId(Integer stockoutDetailId) {
return wdtQimenStockoutPositionDetailMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<WdtQimenStockoutPositionDetail>()
.eq("stockout_detail_id", stockoutDetailId)
);
}
@Override
public int insertOrUpdateBatch(List<WdtQimenStockoutPositionDetail> details) {
if (details == null || details.isEmpty()) {
return 0;
}
int count = 0;
for (int i = 0; i < details.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, details.size());
List<WdtQimenStockoutPositionDetail> batchList = details.subList(i, toIndex);
count += wdtQimenStockoutPositionDetailMapper.insertOrUpdateBatch(batchList);
}
return count;
}
}
......@@ -78,6 +78,14 @@ public class WdtQimenOrderPayTime {
* 分销商昵称
*/
private String fenxiaoNick;
/**
* 分销商id
*/
private String fenxiaoId;
/**
* 分销商name
*/
private String fenxiaoName;
/**
* 下单时间(毫秒级时间戳,例如:1631861379000)
*/
......
package com.sfa.job.domain.order.entity;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 拣货位明细
*/
@Data
@TableName("wdt_qimen_stockout_pick_position_detail")
public class WdtQimenStockOutPickPositionDetail {
/** 货位明细id */
private Integer recId;
/** 销售出库单详情id */
private Integer stockoutDetailId;
/** 货位id */
private Integer positionId;
/** 货位号 */
private String positionNo;
/** 有效期 */
private String expireDate;
/** 生产日期 */
private String productionDate;
/** 批次号 */
private String batchNo;
/** 当前货位出库总货品数量 */
private BigDecimal positionGoodsCount;
/** 商家编码 */
private String specNo;
/** 创建时间 */
private Date createTime;
/** 更新时间 */
private Date updateTime;
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 国补信息
*/
@Data
@TableName("wdt_qimen_stockout_gov_subsidy")
public class WdtQimenStockoutGovSubsidy{
/** 原始单号 */
private String tid;
/** 原始子单号 */
private String oid;
/** 公司主体名称 */
private String corpEntityName;
}
package com.sfa.job.domain.order.entity;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("wdt_qimen_stockout_logistics_detail")
public class WdtQimenStockoutLogisticsDetail {
/** 货位明细id */
private Integer recId;
/** 销售出库单详情id */
private Integer stockoutDetailId;
/** 货位id */
private Integer positionId;
/** 货位号 */
private String positionNo;
/** 有效期 */
private String expireDate;
/** 生产日期 */
private String productionDate;
/** 批次号 */
private String batchNo;
/** 当前货位出库总货品数量 */
private BigDecimal positionGoodsCount;
/** 批次备注 */
private String batchRemark;
/** 创建时间 */
private Date createTime;
/** 更新时间 */
private Date 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;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 销售出库单明细
* 对应表:wdt_qimen_stockout_order_detail
*/
@Data
@TableName("wdt_qimen_stockout_order_detail")
public class WdtQimenStockoutOrderDetail implements Serializable {
private static final long serialVersionUID = 1L;
/** 销售出库单详情的id */
private Integer recId;
/** 出库单id */
private Integer stockoutId;
/** 出库单号 */
private String stockoutNo;
/** 订单明细id */
private Integer srcOrderDetailId;
/** 单品id(系统单品主键) */
private Integer specId;
/** 商家编码 */
private String specNo;
/** 货品数量(按货位分组则为总数量) */
private BigDecimal goodsCount;
/** 总成本 成本价*货品数量 */
private BigDecimal totalAmount;
/** 成交价(价格变化时不变,取实际成交价用sharePrice) */
private BigDecimal sellPrice;
/** 出库单明细备注 */
private String remark;
/** 货品名称 */
private String goodsName;
/** 货品编号 */
private String goodsNo;
/** 规格名称 */
private String specName;
/** 规格码 */
private String specCode;
/** 货品成本 */
private BigDecimal costPrice;
/** 总重量 */
private BigDecimal weight;
/** 货品id(系统货品主键) */
private Integer goodsId;
/** 规格自定义属性1 */
private String prop1;
/** 规格自定义属性2 */
private String prop2;
/** 规格自定义属性3 */
private String prop3;
/** 规格自定义属性4 */
private String prop4;
/** 规格自定义属性5 */
private String prop5;
/** 规格自定义属性6 */
private String prop6;
/** 平台id */
private Integer platformId;
/** 平台名称 */
private String platformName;
/** 退款状态 0=无退款 5=退款成功等 */
private Integer refundStatus;
/** 单价/货品原单价 */
private BigDecimal marketPrice;
/** 货品总优惠 */
private BigDecimal discount;
/** 系统销售出库明细对应的货品成交价 */
private BigDecimal sharePrice;
/** 总货款/货品成交总价 */
private BigDecimal shareAmount;
/** 税率 */
private BigDecimal taxRate;
/** 主条码 */
private String barcode;
/** 基本单位名称 */
private String unitName;
/** 订单货品(子订单)id */
private Integer saleOrderId;
/** 是否是赠品 0=非赠品 1=自动赠送等 */
private Integer giftType;
/** 原始子订单号 */
private String srcOid;
/** 子单原始订单号 */
private String srcTid;
/** 订单内部来源 0=无来源 1=手机等 */
private Integer fromMask;
/** 货品类型 0=其它 1=销售货品等 */
private Integer goodsType;
/** 货品自定义属性1 */
private String goodProp1;
/** 货品自定义属性2 */
private String goodProp2;
/** 货品自定义属性3 */
private String goodProp3;
/** 货品自定义属性4 */
private String goodProp4;
/** 货品自定义属性5 */
private String goodProp5;
/** 货品自定义属性6 */
private String goodProp6;
/** 当need_sn=true时返回,英文逗号分隔的sn */
private String snList;
/** 组合装编码 */
private String suiteNo;
/** 组合装数量 */
private BigDecimal suiteNum;
/** 分摊邮费 */
private BigDecimal sharePostAmount;
/** 已付 */
private BigDecimal paid;
/** 是否包装 true=是 false=否 */
private Boolean isPackage;
/** 品牌编号 */
private String brandNo;
/** 品牌名称 */
private String brandName;
/** 源单据类别 1=销售订单 */
private Integer srcOrderType;
/** 基本单位id */
private Integer baseUnitId;
/** 辅助单位 */
private Integer unitId;
/** 单位换算 */
private BigDecimal unitRatio;
/** 辅助数量 */
private BigDecimal num2;
/** 货品数量 */
private BigDecimal num;
/** 出库货位id */
private Integer positionId;
/** 指定出库批次 */
private Integer batchId;
/** 是否验货 */
private Integer isExamined;
/** 有效期 格式:yyyy-MM-dd HH:mm:ss */
private String expireDate;
/** 扫描方式 0=未验货 1=扫描验货等 */
private Integer scanType;
/** 最后修改时间 格式:yyyy-MM-dd HH:mm:ss */
private String modifiedDate;
/** 创建时间 格式:yyyy-MM-dd HH:mm:ss */
private String createdDate;
/** 分类名称 */
private String className;
/** 平台货品id */
private String apiGoodsId;
/** 平台规格id */
private String apiSpecId;
/** 打包积分 */
private BigDecimal packScore;
/** 拣货积分 */
private BigDecimal pickScore;
/** 验货积分 */
private BigDecimal scanScore;
/** 平台货品名称 */
private String apiGoodsName;
/** 批次备注 */
private String batchRemark;
/** 分销商昵称 */
private String fenxiaoNick;
/** 分销商id */
private String fenxiaoId;
/** 分销商name */
private String fenxiaoName;
/** 出库货位明细列表 */
@TableField(exist = false)
private List<WdtQimenStockoutPositionDetail> positionDetailsList;
/** 拣货位明细列表 */
@TableField(exist = false)
private List<WdtQimenStockOutPickPositionDetail> pickPositionDetailsList;
/** 创建者 */
private String createBy;
/** 创建人ID */
private Long createUserId;
/** 更新者 */
private String updateBy;
/** 更新人ID */
private Long updateUserId;
/** 删除标志(0未删除,1已删除) */
private String delFlag;
/** 创建时间 */
private Date createTime;
/** 更新时间 */
private Date updateTime;
/**
* 设置分销商ID和名称
* 从fenxiaoNick中解析出fenxiaoId和fenxiaoName
*/
public void setFenxiaoIdAndName() {
if (fenxiaoNick != null && !fenxiaoNick.isEmpty()) {
this.fenxiaoId = extractDistributorId(fenxiaoNick);
this.fenxiaoName = extractDistributorName(fenxiaoNick);
}
}
/**
* 从输入字符串中提取分销商 ID
*/
private String extractDistributorId(String input) {
if (input == null || input.isEmpty()) {
return "";
}
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("id:(\\d+);");
java.util.regex.Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
return matcher.group(1);
}
return "";
}
/**
* 从输入字符串中提取分销商名称
*/
private String extractDistributorName(String input) {
if (input == null || input.isEmpty()) {
return "";
}
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(";(.*)】");
java.util.regex.Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
return matcher.group(1);
}
return "";
}
}
package com.sfa.job.domain.order.entity;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 出库货位明细
*/
@Data
@TableName("wdt_qimen_stockout_position_detail")
public class WdtQimenStockoutPositionDetail {
/** 货位明细id */
private Integer recId;
/** 销售出库单详情id */
private Integer stockoutDetailId;
/** 货位id */
private Integer positionId;
/** 货位号 */
private String positionNo;
/** 有效期 */
private String expireDate;
/** 生产日期 */
private String productionDate;
/** 批次号 */
private String batchNo;
/** 当前货位出库总货品数量 */
private BigDecimal positionGoodsCount;
/** 批次备注 */
private String batchRemark;
/** 创建时间 */
private Date createTime;
/** 更新时间 */
private Date updateTime;
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtQimenStockOutPickPositionDetail;
import java.util.List;
/**
* 拣货位明细 Mapper
*/
public interface WdtQimenStockOutPickPositionDetailMapper extends BaseMapper<WdtQimenStockOutPickPositionDetail> {
/**
* 批量插入或更新
* @param details 明细列表
* @return 影响的行数
*/
int insertOrUpdateBatch(List<WdtQimenStockOutPickPositionDetail> details);
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtQimenStockoutGovSubsidy;
import java.util.List;
/**
* 国补信息 Mapper
*/
public interface WdtQimenStockoutGovSubsidyMapper extends BaseMapper<WdtQimenStockoutGovSubsidy> {
/**
* 批量插入或更新国补信息
* @param subsidies 国补信息列表
* @return 影响的行数
*/
int insertOrUpdateBatch(List<WdtQimenStockoutGovSubsidy> subsidies);
}
\ No newline at end of file
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtQimenStockoutLogisticsDetail;
import java.util.List;
/**
* 物流单详情 Mapper
*/
public interface WdtQimenStockoutLogisticsDetailMapper extends BaseMapper<WdtQimenStockoutLogisticsDetail> {
/**
* 批量插入或更新物流单详情
* @param details 物流单详情列表
* @return 影响的行数
*/
int insertOrUpdateBatch(List<WdtQimenStockoutLogisticsDetail> details);
}
\ No newline at end of file
package com.sfa.job.domain.order.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtQimenStockoutOrderDetail;
/**
* 销售出库单明细 Mapper
*/
public interface WdtQimenStockoutOrderDetailMapper extends BaseMapper<WdtQimenStockoutOrderDetail> {
void insertOrUpdateBatch(List<WdtQimenStockoutOrderDetail> stockoutOrderDetailList);
}
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtQimenStockoutOrder;
import java.util.List;
/**
* 销售出库单 Mapper
*/
public interface WdtQimenStockoutOrderMapper extends BaseMapper<WdtQimenStockoutOrder> {
/**
* 插入或更新销售出库单
* @param stockoutOrder 销售出库单
* @return 影响的行数
*/
int insertOrUpdate(WdtQimenStockoutOrder stockoutOrder);
/**
* 批量插入或更新销售出库单
* @param stockoutOrders 销售出库单列表
* @return 影响的行数
*/
int insertOrUpdateBatch(List<WdtQimenStockoutOrder> stockoutOrders);
}
\ No newline at end of file
package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.WdtQimenStockoutPositionDetail;
import java.util.List;
/**
* 出库货位明细 Mapper
*/
public interface WdtQimenStockoutPositionDetailMapper extends BaseMapper<WdtQimenStockoutPositionDetail> {
/**
* 批量插入或更新
* @param details 明细列表
* @return 影响的行数
*/
int insertOrUpdateBatch(List<WdtQimenStockoutPositionDetail> details);
}
package com.sfa.job.enums;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
/**
* 旺店通平台映射信息枚举
* 基于旺店通开放平台文档和常见映射关系
*/
@Getter
public enum WdtPlatformMappingEnum {
// 平台映射
OFFLINE(0, "线下"),
TAOBAO(1, "淘宝"),
TAOBAO_FENXIAO(2, "淘宝分销"),
JINGDONG(3, "京东"),
PAIPAI(4, "拍拍"),
AMAZON(5, "亚马逊"),
YHD(6, "1号店"),
DANGDANG(7, "当当网"),
GOME(8, "国美"),
ALIBABA(9, "阿里巴巴"),
EC_SHOP(10, "ECShop"),
MIKAOLIN(11, "麦考林"),
V_PLUS(12, "V+"),
SUNING(13, "苏宁"),
VIPSHOP(14, "唯品会"),
YIXUN(15, "易迅"),
JUMEI(16, "聚美"),
YOUZAN(17, "有赞(口袋通)"),
HIShop(18, "Hishop"),
HUICE_PRODUCT(19, "慧策产品"),
MEILISHUO(20, "美丽说"),
MOGUJIE(21, "蘑菇街"),
BEIBEI(22, "贝贝网"),
EC_STORE(23, "ECstore"),
ZHE800(24, "折800"),
RONG_EGOU(25, "融e购"),
CHUANYI_ZHUSHOU(26, "穿衣助手"),
CHUCHUJIE(27, "楚楚街"),
WEIMENG(28, "微盟"),
JUANPI(29, "卷皮网"),
SHUNFENG_HEIKE(30, "顺丰嘿客"),
WEISHOP(32, "微店"),
BAIDU_MALL(33, "百度mall"),
MIA(34, "蜜芽"),
MINGXING_YICHU(35, "明星衣橱"),
SHANRONG_SHANGCHENG(36, "善融商城"),
ALIEXPRESS(37, "速卖通"),
MENGDIAN(38, "萌店"),
PINDUODUO(39, "拼多多"),
JINGDONG_DAOJIA(40, "京东到家"),
BAIDU_WAIMAI(41, "百度外卖"),
MEITUAN_WAIMAI(42, "美团外卖"),
ELEME(45, "饿了么"),
WOMAIGOU(46, "我买网"),
RENRENDIAN(47, "人人店"),
MEITUN_MAMA(48, "美囤妈妈(宝宝树)"),
JIUYI_PINTUAN(49, "91拼团"),
KOALA(50, "考拉海购"),
QIANMI_WANG(51, "千米网"),
TESHEHUI(52, "特奢汇"),
CHUCHUJIE_PINTUAN(53, "楚楚街拼团"),
HAIZIWANG(55, "孩子王"),
XIAOHONGSHU(56, "小红书"),
GEGEJIA(57, "格格家"),
YUNJI(58, "云集"),
CHUCHUTONG(59, "楚楚通"),
FANLI_WANG(60, "返利网"),
JIUXIAN_WANG(61, "酒仙网"),
PINGAN_HAOYISHENG(62, "平安好医生"),
XIA_CHUFANG(63, "下厨房"),
HAOSHIQI(64, "好食期"),
DABIAN_DIANDIAN(65, "大V店"),
HAOYIKU(66, "好衣库(鲸灵)"),
DALINGJIA(67, "达令家"),
AI_KUCUN(68, "爱库存"),
DOUYIN_DIAN(69, "抖店(放心购)"),
MEIRI_YITAO(70, "每日一淘"),
BEIKE_YOUPIN(71, "贝壳优品"),
XIAOMI_YOUPIN(72, "小米有品"),
WEILAI_JISHI(73, "未来集市"),
AIQIYI_SHANGCHENG(74, "爱奇艺商城"),
KUAISHOU_XIAODIAN(75, "快手小店"),
MOKUAI_XINGXUAN(76, "魔筷星选"),
HAIPAKE(77, "海拍客"),
YIQIANBAO(78, "壹钱包"),
MEIRI_YOUXIAN(79, "每日优鲜"),
WANGYI_YANXUAN(80, "网易严选"),
DUODIAN(81, "多点"),
TIANMAO_CHAOSHI(82, "天猫超市一盘货"),
WEIXIN_VIDEONO(83, "微信视频号"),
JIAOLAN_JIaren(84, "娇兰佳人"),
TUHU_YANGCHE(85, "途虎养车"),
JINRI_BAOTUAN(86, "今日爆团"),
ALI_JIANKANG(87, "阿里健康大药房"),
BIYAO(88, "必要"),
TENCENT_FENGYE(89, "腾讯枫页"),
WEIXIN_XIAOSHANGDIAN(90, "微信小商店"),
KUAISHOU_JINNIU(91, "快手金牛"),
MODIAN(92, "摩点"),
YIDINGHUO(93, "易订货"),
TIANMAO_GUOJI_ZHIYING(94, "天猫国际直营(轻轨三号线)"),
YIKE(96, "驿氪"),
MAMA_LIANGPIN(97, "妈妈良品"),
XIAOMANG_DIANSHANG(98, "小芒电商"),
KAMEILA(99, "卡美啦"),
NIANFENG_DADANGJIA(100, "年丰大当家"),
DEWU(101, "得物"),
KOALA_SHANGJIA_ZHIFA(102, "考拉商家直发"),
MEITUAN_SHANGOU(103, "美团闪购"),
XINHUA_SHUDIAN(104, "新华书店"),
YUNHUO_YOUXUAN(105, "云货优选"),
LINGSHOUTONG(106, "零售通"),
YIJIUP(107, "易久批"),
TENCENT_HUIJU(108, "腾讯惠聚"),
XIAOE_PINPIN(109, "小鹅拼拼"),
DU_XIAODIAN(110, "度小店"),
FENGYE_XIAODIAN(111, "枫页小店"),
DINGXIANG_MAMA(112, "丁香妈妈"),
YAOSHI_BANG(113, "药师帮"),
FENGLEI(114, "峰雷"),
SHEIN(115, "SHEIN希音"),
BILIBILI_HUIYUANGOU(116, "bilibili会员购"),
QUNJIELONG(117, "群接龙"),
ZHAOSHANG_YINHANG(118, "招商银行掌上生活"),
HUAWEI_SHANGCHENG(119, "华为商城"),
WEIXIN_LIANJIEQI(120, "微信连接器"),
DANCHUANG_VTN(121, "单创VTN"),
TIANHONG_SHANGCHENG(122, "天虹商城"),
YOULU_WANG(123, "有路网"),
FENXIAO(125, "分销"),
DINGZHI(126, "定制"),
QITA_ZIYOU_SHANGCHENG(127, "其他(自有商城)"),
MAOXIANG_KAOLA_ZHIYING(128, "猫享-考拉自营"),
B_PLUS(131, "B+"),
XIANYU(134, "闲鱼"),
XIAYATONG(135, "小亚通"),
BAIDU_YINGXIAO(136, "百度营销2.0/百度优选"),
TAOBAO_DAIDA_DAIFA(137, "淘宝代打代发"),
ZHENKUNXING(138, "震坤行"),
DOUYIN_GONGXIAO(139, "抖音供销"),
SHUNLIAN_DONGLI(140, "顺联动力"),
XINGYUN_HUOCANG(141, "行云货仓"),
MIAOJIE(142, "喵街"),
CHUANGHUO(144, "闯货"),
BAIDU_JIANKANG(146, "百度健康"),
WEIBO_DIANSHANG(148, "微博电商"),
WEISHANG_XIANGCE(150, "微商相册"),
HELIANG(151, "禾量"),
HUACHENG_NONGFU(152, "花城农夫"),
DOUYIN_CHAOSHI(154, "抖音超市"),
MEITUAN_SHANDIANCANG(159, "美团闪电仓"),
YIZHIFU(164, "翼支付"),
BENLAI_SHENGHUO(165, "本来生活"),
SHULIAN_TONG(166, "书链通"),
DAMA(168, "达摩"),
DONGFANG_ZHENXUAN(169, "东方甄选"),
YISHANG_CHUANGXIN_SIYU(171, "一商创信私域"),
TAOBAO_MAICAI(172, "淘宝买菜"),
HEMA_YUNCHAO(173, "盒马云超"),
JUHAOMAI(174, "聚好麦"),
DASHI_XIONG(176, "大师熊"),
YAOJIUJIU(177, "药九九"),
FANMILIN(179, "梵蜜琳"),
ZHAOCAI_HUIGOU(180, "招财慧购"),
BINGKUN(182, "秉坤"),
SUOYOU_NVSHENG(188, "所有女生"),
XINGMA_YOUXUAN(192, "星妈优选"),
JINGDONG_YUNcang_VMI(194, "京东云仓VMI"),
HAOYOUDUO(199, "好又多"),
KUajing(202, "跨境"),
WEISHANGCHENG(204, "唯商城");
private final Integer platformId;
private final String platformName;
WdtPlatformMappingEnum(Integer platformId, String platformName) {
this.platformId = platformId;
this.platformName = platformName;
}
// 平台ID到平台名称的映射缓存
private static final Map<Integer, String> platformMap = new HashMap<>();
// 静态初始化块,构建映射关系
static {
for (WdtPlatformMappingEnum enumValue : values()) {
platformMap.put(enumValue.platformId, enumValue.platformName);
}
}
/**
* 根据平台ID获取平台名称
* @param platformId 平台ID
* @return 平台名称,若不存在则返回null
*/
public static String getPlatformName(Integer platformId) {
return platformMap.get(platformId);
}
/**
* 根据平台名称获取平台ID
* @param platformName 平台名称
* @return 平台ID,若不存在则返回null
*/
public static Integer getPlatformId(String platformName) {
for (WdtPlatformMappingEnum enumValue : values()) {
if (enumValue.platformName.equals(platformName)) {
return enumValue.platformId;
}
}
return null;
}
/**
* 检查平台ID是否存在
* @param platformId 平台ID
* @return 是否存在
*/
public static boolean exists(Integer platformId) {
return platformMap.containsKey(platformId);
}
/**
* 获取所有平台映射关系
* @return 平台ID到平台名称的映射
*/
public static Map<Integer, String> getAllPlatforms() {
return new HashMap<>(platformMap);
}
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import com.taobao.api.internal.util.json.JSONWriter;
import java.util.Map;
public class WdtSalesTradeQueryQueryWithDetailVo extends BaseTaobaoRequest<WdtSalesTradeQueryQueryWithDetailDto> {
public class WdtSalesTradeQueryWithDetailVo extends BaseTaobaoRequest<WdtSalesTradeQueryQueryWithDetailDto> {
private String datetime;
private String pager;
private String params;
......@@ -22,7 +22,7 @@ public class WdtSalesTradeQueryQueryWithDetailVo extends BaseTaobaoRequest<WdtSa
private String topApiVersion = "1.0";
private String topApiFormat;
public WdtSalesTradeQueryQueryWithDetailVo() {
public WdtSalesTradeQueryWithDetailVo() {
}
public void setDatetime(String datetime) {
......@@ -37,7 +37,7 @@ public class WdtSalesTradeQueryQueryWithDetailVo extends BaseTaobaoRequest<WdtSa
this.pager = pager;
}
public void setPager(WdtSalesTradeQueryQueryWithDetailVo.Pager pager) {
public void setPager(WdtSalesTradeQueryWithDetailVo.Pager pager) {
this.pager = (new JSONWriter(false, false, true)).write(pager);
}
......@@ -49,7 +49,7 @@ public class WdtSalesTradeQueryQueryWithDetailVo extends BaseTaobaoRequest<WdtSa
this.params = params;
}
public void setParams(WdtSalesTradeQueryQueryWithDetailVo.Params params) {
public void setParams(WdtSalesTradeQueryWithDetailVo.Params params) {
this.params = (new JSONWriter(false, false, true)).write(params);
}
......
package com.sfa.job.pojo.order.request;
import com.qimencloud.api.scene3ldsmu02o9.response.WdtWmsStockoutSalesQuerywithdetailResponse;
import com.sfa.job.pojo.order.response.WdtStockoutSalesQueryWithDetailDto;
import com.taobao.api.ApiRuleException;
import com.taobao.api.BaseTaobaoRequest;
import com.taobao.api.internal.mapping.ApiField;
import com.taobao.api.internal.util.TaobaoHashMap;
import com.taobao.api.internal.util.json.JSONWriter;
import java.util.Map;
public class WdtStockoutSalesQueryWithDetailRequest extends BaseTaobaoRequest<WdtWmsStockoutSalesQuerywithdetailResponse> {
private String datetime;
private String pager;
private String params;
private String wdtAppkey;
private String wdtSalt;
private String wdtSign;
private String topContentType;
private String topResponseType = "qimen1";
private String topApiVersion = "1.0";
private String topApiFormat;
public WdtStockoutSalesQueryWithDetailRequest() {
}
public void setDatetime(String datetime) {
this.datetime = datetime;
}
public String getDatetime() {
return this.datetime;
}
public void setPager(String pager) {
this.pager = pager;
}
public void setPager(Pager pager) {
this.pager = (new JSONWriter(false, false, true)).write(pager);
}
public String getPager() {
return this.pager;
}
public void setParams(String params) {
this.params = params;
}
public void setParams(Params params) {
this.params = (new JSONWriter(false, false, true)).write(params);
}
public String getParams() {
return this.params;
}
public void setWdtAppkey(String wdtAppkey) {
this.wdtAppkey = wdtAppkey;
}
public String getWdtAppkey() {
return this.wdtAppkey;
}
public void setWdtSalt(String wdtSalt) {
this.wdtSalt = wdtSalt;
}
public String getWdtSalt() {
return this.wdtSalt;
}
public void setWdtSign(String wdtSign) {
this.wdtSign = wdtSign;
}
public String getWdtSign() {
return this.wdtSign;
}
public String getApiMethodName() {
return "wdt.wms.stockout.sales.querywithdetail";
}
public String getTopContentType() {
return this.topContentType;
}
public void setTopContentType(String topContentType) {
this.topContentType = topContentType;
}
public String getTopResponseType() {
return this.topResponseType;
}
public void setTopResponseType(String topResponseType) {
this.topResponseType = topResponseType;
}
public String getTopApiVersion() {
return this.topApiVersion;
}
public void setTopApiVersion(String topApiVersion) {
this.topApiVersion = topApiVersion;
}
public String getTopApiFormat() {
return this.topApiFormat;
}
public void setTopApiFormat(String topApiFormat) {
this.topApiFormat = topApiFormat;
}
public Map<String, String> getTextParams() {
TaobaoHashMap txtParams = new TaobaoHashMap();
txtParams.put("datetime", this.datetime);
txtParams.put("pager", this.pager);
txtParams.put("params", this.params);
txtParams.put("wdt_appkey", this.wdtAppkey);
txtParams.put("wdt_salt", this.wdtSalt);
txtParams.put("wdt_sign", this.wdtSign);
if (this.udfParams != null) {
txtParams.putAll(this.udfParams);
}
return txtParams;
}
public Class<WdtWmsStockoutSalesQuerywithdetailResponse> getResponseClass() {
return WdtWmsStockoutSalesQuerywithdetailResponse.class;
}
public void check() throws ApiRuleException {
}
public static class Pager {
@ApiField("page_no")
private Long pageNo;
@ApiField("page_size")
private Long pageSize;
public Pager() {
}
public Long getPageNo() {
return this.pageNo;
}
public void setPageNo(Long pageNo) {
this.pageNo = pageNo;
}
public Long getPageSize() {
return this.pageSize;
}
public void setPageSize(Long pageSize) {
this.pageSize = pageSize;
}
}
public static class Params {
@ApiField("start_time")
private String startTime;
@ApiField("end_time")
private String endime;
// @ApiField("status")
// private String status;
@ApiField("status_type")
private Integer status_type=0;
// public String getStatus() {
// return status;
// }
// public void setStatus(String status) {
// this.status = status;
// }
public Integer getStatus_type() {
return status_type;
}
public void setStatus_type(Integer status_type) {
this.status_type = status_type;
}
@ApiField("stockout_no")
private String stockoutNo;
public String getStockoutNo() {
return stockoutNo;
}
public void setStockoutNo(String stockoutNo) {
this.stockoutNo = stockoutNo;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndime() {
return endime;
}
public void setEndime(String endime) {
this.endime = endime;
}
}
}
package com.sfa.job.pojo.order.response;
import lombok.Data;
@Data
public class WdtQimenStockoutBodyDto {
private WdtQimenStockoutResponseDto response;
private String message;
private Integer status;
}
\ No newline at end of file
package com.sfa.job.pojo.order.response;
import lombok.Data;
import java.util.List;
import com.sfa.job.domain.order.entity.WdtQimenStockoutOrder;
@Data
public class WdtQimenStockoutDataDto {
private List<WdtQimenStockoutOrder> order;
private Integer totalCount;
}
\ No newline at end of file
package com.sfa.job.pojo.order.response;
import lombok.Data;
@Data
public class WdtQimenStockoutResponseDto {
private WdtQimenStockoutDataDto data;
private String message;
private Integer status;
}
\ No newline at end of file
package com.sfa.job.pojo.order.response;
import com.alibaba.fastjson.JSONObject;
import com.taobao.api.TaobaoResponse;
import com.taobao.api.internal.mapping.ApiField;
public class WdtStockoutSalesQueryWithDetailDto extends TaobaoResponse {
private static final long serialVersionUID = 4632382792982436957L;
@ApiField("data")
private Object data;
@ApiField("message")
private String message;
@ApiField("status")
private Long status;
public WdtStockoutSalesQueryWithDetailDto() {
}
public void setData(Object data) {
this.data = JSONObject.toJSON(data);
}
public Object getData() {
return this.data;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return this.message;
}
public void setStatus(Long status) {
this.status = status;
}
public Long getStatus() {
return this.status;
}
}
......@@ -31,22 +31,26 @@ public class SyncOrderDetailDto {
private Integer syncType;
private String batchNo;
private Integer pageNo;
private Integer totalCount;
/**
* 错误信息
*/
private String message;
private Integer code = 200;
private Long pageSize;
private Long totalPage;
public SyncOrderDetailDto setDetailInfo(String method, String remark, int syncType, int size, int mergerListSize, Integer totalCount, String batchNo, Date endTime, Date startTime) {
public SyncOrderDetailDto setDetailInfo(String method, String remark,
Integer syncType, Integer totalOrderCount,
Integer orderDetailCount, Integer pageNo,
String batchNo,
Date endTime, Date startTime) {
// 接口测试使用
this.setOrderCount(size);
this.setOrderDetailCount(mergerListSize);
this.setOrderCount(totalOrderCount);
this.setOrderDetailCount(orderDetailCount);
this.setStartTime(startTime);
this.setEndTime(endTime);
this.setLatestTime(endTime);
this.setTotalCount(totalCount);
this.setBatchNo(batchNo);
this.setMethod(method);
this.setSyncType(syncType);
......@@ -66,6 +70,10 @@ public class SyncOrderDetailDto {
}
private void setTotalCount(Integer orderCount) {
this.orderCount = orderCount;
}
/**
* 初始化时间范围
*
......@@ -92,4 +100,17 @@ public class SyncOrderDetailDto {
this.setLatestTime(latestTime);
}
public void setDetailCount(Integer totalDetailCount) {
this.orderDetailCount = totalDetailCount;
}
public void setTotalPage(Long totalPage) {
this.totalPage = totalPage;
}
public void setPageSize(Long pageSize) {
this.pageSize = pageSize;
}
}
package com.sfa.job.service.order;
import java.util.Date;
import com.sfa.job.pojo.order.response.WdtStockoutSalesQueryWithDetailDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
/**
* 销售出库单同步服务
*/
public interface IWdtQimenStockoutOrderSyncService {
/**
* 同步销售出库单
* @param startTime 开始时间
* @param endTime 结束时间
* @param shopNo 店铺编号
* @return 同步结果
*/
SyncOrderDetailDto syncStockoutOrder(Date startTime, Date endTime, Integer syncType, Long pageSize);
/**
* 同步单个销售出库单
* @param stockoutNo 出库单编号
* @return 同步结果
*/
WdtStockoutSalesQueryWithDetailDto syncSingleStockoutOrder(String stockoutNo);
}
......@@ -408,7 +408,7 @@ public class FinanceOrderSyncServiceImpl implements IFinanceOrderSyncService {
private boolean validateStartTime(SyncOrderDetailDto detailDto) {
Date currentLatest = DateUtils.addHours(new Date(), -2);
if (currentLatest.compareTo(detailDto.getEndTime()) < 0) {
detailDto.setTotalCount(0);
detailDto.setOrderCount(0);
String message = String.format("结束时间%s不能大于当前时间%s", DateUtil.formatDateTime(detailDto.getEndTime()), DateUtil.formatDateTime(currentLatest));
detailDto.setMessage(message);
log.warn(message);
......
......@@ -15,7 +15,7 @@ import com.sfa.job.domain.order.dao.*;
import com.sfa.job.domain.order.entity.FinanceBaseProduct;
import com.sfa.job.domain.order.entity.WdtQimenOrderDetailPayTime;
import com.sfa.job.domain.order.entity.WdtQimenOrderPayTime;
import com.sfa.job.pojo.order.request.WdtSalesTradeQueryQueryWithDetailVo;
import com.sfa.job.pojo.order.request.WdtSalesTradeQueryWithDetailVo;
import com.sfa.job.pojo.order.response.*;
import com.sfa.job.pojo.response.CollectOrderLogDto;
import com.sfa.job.pojo.response.SyncOrderDetailDto;
......@@ -62,7 +62,7 @@ public class WdtQimenOrderPayTimeSyncServiceImpl implements IWdtQimenOrderPayTim
// @Transactional(rollbackFor = Exception.class)
@Override
public SyncOrderDetailDto syncWdtQimenOrderByTradeNo(Date startTime, Date endTime, Integer syncType, String tradeNo, Long pageNo, Long pageSize) {
WdtSalesTradeQueryQueryWithDetailVo request = new WdtSalesTradeQueryQueryWithDetailVo();
WdtSalesTradeQueryWithDetailVo request = new WdtSalesTradeQueryWithDetailVo();
String method = request.getApiMethodName();
String serverUrl = wdtQimenConfig.getServerUrl();
String appKey = wdtQimenConfig.getAppKey();
......@@ -82,7 +82,7 @@ public class WdtQimenOrderPayTimeSyncServiceImpl implements IWdtQimenOrderPayTim
// 查询只到数据查询完毕
QimenCloudClient client = new DefaultQimenCloudClient(serverUrl, appKey, appSecret);
WdtSalesTradeQueryQueryWithDetailVo.Params params = new WdtSalesTradeQueryQueryWithDetailVo.Params();
WdtSalesTradeQueryWithDetailVo.Params params = new WdtSalesTradeQueryWithDetailVo.Params();
params.setStartTime(DateUtil.formatDateTime(startTime));
params.setEndime(DateUtil.formatDateTime(endTime));
// 旺店通的页码从0开始,奇门从1开始 时间类型 1:修改时间 2:付款时间 默认1
......@@ -90,7 +90,7 @@ public class WdtQimenOrderPayTimeSyncServiceImpl implements IWdtQimenOrderPayTim
params.setTradeNo(tradeNo);
request.setParams(params);
WdtSalesTradeQueryQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryQueryWithDetailVo.Pager();
WdtSalesTradeQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryWithDetailVo.Pager();
pager.setPageNo(pageNo);
pager.setPageSize(pageSize);
request.setPager(pager);
......@@ -135,7 +135,7 @@ public class WdtQimenOrderPayTimeSyncServiceImpl implements IWdtQimenOrderPayTim
public SyncOrderDetailDto syncWdtQimenOrder(Date startTime, Date endTime, Integer syncType, Long pageSize) {
SyncOrderDetailDto detailDto = new SyncOrderDetailDto();
String batchNo = syncType + DateUtils.dateTimeNow() + Thread.currentThread().getId();
WdtSalesTradeQueryQueryWithDetailVo request = new WdtSalesTradeQueryQueryWithDetailVo();
WdtSalesTradeQueryWithDetailVo request = new WdtSalesTradeQueryWithDetailVo();
String method = request.getApiMethodName();
List<WdtQimenOrderPayTime> orderResult = new ArrayList<>();
try {
......@@ -181,14 +181,14 @@ public class WdtQimenOrderPayTimeSyncServiceImpl implements IWdtQimenOrderPayTim
do {
// 查询只到数据查询完毕
QimenCloudClient client = new DefaultQimenCloudClient(serverUrl, appKey, appSecret);
WdtSalesTradeQueryQueryWithDetailVo.Params params = new WdtSalesTradeQueryQueryWithDetailVo.Params();
WdtSalesTradeQueryWithDetailVo.Params params = new WdtSalesTradeQueryWithDetailVo.Params();
params.setStartTime(DateUtil.formatDateTime(startTime));
params.setEndime(DateUtil.formatDateTime(endTime));
// 旺店通的页码从0开始,奇门从1开始 时间类型 1:修改时间 2:付款时间 默认1
params.setTimeType(2);
request.setParams(params);
WdtSalesTradeQueryQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryQueryWithDetailVo.Pager();
WdtSalesTradeQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryWithDetailVo.Pager();
pager.setPageNo(pageNo);
pager.setPageSize(pageSize);
request.setPager(pager);
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.qimencloud.api.DefaultQimenCloudClient;
import com.qimencloud.api.QimenCloudClient;
......@@ -14,7 +15,7 @@ import com.sfa.job.domain.order.dao.*;
import com.sfa.job.domain.order.entity.FinanceBaseProduct;
import com.sfa.job.domain.order.entity.WdtQimenOrder;
import com.sfa.job.domain.order.entity.WdtQimenOrderDetail;
import com.sfa.job.pojo.order.request.WdtSalesTradeQueryQueryWithDetailVo;
import com.sfa.job.pojo.order.request.WdtSalesTradeQueryWithDetailVo;
import com.sfa.job.pojo.order.response.WdtQimenBodyDto;
import com.sfa.job.pojo.order.response.WdtQimenDataDto;
import com.sfa.job.pojo.order.response.WdtQimenResponseDto;
......@@ -32,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 旺店通订单Service业务层处理
......@@ -65,7 +67,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
@Transactional(rollbackFor = Exception.class)
@Override
public SyncOrderDetailDto syncWdtQimenOrderByTradeNo(Date startTime, Date endTime, Integer syncType, String tradeNo, Long pageNo, Long pageSize) {
WdtSalesTradeQueryQueryWithDetailVo request = new WdtSalesTradeQueryQueryWithDetailVo();
WdtSalesTradeQueryWithDetailVo request = new WdtSalesTradeQueryWithDetailVo();
String method = request.getApiMethodName();
String serverUrl = wdtQimenConfig.getServerUrl();
String appKey = wdtQimenConfig.getAppKey();
......@@ -80,12 +82,10 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
String wdtSid = wdtQimenConfig.getWdtSid();
Long totalPage = 1L;
Integer totalCount = 1;
// 查询只到数据查询完毕
QimenCloudClient client = new DefaultQimenCloudClient(serverUrl, appKey, appSecret);
WdtSalesTradeQueryQueryWithDetailVo.Params params = new WdtSalesTradeQueryQueryWithDetailVo.Params();
WdtSalesTradeQueryWithDetailVo.Params params = new WdtSalesTradeQueryWithDetailVo.Params();
params.setStartTime(DateUtil.formatDateTime(startTime));
params.setEndime(DateUtil.formatDateTime(endTime));
// 旺店通的页码从0开始,奇门从1开始 时间类型 1:修改时间 2:付款时间 默认1
......@@ -93,7 +93,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
params.setTradeNo(tradeNo);
request.setParams(params);
WdtSalesTradeQueryQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryQueryWithDetailVo.Pager();
WdtSalesTradeQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryWithDetailVo.Pager();
pager.setPageNo(pageNo);
pager.setPageSize(pageSize);
request.setPager(pager);
......@@ -112,6 +112,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
response = client.execute(request);
log.info(response.getBody());
} catch (ApiException e) {
log.error("奇门订单加载数据异常:" + e.getMessage() + URLUtil.decode(response.getRequestUrl()));
throw new RuntimeException(e);
}
if (ObjectUtils.isNotEmpty(response) && response.getFlag().equals("failure")) {
......@@ -138,7 +139,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
public SyncOrderDetailDto syncWdtQimenOrder(Date startTime, Date endTime, Integer syncType, Long pageSize) {
SyncOrderDetailDto detailDto = new SyncOrderDetailDto();
String batchNo = syncType + DateUtils.dateTimeNow() + Thread.currentThread().getId();
WdtSalesTradeQueryQueryWithDetailVo request = new WdtSalesTradeQueryQueryWithDetailVo();
WdtSalesTradeQueryWithDetailVo request = new WdtSalesTradeQueryWithDetailVo();
String method = request.getApiMethodName();
List<WdtQimenOrder> orderResult = new ArrayList<>();
try {
......@@ -184,14 +185,14 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
do {
// 查询只到数据查询完毕
QimenCloudClient client = new DefaultQimenCloudClient(serverUrl, appKey, appSecret);
WdtSalesTradeQueryQueryWithDetailVo.Params params = new WdtSalesTradeQueryQueryWithDetailVo.Params();
WdtSalesTradeQueryWithDetailVo.Params params = new WdtSalesTradeQueryWithDetailVo.Params();
params.setStartTime(DateUtil.formatDateTime(startTime));
params.setEndime(DateUtil.formatDateTime(endTime));
// 旺店通的页码从0开始,奇门从1开始
params.setTimeType(1);
request.setParams(params);
WdtSalesTradeQueryQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryQueryWithDetailVo.Pager();
WdtSalesTradeQueryWithDetailVo.Pager pager = new WdtSalesTradeQueryWithDetailVo.Pager();
pager.setPageNo(pageNo);
pager.setPageSize(pageSize);
request.setPager(pager);
......@@ -219,12 +220,17 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
totalCount = wdtQimenDataDto.getTotalCount();
totalPage = totalCount / pager.getPageSize() + 1;
List<WdtQimenOrder> orderSubResult = wdtQimenDataDto.getOrder();
List<Object> orderSubResult = wdtQimenDataDto.getOrder();
if (ObjectUtils.isEmpty(orderSubResult)) {
log.warn("当前查询没有数据,奇门加载数据异常:" + response.getMessage() + response.getSubMessage() + URLUtil.decode(response.getRequestUrl()));
// throw new ServiceException("旺店通没有查询到订单数据");
} else {
// 将当前页的订单添加到总结果列表中
List<WdtQimenOrder> typedOrderSubResult = orderSubResult.stream()
.map(obj -> (WdtQimenOrder) obj)
.collect(Collectors.toList());
orderResult.addAll(typedOrderSubResult);
}
orderResult.addAll(orderSubResult);
pageNo++;
} while (pageNo <= totalPage);
......@@ -342,4 +348,4 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
}
}
}
\ No newline at end of file
package com.sfa.job.service.qince;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
......
......@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
import com.taobao.api.BaseTaobaoRequest;
import com.taobao.api.TaobaoResponse;
import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.util.Arrays;
......@@ -15,6 +17,8 @@ import java.util.Map;
* 奇门自定义接口工具类
*/
public class WdtQimenUtil {
private static final Logger log = LoggerFactory.getLogger(WdtQimenUtil.class);
private WdtQimenUtil() {
}
......@@ -36,7 +40,10 @@ public class WdtQimenUtil {
StringBuilder toBeSignedStringBuilder = new StringBuilder();
getToBeSignedString(toBeSignedStringBuilder, params);
toBeSignedStringBuilder.insert(0, wdtSecret).append(wdtSecret);
return DigestUtils.md5Hex(toBeSignedStringBuilder.toString());
String signStr = toBeSignedStringBuilder.toString();
String sign = DigestUtils.md5Hex(signStr);
log.debug("生成签名 - 方法: {}, 签名字符串长度: {}, 签名值: {}", request.getApiMethodName(), signStr.length(), sign);
return sign;
}
public static boolean isValidJson(String content) {
......
<?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.WdtQimenStockOutPickPositionDetailMapper">
<!-- 批量插入或更新拣货位明细 -->
<insert id="insertOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_qimen_stockout_pick_position_detail (
rec_id,
stockout_detail_id,
position_id,
position_no,
expire_date,
production_date,
batch_no,
position_goods_count,
spec_no,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.recId},
#{item.stockoutDetailId},
#{item.positionId},
#{item.positionNo},
#{item.expireDate},
#{item.productionDate},
#{item.batchNo},
#{item.positionGoodsCount},
#{item.specNo},
#{item.createTime},
#{item.updateTime}
)
</foreach>
ON DUPLICATE KEY UPDATE
stockout_detail_id = VALUES(stockout_detail_id),
position_id = VALUES(position_id),
position_no = VALUES(position_no),
expire_date = VALUES(expire_date),
production_date = VALUES(production_date),
batch_no = VALUES(batch_no),
position_goods_count = VALUES(position_goods_count),
spec_no = VALUES(spec_no),
update_time = VALUES(update_time)
</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.WdtQimenStockoutGovSubsidyMapper">
<!-- 批量插入或更新国补信息 -->
<insert id="insertOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_qimen_stockout_gov_subsidy (
id,
stockout_no,
subsidy_amount,
subsidy_type,
subsidy_reason,
create_time,
update_time,
create_by,
update_by,
del_flag
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.stockoutNo},
#{item.subsidyAmount},
#{item.subsidyType},
#{item.subsidyReason},
#{item.createTime},
#{item.updateTime},
#{item.createBy},
#{item.updateBy},
#{item.delFlag}
)
</foreach>
ON DUPLICATE KEY UPDATE
subsidy_amount = VALUES(subsidy_amount),
subsidy_type = VALUES(subsidy_type),
subsidy_reason = VALUES(subsidy_reason),
update_time = VALUES(update_time),
update_by = VALUES(update_by)
</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.WdtQimenStockoutLogisticsDetailMapper">
<!-- 批量插入或更新物流单详情 -->
<insert id="insertOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_qimen_stockout_logistics_detail (
rec_id,
stockout_detail_id,
position_id,
position_no,
expire_date,
production_date,
batch_no,
position_goods_count,
batch_remark,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.recId},
#{item.stockoutDetailId},
#{item.positionId},
#{item.positionNo},
#{item.expireDate},
#{item.productionDate},
#{item.batchNo},
#{item.positionGoodsCount},
#{item.batchRemark},
#{item.createTime},
#{item.updateTime}
)
</foreach>
ON DUPLICATE KEY UPDATE
stockout_detail_id = VALUES(stockout_detail_id),
position_id = VALUES(position_id),
position_no = VALUES(position_no),
expire_date = VALUES(expire_date),
production_date = VALUES(production_date),
batch_no = VALUES(batch_no),
position_goods_count = VALUES(position_goods_count),
batch_remark = VALUES(batch_remark),
update_time = VALUES(update_time)
</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.WdtQimenStockoutOrderDetailMapper">
<!-- 批量插入或更新销售出库单明细 -->
<insert id="insertOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_qimen_stockout_order_detail (
rec_id,
stockout_id,
stockout_no,
src_order_detail_id,
spec_id,
spec_no,
goods_count,
total_amount,
sell_price,
remark,
goods_name,
goods_no,
spec_name,
spec_code,
cost_price,
weight,
goods_id,
prop1,
prop2,
prop3,
prop4,
prop5,
prop6,
platform_id,
refund_status,
market_price,
discount,
share_price,
share_amount,
tax_rate,
barcode,
unit_name,
sale_order_id,
gift_type,
src_oid,
src_tid,
from_mask,
goods_type,
good_prop1,
good_prop2,
good_prop3,
good_prop4,
good_prop5,
good_prop6,
sn_list,
suite_no,
suite_num,
share_post_amount,
paid,
is_package,
brand_no,
brand_name,
src_order_type,
base_unit_id,
unit_id,
unit_ratio,
num2,
num,
position_id,
batch_id,
is_examined,
expire_date,
scan_type,
modified_date,
created_date,
class_name,
api_goods_id,
api_spec_id,
pack_score,
pick_score,
scan_score,
api_goods_name,
batch_remark,
create_by,
create_user_id,
update_by,
update_user_id,
del_flag,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.recId},
#{item.stockoutId},
#{item.stockoutNo},
#{item.srcOrderDetailId},
#{item.specId},
#{item.specNo},
#{item.goodsCount},
#{item.totalAmount},
#{item.sellPrice},
#{item.remark},
#{item.goodsName},
#{item.goodsNo},
#{item.specName},
#{item.specCode},
#{item.costPrice},
#{item.weight},
#{item.goodsId},
#{item.prop1},
#{item.prop2},
#{item.prop3},
#{item.prop4},
#{item.prop5},
#{item.prop6},
#{item.platformId},
#{item.refundStatus},
#{item.marketPrice},
#{item.discount},
#{item.sharePrice},
#{item.shareAmount},
#{item.taxRate},
#{item.barcode},
#{item.unitName},
#{item.saleOrderId},
#{item.giftType},
#{item.srcOid},
#{item.srcTid},
#{item.fromMask},
#{item.goodsType},
#{item.goodProp1},
#{item.goodProp2},
#{item.goodProp3},
#{item.goodProp4},
#{item.goodProp5},
#{item.goodProp6},
#{item.snList},
#{item.suiteNo},
#{item.suiteNum},
#{item.sharePostAmount},
#{item.paid},
#{item.isPackage},
#{item.brandNo},
#{item.brandName},
#{item.srcOrderType},
#{item.baseUnitId},
#{item.unitId},
#{item.unitRatio},
#{item.num2},
#{item.num},
#{item.positionId},
#{item.batchId},
#{item.isExamined},
#{item.expireDate},
#{item.scanType},
#{item.modifiedDate},
#{item.createdDate},
#{item.className},
#{item.apiGoodsId},
#{item.apiSpecId},
#{item.packScore},
#{item.pickScore},
#{item.scanScore},
#{item.apiGoodsName},
#{item.batchRemark},
#{item.createBy},
#{item.createUserId},
#{item.updateBy},
#{item.updateUserId},
#{item.delFlag},
#{item.createTime},
#{item.updateTime}
)
</foreach>
ON DUPLICATE KEY UPDATE
stockout_id = VALUES(stockout_id),
src_order_detail_id = VALUES(src_order_detail_id),
spec_id = VALUES(spec_id),
spec_no = VALUES(spec_no),
goods_count = VALUES(goods_count),
total_amount = VALUES(total_amount),
sell_price = VALUES(sell_price),
remark = VALUES(remark),
goods_name = VALUES(goods_name),
goods_no = VALUES(goods_no),
spec_name = VALUES(spec_name),
spec_code = VALUES(spec_code),
cost_price = VALUES(cost_price),
weight = VALUES(weight),
goods_id = VALUES(goods_id),
prop1 = VALUES(prop1),
prop2 = VALUES(prop2),
prop3 = VALUES(prop3),
prop4 = VALUES(prop4),
prop5 = VALUES(prop5),
prop6 = VALUES(prop6),
platform_id = VALUES(platform_id),
refund_status = VALUES(refund_status),
market_price = VALUES(market_price),
discount = VALUES(discount),
share_price = VALUES(share_price),
share_amount = VALUES(share_amount),
tax_rate = VALUES(tax_rate),
barcode = VALUES(barcode),
unit_name = VALUES(unit_name),
sale_order_id = VALUES(sale_order_id),
gift_type = VALUES(gift_type),
src_oid = VALUES(src_oid),
src_tid = VALUES(src_tid),
from_mask = VALUES(from_mask),
goods_type = VALUES(goods_type),
good_prop1 = VALUES(good_prop1),
good_prop2 = VALUES(good_prop2),
good_prop3 = VALUES(good_prop3),
good_prop4 = VALUES(good_prop4),
good_prop5 = VALUES(good_prop5),
good_prop6 = VALUES(good_prop6),
sn_list = VALUES(sn_list),
suite_no = VALUES(suite_no),
suite_num = VALUES(suite_num),
share_post_amount = VALUES(share_post_amount),
paid = VALUES(paid),
is_package = VALUES(is_package),
brand_no = VALUES(brand_no),
brand_name = VALUES(brand_name),
src_order_type = VALUES(src_order_type),
base_unit_id = VALUES(base_unit_id),
unit_id = VALUES(unit_id),
unit_ratio = VALUES(unit_ratio),
num2 = VALUES(num2),
num = VALUES(num),
position_id = VALUES(position_id),
batch_id = VALUES(batch_id),
is_examined = VALUES(is_examined),
expire_date = VALUES(expire_date),
scan_type = VALUES(scan_type),
modified_date = VALUES(modified_date),
created_date = VALUES(created_date),
class_name = VALUES(class_name),
api_goods_id = VALUES(api_goods_id),
api_spec_id = VALUES(api_spec_id),
pack_score = VALUES(pack_score),
pick_score = VALUES(pick_score),
scan_score = VALUES(scan_score),
api_goods_name = VALUES(api_goods_name),
batch_remark = VALUES(batch_remark),
update_by = VALUES(update_by),
update_user_id = VALUES(update_user_id),
update_time = VALUES(update_time)
</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.WdtQimenStockoutPositionDetailMapper">
<!-- 批量插入或更新出库货位明细 -->
<insert id="insertOrUpdateBatch" parameterType="java.util.List">
INSERT INTO wdt_qimen_stockout_position_detail (
rec_id,
stockout_detail_id,
position_id,
position_no,
expire_date,
production_date,
batch_no,
position_goods_count,
batch_remark,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.recId},
#{item.stockoutDetailId},
#{item.positionId},
#{item.positionNo},
#{item.expireDate},
#{item.productionDate},
#{item.batchNo},
#{item.positionGoodsCount},
#{item.batchRemark},
#{item.createTime},
#{item.updateTime}
)
</foreach>
ON DUPLICATE KEY UPDATE
stockout_detail_id = VALUES(stockout_detail_id),
position_id = VALUES(position_id),
position_no = VALUES(position_no),
expire_date = VALUES(expire_date),
production_date = VALUES(production_date),
batch_no = VALUES(batch_no),
position_goods_count = VALUES(position_goods_count),
batch_remark = VALUES(batch_remark),
update_time = VALUES(update_time)
</insert>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论