Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
4dc18012
提交
4dc18012
authored
6月 04, 2024
作者:
艾庆国
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
运单预警
上级
5eeadd9f
显示空白字符变更
内嵌
并排
正在显示
32 个修改的文件
包含
1187 行增加
和
2 行删除
+1187
-2
LineWarnOrderGoodsEnum.java
...lx/performance/enums/linewarn/LineWarnOrderGoodsEnum.java
+48
-0
LineWarnLineWarnMqParam.java
...erformance/param/mq/linewarn/LineWarnLineWarnMqParam.java
+22
-0
LineWarnNoticeMqParam.java
.../performance/param/mq/linewarn/LineWarnNoticeMqParam.java
+22
-0
LineWarnOrderGoodsAddMqParam.java
...mance/param/mq/linewarn/LineWarnOrderGoodsAddMqParam.java
+22
-0
RabbitLineWarnConfig.java
...java/com/clx/performance/config/RabbitLineWarnConfig.java
+87
-0
RabbitKeyLineWarnConstants.java
.../clx/performance/constant/RabbitKeyLineWarnConstants.java
+54
-0
OrderChildDao.java
.../src/main/java/com/clx/performance/dao/OrderChildDao.java
+7
-0
OrderChildDaoImpl.java
.../java/com/clx/performance/dao/impl/OrderChildDaoImpl.java
+10
-0
LineWarnOrderGoodsDaoImpl.java
...formance/dao/impl/linewarn/LineWarnOrderGoodsDaoImpl.java
+35
-0
VehicleWarnInfoDaoImpl.java
...performance/dao/impl/linewarn/VehicleWarnInfoDaoImpl.java
+1
-1
LineWarnInfoDao.java
...ava/com/clx/performance/dao/linewarn/LineWarnInfoDao.java
+1
-1
LineWarnOrderGoodsDao.java
...m/clx/performance/dao/linewarn/LineWarnOrderGoodsDao.java
+5
-0
LineWarnCommonInfoDTO.java
...m/clx/performance/dto/linewarn/LineWarnCommonInfoDTO.java
+25
-0
VehicleWarnJob.java
...java/com/clx/performance/job/linewarn/VehicleWarnJob.java
+52
-0
LineWarnDelayListener.java
.../performance/listener/linewarn/LineWarnDelayListener.java
+43
-0
LineWarnLineWarnListener.java
...rformance/listener/linewarn/LineWarnLineWarnListener.java
+43
-0
LineWarnOrderGoodsAddListener.java
...ance/listener/linewarn/LineWarnOrderGoodsAddListener.java
+43
-0
LineWarnTruckNoticeListener.java
...rmance/listener/linewarn/LineWarnTruckNoticeListener.java
+43
-0
LineWarnOrderGoods.java
...om/clx/performance/model/linewarn/LineWarnOrderGoods.java
+5
-0
LineWarnCommonServiceImpl.java
...ance/service/impl/linewarn/LineWarnCommonServiceImpl.java
+64
-0
LineWarnLoadWarnServiceImpl.java
...ce/service/impl/linewarn/LineWarnLoadWarnServiceImpl.java
+81
-0
LineWarnMqHandlerServiceImpl.java
...e/service/impl/linewarn/LineWarnMqHandlerServiceImpl.java
+116
-0
LineWarnTakeWarnServiceImpl.java
...ce/service/impl/linewarn/LineWarnTakeWarnServiceImpl.java
+82
-0
LineWarnUnloadServiceImpl.java
...ance/service/impl/linewarn/LineWarnUnloadServiceImpl.java
+78
-0
VehicleWarnMqServiceImpl.java
...mance/service/impl/linewarn/VehicleWarnMqServiceImpl.java
+58
-0
LineWarnCommonService.java
...x/performance/service/linewarn/LineWarnCommonService.java
+11
-0
LineWarnLoadWarnService.java
...performance/service/linewarn/LineWarnLoadWarnService.java
+10
-0
LineWarnMqHandlerService.java
...erformance/service/linewarn/LineWarnMqHandlerService.java
+14
-0
LineWarnMqService.java
...m/clx/performance/service/linewarn/LineWarnMqService.java
+10
-0
LineWarnTakeWarnService.java
...performance/service/linewarn/LineWarnTakeWarnService.java
+10
-0
LineWarnUnloadWarnService.java
...rformance/service/linewarn/LineWarnUnloadWarnService.java
+10
-0
GdUtils.java
...b/src/main/java/com/clx/performance/utils/gd/GdUtils.java
+75
-0
没有找到文件。
performance-api/src/main/java/com/clx/performance/enums/linewarn/LineWarnOrderGoodsEnum.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
enums
.
linewarn
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
java.util.Arrays
;
import
java.util.Optional
;
public
enum
LineWarnOrderGoodsEnum
{
;
@Getter
@AllArgsConstructor
public
enum
TraceStatus
{
DISABLE
(
0
,
"禁止"
),
ENABLE
(
1
,
"启用"
),
;
private
final
Integer
code
;
private
final
String
msg
;
public
static
Optional
<
TraceStatus
>
getByCode
(
int
code
)
{
return
Arrays
.
stream
(
values
()).
filter
(
e
->
e
.
code
==
code
).
findFirst
();
}
public
static
String
getMsgByCode
(
int
code
)
{
return
getByCode
(
code
).
map
(
TraceStatus:
:
getMsg
).
orElse
(
null
);
}
}
@Getter
@AllArgsConstructor
public
enum
WarnStatus
{
DISABLE
(
0
,
"禁止"
),
ENABLE
(
1
,
"启用"
),
;
private
final
Integer
code
;
private
final
String
msg
;
public
static
Optional
<
WarnStatus
>
getByCode
(
int
code
)
{
return
Arrays
.
stream
(
values
()).
filter
(
e
->
e
.
code
==
code
).
findFirst
();
}
public
static
String
getMsgByCode
(
int
code
)
{
return
getByCode
(
code
).
map
(
WarnStatus:
:
getMsg
).
orElse
(
null
);
}
}
}
performance-api/src/main/java/com/clx/performance/param/mq/linewarn/LineWarnLineWarnMqParam.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
param
.
mq
.
linewarn
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.ToString
;
/**
* @Author: aiqingguo
* @Description: 新增
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public
class
LineWarnLineWarnMqParam
{
private
String
orderGoodsNo
;
//货单编号
}
performance-api/src/main/java/com/clx/performance/param/mq/linewarn/LineWarnNoticeMqParam.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
param
.
mq
.
linewarn
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.ToString
;
/**
* @Author: aiqingguo
* @Description: 通知
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public
class
LineWarnNoticeMqParam
{
private
Integer
infoId
;
//id
}
performance-api/src/main/java/com/clx/performance/param/mq/linewarn/LineWarnOrderGoodsAddMqParam.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
param
.
mq
.
linewarn
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.ToString
;
/**
* @Author: aiqingguo
* @Description: 新增
* @Date: 2024-5-31 13:45:10
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public
class
LineWarnOrderGoodsAddMqParam
{
private
String
orderGoodsNo
;
//货单编号
}
performance-web/src/main/java/com/clx/performance/config/RabbitLineWarnConfig.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
config
;
import
com.clx.performance.constant.RabbitKeyLineWarnConstants
;
import
org.springframework.amqp.core.Binding
;
import
org.springframework.amqp.core.BindingBuilder
;
import
org.springframework.amqp.core.DirectExchange
;
import
org.springframework.amqp.core.Queue
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Author: aiqingguo
* @Description: 货款往来明细 MQ
* @Date: 2023-10-12 16:27:30
* @Version: 1.0
*/
@Configuration
public
class
RabbitLineWarnConfig
{
@Bean
public
DirectExchange
lineWarnDefaultExchange
()
{
return
new
DirectExchange
(
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
);
}
@Bean
public
Queue
lineWarnDefaultDelayQueue
()
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>(
8
);
params
.
put
(
"x-message-ttl"
,
15
*
60
*
1000
);
params
.
put
(
"x-max-length"
,
5000000
);
params
.
put
(
"x-dead-letter-exchange"
,
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
);
params
.
put
(
"x-dead-letter-routing-key"
,
RabbitKeyLineWarnConstants
.
DEFAULT_DEAD_ROUTING_KEY
);
return
new
Queue
(
RabbitKeyLineWarnConstants
.
DEFAULT_DELAY_QUEUE
,
true
,
false
,
false
,
params
);
}
@Bean
public
Binding
lineWarnDefaultDelayQueueBinding
()
{
return
BindingBuilder
.
bind
(
lineWarnDefaultDelayQueue
()).
to
(
lineWarnDefaultExchange
()).
with
(
RabbitKeyLineWarnConstants
.
DEFAULT_DELAY_ROUTING_KEY
);
}
@Bean
public
Queue
lineWarnDefaultDeadQueue
()
{
return
new
Queue
(
RabbitKeyLineWarnConstants
.
DEFAULT_DEAD_QUEUE
);
}
@Bean
public
Binding
lineWarnDefaultDeadQueueBinding
()
{
return
BindingBuilder
.
bind
(
lineWarnDefaultDeadQueue
()).
to
(
lineWarnDefaultExchange
()).
with
(
RabbitKeyLineWarnConstants
.
DEFAULT_DEAD_ROUTING_KEY
);
}
/**
* 新增
*/
@Bean
public
Queue
lineWarnChildAddQueue
()
{
return
new
Queue
(
RabbitKeyLineWarnConstants
.
ORDER_GOODS_ADD_QUEUE
);
}
@Bean
public
Binding
lineWarnChildAddQueueBinding
()
{
return
BindingBuilder
.
bind
(
lineWarnChildAddQueue
()).
to
(
lineWarnDefaultExchange
()).
with
(
RabbitKeyLineWarnConstants
.
ORDER_GOODS_ADD_ROUTING_KEY
);
}
/**
* 线路预警
*/
@Bean
public
Queue
lineWarnQueue
()
{
return
new
Queue
(
RabbitKeyLineWarnConstants
.
LINE_WARN_QUEUE
);
}
@Bean
public
Binding
lineWarnQueueBinding
()
{
return
BindingBuilder
.
bind
(
lineWarnQueue
()).
to
(
lineWarnDefaultExchange
()).
with
(
RabbitKeyLineWarnConstants
.
LINE_WARN_ROUTING_KEY
);
}
/**
* 线路预警通知
*/
@Bean
public
Queue
lineWarnNoticeQueue
()
{
return
new
Queue
(
RabbitKeyLineWarnConstants
.
LINE_WARN_NOTICE_QUEUE
);
}
@Bean
public
Binding
lineWarnNoticeQueueBinding
()
{
return
BindingBuilder
.
bind
(
lineWarnNoticeQueue
()).
to
(
lineWarnDefaultExchange
()).
with
(
RabbitKeyLineWarnConstants
.
LINE_WARN_NOTICE_ROUTING_KEY
);
}
}
performance-web/src/main/java/com/clx/performance/constant/RabbitKeyLineWarnConstants.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
constant
;
/**
* @Author: aiqingguo
* @Description: 线路预警-mq
* @Date: 2023-10-19 15:10:10
* @Version: 1.0
*/
public
class
RabbitKeyLineWarnConstants
{
private
static
final
String
PREFIX
=
"clx-performance.lineWarn."
;
private
static
final
String
EXCHANGE
=
".exchange"
;
private
static
final
String
QUEUE
=
".queue"
;
private
static
final
String
QUEUE_ROUTING_KEY
=
".routing.key"
;
private
static
final
String
DELAY_QUEUE
=
".delay.queue"
;
private
static
final
String
DELAY_ROUTING_KEY
=
".delay.routing.key"
;
private
static
final
String
DEAD_QUEUE
=
".dead.queue"
;
private
static
final
String
DEAD_ROUTING_KEY
=
".dead.routing.key"
;
private
RabbitKeyLineWarnConstants
()
{
}
/**
* 缺省交换机
*/
public
static
final
String
DEFAULT_EXCHANGE
=
PREFIX
+
"default"
+
EXCHANGE
;
/**
* 缺省延迟队列
*/
public
static
final
String
DEFAULT_DELAY_QUEUE
=
PREFIX
+
"default"
+
DELAY_QUEUE
;
public
static
final
String
DEFAULT_DELAY_ROUTING_KEY
=
PREFIX
+
"default"
+
DELAY_ROUTING_KEY
;
public
static
final
String
DEFAULT_DEAD_QUEUE
=
PREFIX
+
"default"
+
DEAD_QUEUE
;
public
static
final
String
DEFAULT_DEAD_ROUTING_KEY
=
PREFIX
+
"default"
+
DEAD_ROUTING_KEY
;
/**
* 新增
*/
public
static
final
String
ORDER_GOODS_ADD_QUEUE
=
PREFIX
+
"orderGoods.add"
+
QUEUE
;
public
static
final
String
ORDER_GOODS_ADD_ROUTING_KEY
=
PREFIX
+
"orderGoods.add"
+
QUEUE_ROUTING_KEY
;
/**
* 车辆预警
*/
public
static
final
String
LINE_WARN_QUEUE
=
PREFIX
+
"line.warn"
+
QUEUE
;
public
static
final
String
LINE_WARN_ROUTING_KEY
=
PREFIX
+
"line.warn"
+
QUEUE_ROUTING_KEY
;
/**
* 线路预警通知
*/
public
static
final
String
LINE_WARN_NOTICE_QUEUE
=
PREFIX
+
"lineWarn.notice"
+
QUEUE
;
public
static
final
String
LINE_WARN_NOTICE_ROUTING_KEY
=
PREFIX
+
"lineWarn.notice"
+
QUEUE_ROUTING_KEY
;
}
performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java
浏览文件 @
4dc18012
...
...
@@ -166,4 +166,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Page
<
OrderChild
>
getMonthAgoByUserNo
(
Long
userNo
,
LocalDateTime
monthAgo
,
PageParam
param
);
IPage
<
OrderChild
>
pageOwnerOrderChildList
(
PageOwnerOrderChildListParam
param
);
Integer
loadTimeAvg
(
Integer
sendAddressId
,
Integer
receiveAddressId
,
Integer
sendSystemAddressId
,
Integer
receiveSystemAddressId
,
String
beginTime
);
Integer
unloadTimeAvg
(
Integer
sendAddressId
,
Integer
receiveAddressId
,
Integer
sendSystemAddressId
,
Integer
receiveSystemAddressId
,
String
beginTime
);
}
performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java
浏览文件 @
4dc18012
...
...
@@ -538,4 +538,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
query
.
orderByDesc
(
OrderChild
::
getCreateTime
);
return
baseMapper
.
selectPage
(
Page
.
of
(
param
.
getPage
(),
param
.
getPageSize
()),
query
);
}
@Override
public
Integer
loadTimeAvg
(
Integer
sendAddressId
,
Integer
receiveAddressId
,
Integer
sendSystemAddressId
,
Integer
receiveSystemAddressId
,
String
beginTime
)
{
return
0
;
}
@Override
public
Integer
unloadTimeAvg
(
Integer
sendAddressId
,
Integer
receiveAddressId
,
Integer
sendSystemAddressId
,
Integer
receiveSystemAddressId
,
String
beginTime
)
{
return
0
;
}
}
performance-web/src/main/java/com/clx/performance/dao/impl/linewarn/LineWarnOrderGoodsDaoImpl.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
dao
.
impl
.
linewarn
;
import
com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao
;
import
com.clx.performance.enums.linewarn.LineWarnOrderGoodsEnum
;
import
com.clx.performance.mapper.linewarn.LineWarnOrderGoodsMapper
;
import
com.clx.performance.model.linewarn.LineWarnOrderGoods
;
import
com.msl.common.base.Optional
;
import
com.msl.common.dao.impl.BaseDaoImpl
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@Repository
public
class
LineWarnOrderGoodsDaoImpl
extends
BaseDaoImpl
<
LineWarnOrderGoodsMapper
,
LineWarnOrderGoods
,
Integer
>
implements
LineWarnOrderGoodsDao
{
@Override
public
Optional
<
LineWarnOrderGoods
>
getByOrderGoodsNo
(
String
orderGoodsNo
)
{
return
Optional
.
of
(
orderGoodsNo
)
.
map
(
item
->
lQrWrapper
()
.
eq
(
LineWarnOrderGoods:
:
getOrderGoodsNo
,
orderGoodsNo
)
)
.
map
(
super
::
getOne
);
}
@Override
public
List
<
LineWarnOrderGoods
>
ListOrderGoodsNoOfWarn
()
{
return
list
(
lQrWrapper
().
select
(
LineWarnOrderGoods:
:
getOrderGoodsNo
)
.
eq
(
LineWarnOrderGoods:
:
getWarnStatus
,
LineWarnOrderGoodsEnum
.
WarnStatus
.
ENABLE
.
getCode
())
.
orderByDesc
(
LineWarnOrderGoods:
:
getId
)
.
last
(
"limit 10000"
)
);
}
}
performance-web/src/main/java/com/clx/performance/dao/impl/linewarn/VehicleWarnInfoDaoImpl.java
浏览文件 @
4dc18012
...
...
@@ -73,7 +73,7 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<LineWarnInfoMapper, Line
}
@Override
public
Optional
<
LineWarnInfo
>
findBy
Child
NoAndWarnConfigId
(
String
orderGoodsNo
,
Integer
warnConfigId
)
{
public
Optional
<
LineWarnInfo
>
findBy
OrderGoods
NoAndWarnConfigId
(
String
orderGoodsNo
,
Integer
warnConfigId
)
{
return
Optional
.
of
(
orderGoodsNo
)
.
map
(
item
->
lQrWrapper
()
.
eq
(
LineWarnInfo:
:
getOrderGoodsNo
,
orderGoodsNo
)
...
...
performance-web/src/main/java/com/clx/performance/dao/linewarn/LineWarnInfoDao.java
浏览文件 @
4dc18012
...
...
@@ -19,7 +19,7 @@ public interface LineWarnInfoDao extends BaseDao<LineWarnInfoMapper, LineWarnInf
Optional
<
LineWarnInfo
>
findById
(
Integer
id
);
Optional
<
LineWarnInfo
>
findBy
Child
NoAndWarnConfigId
(
String
orderGoodsNo
,
Integer
warnConfigId
);
Optional
<
LineWarnInfo
>
findBy
OrderGoods
NoAndWarnConfigId
(
String
orderGoodsNo
,
Integer
warnConfigId
);
List
<
LineWarnInfo
>
listSuspendTimeout
();
...
...
performance-web/src/main/java/com/clx/performance/dao/linewarn/LineWarnOrderGoodsDao.java
浏览文件 @
4dc18012
...
...
@@ -2,9 +2,14 @@ package com.clx.performance.dao.linewarn;
import
com.clx.performance.mapper.linewarn.LineWarnOrderGoodsMapper
;
import
com.clx.performance.model.linewarn.LineWarnOrderGoods
;
import
com.msl.common.base.Optional
;
import
com.msl.common.dao.BaseDao
;
import
java.util.List
;
public
interface
LineWarnOrderGoodsDao
extends
BaseDao
<
LineWarnOrderGoodsMapper
,
LineWarnOrderGoods
,
Integer
>
{
Optional
<
LineWarnOrderGoods
>
getByOrderGoodsNo
(
String
orderGoodsNo
);
List
<
LineWarnOrderGoods
>
ListOrderGoodsNoOfWarn
();
}
performance-web/src/main/java/com/clx/performance/dto/linewarn/LineWarnCommonInfoDTO.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
dto
.
linewarn
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.ToString
;
import
java.time.LocalDateTime
;
@Getter
@Setter
@ToString
@NoArgsConstructor
public
class
LineWarnCommonInfoDTO
{
String
orderGoodsNo
;
//货单编号
private
int
loadTimeAvg
;
//平均装车时间(min)
private
int
unloadTimeAvg
;
//平均卸车时间(min)
private
LocalDateTime
transportEndTime
;
//拉运结束时间
private
LocalDateTime
pendingOrderTime
;
//挂单时间
private
Integer
arriveReceiveExpectTime
;
//预计到达目的地时间 (min)
}
performance-web/src/main/java/com/clx/performance/job/linewarn/VehicleWarnJob.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
job
.
linewarn
;
import
com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao
;
import
com.clx.performance.model.linewarn.LineWarnOrderGoods
;
import
com.clx.performance.service.linewarn.LineWarnMqService
;
import
com.msl.common.job.JobLog
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.exception.ExceptionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.util.List
;
@Slf4j
@Component
public
class
VehicleWarnJob
{
@Autowired
private
LineWarnOrderGoodsDao
lineWarnOrderGoodsDao
;
@Autowired
private
LineWarnMqService
lineWarnMqService
;
/**
* 线路监控预警
*/
@XxlJob
(
"lineWarnWarn"
)
public
void
lineWarnWarn
()
{
try
{
List
<
LineWarnOrderGoods
>
list
=
lineWarnOrderGoodsDao
.
ListOrderGoodsNoOfWarn
();
log
.
info
(
"线路监控预警, size:{}"
,
list
.
size
());
for
(
LineWarnOrderGoods
item
:
list
)
{
LocalDateTime
now
=
LocalDateTime
.
now
();
LocalDateTime
beginTime
=
now
.
minusSeconds
(
600
);
// 发送mq (线路预警)
lineWarnMqService
.
lineWarn
(
item
.
getOrderGoodsNo
());
}
}
catch
(
Exception
e
)
{
log
.
warn
(
"线路监控预警失败,异常原因:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
JobLog
.
error
(
"线路监控预警失败,异常原因====================="
,
e
);
}
}
}
performance-web/src/main/java/com/clx/performance/listener/linewarn/LineWarnDelayListener.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
listener
.
linewarn
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.TypeReference
;
import
com.clx.performance.common.MqDelay
;
import
com.clx.performance.common.MqWrapper
;
import
com.clx.performance.constant.RabbitKeyLineWarnConstants
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.core.MessageBuilder
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @Author: 艾庆国
* @Description: 线路预警 mq
* @Date: 2023-10-20 16:14:30
* @Version: 1.0
*/
@Slf4j
@Component
public
class
LineWarnDelayListener
{
@Autowired
private
RabbitTemplate
rabbitTemplate
;
@RabbitListener
(
queues
=
RabbitKeyLineWarnConstants
.
DEFAULT_DEAD_QUEUE
)
public
void
process
(
Message
message
)
{
try
{
log
.
info
(
"线路预警-延迟, message:{}"
,
message
);
process
(
JSON
.
parseObject
(
new
String
(
message
.
getBody
()),
new
TypeReference
<
MqWrapper
<
MqDelay
>>(){}).
getData
());
}
catch
(
Exception
e
){
log
.
info
(
"线路预警-延迟 失败"
,
e
);
}
}
void
process
(
MqDelay
mq
){
Message
message
=
MessageBuilder
.
withBody
(
JSON
.
toJSONString
(
mq
.
getData
()).
getBytes
()).
build
();
rabbitTemplate
.
send
(
mq
.
getExchange
(),
mq
.
getRouterKey
(),
message
);
}
}
performance-web/src/main/java/com/clx/performance/listener/linewarn/LineWarnLineWarnListener.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
listener
.
linewarn
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.TypeReference
;
import
com.clx.performance.common.MqWrapper
;
import
com.clx.performance.constant.RabbitKeyLineWarnConstants
;
import
com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam
;
import
com.clx.performance.service.linewarn.LineWarnMqHandlerService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @Author: 艾庆国
* @Description: 线路预警 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public
class
LineWarnLineWarnListener
{
@Autowired
private
LineWarnMqHandlerService
lineWarnMqHandlerService
;
@RabbitListener
(
queues
=
RabbitKeyLineWarnConstants
.
LINE_WARN_QUEUE
)
public
void
process
(
Message
message
)
{
try
{
log
.
info
(
"线路预警-货单预警, message:{}"
,
new
String
(
message
.
getBody
()));
process
(
JSON
.
parseObject
(
new
String
(
message
.
getBody
()),
new
TypeReference
<
MqWrapper
<
LineWarnLineWarnMqParam
>>(){}).
getData
());
}
catch
(
Exception
e
){
log
.
info
(
"线路预警-货单预警 失败"
,
e
);
}
}
private
void
process
(
LineWarnLineWarnMqParam
mq
){
lineWarnMqHandlerService
.
lineWarn
(
mq
);
}
}
performance-web/src/main/java/com/clx/performance/listener/linewarn/LineWarnOrderGoodsAddListener.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
listener
.
linewarn
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.TypeReference
;
import
com.clx.performance.common.MqWrapper
;
import
com.clx.performance.constant.RabbitKeyLineWarnConstants
;
import
com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam
;
import
com.clx.performance.service.linewarn.LineWarnMqHandlerService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @Author: 艾庆国
* @Description: 货单新增 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public
class
LineWarnOrderGoodsAddListener
{
@Autowired
private
LineWarnMqHandlerService
lineWarnMqHandlerService
;
@RabbitListener
(
queues
=
RabbitKeyLineWarnConstants
.
ORDER_GOODS_ADD_QUEUE
)
public
void
process
(
Message
message
)
{
try
{
log
.
info
(
"线路预警-货单新增, message:{}"
,
new
String
(
message
.
getBody
()));
process
(
JSON
.
parseObject
(
new
String
(
message
.
getBody
()),
new
TypeReference
<
MqWrapper
<
LineWarnOrderGoodsAddMqParam
>>(){}).
getData
());
}
catch
(
Exception
e
){
log
.
info
(
"线路预警-货单新增 失败"
,
e
);
}
}
private
void
process
(
LineWarnOrderGoodsAddMqParam
mq
){
lineWarnMqHandlerService
.
orderGoodsAdd
(
mq
);
}
}
performance-web/src/main/java/com/clx/performance/listener/linewarn/LineWarnTruckNoticeListener.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
listener
.
linewarn
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.TypeReference
;
import
com.clx.performance.common.MqWrapper
;
import
com.clx.performance.constant.RabbitKeyLineWarnConstants
;
import
com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam
;
import
com.clx.performance.service.linewarn.LineWarnMqHandlerService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @Author: 艾庆国
* @Description: 线路预警通知 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public
class
LineWarnTruckNoticeListener
{
@Autowired
private
LineWarnMqHandlerService
lineWarnMqHandlerService
;
@RabbitListener
(
queues
=
RabbitKeyLineWarnConstants
.
LINE_WARN_NOTICE_QUEUE
)
public
void
process
(
Message
message
)
{
try
{
log
.
info
(
"线路预警-预警通知, message:{}"
,
new
String
(
message
.
getBody
()));
process
(
JSON
.
parseObject
(
new
String
(
message
.
getBody
()),
new
TypeReference
<
MqWrapper
<
LineWarnNoticeMqParam
>>(){}).
getData
());
}
catch
(
Exception
e
){
log
.
info
(
"线路预警-预警通知 失败"
,
e
);
}
}
private
void
process
(
LineWarnNoticeMqParam
mq
){
lineWarnMqHandlerService
.
notice
(
mq
);
}
}
performance-web/src/main/java/com/clx/performance/model/linewarn/LineWarnOrderGoods.java
浏览文件 @
4dc18012
...
...
@@ -27,6 +27,10 @@ public class LineWarnOrderGoods implements HasKey<Integer> {
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Integer
id
;
//id
private
String
orderGoodsNo
;
//货单编号
private
LocalDateTime
transportEndTime
;
//拉运结束时间
private
LocalDateTime
pendingOrderTime
;
//挂单时间
private
Integer
arriveReceiveExpectTime
;
//预计到达目的地时间 (min)
private
Integer
pengNum
;
//挂单数
private
Integer
takeNum
;
//接单数
private
Integer
arriveSendNum
;
//到达货源地车数
...
...
@@ -34,6 +38,7 @@ public class LineWarnOrderGoods implements HasKey<Integer> {
private
Integer
arriveReceiveNum
;
//到达目的地车数
private
Integer
unloadNum
;
//卸车车数
private
Integer
status
;
//状态
private
Integer
warnStatus
;
//预警使能:0禁用 1启用
private
LocalDateTime
createTime
;
//创建时间
private
LocalDateTime
modifiedTime
;
//修改时间
...
...
performance-web/src/main/java/com/clx/performance/service/impl/linewarn/LineWarnCommonServiceImpl.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
impl
.
linewarn
;
import
com.clx.performance.dao.linewarn.LineWarnInfoDao
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.model.linewarn.LineWarnConfig
;
import
com.clx.performance.model.linewarn.LineWarnInfo
;
import
com.clx.performance.service.linewarn.LineWarnCommonService
;
import
com.clx.performance.service.linewarn.LineWarnMqService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
@Slf4j
@Service
public
class
LineWarnCommonServiceImpl
implements
LineWarnCommonService
{
private
final
static
int
MIN_FER_HOUR
=
60
;
@Autowired
private
LineWarnInfoDao
lineWarnInfoDao
;
@Autowired
private
LineWarnMqService
lineWarnMqService
;
@Override
public
void
lineWarnInfoUpdate
(
OrderGoods
orderGoods
,
LineWarnInfo
lineWarnInfo
,
LineWarnConfig
lineWarnConfig
){
// 更新
if
(
lineWarnInfo
!=
null
){
// 计算下次生效时间
LocalDateTime
nextTime
=
lineWarnInfo
.
getWarnTime
().
plusMinutes
(
lineWarnConfig
.
getInterval
().
multiply
(
new
BigDecimal
(
MIN_FER_HOUR
)).
intValue
());
if
(
nextTime
.
isAfter
(
LocalDateTime
.
now
()))
{
return
;}
lineWarnInfo
.
setWarnTime
(
LocalDateTime
.
now
());
lineWarnInfoDao
.
updateWarnTime
(
lineWarnInfo
);
// 发送mq (预警通知)
lineWarnMqService
.
lineWarnNotice
(
lineWarnInfo
.
getId
());
return
;
}
// 新增
lineWarnInfo
=
new
LineWarnInfo
();
lineWarnInfo
.
setWarnConfigId
(
lineWarnConfig
.
getId
());
lineWarnInfo
.
setWarnType
(
lineWarnConfig
.
getWarnType
());
lineWarnInfo
.
setWarnName
(
lineWarnConfig
.
getWarnName
());
lineWarnInfo
.
setWarnLevel
(
lineWarnConfig
.
getWarnLevel
());
lineWarnInfo
.
setOrderGoodsNo
(
orderGoods
.
getOrderGoodsNo
());
lineWarnInfo
.
setSendAddressId
(
orderGoods
.
getSendAddressId
());
lineWarnInfo
.
setSendAddress
(
orderGoods
.
getSendAddressShorter
());
lineWarnInfo
.
setReceiveAddressId
(
orderGoods
.
getReceiveAddressId
());
lineWarnInfo
.
setReceiveAddress
(
orderGoods
.
getReceiveAddressShorter
());
lineWarnInfo
.
setWarnTime
(
LocalDateTime
.
now
());
lineWarnInfoDao
.
saveEntity
(
lineWarnInfo
);
// 发送mq (预警通知)
lineWarnMqService
.
lineWarnNotice
(
lineWarnInfo
.
getId
());
}
}
performance-web/src/main/java/com/clx/performance/service/impl/linewarn/LineWarnLoadWarnServiceImpl.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
impl
.
linewarn
;
import
com.clx.performance.dao.linewarn.LineWarnConfigDao
;
import
com.clx.performance.dao.linewarn.LineWarnInfoDao
;
import
com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO
;
import
com.clx.performance.enums.linewarn.LineWarnConfigEnum
;
import
com.clx.performance.enums.linewarn.LineWarnInfoEnum
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.model.linewarn.LineWarnConfig
;
import
com.clx.performance.model.linewarn.LineWarnInfo
;
import
com.clx.performance.service.linewarn.LineWarnCommonService
;
import
com.clx.performance.service.linewarn.LineWarnLoadWarnService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Objects
;
@Slf4j
@Service
public
class
LineWarnLoadWarnServiceImpl
implements
LineWarnLoadWarnService
{
@Autowired
private
LineWarnConfigDao
lineWarnConfigDao
;
@Autowired
private
LineWarnInfoDao
lineWarnInfoDao
;
@Autowired
private
LineWarnCommonService
lineWarnCommonService
;
@Override
public
void
loadWarn
(
OrderGoods
orderGoods
,
LineWarnCommonInfoDTO
lineWarnCommonInfo
)
{
int
unloadTimeAvg
=
0
;
Integer
arriveReceiveExpectTime
=
lineWarnCommonInfo
.
getArriveReceiveExpectTime
();
long
totalTime
=
Duration
.
between
(
lineWarnCommonInfo
.
getPendingOrderTime
(),
lineWarnCommonInfo
.
getTransportEndTime
()).
toMinutes
();
int
needTime
=
unloadTimeAvg
+
arriveReceiveExpectTime
;
// 接单最长时间
long
difTime
=
totalTime
-
needTime
;
// 任务完成率
BigDecimal
taskCompleteRatio
=
BigDecimal
.
ZERO
;
List
<
LineWarnConfig
>
vehicleWarnConfigList
=
lineWarnConfigDao
.
listByWarnType
(
LineWarnConfigEnum
.
WarnType
.
LOAD
.
getCode
());
if
(
vehicleWarnConfigList
.
isEmpty
())
{
return
;}
for
(
LineWarnConfig
item
:
vehicleWarnConfigList
)
{
doTakeWarn
(
orderGoods
,
item
,
lineWarnCommonInfo
.
getPendingOrderTime
(),
difTime
,
taskCompleteRatio
);
}
}
private
void
doTakeWarn
(
OrderGoods
orderGoods
,
LineWarnConfig
lineWarnConfig
,
LocalDateTime
pendingOrderTime
,
long
difTime
,
BigDecimal
taskCompleteRatio
){
LineWarnInfo
lineWarnInfo
=
lineWarnInfoDao
.
findByOrderGoodsNoAndWarnConfigId
(
orderGoods
.
getOrderGoodsNo
(),
lineWarnConfig
.
getId
()).
orNull
();
if
(
lineWarnInfo
!=
null
&&
Objects
.
equals
(
lineWarnInfo
.
getStatus
(),
LineWarnInfoEnum
.
Status
.
RESOLVE
.
getCode
())){
return
;
}
int
time
=
lineWarnConfig
.
getTimeRatio
().
multiply
(
new
BigDecimal
(
difTime
)).
intValue
();
// 未达到时间占比
if
(
pendingOrderTime
.
plusMinutes
(
time
).
isBefore
(
LocalDateTime
.
now
())){
return
;}
// 达到任务占比
if
(
lineWarnConfig
.
getTaskCompleteRatio
().
compareTo
(
taskCompleteRatio
)
>=
0
)
{
return
;}
// 更新
lineWarnCommonService
.
lineWarnInfoUpdate
(
orderGoods
,
lineWarnInfo
,
lineWarnConfig
);
}
}
performance-web/src/main/java/com/clx/performance/service/impl/linewarn/LineWarnMqHandlerServiceImpl.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
impl
.
linewarn
;
import
com.clx.order.feign.OrderFeign
;
import
com.clx.order.vo.feign.FeignOrderInfoVO
;
import
com.clx.performance.dao.OrderChildDao
;
import
com.clx.performance.dao.OrderGoodsDao
;
import
com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao
;
import
com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO
;
import
com.clx.performance.enums.ResultEnum
;
import
com.clx.performance.extranal.user.OrderService
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.model.linewarn.LineWarnOrderGoods
;
import
com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam
;
import
com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam
;
import
com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam
;
import
com.clx.performance.service.linewarn.LineWarnLoadWarnService
;
import
com.clx.performance.service.linewarn.LineWarnMqHandlerService
;
import
com.clx.performance.service.linewarn.LineWarnTakeWarnService
;
import
com.clx.performance.service.linewarn.LineWarnUnloadWarnService
;
import
com.clx.performance.utils.LocalDateTimeUtils
;
import
com.clx.performance.utils.gd.GdUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
@Slf4j
@Service
public
class
LineWarnMqHandlerServiceImpl
implements
LineWarnMqHandlerService
{
@Autowired
private
OrderGoodsDao
orderGoodsDao
;
@Autowired
private
LineWarnOrderGoodsDao
lineWarnOrderGoodsDao
;
@Autowired
private
OrderFeign
orderFeign
;
@Autowired
private
OrderService
orderService
;
@Autowired
private
GdUtils
gdUtils
;
@Autowired
private
LineWarnTakeWarnService
lineWarnTakeWarnService
;
@Autowired
private
LineWarnUnloadWarnService
lineWarnUnloadWarnService
;
@Autowired
private
LineWarnLoadWarnService
lineWarnLoadWarnService
;
@Autowired
private
OrderChildDao
orderChildDao
;
@Override
public
void
orderGoodsAdd
(
LineWarnOrderGoodsAddMqParam
mq
)
{
OrderGoods
orderGoods
=
orderGoodsDao
.
getByOrderGoodsNo
(
mq
.
getOrderGoodsNo
()).
orElseThrow
(
ResultEnum
.
DATA_NOT_FIND
);
FeignOrderInfoVO
orderInfo
=
orderService
.
getOrderInfo
(
orderGoods
.
getOrderNo
()).
orElseThrow
(
ResultEnum
.
DATA_NOT_FIND
);
// 计算货源地到
int
arriveSendExpectTime
=
gdUtils
.
getNeedTime
(
new
BigDecimal
[]{
orderGoods
.
getSendLongitude
(),
orderGoods
.
getSendLatitude
()},
orderGoods
.
getReceiveLongitude
(),
orderGoods
.
getReceiveLatitude
());
LineWarnOrderGoods
lineWarnOrderGoods
=
new
LineWarnOrderGoods
();
lineWarnOrderGoods
.
setOrderGoodsNo
(
orderGoods
.
getOrderGoodsNo
());
lineWarnOrderGoods
.
setTransportEndTime
(
LocalDateTimeUtils
.
parseTime
(
orderInfo
.
getTransportEndTime
()));
lineWarnOrderGoods
.
setPendingOrderTime
(
orderGoods
.
getPendingOrderTime
());
lineWarnOrderGoods
.
setArriveReceiveExpectTime
(
arriveSendExpectTime
==
0
?
null
:
arriveSendExpectTime
);
lineWarnOrderGoodsDao
.
saveEntity
(
lineWarnOrderGoods
);
}
@Override
public
void
lineWarn
(
LineWarnLineWarnMqParam
mq
)
{
LineWarnOrderGoods
lineWarnOrderGoods
=
lineWarnOrderGoodsDao
.
getByOrderGoodsNo
(
mq
.
getOrderGoodsNo
()).
orElseThrow
(
ResultEnum
.
DATA_NOT_FIND
);
OrderGoods
orderGoods
=
orderGoodsDao
.
getByOrderGoodsNo
(
mq
.
getOrderGoodsNo
()).
orElseThrow
(
ResultEnum
.
DATA_NOT_FIND
);
LineWarnCommonInfoDTO
lineWarnCommonInfo
=
new
LineWarnCommonInfoDTO
();
lineWarnCommonInfo
.
setOrderGoodsNo
(
orderGoods
.
getOrderGoodsNo
());
lineWarnCommonInfo
.
setTransportEndTime
(
lineWarnOrderGoods
.
getTransportEndTime
());
lineWarnCommonInfo
.
setPendingOrderTime
(
lineWarnOrderGoods
.
getPendingOrderTime
());
lineWarnCommonInfo
.
setArriveReceiveExpectTime
(
lineWarnOrderGoods
.
getArriveReceiveExpectTime
());
Integer
time
=
orderChildDao
.
loadTimeAvg
(
orderGoods
.
getSendAddressId
(),
orderGoods
.
getReceiveAddressId
(),
orderGoods
.
getSendSystemAddressId
(),
orderGoods
.
getReceiveSystemAddressId
(),
LocalDateTimeUtils
.
formatTime
(
LocalDateTime
.
now
().
minusDays
(
7
)));
// 接单预警
try
{
lineWarnTakeWarnService
.
takeWarn
(
orderGoods
,
lineWarnCommonInfo
);
}
catch
(
Exception
e
){
log
.
info
(
"接单预警异常,msg:{}"
,
e
.
getMessage
());
}
// 装车预警
try
{
lineWarnLoadWarnService
.
loadWarn
(
orderGoods
,
lineWarnCommonInfo
);
}
catch
(
Exception
e
){
log
.
info
(
"装车预警异常,msg:{}"
,
e
.
getMessage
());
}
// 卸车预警
try
{
lineWarnUnloadWarnService
.
unloadWarn
(
orderGoods
,
lineWarnCommonInfo
);
}
catch
(
Exception
e
){
log
.
info
(
"卸车预警异常,msg:{}"
,
e
.
getMessage
());
}
}
@Override
public
void
notice
(
LineWarnNoticeMqParam
mq
)
{
}
}
performance-web/src/main/java/com/clx/performance/service/impl/linewarn/LineWarnTakeWarnServiceImpl.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
impl
.
linewarn
;
import
com.clx.performance.dao.linewarn.LineWarnConfigDao
;
import
com.clx.performance.dao.linewarn.LineWarnInfoDao
;
import
com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO
;
import
com.clx.performance.enums.linewarn.LineWarnConfigEnum
;
import
com.clx.performance.enums.linewarn.LineWarnInfoEnum
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.model.linewarn.LineWarnConfig
;
import
com.clx.performance.model.linewarn.LineWarnInfo
;
import
com.clx.performance.service.linewarn.LineWarnCommonService
;
import
com.clx.performance.service.linewarn.LineWarnTakeWarnService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Objects
;
@Slf4j
@Service
public
class
LineWarnTakeWarnServiceImpl
implements
LineWarnTakeWarnService
{
@Autowired
private
LineWarnConfigDao
lineWarnConfigDao
;
@Autowired
private
LineWarnInfoDao
lineWarnInfoDao
;
@Autowired
private
LineWarnCommonService
lineWarnCommonService
;
@Override
public
void
takeWarn
(
OrderGoods
orderGoods
,
LineWarnCommonInfoDTO
lineWarnCommonInfo
)
{
int
loadTimeAvg
=
0
;
int
unloadTimeAvg
=
0
;
Integer
arriveReceiveExpectTime
=
lineWarnCommonInfo
.
getArriveReceiveExpectTime
();
long
totalTime
=
Duration
.
between
(
lineWarnCommonInfo
.
getPendingOrderTime
(),
lineWarnCommonInfo
.
getTransportEndTime
()).
toMinutes
();
int
needTime
=
60
+
loadTimeAvg
+
unloadTimeAvg
+
arriveReceiveExpectTime
;
// 接单最长时间
long
difTime
=
totalTime
-
needTime
;
// 任务完成率
BigDecimal
taskCompleteRatio
=
BigDecimal
.
ZERO
;
List
<
LineWarnConfig
>
vehicleWarnConfigList
=
lineWarnConfigDao
.
listByWarnType
(
LineWarnConfigEnum
.
WarnType
.
TAKE
.
getCode
());
if
(
vehicleWarnConfigList
.
isEmpty
())
{
return
;}
for
(
LineWarnConfig
item
:
vehicleWarnConfigList
)
{
doTakeWarn
(
orderGoods
,
item
,
lineWarnCommonInfo
.
getPendingOrderTime
(),
difTime
,
taskCompleteRatio
);
}
}
private
void
doTakeWarn
(
OrderGoods
orderGoods
,
LineWarnConfig
lineWarnConfig
,
LocalDateTime
pendingOrderTime
,
long
difTime
,
BigDecimal
taskCompleteRatio
){
LineWarnInfo
lineWarnInfo
=
lineWarnInfoDao
.
findByOrderGoodsNoAndWarnConfigId
(
orderGoods
.
getOrderGoodsNo
(),
lineWarnConfig
.
getId
()).
orNull
();
if
(
lineWarnInfo
!=
null
&&
Objects
.
equals
(
lineWarnInfo
.
getStatus
(),
LineWarnInfoEnum
.
Status
.
RESOLVE
.
getCode
())){
return
;
}
int
time
=
lineWarnConfig
.
getTimeRatio
().
multiply
(
new
BigDecimal
(
difTime
)).
intValue
();
// 未达到时间占比
if
(
pendingOrderTime
.
plusMinutes
(
time
).
isBefore
(
LocalDateTime
.
now
())){
return
;}
// 达到任务占比
if
(
lineWarnConfig
.
getTaskCompleteRatio
().
compareTo
(
taskCompleteRatio
)
>=
0
)
{
return
;}
// 更新
lineWarnCommonService
.
lineWarnInfoUpdate
(
orderGoods
,
lineWarnInfo
,
lineWarnConfig
);
}
}
performance-web/src/main/java/com/clx/performance/service/impl/linewarn/LineWarnUnloadServiceImpl.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
impl
.
linewarn
;
import
com.clx.performance.dao.linewarn.LineWarnConfigDao
;
import
com.clx.performance.dao.linewarn.LineWarnInfoDao
;
import
com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO
;
import
com.clx.performance.enums.linewarn.LineWarnConfigEnum
;
import
com.clx.performance.enums.linewarn.LineWarnInfoEnum
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.model.linewarn.LineWarnConfig
;
import
com.clx.performance.model.linewarn.LineWarnInfo
;
import
com.clx.performance.service.linewarn.LineWarnCommonService
;
import
com.clx.performance.service.linewarn.LineWarnUnloadWarnService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Objects
;
@Slf4j
@Service
public
class
LineWarnUnloadServiceImpl
implements
LineWarnUnloadWarnService
{
@Autowired
private
LineWarnConfigDao
lineWarnConfigDao
;
@Autowired
private
LineWarnInfoDao
lineWarnInfoDao
;
@Autowired
private
LineWarnCommonService
lineWarnCommonService
;
@Override
public
void
unloadWarn
(
OrderGoods
orderGoods
,
LineWarnCommonInfoDTO
lineWarnCommonInfo
)
{
long
totalTime
=
Duration
.
between
(
lineWarnCommonInfo
.
getPendingOrderTime
(),
lineWarnCommonInfo
.
getTransportEndTime
()).
toMinutes
();
int
needTime
=
0
;
// 接单最长时间
long
difTime
=
totalTime
-
needTime
;
// 任务完成率
BigDecimal
taskCompleteRatio
=
BigDecimal
.
ZERO
;
List
<
LineWarnConfig
>
vehicleWarnConfigList
=
lineWarnConfigDao
.
listByWarnType
(
LineWarnConfigEnum
.
WarnType
.
UNLOAD
.
getCode
());
if
(
vehicleWarnConfigList
.
isEmpty
())
{
return
;}
for
(
LineWarnConfig
item
:
vehicleWarnConfigList
)
{
doTakeWarn
(
orderGoods
,
item
,
lineWarnCommonInfo
.
getPendingOrderTime
(),
difTime
,
taskCompleteRatio
);
}
}
private
void
doTakeWarn
(
OrderGoods
orderGoods
,
LineWarnConfig
lineWarnConfig
,
LocalDateTime
pendingOrderTime
,
long
difTime
,
BigDecimal
taskCompleteRatio
){
LineWarnInfo
lineWarnInfo
=
lineWarnInfoDao
.
findByOrderGoodsNoAndWarnConfigId
(
orderGoods
.
getOrderGoodsNo
(),
lineWarnConfig
.
getId
()).
orNull
();
if
(
lineWarnInfo
!=
null
&&
Objects
.
equals
(
lineWarnInfo
.
getStatus
(),
LineWarnInfoEnum
.
Status
.
RESOLVE
.
getCode
())){
return
;
}
int
time
=
lineWarnConfig
.
getTimeRatio
().
multiply
(
new
BigDecimal
(
difTime
)).
intValue
();
// 未达到时间占比
if
(
pendingOrderTime
.
plusMinutes
(
time
).
isBefore
(
LocalDateTime
.
now
())){
return
;}
// 达到任务占比
if
(
lineWarnConfig
.
getTaskCompleteRatio
().
compareTo
(
taskCompleteRatio
)
>=
0
)
{
return
;}
// 更新
lineWarnCommonService
.
lineWarnInfoUpdate
(
orderGoods
,
lineWarnInfo
,
lineWarnConfig
);
}
}
performance-web/src/main/java/com/clx/performance/service/impl/linewarn/VehicleWarnMqServiceImpl.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
impl
.
linewarn
;
import
com.alibaba.fastjson.JSON
;
import
com.clx.performance.common.MqDelay
;
import
com.clx.performance.common.MqWrapper
;
import
com.clx.performance.constant.RabbitKeyLineWarnConstants
;
import
com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam
;
import
com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam
;
import
com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam
;
import
com.clx.performance.service.linewarn.LineWarnMqService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.core.MessageBuilder
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
@Slf4j
@Service
public
class
VehicleWarnMqServiceImpl
implements
LineWarnMqService
{
@Autowired
private
RabbitTemplate
rabbitTemplate
;
@Override
public
void
orderGoodsAdd
(
String
orderGoodsNo
)
{
LineWarnOrderGoodsAddMqParam
mq
=
new
LineWarnOrderGoodsAddMqParam
();
mq
.
setOrderGoodsNo
(
orderGoodsNo
);
MqDelay
delay
=
new
MqDelay
<>(
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
,
RabbitKeyLineWarnConstants
.
ORDER_GOODS_ADD_ROUTING_KEY
,
new
MqWrapper
<>(
mq
));
Message
message
=
MessageBuilder
.
withBody
(
JSON
.
toJSONString
(
new
MqWrapper
<>(
delay
)).
getBytes
()).
build
();
message
.
getMessageProperties
().
setExpiration
(
"5000"
);
rabbitTemplate
.
send
(
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
,
RabbitKeyLineWarnConstants
.
DEFAULT_DELAY_ROUTING_KEY
,
message
);
}
@Override
public
void
lineWarn
(
String
orderGoodsNo
)
{
LineWarnLineWarnMqParam
mq
=
new
LineWarnLineWarnMqParam
();
mq
.
setOrderGoodsNo
(
orderGoodsNo
);
MqDelay
delay
=
new
MqDelay
<>(
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
,
RabbitKeyLineWarnConstants
.
LINE_WARN_ROUTING_KEY
,
new
MqWrapper
<>(
mq
));
Message
message
=
MessageBuilder
.
withBody
(
JSON
.
toJSONString
(
new
MqWrapper
<>(
delay
)).
getBytes
()).
build
();
message
.
getMessageProperties
().
setExpiration
(
"5000"
);
rabbitTemplate
.
send
(
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
,
RabbitKeyLineWarnConstants
.
DEFAULT_DELAY_ROUTING_KEY
,
message
);
}
@Override
public
void
lineWarnNotice
(
Integer
infoId
)
{
LineWarnNoticeMqParam
mq
=
new
LineWarnNoticeMqParam
();
mq
.
setInfoId
(
infoId
);
MqDelay
delay
=
new
MqDelay
<>(
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
,
RabbitKeyLineWarnConstants
.
LINE_WARN_NOTICE_ROUTING_KEY
,
new
MqWrapper
<>(
mq
));
Message
message
=
MessageBuilder
.
withBody
(
JSON
.
toJSONString
(
new
MqWrapper
<>(
delay
)).
getBytes
()).
build
();
message
.
getMessageProperties
().
setExpiration
(
"5000"
);
rabbitTemplate
.
send
(
RabbitKeyLineWarnConstants
.
DEFAULT_EXCHANGE
,
RabbitKeyLineWarnConstants
.
DEFAULT_DELAY_ROUTING_KEY
,
message
);
}
}
performance-web/src/main/java/com/clx/performance/service/linewarn/LineWarnCommonService.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
linewarn
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.model.linewarn.LineWarnConfig
;
import
com.clx.performance.model.linewarn.LineWarnInfo
;
public
interface
LineWarnCommonService
{
void
lineWarnInfoUpdate
(
OrderGoods
orderGoods
,
LineWarnInfo
lineWarnInfo
,
LineWarnConfig
lineWarnConfig
);
}
performance-web/src/main/java/com/clx/performance/service/linewarn/LineWarnLoadWarnService.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
linewarn
;
import
com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO
;
import
com.clx.performance.model.OrderGoods
;
public
interface
LineWarnLoadWarnService
{
void
loadWarn
(
OrderGoods
orderGoods
,
LineWarnCommonInfoDTO
lineWarnCommonInfo
);
}
performance-web/src/main/java/com/clx/performance/service/linewarn/LineWarnMqHandlerService.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
linewarn
;
import
com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam
;
import
com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam
;
import
com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam
;
public
interface
LineWarnMqHandlerService
{
void
orderGoodsAdd
(
LineWarnOrderGoodsAddMqParam
mq
);
void
lineWarn
(
LineWarnLineWarnMqParam
mq
);
void
notice
(
LineWarnNoticeMqParam
mq
);
}
performance-web/src/main/java/com/clx/performance/service/linewarn/LineWarnMqService.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
linewarn
;
public
interface
LineWarnMqService
{
void
orderGoodsAdd
(
String
orderGoodsNo
);
void
lineWarn
(
String
childNo
);
void
lineWarnNotice
(
Integer
infoId
);
}
performance-web/src/main/java/com/clx/performance/service/linewarn/LineWarnTakeWarnService.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
linewarn
;
import
com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO
;
import
com.clx.performance.model.OrderGoods
;
public
interface
LineWarnTakeWarnService
{
void
takeWarn
(
OrderGoods
orderGoods
,
LineWarnCommonInfoDTO
lineWarnCommonInfo
);
}
performance-web/src/main/java/com/clx/performance/service/linewarn/LineWarnUnloadWarnService.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
service
.
linewarn
;
import
com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO
;
import
com.clx.performance.model.OrderGoods
;
public
interface
LineWarnUnloadWarnService
{
void
unloadWarn
(
OrderGoods
orderGoods
,
LineWarnCommonInfoDTO
lineWarnCommonInfo
);
}
performance-web/src/main/java/com/clx/performance/utils/gd/GdUtils.java
0 → 100644
浏览文件 @
4dc18012
package
com
.
clx
.
performance
.
utils
.
gd
;
import
com.clx.performance.dto.gd.GdRouteDTO
;
import
com.msl.common.exception.ServiceSystemException
;
import
com.msl.common.utils.gps.GpsUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.math.BigDecimal
;
import
java.util.List
;
@Slf4j
@Component
public
class
GdUtils
{
private
static
final
Integer
SEC_FER_MIN
=
60
;
@Autowired
private
GdService
gdService
;
/**
* 获取需要时间(min)
*/
public
int
getNeedTime
(
BigDecimal
originLongitude
,
BigDecimal
originLatitude
,
BigDecimal
destinationLongitude
,
BigDecimal
destinationLatitude
){
try
{
List
<
GdRouteDTO
>
gdRouteDTOS
=
gdService
.
getRoute
(
originLongitude
,
originLatitude
,
destinationLongitude
,
destinationLatitude
);
if
(!
gdRouteDTOS
.
isEmpty
()){
return
gdRouteDTOS
.
get
(
0
).
getDuration
()
/
SEC_FER_MIN
;
}
}
catch
(
ServiceSystemException
e
)
{
log
.
info
(
"获取高德线路失败, msg:{}"
,
e
.
getMessage
());
}
return
0
;
}
/**
* 获取需要时间(min)
*/
public
int
getNeedTime
(
BigDecimal
[]
currentPosition
,
BigDecimal
destinationLongitude
,
BigDecimal
destinationLatitude
)
{
if
(
currentPosition
==
null
)
{
return
0
;}
return
getNeedTime
(
currentPosition
[
0
],
currentPosition
[
1
],
destinationLongitude
,
destinationLatitude
);
}
/**
* 获取需要距离(m)
*/
public
int
getNeedDistance
(
BigDecimal
[]
currentPosition
,
BigDecimal
destinationLongitude
,
BigDecimal
destinationLatitude
){
int
needDistance
=
0
;
if
(
currentPosition
==
null
)
{
return
0
;}
try
{
List
<
GdRouteDTO
>
gdRouteDTOS
=
gdService
.
getRoute
(
currentPosition
[
0
],
currentPosition
[
1
],
destinationLongitude
,
destinationLatitude
);
if
(!
gdRouteDTOS
.
isEmpty
()){
needDistance
=
gdRouteDTOS
.
get
(
0
).
getDistance
();
}
}
catch
(
ServiceSystemException
e
)
{
log
.
info
(
"获取高德线路失败, msg:{}"
,
e
.
getMessage
());
}
return
needDistance
;
}
public
Integer
getDistance
(
BigDecimal
[]
currentPosition
,
BigDecimal
destinationLongitude
,
BigDecimal
destinationLatitude
)
{
if
(
currentPosition
==
null
)
{
return
null
;}
return
GpsUtil
.
distanceM
(
currentPosition
[
0
],
currentPosition
[
1
],
destinationLongitude
,
destinationLatitude
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论