Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
75fac6c2
提交
75fac6c2
authored
8月 06, 2024
作者:
刘海泉
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改最后一车的相关代码
上级
e3a2d699
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
15 行增加
和
12 行删除
+15
-12
LastTruckController.java
...om/clx/performance/controller/pc/LastTruckController.java
+5
-1
OrderChildDtsListener.java
...a/com/clx/performance/listener/OrderChildDtsListener.java
+2
-2
LastTruckService.java
...in/java/com/clx/performance/service/LastTruckService.java
+1
-2
LastTruckServiceImpl.java
...om/clx/performance/service/impl/LastTruckServiceImpl.java
+7
-7
没有找到文件。
performance-web/src/main/java/com/clx/performance/controller/pc/LastTruckController.java
浏览文件 @
75fac6c2
package
com
.
clx
.
performance
.
controller
.
pc
;
package
com
.
clx
.
performance
.
controller
.
pc
;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.service.LastTruckService
;
import
com.clx.performance.service.LastTruckService
;
import
com.clx.performance.struct.OrderChildStruct
;
import
com.clx.performance.vo.app.OrderChildVO
;
import
com.clx.performance.vo.app.OrderChildVO
;
import
com.msl.common.result.Result
;
import
com.msl.common.result.Result
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
...
@@ -32,13 +34,15 @@ import javax.validation.constraints.NotBlank;
...
@@ -32,13 +34,15 @@ import javax.validation.constraints.NotBlank;
public
class
LastTruckController
{
public
class
LastTruckController
{
private
final
LastTruckService
lastTruckService
;
private
final
LastTruckService
lastTruckService
;
private
final
OrderChildStruct
orderChildStruct
;
@ApiOperation
(
value
=
"查询订单下的最后一车"
,
notes
=
"<br>By:刘海泉"
)
@ApiOperation
(
value
=
"查询订单下的最后一车"
,
notes
=
"<br>By:刘海泉"
)
@GetMapping
(
"/getOrderLastTruck"
)
@GetMapping
(
"/getOrderLastTruck"
)
public
Result
<
OrderChildVO
>
getOrderLastTruck
(
@RequestParam
(
"orderNo"
)
public
Result
<
OrderChildVO
>
getOrderLastTruck
(
@RequestParam
(
"orderNo"
)
@NotBlank
(
message
=
"订单编号不能为空"
)
String
orderNo
)
throws
Exception
{
@NotBlank
(
message
=
"订单编号不能为空"
)
String
orderNo
)
throws
Exception
{
return
Result
.
ok
(
lastTruckService
.
getOrderLastTruck
(
orderNo
));
OrderChild
child
=
lastTruckService
.
getOrderLastTruck
(
orderNo
);
return
Result
.
ok
(
orderChildStruct
.
convert
(
child
));
}
}
...
...
performance-web/src/main/java/com/clx/performance/listener/OrderChildDtsListener.java
浏览文件 @
75fac6c2
...
@@ -217,7 +217,7 @@ public class OrderChildDtsListener {
...
@@ -217,7 +217,7 @@ public class OrderChildDtsListener {
}
}
}
}
public
void
syncLastTruck
(
FeignOrderVO
orderInfoFeign
,
OrderChildMessage
after
){
public
void
syncLastTruck
(
FeignOrderVO
orderInfoFeign
,
OrderChildMessage
after
)
{
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
if
(
Objects
.
equals
(
com
.
clx
.
open
.
sdk
.
enums
.
OrderChildEnum
.
Status
.
COMMON_CANCEL
.
getCode
(),
after
.
getStatus
())
||
if
(
Objects
.
equals
(
com
.
clx
.
open
.
sdk
.
enums
.
OrderChildEnum
.
Status
.
COMMON_CANCEL
.
getCode
(),
after
.
getStatus
())
||
(
after
.
getStatus
()
>=
OrderChildEnum
.
Status
.
ARRIVE_RECEIVE
.
getCode
()
&&
after
.
getStatus
()
<=
OrderChildEnum
.
Status
.
COMPLETE
.
getCode
())){
(
after
.
getStatus
()
>=
OrderChildEnum
.
Status
.
ARRIVE_RECEIVE
.
getCode
()
&&
after
.
getStatus
()
<=
OrderChildEnum
.
Status
.
COMPLETE
.
getCode
())){
...
@@ -229,7 +229,7 @@ public class OrderChildDtsListener {
...
@@ -229,7 +229,7 @@ public class OrderChildDtsListener {
Objects
.
nonNull
(
byCode
)?
byCode
.
getName
():
"未知状态"
);
Objects
.
nonNull
(
byCode
)?
byCode
.
getName
():
"未知状态"
);
child
=
lastTruckService
.
getOrderCompleteLastTruck
(
after
.
getOrderNo
());
child
=
lastTruckService
.
getOrderCompleteLastTruck
(
after
.
getOrderNo
());
}
else
{
// 订单除 已完成 || 已完结 外的其他状态
}
else
{
// 订单除 已完成 || 已完结 外的其他状态
child
=
lastTruckService
.
get
LastTruckChild
(
after
.
getOrderNo
());
child
=
lastTruckService
.
get
OrderLastTruck
(
after
.
getOrderNo
());
}
}
if
(
Objects
.
nonNull
(
child
)){
if
(
Objects
.
nonNull
(
child
)){
lastTruckService
.
syncLastTruckChild
(
child
);
lastTruckService
.
syncLastTruckChild
(
child
);
...
...
performance-web/src/main/java/com/clx/performance/service/LastTruckService.java
浏览文件 @
75fac6c2
package
com
.
clx
.
performance
.
service
;
package
com
.
clx
.
performance
.
service
;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.vo.app.OrderChildVO
;
import
com.msl.common.result.Result
;
import
com.msl.common.result.Result
;
public
interface
LastTruckService
{
public
interface
LastTruckService
{
...
@@ -15,7 +14,7 @@ public interface LastTruckService {
...
@@ -15,7 +14,7 @@ public interface LastTruckService {
Result
<?>
syncLastTruckChild4OrderTrigger
(
String
orderNo
);
Result
<?>
syncLastTruckChild4OrderTrigger
(
String
orderNo
);
OrderChild
VO
getOrderLastTruck
(
String
orderNo
)
throws
Exception
;
OrderChild
getOrderLastTruck
(
String
orderNo
)
;
...
...
performance-web/src/main/java/com/clx/performance/service/impl/LastTruckServiceImpl.java
浏览文件 @
75fac6c2
...
@@ -14,11 +14,11 @@ import com.clx.performance.dao.OrderChildDao;
...
@@ -14,11 +14,11 @@ import com.clx.performance.dao.OrderChildDao;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.service.LastTruckService
;
import
com.clx.performance.service.LastTruckService
;
import
com.clx.performance.struct.OrderChildStruct
;
import
com.clx.performance.struct.OrderChildStruct
;
import
com.clx.performance.vo.app.OrderChildVO
;
import
com.msl.common.exception.ServiceSystemException
;
import
com.msl.common.exception.ServiceSystemException
;
import
com.msl.common.result.Result
;
import
com.msl.common.result.Result
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.exception.ExceptionUtils
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.RedisTemplate
;
...
@@ -120,8 +120,7 @@ public class LastTruckServiceImpl implements LastTruckService {
...
@@ -120,8 +120,7 @@ public class LastTruckServiceImpl implements LastTruckService {
//调用此方法前查订单是否存在最后一车,存在则不进行该方法调用
//调用此方法前查订单是否存在最后一车,存在则不进行该方法调用
@Override
@Override
public
OrderChildVO
getOrderLastTruck
(
String
orderNo
)
throws
Exception
{
public
OrderChild
getOrderLastTruck
(
String
orderNo
){
FeignOrderVO
orderInfo
=
orderFeign
.
getOrderInfoFeign
(
orderNo
);
FeignOrderVO
orderInfo
=
orderFeign
.
getOrderInfoFeign
(
orderNo
);
if
(
Objects
.
isNull
(
orderInfo
)){
if
(
Objects
.
isNull
(
orderInfo
)){
log
.
error
(
"计算订单最后一车,通过订单号:{},未查询到对应的订单"
,
orderNo
);
log
.
error
(
"计算订单最后一车,通过订单号:{},未查询到对应的订单"
,
orderNo
);
...
@@ -131,13 +130,11 @@ public class LastTruckServiceImpl implements LastTruckService {
...
@@ -131,13 +130,11 @@ public class LastTruckServiceImpl implements LastTruckService {
//为每个货主的订单进行加锁,计算最后一车进行排队,防止多个运单dts监听并发导致最后一车重复计算
//为每个货主的订单进行加锁,计算最后一车进行排队,防止多个运单dts监听并发导致最后一车重复计算
RLock
lock
=
redissonClient
.
getLock
(
RedissonConstants
.
CALC_ORDER_LAST_TRUCK_LOCK
+
orderNo
);
RLock
lock
=
redissonClient
.
getLock
(
RedissonConstants
.
CALC_ORDER_LAST_TRUCK_LOCK
+
orderNo
);
try
{
try
{
String
lastTruckCacheKey
=
getLastTruckCacheKey
(
orderNo
);
String
lastTruckCacheKey
=
getLastTruckCacheKey
(
orderNo
);
//已经计算出最后一车,则直接返回运单信息
//已经计算出最后一车,则直接返回运单信息
if
(
Objects
.
equals
(
Boolean
.
TRUE
,
redisTemplate
.
hasKey
(
lastTruckCacheKey
))){
if
(
Objects
.
equals
(
Boolean
.
TRUE
,
redisTemplate
.
hasKey
(
lastTruckCacheKey
))){
String
childNo
=
redisTemplate
.
opsForValue
().
get
(
lastTruckCacheKey
);
String
childNo
=
redisTemplate
.
opsForValue
().
get
(
lastTruckCacheKey
);
OrderChild
child
=
orderChildDao
.
getByChildNo
(
childNo
).
orElseThrow
(
ResultEnum
.
DATA_NOT_FIND
);
return
orderChildDao
.
getByChildNo
(
childNo
).
orElseThrow
(
ResultEnum
.
DATA_NOT_FIND
);
return
orderChildStruct
.
convert
(
child
);
}
}
boolean
flag
=
lock
.
tryLock
(
15
,
30
,
TimeUnit
.
SECONDS
);
boolean
flag
=
lock
.
tryLock
(
15
,
30
,
TimeUnit
.
SECONDS
);
if
(!
flag
)
{
if
(!
flag
)
{
...
@@ -154,14 +151,17 @@ public class LastTruckServiceImpl implements LastTruckService {
...
@@ -154,14 +151,17 @@ public class LastTruckServiceImpl implements LastTruckService {
log
.
info
(
"当前订单计算出最后一车,运单编号:{} "
,
child
.
getChildNo
());
log
.
info
(
"当前订单计算出最后一车,运单编号:{} "
,
child
.
getChildNo
());
//更新订单最后一车到缓存,并设置有效期为60天
//更新订单最后一车到缓存,并设置有效期为60天
redisTemplate
.
opsForValue
().
set
(
getLastTruckCacheKey
(
orderNo
),
child
.
getChildNo
(),
60
,
TimeUnit
.
DAYS
);
redisTemplate
.
opsForValue
().
set
(
getLastTruckCacheKey
(
orderNo
),
child
.
getChildNo
(),
60
,
TimeUnit
.
DAYS
);
return
orderChildStruct
.
convert
(
child
)
;
return
child
;
}
}
return
null
;
return
null
;
}
catch
(
InterruptedException
e
){
log
.
warn
(
"计算订单最后一车发生异常,异常原因:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
}
finally
{
}
finally
{
if
(
lock
.
isLocked
()
&&
lock
.
isHeldByCurrentThread
())
{
if
(
lock
.
isLocked
()
&&
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
lock
.
unlock
();
}
}
}
}
return
null
;
}
}
public
String
getLastTruckCacheKey
(
String
orderNo
){
public
String
getLastTruckCacheKey
(
String
orderNo
){
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论