Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
cca5b784
提交
cca5b784
authored
9月 21, 2023
作者:
liruixin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
提前生成运单号
上级
595cc54b
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
61 行增加
和
33 行删除
+61
-33
OrderNoGenerateJob.java
...main/java/com/clx/performance/job/OrderNoGenerateJob.java
+19
-33
UniqueOrderNumService.java
...m/clx/performance/service/impl/UniqueOrderNumService.java
+42
-0
没有找到文件。
performance-web/src/main/java/com/clx/performance/job/OrderNoGenerateJob.java
浏览文件 @
cca5b784
/*
package
com
.
clx
.
performance
.
job
;
import
com.baomidou.mybatisplus.core.toolkit.CollectionUtils
;
...
...
@@ -8,7 +7,6 @@ import lombok.extern.slf4j.Slf4j;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import org.springframework.data.redis.core.ListOperations;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Component
;
...
...
@@ -29,26 +27,22 @@ public class OrderNoGenerateJob implements InitializingBean {
@Autowired
private
ThreadPoolExecutor
executor
;
@Resource
private ListOperations<String, Object> opsForListJson;
@Resource
private
RedisTemplate
<
String
,
Object
>
jsonTemplate
;
*/
/**
/**
* 每天早上2点生成第二天的订单号 cron = "0 0 2 * * ?"
*
* 提前生成订单号
*//*
*/
@XxlJob
(
"generateOrderNo"
)
public void generateOrderNo()
throws InterruptedException {
public
void
generateOrderNo
()
throws
InterruptedException
{
LocalDateTime
today
=
LocalDateTime
.
now
();
//检验今天的订单池有没有,没有就生成一套
String
todayKey
=
RedisConstants
.
CARRIER_ORDER_NUM_POOL_KEY
.
replace
(
"{date}"
,
today
.
format
(
DateTimeFormatter
.
BASIC_ISO_DATE
));
Integer orderNum = (Integer)
opsForListJson
.leftPop(todayKey);
Integer
orderNum
=
(
Integer
)
jsonTemplate
.
opsForList
()
.
leftPop
(
todayKey
);
if
(
null
==
orderNum
){
log
.
warn
(
"开始生成订单池: key->{}"
,
todayKey
);
saveUniqueOrderNumList
(
todayKey
,
generateOrderNumList
());
...
...
@@ -58,7 +52,7 @@ public class OrderNoGenerateJob implements InitializingBean {
LocalDateTime
tomorrow
=
today
.
plusDays
(
1
);
//检验明天的订单池,没有就生成一套
String
tomorrowKey
=
RedisConstants
.
CARRIER_ORDER_NUM_POOL_KEY
.
replace
(
"{date}"
,
tomorrow
.
format
(
DateTimeFormatter
.
BASIC_ISO_DATE
));
orderNum = (Integer)
opsForListJson
.leftPop(tomorrowKey);
orderNum
=
(
Integer
)
jsonTemplate
.
opsForList
()
.
leftPop
(
tomorrowKey
);
if
(
null
==
orderNum
){
log
.
warn
(
"开始生成订单池: key->{}"
,
tomorrowKey
);
saveUniqueOrderNumList
(
tomorrowKey
,
generateOrderNumList
());
...
...
@@ -71,22 +65,22 @@ public class OrderNoGenerateJob implements InitializingBean {
*/
/**
/**
* 保存到Redis
* @author
* @param key
* @param data
*//*
*/
private
void
saveUniqueOrderNumList
(
String
key
,
List
data
)
{
if
(
StringUtils
.
isBlank
(
key
)){
log
.
info
(
key
,
"key不能为空"
);
return
;
}
if
(
CollectionUtils
.
isEmpty
(
data
)){
log
.
info
(
key
,
"data不能为空"
);
return
;
}
for
(
int
i
=
0
,
j
=
0
;
i
<
data
.
size
();
i
+=
10000
){
...
...
@@ -98,7 +92,7 @@ public class OrderNoGenerateJob implements InitializingBean {
j
=
data
.
size
();
}
try
{
opsForListJson
.leftPushAll(key, data.subList(i, j));
jsonTemplate
.
opsForList
()
.
leftPushAll
(
key
,
data
.
subList
(
i
,
j
));
}
catch
(
Exception
e
){
e
.
printStackTrace
();
continue
;
...
...
@@ -107,13 +101,11 @@ public class OrderNoGenerateJob implements InitializingBean {
}
*/
/**
/**
* 生成乱序的6位的订单编号
* @author
* @return 乱序的6位订单编号从100000到999999
*//*
*/
private
List
<
Integer
>
generateOrderNumList
(){
List
<
Integer
>
orderNumList
=
new
ArrayList
<>();
for
(
Integer
i
=
100000
;
i
<
999999
;
++
i
){
...
...
@@ -123,15 +115,13 @@ public class OrderNoGenerateJob implements InitializingBean {
return
orderNumList
;
}
*/
/**
/**
* 交换
* @author
* @param data
* @param i
* @param j
*//*
*/
private
static
void
swap
(
List
<
Integer
>
data
,
int
i
,
int
j
)
{
if
(
i
==
j
)
{
return
;
...
...
@@ -141,13 +131,11 @@ public class OrderNoGenerateJob implements InitializingBean {
data
.
set
(
j
,
temp
);
}
*/
/**
/**
* 洗牌
* @author
* @param data
*//*
*/
private
static
void
shuffleSort
(
List
<
Integer
>
data
)
{
for
(
int
i
=
0
;
i
<
data
.
size
()
-
1
;
i
++)
{
int
j
=
ThreadLocalRandom
.
current
().
nextInt
(
data
.
size
());
...
...
@@ -155,11 +143,11 @@ public class OrderNoGenerateJob implements InitializingBean {
}
}
*/
/**
/**
* 初始化
* @throws Exception
*/
/*
*/
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
...
...
@@ -178,6 +166,4 @@ public class OrderNoGenerateJob implements InitializingBean {
}
*/
performance-web/src/main/java/com/clx/performance/service/impl/UniqueOrderNumService.java
0 → 100644
浏览文件 @
cca5b784
package
com
.
clx
.
performance
.
service
.
impl
;
import
com.clx.performance.constant.RedisConstants
;
import
com.clx.performance.enums.PerformanceResultEnum
;
import
com.msl.common.exception.ServiceSystemException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
java.util.concurrent.ThreadLocalRandom
;
@Slf4j
@Service
public
class
UniqueOrderNumService
{
@Autowired
RedisTemplate
<
String
,
Object
>
jsonTemplate
;
/**
* 获取指定日期唯一的订单号
* @param date 日期
* @return 所指定日期的唯一订单号
*/
public
String
getUniqueOrderNum
(
String
date
)
{
if
(
StringUtils
.
isBlank
(
date
)){
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
DATA_NOT_FIND
);
}
Integer
orderNum
=
(
Integer
)
jsonTemplate
.
opsForList
().
leftPop
(
RedisConstants
.
CARRIER_ORDER_NUM_POOL_KEY
.
replace
(
"{date}"
,
date
));
if
(
null
==
orderNum
){
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
DATA_NOT_FIND
);
}
return
new
StringBuilder
().
append
(
date
).
append
(
orderNum
).
append
(
String
.
format
(
"%02d"
,
ThreadLocalRandom
.
current
().
nextInt
(
99
))).
toString
();
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论