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
6dd812a6
提交
6dd812a6
authored
10月 29, 2025
作者:
000516
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into lql
上级
e224504f
57c3164b
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
37 个修改的文件
包含
784 行增加
和
23 行删除
+784
-23
.gitignore
.gitignore
+7
-2
pom.xml
pom.xml
+27
-2
PayTimeYearShardingAlgorithm.java
...java/com/sfa/job/config/PayTimeYearShardingAlgorithm.java
+92
-0
ShardingConfiguration.java
src/main/java/com/sfa/job/config/ShardingConfiguration.java
+72
-0
WdtQimenOrderController.java
...com/sfa/job/controller/order/WdtQimenOrderController.java
+11
-0
WdtQimenOrderPayTimeController.java
.../job/controller/order/WdtQimenOrderPayTimeController.java
+55
-0
WdtQimenOrderDetailPayTimeDao.java
...a/job/domain/order/dao/WdtQimenOrderDetailPayTimeDao.java
+11
-0
WdtQimenOrderPayTimeDao.java
...com/sfa/job/domain/order/dao/WdtQimenOrderPayTimeDao.java
+10
-0
CollectOrderLogDaoImpl.java
...sfa/job/domain/order/dao/impl/CollectOrderLogDaoImpl.java
+1
-0
ProductDaoImpl.java
...ava/com/sfa/job/domain/order/dao/impl/ProductDaoImpl.java
+2
-0
WdtQimenOrderDetailPayTimeDaoImpl.java
...ain/order/dao/impl/WdtQimenOrderDetailPayTimeDaoImpl.java
+30
-0
WdtQimenOrderPayTimeDaoImpl.java
...ob/domain/order/dao/impl/WdtQimenOrderPayTimeDaoImpl.java
+29
-0
WdtQimenOrderDetail.java
.../com/sfa/job/domain/order/entity/WdtQimenOrderDetail.java
+3
-1
WdtQimenOrderDetailPayTime.java
...a/job/domain/order/entity/WdtQimenOrderDetailPayTime.java
+0
-0
WdtQimenOrderPayTime.java
...com/sfa/job/domain/order/entity/WdtQimenOrderPayTime.java
+0
-0
WdtQimenOrderDetailPayTimeMapper.java
...domain/order/mapper/WdtQimenOrderDetailPayTimeMapper.java
+15
-0
WdtQimenOrderPayTimeMapper.java
...a/job/domain/order/mapper/WdtQimenOrderPayTimeMapper.java
+13
-0
WdtSalesTradeQueryQueryWithDetailVo.java
...jo/order/request/WdtSalesTradeQueryQueryWithDetailVo.java
+11
-0
WdtQimenOrderPayTimeBodyDto.java
.../job/pojo/order/response/WdtQimenOrderPayTimeBodyDto.java
+12
-0
WdtQimenOrderPayTimeDto.java
.../sfa/job/pojo/order/response/WdtQimenOrderPayTimeDto.java
+15
-0
WdtQimenOrderPayTimeResponseDto.java
.../pojo/order/response/WdtQimenOrderPayTimeResponseDto.java
+11
-0
SyncOrderDetailDto.java
...in/java/com/sfa/job/pojo/response/SyncOrderDetailDto.java
+1
-0
IWdtQimenOrderPayTimeSyncService.java
...a/job/service/order/IWdtQimenOrderPayTimeSyncService.java
+14
-0
IWdtQimenOrderSyncService.java
.../com/sfa/job/service/order/IWdtQimenOrderSyncService.java
+2
-0
FinanceOrderSyncServiceImpl.java
...a/job/service/order/impl/FinanceOrderSyncServiceImpl.java
+1
-1
WdtQimenOrderPayTimeSyncServiceImpl.java
...rvice/order/impl/WdtQimenOrderPayTimeSyncServiceImpl.java
+0
-0
WdtQimenOrderSyncServiceImpl.java
.../job/service/order/impl/WdtQimenOrderSyncServiceImpl.java
+82
-13
ShardingJdbcNacosURLProvider.java
...in/java/com/sfa/job/spi/ShardingJdbcNacosURLProvider.java
+35
-0
NacosConfigiServiceUtils.java
src/main/java/com/sfa/job/util/NacosConfigiServiceUtils.java
+16
-0
WdtQimenOrderPayTImeTask.java
...va/com/sfa/job/xxljob/order/WdtQimenOrderPayTImeTask.java
+69
-0
org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLProvider
...gsphere.driver.jdbc.core.driver.ShardingSphereURLProvider
+1
-0
org.springframework.boot.autoconfigure.AutoConfiguration.imports
...ngframework.boot.autoconfigure.AutoConfiguration.imports
+0
-0
WdtQimenOrderDetailMapper.xml
...main/resources/mapper/order/WdtQimenOrderDetailMapper.xml
+5
-3
WdtQimenOrderDetailPayTimeMapper.xml
...sources/mapper/order/WdtQimenOrderDetailPayTimeMapper.xml
+0
-0
WdtQimenOrderMapper.xml
src/main/resources/mapper/order/WdtQimenOrderMapper.xml
+1
-1
WdtQimenOrderPayTimeMapper.xml
...ain/resources/mapper/order/WdtQimenOrderPayTimeMapper.xml
+0
-0
ShardingTableTest.java
src/test/java/com/sfa/job/config/ShardingTableTest.java
+130
-0
没有找到文件。
.gitignore
浏览文件 @
6dd812a6
...
...
@@ -35,4 +35,10 @@ build/
.vscode/
mvnw
mvnw.cmd
\ No newline at end of file
mvnw.cmd
LOG_PATH_IS_UNDEFINED/
logs/
*.log
**/**/*.log
*.bak*
pom.xml
浏览文件 @
6dd812a6
...
...
@@ -93,6 +93,13 @@
<dependency>
<groupId>
com.baomidou
</groupId>
<artifactId>
dynamic-datasource-spring-boot-starter
</artifactId>
<!-- 排除低版本 snakeyaml -->
<exclusions>
<exclusion>
<groupId>
org.yaml
</groupId>
<artifactId>
snakeyaml
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
...
...
@@ -126,7 +133,7 @@
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
okhttp
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
com.kyexpress
</groupId>
<artifactId>
kye-openapi-sdk
</artifactId>
</dependency>
...
...
@@ -140,6 +147,24 @@
<groupId>
com.taobao
</groupId>
<artifactId>
taobao-sdk-java
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.shardingsphere
</groupId>
<artifactId>
shardingsphere-sharding-core
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.shardingsphere
</groupId>
<artifactId>
shardingsphere-jdbc-core
</artifactId>
<version>
${shardingsphere.version}
</version>
</dependency>
<!-- 显式指定高版本 snakeyaml(确保与 ShardingSphere 兼容) -->
<dependency>
<groupId>
org.yaml
</groupId>
<artifactId>
snakeyaml
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-test
</artifactId>
</dependency>
</dependencies>
<build>
...
...
@@ -156,7 +181,7 @@
</execution>
</executions>
<configuration>
<excludes>
<excludes>
<exclude>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
...
...
src/main/java/com/sfa/job/config/PayTimeYearShardingAlgorithm.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue
;
import
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue
;
import
org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm
;
import
java.time.LocalDateTime
;
import
java.util.*
;
/**
* ShardingSphere 5.4.1 按 pay_time 年份分表算法
*/
@Slf4j
public
class
PayTimeYearShardingAlgorithm
implements
StandardShardingAlgorithm
<
LocalDateTime
>
{
// 初始化方法(可留空)
@Override
public
void
init
(
Properties
props
)
{
StandardShardingAlgorithm
.
super
.
init
(
props
);
}
// 获取分片算法类型(自定义名称)
@Override
public
String
getType
()
{
return
"PAY_TIME_YEAR"
;
}
@Override
public
Collection
<
Object
>
getTypeAliases
()
{
return
StandardShardingAlgorithm
.
super
.
getTypeAliases
();
}
@Override
public
boolean
isDefault
()
{
return
StandardShardingAlgorithm
.
super
.
isDefault
();
}
/**
* 精确分片(处理 = 条件)
* 例:pay_time = '2023-05-01 10:00:00' → 路由到 t_order_2023
*/
@Override
public
String
doSharding
(
Collection
<
String
>
collection
,
PreciseShardingValue
<
LocalDateTime
>
preciseShardingValue
)
{
// 获取精确查询的时间值
LocalDateTime
payTime
=
preciseShardingValue
.
getValue
();
if
(
payTime
==
null
){
return
preciseShardingValue
.
getLogicTableName
()+
"_2021"
;
}
int
year
=
payTime
.
getYear
();
// 生成目标表名(逻辑表名_年份)
String
targetTable
=
preciseShardingValue
.
getLogicTableName
()
+
"_"
+
year
;
// 校验表是否存在
if
(
collection
.
contains
(
targetTable
))
{
return
targetTable
;
}
throw
new
IllegalArgumentException
(
"未找到匹配的表:"
+
targetTable
);
}
/**
* 范围分片(处理 >、<、BETWEEN 等条件)
* 例:pay_time BETWEEN '2023-01-01' AND '2024-12-31' → 路由到 t_order_2023、t_order_2024
*/
@Override
public
Collection
<
String
>
doSharding
(
Collection
<
String
>
collection
,
RangeShardingValue
<
LocalDateTime
>
shardingValue
)
{
Set
<
String
>
result
=
new
HashSet
<>();
// 遍历所有分片条件(通常只有一个)
// for (RangeShardingValue<LocalDateTime> shardingValue : 、) {
String
logicTableName
=
shardingValue
.
getLogicTableName
();
// 获取范围查询的上下限
LocalDateTime
lower
=
shardingValue
.
getValueRange
().
lowerEndpoint
();
LocalDateTime
upper
=
shardingValue
.
getValueRange
().
upperEndpoint
();
int
startYear
=
lower
.
getYear
();
int
endYear
=
upper
.
getYear
();
// 生成所有符合条件的表名
for
(
int
year
=
startYear
;
year
<=
endYear
;
year
++)
{
String
targetTable
=
logicTableName
+
"_"
+
year
;
if
(
collection
.
contains
(
targetTable
))
{
result
.
add
(
targetTable
);
}
}
// }
return
result
;
}
@Override
public
Optional
<
String
>
getAlgorithmStructure
(
String
dataNodePrefix
,
String
shardingColumn
)
{
return
StandardShardingAlgorithm
.
super
.
getAlgorithmStructure
(
dataNodePrefix
,
shardingColumn
);
}
}
src/main/java/com/sfa/job/config/ShardingConfiguration.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
config
;
import
com.alibaba.cloud.nacos.NacosConfigAutoConfiguration
;
import
com.alibaba.cloud.nacos.NacosConfigProperties
;
import
com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider
;
import
com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider
;
import
com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty
;
import
com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties
;
import
com.sfa.job.util.NacosConfigiServiceUtils
;
import
org.apache.shardingsphere.driver.api.yaml.YamlShardingSphereDataSourceFactory
;
import
org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLProvider
;
import
org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.autoconfigure.AutoConfigureAfter
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceProperties
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Primary
;
import
javax.annotation.Resource
;
import
javax.sql.DataSource
;
import
java.io.IOException
;
import
java.sql.SQLException
;
import
java.util.Collection
;
import
java.util.Map
;
@Configuration
@AutoConfigureAfter
(
DataSourceAutoConfiguration
.
class
)
@EnableConfigurationProperties
({
DataSourceProperties
.
class
})
@ConditionalOnClass
(
NacosConfigAutoConfiguration
.
class
)
public
class
ShardingConfiguration
{
@Resource
private
DynamicDataSourceProperties
properties
;
@Resource
private
NacosConfigProperties
nacosConfigProperties
;
@Value
(
"${spring.shardindsphereUrl}"
)
private
String
shardingsphereUrl
;
@Bean
@Primary
public
DynamicDataSourceProvider
dynamicDataSourceProvider
()
{
NacosConfigiServiceUtils
.
init
(
nacosConfigProperties
);
Map
<
String
,
DataSourceProperty
>
datasourceMap
=
properties
.
getDatasource
();
return
new
AbstractDataSourceProvider
()
{
@Override
public
Map
<
String
,
DataSource
>
loadDataSources
()
{
Map
<
String
,
DataSource
>
dataSourceMap
=
createDataSourceMap
(
datasourceMap
);
//SPI机制
Collection
<
ShardingSphereURLProvider
>
provider
=
ShardingSphereServiceLoader
.
getServiceInstances
(
ShardingSphereURLProvider
.
class
);
provider
.
forEach
(
item
->
{
if
(
item
.
accept
(
shardingsphereUrl
))
{
try
{
DataSource
dataSource
=
YamlShardingSphereDataSourceFactory
.
createDataSource
(
item
.
getContent
(
shardingsphereUrl
,
"jdbc:shardingsphere:"
));
dataSourceMap
.
put
(
"sharding"
,
dataSource
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
});
return
dataSourceMap
;
}
};
}
}
src/main/java/com/sfa/job/controller/order/WdtQimenOrderController.java
浏览文件 @
6dd812a6
...
...
@@ -33,5 +33,16 @@ public class WdtQimenOrderController {
SyncOrderDetailDto
syncOrderDetailDto
=
orderQimenSyncService
.
syncWdtQimenOrder
(
startTime
,
endTime
,
1
,
pageSize
);
return
syncOrderDetailDto
;
}
@GetMapping
(
"/syncByTradeNo"
)
public
Object
syncByTradeNo
(
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
Date
startTime
,
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
Date
endTime
,
@RequestParam
(
value
=
"tradeNo"
,
required
=
false
)
String
tradeNo
,
@RequestParam
(
value
=
"pageNo"
,
required
=
false
,
defaultValue
=
"1"
)
Long
pageNo
,
@RequestParam
(
value
=
"pageSize"
,
required
=
false
,
defaultValue
=
"200"
)
Long
pageSize
)
{
SyncOrderDetailDto
syncOrderDetailDto
=
orderQimenSyncService
.
syncWdtQimenOrderByTradeNo
(
startTime
,
endTime
,
1
,
tradeNo
,
pageNo
,
pageSize
);
return
syncOrderDetailDto
;
}
}
src/main/java/com/sfa/job/controller/order/WdtQimenOrderPayTimeController.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
controller
.
order
;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
com.sfa.job.service.order.IWdtQimenOrderPayTimeSyncService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.Date
;
/**
* @author : liqiulin
* @date : 2025-07-08 13
* @describe : 订单 - 发货单物流查询
*/
@RestController
@RequestMapping
(
"/order/qimen/"
)
public
class
WdtQimenOrderPayTimeController
{
@Autowired
private
IWdtQimenOrderPayTimeSyncService
orderQimenSyncService
;
@GetMapping
(
"/syncByPayTime"
)
public
Object
sync
(
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
Date
startTime
,
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
Date
endTime
,
@RequestParam
(
value
=
"pageSize"
,
required
=
false
,
defaultValue
=
"200"
)
Long
pageSize
)
{
SyncOrderDetailDto
syncOrderDetailDto
=
orderQimenSyncService
.
syncWdtQimenOrder
(
startTime
,
endTime
,
1
,
pageSize
);
return
syncOrderDetailDto
;
}
@GetMapping
(
"/payTime/syncByTradeNo"
)
public
Object
syncByTradeNo
(
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
Date
startTime
,
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
Date
endTime
,
@RequestParam
(
value
=
"tradeNo"
,
required
=
false
)
String
tradeNo
,
@RequestParam
(
value
=
"pageNo"
,
required
=
false
,
defaultValue
=
"1"
)
Long
pageNo
,
@RequestParam
(
value
=
"pageSize"
,
required
=
false
,
defaultValue
=
"200"
)
Long
pageSize
)
{
SyncOrderDetailDto
syncOrderDetailDto
=
orderQimenSyncService
.
syncWdtQimenOrderByTradeNo
(
startTime
,
endTime
,
1
,
tradeNo
,
pageNo
,
pageSize
);
return
syncOrderDetailDto
;
}
@GetMapping
(
"/payTime/test"
)
public
Object
syncByPayTime
(
@RequestParam
(
value
=
"year"
,
required
=
false
)
Integer
year
)
{
SyncOrderDetailDto
syncOrderDetailDto
=
orderQimenSyncService
.
test
(
year
);
return
syncOrderDetailDto
;
}
}
src/main/java/com/sfa/job/domain/order/dao/WdtQimenOrderDetailPayTimeDao.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
domain
.
order
.
dao
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderDetailPayTime
;
import
java.util.List
;
public
interface
WdtQimenOrderDetailPayTimeDao
{
void
saveOrUpdateBatch
(
List
<
WdtQimenOrderDetailPayTime
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/dao/WdtQimenOrderPayTimeDao.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
domain
.
order
.
dao
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderPayTime
;
import
java.util.List
;
public
interface
WdtQimenOrderPayTimeDao
{
void
saveOrUpdateBatch
(
List
<
WdtQimenOrderPayTime
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/dao/impl/CollectOrderLogDaoImpl.java
浏览文件 @
6dd812a6
...
...
@@ -37,6 +37,7 @@ public class CollectOrderLogDaoImpl implements CollectOrderLogDao {
logInfoMapper
.
insert
(
collectOrderLog
);
}
@DS
(
"bi"
)
@Override
public
CollectOrderLogDto
selectOrderSyncLatest
(
Integer
syncType
,
String
method
)
{
// 查询最新发货日期
...
...
src/main/java/com/sfa/job/domain/order/dao/impl/ProductDaoImpl.java
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
domain
.
order
.
dao
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.sfa.job.domain.order.dao.IProductDao
;
import
com.sfa.job.domain.order.entity.PrdInfo
;
...
...
@@ -18,6 +19,7 @@ import java.util.Map;
* @describe :
*/
@DS
(
"bi"
)
@Service
public
class
ProductDaoImpl
implements
IProductDao
{
@Autowired
...
...
src/main/java/com/sfa/job/domain/order/dao/impl/WdtQimenOrderDetailPayTimeDaoImpl.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
domain
.
order
.
dao
.
impl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.sfa.job.domain.order.dao.WdtQimenOrderDetailPayTimeDao
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderDetailPayTime
;
import
com.sfa.job.domain.order.mapper.WdtQimenOrderDetailPayTimeMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@DS
(
"sharding"
)
@Repository
public
class
WdtQimenOrderDetailPayTimeDaoImpl
implements
WdtQimenOrderDetailPayTimeDao
{
private
static
final
int
BATCH_SIZE
=
1000
;
@Autowired
private
WdtQimenOrderDetailPayTimeMapper
wdtQimenOrderDetailMapper
;
@Override
public
void
saveOrUpdateBatch
(
List
<
WdtQimenOrderDetailPayTime
>
mergeList
)
{
for
(
int
i
=
0
;
i
<
mergeList
.
size
();
i
+=
BATCH_SIZE
)
{
int
toIndex
=
Math
.
min
(
i
+
BATCH_SIZE
,
mergeList
.
size
());
List
<
WdtQimenOrderDetailPayTime
>
batchLists
=
mergeList
.
subList
(
i
,
toIndex
);
wdtQimenOrderDetailMapper
.
saveOrUpdateBatch
(
batchLists
);
}
}
}
src/main/java/com/sfa/job/domain/order/dao/impl/WdtQimenOrderPayTimeDaoImpl.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
domain
.
order
.
dao
.
impl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.sfa.job.domain.order.dao.WdtQimenOrderPayTimeDao
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderPayTime
;
import
com.sfa.job.domain.order.mapper.WdtQimenOrderPayTimeMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@DS
(
"sharding"
)
@Repository
public
class
WdtQimenOrderPayTimeDaoImpl
implements
WdtQimenOrderPayTimeDao
{
private
static
final
int
BATCH_SIZE
=
1000
;
@Autowired
private
WdtQimenOrderPayTimeMapper
wdtQimenOrderPayTimeMapper
;
@DS
(
"sharding"
)
@Override
public
void
saveOrUpdateBatch
(
List
<
WdtQimenOrderPayTime
>
mergeList
)
{
for
(
int
i
=
0
;
i
<
mergeList
.
size
();
i
+=
BATCH_SIZE
)
{
int
toIndex
=
Math
.
min
(
i
+
BATCH_SIZE
,
mergeList
.
size
());
List
<
WdtQimenOrderPayTime
>
batchLists
=
mergeList
.
subList
(
i
,
toIndex
);
wdtQimenOrderPayTimeMapper
.
saveOrUpdateBatch
(
batchLists
);
}
}
}
src/main/java/com/sfa/job/domain/order/entity/WdtQimenOrderDetail.java
浏览文件 @
6dd812a6
...
...
@@ -16,7 +16,7 @@ import java.util.regex.Pattern;
/**
* 旺店通订单明细表 wangdiantong_order_detail
*/
@TableName
(
value
=
"
finance
_order_detail"
)
@TableName
(
value
=
"
wdt_qimen
_order_detail"
)
@Data
public
class
WdtQimenOrderDetail
extends
BaseDo
{
// 订单唯一键
...
...
@@ -209,6 +209,8 @@ public class WdtQimenOrderDetail extends BaseDo {
private
String
invoiceContent
;
// 支付时间,DateTime格式,取自原始订单支付时间
private
Date
payTime
;
// 订单支付时间,DateTime格式,取自原始订单支付时间
private
Date
orderPayTime
;
// 货品简称
private
String
shortName
;
...
...
src/main/java/com/sfa/job/domain/order/entity/WdtQimenOrderDetailPayTime.java
0 → 100644
浏览文件 @
6dd812a6
差异被折叠。
点击展开。
src/main/java/com/sfa/job/domain/order/entity/WdtQimenOrderPayTime.java
0 → 100644
浏览文件 @
6dd812a6
差异被折叠。
点击展开。
src/main/java/com/sfa/job/domain/order/mapper/WdtQimenOrderDetailPayTimeMapper.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
domain
.
order
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderDetailPayTime
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
@Mapper
public
interface
WdtQimenOrderDetailPayTimeMapper
extends
BaseMapper
<
WdtQimenOrderDetailPayTime
>
{
void
saveOrUpdateBatch
(
@Param
(
value
=
"list"
)
List
<
WdtQimenOrderDetailPayTime
>
mergeList
);
}
src/main/java/com/sfa/job/domain/order/mapper/WdtQimenOrderPayTimeMapper.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
domain
.
order
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderPayTime
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
@Mapper
public
interface
WdtQimenOrderPayTimeMapper
extends
BaseMapper
<
WdtQimenOrderPayTime
>
{
void
saveOrUpdateBatch
(
List
<
WdtQimenOrderPayTime
>
batchLists
);
}
src/main/java/com/sfa/job/pojo/order/request/WdtSalesTradeQueryQueryWithDetailVo.java
浏览文件 @
6dd812a6
...
...
@@ -183,6 +183,17 @@ public class WdtSalesTradeQueryQueryWithDetailVo extends BaseTaobaoRequest<WdtSa
@ApiField
(
"cal_share_post_amount"
)
private
Boolean
calSharePostAmount
;
@ApiField
(
"trade_no"
)
private
String
tradeNo
;
public
String
getTradeNo
()
{
return
tradeNo
;
}
public
void
setTradeNo
(
String
tradeNo
)
{
this
.
tradeNo
=
tradeNo
;
}
public
String
getStartTime
()
{
return
startTime
;
}
...
...
src/main/java/com/sfa/job/pojo/order/response/WdtQimenOrderPayTimeBodyDto.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
pojo
.
order
.
response
;
import
lombok.Data
;
@Data
public
class
WdtQimenOrderPayTimeBodyDto
{
private
static
final
long
serialVersionUID
=
4632382792982436956L
;
private
WdtQimenOrderPayTimeResponseDto
response
;
private
String
message
;
private
Integer
status
;
}
src/main/java/com/sfa/job/pojo/order/response/WdtQimenOrderPayTimeDto.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
pojo
.
order
.
response
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderPayTime
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
WdtQimenOrderPayTimeDto
{
private
static
final
long
serialVersionUID
=
4632382792982436956L
;
private
List
<
WdtQimenOrderPayTime
>
order
;
private
Integer
totalCount
;
}
src/main/java/com/sfa/job/pojo/order/response/WdtQimenOrderPayTimeResponseDto.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
pojo
.
order
.
response
;
import
lombok.Data
;
@Data
public
class
WdtQimenOrderPayTimeResponseDto
{
private
static
final
long
serialVersionUID
=
4632382792982436956L
;
private
WdtQimenOrderPayTimeDto
data
;
private
String
message
;
private
Integer
status
;
}
src/main/java/com/sfa/job/pojo/response/SyncOrderDetailDto.java
浏览文件 @
6dd812a6
...
...
@@ -38,6 +38,7 @@ public class SyncOrderDetailDto {
private
String
message
;
private
Integer
code
=
200
;
public
SyncOrderDetailDto
setDetailInfo
(
String
method
,
String
remark
,
int
syncType
,
int
size
,
int
mergerListSize
,
Integer
totalCount
,
String
batchNo
,
Date
endTime
,
Date
startTime
)
{
// 接口测试使用
this
.
setOrderCount
(
size
);
...
...
src/main/java/com/sfa/job/service/order/IWdtQimenOrderPayTimeSyncService.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
service
.
order
;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
java.util.Date
;
public
interface
IWdtQimenOrderPayTimeSyncService
{
SyncOrderDetailDto
syncWdtQimenOrder
(
Date
startTime
,
Date
endTime
,
Integer
syncType
,
Long
pageSize
);
SyncOrderDetailDto
syncWdtQimenOrderByTradeNo
(
Date
startTime
,
Date
endTime
,
Integer
syncType
,
String
tradeNo
,
Long
pageNo
,
Long
pageSize
);
SyncOrderDetailDto
test
(
int
year
);
}
src/main/java/com/sfa/job/service/order/IWdtQimenOrderSyncService.java
浏览文件 @
6dd812a6
...
...
@@ -7,4 +7,6 @@ import java.util.Date;
public
interface
IWdtQimenOrderSyncService
{
SyncOrderDetailDto
syncWdtQimenOrder
(
Date
startTime
,
Date
endTime
,
Integer
syncType
,
Long
pageSize
);
SyncOrderDetailDto
syncWdtQimenOrderByTradeNo
(
Date
startTime
,
Date
endTime
,
Integer
syncType
,
String
tradeNo
,
Long
pageNo
,
Long
pageSize
);
}
src/main/java/com/sfa/job/service/order/impl/FinanceOrderSyncServiceImpl.java
浏览文件 @
6dd812a6
...
...
@@ -185,7 +185,7 @@ public class FinanceOrderSyncServiceImpl implements IFinanceOrderSyncService {
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.setShareAmount(new BigDecimal(0));
orderDetail
.
setActualCost
(
new
BigDecimal
(
0
));
orderDetail
.
setStandardCost
(
new
BigDecimal
(
0
));
orderDetail
.
setSumActualCost
(
new
BigDecimal
(
0
));
...
...
src/main/java/com/sfa/job/service/order/impl/WdtQimenOrderPayTimeSyncServiceImpl.java
0 → 100644
浏览文件 @
6dd812a6
差异被折叠。
点击展开。
src/main/java/com/sfa/job/service/order/impl/WdtQimenOrderSyncServiceImpl.java
浏览文件 @
6dd812a6
...
...
@@ -11,7 +11,9 @@ import com.sfa.common.core.exception.ServiceException;
import
com.sfa.common.core.utils.DateUtils
;
import
com.sfa.job.config.WdtQimenConfig
;
import
com.sfa.job.domain.order.dao.*
;
import
com.sfa.job.domain.order.entity.*
;
import
com.sfa.job.domain.order.entity.FinanceBaseProduct
;
import
com.sfa.job.domain.order.entity.WdtQimenOrder
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderDetail
;
import
com.sfa.job.pojo.order.request.WdtSalesTradeQueryQueryWithDetailVo
;
import
com.sfa.job.pojo.order.response.WdtQimenBodyDto
;
import
com.sfa.job.pojo.order.response.WdtQimenDataDto
;
...
...
@@ -21,6 +23,7 @@ import com.sfa.job.pojo.response.CollectOrderLogDto;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
com.sfa.job.service.order.IWdtQimenOrderSyncService
;
import
com.sfa.job.util.WdtQimenUtil
;
import
com.taobao.api.ApiException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -59,6 +62,70 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
@Autowired
WdtQimenConfig
wdtQimenConfig
;
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
SyncOrderDetailDto
syncWdtQimenOrderByTradeNo
(
Date
startTime
,
Date
endTime
,
Integer
syncType
,
String
tradeNo
,
Long
pageNo
,
Long
pageSize
)
{
WdtSalesTradeQueryQueryWithDetailVo
request
=
new
WdtSalesTradeQueryQueryWithDetailVo
();
String
method
=
request
.
getApiMethodName
();
String
serverUrl
=
wdtQimenConfig
.
getServerUrl
();
String
appKey
=
wdtQimenConfig
.
getAppKey
();
String
appSecret
=
wdtQimenConfig
.
getAppSecret
();
String
wdtAppSecret
=
wdtQimenConfig
.
getWdtAppSecret
();
String
wdtSalt
=
wdtAppSecret
.
split
(
":"
)[
1
];
String
wdtSecret
=
wdtAppSecret
.
split
(
":"
)[
0
];
String
wdtAppKey
=
wdtQimenConfig
.
getWdtAppKey
();
String
targetAppSecret
=
wdtQimenConfig
.
getTargetAppSecret
();
String
wdtSid
=
wdtQimenConfig
.
getWdtSid
();
Long
totalPage
=
1L
;
Integer
totalCount
=
1
;
// 查询只到数据查询完毕
QimenCloudClient
client
=
new
DefaultQimenCloudClient
(
serverUrl
,
appKey
,
appSecret
);
WdtSalesTradeQueryQueryWithDetailVo
.
Params
params
=
new
WdtSalesTradeQueryQueryWithDetailVo
.
Params
();
params
.
setStartTime
(
DateUtil
.
formatDateTime
(
startTime
));
params
.
setEndime
(
DateUtil
.
formatDateTime
(
endTime
));
// 旺店通的页码从0开始,奇门从1开始 时间类型 1:修改时间 2:付款时间 默认1
params
.
setTimeType
(
2
);
params
.
setTradeNo
(
tradeNo
);
request
.
setParams
(
params
);
WdtSalesTradeQueryQueryWithDetailVo
.
Pager
pager
=
new
WdtSalesTradeQueryQueryWithDetailVo
.
Pager
();
pager
.
setPageNo
(
pageNo
);
pager
.
setPageSize
(
pageSize
);
request
.
setPager
(
pager
);
// 查询数据
String
dateTime
=
DateUtil
.
formatDateTime
(
new
Date
());
request
.
setDatetime
(
dateTime
);
request
.
putOtherTextParam
(
"wdt3_customer_id"
,
wdtSid
);
request
.
setTargetAppKey
(
targetAppSecret
);
request
.
setWdtAppkey
(
wdtAppKey
);
request
.
setWdtSalt
(
wdtSalt
);
request
.
setWdtSign
(
WdtQimenUtil
.
getQimenCustomWdtSign
(
request
,
wdtSecret
));
WdtSalesTradeQueryQueryWithDetailDto
response
=
null
;
try
{
response
=
client
.
execute
(
request
);
log
.
info
(
response
.
getBody
());
}
catch
(
ApiException
e
)
{
throw
new
RuntimeException
(
e
);
}
if
(
ObjectUtils
.
isNotEmpty
(
response
)
&&
response
.
getFlag
().
equals
(
"failure"
))
{
log
.
error
(
"奇门加载数据异常:"
+
response
.
getMessage
()
+
response
.
getSubMessage
()
+
URLUtil
.
decode
(
response
.
getRequestUrl
()));
throw
new
ServiceException
(
"奇门加载数据异常:"
+
response
.
getMessage
()
+
response
.
getSubMessage
());
}
// 转换返回的json字符串结果
String
body
=
response
.
getBody
();
WdtQimenBodyDto
wdtQimenBodyDto
=
JSONUtil
.
toBean
(
body
,
WdtQimenBodyDto
.
class
);
WdtQimenResponseDto
wdtQimenResponseDto
=
wdtQimenBodyDto
.
getResponse
();
SyncOrderDetailDto
detailDto
=
new
SyncOrderDetailDto
();
detailDto
.
setMethod
(
method
);
return
detailDto
;
}
/**
* 多线程调用此方法
...
...
@@ -82,7 +149,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
CollectOrderLogDto
collectOrderLog
=
orderLogInfoDao
.
selectOrderSyncLatest
(
syncType
,
method
);
// 调用新方法设置时间范围
detailDto
.
setupTimeRange
(
60
,
collectOrderLog
);
detailDto
.
setupTimeRange
(
60
,
collectOrderLog
);
startTime
=
detailDto
.
getStartTime
();
endTime
=
detailDto
.
getEndTime
();
...
...
@@ -106,11 +173,11 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
String
wdtSalt
=
wdtAppSecret
.
split
(
":"
)[
1
];
String
wdtSecret
=
wdtAppSecret
.
split
(
":"
)[
0
];
String
wdtAppKey
=
wdtQimenConfig
.
getWdtAppKey
();
;
String
targetAppSecret
=
wdtQimenConfig
.
getTargetAppSecret
();
;
String
wdtSid
=
wdtQimenConfig
.
getWdtSid
();
;
Long
pageNo
=
1L
;
Long
totalPage
=
1L
;
Integer
totalCount
=
1
;
...
...
@@ -139,9 +206,9 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
request
.
setWdtSign
(
WdtQimenUtil
.
getQimenCustomWdtSign
(
request
,
wdtSecret
));
WdtSalesTradeQueryQueryWithDetailDto
response
=
client
.
execute
(
request
);
if
(
ObjectUtils
.
isNotEmpty
(
response
)
&&
response
.
getFlag
().
equals
(
"failure"
))
{
log
.
error
(
"奇门加载数据异常:"
+
response
.
getMessage
()+
response
.
getSubMessage
()
+
URLUtil
.
decode
(
response
.
getRequestUrl
()));
throw
new
ServiceException
(
"奇门加载数据异常:"
+
response
.
getMessage
()+
response
.
getSubMessage
());
if
(
ObjectUtils
.
isNotEmpty
(
response
)
&&
response
.
getFlag
().
equals
(
"failure"
))
{
log
.
error
(
"奇门加载数据异常:"
+
response
.
getMessage
()
+
response
.
getSubMessage
()
+
URLUtil
.
decode
(
response
.
getRequestUrl
()));
throw
new
ServiceException
(
"奇门加载数据异常:"
+
response
.
getMessage
()
+
response
.
getSubMessage
());
}
// 转换返回的json字符串结果
String
body
=
response
.
getBody
();
...
...
@@ -150,11 +217,11 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
WdtQimenDataDto
wdtQimenDataDto
=
wdtQimenResponseDto
.
getData
();
totalCount
=
wdtQimenDataDto
.
getTotalCount
();
totalPage
=
totalCount
/
pager
.
getPageSize
()
+
1
;
totalPage
=
totalCount
/
pager
.
getPageSize
()
+
1
;
List
<
WdtQimenOrder
>
orderSubResult
=
wdtQimenDataDto
.
getOrder
();
if
(
ObjectUtils
.
isEmpty
(
orderSubResult
))
{
log
.
warn
(
"当前查询没有数据,奇门加载数据异常:"
+
response
.
getMessage
()+
response
.
getSubMessage
()
+
URLUtil
.
decode
(
response
.
getRequestUrl
()));
log
.
warn
(
"当前查询没有数据,奇门加载数据异常:"
+
response
.
getMessage
()
+
response
.
getSubMessage
()
+
URLUtil
.
decode
(
response
.
getRequestUrl
()));
// throw new ServiceException("旺店通没有查询到订单数据");
}
orderResult
.
addAll
(
orderSubResult
);
...
...
@@ -181,7 +248,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
order
.
setSyncType
(
syncType
);
order
.
setCreateTime
(
new
Date
());
order
.
setUpdateTime
(
new
Date
());
order
.
setCreatedDate
(
new
Date
(
Long
.
valueOf
(
order
.
getCreated
())));
order
.
setCreatedDate
(
new
Date
(
Long
.
valueOf
(
order
.
getCreated
())));
});
orderDao
.
saveOrUpdateBatch
(
orderResult
);
...
...
@@ -204,9 +271,11 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
orderDetail
.
setTradeTime
(
order
.
getTradeTime
());
orderDetail
.
setBatchNo
(
batchNo
);
orderDetail
.
setTradeNo
(
order
.
getTradeNo
());
if
(
ObjectUtils
.
isEmpty
(
orderDetail
.
getPayTime
()))
{
if
(
ObjectUtils
.
isEmpty
(
orderDetail
.
getPayTime
()))
{
orderDetail
.
setPayTime
(
order
.
getPayTime
());
}
orderDetail
.
setOrderPayTime
(
order
.
getPayTime
());
// 计算分销信息
orderDetail
.
setFenxiaoNick
(
order
.
getFenxiaoNick
());
orderDetail
.
setFenxiaoId
(
orderDetail
.
getFenxiaoId
(
order
,
orderDetail
.
getTradeId
()));
...
...
@@ -231,7 +300,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
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.setShareAmount(new BigDecimal(0));
orderDetail
.
setActualCost
(
new
BigDecimal
(
0
));
orderDetail
.
setStandardCost
(
new
BigDecimal
(
0
));
orderDetail
.
setSumActualCost
(
new
BigDecimal
(
0
));
...
...
src/main/java/com/sfa/job/spi/ShardingJdbcNacosURLProvider.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
spi
;
import
com.alibaba.cloud.nacos.NacosConfigProperties
;
import
com.alibaba.nacos.api.config.ConfigService
;
import
com.alibaba.nacos.shaded.com.google.common.base.Preconditions
;
import
com.sfa.common.core.utils.StringUtils
;
import
com.sfa.job.util.NacosConfigiServiceUtils
;
import
lombok.SneakyThrows
;
import
org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLProvider
;
import
java.nio.charset.StandardCharsets
;
public
final
class
ShardingJdbcNacosURLProvider
implements
ShardingSphereURLProvider
{
private
static
final
String
CLASSPATH_TYPE
=
"nacos:"
;
private
static
final
String
URL_PREFIX
=
"jdbc:shardingsphere:"
;
@Override
public
boolean
accept
(
String
url
)
{
return
StringUtils
.
isNotEmpty
(
url
)
&&
url
.
contains
(
CLASSPATH_TYPE
);
}
@SneakyThrows
@Override
public
byte
[]
getContent
(
String
url
,
String
urlPrefix
)
{
String
dataId
=
url
.
substring
(
CLASSPATH_TYPE
.
length
()
+
URL_PREFIX
.
length
());
Preconditions
.
checkArgument
(!
dataId
.
isEmpty
(),
"Nacos namespace is required in ShardingSphere dataId."
);
NacosConfigProperties
nacosConfigProperties
=
NacosConfigiServiceUtils
.
getNacosConfigProperties
();
ConfigService
configService
=
nacosConfigProperties
.
configServiceInstance
();
String
content
=
configService
.
getConfig
(
dataId
,
nacosConfigProperties
.
getGroup
(),
nacosConfigProperties
.
getTimeout
());
return
content
.
getBytes
(
StandardCharsets
.
UTF_8
);
}
}
src/main/java/com/sfa/job/util/NacosConfigiServiceUtils.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
util
;
import
com.alibaba.cloud.nacos.NacosConfigProperties
;
public
class
NacosConfigiServiceUtils
{
private
static
NacosConfigProperties
nacosConfigProperties
;
public
static
void
init
(
NacosConfigProperties
properties
){
nacosConfigProperties
=
properties
;
}
public
static
NacosConfigProperties
getNacosConfigProperties
()
{
return
nacosConfigProperties
;
}
}
src/main/java/com/sfa/job/xxljob/order/WdtQimenOrderPayTImeTask.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
xxljob
.
order
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.http.HttpStatus
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.job.pojo.response.SyncOrderDetailDto
;
import
com.sfa.job.service.order.IWdtQimenOrderPayTimeSyncService
;
import
com.xxl.job.core.context.XxlJobContext
;
import
com.xxl.job.core.context.XxlJobHelper
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
/**
* @author : 吕本才
* @date : 2025年09月26日
* @describe : 旺店通奇门订单数据-分表采集
*/
@Component
@Slf4j
public
class
WdtQimenOrderPayTImeTask
{
@Autowired
IWdtQimenOrderPayTimeSyncService
qimenOrderPayTimeSyncService
;
/**
* 同步财务订单数据
*/
@XxlJob
(
"syncOrderQimenDetailPayTime"
)
public
SyncOrderDetailDto
syncWdtQimenOrderDetail
()
{
Long
st
=
System
.
currentTimeMillis
();
// 暂不考虑分片
XxlJobContext
xxlJobContext
=
XxlJobContext
.
getXxlJobContext
();
int
shardingTotalCount
=
xxlJobContext
.
getShardTotal
();
int
shardingItem
=
xxlJobContext
.
getShardIndex
();
XxlJobHelper
.
log
(
">>>>>>>>>>syncWangdiantongOrderDetail Job start<<<<<<<<<<"
);
String
jobParam
=
xxlJobContext
.
getJobParam
();
boolean
jsonFlag
=
JSONUtil
.
isJson
(
jobParam
);
Date
startTime
=
null
;
Date
endTime
=
null
;
if
(
jsonFlag
)
{
JSONObject
jobParamJson
=
JSONObject
.
parseObject
(
jobParam
);
startTime
=
jobParamJson
.
getDate
(
"startTime"
);
endTime
=
jobParamJson
.
getDate
(
"endTime"
);
}
// 简单模拟分片处理,这里输出每个分片的信息
XxlJobHelper
.
log
(
"分片总数: "
+
shardingTotalCount
+
", 当前分片: "
+
shardingItem
);
XxlJobHelper
.
log
(
"xxl-job开始同步-旺店通订单明细api接口数据"
);
// 定时任务不设定开始时间和结束时间 0 定时任务 按照修改时间同步 1 手动同步按照修改时间同步 2表示按照 定时任务支付时间时间段同步 3表示按照接口支付时间时间段同步
SyncOrderDetailDto
detailDto
=
qimenOrderPayTimeSyncService
.
syncWdtQimenOrder
(
startTime
,
endTime
,
2
,
200L
);
XxlJobHelper
.
log
(
"xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}"
,
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
()));
if
(
ObjectUtil
.
equals
(
HttpStatus
.
HTTP_OK
,
detailDto
.
getCode
()))
{
XxlJobHelper
.
handleSuccess
(
JSONObject
.
toJSONString
(
detailDto
));
}
else
{
XxlJobHelper
.
handleFail
(
detailDto
.
getMessage
());
}
return
detailDto
;
}
}
src/main/resources/META-INF/services/org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereURLProvider
0 → 100644
浏览文件 @
6dd812a6
com.sfa.job.spi.ShardingJdbcNacosURLProvider
src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
0 → 100644
浏览文件 @
6dd812a6
src/main/resources/mapper/order/WdtQimenOrderDetailMapper.xml
浏览文件 @
6dd812a6
...
...
@@ -20,7 +20,7 @@
#{item.weight}, #{item.imgUrl}, #{item.actualNum}, #{item.barcode}, #{item.paid},
#{item.suiteId}, #{item.bindOid}, #{item.printSuiteMode}, #{item.flag}, #{item.stockState},
#{item.isConsigned}, #{item.isReceived}, #{item.cid}, #{item.modifiedDate}, #{item.createdDate},
#{item.sharePostPrice}, #{item.invoiceContent}, #{item.payTime}, #{item.shortName},
#{item.sharePostPrice}, #{item.invoiceContent}, #{item.payTime}, #{item.
orderPayTime}, #{item.
shortName},
#{item.fenxiaoNick}, #{item.fenxiaoId}, #{item.fenxiaoName}, #{item.batchNo},
#{item.startTime}, #{item.endTime}, #{item.tradeNo}, #{item.shopNo}, #{item.shopName},
#{item.shopRemark}, #{item.tradeStatus}, #{item.tradeTime}, #{item.consignTime},
...
...
@@ -92,6 +92,7 @@
share_post_price = VALUES(share_post_price),
invoice_content = VALUES(invoice_content),
pay_time = VALUES(pay_time),
order_pay_time = VALUES(order_pay_time),
short_name = VALUES(short_name),
fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
...
...
@@ -150,7 +151,7 @@
suite_discount, api_goods_name, api_spec_name, api_goods_id, api_spec_id, goods_id, spec_id,
commission, goods_type, from_mask, remark, modified, created, prop1, prop2, weight, img_url,
actual_num, barcode, paid, suite_id, bind_oid, print_suite_mode, flag, stock_state, is_consigned,
is_received, cid, modified_date, created_date, share_post_price, invoice_content, pay_time, short_name,
is_received, cid, modified_date, created_date, share_post_price, invoice_content, pay_time,
order_pay_time,
short_name,
fenxiao_nick, fenxiao_id, fenxiao_name, batch_no, start_time, end_time, trade_no, shop_no, shop_name,
shop_remark, trade_status, trade_time, consign_time, receiver_area, zbj_name, zbj_id, zbj_zb_id,
zbj_sale_type, zbj_qd_type, receivable, spec_name_erp, flavor_erp, sync_type, actual_cost,
...
...
@@ -218,7 +219,8 @@
<result
column=
"created_date"
property=
"createdDate"
jdbcType=
"VARCHAR"
/>
<result
column=
"share_post_price"
property=
"sharePostPrice"
jdbcType=
"DECIMAL"
/>
<result
column=
"invoice_content"
property=
"invoiceContent"
jdbcType=
"VARCHAR"
/>
<result
column=
"pay_time"
property=
"payTime"
jdbcType=
"VARCHAR"
/>
<result
column=
"pay_time"
property=
"payTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"order_pay_time"
property=
"orderPayTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"short_name"
property=
"shortName"
jdbcType=
"VARCHAR"
/>
<result
column=
"fenxiao_nick"
property=
"fenxiaoNick"
jdbcType=
"VARCHAR"
/>
<result
column=
"fenxiao_id"
property=
"fenxiaoId"
jdbcType=
"VARCHAR"
/>
...
...
src/main/resources/mapper/order/WdtQimenOrderDetailPayTimeMapper.xml
0 → 100644
浏览文件 @
6dd812a6
差异被折叠。
点击展开。
src/main/resources/mapper/order/WdtQimenOrderMapper.xml
浏览文件 @
6dd812a6
...
...
@@ -186,7 +186,7 @@
INSERT INTO wdt_qimen_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,
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,
...
...
src/main/resources/mapper/order/WdtQimenOrderPayTimeMapper.xml
0 → 100644
浏览文件 @
6dd812a6
差异被折叠。
点击展开。
src/test/java/com/sfa/job/config/ShardingTableTest.java
0 → 100644
浏览文件 @
6dd812a6
package
com
.
sfa
.
job
.
config
;
import
cn.hutool.core.date.LocalDateTimeUtil
;
import
com.sfa.job.domain.order.dao.WdtQimenOrderPayTimeDao
;
import
com.sfa.job.domain.order.entity.WdtQimenOrderPayTime
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.extension.ExtendWith
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.ActiveProfiles
;
import
org.springframework.test.context.junit.jupiter.SpringExtension
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.math.BigDecimal
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.Random
;
/**
* ShardingSphere分表功能测试类
* 用于验证YearBasedShardingAlgorithm分片算法是否正确工作
*/
@ExtendWith
(
SpringExtension
.
class
)
@SpringBootTest
// 关键注解:指定profile为test
@ActiveProfiles
(
"test"
)
@Slf4j
public
class
ShardingTableTest
{
@Autowired
private
WdtQimenOrderPayTimeDao
wdtQimenOrderPayTimeDao
;
/**
* 测试插入不同年份的数据是否能正确路由到对应的分表
*/
@Test
public
void
testShardingInsert
()
{
log
.
info
(
"开始测试分表插入功能..."
);
// 创建并插入2023年的订单
insertOrderWithSpecificYear
(
2023
);
// 创建并插入2024年的订单
insertOrderWithSpecificYear
(
2024
);
// 创建并插入2025年的订单
insertOrderWithSpecificYear
(
2025
);
System
.
out
.
println
(
"分表插入测试完成,请检查各年份表数据!"
);
}
/**
* 创建并插入指定年份的订单数据
* @param year 年份
*/
private
void
insertOrderWithSpecificYear
(
int
year
)
{
WdtQimenOrderPayTime
order
=
new
WdtQimenOrderPayTime
();
// 设置基本字段
order
.
setTradeId
(
System
.
currentTimeMillis
());
order
.
setTradeNo
(
"TEST_"
+
year
+
"_"
+
new
Random
().
nextInt
(
10000
));
order
.
setShopId
(
1
);
order
.
setShopNo
(
"SHOP001"
);
order
.
setPlatformId
(
11
);
order
.
setShopName
(
"测试店铺"
);
order
.
setTradeStatus
(
10
);
// 未付款状态
order
.
setTradeType
(
1
);
// 网店销售
// order.setPayTime(LocalDateTimeUtil.now());
order
.
setCreated
(
String
.
valueOf
(
System
.
currentTimeMillis
()));
order
.
setCreatedDate
(
new
Date
());
order
.
setDelFlag
(
0
);
order
.
setCreateTime
(
new
Date
());
order
.
setUpdateTime
(
new
Date
());
order
.
setDeliveryTerm
(
1
);
order
.
setRefundStatus
(
1
);
order
.
setFenxiaoType
(
11
);
order
.
setBadReason
(
1
);
order
.
setGoodsTypeCount
(
new
BigDecimal
(
1
));
order
.
setGoodsCount
(
new
BigDecimal
(
1
));
order
.
setGoodsAmount
(
new
BigDecimal
(
1
));
order
.
setPostAmount
(
new
BigDecimal
(
1
));
order
.
setOtherAmount
(
new
BigDecimal
(
1
));
order
.
setDiscount
(
new
BigDecimal
(
1
));
order
.
setDiscount
(
new
BigDecimal
(
1
));
order
.
setReceivable
(
new
BigDecimal
(
1
));
order
.
setCodAmount
(
new
BigDecimal
(
1
));
order
.
setExtCodFee
(
new
BigDecimal
(
1
));
order
.
setGoodsCost
(
new
BigDecimal
(
1
));
order
.
setPostCost
(
new
BigDecimal
(
1
));
order
.
setWeight
(
new
BigDecimal
(
1
));
order
.
setProfit
(
new
BigDecimal
(
1
));
order
.
setTax
(
new
BigDecimal
(
1
));
order
.
setTaxRate
(
new
BigDecimal
(
1
));
order
.
setCommission
(
new
BigDecimal
(
1
));
order
.
setInvoiceType
(
1
);
order
.
setTradeFrom
(
1
);
order
.
setRawGoodsCount
(
new
BigDecimal
(
1
));
order
.
setRawGoodsTypeCount
(
1
);
order
.
setCurrency
(
"CNY"
);
order
.
setCreated
(
"1"
);
order
.
setCreatedDate
(
new
Date
());
order
.
setTradeMask
(
1
);
order
.
setPackageCost
(
new
BigDecimal
(
1
));
order
.
setPaid
(
new
BigDecimal
(
1
));
order
.
setLargeType
(
1
);
order
.
setGiftMask
(
1
);
order
.
setOtherCost
(
new
BigDecimal
(
1
));
order
.
setIsSealed
(
true
);
order
.
setCustomerType
(
1
);
order
.
setDelFlag
(
1
);
order
.
setUpdateTime
(
new
Date
());
order
.
setBatchNo
(
"TEST_"
+
year
);
// 设置不同年份的支付时间,这是分片的关键字段
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
year
,
0
,
1
,
0
,
0
,
0
);
order
.
setPayTime
(
LocalDateTimeUtil
.
of
(
calendar
.
getTime
()));
log
.
info
(
"插入"
+
year
+
"年订单,payTime: "
+
order
.
getPayTime
());
// 由于是测试环境,这里可能需要特殊处理批量保存
// 注意:实际环境中应该使用业务层方法进行保存
wdtQimenOrderPayTimeDao
.
saveOrUpdateBatch
(
java
.
util
.
Collections
.
singletonList
(
order
));
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论