Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
d2cb1303
提交
d2cb1303
authored
5月 22, 2024
作者:
刘海泉
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改车辆司机轨迹切分逻辑
上级
df16d8fb
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
111 行增加
和
119 行删除
+111
-119
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
TraceMonitorServiceImpl.java
...rformance/service/impl/trace/TraceMonitorServiceImpl.java
+6
-106
TruckTraceServiceImpl.java
...performance/service/impl/trace/TruckTraceServiceImpl.java
+95
-13
TruckTraceService.java
.../com/clx/performance/service/trace/TruckTraceService.java
+6
-0
没有找到文件。
performance-api/src/main/java/com/clx/performance/vo/pc/trace/DriverTraceVO.java
浏览文件 @
d2cb1303
...
...
@@ -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
浏览文件 @
d2cb1303
...
...
@@ -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/TraceMonitorServiceImpl.java
浏览文件 @
d2cb1303
package
com
.
clx
.
performance
.
service
.
impl
.
trace
;
import
com.alibaba.fastjson.JSON
;
import
com.clx.order.enums.ResultEnum
;
import
com.clx.performance.dao.OrderChildDao
;
import
com.clx.performance.enums.DriverTruckEnum
;
...
...
@@ -16,12 +15,10 @@ import com.msl.common.exception.ServiceSystemException;
import
com.msl.common.utils.DateUtils
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
...
...
@@ -34,9 +31,9 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
private
final
OrderChildDao
orderChildDao
;
//private final TruckFeign truckFeign;
private
final
int
TRACE_DAY_MAX
=
7
;
private
final
int
TRACE_DAY_MAX
=
3
;
private
final
static
long
stopMinutes
=
5
;
@Override
public
OrderChildTraceVO
getOrderChildTrace
(
QueryTraceParam
param
)
{
if
(
StringUtils
.
isBlank
(
param
.
getChildNo
())){
...
...
@@ -61,8 +58,8 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
List
<
DriverTraceVO
>
driverTrace
=
truckTraceService
.
listDriverTraceByTime
(
child
.
getDriverUserNo
(),
param
.
getBeginTime
(),
param
.
getEndTime
());
OrderChildTraceVO
result
=
new
OrderChildTraceVO
();
result
.
setDriverTraceList
(
splitDriverTrace
(
driverTrace
));
result
.
setTruckTraceList
(
splitTruckTrace
(
truckTrace
));
result
.
setDriverTraceList
(
truckTraceService
.
splitDriverTrace
(
driverTrace
));
result
.
setTruckTraceList
(
truckTraceService
.
splitTruckTrace
(
truckTrace
));
return
result
;
}
...
...
@@ -87,109 +84,12 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
List
<
DriverTruckTraceVO
>
truckTrace
=
truckTraceService
.
listTruckTraceByTime
(
truckNo
,
beginTime
,
endTime
);
if
(
Objects
.
nonNull
(
userNo
)){
List
<
DriverTraceVO
>
driverTrace
=
truckTraceService
.
listDriverTraceByTime
(
userNo
,
beginTime
,
endTime
);
result
.
setDriverTraceList
(
splitDriverTrace
(
driverTrace
));
}
result
.
setTruckTraceList
(
splitTruckTrace
(
truckTrace
));
return
result
;
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public
static
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
);
}
}
return
result
;
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public
static
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
);
}
result
.
setDriverTraceList
(
truckTraceService
.
splitDriverTrace
(
driverTrace
));
}
result
.
setTruckTraceList
(
truckTraceService
.
splitTruckTrace
(
truckTrace
));
return
result
;
}
public
static
void
main
(
String
[]
args
)
{
List
<
DriverTruckTraceVO
>
traceList
=
new
ArrayList
<>();
int
minStart
=
10
;
for
(
int
i
=
0
;
i
<
20
;
i
++)
{
DriverTruckTraceVO
v1
=
new
DriverTruckTraceVO
();
if
(
i
==
10
){
minStart
=
minStart
+
6
;
v1
.
setGpsTime
(
"2021-01-01 10:"
+
minStart
+
":00"
);
}
else
if
(
i
==
13
){
minStart
=
minStart
+
8
;
v1
.
setGpsTime
(
"2021-01-01 10:"
+
minStart
+
":00"
);
}
else
if
(
i
==
19
){
minStart
=
minStart
+
7
;
v1
.
setGpsTime
(
"2021-01-01 10:"
+
minStart
+
":00"
);
}
else
{
minStart
=
minStart
+
1
;
v1
.
setGpsTime
(
"2021-01-01 10:"
+
minStart
+
":00"
);
}
traceList
.
add
(
v1
);
}
List
<
List
<
DriverTruckTraceVO
>>
lists
=
splitTruckTrace
(
traceList
);
for
(
List
<
DriverTruckTraceVO
>
item
:
lists
){
System
.
out
.
println
(
JSON
.
toJSONString
(
item
));
}
}
public
void
checkParam
(
QueryTraceParam
param
){
LocalDateTime
beginTime
=
DateUtils
.
parseDateTime
(
param
.
getBeginTime
()).
get
();
LocalDateTime
endTime
=
DateUtils
.
parseDateTime
(
param
.
getEndTime
()).
get
();
...
...
performance-web/src/main/java/com/clx/performance/service/impl/trace/TruckTraceServiceImpl.java
浏览文件 @
d2cb1303
...
...
@@ -12,6 +12,7 @@ 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
;
...
...
@@ -41,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
>()
...
...
@@ -49,9 +52,11 @@ public class TruckTraceServiceImpl implements TruckTraceService {
.
le
(
TruckTraceESPlus:
:
getGpsTime
,
endTime
)
.
orderByAsc
(
"gpsTime"
)
);
return
truckTraceStruct
.
convert
(
list
);
}
List
<
DriverTruckTraceVO
>
traceList
=
truckTraceStruct
.
convert
(
list
);
//计算车辆的停留结束时间
public
List
<
DriverTruckTraceVO
>
calcTruckStayTime
(
List
<
DriverTruckTraceVO
>
traceList
){
// 停留时长计算
Integer
parkIdx
=
null
;
for
(
int
i
=
0
;
i
<
traceList
.
size
();
i
++){
...
...
@@ -64,6 +69,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
;
}
}
...
...
@@ -71,22 +77,14 @@ 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
++){
...
...
@@ -99,6 +97,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
;
}
}
...
...
@@ -106,11 +105,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
){
...
...
performance-web/src/main/java/com/clx/performance/service/trace/TruckTraceService.java
浏览文件 @
d2cb1303
...
...
@@ -23,4 +23,10 @@ public interface TruckTraceService {
BigDecimal
[]
getCurrentTruckPosition
(
String
truckNo
);
List
<
List
<
DriverTraceVO
>>
splitDriverTrace
(
List
<
DriverTraceVO
>
driverTraceList
);
List
<
List
<
DriverTruckTraceVO
>>
splitTruckTrace
(
List
<
DriverTruckTraceVO
>
traceList
);
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论