Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-module-job
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-module-job
Commits
955bf612
提交
955bf612
authored
2月 28, 2025
作者:
吕本才
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、增加退换货代码
2、优化调整部分代码
上级
5d9c9c8c
显示空白字符变更
内嵌
并排
正在显示
31 个修改的文件
包含
1110 行增加
和
77 行删除
+1110
-77
WangdiantongConfig.java
src/main/java/com/sfa/job/config/WangdiantongConfig.java
+16
-0
FinanceOrderDetailSyncController.java
.../controller/finance/FinanceOrderDetailSyncController.java
+15
-4
WdtRefundOrderDao.java
.../java/com/sfa/job/domain/order/dao/WdtRefundOrderDao.java
+10
-0
WdtRefundOrderDetailDao.java
...com/sfa/job/domain/order/dao/WdtRefundOrderDetailDao.java
+10
-0
WdtSwapOrderDao.java
...in/java/com/sfa/job/domain/order/dao/WdtSwapOrderDao.java
+10
-0
WdtSwapOrderDetailDao.java
...a/com/sfa/job/domain/order/dao/WdtSwapOrderDetailDao.java
+10
-0
WdtRefundOrderDaoImpl.java
.../sfa/job/domain/order/dao/impl/WdtRefundOrderDaoImpl.java
+28
-0
WdtRefundOrderDetailDaoImpl.java
...ob/domain/order/dao/impl/WdtRefundOrderDetailDaoImpl.java
+28
-0
WdtSwapOrderDaoImpl.java
...om/sfa/job/domain/order/dao/impl/WdtSwapOrderDaoImpl.java
+28
-0
WdtSwapOrderDetailDaoImpl.java
.../job/domain/order/dao/impl/WdtSwapOrderDetailDaoImpl.java
+28
-0
WdtRefundAmountDetail.java
...om/sfa/job/domain/order/entity/WdtRefundAmountDetail.java
+31
-0
WdtRefundOrder.java
.../java/com/sfa/job/domain/order/entity/WdtRefundOrder.java
+80
-0
WdtRefundOrderDetail.java
...com/sfa/job/domain/order/entity/WdtRefundOrderDetail.java
+57
-0
WdtSwapOrder.java
...in/java/com/sfa/job/domain/order/entity/WdtSwapOrder.java
+35
-0
WdtSwapOrderDetail.java
...a/com/sfa/job/domain/order/entity/WdtSwapOrderDetail.java
+31
-0
WdtRefundOrderDetailMapper.java
...a/job/domain/order/mapper/WdtRefundOrderDetailMapper.java
+15
-0
WdtRefundOrderMapper.java
...com/sfa/job/domain/order/mapper/WdtRefundOrderMapper.java
+13
-0
WdtSwapOrderDetailMapper.java
...sfa/job/domain/order/mapper/WdtSwapOrderDetailMapper.java
+15
-0
WdtSwapOrderMapper.java
...a/com/sfa/job/domain/order/mapper/WdtSwapOrderMapper.java
+13
-0
WdtOrderQueryVO.java
src/main/java/com/sfa/job/pojo/request/WdtOrderQueryVO.java
+1
-1
WdtRefundQueryVO.java
src/main/java/com/sfa/job/pojo/request/WdtRefundQueryVO.java
+14
-0
FinanceSyncRefundOrderDetailDto.java
...fa/job/pojo/response/FinanceSyncRefundOrderDetailDto.java
+32
-0
SyncOrderDetailDto.java
...in/java/com/sfa/job/pojo/response/SyncOrderDetailDto.java
+1
-1
FinanceOrderSyncService.java
...va/com/sfa/job/service/order/FinanceOrderSyncService.java
+3
-2
FinanceOrderSyncServiceImpl.java
...a/job/service/order/impl/FinanceOrderSyncServiceImpl.java
+177
-43
WangdiantongUtil.java
src/main/java/com/sfa/job/util/WangdiantongUtil.java
+28
-23
FinanceOrderTask.java
src/main/java/com/sfa/job/xxljob/order/FinanceOrderTask.java
+32
-3
WdtRefundOrderDetailMapper.xml
...ain/resources/mapper/order/WdtRefundOrderDetailMapper.xml
+107
-0
WdtRefundOrderMapper.xml
src/main/resources/mapper/order/WdtRefundOrderMapper.xml
+151
-0
WdtSwapOrderDetailMapper.xml
src/main/resources/mapper/order/WdtSwapOrderDetailMapper.xml
+45
-0
WdtSwapOrderMapper.xml
src/main/resources/mapper/order/WdtSwapOrderMapper.xml
+46
-0
没有找到文件。
src/main/java/com/sfa/job/config/WangdiantongConfig.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
config
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
@Data
@Component
@ConfigurationProperties
(
prefix
=
"wangdiantong"
)
public
class
WangdiantongConfig
{
private
String
url
;
private
String
sid
;
private
String
key
;
private
String
salt
;
private
String
appsecret
;
}
src/main/java/com/sfa/job/controller/finance/FinanceOrderDetailSyncController.java
浏览文件 @
955bf612
...
...
@@ -2,7 +2,7 @@ package com.sfa.job.controller.finance;
import
cn.hutool.core.date.DateUtil
;
import
com.sfa.common.core.web.controller.BaseController
;
import
com.sfa.job.pojo.response.
Finance
SyncOrderDetailDto
;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -24,16 +24,27 @@ public class FinanceOrderDetailSyncController extends BaseController {
@Autowired
private
FinanceOrderSyncService
syncService
;
@GetMapping
(
"/syncW
angdiantong
OrderDetail"
)
public
Finance
SyncOrderDetailDto
syncWangdiantongOrderDetail
(
Date
startTime
,
Date
endTime
)
{
@GetMapping
(
"/syncW
dt
OrderDetail"
)
public
SyncOrderDetailDto
syncWangdiantongOrderDetail
(
Date
startTime
,
Date
endTime
)
{
log
.
info
(
"接口开始同步-旺店通订单明细api接口数据"
);
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
FinanceSyncOrderDetailDto
detailDto
=
syncService
.
syncWangdiantong
Order
(
startTime
,
endTime
,
1
);
SyncOrderDetailDto
detailDto
=
syncService
.
syncWdt
Order
(
startTime
,
endTime
,
1
);
log
.
info
(
"接口结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}"
,
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
())
);
return
detailDto
;
}
@GetMapping
(
"/syncWdtRefundOrder"
)
public
SyncOrderDetailDto
syncWdtRefundOrder
(
Date
startTime
,
Date
endTime
)
{
log
.
info
(
"接口开始同步-旺店通退换订单明细api接口数据"
);
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
SyncOrderDetailDto
detailDto
=
syncService
.
syncWdtRefundOrder
(
startTime
,
endTime
,
1
);
log
.
info
(
"接口结束同步-旺店通退换订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}"
,
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
())
);
return
detailDto
;
}
}
src/main/java/com/sfa/job/domain/order/dao/WdtRefundOrderDao.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
;
import
com.sfa.job.domain.order.entity.WdtRefundOrder
;
import
java.util.List
;
public
interface
WdtRefundOrderDao
{
void
saveOrUpdateBatch
(
List
<
WdtRefundOrder
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/dao/WdtRefundOrderDetailDao.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
;
import
com.sfa.job.domain.order.entity.WdtRefundOrderDetail
;
import
java.util.List
;
public
interface
WdtRefundOrderDetailDao
{
void
saveOrUpdateBatch
(
List
<
WdtRefundOrderDetail
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/dao/WdtSwapOrderDao.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
;
import
com.sfa.job.domain.order.entity.WdtSwapOrder
;
import
java.util.List
;
public
interface
WdtSwapOrderDao
{
void
saveOrUpdateBatch
(
List
<
WdtSwapOrder
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/dao/WdtSwapOrderDetailDao.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
;
import
com.sfa.job.domain.order.entity.WdtSwapOrderDetail
;
import
java.util.List
;
public
interface
WdtSwapOrderDetailDao
{
void
saveOrUpdateBatch
(
List
<
WdtSwapOrderDetail
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/dao/impl/WdtRefundOrderDaoImpl.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
.
impl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.sfa.job.domain.order.dao.WdtRefundOrderDao
;
import
com.sfa.job.domain.order.entity.WdtRefundOrder
;
import
com.sfa.job.domain.order.mapper.WdtRefundOrderMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@DS
(
"Bi"
)
@Repository
public
class
WdtRefundOrderDaoImpl
implements
WdtRefundOrderDao
{
private
static
final
int
BATCH_SIZE
=
1000
;
@Autowired
private
WdtRefundOrderMapper
wdtRefundOrderMapper
;
@Override
public
void
saveOrUpdateBatch
(
List
<
WdtRefundOrder
>
mergeList
)
{
for
(
int
i
=
0
;
i
<
mergeList
.
size
();
i
+=
BATCH_SIZE
)
{
int
toIndex
=
Math
.
min
(
i
+
BATCH_SIZE
,
mergeList
.
size
());
List
<
WdtRefundOrder
>
batchLists
=
mergeList
.
subList
(
i
,
toIndex
);
wdtRefundOrderMapper
.
saveOrUpdateBatch
(
batchLists
);
}
}
}
src/main/java/com/sfa/job/domain/order/dao/impl/WdtRefundOrderDetailDaoImpl.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
.
impl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.sfa.job.domain.order.dao.WdtRefundOrderDetailDao
;
import
com.sfa.job.domain.order.entity.WdtRefundOrderDetail
;
import
com.sfa.job.domain.order.mapper.WdtRefundOrderDetailMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@DS
(
"Bi"
)
@Repository
public
class
WdtRefundOrderDetailDaoImpl
implements
WdtRefundOrderDetailDao
{
private
static
final
int
BATCH_SIZE
=
1000
;
@Autowired
private
WdtRefundOrderDetailMapper
wdtRefundOrderDetailMapper
;
@Override
public
void
saveOrUpdateBatch
(
List
<
WdtRefundOrderDetail
>
mergeList
)
{
for
(
int
i
=
0
;
i
<
mergeList
.
size
();
i
+=
BATCH_SIZE
)
{
int
toIndex
=
Math
.
min
(
i
+
BATCH_SIZE
,
mergeList
.
size
());
List
<
WdtRefundOrderDetail
>
batchLists
=
mergeList
.
subList
(
i
,
toIndex
);
wdtRefundOrderDetailMapper
.
saveOrUpdateBatch
(
batchLists
);
}
}
}
src/main/java/com/sfa/job/domain/order/dao/impl/WdtSwapOrderDaoImpl.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
.
impl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.sfa.job.domain.order.dao.WdtSwapOrderDao
;
import
com.sfa.job.domain.order.entity.WdtSwapOrder
;
import
com.sfa.job.domain.order.mapper.WdtSwapOrderMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@DS
(
"Bi"
)
@Repository
public
class
WdtSwapOrderDaoImpl
implements
WdtSwapOrderDao
{
private
static
final
int
BATCH_SIZE
=
1000
;
@Autowired
private
WdtSwapOrderMapper
swapOrderMapper
;
@Override
public
void
saveOrUpdateBatch
(
List
<
WdtSwapOrder
>
mergeList
)
{
for
(
int
i
=
0
;
i
<
mergeList
.
size
();
i
+=
BATCH_SIZE
)
{
int
toIndex
=
Math
.
min
(
i
+
BATCH_SIZE
,
mergeList
.
size
());
List
<
WdtSwapOrder
>
batchLists
=
mergeList
.
subList
(
i
,
toIndex
);
swapOrderMapper
.
saveOrUpdateBatch
(
batchLists
);
}
}
}
src/main/java/com/sfa/job/domain/order/dao/impl/WdtSwapOrderDetailDaoImpl.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
dao
.
impl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.sfa.job.domain.order.dao.WdtSwapOrderDetailDao
;
import
com.sfa.job.domain.order.entity.WdtSwapOrderDetail
;
import
com.sfa.job.domain.order.mapper.WdtSwapOrderDetailMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@DS
(
"Bi"
)
@Repository
public
class
WdtSwapOrderDetailDaoImpl
implements
WdtSwapOrderDetailDao
{
private
static
final
int
BATCH_SIZE
=
1000
;
@Autowired
private
WdtSwapOrderDetailMapper
swapOrderDetailMapper
;
@Override
public
void
saveOrUpdateBatch
(
List
<
WdtSwapOrderDetail
>
mergeList
)
{
for
(
int
i
=
0
;
i
<
mergeList
.
size
();
i
+=
BATCH_SIZE
)
{
int
toIndex
=
Math
.
min
(
i
+
BATCH_SIZE
,
mergeList
.
size
());
List
<
WdtSwapOrderDetail
>
batchLists
=
mergeList
.
subList
(
i
,
toIndex
);
swapOrderDetailMapper
.
saveOrUpdateBatch
(
batchLists
);
}
}
}
src/main/java/com/sfa/job/domain/order/entity/WdtRefundAmountDetail.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName
(
value
=
"wdt_refund_amount_detail"
)
public
class
WdtRefundAmountDetail
{
private
Integer
recId
;
// 金额明细记录id
private
Integer
refundId
;
// 退换单id
private
Integer
refundType
;
// 退换类型 1:货款 2:邮费 99:返现
private
Integer
isReturn
;
// 金额流向 0:商家->买家 1:买家->商家
private
BigDecimal
refundAmount
;
// 退款金额
private
BigDecimal
receiveAmount
;
// 收款金额
private
Boolean
isGuarantee
;
// 是否担保支付
private
Integer
accountId
;
// 支付账户
private
String
payAccount
;
// 买家账号(仅自有平台及线下平台返回)
private
String
accountName
;
// 买家开户人姓名
private
String
accountBank
;
// 开户银行
private
Boolean
isAuto
;
// 是否系统自动生成
private
String
remark
;
// 备注
// getters & setters
}
src/main/java/com/sfa/job/domain/order/entity/WdtRefundOrder.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName
(
value
=
"wdt_refund_order"
)
public
class
WdtRefundOrder
{
private
Integer
refundId
;
// 退换单id
private
String
srcTids
;
// 原始单号(关联的销售单平台订单号)
private
String
refundNo
;
// 退换单号
private
String
remark
;
// 备注
private
Integer
type
;
// 退换单类型 1:售前退款;2:退货;3:换货;4:退款不退货;6:保价退款
private
Integer
stockinStatus
;
// 入库状态 0:无需入库;1:待入库;2:部分入库;3:全部入库;4:终止入库
private
String
flagName
;
// 标记名称
private
BigDecimal
returnGoodsCount
;
// 退回货品数量
private
String
receiverTelno
;
// 退款订单中收件人电话(仅自有平台及线下平台返回)
private
String
receiverName
;
// 退款订单中收件人姓名(仅自有平台及线下平台返回)
private
String
modified
;
// 修改时间
private
Integer
noteCount
;
// 便签数量
private
String
shopNo
;
// 店铺编号
private
Integer
fromType
;
// 建单方式 0:API抓单;1:手工建单;2:Excel导入;3:分销商推送
private
String
created
;
// 建单时间
private
String
settleTime
;
// 结算时间
private
String
checkTime
;
// 审核时间
private
String
returnLogisticsNo
;
// 退货物流单号
private
String
tradeNoList
;
// 系统订单号列表
private
BigDecimal
guaranteeRefundAmount
;
// 平台退款金额(担保退款金额)
private
BigDecimal
returnGoodsAmount
;
// 退货金额
private
String
returnLogisticsName
;
// 物流公司名称
private
String
reasonName
;
// 退换说明
private
String
refundReason
;
// 退款原因
private
String
buyerNick
;
// 客户网名(仅自有平台及线下平台返回)
private
String
operatorName
;
// 建单者
private
BigDecimal
actualRefundAmount
;
// 实际退款金额
private
String
revertReasonName
;
// 驳回原因
private
String
returnWarehouseNo
;
// 退回仓库编号
private
BigDecimal
directRefundAmount
;
// 线下退款金额(非担保退款金额)
private
BigDecimal
receiveAmount
;
// 收款金额
private
String
customerName
;
// 客户姓名(仅自有平台及线下平台返回)
private
String
fenxiaoNickName
;
// 分销商昵称
private
Integer
status
;
// 退换单状态 10:已取消;20:待审核;30:已审核...
private
Integer
shopId
;
// 店铺id
private
Integer
tradeId
;
// 订单id
private
String
rawRefundNos
;
// 原始退换单号
private
String
payId
;
// 支付订单号
private
String
providerRefundNo
;
// 分销退换单号
private
Integer
shopPlatformId
;
// 店铺平台id
private
String
tidList
;
// 原始单号
private
Integer
subPlatformId
;
// 子平台id
private
Integer
returnWarehouseId
;
// 退回仓库id
private
Integer
platformId
;
// 平台id
private
String
wmsOwnerNo
;
// 奇门货主编号
private
Integer
warehouseType
;
// 退回仓库类型
private
Integer
badReason
;
// 拦截原因
private
String
modifiedDate
;
// 最后修改时间
private
String
returnMaskInfo
;
// 退换信息
private
Integer
processStatus
;
// 处理状态
private
Integer
reasonId
;
// 退款原因id
private
Integer
revertReason
;
// 驳回原因id
private
Integer
customerId
;
// 客户id
private
Integer
consignMode
;
// 发货方式
private
String
refundTime
;
// 退款创建时间
private
String
fenxiaoTid
;
// 分销原始单号
private
String
fenxiaoNickNo
;
// 分销商编码
private
String
wmsCode
;
// wms单号
private
Integer
rrStatus
;
// 平台状态
private
String
currentPhaseTimeout
;
// 退款成功时间
private
List
<
WdtRefundOrderDetail
>
detailList
;
// 退换单详情
private
List
<
WdtRefundAmountDetail
>
amountDetailList
;
// 金额明细
private
WdtSwapOrder
swapOrder
;
// 换出订单
}
src/main/java/com/sfa/job/domain/order/entity/WdtRefundOrderDetail.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* 退换货订单明细数据
* @author lvbencai
* @date 2025-02-28 12:26:23
*/
@Data
@TableName
(
value
=
"wdt_refund_order_detail"
)
public
class
WdtRefundOrderDetail
{
private
Integer
recId
;
// 退换单明细Id
private
Integer
refundId
;
// 退换单id
private
String
oid
;
// 原始子单号
private
Integer
tradeOrderId
;
// 订单明细id
private
Integer
platformId
;
// 平台id
private
String
tid
;
// 原始单号
private
String
tradeNo
;
// 系统订单编号
private
BigDecimal
num
;
// 数量
private
BigDecimal
price
;
// 价格
private
BigDecimal
originalPrice
;
// 原价
private
BigDecimal
checkedCostPrice
;
// 成本价
private
BigDecimal
refundNum
;
// 退款数量
private
BigDecimal
totalAmount
;
// 退款总额
private
BigDecimal
refundAmount
;
// 已退款金额
private
Boolean
isGuarantee
;
// 是否担保退款
private
String
goodsNo
;
// 货品编号
private
String
goodsName
;
// 货品名称
private
String
specName
;
// 规格名
private
String
specNo
;
// 商家编码
private
String
goodsId
;
// 平台货品id
private
String
specId
;
// 平台规格id
private
Integer
sysGoodsId
;
// 系统货品id
private
Integer
sysSpecId
;
// 系统规格id
private
String
specCode
;
// 规格码
private
String
barcode
;
// 条码
private
BigDecimal
stockinNum
;
// 入库数量
private
String
remark
;
// 备注
private
String
apiSpecName
;
// 平台规格名称
private
String
apiGoodsName
;
// 平台货品名称
private
String
modified
;
// 最后修改时间
private
String
suiteNo
;
// 组合装编号
private
String
suiteName
;
// 组合装名称
private
String
rawRefundNos
;
// 原始退款单号
private
String
rawRefundNo
;
// 原始退款单号
private
Integer
salesTradeId
;
// 订单id
private
BigDecimal
discount
;
// 总折扣金额
private
BigDecimal
paid
;
// 已支付金额
private
Integer
suiteId
;
// 组合装id
private
BigDecimal
suiteNum
;
// 组合装数量
private
String
created
;
// 创建时间
private
String
modifiedDate
;
// 最后修改时间
private
Integer
giftType
;
// 赠品类型
}
src/main/java/com/sfa/job/domain/order/entity/WdtSwapOrder.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName
(
value
=
"wdt_swap_order"
)
public
class
WdtSwapOrder
{
private
String
tid
;
// 换出订单原始单号
private
String
shopNo
;
// 店铺编号
private
String
shopName
;
// 店铺名称
private
String
warehouseNo
;
// 仓库名称
private
Integer
shopId
;
// 店铺id
private
Integer
warehouseId
;
// 仓库id
private
Integer
swapProvince
;
// 省份id
private
Integer
swapCity
;
// 城市id
private
String
swapArea
;
// 地区
private
Integer
swapDistrict
;
// 地区id
private
Integer
swapLogisticsId
;
// 换货新订单物流公司id
private
BigDecimal
postAmount
;
// 换货邮费
private
BigDecimal
otherAmount
;
// 其他金额
private
List
<
WdtSwapOrderDetail
>
swapOrderDetailList
;
// 换出订单明细
// getters & setters
}
src/main/java/com/sfa/job/domain/order/entity/WdtSwapOrderDetail.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* 退换货订单数据
* @author lvbencai
* @date 2025-02-28 12:26:29
*/
@Data
@TableName
(
value
=
"wdt_swap_order_detail"
)
public
class
WdtSwapOrderDetail
{
private
String
oid
;
// 原始子单号
private
Byte
targetType
;
// 货品类型(1 单品,2 组合装)
private
Integer
targetId
;
// 换出货品id
private
Boolean
defect
;
// 是否残次品
private
String
goodsName
;
// 货品名称
private
String
goodsNo
;
// 货品编号
private
String
specName
;
// 规格名称
private
String
specCode
;
// 规格码
private
String
merchantNo
;
// 商家编码
private
BigDecimal
price
;
// 零售价
private
BigDecimal
totalAmount
;
// 总价
private
BigDecimal
num
;
// 数量
private
String
remark
;
// 备注
// getters & setters
}
src/main/java/com/sfa/job/domain/order/mapper/WdtRefundOrderDetailMapper.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.sfa.job.domain.order.entity.WdtRefundOrderDetail
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
@Mapper
public
interface
WdtRefundOrderDetailMapper
extends
BaseMapper
<
WdtRefundOrderDetail
>
{
void
saveOrUpdateBatch
(
@Param
(
value
=
"list"
)
List
<
WdtRefundOrderDetail
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/mapper/WdtRefundOrderMapper.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.sfa.job.domain.order.entity.WdtRefundOrder
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
@Mapper
public
interface
WdtRefundOrderMapper
extends
BaseMapper
<
WdtRefundOrder
>
{
void
saveOrUpdateBatch
(
List
<
WdtRefundOrder
>
batchLists
);
}
src/main/java/com/sfa/job/domain/order/mapper/WdtSwapOrderDetailMapper.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.sfa.job.domain.order.entity.WdtSwapOrderDetail
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
@Mapper
public
interface
WdtSwapOrderDetailMapper
extends
BaseMapper
<
WdtSwapOrderDetail
>
{
void
saveOrUpdateBatch
(
@Param
(
value
=
"list"
)
List
<
WdtSwapOrderDetail
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/mapper/WdtSwapOrderMapper.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
domain
.
order
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.sfa.job.domain.order.entity.WdtSwapOrder
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
@Mapper
public
interface
WdtSwapOrderMapper
extends
BaseMapper
<
WdtSwapOrder
>
{
void
saveOrUpdateBatch
(
List
<
WdtSwapOrder
>
batchLists
);
}
src/main/java/com/sfa/job/pojo/request/W
angdiantong
QueryVO.java
→
src/main/java/com/sfa/job/pojo/request/W
dtOrder
QueryVO.java
浏览文件 @
955bf612
...
...
@@ -8,7 +8,7 @@ import lombok.Data;
* @Description: 旺店通查询订单请求参数,可以按照旺店通的来定义
*/
@Data
public
class
W
angdiantong
QueryVO
{
public
class
W
dtOrder
QueryVO
{
private
String
start_time
;
private
String
end_time
;
}
src/main/java/com/sfa/job/pojo/request/WdtRefundQueryVO.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
pojo
.
request
;
import
lombok.Data
;
/**
* @author lvbencai
* @date 2025-01-22 21:15:39
* @Description: 旺店通查询订单请求参数,可以按照旺店通的来定义
*/
@Data
public
class
WdtRefundQueryVO
{
private
String
settle_from
;
private
String
settle_to
;
}
src/main/java/com/sfa/job/pojo/response/FinanceSyncRefundOrderDetailDto.java
0 → 100644
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
pojo
.
response
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
/**
* 财务同步旺店通接口-返回数据Dto
*/
@Data
public
class
FinanceSyncRefundOrderDetailDto
{
/**
* 订单数量
*/
private
Integer
orderCount
;
private
Integer
orderDetailCount
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
startTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
endTime
;
private
Integer
syncType
;
private
String
batchNo
;
private
Integer
pageNo
;
private
Integer
totalCount
;
/**
* 错误信息
*/
private
String
message
;
private
Integer
code
=
200
;
}
src/main/java/com/sfa/job/pojo/response/
Finance
SyncOrderDetailDto.java
→
src/main/java/com/sfa/job/pojo/response/SyncOrderDetailDto.java
浏览文件 @
955bf612
...
...
@@ -9,7 +9,7 @@ import java.util.Date;
* 财务同步旺店通接口-返回数据Dto
*/
@Data
public
class
Finance
SyncOrderDetailDto
{
public
class
SyncOrderDetailDto
{
/**
* 订单数量
*/
...
...
src/main/java/com/sfa/job/service/order/FinanceOrderSyncService.java
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
service
.
order
;
import
com.sfa.job.pojo.response.
Finance
SyncOrderDetailDto
;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
java.util.Date
;
public
interface
FinanceOrderSyncService
{
FinanceSyncOrderDetailDto
syncWangdiantong
Order
(
Date
startTime
,
Date
endTime
,
Integer
syncType
);
SyncOrderDetailDto
syncWdt
Order
(
Date
startTime
,
Date
endTime
,
Integer
syncType
);
SyncOrderDetailDto
syncWdtRefundOrder
(
Date
startTime
,
Date
endTime
,
Integer
syncType
);
}
src/main/java/com/sfa/job/service/order/impl/FinanceOrderSyncServiceImpl.java
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
service
.
order
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.http.HttpStatus
;
...
...
@@ -11,9 +12,10 @@ 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.entity.*
;
import
com.sfa.job.pojo.request.WangdiantongQueryVO
;
import
com.sfa.job.pojo.request.WdtOrderQueryVO
;
import
com.sfa.job.pojo.request.WdtRefundQueryVO
;
import
com.sfa.job.pojo.response.CollectOrderLogDto
;
import
com.sfa.job.pojo.response.
Finance
SyncOrderDetailDto
;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
com.sfa.job.pojo.response.WangdiantongQueryDto
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
com.sfa.job.util.WangdiantongUtil
;
...
...
@@ -45,6 +47,10 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
@Autowired
FinanceOrderDao
orderDao
;
@Autowired
WdtRefundOrderDao
wdtRefundOrderDao
;
@Autowired
WdtRefundOrderDetailDao
wdtRefundOrderDetailDao
;
@Autowired
FinianceBaseProductDao
baseProductDao
;
@Autowired
FinanceBaseZbjTypeDao
baseZbjTypeDao
;
...
...
@@ -63,41 +69,22 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
FinanceSyncOrderDetailDto
syncWangdiantong
Order
(
Date
startTime
,
Date
endTime
,
Integer
syncType
)
{
FinanceSyncOrderDetailDto
detailDto
=
new
Finance
SyncOrderDetailDto
();
public
SyncOrderDetailDto
syncWdt
Order
(
Date
startTime
,
Date
endTime
,
Integer
syncType
)
{
SyncOrderDetailDto
detailDto
=
new
SyncOrderDetailDto
();
String
batchNo
=
syncType
+
DateUtils
.
dateTimeNow
()
+
Thread
.
currentThread
().
getId
();
AtomicInteger
beginPageNo
=
new
AtomicInteger
(
0
);
// 继续下一页的标识 pageNo =-1 标识终止分页 pageNo >0 标识继续分页
Boolean
nextPageFlag
=
true
;
try
{
// startTime 为空,默认是定时任务调用
if
(
ObjectUtils
.
isEmpty
(
startTime
))
{
Date
latestTime
=
null
;
// 查询最新的采集时间
CollectOrderLogDto
collectOrderLog
=
orderLogInfoDao
.
selectOrderSyncLatest
(
syncType
);
if
(
ObjectUtils
.
isNotEmpty
(
collectOrderLog
))
{
latestTime
=
collectOrderLog
.
getLatestTime
();
Integer
pageNoExist
=
collectOrderLog
.
getPageNo
();
beginPageNo
.
set
(
ObjectUtil
.
isNotEmpty
(
pageNoExist
)
&&
pageNoExist
>
0
?
collectOrderLog
.
getPageNo
()
:
0
);
nextPageFlag
=
beginPageNo
.
get
()
>
0
;
}
else
{
// 默认上个月的第一天 00:00:00
startTime
=
DateUtil
.
beginOfDay
(
DateUtil
.
beginOfMonth
(
DateUtil
.
lastMonth
()));
}
if
(
nextPageFlag
)
{
startTime
=
DateUtils
.
addMinutes
(
latestTime
,
-
60
);
}
else
{
// 调用查询旺店通接口api 获取最新日期前的一个小时
startTime
=
DateUtils
.
addMinutes
(
latestTime
,
-
3
);
}
try
{
// 调用新方法设置时间范围
Date
[]
startTimeArray
=
{
startTime
};
Date
[]
endTimeArray
=
{
endTime
};
setupTimeRange
(
startTimeArray
,
endTimeArray
,
syncType
,
beginPageNo
);
startTime
=
startTimeArray
[
0
];
endTime
=
endTimeArray
[
0
];
}
if
(
ObjectUtils
.
isEmpty
(
endTime
))
{
endTime
=
DateUtils
.
addMinutes
(
startTime
,
60
);
}
// 调用查询旺店通接口api 获取最新日期前的2小时
Date
currentLatest
=
DateUtils
.
addHours
(
new
Date
(),
-
2
);
if
(
currentLatest
.
compareTo
(
startTime
)
<
0
)
{
detailDto
.
setTotalCount
(
0
);
detailDto
.
setBatchNo
(
batchNo
);
...
...
@@ -107,16 +94,21 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
log
.
warn
(
String
.
format
(
"开始时间%s不能大于当前时间%s"
,
DateUtil
.
formatDateTime
(
startTime
),
DateUtil
.
formatDateTime
(
currentLatest
)));
return
detailDto
;
}
if
(!
validateStartTime
(
startTime
,
endTime
,
batchNo
))
{
return
detailDto
;
}
log
.
info
(
"查询订单参数:开始时间{},结束时间{},当前页:{}"
,
DateUtil
.
formatDateTime
(
startTime
),
DateUtil
.
formatDateTime
(
endTime
),
beginPageNo
.
get
());
WangdiantongQueryVO
wangdiantongQueryVO
=
new
WangdiantongQueryVO
();
wangdiantongQueryVO
.
setStart_time
(
com
.
alibaba
.
fastjson2
.
util
.
DateUtils
.
format
(
startTime
));
wangdiantongQueryVO
.
setEnd_time
(
com
.
alibaba
.
fastjson2
.
util
.
DateUtils
.
format
(
endTime
));
WdtOrderQueryVO
wdtOrderQueryVO
=
new
WdtOrderQueryVO
();
wdtOrderQueryVO
.
setStart_time
(
com
.
alibaba
.
fastjson2
.
util
.
DateUtils
.
format
(
startTime
));
wdtOrderQueryVO
.
setEnd_time
(
com
.
alibaba
.
fastjson2
.
util
.
DateUtils
.
format
(
endTime
));
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
Map
<
String
,
Object
>
stringObjectMap
=
BeanUtil
.
beanToMap
(
wdtOrderQueryVO
);
params
.
putAll
(
stringObjectMap
);
// 旺店通入参 和其他入参分开传入 旺店通入参bean转map
WangdiantongQueryDto
wangdiantongQueryDto
=
wangdiantongUtil
.
queryWithDetail
(
wangdiantongQueryVO
,
beginPageNo
);
String
method
=
"sales.TradeQuery.queryWithDetail"
;
WangdiantongQueryDto
wangdiantongQueryDto
=
wangdiantongUtil
.
queryWithDetail
(
params
,
beginPageNo
,
method
);
JSONArray
orderAllArray
=
wangdiantongQueryDto
.
getResult
();
if
(
ObjectUtils
.
isEmpty
(
orderAllArray
))
{
throw
new
ServiceException
(
"旺店通没有查询到订单数据"
);
...
...
@@ -150,7 +142,7 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
List
<
FinanceOrderDetail
>
mergeList
=
new
ArrayList
<>();
// 用于同一个订单号,来赋值直播间信息
Map
<
String
,
FinanceOrderDetail
>
orderZbj
=
new
HashMap
<>();
Map
<
String
,
FinanceOrderDetail
>
orderZbj
Map
=
new
HashMap
<>();
// 入库订单明细表
for
(
FinanceOrder
order
:
orders
)
{
List
<
FinanceOrderDetail
>
orderDetails
=
order
.
getDetailList
();
...
...
@@ -174,7 +166,7 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
orderDetail
.
setEndTime
(
finalEndTime
);
orderDetail
.
setSyncType
(
syncType
);
// 如果存在相同的
FinanceOrderDetail
sameDetail
=
orderZbj
.
get
(
orderDetail
.
getSrcTid
());
FinanceOrderDetail
sameDetail
=
orderZbj
Map
.
get
(
orderDetail
.
getSrcTid
());
orderDetail
.
setZbjName
(
orderDetail
.
getFenxiaoName
(),
orderDetail
.
getRemark
(),
sameDetail
);
orderDetail
.
setZbjId
(
orderDetail
.
getRemark
(),
sameDetail
);
...
...
@@ -182,11 +174,20 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
orderDetail
.
setZbjSaleType
(
orderDetail
.
getRemark
(),
sameDetail
);
// 确定分销商类型
orderDetail
.
setZbjQdType
(
orderDetail
.
getFenxiaoId
(),
orderDetail
.
getZbjZbId
(),
baseZbjType
);
// 同一个订单id的,设置直播间类型信息也相同
if
(
ObjectUtils
.
isNotEmpty
(
orderDetail
.
getZbjName
()))
{
orderZbj
.
put
(
orderDetail
.
getSrcTid
(),
orderDetail
);
orderZbj
Map
.
put
(
orderDetail
.
getSrcTid
(),
orderDetail
);
}
orderDetail
.
setFlavorErp
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getFlavor
()
:
""
);
orderDetail
.
setSpecNameErp
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getSpec
()
:
""
);
// 将退款成功的数据分摊后总价置为0 2025年02月06日16:25:30
if
(
ObjectUtils
.
isNotEmpty
(
orderDetail
.
getRefundStatus
())
&&
orderDetail
.
getRefundStatus
().
equals
(
5
))
{
orderDetail
.
setShareAmount
(
new
BigDecimal
(
0
));
orderDetail
.
setActualCost
(
new
BigDecimal
(
0
));
orderDetail
.
setStandardCost
(
new
BigDecimal
(
0
));
orderDetail
.
setSumActualCost
(
new
BigDecimal
(
0
));
orderDetail
.
setSumStandardCost
(
new
BigDecimal
(
0
));
}
else
{
orderDetail
.
setActualCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getActualCost
()
:
new
BigDecimal
(
0
)
...
...
@@ -197,9 +198,7 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
);
orderDetail
.
setSumActualCost
(
orderDetail
.
getActualCost
().
multiply
(
orderDetail
.
getNum
()));
orderDetail
.
setSumStandardCost
(
orderDetail
.
getStandardCost
().
multiply
(
orderDetail
.
getNum
()));
// 将退款成功的数据分摊后总价置为0 2025年02月06日16:25:30
if
(
ObjectUtils
.
isNotEmpty
(
orderDetail
.
getRefundStatus
())
&&
orderDetail
.
getRefundStatus
().
equals
(
5
))
{
orderDetail
.
setShareAmount
(
new
BigDecimal
(
0
));
}
}
mergeList
.
addAll
(
orderDetails
);
...
...
@@ -248,4 +247,139 @@ public class FinanceOrderSyncServiceImpl implements FinanceOrderSyncService {
return
detailDto
;
}
/**
* 同步退换货数据
* @param startTime
* @param endTime
* @param syncType
* @return
*/
@Override
public
SyncOrderDetailDto
syncWdtRefundOrder
(
Date
startTime
,
Date
endTime
,
Integer
syncType
)
{
SyncOrderDetailDto
detailDto
=
new
SyncOrderDetailDto
();
String
batchNo
=
syncType
+
DateUtils
.
dateTimeNow
()
+
Thread
.
currentThread
().
getId
();
AtomicInteger
beginPageNo
=
new
AtomicInteger
(
0
);
try
{
// 调用新方法设置时间范围
Date
[]
startTimeArray
=
{
startTime
};
Date
[]
endTimeArray
=
{
endTime
};
setupTimeRange
(
startTimeArray
,
endTimeArray
,
syncType
,
beginPageNo
);
startTime
=
startTimeArray
[
0
];
endTime
=
endTimeArray
[
0
];
if
(!
validateStartTime
(
startTime
,
endTime
,
batchNo
))
{
return
detailDto
;
}
log
.
info
(
"查询订单参数:开始时间{},结束时间{},当前页:{}"
,
DateUtil
.
formatDateTime
(
startTime
),
DateUtil
.
formatDateTime
(
endTime
),
beginPageNo
.
get
());
// 旺店通入参 和其他入参分开传入 旺店通入参bean转map
WdtRefundQueryVO
wdtOrderQueryVO
=
new
WdtRefundQueryVO
();
wdtOrderQueryVO
.
setSettle_from
(
com
.
alibaba
.
fastjson2
.
util
.
DateUtils
.
format
(
startTime
));
wdtOrderQueryVO
.
setSettle_to
(
com
.
alibaba
.
fastjson2
.
util
.
DateUtils
.
format
(
endTime
));
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
Map
<
String
,
Object
>
stringObjectMap
=
BeanUtil
.
beanToMap
(
wdtOrderQueryVO
);
params
.
putAll
(
stringObjectMap
);
// https://open.wangdian.cn/qjb/open/apidoc/doc?path=aftersales.refund.Refund.search 1.4 时间跨度:请求时间最大跨度为30天。
// 退换单查询
String
method
=
"aftersales.refund.Refund.search"
;
WangdiantongQueryDto
wangdiantongQueryDto
=
wangdiantongUtil
.
queryWithDetail
(
params
,
beginPageNo
,
method
);
JSONArray
orderAllArray
=
wangdiantongQueryDto
.
getResult
();
if
(
ObjectUtils
.
isEmpty
(
orderAllArray
))
{
throw
new
ServiceException
(
"旺店通没有查询到订单数据"
);
}
// 保存数据
List
<
WdtRefundOrder
>
orders
=
JSONArray
.
parseArray
(
orderAllArray
.
toString
(),
WdtRefundOrder
.
class
,
JSONReader
.
Feature
.
SupportSmartMatch
);
wdtRefundOrderDao
.
saveOrUpdateBatch
(
orders
);
List
<
WdtRefundOrderDetail
>
mergeList
=
new
ArrayList
<>();
orders
.
forEach
(
order
->
{
mergeList
.
addAll
(
order
.
getDetailList
());
});
wdtRefundOrderDetailDao
.
saveOrUpdateBatch
(
mergeList
);
log
.
info
(
"插入订单和订单详情完成,批次{}开始时间{},结束时间{},订单数量:{},详情数量:{},下一次开始页数:{}"
,
batchNo
,
DateUtil
.
formatDateTime
(
startTime
),
DateUtil
.
formatDateTime
(
endTime
),
orders
.
size
(),
mergeList
.
size
(),
beginPageNo
.
get
());
CollectOrderLog
collectOrderLog
=
new
CollectOrderLog
();
collectOrderLog
.
setSyncType
(
syncType
);
collectOrderLog
.
setOrderCount
(
orders
.
size
());
collectOrderLog
.
setOrderDetailCount
(
mergeList
.
size
());
collectOrderLog
.
setBatchNo
(
batchNo
);
collectOrderLog
.
setLatestTime
(
endTime
);
collectOrderLog
.
setPageNo
(
beginPageNo
.
get
());
collectOrderLog
.
setTotalCount
(
wangdiantongQueryDto
.
getTotalCount
());
orderLogInfoDao
.
insert
(
collectOrderLog
);
// 接口测试使用
detailDto
.
setOrderCount
(
orders
.
size
());
detailDto
.
setOrderDetailCount
(
mergeList
.
size
());
detailDto
.
setStartTime
(
startTime
);
detailDto
.
setPageNo
(
beginPageNo
.
get
());
detailDto
.
setEndTime
(
endTime
);
detailDto
.
setTotalCount
(
wangdiantongQueryDto
.
getTotalCount
());
detailDto
.
setBatchNo
(
batchNo
);
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
(),
e
);
// 记录错误日志表 collect_error_info
CollectErrorLog
errorInfo
=
new
CollectErrorLog
();
errorInfo
.
setBatchNo
(
batchNo
);
errorInfo
.
setType
(
Constants
.
SYNC_TYPE_XXL_JOB
);
errorInfo
.
setErrorMsg
(
e
.
getMessage
());
errorInfo
.
setEndTime
(
endTime
);
errorInfo
.
setStartTime
(
startTime
);
errorInfo
.
setCollectTime
(
new
Date
());
errorInfoDao
.
insert
(
errorInfo
);
detailDto
.
setCode
(
HttpStatus
.
HTTP_INTERNAL_ERROR
);
detailDto
.
setMessage
(
e
.
toString
());
}
finally
{
}
return
null
;
}
private
void
setupTimeRange
(
Date
[]
startTime
,
Date
[]
endTime
,
Integer
syncType
,
AtomicInteger
beginPageNo
)
{
// startTime 为空,默认是定时任务调用
if
(
ObjectUtils
.
isEmpty
(
startTime
[
0
]))
{
// 继续下一页的标识 pageNo =-1 标识终止分页 pageNo >0 标识继续分页
boolean
nextPageFlag
=
true
;
Date
latestTime
=
null
;
// 查询最新的采集时间
CollectOrderLogDto
collectOrderLog
=
orderLogInfoDao
.
selectOrderSyncLatest
(
syncType
);
if
(
ObjectUtils
.
isNotEmpty
(
collectOrderLog
))
{
latestTime
=
collectOrderLog
.
getLatestTime
();
Integer
pageNoExist
=
collectOrderLog
.
getPageNo
();
beginPageNo
.
set
(
ObjectUtil
.
isNotEmpty
(
pageNoExist
)
&&
pageNoExist
>
0
?
collectOrderLog
.
getPageNo
()
:
0
);
nextPageFlag
=
beginPageNo
.
get
()
>
0
;
}
else
{
// 默认上个月的第一天 00:00:00
startTime
[
0
]
=
DateUtil
.
beginOfDay
(
DateUtil
.
beginOfMonth
(
DateUtil
.
lastMonth
()));
}
if
(
nextPageFlag
)
{
startTime
[
0
]
=
DateUtils
.
addMinutes
(
latestTime
,
-
60
);
}
else
{
// 调用查询旺店通接口api 获取最新日期前的一个小时
startTime
[
0
]
=
DateUtils
.
addMinutes
(
latestTime
,
-
3
);
}
}
if
(
ObjectUtils
.
isEmpty
(
endTime
[
0
]))
{
endTime
[
0
]
=
DateUtils
.
addMinutes
(
startTime
[
0
],
60
);
}
}
private
boolean
validateStartTime
(
Date
startTime
,
Date
endTime
,
String
batchNo
)
{
Date
currentLatest
=
DateUtils
.
addHours
(
new
Date
(),
-
2
);
if
(
currentLatest
.
compareTo
(
startTime
)
<
0
)
{
SyncOrderDetailDto
detailDto
=
new
SyncOrderDetailDto
();
detailDto
.
setTotalCount
(
0
);
detailDto
.
setBatchNo
(
batchNo
);
detailDto
.
setStartTime
(
startTime
);
detailDto
.
setEndTime
(
endTime
);
String
message
=
String
.
format
(
"开始时间%s不能大于当前时间%s"
,
DateUtil
.
formatDateTime
(
startTime
),
DateUtil
.
formatDateTime
(
currentLatest
));
detailDto
.
setMessage
(
message
);
log
.
warn
(
message
);
return
false
;
}
return
true
;
}
}
src/main/java/com/sfa/job/util/WangdiantongUtil.java
浏览文件 @
955bf612
package
com
.
sfa
.
job
.
util
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.lark.oapi.okhttp.*
;
import
com.sfa.common.core.exception.ServiceException
;
import
com.sfa.job.
pojo.request.WangdiantongQueryVO
;
import
com.sfa.job.
config.WangdiantongConfig
;
import
com.sfa.job.pojo.response.WangdiantongQueryDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.DigestUtils
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.atomic.AtomicInteger
;
@Slf4j
@Component
public
class
WangdiantongUtil
{
// @Value("${wangdiantong.url}")
// private String url;
// @Value("${wangdiantong.sid}")
// private String sid ;
// @Value("${wangdiantong.key}")
// private String key ;
// @Value("${wangdiantong.salt}")
// private String salt ;
// @Value("${wangdiantong.appsecret}")
// private String appsecret;
private
final
WangdiantongConfig
wangdiantongConfig
;
@Autowired
public
WangdiantongUtil
(
WangdiantongConfig
wangdiantongConfig
)
{
this
.
wangdiantongConfig
=
wangdiantongConfig
;
}
/**
* 卖家账号/接口账号/盐/接口名称
*/
public
WangdiantongQueryDto
queryWithDetail
(
WangdiantongQueryVO
wangdiantongQuery
,
AtomicInteger
beginPageNo
)
{
public
WangdiantongQueryDto
queryWithDetail
(
HashMap
<
String
,
Object
>
params
,
AtomicInteger
beginPageNo
,
String
method
)
{
WangdiantongQueryDto
wangdiantongQueryDto
=
new
WangdiantongQueryDto
();
JSONArray
allArray
=
new
JSONArray
();
Integer
totalCount
=
0
;
...
...
@@ -35,27 +51,16 @@ public class WangdiantongUtil {
int
size
=
0
;
int
pageNo
=
beginPageNo
.
get
();
// 出现了查询的分页数量不足的情况
int
maxPage
=
0
;
do
{
String
url
=
"http://wdt.wangdian.cn/openapi"
;
String
sid
=
"wxl3"
;
String
key
=
"wxl3-ota"
;
String
salt
=
"78784988049166748bfdc83273ebb990"
;
String
appsecret
=
"c65bd645bbed704bb7982037f9b948e3"
;
String
method
=
"sales.TradeQuery.queryWithDetail"
;
// 使用配置类中的属性
String
url
=
wangdiantongConfig
.
getUrl
()
;
String
sid
=
wangdiantongConfig
.
getSid
()
;
String
key
=
wangdiantongConfig
.
getKey
()
;
String
salt
=
wangdiantongConfig
.
getSalt
()
;
String
appsecret
=
wangdiantongConfig
.
getAppsecret
()
;
String
v
=
"1.0"
;
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
// params.put("start_time", wangdiantongQuery.getStart_time());
// params.put("end_time", wangdiantongQuery.getEnd_time());
// bean 转map
Map
<
String
,
Object
>
stringObjectMap
=
BeanUtil
.
beanToMap
(
wangdiantongQuery
);
params
.
putAll
(
stringObjectMap
);
List
<
HashMap
<
String
,
Object
>>
paramsList
=
Arrays
.
asList
(
params
);
String
signParams
=
appsecret
+
"body"
+
JSONObject
.
toJSONString
(
paramsList
)
+
"calc_total1"
+
"key"
+
key
+
"method"
+
method
+
"page_no"
+
pageNo
+
"page_size200"
+
"salt"
+
salt
+
"sid"
+
sid
+
"timestamp"
+
(
System
.
currentTimeMillis
()
/
1000
-
1325347200
)
+
"v"
+
v
+
appsecret
;
...
...
@@ -89,13 +94,13 @@ public class WangdiantongUtil {
throw
new
ServiceException
(
"访问旺店通接口错误"
+
messageJson
.
toString
());
}
totalCount
=
dataR
.
getInteger
(
"total_count"
);
maxPage
=
(
totalCount
+
199
)/
200
;
maxPage
=
(
totalCount
+
199
)
/
200
;
JSONArray
orderJsonArray
=
dataR
.
getJSONArray
(
"order"
);
allArray
.
addAll
(
orderJsonArray
);
size
=
allArray
.
size
();
log
.
info
(
"当前
时间段{}-{},查询返回的order条数:{},总条数totalCount:{},page_no:{}"
,
wangdiantongQuery
.
getStart_time
(),
wangdiantongQuery
.
getEnd_time
(
),
orderJsonArray
.
size
(),
totalCount
,
pageNo
);
log
.
info
(
"当前
入参{},查询返回的order条数:{},总条数totalCount:{},page_no:{}"
,
JSONObject
.
toJSONString
(
params
),
orderJsonArray
.
size
(),
totalCount
,
pageNo
);
// 计算下一次分页的页码
pageNo
++;
}
while
(
size
<
maxDealCount
&&
pageNo
<=
maxPage
);
...
...
src/main/java/com/sfa/job/xxljob/order/FinanceOrderTask.java
浏览文件 @
955bf612
...
...
@@ -4,7 +4,7 @@ import cn.hutool.core.date.DateUtil;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.http.HttpStatus
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.job.pojo.response.
Finance
SyncOrderDetailDto
;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
com.xxl.job.core.context.XxlJobContext
;
import
com.xxl.job.core.context.XxlJobHelper
;
...
...
@@ -29,7 +29,7 @@ public class FinanceOrderTask {
* 同步部门数据
*/
@XxlJob
(
"syncWangdiantongOrderDetail"
)
public
Finance
SyncOrderDetailDto
syncWangdiantongOrderDetail
()
{
public
SyncOrderDetailDto
syncWangdiantongOrderDetail
()
{
Long
st
=
System
.
currentTimeMillis
();
// 暂不考虑分片
XxlJobContext
xxlJobContext
=
XxlJobContext
.
getXxlJobContext
();
...
...
@@ -42,7 +42,7 @@ public class FinanceOrderTask {
XxlJobHelper
.
log
(
"xxl-job开始同步-旺店通订单明细api接口数据"
);
// 定时任务不设定开始时间和结束时间
FinanceSyncOrderDetailDto
detailDto
=
financeOrderSyncService
.
syncWangdiantong
Order
(
null
,
null
,
0
);
SyncOrderDetailDto
detailDto
=
financeOrderSyncService
.
syncWdt
Order
(
null
,
null
,
0
);
XxlJobHelper
.
log
(
"xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}"
,
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
())
);
...
...
@@ -53,5 +53,34 @@ public class FinanceOrderTask {
}
return
detailDto
;
}
/**
* 同步部门数据
*/
@XxlJob
(
"syncWdtRefundOrder"
)
public
SyncOrderDetailDto
syncWdtRefundOrder
()
{
Long
startTime
=
System
.
currentTimeMillis
();
// 暂不考虑分片
XxlJobContext
xxlJobContext
=
XxlJobContext
.
getXxlJobContext
();
int
shardingTotalCount
=
xxlJobContext
.
getShardTotal
();
int
shardingItem
=
xxlJobContext
.
getShardIndex
();
XxlJobHelper
.
log
(
">>>>>>>>>>syncWangdiantongOrderDetail Job start<<<<<<<<<<"
);
// 简单模拟分片处理,这里输出每个分片的信息
XxlJobHelper
.
log
(
"分片总数: "
+
shardingTotalCount
+
", 当前分片: "
+
shardingItem
);
XxlJobHelper
.
log
(
"xxl-job开始同步-旺店通订单明细api接口数据"
);
// 定时任务不设定开始时间和结束时间
SyncOrderDetailDto
detailDto
=
financeOrderSyncService
.
syncWdtRefundOrder
(
null
,
null
,
0
);
Long
endTime
=
System
.
currentTimeMillis
();
XxlJobHelper
.
log
(
"xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{},时长:{}"
,
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
()),
endTime
-
startTime
);
if
(
ObjectUtil
.
equals
(
HttpStatus
.
HTTP_OK
,
detailDto
.
getCode
())
){
XxlJobHelper
.
handleSuccess
(
JSONObject
.
toJSONString
(
detailDto
));
}
else
{
XxlJobHelper
.
handleFail
(
detailDto
.
getMessage
());
}
return
detailDto
;
}
}
src/main/resources/mapper/order/WdtRefundOrderDetailMapper.xml
0 → 100644
浏览文件 @
955bf612
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.sfa.job.domain.order.mapper.WdtRefundOrderDetailMapper"
>
<insert
id=
"saveOrUpdateBatch"
parameterType=
"java.util.List"
>
INSERT INTO wdt_refund_order_detail (
rec_id, refund_id, oid, trade_order_id, platform_id, tid, trade_no,
num, price, original_price, checked_cost_price, refund_num, total_amount,
refund_amount, is_guarantee, goods_no, goods_name, spec_name, spec_no,
goods_id, spec_id, sys_goods_id, sys_spec_id, spec_code, barcode,
stockin_num, remark, api_spec_name, api_goods_name, modified, suite_no,
suite_name, raw_refund_nos, raw_refund_no, sales_trade_id, discount, paid,
suite_id, suite_num, created, modified_date, gift_type
)
VALUES
<foreach
collection=
"list"
item=
"item"
separator=
","
>
(
#{item.recId},
#{item.refundId},
#{item.oid},
#{item.tradeOrderId},
#{item.platformId},
#{item.tid},
#{item.tradeNo},
#{item.num},
#{item.price},
#{item.originalPrice},
#{item.checkedCostPrice},
#{item.refundNum},
#{item.totalAmount},
#{item.refundAmount},
#{item.isGuarantee},
#{item.goodsNo},
#{item.goodsName},
#{item.specName},
#{item.specNo},
#{item.goodsId},
#{item.specId},
#{item.sysGoodsId},
#{item.sysSpecId},
#{item.specCode},
#{item.barcode},
#{item.stockinNum},
#{item.remark},
#{item.apiSpecName},
#{item.apiGoodsName},
#{item.modified},
#{item.suiteNo},
#{item.suiteName},
#{item.rawRefundNos},
#{item.rawRefundNo},
#{item.salesTradeId},
#{item.discount},
#{item.paid},
#{item.suiteId},
#{item.suiteNum},
#{item.created},
#{item.modifiedDate},
#{item.giftType}
)
</foreach>
ON DUPLICATE KEY UPDATE
refund_id = VALUES(refund_id),
oid = VALUES(oid),
trade_order_id = VALUES(trade_order_id),
platform_id = VALUES(platform_id),
tid = VALUES(tid),
trade_no = VALUES(trade_no),
num = VALUES(num),
price = VALUES(price),
original_price = VALUES(original_price),
checked_cost_price = VALUES(checked_cost_price),
refund_num = VALUES(refund_num),
total_amount = VALUES(total_amount),
refund_amount = VALUES(refund_amount),
is_guarantee = VALUES(is_guarantee),
goods_no = VALUES(goods_no),
goods_name = VALUES(goods_name),
spec_name = VALUES(spec_name),
spec_no = VALUES(spec_no),
goods_id = VALUES(goods_id),
spec_id = VALUES(spec_id),
sys_goods_id = VALUES(sys_goods_id),
sys_spec_id = VALUES(sys_spec_id),
spec_code = VALUES(spec_code),
barcode = VALUES(barcode),
stockin_num = VALUES(stockin_num),
remark = VALUES(remark),
api_spec_name = VALUES(api_spec_name),
api_goods_name = VALUES(api_goods_name),
modified = VALUES(modified),
suite_no = VALUES(suite_no),
suite_name = VALUES(suite_name),
raw_refund_nos = VALUES(raw_refund_nos),
raw_refund_no = VALUES(raw_refund_no),
sales_trade_id = VALUES(sales_trade_id),
discount = VALUES(discount),
paid = VALUES(paid),
suite_id = VALUES(suite_id),
suite_num = VALUES(suite_num),
created = VALUES(created),
modified_date = VALUES(modified_date),
gift_type = VALUES(gift_type)
</insert>
</mapper>
src/main/resources/mapper/order/WdtRefundOrderMapper.xml
0 → 100644
浏览文件 @
955bf612
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.sfa.job.domain.order.mapper.WdtRefundOrderMapper"
>
<insert
id=
"saveOrUpdateBatch"
parameterType=
"java.util.List"
>
INSERT INTO wdt_refund_order (
refund_id, src_tids, refund_no, remark, type,
stockin_status, flag_name, return_goods_count,
receiver_telno, receiver_name, modified, note_count,
shop_no, from_type, created, settle_time, check_time,
return_logistics_no, trade_no_list, guarantee_refund_amount,
return_goods_amount, return_logistics_name, reason_name,
refund_reason, buyer_nick, operator_name, actual_refund_amount,
revert_reason_name, return_warehouse_no, direct_refund_amount,
receive_amount, customer_name, fenxiao_nick_name, status,
shop_id, trade_id, raw_refund_nos, pay_id, provider_refund_no,
shop_platform_id, tid_list, sub_platform_id, return_warehouse_id,
platform_id, wms_owner_no, warehouse_type, bad_reason, modified_date,
return_mask_info, process_status, reason_id, revert_reason_id,
customer_id, consign_mode, refund_time, fenxiao_tid, fenxiao_nick_no,
wms_code, rr_status, current_phase_timeout
)
values
<foreach
collection=
"list"
item=
"item"
separator=
","
>
(
#{item.refundId},
#{item.srcTids},
#{item.refundNo},
#{item.remark},
#{item.type},
#{item.stockinStatus},
#{item.flagName},
#{item.returnGoodsCount},
#{item.receiverTelno},
#{item.receiverName},
#{item.modified},
#{item.noteCount},
#{item.shopNo},
#{item.fromType},
#{item.created},
#{item.settleTime},
#{item.checkTime},
#{item.returnLogisticsNo},
#{item.tradeNoList},
#{item.guaranteeRefundAmount},
#{item.returnGoodsAmount},
#{item.returnLogisticsName},
#{item.reasonName},
#{item.refundReason},
#{item.buyerNick},
#{item.operatorName},
#{item.actualRefundAmount},
#{item.revertReasonName},
#{item.returnWarehouseNo},
#{item.directRefundAmount},
#{item.receiveAmount},
#{item.customerName},
#{item.fenxiaoNickName},
#{item.status},
#{item.shopId},
#{item.tradeId},
#{item.rawRefundNos},
#{item.payId},
#{item.providerRefundNo},
#{item.shopPlatformId},
#{item.tidList},
#{item.subPlatformId},
#{item.returnWarehouseId},
#{item.platformId},
#{item.wmsOwnerNo},
#{item.warehouseType},
#{item.badReason},
#{item.modifiedDate},
#{item.returnMaskInfo},
#{item.processStatus},
#{item.reasonId},
#{item.revertReasonId},
#{item.customerId},
#{item.consignMode},
#{item.refundTime},
#{item.fenxiaoTid},
#{item.fenxiaoNickNo},
#{item.wmsCode},
#{item.rrStatus},
#{item.currentPhaseTimeout}
)
</foreach>
ON DUPLICATE KEY UPDATE
src_tids = VALUES(src_tids),
refund_no = VALUES(refund_no),
remark = VALUES(remark),
type = VALUES(type),
stockin_status = VALUES(stockin_status),
flag_name = VALUES(flag_name),
return_goods_count = VALUES(return_goods_count),
receiver_telno = VALUES(receiver_telno),
receiver_name = VALUES(receiver_name),
modified = VALUES(modified),
note_count = VALUES(note_count),
shop_no = VALUES(shop_no),
from_type = VALUES(from_type),
created = VALUES(created),
settle_time = VALUES(settle_time),
check_time = VALUES(check_time),
return_logistics_no = VALUES(return_logistics_no),
trade_no_list = VALUES(trade_no_list),
guarantee_refund_amount = VALUES(guarantee_refund_amount),
return_goods_amount = VALUES(return_goods_amount),
return_logistics_name = VALUES(return_logistics_name),
reason_name = VALUES(reason_name),
refund_reason = VALUES(refund_reason),
buyer_nick = VALUES(buyer_nick),
operator_name = VALUES(operator_name),
actual_refund_amount = VALUES(actual_refund_amount),
revert_reason_name = VALUES(revert_reason_name),
return_warehouse_no = VALUES(return_warehouse_no),
direct_refund_amount = VALUES(direct_refund_amount),
receive_amount = VALUES(receive_amount),
customer_name = VALUES(customer_name),
fenxiao_nick_name = VALUES(fenxiao_nick_name),
status = VALUES(status),
shop_id = VALUES(shop_id),
trade_id = VALUES(trade_id),
raw_refund_nos = VALUES(raw_refund_nos),
pay_id = VALUES(pay_id),
provider_refund_no = VALUES(provider_refund_no),
shop_platform_id = VALUES(shop_platform_id),
tid_list = VALUES(tid_list),
sub_platform_id = VALUES(sub_platform_id),
return_warehouse_id = VALUES(return_warehouse_id),
platform_id = VALUES(platform_id),
wms_owner_no = VALUES(wms_owner_no),
warehouse_type = VALUES(warehouse_type),
bad_reason = VALUES(bad_reason),
modified_date = VALUES(modified_date),
return_mask_info = VALUES(return_mask_info),
process_status = VALUES(process_status),
reason_id = VALUES(reason_id),
revert_reason_id = VALUES(revert_reason_id),
customer_id = VALUES(customer_id),
consign_mode = VALUES(consign_mode),
refund_time = VALUES(refund_time),
fenxiao_tid = VALUES(fenxiao_tid),
fenxiao_nick_no = VALUES(fenxiao_nick_no),
wms_code = VALUES(wms_code),
rr_status = VALUES(rr_status),
current_phase_timeout = VALUES(current_phase_timeout)
</insert>
</mapper>
src/main/resources/mapper/order/WdtSwapOrderDetailMapper.xml
0 → 100644
浏览文件 @
955bf612
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.sfa.job.domain.order.mapper.WdtRefundOrderDetailMapper"
>
<insert
id=
"saveOrUpdateBatch"
parameterType=
"java.util.List"
>
INSERT INTO wdt_swap_order_detail (
oid, swap_order_tid, target_type, target_id, defect, goods_name, goods_no,
spec_name, spec_code, merchant_no, price, total_amount, num, remark
)
VALUES
<foreach
collection=
"list"
item=
"item"
separator=
","
>
(
#{item.oid},
#{item.swapOrderTid},
#{item.targetType},
#{item.targetId},
#{item.defect},
#{item.goodsName},
#{item.goodsNo},
#{item.specName},
#{item.specCode},
#{item.merchantNo},
#{item.price},
#{item.totalAmount},
#{item.num},
#{item.remark}
)
</foreach>
ON DUPLICATE KEY UPDATE
target_type = VALUES(target_type),
target_id = VALUES(target_id),
defect = VALUES(defect),
goods_name = VALUES(goods_name),
goods_no = VALUES(goods_no),
spec_name = VALUES(spec_name),
spec_code = VALUES(spec_code),
merchant_no = VALUES(merchant_no),
price = VALUES(price),
total_amount = VALUES(total_amount),
num = VALUES(num),
remark = VALUES(remark)
</insert>
</mapper>
src/main/resources/mapper/order/WdtSwapOrderMapper.xml
0 → 100644
浏览文件 @
955bf612
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.sfa.job.domain.order.mapper.WdtSwapOrderMapper"
>
<insert
id=
"saveOrUpdateBatch"
parameterType=
"java.util.List"
>
INSERT INTO wdt_swap_order (
tid, refund_id, shop_no, shop_name, warehouse_no, shop_id, warehouse_id,
swap_province, swap_city, swap_area, swap_district, swap_logistics_id,
post_amount, other_amount
)
VALUES
<foreach
collection=
"list"
item=
"item"
separator=
","
>
(
#{item.tid},
#{item.refundId},
#{item.shopNo},
#{item.shopName},
#{item.warehouseNo},
#{item.shopId},
#{item.warehouseId},
#{item.swapProvince},
#{item.swapCity},
#{item.swapArea},
#{item.swapDistrict},
#{item.swapLogisticsId},
#{item.postAmount},
#{item.otherAmount}
)
</foreach>
ON DUPLICATE KEY UPDATE
shop_no = VALUES(shop_no),
shop_name = VALUES(shop_name),
warehouse_no = VALUES(warehouse_no),
shop_id = VALUES(shop_id),
warehouse_id = VALUES(warehouse_id),
swap_province = VALUES(swap_province),
swap_city = VALUES(swap_city),
swap_area = VALUES(swap_area),
swap_district = VALUES(swap_district),
swap_logistics_id = VALUES(swap_logistics_id),
post_amount = VALUES(post_amount),
other_amount = VALUES(other_amount)
</insert>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论