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
3a7382f6
提交
3a7382f6
authored
1月 17, 2025
作者:
吕本才
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改采集订单代码,
将代码还原到job服务中
上级
317fb63c
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
319 行增加
和
14 行删除
+319
-14
pom.xml
pom.xml
+4
-1
FinanceOrderDetailSyncController.java
.../controller/finance/FinanceOrderDetailSyncController.java
+11
-4
FinanceOrderSyncService.java
...va/com/sfa/job/service/order/FinanceOrderSyncService.java
+13
-0
FinanceOrderSyncServiceImpl.java
...a/job/service/order/impl/FinanceOrderSyncServiceImpl.java
+183
-0
WangdiantongUtil.java
src/main/java/com/sfa/job/util/WangdiantongUtil.java
+99
-0
FinanceOrderTask.java
src/main/java/com/sfa/job/xxljob/order/FinanceOrderTask.java
+9
-9
没有找到文件。
pom.xml
浏览文件 @
3a7382f6
...
...
@@ -108,7 +108,10 @@
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.larksuite.oapi
</groupId>
<artifactId>
oapi-sdk
</artifactId>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
...
...
src/main/java/com/sfa/job/controller/finance/FinanceOrderDetailSyncController.java
浏览文件 @
3a7382f6
package
com
.
sfa
.
job
.
controller
.
finance
;
import
cn.hutool.core.date.DateUtil
;
import
com.link.bi.pojo.response.FinanceSyncOrderDetailDto
;
import
com.link.bi.service.FinanceOrderService
;
import
com.sfa.common.core.web.controller.BaseController
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -15,17 +17,22 @@ import java.util.Date;
*
* @author ruoyi
*/
@Slf4j
@RestController
@RequestMapping
(
"/finance/order"
)
public
class
FinanceOrderDetailSyncController
extends
BaseController
{
@Autowired
private
FinanceOrderS
ervice
order
Service
;
private
FinanceOrderS
yncService
sync
Service
;
@GetMapping
(
"/syncWandiantongOrderDeatail"
)
public
FinanceSyncOrderDetailDto
syncWandiantongOrderDeatail
(
Date
startTime
,
Date
endTime
)
{
log
.
info
(
"接口开始同步-旺店通订单明细api接口数据"
);
// 可以传参开始时间和结束时间,用于补充特定时间的数据采集
FinanceSyncOrderDetailDto
syncWdtOrderDetailDto
=
orderService
.
syncWandiantongOrder
(
startTime
,
endTime
,
1
);
return
syncWdtOrderDetailDto
;
FinanceSyncOrderDetailDto
detailDto
=
syncService
.
syncWangdiantongOrder
(
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/service/order/FinanceOrderSyncService.java
0 → 100644
浏览文件 @
3a7382f6
package
com
.
sfa
.
job
.
service
.
order
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.link.bi.domain.entity.FinanceOrder
;
import
com.link.bi.pojo.response.FinanceSyncOrderDetailDto
;
import
java.util.Date
;
public
interface
FinanceOrderSyncService
extends
IService
<
FinanceOrder
>
{
FinanceSyncOrderDetailDto
syncWangdiantongOrder
(
Date
startTime
,
Date
endTime
,
Integer
syncType
);
}
src/main/java/com/sfa/job/service/order/impl/FinanceOrderSyncServiceImpl.java
0 → 100644
浏览文件 @
3a7382f6
package
com
.
sfa
.
job
.
service
.
order
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.link.bi.domain.dao.IFinanceOrderDao
;
import
com.link.bi.domain.entity.*
;
import
com.link.bi.domain.mapper.FinanceOrderMapper
;
import
com.link.bi.pojo.response.FinanceSyncOrderDetailDto
;
import
com.link.bi.service.*
;
import
com.sfa.common.core.exception.ServiceException
;
import
com.sfa.common.core.utils.DateUtils
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
com.sfa.job.util.WangdiantongUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.util.*
;
/**
* 旺店通订单Service业务层处理
*
* @author lvbencai
* @date 2025年01月07日17:00:16
*/
@DS
(
"bi"
)
@Slf4j
@Service
public
class
FinanceOrderSyncServiceImpl
extends
ServiceImpl
<
FinanceOrderMapper
,
FinanceOrder
>
implements
FinanceOrderSyncService
{
@Autowired
IFinanceOrderDao
orderDao
;
@Autowired
WangdiantongUtil
wangdiantongUtil
;
@Autowired
FinanceOrderDetailService
detailService
;
@Autowired
FinanceBaseProductService
baseProductService
;
@Autowired
FinanceBaseZbjTypeService
baseZbjTypeService
;
@Autowired
CollectOrderLogInfoService
collectOrderLogInfoService
;
@Autowired
IProductService
productService
;
/**
* 多线程调用此方法
* @param startTime
* @param endTime
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
FinanceSyncOrderDetailDto
syncWangdiantongOrder
(
Date
startTime
,
Date
endTime
,
Integer
syncType
)
{
FinanceSyncOrderDetailDto
detailDto
=
new
FinanceSyncOrderDetailDto
();
String
batchNo
=
syncType
+
DateUtils
.
dateTimeNow
()
+
Thread
.
currentThread
().
getId
();
try
{
if
(
ObjectUtils
.
isEmpty
(
startTime
))
{
// 查询最新的采集时间
Date
date
=
collectOrderLogInfoService
.
selectLatest
(
syncType
);
if
(
ObjectUtils
.
isNotEmpty
(
date
))
{
startTime
=
date
;
}
else
{
// 默认上个月的第一天 00:00:00
startTime
=
DateUtil
.
beginOfDay
(
DateUtil
.
beginOfMonth
(
DateUtil
.
lastMonth
()));
}
// 调用查询旺店通接口api 获取最新日期前的一个小时
startTime
=
DateUtils
.
addMinutes
(
startTime
,
-
3
);
}
if
(
ObjectUtils
.
isEmpty
(
endTime
))
{
endTime
=
DateUtils
.
addMinutes
(
startTime
,
60
);
}
log
.
info
(
"查询订单参数:开始时间{},结束时间{}"
,
DateUtil
.
formatDateTime
(
startTime
),
DateUtil
.
formatDateTime
(
endTime
));
List
<
FinanceOrder
>
orders
=
wangdiantongUtil
.
queryWithDetail
(
startTime
,
endTime
);
if
(
ObjectUtils
.
isEmpty
(
orders
))
{
throw
new
ServiceException
(
"旺店通没有查询到订单数据"
);
}
// 基础数据 直播间分类数据+成本、规格、口味
Map
<
String
,
FinanceBaseProduct
>
baseProductMap
=
baseProductService
.
selectBaseProduct
();
Map
<
String
,
String
>
baseZbjType
=
baseZbjTypeService
.
selectBaseZbjType
();
// 系列
Map
<
String
,
String
>
prodSeries
=
productService
.
selectProdSeries
();
// 入库订单表
log
.
info
(
"开始插入订单数据,数量:{}"
,
orders
.
size
());
Date
finalStartTime
=
startTime
;
Date
finalEndTime
=
endTime
;
orders
.
forEach
(
order
->
{
order
.
setBatchNo
(
batchNo
);
order
.
setStartTime
(
finalStartTime
);
order
.
setEndTime
(
finalEndTime
);
order
.
setSyncType
(
syncType
);
});
this
.
saveOrUpdateBatch
(
orders
);
List
<
FinanceOrderDetail
>
mergeList
=
new
ArrayList
<>();
// 用于同一个订单号,来赋值直播间信息
Map
<
String
,
FinanceOrderDetail
>
orderZbj
=
new
HashMap
<>();
// 入库订单明细表
for
(
FinanceOrder
order
:
orders
)
{
List
<
FinanceOrderDetail
>
orderDetails
=
order
.
getDetailList
();
orderDetails
.
forEach
(
orderDetail
->
{
orderDetail
.
setSeries
(
prodSeries
.
get
(
orderDetail
.
getGoodsNo
()));
orderDetail
.
setTradeStatus
(
order
.
getTradeStatus
());
orderDetail
.
setShopNo
(
order
.
getShopNo
());
orderDetail
.
setShopName
(
order
.
getShopName
());
orderDetail
.
setShopRemark
(
order
.
getShopRemark
());
orderDetail
.
setReceivable
(
order
.
getReceivable
());
orderDetail
.
setReceiverArea
(
order
.
getReceiverArea
());
orderDetail
.
setConsignTime
(
order
.
getConsignTime
());
orderDetail
.
setTradeTime
(
order
.
getTradeTime
());
orderDetail
.
setBatchNo
(
batchNo
);
orderDetail
.
setTradeNo
(
order
.
getTradeNo
());
// 计算分销信息
orderDetail
.
setFenxiaoNick
(
orderDetail
.
getFenxiaoNick
(
order
));
orderDetail
.
setFenxiaoId
(
orderDetail
.
getFenxiaoId
(
order
,
orderDetail
.
getTradeId
()));
orderDetail
.
setFenxiaoName
(
orderDetail
.
getFenxiaoName
(
order
,
orderDetail
.
getTradeId
()));
orderDetail
.
setStartTime
(
finalStartTime
);
orderDetail
.
setEndTime
(
finalEndTime
);
orderDetail
.
setSyncType
(
syncType
);
// 如果存在相同的
FinanceOrderDetail
sameDetail
=
orderZbj
.
get
(
orderDetail
.
getSrcTid
());
orderDetail
.
setZbjName
(
orderDetail
.
getZbjName
(
orderDetail
.
getRemark
(),
sameDetail
));
orderDetail
.
setZbjId
(
orderDetail
.
getZbjId
(
orderDetail
.
getRemark
(),
sameDetail
));
orderDetail
.
setZbjZbId
(
orderDetail
.
getZbjZbId
(
orderDetail
.
getFenxiaoId
(),
orderDetail
.
getRemark
(),
sameDetail
));
orderDetail
.
setZbjSaleType
(
orderDetail
.
getZbjSaleType
(
orderDetail
.
getRemark
(),
sameDetail
));
// 确定分销商类型
orderDetail
.
setZbjQdType
(
orderDetail
.
getZbjQdType
(
orderDetail
.
getFenxiaoId
(),
orderDetail
.
getZbjZbId
(),
baseZbjType
));
if
(
ObjectUtils
.
isNotEmpty
(
orderDetail
.
getZbjName
()))
{
orderZbj
.
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
()
:
""
);
orderDetail
.
setActualCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getActualCost
()
:
new
BigDecimal
(
0
));
orderDetail
.
setStandardCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getStandardCost
()
:
new
BigDecimal
(
0
));
});
mergeList
.
addAll
(
orderDetails
);
}
log
.
info
(
"开始插入订单详情数据,数量:{}"
,
mergeList
.
size
());
// 批量插入
detailService
.
saveOrUpdateBatch
(
mergeList
);
detailDto
.
setOrders
(
orders
);
detailDto
.
setOrderCount
(
orders
.
size
());
detailDto
.
setOrderDetailCount
(
mergeList
.
size
());
detailDto
.
setOrderDetails
(
mergeList
);
detailDto
.
setStartTime
(
startTime
);
detailDto
.
setEndTime
(
endTime
);
detailDto
.
setBatchNo
(
batchNo
);
log
.
info
(
"完成插入订单和订单详情数据,开始时间{},结束时间{},订单数量:{},详情数量:{}"
,
DateUtil
.
formatDateTime
(
startTime
),
DateUtil
.
formatDateTime
(
endTime
),
orders
.
size
(),
mergeList
.
size
());
CollectOrderLogInfo
collectOrderLogInfo
=
new
CollectOrderLogInfo
();
collectOrderLogInfo
.
setSyncType
(
syncType
);
collectOrderLogInfo
.
setOrderCount
(
orders
.
size
());
collectOrderLogInfo
.
setOrderDetailCount
(
mergeList
.
size
());
collectOrderLogInfo
.
setBatchNo
(
batchNo
);
collectOrderLogInfo
.
setLatestTime
(
endTime
);
collectOrderLogInfoService
.
save
(
collectOrderLogInfo
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
// 记录错误日志表 collect_error_info
CollectErrorInfo
errorInfo
=
new
CollectErrorInfo
();
errorInfo
.
setBatchNo
(
batchNo
);
errorInfo
.
setType
(
""
);
errorInfo
.
setErrorMsg
(
e
.
getMessage
());
errorInfo
.
setEndTime
(
endTime
);
errorInfo
.
setStartTime
(
startTime
);
errorInfo
.
setCollectTime
(
new
Date
());
// ????
throw
e
;
}
return
detailDto
;
}
}
src/main/java/com/sfa/job/util/WangdiantongUtil.java
0 → 100644
浏览文件 @
3a7382f6
package
com
.
sfa
.
job
.
util
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.alibaba.fastjson2.JSONReader
;
import
com.alibaba.fastjson2.util.DateUtils
;
import
com.lark.oapi.okhttp.*
;
import
com.link.bi.domain.entity.FinanceOrder
;
import
com.sfa.common.core.exception.ServiceException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.DigestUtils
;
import
java.util.*
;
@Slf4j
@Component
public
class
WangdiantongUtil
{
/**
* 卖家账号/接口账号/盐/接口名称
*/
public
List
<
FinanceOrder
>
queryWithDetail
(
Date
startTime
,
Date
endTime
)
{
List
<
FinanceOrder
>
orderAllList
=
new
ArrayList
<>();
try
{
int
total
=
0
;
int
size
=
0
;
int
page_no
=
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
v
=
"1.0"
;
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"start_time"
,
DateUtils
.
format
(
startTime
));
params
.
put
(
"end_time"
,
DateUtils
.
format
(
endTime
));
// params.put("status", "110");
// params.put("time_type", 2);
List
<
HashMap
<
String
,
Object
>>
paramsList
=
Arrays
.
asList
(
params
);
String
signParams
=
appsecret
+
"body"
+
JSONObject
.
toJSONString
(
paramsList
)
+
"calc_total1"
+
"key"
+
key
+
"method"
+
method
+
"page_no"
+
page_no
+
"page_size200"
+
"salt"
+
salt
+
"sid"
+
sid
+
"timestamp"
+
(
System
.
currentTimeMillis
()
/
1000
-
1325347200
)
+
"v"
+
v
+
appsecret
;
String
sign
=
DigestUtils
.
md5DigestAsHex
(
signParams
.
toString
().
getBytes
());
log
.
debug
(
signParams
);
log
.
debug
(
sign
);
StringBuilder
urlParams
=
new
StringBuilder
()
.
append
(
"sid="
).
append
(
sid
)
.
append
(
"&key="
).
append
(
key
)
.
append
(
"&salt="
).
append
(
salt
)
.
append
(
"&method="
).
append
(
method
)
.
append
(
"&v="
).
append
(
v
)
.
append
(
"×tamp="
).
append
(
System
.
currentTimeMillis
()
/
1000
-
1325347200
)
.
append
(
"&sign="
).
append
(
sign
)
.
append
(
"&page_size="
).
append
(
200
)
.
append
(
"&page_no="
).
append
(
page_no
)
.
append
(
"&calc_total="
).
append
(
1
);
log
.
info
(
"查询订单数据url:"
+
url
+
"?"
+
urlParams
);
RequestBody
body
=
RequestBody
.
create
(
MediaType
.
get
(
"application/json"
),
JSONObject
.
toJSONString
(
paramsList
));
Request
urlRequestBuild
=
new
Request
.
Builder
().
url
(
url
+
"?"
+
urlParams
).
post
(
body
).
build
();
OkHttpClient
client
=
new
OkHttpClient
();
Response
execute
=
client
.
newCall
(
urlRequestBuild
).
execute
();
JSONObject
responseJson
=
JSONObject
.
parseObject
(
execute
.
body
().
string
());
JSONObject
dataR
=
responseJson
.
getJSONObject
(
"data"
);
JSONObject
messageJson
=
responseJson
.
getJSONObject
(
"message"
);
if
(
ObjectUtils
.
isNotEmpty
(
messageJson
)){
log
.
error
(
"访问旺店通接口错误"
+
messageJson
.
toString
());
throw
new
ServiceException
(
"访问旺店通接口错误"
+
messageJson
.
toString
());
}
Integer
totalCount
=
dataR
.
getInteger
(
"total_count"
);
JSONArray
order
=
dataR
.
getJSONArray
(
"order"
);
total
=
totalCount
;
log
.
info
(
"当前时间段{}-{},总条数totalCount:{}"
,
DateUtils
.
format
(
startTime
),
DateUtils
.
format
(
endTime
),
totalCount
);
log
.
info
(
"当前时间段{}-{},查询返回的order条数:{}"
,
DateUtils
.
format
(
startTime
),
DateUtils
.
format
(
endTime
),
order
.
size
());
List
<
FinanceOrder
>
orders
=
JSONArray
.
parseArray
(
order
.
toString
(),
FinanceOrder
.
class
,
JSONReader
.
Feature
.
SupportSmartMatch
);
orderAllList
.
addAll
(
orders
);
size
=
orderAllList
.
size
();
page_no
++;
}
while
(
size
<
total
);
return
orderAllList
;
}
catch
(
Exception
e
)
{
// 记录异常日志
log
.
error
(
"异常信息:{}"
+
e
.
getMessage
(),
e
);
return
orderAllList
;
}
}
}
src/main/java/com/sfa/job/xxljob/order/FinanceOrderTask.java
浏览文件 @
3a7382f6
package
com
.
sfa
.
job
.
xxljob
.
order
;
import
cn.hutool.core.date.DateUtil
;
import
com.link.bi.pojo.response.FinanceSyncOrderDetailDto
;
import
com.link.bi.service.FinanceOrderDetailService
;
import
com.link.bi.service.FinanceOrderService
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
com.xxl.job.core.context.XxlJobContext
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -19,9 +19,7 @@ import org.springframework.stereotype.Component;
public
class
FinanceOrderTask
{
@Autowired
FinanceOrderDetailService
orderDetailService
;
@Autowired
FinanceOrderService
orderService
;
FinanceOrderSyncService
financeOrderSyncService
;
/**
* 同步部门数据
...
...
@@ -36,12 +34,14 @@ public class FinanceOrderTask {
// 简单模拟分片处理,这里输出每个分片的信息
System
.
out
.
println
(
"分片总数: "
+
shardingTotalCount
+
", 当前分片: "
+
shardingItem
);
log
.
info
(
"开始同步-旺店通订单明细api接口数据"
);
log
.
info
(
"
xxl-job
开始同步-旺店通订单明细api接口数据"
);
// 定时任务不设定开始时间和结束时间
FinanceSyncOrderDetailDto
syncWdtOrderDetailDto
=
orderService
.
syncWan
diantongOrder
(
null
,
null
,
0
);
FinanceSyncOrderDetailDto
detailDto
=
financeOrderSyncService
.
syncWang
diantongOrder
(
null
,
null
,
0
);
log
.
info
(
"结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条"
,
syncWdtOrderDetailDto
.
getOrderCount
(),
syncWdtOrderDetailDto
.
getOrderDetailCount
());
return
syncWdtOrderDetailDto
;
log
.
info
(
"xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}"
,
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
())
);
return
detailDto
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论