Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
b373ac29
提交
b373ac29
authored
5月 21, 2024
作者:
刘海泉
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/v15.4_truck_fleet_20240513' into test
上级
1b638469
df16d8fb
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
122 行增加
和
16 行删除
+122
-16
OrderChildTraceVO.java
...va/com/clx/performance/vo/pc/trace/OrderChildTraceVO.java
+3
-2
TraceMonitorServiceImpl.java
...rformance/service/impl/trace/TraceMonitorServiceImpl.java
+114
-14
LocalDateTimeUtils.java
...in/java/com/clx/performance/utils/LocalDateTimeUtils.java
+5
-0
没有找到文件。
performance-api/src/main/java/com/clx/performance/vo/pc/trace/OrderChildTraceVO.java
浏览文件 @
b373ac29
...
...
@@ -19,8 +19,8 @@ import java.util.List;
@NoArgsConstructor
public
class
OrderChildTraceVO
{
@ApiModelProperty
(
value
=
"车辆轨迹列表"
)
List
<
DriverTruckTraceVO
>
truckTraceList
;
List
<
List
<
DriverTruckTraceVO
>
>
truckTraceList
;
@ApiModelProperty
(
value
=
"司机轨迹列表"
)
List
<
DriverTraceVO
>
driverTraceList
;
List
<
List
<
DriverTraceVO
>
>
driverTraceList
;
}
\ No newline at end of file
performance-web/src/main/java/com/clx/performance/service/impl/trace/TraceMonitorServiceImpl.java
浏览文件 @
b373ac29
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
;
...
...
@@ -11,17 +12,16 @@ import com.clx.performance.utils.LocalDateTimeUtils;
import
com.clx.performance.vo.pc.trace.DriverTraceVO
;
import
com.clx.performance.vo.pc.trace.DriverTruckTraceVO
;
import
com.clx.performance.vo.pc.trace.OrderChildTraceVO
;
import
com.clx.user.feign.TruckFeign
;
import
com.clx.user.vo.feign.TruckOwnerInfoVO
;
import
com.msl.common.exception.ServiceSystemException
;
import
com.msl.common.result.Result
;
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
;
...
...
@@ -32,9 +32,11 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
private
final
TruckTraceService
truckTraceService
;
private
final
OrderChildDao
orderChildDao
;
private
final
TruckFeign
truckFeign
;
//
private final TruckFeign truckFeign;
private
final
int
TRACE_DAY_MAX
=
7
;
private
final
static
long
stopMinutes
=
5
;
@Override
public
OrderChildTraceVO
getOrderChildTrace
(
QueryTraceParam
param
)
{
if
(
StringUtils
.
isBlank
(
param
.
getChildNo
())){
...
...
@@ -59,8 +61,8 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
List
<
DriverTraceVO
>
driverTrace
=
truckTraceService
.
listDriverTraceByTime
(
child
.
getDriverUserNo
(),
param
.
getBeginTime
(),
param
.
getEndTime
());
OrderChildTraceVO
result
=
new
OrderChildTraceVO
();
result
.
setDriverTraceList
(
driverTrace
);
result
.
setTruckTraceList
(
truckTrace
);
result
.
setDriverTraceList
(
splitDriverTrace
(
driverTrace
)
);
result
.
setTruckTraceList
(
splitTruckTrace
(
truckTrace
)
);
return
result
;
}
...
...
@@ -68,27 +70,125 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
public
OrderChildTraceVO
getTruckTrace
(
QueryTraceParam
param
)
{
checkParam
(
param
);
//查询车辆的车主信息
Result
<
TruckOwnerInfoVO
>
result
=
truckFeign
.
getTruckOwnerInfo
(
/*
Result<TruckOwnerInfoVO> result = truckFeign.getTruckOwnerInfo(
param.getTruckNo());
log.info("查询车辆车主信息,车牌号:{},结果:{}",param.getTruckNo(),result);
if(!result.succeed() || Objects.isNull(result.getData())){
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND,"未查询到车辆车主信息");
}
long
userNo
=
result
.
getData
().
getUserNo
();
long userNo = result.getData().getUserNo();
*/
return
this
.
getTrace
(
userNo
,
param
.
getTruckNo
(),
param
.
getBeginTime
(),
param
.
getEndTime
());
return
this
.
getTrace
(
null
,
param
.
getTruckNo
(),
param
.
getBeginTime
(),
param
.
getEndTime
());
}
private
OrderChildTraceVO
getTrace
(
long
userNo
,
String
truckNo
,
String
beginTime
,
String
endTime
){
List
<
DriverTruckTraceVO
>
truckTrace
=
truckTraceService
.
listTruckTraceByTime
(
truckNo
,
beginTime
,
endTime
);
List
<
DriverTraceVO
>
driverTrace
=
truckTraceService
.
listDriverTraceByTime
(
userNo
,
beginTime
,
endTime
);
private
OrderChildTraceVO
getTrace
(
Long
userNo
,
String
truckNo
,
String
beginTime
,
String
endTime
){
OrderChildTraceVO
result
=
new
OrderChildTraceVO
();
result
.
setDriverTraceList
(
driverTrace
);
result
.
setTruckTraceList
(
truckTrace
);
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
);
}
}
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
();
...
...
performance-web/src/main/java/com/clx/performance/utils/LocalDateTimeUtils.java
浏览文件 @
b373ac29
...
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论