Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
4ce84c65
提交
4ce84c65
authored
11月 21, 2023
作者:
liuhaiquan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增货单小于35吨自动恢复的监听逻辑
上级
2fb031da
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
158 行增加
和
4 行删除
+158
-4
OrderCancelComponent.java
...a/com/clx/performance/component/OrderCancelComponent.java
+81
-4
RabbitKeyConstants.java
...java/com/clx/performance/constant/RabbitKeyConstants.java
+3
-0
OrderGoodsDtsListener.java
...a/com/clx/performance/listener/OrderGoodsDtsListener.java
+74
-0
没有找到文件。
performance-web/src/main/java/com/clx/performance/component/OrderCancelComponent.java
浏览文件 @
4ce84c65
...
...
@@ -3,14 +3,17 @@ package com.clx.performance.component;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.clx.order.enums.OrderEnum
;
import
com.clx.order.enums.UpdateEnum
;
import
com.clx.order.enums.VehicleUsageEnum
;
import
com.clx.order.feign.OrderFeign
;
import
com.clx.order.param.feign.RollbackOrderWeightParam
;
import
com.clx.order.vo.feign.FeignOrderInfoVO
;
import
com.clx.order.vo.feign.FeignOrderVO
;
import
com.clx.performance.dao.OrderChildDao
;
import
com.clx.performance.dao.OrderGoodsDao
;
import
com.clx.performance.enums.*
;
import
com.clx.performance.extranal.user.DriverService
;
import
com.clx.performance.extranal.user.OrderService
;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.param.pc.OrderCancelParam
;
...
...
@@ -20,6 +23,7 @@ import com.clx.performance.service.OrderGoodsTruckBindService;
import
com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService
;
import
com.clx.performance.service.child.OrderChildPostService
;
import
com.clx.user.enums.driver.DriverInfoEnum
;
import
com.msl.common.base.Optional
;
import
com.msl.common.exception.ServiceSystemException
;
import
com.msl.common.result.Result
;
import
com.msl.common.utils.DateUtils
;
...
...
@@ -30,10 +34,7 @@ import org.springframework.stereotype.Component;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Component
...
...
@@ -63,6 +64,8 @@ public class OrderCancelComponent implements InitializingBean {
private
final
OrderChildPostService
orderChildPostService
;
private
final
OrderService
orderService
;
public
List
<
String
>
ownerProcess
(
OrderCancelParam
param
)
{
String
orderNo
=
param
.
getOrderNo
();
List
<
OrderGoods
>
orderGoodsList
=
null
;
...
...
@@ -231,6 +234,80 @@ public class OrderCancelComponent implements InitializingBean {
}
}
/**
* @Author kavin
* @Description 货单低于35吨自动归还吨数到订单/货单吨数不够扣减,从订单上借吨数
* @Param [orderGoods, weight,updateType(1: 增加 2:减少)]
* @return
**/
public
void
backFillOrderWeight
(
OrderGoods
orderGoods
,
BigDecimal
weight
,
Integer
updateType
)
{
String
orderNo
=
orderGoods
.
getOrderNo
();
Optional
<
FeignOrderInfoVO
>
optional
=
orderService
.
getOrderInfo
(
orderNo
);
if
(!
optional
.
isPresent
()){
log
.
error
(
"通过订单号未查询到对应的订单信息,订单号:{}"
,
orderNo
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
DATA_NOT_FIND
);
}
FeignOrderInfoVO
orderInfo
=
optional
.
get
();
boolean
isSub
=
Objects
.
equals
(
UpdateEnum
.
SUB
.
getCode
(),
updateType
);
Integer
truckDemand
=
orderGoods
.
getTruckDemand
();
RollbackOrderWeightParam
rollbackOrderWeightParam
=
new
RollbackOrderWeightParam
();
rollbackOrderWeightParam
.
setOrderNo
(
orderGoods
.
getOrderNo
());
rollbackOrderWeightParam
.
setResidueWeight
(
weight
);
java
.
util
.
Optional
<
TruckDemandEnum
.
TruckType
>
byCode
=
TruckDemandEnum
.
TruckType
.
getByCode
(
truckDemand
);
String
truckDemandValue
=
byCode
.
isPresent
()?
byCode
.
get
().
getMsg
():
"未知用车需求"
;
java
.
util
.
Optional
<
UpdateEnum
>
byCode1
=
UpdateEnum
.
getByCode
(
updateType
);
String
updateTypeMsg
=
byCode1
.
isPresent
()?
byCode1
.
get
().
getMsg
():
"未知调整类型"
;
//归还吨数
if
(!
truckDemand
.
equals
(
TruckDemandEnum
.
TruckType
.
PLATFORM_ANY_CAR
.
getCode
()))
{
if
(
truckDemand
.
equals
(
TruckDemandEnum
.
TruckType
.
PLATFORM_CAR
.
getCode
()))
{
if
(
isSub
&&
weight
.
compareTo
(
orderInfo
.
getPlatformResidueCarryWeight
())
>
0
){
log
.
warn
(
"货单用车需求: {},订单号:{},货单号:{},平台剩余吨数:{},需要扣减吨数:{},不足扣减"
,
truckDemandValue
,
orderNo
,
orderGoods
.
getOrderGoodsNo
(),
orderInfo
.
getPlatformResidueCarryWeight
()
,
weight
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
ORDER_WEIGHT_LACK
);
}
rollbackOrderWeightParam
.
setOwnResidueCarryWeight
(
BigDecimal
.
ZERO
);
rollbackOrderWeightParam
.
setPlatformResidueCarryWeight
(
weight
);
}
else
if
(
truckDemand
.
equals
(
TruckDemandEnum
.
TruckType
.
OWNER_CAR
.
getCode
()))
{
if
(
isSub
&&
weight
.
compareTo
(
orderInfo
.
getOwnResidueCarryWeight
())
>
0
){
log
.
warn
(
"货单用车需求: {},订单号:{},货单号:{},自有剩余吨数:{},需要扣减吨数:{},不足扣减"
,
truckDemandValue
,
orderNo
,
orderGoods
.
getOrderGoodsNo
(),
orderInfo
.
getOwnResidueCarryWeight
()
,
weight
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
ORDER_WEIGHT_LACK
);
}
rollbackOrderWeightParam
.
setOwnResidueCarryWeight
(
weight
);
rollbackOrderWeightParam
.
setPlatformResidueCarryWeight
(
BigDecimal
.
ZERO
);
}
}
else
{
if
(
orderGoods
.
getVehicleUsage
().
equals
(
VehicleUsageEnum
.
Status
.
OWN
.
getCode
()))
{
if
(
isSub
&&
weight
.
compareTo
(
orderInfo
.
getOwnResidueCarryWeight
())
>
0
){
log
.
warn
(
"货单用车需求: {},订单号:{},货单号:{},自有剩余吨数:{},需要扣减吨数:{},不足扣减"
,
TruckDemandEnum
.
TruckType
.
PLATFORM_ANY_CAR
.
getMsg
(),
orderNo
,
orderGoods
.
getOrderGoodsNo
(),
orderInfo
.
getOwnResidueCarryWeight
(),
weight
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
ORDER_WEIGHT_LACK
);
}
rollbackOrderWeightParam
.
setPlatformResidueCarryWeight
(
BigDecimal
.
ZERO
);
rollbackOrderWeightParam
.
setOwnResidueCarryWeight
(
weight
);
}
else
{
if
(
isSub
&&
weight
.
compareTo
(
orderInfo
.
getPlatformResidueCarryWeight
())
>
0
){
log
.
warn
(
"货单用车需求: {},订单号:{},货单号:{},平台剩余吨数:{},需要扣减吨数:{},不足扣减"
,
truckDemandValue
,
orderNo
,
orderGoods
.
getOrderGoodsNo
(),
orderInfo
.
getPlatformResidueCarryWeight
(),
weight
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
ORDER_WEIGHT_LACK
);
}
rollbackOrderWeightParam
.
setPlatformResidueCarryWeight
(
weight
);
rollbackOrderWeightParam
.
setOwnResidueCarryWeight
(
BigDecimal
.
ZERO
);
}
}
Result
<
Object
>
result
=
orderFeign
.
rollbackOrderWeight
(
rollbackOrderWeightParam
);
if
(!
result
.
succeed
())
{
log
.
error
(
"订单号:{} 的订单做吨数调整,对应货单号:{} 调整失败,调整吨数:{},调整类型:{}"
,
orderNo
,
orderGoods
.
getOrderGoodsNo
(),
weight
,
updateTypeMsg
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
HTTP_ERROR
,
"远程调用更新订单余量失败"
);
}
}
/**
* 客服取消归还吨数
*
...
...
performance-web/src/main/java/com/clx/performance/constant/RabbitKeyConstants.java
浏览文件 @
4ce84c65
...
...
@@ -39,6 +39,9 @@ public class RabbitKeyConstants {
//承运订单同步一部 需要手动创建对列交换机
public
static
final
String
CLX_PERFORMANCE_ORDER_CHILD_QUEUE
=
"clx_performance.order_child_queue"
;
//承运货单监听 需要手动创建对列交换机
public
static
final
String
CLX_PERFORMANCE_ORDER_GOODS_QUEUE
=
"clx_performance.order_goods_queue"
;
public
static
final
String
ORDER_GOODS_ON_QUEUE
=
"clx-order.order.goods.on.queue"
;
public
static
final
String
ORDER_GOODS_ON_EXCHANGE
=
"clx-order.order.goods.on.exchange"
;
...
...
performance-web/src/main/java/com/clx/performance/listener/OrderGoodsDtsListener.java
0 → 100644
浏览文件 @
4ce84c65
package
com
.
clx
.
performance
.
listener
;
import
com.alibaba.fastjson.JSON
;
import
com.clx.order.enums.UpdateEnum
;
import
com.clx.performance.component.OrderCancelComponent
;
import
com.clx.performance.constant.RabbitKeyConstants
;
import
com.clx.performance.dao.OrderGoodsDao
;
import
com.clx.performance.dto.dts.DataTransportDTO
;
import
com.clx.performance.enums.DtsOperationTypeEnum
;
import
com.clx.performance.model.OrderGoods
;
import
com.msl.common.utils.DtsMapConvertUtil
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.stereotype.Component
;
import
java.math.BigDecimal
;
import
java.util.Objects
;
@Slf4j
@Component
@AllArgsConstructor
public
class
OrderGoodsDtsListener
{
private
final
OrderCancelComponent
orderCancelComponent
;
private
final
OrderGoodsDao
orderGoodsDao
;
@RabbitListener
(
queues
=
RabbitKeyConstants
.
CLX_PERFORMANCE_ORDER_GOODS_QUEUE
)
public
void
onMessage
(
Message
message
)
{
try
{
String
msg
=
new
String
(
message
.
getBody
());
log
.
info
(
"DTS消息同步开始, database:clx_performance.order_goods, msg:{}"
,
msg
);
DataTransportDTO
dataTransportDTO
=
JSON
.
parseObject
(
msg
,
DataTransportDTO
.
class
);
OrderGoods
before
=
DtsMapConvertUtil
.
convert
(
dataTransportDTO
.
getBeforeMap
(),
new
OrderGoods
());
OrderGoods
after
=
DtsMapConvertUtil
.
convert
(
dataTransportDTO
.
getAfterMap
(),
new
OrderGoods
());
if
(
Objects
.
equals
(
DtsOperationTypeEnum
.
INSERT
.
getCode
(),
dataTransportDTO
.
getOperationType
().
getCode
())){
//同步after数据
log
.
info
(
"新增:{}"
,
after
);
}
else
if
(
Objects
.
equals
(
DtsOperationTypeEnum
.
UPDATE
.
getCode
(),
dataTransportDTO
.
getOperationType
().
getCode
())){
log
.
info
(
"修改:{}"
,
after
);
backFillOrderWeight
(
after
);
}
else
if
(
Objects
.
equals
(
DtsOperationTypeEnum
.
DELETE
.
getCode
(),
dataTransportDTO
.
getOperationType
().
getCode
())){
//数据删除
log
.
info
(
"删除:{}"
,
before
);
}
}
catch
(
Exception
e
)
{
log
.
info
(
"DTS消息同步失败, database:clx_performance.order_goods, error:{}"
,
e
.
getMessage
());
}
}
//货单剩余吨数不足35吨,自动恢复吨数到订单上
public
void
backFillOrderWeight
(
OrderGoods
after
){
//剩余吨数小于35吨,自动归还订单上
if
(
new
BigDecimal
(
"35"
).
compareTo
(
after
.
getResidueTransportWeight
())
>
0
&&
BigDecimal
.
ZERO
.
compareTo
(
after
.
getResidueTransportWeight
())
!=
0
){
log
.
info
(
"开始自动恢复吨数到订单,订单号:{},货单号:{},货单剩余吨数:{}"
,
after
.
getOrderNo
(),
after
.
getOrderGoodsNo
(),
after
.
getResidueTransportWeight
());
orderCancelComponent
.
backFillOrderWeight
(
after
,
after
.
getResidueTransportWeight
(),
UpdateEnum
.
ADD
.
getCode
());
OrderGoods
orderGoods
=
new
OrderGoods
();
orderGoods
.
setId
(
after
.
getId
());
orderGoods
.
setResidueTransportWeight
(
BigDecimal
.
ZERO
);
orderGoodsDao
.
updateEntityByKey
(
orderGoods
);
//定向单解绑定向车辆
log
.
info
(
"结束自动恢复吨数到订单,订单号:{},货单号:{},货单剩余吨数:{}"
,
after
.
getOrderNo
(),
after
.
getOrderGoodsNo
(),
after
.
getResidueTransportWeight
());
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论