Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
27dc73a6
提交
27dc73a6
authored
5月 22, 2024
作者:
艾庆国
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
运单预警
上级
0e63db6b
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
151 行增加
和
17 行删除
+151
-17
DriverTraceAddParam.java
...a/com/clx/performance/param/temp/DriverTraceAddParam.java
+2
-0
DriverTraceVO.java
...n/java/com/clx/performance/vo/pc/trace/DriverTraceVO.java
+2
-0
DriverTruckTraceVO.java
...a/com/clx/performance/vo/pc/trace/DriverTruckTraceVO.java
+2
-0
TruckTraceServiceImpl.java
...performance/service/impl/trace/TruckTraceServiceImpl.java
+121
-13
VehicleWarnInfoServiceImpl.java
.../service/impl/vehiclewarn/VehicleWarnInfoServiceImpl.java
+2
-2
VehicleWarnParkWarnServiceImpl.java
...vice/impl/vehiclewarn/VehicleWarnParkWarnServiceImpl.java
+2
-2
TruckTraceService.java
.../com/clx/performance/service/trace/TruckTraceService.java
+15
-0
LocalDateTimeUtils.java
...in/java/com/clx/performance/utils/LocalDateTimeUtils.java
+5
-0
没有找到文件。
performance-api/src/main/java/com/clx/performance/param/temp/DriverTraceAddParam.java
浏览文件 @
27dc73a6
...
...
@@ -31,6 +31,8 @@ public class DriverTraceAddParam {
private
BigDecimal
[]
location
;
@ApiModelProperty
(
value
=
"时间"
)
private
String
gpsTime
;
@ApiModelProperty
(
value
=
"速度"
,
example
=
"12.34"
)
private
BigDecimal
speed
;
}
}
performance-api/src/main/java/com/clx/performance/vo/pc/trace/DriverTraceVO.java
浏览文件 @
27dc73a6
...
...
@@ -22,6 +22,8 @@ public class DriverTraceVO {
private
BigDecimal
speed
;
@ApiModelProperty
(
value
=
"停留时长(min)"
,
example
=
"12.3"
)
private
BigDecimal
stayTime
=
BigDecimal
.
ZERO
;
@ApiModelProperty
(
value
=
"停留结束时间"
)
private
String
stayEndTime
;
@ApiModelProperty
(
value
=
"车辆状态:1空车 2重车"
,
example
=
"1"
)
private
Integer
truckStatus
;
}
performance-api/src/main/java/com/clx/performance/vo/pc/trace/DriverTruckTraceVO.java
浏览文件 @
27dc73a6
...
...
@@ -26,6 +26,8 @@ public class DriverTruckTraceVO {
private
BigDecimal
latitude
;
@ApiModelProperty
(
value
=
"GPS 时间"
)
private
String
gpsTime
;
@ApiModelProperty
(
value
=
"停留结束时间"
)
private
String
stayEndTime
;
@ApiModelProperty
(
value
=
"停留时长(min)"
,
example
=
"12.3"
)
private
BigDecimal
stayTime
=
BigDecimal
.
ZERO
;
@ApiModelProperty
(
value
=
"车辆状态:1空车 2重车"
,
example
=
"1"
)
...
...
performance-web/src/main/java/com/clx/performance/service/impl/trace/TruckTraceServiceImpl.java
浏览文件 @
27dc73a6
...
...
@@ -12,7 +12,9 @@ import com.clx.performance.struct.trace.TruckTraceStruct;
import
com.clx.performance.utils.LocalDateTimeUtils
;
import
com.clx.performance.vo.pc.trace.DriverTraceVO
;
import
com.clx.performance.vo.pc.trace.DriverTruckTraceVO
;
import
com.msl.common.utils.DateUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -40,6 +42,8 @@ public class TruckTraceServiceImpl implements TruckTraceService {
@Autowired
private
DriverTraceStruct
driverTraceStruct
;
private
final
static
long
stopMinutes
=
5
;
@Override
public
List
<
DriverTruckTraceVO
>
listTruckTraceByTime
(
String
truckNo
,
String
beginTime
,
String
endTime
)
{
List
<
TruckTraceESPlus
>
list
=
truckTraceESPlusMapper
.
selectList
(
new
LambdaEsQueryWrapper
<
TruckTraceESPlus
>()
...
...
@@ -48,9 +52,12 @@ public class TruckTraceServiceImpl implements TruckTraceService {
.
le
(
TruckTraceESPlus:
:
getGpsTime
,
endTime
)
.
orderByAsc
(
"gpsTime"
)
);
return
truckTraceStruct
.
convert
(
list
);
}
List
<
DriverTruckTraceVO
>
traceList
=
truckTraceStruct
.
convert
(
list
);
//计算车辆的停留结束时间
@Override
public
List
<
DriverTruckTraceVO
>
calcTruckStayTime
(
List
<
DriverTruckTraceVO
>
traceList
){
// 停留时长计算
Integer
parkIdx
=
null
;
for
(
int
i
=
0
;
i
<
traceList
.
size
();
i
++){
...
...
@@ -63,6 +70,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
if
(
parkIdx
==
null
)
{
continue
;}
long
stayTime
=
Duration
.
between
(
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
parkIdx
).
getGpsTime
()),
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
i
).
getGpsTime
())).
getSeconds
();
traceList
.
get
(
parkIdx
).
setStayTime
(
new
BigDecimal
(
stayTime
).
divide
(
new
BigDecimal
(
60
),
1
,
RoundingMode
.
HALF_UP
));
traceList
.
get
(
parkIdx
).
setStayEndTime
(
traceList
.
get
(
i
).
getGpsTime
());
parkIdx
=
null
;
}
}
...
...
@@ -70,22 +78,15 @@ public class TruckTraceServiceImpl implements TruckTraceService {
if
(
parkIdx
!=
null
&&
parkIdx
<
traceList
.
size
()-
1
){
long
stayTime
=
Duration
.
between
(
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
parkIdx
).
getGpsTime
()),
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
traceList
.
size
()-
1
).
getGpsTime
())).
getSeconds
();
traceList
.
get
(
parkIdx
).
setStayTime
(
new
BigDecimal
(
stayTime
).
divide
(
new
BigDecimal
(
60
),
1
,
RoundingMode
.
HALF_UP
));
traceList
.
get
(
parkIdx
).
setStayEndTime
(
traceList
.
get
(
traceList
.
size
()-
1
).
getGpsTime
());
}
return
traceList
;
}
//计算司机的停留结束时间
@Override
public
List
<
DriverTraceVO
>
listDriverTraceByTime
(
Long
userNo
,
String
beginTime
,
String
endTime
)
{
List
<
DriverTraceESPlus
>
list
=
driverTraceESPlusMapper
.
selectList
(
new
LambdaEsQueryWrapper
<
DriverTraceESPlus
>()
.
eq
(
DriverTraceESPlus:
:
getUserNo
,
userNo
)
.
ge
(
DriverTraceESPlus:
:
getPositionTime
,
beginTime
)
.
le
(
DriverTraceESPlus:
:
getPositionTime
,
endTime
)
.
orderByAsc
(
"positionTime"
)
);
List
<
DriverTraceVO
>
traceList
=
driverTraceStruct
.
convert
(
list
);
public
List
<
DriverTraceVO
>
calcDriverStayTime
(
List
<
DriverTraceVO
>
traceList
){
// 停留时长计算
Integer
parkIdx
=
null
;
for
(
int
i
=
0
;
i
<
traceList
.
size
();
i
++){
...
...
@@ -98,6 +99,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
if
(
parkIdx
==
null
)
{
continue
;}
long
stayTime
=
Duration
.
between
(
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
parkIdx
).
getGpsTime
()),
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
i
).
getGpsTime
())).
getSeconds
();
traceList
.
get
(
parkIdx
).
setStayTime
(
new
BigDecimal
(
stayTime
).
divide
(
new
BigDecimal
(
60
),
1
,
RoundingMode
.
HALF_UP
));
traceList
.
get
(
parkIdx
).
setStayEndTime
(
traceList
.
get
(
i
).
getGpsTime
());
parkIdx
=
null
;
}
}
...
...
@@ -105,11 +107,94 @@ public class TruckTraceServiceImpl implements TruckTraceService {
if
(
parkIdx
!=
null
&&
parkIdx
<
traceList
.
size
()-
1
){
long
stayTime
=
Duration
.
between
(
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
parkIdx
).
getGpsTime
()),
LocalDateTimeUtils
.
parseTime
(
traceList
.
get
(
traceList
.
size
()-
1
).
getGpsTime
())).
getSeconds
();
traceList
.
get
(
parkIdx
).
setStayTime
(
new
BigDecimal
(
stayTime
).
divide
(
new
BigDecimal
(
60
),
1
,
RoundingMode
.
HALF_UP
));
traceList
.
get
(
parkIdx
).
setStayEndTime
(
traceList
.
get
(
traceList
.
size
()-
1
).
getGpsTime
());
}
return
traceList
;
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public
List
<
List
<
DriverTruckTraceVO
>>
splitTruckTrace
(
List
<
DriverTruckTraceVO
>
traceList
){
List
<
List
<
DriverTruckTraceVO
>>
result
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
traceList
)){
if
(
traceList
.
size
()
==
1
){
result
.
add
(
traceList
);
return
result
;
}
else
{
List
<
DriverTruckTraceVO
>
temp
=
new
ArrayList
<>();
temp
.
add
(
traceList
.
get
(
0
));
for
(
int
i
=
1
;
i
<
traceList
.
size
();
i
++){
DriverTruckTraceVO
current
=
traceList
.
get
(
i
);
DriverTruckTraceVO
prev
=
traceList
.
get
(
i
-
1
);
long
minutes
=
LocalDateTimeUtils
.
betweenMin
(
DateUtils
.
parseDateTime
(
prev
.
getGpsTime
()).
get
(),
DateUtils
.
parseDateTime
(
current
.
getGpsTime
()).
get
());
//如果两个坐标停留的时间超过指定时间,则为新的一段路线。
if
(
minutes
>
stopMinutes
){
result
.
add
(
temp
);
temp
=
new
ArrayList
<>();
temp
.
add
(
current
);
}
else
{
temp
.
add
(
current
);
}
}
result
.
add
(
temp
);
}
}
for
(
List
<
DriverTruckTraceVO
>
list
:
result
)
{
calcTruckStayTime
(
list
);
}
return
result
;
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public
List
<
List
<
DriverTraceVO
>>
splitDriverTrace
(
List
<
DriverTraceVO
>
driverTraceList
){
List
<
List
<
DriverTraceVO
>>
result
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
driverTraceList
)){
if
(
driverTraceList
.
size
()
==
1
){
result
.
add
(
driverTraceList
);
return
result
;
}
else
{
List
<
DriverTraceVO
>
temp
=
new
ArrayList
<>();
temp
.
add
(
driverTraceList
.
get
(
0
));
for
(
int
i
=
1
;
i
<
driverTraceList
.
size
();
i
++){
DriverTraceVO
current
=
driverTraceList
.
get
(
i
);
DriverTraceVO
prev
=
driverTraceList
.
get
(
i
-
1
);
long
minutes
=
LocalDateTimeUtils
.
betweenMin
(
DateUtils
.
parseDateTime
(
prev
.
getGpsTime
()).
get
(),
DateUtils
.
parseDateTime
(
current
.
getGpsTime
()).
get
());
//如果两个坐标停留的时间超过指定时间,则为新的一段路线。
if
(
minutes
>
stopMinutes
){
result
.
add
(
temp
);
temp
=
new
ArrayList
<>();
temp
.
add
(
current
);
}
else
{
temp
.
add
(
current
);
}
}
result
.
add
(
temp
);
}
}
for
(
List
<
DriverTraceVO
>
list
:
result
)
{
calcDriverStayTime
(
list
);
}
return
result
;
}
@Override
public
List
<
DriverTraceVO
>
listDriverTraceByTime
(
Long
userNo
,
String
beginTime
,
String
endTime
)
{
List
<
DriverTraceESPlus
>
list
=
driverTraceESPlusMapper
.
selectList
(
new
LambdaEsQueryWrapper
<
DriverTraceESPlus
>()
.
eq
(
DriverTraceESPlus:
:
getUserNo
,
userNo
)
.
ge
(
DriverTraceESPlus:
:
getPositionTime
,
beginTime
)
.
le
(
DriverTraceESPlus:
:
getPositionTime
,
endTime
)
.
orderByAsc
(
"positionTime"
)
);
return
driverTraceStruct
.
convert
(
list
);
}
@Override
public
void
truckTraceSave
(
TruckTraceAddParam
param
){
...
...
@@ -134,14 +219,16 @@ public class TruckTraceServiceImpl implements TruckTraceService {
public
void
driverTraceSave
(
DriverTraceAddParam
param
){
List
<
DriverTraceESPlus
>
list
=
new
ArrayList
<>();
DriverTraceESPlus
es
=
null
;
for
(
DriverTraceAddParam
.
DriverTraceItem
item
:
param
.
getTraceList
())
{
DriverTraceESPlus
es
=
new
DriverTraceESPlus
();
es
=
new
DriverTraceESPlus
();
es
.
setUserNo
(
item
.
getUserNo
());
es
.
setDataType
(
item
.
getDataType
());
es
.
setLocation
(
item
.
getLocation
());
es
.
setPositionTime
(
item
.
getGpsTime
());
es
.
setCreateTime
(
LocalDateTimeUtils
.
formatTime
());
es
.
setModifiedTime
(
es
.
getCreateTime
());
es
.
setSpeed
(
item
.
getSpeed
());
list
.
add
(
es
);
}
...
...
@@ -230,4 +317,25 @@ public class TruckTraceServiceImpl implements TruckTraceService {
return
0
;
}
@Override
public
BigDecimal
[]
getCurrentTruckPosition
(
String
truckNo
)
{
String
beginTime
=
LocalDateTimeUtils
.
formatTime
(
LocalDateTime
.
now
().
minusMinutes
(
5
));
String
endTime
=
LocalDateTimeUtils
.
formatTime
();
// 车辆
List
<
TruckTraceESPlus
>
list
=
truckTraceESPlusMapper
.
selectList
(
new
LambdaEsQueryWrapper
<
TruckTraceESPlus
>()
.
eq
(
TruckTraceESPlus:
:
getTruckNo
,
truckNo
)
.
ge
(
TruckTraceESPlus:
:
getGpsTime
,
beginTime
)
.
le
(
TruckTraceESPlus:
:
getGpsTime
,
endTime
)
.
orderByDesc
(
"gpsTime"
)
.
limit
(
1
)
);
if
(
CollectionUtils
.
isNotEmpty
(
list
)){
return
list
.
get
(
0
).
getLocation
();
}
return
null
;
}
}
performance-web/src/main/java/com/clx/performance/service/impl/vehiclewarn/VehicleWarnInfoServiceImpl.java
浏览文件 @
27dc73a6
...
...
@@ -113,8 +113,8 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
if
(
orderChild
.
getFinishTime
()
!=
null
)
{
endTime
=
orderChild
.
getFinishTime
();}
if
(
endTime
.
isAfter
(
beginTime
.
plusDays
(
TRUCK_TRACE_DAY_MAX
)))
{
endTime
=
beginTime
.
plusDays
(
TRUCK_TRACE_DAY_MAX
);}
//最多查询3天
List
<
DriverTruckTraceVO
>
truckTraceList
=
truckTraceService
.
listTruckTraceByTime
(
vehicleWarnInfo
.
getTruckNo
(),
LocalDateTimeUtils
.
formatTime
(
beginTime
),
LocalDateTimeUtils
.
formatTime
(
endTime
));
List
<
DriverTraceVO
>
driverTraceList
=
truckTraceService
.
listDriverTraceByTime
(
vehicleWarnInfo
.
getDriverUserNo
(),
LocalDateTimeUtils
.
formatTime
(
beginTime
),
LocalDateTimeUtils
.
formatTime
(
endTime
));
List
<
DriverTruckTraceVO
>
truckTraceList
=
truckTraceService
.
calcTruckStayTime
(
truckTraceService
.
listTruckTraceByTime
(
vehicleWarnInfo
.
getTruckNo
(),
LocalDateTimeUtils
.
formatTime
(
beginTime
),
LocalDateTimeUtils
.
formatTime
(
endTime
)
));
List
<
DriverTraceVO
>
driverTraceList
=
truckTraceService
.
calcDriverStayTime
(
truckTraceService
.
listDriverTraceByTime
(
vehicleWarnInfo
.
getDriverUserNo
(),
LocalDateTimeUtils
.
formatTime
(
beginTime
),
LocalDateTimeUtils
.
formatTime
(
endTime
)
));
// 接单重车、卸车空车
for
(
DriverTruckTraceVO
item
:
truckTraceList
)
{
...
...
performance-web/src/main/java/com/clx/performance/service/impl/vehiclewarn/VehicleWarnParkWarnServiceImpl.java
浏览文件 @
27dc73a6
...
...
@@ -73,7 +73,7 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
}
private
void
doParkTimeout
(
OrderChild
orderChild
,
VehicleWarnChild
vehicleWarnChild
,
VehicleWarnConfig
vehicleWarnConfig
,
int
parkTime
e
){
private
void
doParkTimeout
(
OrderChild
orderChild
,
VehicleWarnChild
vehicleWarnChild
,
VehicleWarnConfig
vehicleWarnConfig
,
int
parkTime
){
VehicleWarnInfo
vehicleWarnInfo
=
vehicleWarnInfoDao
.
findByChildNoAndWarnConfigId
(
vehicleWarnChild
.
getChildNo
(),
vehicleWarnConfig
.
getId
()).
orNull
();
if
(
vehicleWarnInfo
!=
null
&&
Objects
.
equals
(
vehicleWarnInfo
.
getStatus
(),
VehicleWarnInfoEnum
.
Status
.
RESOLVE
.
getCode
())){
return
;
...
...
@@ -85,7 +85,7 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
// 超时判断
int
time
=
vehicleWarnConfig
.
getTimeoutRatio
().
multiply
(
new
BigDecimal
(
MIN_FER_HOUR
)).
intValue
();
if
(
parkTime
e
>
time
){
return
;}
if
(
parkTime
>
time
){
return
;}
// 更新
vehicleWarnCommonService
.
vehicleWarnInfoUpdate
(
orderChild
,
vehicleWarnInfo
,
vehicleWarnConfig
);
...
...
performance-web/src/main/java/com/clx/performance/service/trace/TruckTraceService.java
浏览文件 @
27dc73a6
...
...
@@ -20,4 +20,19 @@ public interface TruckTraceService {
BigDecimal
[]
getCurrentPosition
(
String
truckNo
,
Long
userNo
);
int
getParkTime
(
String
truckNo
,
Long
userNo
);
BigDecimal
[]
getCurrentTruckPosition
(
String
truckNo
);
List
<
List
<
DriverTraceVO
>>
splitDriverTrace
(
List
<
DriverTraceVO
>
driverTraceList
);
//计算车辆的停留结束时间
List
<
DriverTruckTraceVO
>
calcTruckStayTime
(
List
<
DriverTruckTraceVO
>
traceList
);
//计算司机的停留结束时间
List
<
DriverTraceVO
>
calcDriverStayTime
(
List
<
DriverTraceVO
>
traceList
);
List
<
List
<
DriverTruckTraceVO
>>
splitTruckTrace
(
List
<
DriverTruckTraceVO
>
traceList
);
}
performance-web/src/main/java/com/clx/performance/utils/LocalDateTimeUtils.java
浏览文件 @
27dc73a6
...
...
@@ -409,4 +409,9 @@ public class LocalDateTimeUtils {
Duration
duration
=
Duration
.
between
(
startTime
,
endTime
);
return
duration
.
getSeconds
();
}
public
static
long
betweenMin
(
LocalDateTime
startTime
,
LocalDateTime
endTime
){
Duration
duration
=
Duration
.
between
(
startTime
,
endTime
);
return
duration
.
toMinutes
();
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论