提交 5d9c9c8c authored 作者: 吕本才's avatar 吕本才

1、根据review修改代码,日志记录表按log结尾,service不再集成mybatis-plus提供的service,dao层返回数据都使用dto

2、修改采集旺店通分页
上级 7574acd8
package com.sfa.job.constants;
public class Constants {
/**
* 采集数据方式
*/
public static final String SYNC_TYPE_XXL_JOB = "xxl-job";
}
package com.sfa.job.domain.order.dao; package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.CollectErrorInfo; import com.sfa.job.domain.order.entity.CollectErrorLog;
public interface CollectErrorInfoDao { public interface CollectErrorLogDao {
// 插入一条记录 // 插入一条记录
void insert(CollectErrorInfo collectErrorInfo); void insert(CollectErrorLog collectErrorLog);
} }
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.CollectOrderLog;
import com.sfa.job.pojo.response.CollectOrderLogDto;
public interface CollectOrderLogDao {
// 插入一条记录
void insert(CollectOrderLog collectOrderLog);
CollectOrderLogDto selectOrderSyncLatest(Integer syncType);
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.CollectOrderLogInfo;
public interface CollectOrderLogInfoDao {
// 插入一条记录
void insert(CollectOrderLogInfo collectOrderLogInfo);
CollectOrderLogInfo selectOrderSyncLatest(Integer syncType);
}
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; package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.PrdInfo; import java.util.Map;
import java.util.List;
/** /**
* @author : liqiulin * @author : liqiulin
...@@ -10,7 +8,5 @@ import java.util.List; ...@@ -10,7 +8,5 @@ import java.util.List;
* @describe : * @describe :
*/ */
public interface IProductDao { public interface IProductDao {
Map<String, String> selectProdSeries();
List<PrdInfo> selectProdSeries();
} }
package com.sfa.job.domain.order.dao.impl; package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.job.domain.order.dao.CollectErrorInfoDao; import com.sfa.job.domain.order.dao.CollectErrorLogDao;
import com.sfa.job.domain.order.entity.CollectErrorInfo; import com.sfa.job.domain.order.entity.CollectErrorLog;
import com.sfa.job.domain.order.mapper.CollectErrorInfoMapper; import com.sfa.job.domain.order.mapper.CollectErrorLogMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@DS("Bi") @DS("Bi")
@Repository @Repository
public class CollectErrorInfoDaoImpl implements CollectErrorInfoDao { public class CollectErrorLogImpl implements CollectErrorLogDao {
@Autowired @Autowired
private CollectErrorInfoMapper collectErrorInfoMapper; private CollectErrorLogMapper collectErrorLogMapper;
@Override @Override
public void insert(CollectErrorInfo collectErrorInfo) { public void insert(CollectErrorLog collectErrorLog) {
collectErrorInfoMapper.insert(collectErrorInfo); collectErrorLogMapper.insert(collectErrorLog);
} }
......
...@@ -2,9 +2,11 @@ package com.sfa.job.domain.order.dao.impl; ...@@ -2,9 +2,11 @@ package com.sfa.job.domain.order.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.job.domain.order.dao.CollectOrderLogInfoDao; import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.job.domain.order.entity.CollectOrderLogInfo; import com.sfa.job.domain.order.dao.CollectOrderLogDao;
import com.sfa.job.domain.order.mapper.CollectOrderLogInfoMapper; import com.sfa.job.domain.order.entity.CollectOrderLog;
import com.sfa.job.domain.order.mapper.CollectOrderLogMapper;
import com.sfa.job.pojo.response.CollectOrderLogDto;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -13,29 +15,30 @@ import java.util.List; ...@@ -13,29 +15,30 @@ import java.util.List;
@DS("Bi") @DS("Bi")
@Repository @Repository
public class CollectOrderLogInfoDaoImpl implements CollectOrderLogInfoDao { public class CollectOrderLogDaoImpl implements CollectOrderLogDao {
@Autowired @Autowired
private CollectOrderLogInfoMapper logInfoMapper; private CollectOrderLogMapper logInfoMapper;
@Override @Override
public void insert(CollectOrderLogInfo collectOrderLogInfo) { public void insert(CollectOrderLog collectOrderLog) {
logInfoMapper.insert(collectOrderLogInfo); logInfoMapper.insert(collectOrderLog);
} }
@Override @Override
public CollectOrderLogInfo selectOrderSyncLatest(Integer syncType) { public CollectOrderLogDto selectOrderSyncLatest(Integer syncType) {
// 查询最新发货日期 // 查询最新发货日期
List<CollectOrderLogInfo> orderList = logInfoMapper.selectList( List<CollectOrderLog> orderList = logInfoMapper.selectList(
new LambdaQueryWrapper<CollectOrderLogInfo>() new LambdaQueryWrapper<CollectOrderLog>()
// 默认查询xxljob自动同步时间 // 默认查询xxljob自动同步时间
.eq(CollectOrderLogInfo::getSyncType,syncType) .eq(CollectOrderLog::getSyncType,syncType)
.eq(CollectOrderLogInfo::getDelFlag,0) .eq(CollectOrderLog::getDelFlag,0)
.orderByDesc(CollectOrderLogInfo::getUpdateTime) .orderByDesc(CollectOrderLog::getUpdateTime)
.last("LIMIT 1")); .last("LIMIT 1"));
if(ObjectUtils.isNotEmpty(orderList)){ if(ObjectUtils.isNotEmpty(orderList)){
// 最新的数据日期 // 最新的数据日期
return orderList.get(0); CollectOrderLog collectOrderLog = orderList.get(0);
return BeanUtils.transitionDto(collectOrderLog, CollectOrderLogDto.class);
} }
return null; return null;
} }
......
...@@ -22,73 +22,6 @@ public class FinianceBaseZbjTypeDaoImpl implements FinanceBaseZbjTypeDao { ...@@ -22,73 +22,6 @@ public class FinianceBaseZbjTypeDaoImpl implements FinanceBaseZbjTypeDao {
@Override @Override
public Map<String, String> selectBaseZbjType() { public Map<String, String> selectBaseZbjType() {
List<FinanceBaseZbjType> list = mapper.selectList(new LambdaQueryWrapper<>()); List<FinanceBaseZbjType> list = mapper.selectList(new LambdaQueryWrapper<>());
// 以fenxiaoName为key,直播间渠道类型为value,放入map中 // 以fenxiaoName为key,直播间渠道类型为value,放入map中
Map<String, String> map = list.stream() Map<String, String> map = list.stream()
.collect(HashMap::new, (k, v) -> k.put(v.getFenxiaoName(), v.getZbjQdType()), HashMap::putAll); .collect(HashMap::new, (k, v) -> k.put(v.getFenxiaoName(), v.getZbjQdType()), HashMap::putAll);
......
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);
}
}
}
...@@ -19,7 +19,6 @@ public class FinianceOrderDetailDaoImpl implements FinanceOrderDetailDao { ...@@ -19,7 +19,6 @@ public class FinianceOrderDetailDaoImpl implements FinanceOrderDetailDao {
@Override @Override
public void saveOrUpdateBatch(List<FinanceOrderDetail> mergeList) { public void saveOrUpdateBatch(List<FinanceOrderDetail> mergeList) {
for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) { for (int i = 0; i < mergeList.size(); i += BATCH_SIZE) {
int toIndex = Math.min(i + BATCH_SIZE, mergeList.size()); int toIndex = Math.min(i + BATCH_SIZE, mergeList.size());
List<FinanceOrderDetail> batchLists = mergeList.subList(i, toIndex); List<FinanceOrderDetail> batchLists = mergeList.subList(i, toIndex);
......
package com.sfa.job.domain.order.dao.impl; package com.sfa.job.domain.order.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.job.domain.order.dao.IProductDao; import com.sfa.job.domain.order.dao.IProductDao;
import com.sfa.job.domain.order.entity.PrdInfo; import com.sfa.job.domain.order.entity.PrdInfo;
...@@ -7,7 +8,9 @@ import com.sfa.job.domain.order.mapper.PrdInfoMapper; ...@@ -7,7 +8,9 @@ import com.sfa.job.domain.order.mapper.PrdInfoMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author : liqiulin * @author : liqiulin
...@@ -21,12 +24,20 @@ public class ProductDaoImpl implements IProductDao { ...@@ -21,12 +24,20 @@ public class ProductDaoImpl implements IProductDao {
PrdInfoMapper prdInfoMapper; PrdInfoMapper prdInfoMapper;
@Override @Override
public List<PrdInfo> selectProdSeries() { public Map<String, String> selectProdSeries() {
List<PrdInfo> prdInfos = prdInfoMapper.selectList( List<PrdInfo> prdInfos = prdInfoMapper.selectList(
new LambdaQueryWrapper<PrdInfo>() new LambdaQueryWrapper<PrdInfo>()
.select(PrdInfo::getSeries, PrdInfo::getPrdCode, PrdInfo::getPrdName) .select(PrdInfo::getSeries, PrdInfo::getPrdCode, PrdInfo::getPrdName)
.groupBy(PrdInfo::getSeries, PrdInfo::getPrdCode, PrdInfo::getPrdName)); .groupBy(PrdInfo::getSeries, PrdInfo::getPrdCode, PrdInfo::getPrdName));
return prdInfos; // 转换成map
Map<String, String> prodSeriesMap = new HashMap<>();
if (ObjectUtil.isNotEmpty(prdInfos)) {
prdInfos.stream().forEach(prdInfoDto -> {
prodSeriesMap.put(prdInfoDto.getPrdCode(), prdInfoDto.getPrdName());
});
}
return prodSeriesMap;
} }
} }
...@@ -10,9 +10,9 @@ import java.util.Map; ...@@ -10,9 +10,9 @@ import java.util.Map;
* CollectErrorInfo 类表示采集错误记录,与数据库表 market_bi.collect_error_info 相对应。 * CollectErrorInfo 类表示采集错误记录,与数据库表 market_bi.collect_error_info 相对应。
* 包含了采集错误记录的各种信息,如唯一键、入参信息、类型、采集时间、删除标志、创建和更新的用户及时间等。 * 包含了采集错误记录的各种信息,如唯一键、入参信息、类型、采集时间、删除标志、创建和更新的用户及时间等。
*/ */
@TableName(value ="collect_error_info") @TableName(value ="collect_error_log")
@Data @Data
public class CollectErrorInfo { public class CollectErrorLog {
......
...@@ -17,8 +17,8 @@ import java.util.Date; ...@@ -17,8 +17,8 @@ import java.util.Date;
* @description * @description
*/ */
@Data @Data
@TableName("collect_order_log_info") @TableName("collect_order_log")
public class CollectOrderLogInfo implements Serializable { public class CollectOrderLog implements Serializable {
/** /**
* 唯一键,用于唯一标识采集订单日志信息记录 * 唯一键,用于唯一标识采集订单日志信息记录
...@@ -29,13 +29,11 @@ public class CollectOrderLogInfo implements Serializable { ...@@ -29,13 +29,11 @@ public class CollectOrderLogInfo implements Serializable {
/** /**
* 采集订单的数量,存储为字符串,长度不超过 20 个字符 * 采集订单的数量,存储为字符串,长度不超过 20 个字符
*/ */
//@TableField("order_count")
private Integer orderCount; private Integer orderCount;
/** /**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符 * 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/ */
//@TableField("order_detail_count")
private Integer orderDetailCount; private Integer orderDetailCount;
/** /**
......
...@@ -4,339 +4,486 @@ import com.baomidou.mybatisplus.annotation.IdType; ...@@ -4,339 +4,486 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.sfa.common.core.web.domain.BaseDo; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/** /**
* 来自旺店通的订单 * 财务-订单数据实体类,对应数据库中的 finance_order 表
*
* @author 吕本才
* @date 2025年01月07日10:04:25
*/ */
@TableName(value = "finance_order")
@Data @Data
public class FinanceOrder extends BaseDo { @AllArgsConstructor
// 订单唯一键 @NoArgsConstructor
@TableName(value = "finance_order")
public class FinanceOrder {
/**
* 订单唯一键
*/
@TableId(type = IdType.NONE) @TableId(type = IdType.NONE)
private Long tradeId; private Long tradeId;
// 订单编号(旺店通系统订单号) /**
* 订单编号(旺店通系统订单号)
*/
private String tradeNo; private String tradeNo;
// 平台ID(请点击平台代码表查看对应关系) /**
* 平台 ID(请点击平台代码表查看对应关系)
*/
private Integer platformId; private Integer platformId;
// 仓库类型: /**
// 1、普通仓库,大于1为委外仓库(如京东仓储,物流宝等),如订单无仓库的话,则不返回该字段 * 仓库类型: 1、普通仓库,大于 1 为委外仓库(如京东仓储,物流宝等),如订单无仓库的话,则不返回该字段
*/
private Integer warehouseType; private Integer warehouseType;
// 原始单号(平台订单号),如果有多个,以","分隔,且以增序排列,不重复,过长将被裁剪 /**
* 原始单号(平台订单号),如果有多个,以","分隔,且以增序排列,不重复,过长将被裁剪
*/
private String srcTids; private String srcTids;
// 平台支付帐号, (仅自有平台及线下平台返回,其他平台均不返回) /**
* 平台支付帐号, (仅自有平台及线下平台返回,其他平台均不返回)
*/
private String payAccount; private String payAccount;
// 订单状态: /**
// 4 线下退款 * 订单状态: 4 线下退款; 5 已取消; 6 待转预订单(待审核); 7 待转已完成; 10 未付款; 12 待尾款; 15 等未付; 16 延时审核; 19 预订单前处理; 20 审核前处理; 21 自流转待发货; 23 异常订单; 24 换货预订单; 25 待处理预订单; 27 待分配预订单; 30 待客审; 35 待财审; 40 审核中; 55 已审核; 95 已发货; 96 成本确认(待录入计划成本,订单结算时有货品无计划成本); 101 已过账; 110 已完成
// 5已取消 */
// 6 待转预订单(待审核)
// 7 待转已完成
// 10未付款
// 12待尾款
// 15等未付
// 16延时审核
// 19预订单前处理
// 20 审核前处理
// 21自流转待发货
// 23 异常订单
// 24 换货预订单
// 25 待处理预订单
// 27待分配预订单
// 30待客审
// 35待财审
// 40审核中
// 55已审核
// 95已发货
// 96 成本确认(待录入计划成本,订单结算时有货品无计划成本)
// 101 已过账
// 110已完成
private Integer tradeStatus; private Integer tradeStatus;
// 订单类型: /**
// 1、网店销售 * 订单类型: 1、网店销售; 2、线下订单; 3、售后换货; 4、批发业务; 7、现款销售; 8、分销订单; 101、自定义类型一; 102、自定义类型二; 103、自定义类型三; 104、自定义类型四; 105、自定义类型五; 106、自定义类型六; 107、自定义类型七; 108、自定义类型八; 109、自定义类型九; 110、自定义类型十(与 ERP 中自定义类型的映射关系,点击链接查看)
// 2、线下订单 */
// 3、售后换货
// 4、批发业务
// 7、现款销售
// 8、分销订单
// 101、自定义类型一
// 102、自定义类型二
// 103、自定义类型三
// 104、自定义类型四
// 105、自定义类型五
// 106、自定义类型六
// 107、自定义类型七
// 108、自定义类型八
// 109、自定义类型九
// 110、自定义类型十
// (与ERP中自定义类型的映射关系,点击链接查看)
private Integer tradeType; private Integer tradeType;
// 发货条件: /**
// 1、款到发货 * 发货条件: 1、款到发货; 2、货到付款(包含部分货到付款); 3、分期付款; 4、挂账
// 2、货到付款(包含部分货到付款) */
// 3、分期付款
// 4、挂账
private Integer deliveryTerm; private Integer deliveryTerm;
// 京东几环(淘宝模糊化后的买家昵称) /**
* 京东几环(淘宝模糊化后的买家昵称)
*/
private String receiverRing; private String receiverRing;
// 冻结原因 /**
* 冻结原因
*/
private String freezeReason; private String freezeReason;
// 退款状态: /**
// 0、无退款 * 退款状态: 0、无退款; 1、申请退款; 2、部分退款; 3、全部退款
// 1、申请退款 */
// 2、部分退款
// 3、全部退款
private Integer refundStatus; private Integer refundStatus;
// 分销类别: /**
// 0、非分销订单 * 分销类别: 0、非分销订单; 1、代销; 2、经销
// 1、代销 */
// 2、经销
private Integer fenxiaoType; private Integer fenxiaoType;
// 分销商昵称 /**
* 分销商昵称
*/
private String fenxiaoNick; private String fenxiaoNick;
// 下单时间(毫秒级时间戳,例如:1631861379000) /**
* 下单时间(毫秒级时间戳,例如:1631861379000)
*/
private String tradeTime; private String tradeTime;
// 付款时间,例如:2020-10-19 00:00:00 /**
* 付款时间,例如:2020 - 10 - 19 00:00:00
*/
private String payTime; private String payTime;
// 发货时间,订单未发货不返回该字段(毫秒级时间戳,例如:1631861379000) /**
* 发货时间,订单未发货不返回该字段(毫秒级时间戳,例如:1631861379000)
*/
private Date consignTime; private Date consignTime;
// 客户网名(淘宝ouid,淘系平台不返回), (仅自有平台及线下平台返回,其他平台均不返回) /**
* 客户网名(淘宝 ouid,淘系平台不返回), (仅自有平台及线下平台返回,其他平台均不返回)
*/
private String buyerNick; private String buyerNick;
// 收货人/收件人, (仅自有平台及线下平台返回,其他平台均不返回) /**
* 收货人/收件人, (仅自有平台及线下平台返回,其他平台均不返回)
*/
private String receiverName; private String receiverName;
// 省份id,可参考城市代码表 /**
* 省份 id,可参考城市代码表
*/
private Integer receiverProvince; private Integer receiverProvince;
// 城市id,可参考城市代码表 /**
* 城市 id,可参考城市代码表
*/
private Integer receiverCity; private Integer receiverCity;
// 地区id,可参考城市代码表 /**
* 地区 id,可参考城市代码表
*/
private Integer receiverDistrict; private Integer receiverDistrict;
// 收件人地址, (仅自有平台及线下平台返回,其他平台均不返回) /**
* 收件人地址, (仅自有平台及线下平台返回,其他平台均不返回)
*/
private String receiverAddress; private String receiverAddress;
// 手机,(仅自有平台及线下平台返回,其他平台均不返回) /**
* 手机,(仅自有平台及线下平台返回,其他平台均不返回)
*/
private String receiverMobile; private String receiverMobile;
// 固话, (仅自有平台及线下平台返回,其他平台均不返回) /**
* 固话, (仅自有平台及线下平台返回,其他平台均不返回)
*/
private String receiverTelno; private String receiverTelno;
// 邮编 /**
* 邮编
*/
private String receiverZip; private String receiverZip;
// 地区 /**
* 地区
*/
private String receiverArea; private String receiverArea;
// 大头笔 /**
* 大头笔
*/
private String receiverDtb; private String receiverDtb;
// 异常订单原因(位运算): /**
// 2、修改地址 * 异常订单原因(位运算): 2、修改地址; 4、修改发票; 8、更换仓库; 16、修改备注; 32、更换货品; 128、拦截赠品; 256、拦截换货; 512、买家留言变化; 1024、拦截平台已发货
// 4、修改发票 */
// 8、更换仓库
// 16、修改备注
// 32、更换货品
// 128、拦截赠品
// 256、拦截换货
// 512、买家留言变化
// 1024、拦截平台已发货
private Integer badReason; private Integer badReason;
// 物流单号 /**
* 物流单号
*/
private String logisticsNo; private String logisticsNo;
// 买家留言 /**
* 买家留言
*/
private String buyerMessage; private String buyerMessage;
// 客服备注 /**
* 客服备注
*/
private String csRemark; private String csRemark;
// 标旗(1 红、2 黄、3 绿、4 蓝、5 紫 ) /**
* 标旗(1 红、2 黄、3 绿、4 蓝、5 紫 )
*/
private Integer remarkFlag; private Integer remarkFlag;
// 打印备注 /**
* 打印备注
*/
private String printRemark; private String printRemark;
// 货品种类数 /**
* 货品种类数
*/
private BigDecimal goodsTypeCount; private BigDecimal goodsTypeCount;
// 货品总量 /**
* 货品总量
*/
private BigDecimal goodsCount; private BigDecimal goodsCount;
// 总货款(折前总额) /**
* 总货款(折前总额)
*/
private BigDecimal goodsAmount; private BigDecimal goodsAmount;
// 邮费(买家支付邮费) /**
* 邮费(买家支付邮费)
*/
private BigDecimal postAmount; private BigDecimal postAmount;
// 其他费用 /**
* 其他费用
*/
private BigDecimal otherAmount; private BigDecimal otherAmount;
// 优惠 /**
* 优惠
*/
private BigDecimal discount; private BigDecimal discount;
// 应收 /**
* 应收
*/
private BigDecimal receivable; private BigDecimal receivable;
// COD金额(货到付款金额) /**
* COD 金额(货到付款金额)
*/
private BigDecimal codAmount; private BigDecimal codAmount;
// 买家COD费用 /**
* 买家 COD 费用
*/
private BigDecimal extCodFee; private BigDecimal extCodFee;
// 货品预估成本 /**
* 货品预估成本
*/
private BigDecimal goodsCost; private BigDecimal goodsCost;
// 预估邮资成本 /**
* 预估邮资成本
*/
private BigDecimal postCost; private BigDecimal postCost;
// 预估重量(kg) /**
* 预估重量(kg)
*/
private BigDecimal weight; private BigDecimal weight;
// 预估毛利 /**
* 预估毛利
*/
private BigDecimal profit; private BigDecimal profit;
// 税额 /**
* 税额
*/
private BigDecimal tax; private BigDecimal tax;
// 税率 /**
* 税率
*/
private BigDecimal taxRate; private BigDecimal taxRate;
// 佣金 /**
* 佣金
*/
private BigDecimal commission; private BigDecimal commission;
// 发票类型: /**
// 0:不需要 * 发票类型: 0:不需要; 1:普通发票; 2:增值税普通发票; 3:增值税专用发票
// 1:普通发票 */
// 2:增值税普通发票
// 3:增值税专用发票
private Integer invoiceType; private Integer invoiceType;
// 发票抬头 /**
* 发票抬头
*/
private String invoiceTitle; private String invoiceTitle;
// 发票内容 /**
* 发票内容
*/
private String invoiceContent; private String invoiceContent;
// 业务员 /**
* 业务员
*/
private String salesmanName; private String salesmanName;
// 审核人 /**
* 审核人
*/
private String checkerName; private String checkerName;
// 财审人 /**
* 财审人
*/
private String fcheckerName; private String fcheckerName;
// 签出人 /**
* 签出人
*/
private String checkouterName; private String checkouterName;
// 出库单号(系统产生的出库单号) /**
* 出库单号(系统产生的出库单号)
*/
private String stockoutNo; private String stockoutNo;
// 标记名称 /**
* 标记名称
*/
private String flagName; private String flagName;
// 订单来源: /**
// 1、API抓单 * 订单来源: 1、API 抓单; 2、手工建单; 3、导入; 4、复制订单; 5、接口推送; 6、补发订单; 7、PDA 选货开单; 8、分销补发订单
// 2、手工建单 */
// 3、导入
// 4、复制订单
// 5、接口推送
// 6、补发订单
// 7、PDA选货开单
// 8、分销补发订单
private Integer tradeFrom; private Integer tradeFrom;
// 货品商家编码,多种货品为空,组合装时为组合装编码 /**
* 货品商家编码,多种货品为空,组合装时为组合装编码
*/
private String singleSpecNo; private String singleSpecNo;
// 原始货品数量 /**
* 原始货品数量
*/
private BigDecimal rawGoodsCount; private BigDecimal rawGoodsCount;
// 原始货品种类数 /**
* 原始货品种类数
*/
private Integer rawGoodsTypeCount; private Integer rawGoodsTypeCount;
// 币种 /**
* 币种
*/
private String currency; private String currency;
// 发票ID(自增生成),0代表没有发票或已取消/已冲红 /**
* 发票 ID(自增生成),0 代表没有发票或已取消/已冲红
*/
private Integer invoiceId; private Integer invoiceId;
// 版本号 /**
* 版本号
*/
private Integer versionId; private Integer versionId;
// 修改时间,例如:2020-10-19 00:00:00 /**
* 修改时间,例如:2020 - 10 - 19 00:00:00
*/
private Date modified; private Date modified;
// 递交时间(毫秒级时间戳,例如:1631861379000) /**
* 递交时间(毫秒级时间戳,例如:1631861379000)
*/
private String created; private String created;
// 审核时间 /**
* 审核时间
*/
private String checkTime; private String checkTime;
// 证件类别 /**
private Integer id_cardType; * 证件类别
// 店铺编号 */
private Integer idCardType;
/**
* 店铺编号
*/
private String shopNo; private String shopNo;
// 店铺名称 /**
* 店铺名称
*/
private String shopName; private String shopName;
// 店铺备注 /**
* 店铺备注
*/
private String shopRemark; private String shopRemark;
// 仓库编号,如订单无仓库的话,则不返回该字段 /**
* 仓库编号,如订单无仓库的话,则不返回该字段
*/
private String warehouseNo; private String warehouseNo;
// 客户姓名 /**
* 客户姓名
*/
private String customerName; private String customerName;
// 客户编码 /**
* 客户编码
*/
private String customerNo; private String customerNo;
// 物流公司名称 /**
* 物流公司名称
*/
private String logisticsName; private String logisticsName;
// 物流公司编号 /**
* 物流公司编号
*/
private String logisticsCode; private String logisticsCode;
// 物流类型名称 /**
* 物流类型名称
*/
private String logisticsTypeName; private String logisticsTypeName;
// 送货时间,例如:2020-10-19 00:00:00 /**
* 送货时间,例如:2020 - 10 - 19 00:00:00
*/
private String toDeliverTime; private String toDeliverTime;
// 计划发货时间 /**
* 计划发货时间
*/
private String delayToTime; private String delayToTime;
// 最晚发货时间 /**
* 最晚发货时间
*/
private String estimateConsignTime; private String estimateConsignTime;
// 店铺id /**
* 店铺 id
*/
private Integer shopId; private Integer shopId;
// 仓库id /**
* 仓库 id
*/
private Integer warehouseId; private Integer warehouseId;
// 体积 /**
* 体积
*/
private BigDecimal volume; private BigDecimal volume;
// 订单标签 /**
* 订单标签
*/
private String tradeLabel; private String tradeLabel;
// 订单掩码 /**
// 1:使用智选物流 * 1:使用智选物流; 2:货品标签; 4:预订单自动激活失败; 16:订单货品指定批次; 32:平台自动流转仓库; 64:部分发货; 128:全部发货; 256:优先占用; 512:待分配转审核失败或订单审核失败; 1024:催未付款订单短信发送标记; 2048:拆分(在判断的时候使用&运算)
// 2:货品标签 */
// 4:预订单自动激活失败
// 16:订单货品指定批次
// 32:平台自动流转仓库
// 64:部分发货
// 128:全部发货
// 256:优先占用
// 512:待分配转审核失败或订单审核失败
// 1024:催未付款订单短信发送标记
// 2048:拆分
// 在判断的时候使用&运算
private Integer tradeMask; private Integer tradeMask;
// 店铺平台id /**
* 店铺平台 id
*/
private Integer shopPlatformId; private Integer shopPlatformId;
// 子平台id /**
* 子平台 id
*/
private Integer subPlatformId; private Integer subPlatformId;
// 包装 /**
* 包装
*/
private String packageName; private String packageName;
// 包装id /**
* 包装 id
*/
private Integer packageId; private Integer packageId;
// 包装成本 /**
* 包装成本
*/
private BigDecimal packageCost; private BigDecimal packageCost;
// 已付 /**
* 已付
*/
private BigDecimal paid; private BigDecimal paid;
// 大件类型 /**
// 1:普通套件 * 大件类型: 1:普通套件; 2:独立套件; 3:分组单发,未使用; -1:非单发件 取子单中的最大值
// 2:独立套件 */
// 3:分组单发,未使用
// -1:非单发件 取子单中的最大值
private Integer largeType; private Integer largeType;
// 赠品标记 /**
// 1:自动赠送 * 赠品标记: 1:自动赠送; 2:手工赠送; 4:回购赠送; 8:平台赠送(注意:如果是 3,则表示既有自动赠送也有手工赠送“1 + 2”)
// 2:手工赠送 */
// 4:回购赠送
// 8:平台赠送
// (注意:如果是3,则表示既有自动赠送也有手工赠送“1+2”)
private Integer giftMask; private Integer giftMask;
// 客户id /**
* 客户 id
*/
private Integer customerId; private Integer customerId;
// 其他成本 /**
* 其他成本
*/
private BigDecimal otherCost; private BigDecimal otherCost;
// 不可合并拆分 /**
private boolean isSealed; * 不可合并拆分
// 客户类型(0:普通客户;1:分销商;2:线下批发) */
private Boolean isSealed;
/**
* 客户类型(0:普通客户;1:分销商;2:线下批发)
*/
private Integer customerType; private Integer customerType;
// 物流公司id /**
* 物流公司 id
*/
private Integer logisticsId; private Integer logisticsId;
// 取消原因 /**
* 取消原因
*/
private String cancelReason; private String cancelReason;
// 驳回原因 /**
* 驳回原因
*/
private String revertReason; private String revertReason;
// 订单标签mask /**
* 订单标签 mask
*/
private String newTradeLabel; private String newTradeLabel;
// 分销原始单号(无长度限制) /**
* 分销原始单号(无长度限制)
*/
private String fenxiaoTid; private String fenxiaoTid;
// 批次号 /**
* 是否删除标志 0 未删除 1 已删除
*/
private Integer delFlag;
/**
* 创建者
*/
private String createBy;
/**
* 创建人 UserID
*/
private Long createUserId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新者
*/
private String updateBy;
/**
* 修改人 UserID
*/
private Long updateUserId;
/**
* 更新时间
*/
private Date updateTime;
/**
* 采集批次
*/
private String batchNo; private String batchNo;
// 采集开始时间 /**
* 本批次采集开始时间,例如:2020 - 10 - 19 00:00:00
*/
private Date startTime; private Date startTime;
// 采集结束时间 /**
* 本批批次采集结束时间,例如:2020 - 10 - 19 00:00:00
*/
private Date endTime; private Date endTime;
/**
// 同步类型,接口为1手动同步,0 xxljob自动同步, * 同步类型 ,接口为 1 手动同步,0 xxljob 自动同步
*/
private Integer syncType; private Integer syncType;
// 订单明细 // 订单明细
@TableField(exist = false) @TableField(exist = false)
private List<FinanceOrderDetail> detailList; private List<FinanceOrderDetail> detailList;
} }
package com.sfa.job.domain.order.mapper; package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.CollectErrorInfo; import com.sfa.job.domain.order.entity.CollectErrorLog;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface CollectErrorInfoMapper extends BaseMapper<CollectErrorInfo> { public interface CollectErrorLogMapper extends BaseMapper<CollectErrorLog> {
} }
package com.sfa.job.domain.order.mapper; package com.sfa.job.domain.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.CollectOrderLogInfo; import com.sfa.job.domain.order.entity.CollectOrderLog;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface CollectOrderLogInfoMapper extends BaseMapper<CollectOrderLogInfo> { public interface CollectOrderLogMapper extends BaseMapper<CollectOrderLog> {
} }
...@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.order.entity.FinanceOrder; import com.sfa.job.domain.order.entity.FinanceOrder;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper @Mapper
public interface FinanceOrderMapper extends BaseMapper<FinanceOrder> { public interface FinanceOrderMapper extends BaseMapper<FinanceOrder> {
void saveOrUpdateBatch(List<FinanceOrder> batchLists);
} }
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 Integer orderCount;
/**
* 采集订单的详细数量,存储为字符串,长度不超过 20 个字符
*/
private Integer orderDetailCount;
/**
* 采集批次信息,可存储长度不超过 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.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;
}
...@@ -12,5 +12,5 @@ import lombok.Data; ...@@ -12,5 +12,5 @@ import lombok.Data;
public class WangdiantongQueryDto { public class WangdiantongQueryDto {
private JSONArray result; private JSONArray result;
private Integer totalCount; private Integer totalCount;
private Integer nextBeginPageNo;
} }
package com.sfa.job.service.order; package com.sfa.job.service.order;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sfa.job.domain.order.entity.FinanceOrder;
import com.sfa.job.pojo.response.FinanceSyncOrderDetailDto; import com.sfa.job.pojo.response.FinanceSyncOrderDetailDto;
import java.util.Date; import java.util.Date;
public interface FinanceOrderSyncService extends IService<FinanceOrder> { public interface FinanceOrderSyncService {
FinanceSyncOrderDetailDto syncWangdiantongOrder(Date startTime, Date endTime, Integer syncType); FinanceSyncOrderDetailDto syncWangdiantongOrder(Date startTime, Date endTime, Integer syncType);
} }
...@@ -6,13 +6,13 @@ import cn.hutool.http.HttpStatus; ...@@ -6,13 +6,13 @@ import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.JSONReader;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sfa.common.core.exception.ServiceException; import com.sfa.common.core.exception.ServiceException;
import com.sfa.common.core.utils.DateUtils; import com.sfa.common.core.utils.DateUtils;
import com.sfa.job.constants.Constants;
import com.sfa.job.domain.order.dao.*; import com.sfa.job.domain.order.dao.*;
import com.sfa.job.domain.order.entity.*; import com.sfa.job.domain.order.entity.*;
import com.sfa.job.domain.order.mapper.FinanceOrderMapper;
import com.sfa.job.pojo.request.WangdiantongQueryVO; import com.sfa.job.pojo.request.WangdiantongQueryVO;
import com.sfa.job.pojo.response.CollectOrderLogDto;
import com.sfa.job.pojo.response.FinanceSyncOrderDetailDto; import com.sfa.job.pojo.response.FinanceSyncOrderDetailDto;
import com.sfa.job.pojo.response.WangdiantongQueryDto; import com.sfa.job.pojo.response.WangdiantongQueryDto;
import com.sfa.job.service.order.FinanceOrderSyncService; import com.sfa.job.service.order.FinanceOrderSyncService;
...@@ -36,21 +36,22 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -36,21 +36,22 @@ import java.util.concurrent.atomic.AtomicInteger;
@DS("bi") @DS("bi")
@Slf4j @Slf4j
@Service @Service
public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper, FinanceOrder> implements FinanceOrderSyncService { public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
@Autowired @Autowired
WangdiantongUtil wangdiantongUtil; WangdiantongUtil wangdiantongUtil;
@Autowired @Autowired
// FinanceOrderDetailService detailService; FinanceOrderDetailDao orderDetailDao;
FinanceOrderDetailDao detailDao; @Autowired
FinanceOrderDao orderDao;
@Autowired @Autowired
FinianceBaseProductDao baseProductDao; FinianceBaseProductDao baseProductDao;
@Autowired @Autowired
FinanceBaseZbjTypeDao baseZbjTypeDao; FinanceBaseZbjTypeDao baseZbjTypeDao;
@Autowired @Autowired
CollectOrderLogInfoDao orderLogInfoDao; CollectOrderLogDao orderLogInfoDao;
@Autowired @Autowired
CollectErrorInfoDao errorInfoDao; CollectErrorLogDao errorInfoDao;
@Autowired @Autowired
IProductDao productDao; IProductDao productDao;
...@@ -73,11 +74,11 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper, ...@@ -73,11 +74,11 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
if (ObjectUtils.isEmpty(startTime)) { if (ObjectUtils.isEmpty(startTime)) {
Date latestTime = null; Date latestTime = null;
// 查询最新的采集时间 // 查询最新的采集时间
CollectOrderLogInfo collectOrderLogInfo = orderLogInfoDao.selectOrderSyncLatest(syncType); CollectOrderLogDto collectOrderLog = orderLogInfoDao.selectOrderSyncLatest(syncType);
if (ObjectUtils.isNotEmpty(collectOrderLogInfo)) { if (ObjectUtils.isNotEmpty(collectOrderLog)) {
latestTime = collectOrderLogInfo.getLatestTime(); latestTime = collectOrderLog.getLatestTime();
Integer pageNoExist = collectOrderLogInfo.getPageNo(); Integer pageNoExist = collectOrderLog.getPageNo();
beginPageNo.set(ObjectUtil.isNotEmpty(pageNoExist) && pageNoExist > 0 ? collectOrderLogInfo.getPageNo() : 0); beginPageNo.set(ObjectUtil.isNotEmpty(pageNoExist) && pageNoExist > 0 ? collectOrderLog.getPageNo() : 0);
nextPageFlag = beginPageNo.get() > 0; nextPageFlag = beginPageNo.get() > 0;
} else { } else {
// 默认上个月的第一天 00:00:00 // 默认上个月的第一天 00:00:00
...@@ -102,8 +103,8 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper, ...@@ -102,8 +103,8 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
detailDto.setBatchNo(batchNo); detailDto.setBatchNo(batchNo);
detailDto.setStartTime(startTime); detailDto.setStartTime(startTime);
detailDto.setEndTime(endTime); detailDto.setEndTime(endTime);
detailDto.setMessage(String.format("开始时间%s不能大于当前时间%s", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(currentLatest) )); detailDto.setMessage(String.format("开始时间%s不能大于当前时间%s", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(currentLatest)));
log.warn(String.format("开始时间%s不能大于当前时间%s", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(currentLatest) )); log.warn(String.format("开始时间%s不能大于当前时间%s", DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(currentLatest)));
return detailDto; return detailDto;
} }
...@@ -129,23 +130,22 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper, ...@@ -129,23 +130,22 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
Map<String, String> baseZbjType = baseZbjTypeDao.selectBaseZbjType(); Map<String, String> baseZbjType = baseZbjTypeDao.selectBaseZbjType();
// 系列 // 系列
List<PrdInfo> prdInfos = productDao.selectProdSeries(); Map<String, String> prodSeriesMap = productDao.selectProdSeries();
// 转换成map
Map<String, String> prodSeriesMap = new HashMap<>();
prdInfos.stream().forEach(prdInfo -> {
prodSeriesMap.put(prdInfo.getPrdCode(), prdInfo.getPrdName());
});
// 入库订单表 // 入库订单表
log.info("开始插入订单数据,数量:{}", orderAllArray.size()); log.info("开始插入订单数据,数量:{}", orderAllArray.size());
Date finalStartTime = startTime; Date finalStartTime = startTime;
Date finalEndTime = endTime; Date finalEndTime = endTime;
orders.forEach(order -> { orders.forEach(order -> {
order.setDelFlag(0);
order.setBatchNo(batchNo); order.setBatchNo(batchNo);
order.setStartTime(finalStartTime); order.setStartTime(finalStartTime);
order.setEndTime(finalEndTime); order.setEndTime(finalEndTime);
order.setSyncType(syncType); order.setSyncType(syncType);
order.setCreateTime(new Date());
order.setUpdateTime(new Date());
}); });
this.saveOrUpdateBatch(orders); orderDao.saveOrUpdateBatch(orders);
List<FinanceOrderDetail> mergeList = new ArrayList<>(); List<FinanceOrderDetail> mergeList = new ArrayList<>();
...@@ -207,20 +207,21 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper, ...@@ -207,20 +207,21 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
log.info("开始插入订单详情数据,数量:{}", mergeList.size()); log.info("开始插入订单详情数据,数量:{}", mergeList.size());
// 批量插入 // 批量插入
detailDao.saveOrUpdateBatch(mergeList); orderDetailDao.saveOrUpdateBatch(mergeList);
log.info("插入订单和订单详情完成,批次{}开始时间{},结束时间{},订单数量:{},详情数量:{}", batchNo, DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(endTime), orders.size(), mergeList.size()); log.info("插入订单和订单详情完成,批次{}开始时间{},结束时间{},订单数量:{},详情数量:{},下一次开始页数:{}", batchNo, DateUtil.formatDateTime(startTime),
DateUtil.formatDateTime(endTime), orders.size(), mergeList.size(), beginPageNo.get());
CollectOrderLogInfo collectOrderLogInfo = new CollectOrderLogInfo(); CollectOrderLog collectOrderLog = new CollectOrderLog();
collectOrderLogInfo.setSyncType(syncType); collectOrderLog.setSyncType(syncType);
collectOrderLogInfo.setOrderCount(orders.size()); collectOrderLog.setOrderCount(orders.size());
collectOrderLogInfo.setOrderDetailCount(mergeList.size()); collectOrderLog.setOrderDetailCount(mergeList.size());
collectOrderLogInfo.setBatchNo(batchNo); collectOrderLog.setBatchNo(batchNo);
collectOrderLogInfo.setLatestTime(endTime); collectOrderLog.setLatestTime(endTime);
collectOrderLogInfo.setPageNo(beginPageNo.get()); collectOrderLog.setPageNo(beginPageNo.get());
collectOrderLogInfo.setTotalCount(wangdiantongQueryDto.getTotalCount()); collectOrderLog.setTotalCount(wangdiantongQueryDto.getTotalCount());
orderLogInfoDao.insert(collectOrderLogInfo); orderLogInfoDao.insert(collectOrderLog);
// 接口测试使用 // 接口测试使用
detailDto.setOrderCount(orders.size()); detailDto.setOrderCount(orders.size());
...@@ -233,9 +234,9 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper, ...@@ -233,9 +234,9 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
// 记录错误日志表 collect_error_info // 记录错误日志表 collect_error_info
CollectErrorInfo errorInfo = new CollectErrorInfo(); CollectErrorLog errorInfo = new CollectErrorLog();
errorInfo.setBatchNo(batchNo); errorInfo.setBatchNo(batchNo);
errorInfo.setType("xxlJob"); errorInfo.setType(Constants.SYNC_TYPE_XXL_JOB);
errorInfo.setErrorMsg(e.getMessage()); errorInfo.setErrorMsg(e.getMessage());
errorInfo.setEndTime(endTime); errorInfo.setEndTime(endTime);
errorInfo.setStartTime(startTime); errorInfo.setStartTime(startTime);
......
...@@ -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;
} }
......
...@@ -31,7 +31,7 @@ public class WangdiantongUtil { ...@@ -31,7 +31,7 @@ public class WangdiantongUtil {
Integer totalCount = 0; Integer totalCount = 0;
try { try {
// 最大处理量,超过了,不再查询 // 最大处理量,超过了,不再查询
int maxDealCount = 500; int maxDealCount = 1000;
int size = 0; int size = 0;
int pageNo = beginPageNo.get(); int pageNo = beginPageNo.get();
// 出现了查询的分页数量不足的情况 // 出现了查询的分页数量不足的情况
...@@ -89,7 +89,7 @@ public class WangdiantongUtil { ...@@ -89,7 +89,7 @@ public class WangdiantongUtil {
throw new ServiceException("访问旺店通接口错误" + messageJson.toString()); throw new ServiceException("访问旺店通接口错误" + messageJson.toString());
} }
totalCount = dataR.getInteger("total_count"); totalCount = dataR.getInteger("total_count");
maxPage = totalCount / 200; maxPage = (totalCount+199)/200;
JSONArray orderJsonArray = dataR.getJSONArray("order"); JSONArray orderJsonArray = dataR.getJSONArray("order");
allArray.addAll(orderJsonArray); allArray.addAll(orderJsonArray);
...@@ -99,12 +99,13 @@ public class WangdiantongUtil { ...@@ -99,12 +99,13 @@ public class WangdiantongUtil {
// 计算下一次分页的页码 // 计算下一次分页的页码
pageNo++; pageNo++;
} while (size < maxDealCount && pageNo <= maxPage); } while (size < maxDealCount && pageNo <= maxPage);
if (pageNo > maxPage) { if (pageNo >= maxPage) {
// 已经到最后一页了,设置成-1,表示已经处理完了,不再查询 // 已经到最后一页了,设置成-1,表示已经处理完了,不再查询
beginPageNo.set(-1); beginPageNo.set(-1);
} else { } else {
beginPageNo.set(pageNo); beginPageNo.set(pageNo);
} }
wangdiantongQueryDto.setNextBeginPageNo(pageNo);
wangdiantongQueryDto.setResult(allArray); wangdiantongQueryDto.setResult(allArray);
wangdiantongQueryDto.setTotalCount(totalCount); wangdiantongQueryDto.setTotalCount(totalCount);
} catch (Exception e) { } catch (Exception e) {
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sfa.job.domain.order.mapper.FinanceOrderMapper">
<insert id="saveOrUpdateBatch" parameterType="java.util.List">
insert into finance_order ( <include refid="Order_Base_Column_List"></include>)
values
<foreach collection="list" item="item" separator=",">
(
#{item.tradeId}, #{item.tradeNo}, #{item.platformId}, #{item.warehouseType}, #{item.srcTids}, #{item.payAccount}, #{item.tradeStatus}, #{item.tradeType},
#{item.deliveryTerm}, #{item.receiverRing}, #{item.freezeReason}, #{item.refundStatus}, #{item.fenxiaoType}, #{item.fenxiaoNick}, #{item.tradeTime},
#{item.payTime}, #{item.consignTime}, #{item.buyerNick}, #{item.receiverName}, #{item.receiverProvince}, #{item.receiverCity}, #{item.receiverDistrict},
#{item.receiverAddress}, #{item.receiverMobile}, #{item.receiverTelno}, #{item.receiverZip}, #{item.receiverArea}, #{item.receiverDtb}, #{item.badReason},
#{item.logisticsNo}, #{item.buyerMessage}, #{item.csRemark}, #{item.remarkFlag}, #{item.printRemark}, #{item.goodsTypeCount}, #{item.goodsCount},
#{item.goodsAmount}, #{item.postAmount}, #{item.otherAmount}, #{item.discount}, #{item.receivable}, #{item.codAmount}, #{item.extCodFee}, #{item.goodsCost},
#{item.postCost}, #{item.weight}, #{item.profit}, #{item.tax}, #{item.taxRate}, #{item.commission}, #{item.invoiceType}, #{item.invoiceTitle}, #{item.invoiceContent},
#{item.salesmanName}, #{item.checkerName}, #{item.fcheckerName}, #{item.checkouterName}, #{item.stockoutNo}, #{item.flagName}, #{item.tradeFrom},
#{item.singleSpecNo}, #{item.rawGoodsCount}, #{item.rawGoodsTypeCount}, #{item.currency}, #{item.invoiceId}, #{item.versionId}, #{item.modified},
#{item.created}, #{item.checkTime}, #{item.idCardType}, #{item.shopNo}, #{item.shopName}, #{item.shopRemark}, #{item.warehouseNo}, #{item.customerName},
#{item.customerNo}, #{item.logisticsName}, #{item.logisticsCode}, #{item.logisticsTypeName}, #{item.toDeliverTime}, #{item.delayToTime},
#{item.estimateConsignTime}, #{item.shopId}, #{item.warehouseId}, #{item.volume}, #{item.tradeLabel}, #{item.tradeMask}, #{item.shopPlatformId},
#{item.subPlatformId}, #{item.packageName}, #{item.packageId}, #{item.packageCost}, #{item.paid}, #{item.largeType}, #{item.giftMask}, #{item.customerId},
#{item.otherCost}, #{item.isSealed}, #{item.customerType}, #{item.logisticsId}, #{item.cancelReason}, #{item.revertReason}, #{item.newTradeLabel},
#{item.fenxiaoTid}, #{item.delFlag}, #{item.createBy}, #{item.createUserId}, #{item.createTime}, #{item.updateBy}, #{item.updateUserId}, #{item.updateTime},
#{item.batchNo}, #{item.startTime}, #{item.endTime}, #{item.syncType}
)
</foreach>
ON DUPLICATE KEY UPDATE
trade_id = VALUES(trade_id),
trade_no = VALUES(trade_no),
platform_id = VALUES(platform_id),
warehouse_type = VALUES(warehouse_type),
src_tids = VALUES(src_tids),
pay_account = VALUES(pay_account),
trade_status = VALUES(trade_status),
trade_type = VALUES(trade_type),
delivery_term = VALUES(delivery_term),
receiver_ring = VALUES(receiver_ring),
freeze_reason = VALUES(freeze_reason),
refund_status = VALUES(refund_status),
fenxiao_type = VALUES(fenxiao_type),
fenxiao_nick = VALUES(fenxiao_nick),
trade_time = VALUES(trade_time),
pay_time = VALUES(pay_time),
consign_time = VALUES(consign_time),
buyer_nick = VALUES(buyer_nick),
receiver_name = VALUES(receiver_name),
receiver_province = VALUES(receiver_province),
receiver_city = VALUES(receiver_city),
receiver_district = VALUES(receiver_district),
receiver_address = VALUES(receiver_address),
receiver_mobile = VALUES(receiver_mobile),
receiver_telno = VALUES(receiver_telno),
receiver_zip = VALUES(receiver_zip),
receiver_area = VALUES(receiver_area),
receiver_dtb = VALUES(receiver_dtb),
bad_reason = VALUES(bad_reason),
logistics_no = VALUES(logistics_no),
buyer_message = VALUES(buyer_message),
cs_remark = VALUES(cs_remark),
remark_flag = VALUES(remark_flag),
print_remark = VALUES(print_remark),
goods_type_count = VALUES(goods_type_count),
goods_count = VALUES(goods_count),
goods_amount = VALUES(goods_amount),
post_amount = VALUES(post_amount),
other_amount = VALUES(other_amount),
discount = VALUES(discount),
receivable = VALUES(receivable),
cod_amount = VALUES(cod_amount),
ext_cod_fee = VALUES(ext_cod_fee),
goods_cost = VALUES(goods_cost),
post_cost = VALUES(post_cost),
weight = VALUES(weight),
profit = VALUES(profit),
tax = VALUES(tax),
tax_rate = VALUES(tax_rate),
commission = VALUES(commission),
invoice_type = VALUES(invoice_type),
invoice_title = VALUES(invoice_title),
invoice_content = VALUES(invoice_content),
salesman_name = VALUES(salesman_name),
checker_name = VALUES(checker_name),
fchecker_name = VALUES(fchecker_name),
checkouter_name = VALUES(checkouter_name),
stockout_no = VALUES(stockout_no),
flag_name = VALUES(flag_name),
trade_from = VALUES(trade_from),
single_spec_no = VALUES(single_spec_no),
raw_goods_count = VALUES(raw_goods_count),
raw_goods_type_count = VALUES(raw_goods_type_count),
currency = VALUES(currency),
invoice_id = VALUES(invoice_id),
version_id = VALUES(version_id),
modified = VALUES(modified),
created = VALUES(created),
check_time = VALUES(check_time),
id_card_type = VALUES(id_card_type),
shop_no = VALUES(shop_no),
shop_name = VALUES(shop_name),
shop_remark = VALUES(shop_remark),
warehouse_no = VALUES(warehouse_no),
customer_name = VALUES(customer_name),
customer_no = VALUES(customer_no),
logistics_name = VALUES(logistics_name),
logistics_code = VALUES(logistics_code),
logistics_type_name = VALUES(logistics_type_name),
to_deliver_time = VALUES(to_deliver_time),
delay_to_time = VALUES(delay_to_time),
estimate_consign_time = VALUES(estimate_consign_time),
shop_id = VALUES(shop_id),
warehouse_id = VALUES(warehouse_id),
volume = VALUES(volume),
trade_label = VALUES(trade_label),
trade_mask = VALUES(trade_mask),
shop_platform_id = VALUES(shop_platform_id),
sub_platform_id = VALUES(sub_platform_id),
package_name = VALUES(package_name),
package_id = VALUES(package_id),
package_cost = VALUES(package_cost),
paid = VALUES(paid),
large_type = VALUES(large_type),
gift_mask = VALUES(gift_mask),
customer_id = VALUES(customer_id),
other_cost = VALUES(other_cost),
is_sealed = VALUES(is_sealed),
customer_type = VALUES(customer_type),
logistics_id = VALUES(logistics_id),
cancel_reason = VALUES(cancel_reason),
revert_reason = VALUES(revert_reason),
new_trade_label = VALUES(new_trade_label),
fenxiao_tid = VALUES(fenxiao_tid),
del_flag = VALUES(del_flag),
create_by = VALUES(create_by),
create_user_id = VALUES(create_user_id),
create_time = VALUES(create_time),
update_by = VALUES(update_by),
update_user_id = VALUES(update_user_id),
update_time = VALUES(update_time),
batch_no = VALUES(batch_no),
start_time = VALUES(start_time),
end_time = VALUES(end_time),
sync_type = VALUES(sync_type)
</insert>
<!-- 定义 FinanceOrder 表的字段 -->
<sql id="Order_Base_Column_List">
trade_id, trade_no, platform_id, warehouse_type, src_tids, pay_account, trade_status, trade_type,
delivery_term, receiver_ring, freeze_reason, refund_status, fenxiao_type, fenxiao_nick, trade_time,
pay_time, consign_time, buyer_nick, receiver_name, receiver_province, receiver_city, receiver_district,
receiver_address, receiver_mobile, receiver_telno, receiver_zip, receiver_area, receiver_dtb, bad_reason,
logistics_no, buyer_message, cs_remark, remark_flag, print_remark, goods_type_count, goods_count,
goods_amount, post_amount, other_amount, discount, receivable, cod_amount, ext_cod_fee, goods_cost,
post_cost, weight, profit, tax, tax_rate, commission, invoice_type, invoice_title, invoice_content,
salesman_name, checker_name, fchecker_name, checkouter_name, stockout_no, flag_name, trade_from,
single_spec_no, raw_goods_count, raw_goods_type_count, currency, invoice_id, version_id, modified,
created, check_time, id_card_type, shop_no, shop_name, shop_remark, warehouse_no, customer_name,
customer_no, logistics_name, logistics_code, logistics_type_name, to_deliver_time, delay_to_time,
estimate_consign_time, shop_id, warehouse_id, volume, trade_label, trade_mask, shop_platform_id,
sub_platform_id, package_name, package_id, package_cost, paid, large_type, gift_mask, customer_id,
other_cost, is_sealed, customer_type, logistics_id, cancel_reason, revert_reason, new_trade_label,
fenxiao_tid, del_flag, create_by, create_user_id, create_time, update_by, update_user_id, update_time,
batch_no, start_time, end_time, sync_type
</sql>
<!-- 根据 trade_id 查询订单 -->
<select id="selectFinanceOrderById" resultType="com.sfa.job.domain.order.entity.FinanceOrder">
SELECT
<include refid="Order_Base_Column_List"/>
FROM
finance_order
WHERE
trade_id = #{tradeId}
</select>
<!-- 查询所有订单 -->
<select id="selectAllFinanceOrders" resultType="com.sfa.job.domain.order.entity.FinanceOrder">
SELECT
<include refid="Order_Base_Column_List"/>
FROM
finance_order
</select>
<!-- 插入订单 -->
<insert id="insertFinanceOrder" parameterType="com.sfa.job.domain.order.entity.FinanceOrder">
INSERT INTO finance_order (
trade_id, trade_no, platform_id, warehouse_type, src_tids, pay_account, trade_status, trade_type,
delivery_term, receiver_ring, freeze_reason, refund_status, fenxiao_type, fenxiao_nick, trade_time,
pay_time, consign_time, buyer_nick, receiver_name, receiver_province, receiver_city, receiver_district,
receiver_address, receiver_mobile, receiver_telno, receiver_zip, receiver_area, receiver_dtb, bad_reason,
logistics_no, buyer_message, cs_remark, remark_flag, print_remark, goods_type_count, goods_count,
goods_amount, post_amount, other_amount, discount, receivable, cod_amount, ext_cod_fee, goods_cost,
post_cost, weight, profit, tax, tax_rate, commission, invoice_type, invoice_title, invoice_content,
salesman_name, checker_name, fchecker_name, checkouter_name, stockout_no, flag_name, trade_from,
single_spec_no, raw_goods_count, raw_goods_type_count, currency, invoice_id, version_id, modified,
created, check_time, id_card_type, shop_no, shop_name, shop_remark, warehouse_no, customer_name,
customer_no, logistics_name, logistics_code, logistics_type_name, to_deliver_time, delay_to_time,
estimate_consign_time, shop_id, warehouse_id, volume, trade_label, trade_mask, shop_platform_id,
sub_platform_id, package_name, package_id, package_cost, paid, large_type, gift_mask, customer_id,
other_cost, is_sealed, customer_type, logistics_id, cancel_reason, revert_reason, new_trade_label,
fenxiao_tid, del_flag, create_by, create_user_id, create_time, update_by, update_user_id, update_time,
batch_no, start_time, end_time, sync_type
) VALUES (
#{tradeId}, #{tradeNo}, #{platformId}, #{warehouseType}, #{srcTids}, #{payAccount}, #{tradeStatus}, #{tradeType},
#{deliveryTerm}, #{receiverRing}, #{freezeReason}, #{refundStatus}, #{fenxiaoType}, #{fenxiaoNick}, #{tradeTime},
#{payTime}, #{consignTime}, #{buyerNick}, #{receiverName}, #{receiverProvince}, #{receiverCity}, #{receiverDistrict},
#{receiverAddress}, #{receiverMobile}, #{receiverTelno}, #{receiverZip}, #{receiverArea}, #{receiverDtb}, #{badReason},
#{logisticsNo}, #{buyerMessage}, #{csRemark}, #{remarkFlag}, #{printRemark}, #{goodsTypeCount}, #{goodsCount},
#{goodsAmount}, #{postAmount}, #{otherAmount}, #{discount}, #{receivable}, #{codAmount}, #{extCodFee}, #{goodsCost},
#{postCost}, #{weight}, #{profit}, #{tax}, #{taxRate}, #{commission}, #{invoiceType}, #{invoiceTitle}, #{invoiceContent},
#{salesmanName}, #{checkerName}, #{fcheckerName}, #{checkouterName}, #{stockoutNo}, #{flagName}, #{tradeFrom},
#{singleSpecNo}, #{rawGoodsCount}, #{rawGoodsTypeCount}, #{currency}, #{invoiceId}, #{versionId}, #{modified},
#{created}, #{checkTime}, #{idCardType}, #{shopNo}, #{shopName}, #{shopRemark}, #{warehouseNo}, #{customerName},
#{customerNo}, #{logisticsName}, #{logisticsCode}, #{logisticsTypeName}, #{toDeliverTime}, #{delayToTime},
#{estimateConsignTime}, #{shopId}, #{warehouseId}, #{volume}, #{tradeLabel}, #{tradeMask}, #{shopPlatformId},
#{subPlatformId}, #{packageName}, #{packageId}, #{packageCost}, #{paid}, #{largeType}, #{giftMask}, #{customerId},
#{otherCost}, #{isSealed}, #{customerType}, #{logisticsId}, #{cancelReason}, #{revertReason}, #{newTradeLabel},
#{fenxiaoTid}, #{delFlag}, #{createBy}, #{createUserId}, #{createTime}, #{updateBy}, #{updateUserId}, #{updateTime},
#{batchNo}, #{startTime}, #{endTime}, #{syncType}
)
</insert>
<!-- 根据 trade_id 更新订单 -->
<update id="updateFinanceOrderById" parameterType="com.sfa.job.domain.order.entity.FinanceOrder">
UPDATE finance_order
SET
trade_no = #{tradeNo},
platform_id = #{platformId},
warehouse_type = #{warehouseType},
src_tids = #{srcTids},
pay_account = #{payAccount},
trade_status = #{tradeStatus},
trade_type = #{tradeType},
delivery_term = #{deliveryTerm},
receiver_ring = #{receiverRing},
freeze_reason = #{freezeReason},
refund_status = #{refundStatus},
fenxiao_type = #{fenxiaoType},
fenxiao_nick = #{fenxiaoNick},
trade_time = #{tradeTime},
pay_time = #{payTime},
consign_time = #{consignTime},
buyer_nick = #{buyerNick},
receiver_name = #{receiverName},
receiver_province = #{receiverProvince},
receiver_city = #{receiverCity},
receiver_district = #{receiverDistrict},
receiver_address = #{receiverAddress},
receiver_mobile = #{receiverMobile},
receiver_telno = #{receiverTelno},
receiver_zip = #{receiverZip},
receiver_area = #{receiverArea},
receiver_dtb = #{receiverDtb},
bad_reason = #{badReason},
logistics_no = #{logisticsNo},
buyer_message = #{buyerMessage},
cs_remark = #{csRemark},
remark_flag = #{remarkFlag},
print_remark = #{printRemark},
goods_type_count = #{goodsTypeCount},
goods_count = #{goodsCount},
goods_amount = #{goodsAmount},
post_amount = #{postAmount},
other_amount = #{otherAmount},
discount = #{discount},
receivable = #{receivable},
cod_amount = #{codAmount},
ext_cod_fee = #{extCodFee},
goods_cost = #{goodsCost},
post_cost = #{postCost},
weight = #{weight},
profit = #{profit},
tax = #{tax},
tax_rate = #{taxRate},
commission = #{commission},
invoice_type = #{invoiceType},
invoice_title = #{invoiceTitle},
invoice_content = #{invoiceContent},
salesman_name = #{salesmanName},
checker_name = #{checkerName},
fchecker_name = #{fcheckerName},
checkouter_name = #{checkouterName},
stockout_no = #{stockoutNo},
flag_name = #{flagName},
trade_from = #{tradeFrom},
single_spec_no = #{singleSpecNo},
raw_goods_count = #{rawGoodsCount},
raw_goods_type_count = #{rawGoodsTypeCount},
currency = #{currency},
invoice_id = #{invoiceId},
version_id = #{versionId},
modified = #{modified},
created = #{created},
check_time = #{checkTime},
id_card_type = #{idCardType},
shop_no = #{shopNo},
shop_name = #{shopName},
shop_remark = #{shopRemark},
warehouse_no = #{warehouseNo},
customer_name = #{customerName},
customer_no = #{customerNo},
logistics_name = #{logisticsName},
logistics_code = #{logisticsCode},
logistics_type_name = #{logisticsTypeName},
to_deliver_time = #{toDeliverTime},
delay_to_time = #{delayToTime},
estimate_consign_time = #{estimateConsignTime},
shop_id = #{shopId},
warehouse_id = #{warehouseId},
volume = #{volume},
trade_label = #{tradeLabel},
trade_mask = #{tradeMask},
shop_platform_id = #{shopPlatformId},
sub_platform_id = #{subPlatformId},
package_name = #{packageName},
package_id = #{packageId},
package_cost = #{packageCost},
paid = #{paid},
large_type = #{largeType},
gift_mask = #{giftMask},
customer_id = #{customerId},
other_cost = #{otherCost},
is_sealed = #{isSealed},
customer_type = #{customerType},
logistics_id = #{logisticsId},
cancel_reason = #{cancelReason},
revert_reason = #{revertReason},
new_trade_label = #{newTradeLabel},
fenxiao_tid = #{fenxiaoTid},
del_flag = #{delFlag},
create_by = #{createBy},
create_user_id = #{createUserId},
create_time = #{createTime},
update_by = #{updateBy},
update_user_id = #{updateUserId},
update_time = #{updateTime},
batch_no = #{batchNo},
start_time = #{startTime},
end_time = #{endTime},
sync_type = #{syncType}
WHERE
trade_id = #{tradeId}
</update>
<!-- 根据 trade_id 删除订单 -->
<delete id="deleteFinanceOrderById" parameterType="java.lang.Long">
DELETE FROM finance_order
WHERE
trade_id = #{tradeId}
</delete>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论