提交 b373ac29 authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/v15.4_truck_fleet_20240513' into test

...@@ -19,8 +19,8 @@ import java.util.List; ...@@ -19,8 +19,8 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
public class OrderChildTraceVO { public class OrderChildTraceVO {
@ApiModelProperty(value = "车辆轨迹列表") @ApiModelProperty(value = "车辆轨迹列表")
List<DriverTruckTraceVO> truckTraceList; List<List<DriverTruckTraceVO>> truckTraceList;
@ApiModelProperty(value = "司机轨迹列表") @ApiModelProperty(value = "司机轨迹列表")
List<DriverTraceVO> driverTraceList; List<List<DriverTraceVO>> driverTraceList;
} }
\ No newline at end of file
package com.clx.performance.service.impl.trace; package com.clx.performance.service.impl.trace;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.ResultEnum; import com.clx.order.enums.ResultEnum;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.enums.DriverTruckEnum; import com.clx.performance.enums.DriverTruckEnum;
...@@ -11,17 +12,16 @@ import com.clx.performance.utils.LocalDateTimeUtils; ...@@ -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.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO; import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.clx.performance.vo.pc.trace.OrderChildTraceVO; 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.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
...@@ -32,9 +32,11 @@ public class TraceMonitorServiceImpl implements TraceMonitorService { ...@@ -32,9 +32,11 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
private final TruckTraceService truckTraceService; private final TruckTraceService truckTraceService;
private final OrderChildDao orderChildDao; private final OrderChildDao orderChildDao;
private final TruckFeign truckFeign; //private final TruckFeign truckFeign;
private final int TRACE_DAY_MAX = 7; private final int TRACE_DAY_MAX = 7;
private final static long stopMinutes = 5;
@Override @Override
public OrderChildTraceVO getOrderChildTrace(QueryTraceParam param) { public OrderChildTraceVO getOrderChildTrace(QueryTraceParam param) {
if(StringUtils.isBlank(param.getChildNo())){ if(StringUtils.isBlank(param.getChildNo())){
...@@ -59,8 +61,8 @@ public class TraceMonitorServiceImpl implements TraceMonitorService { ...@@ -59,8 +61,8 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
List<DriverTraceVO> driverTrace = truckTraceService.listDriverTraceByTime(child.getDriverUserNo(),param.getBeginTime(),param.getEndTime()); List<DriverTraceVO> driverTrace = truckTraceService.listDriverTraceByTime(child.getDriverUserNo(),param.getBeginTime(),param.getEndTime());
OrderChildTraceVO result = new OrderChildTraceVO(); OrderChildTraceVO result = new OrderChildTraceVO();
result.setDriverTraceList(driverTrace); result.setDriverTraceList(splitDriverTrace(driverTrace));
result.setTruckTraceList(truckTrace); result.setTruckTraceList(splitTruckTrace(truckTrace));
return result; return result;
} }
...@@ -68,27 +70,125 @@ public class TraceMonitorServiceImpl implements TraceMonitorService { ...@@ -68,27 +70,125 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
public OrderChildTraceVO getTruckTrace(QueryTraceParam param) { public OrderChildTraceVO getTruckTrace(QueryTraceParam param) {
checkParam(param); checkParam(param);
//查询车辆的车主信息 //查询车辆的车主信息
Result<TruckOwnerInfoVO> result = truckFeign.getTruckOwnerInfo( /* Result<TruckOwnerInfoVO> result = truckFeign.getTruckOwnerInfo(
param.getTruckNo()); param.getTruckNo());
log.info("查询车辆车主信息,车牌号:{},结果:{}",param.getTruckNo(),result); log.info("查询车辆车主信息,车牌号:{},结果:{}",param.getTruckNo(),result);
if(!result.succeed() || Objects.isNull(result.getData())){ if(!result.succeed() || Objects.isNull(result.getData())){
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND,"未查询到车辆车主信息"); 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){ 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);
OrderChildTraceVO result = new OrderChildTraceVO(); OrderChildTraceVO result = new OrderChildTraceVO();
result.setDriverTraceList(driverTrace); List<DriverTruckTraceVO> truckTrace = truckTraceService.listTruckTraceByTime(truckNo,beginTime,endTime);
result.setTruckTraceList(truckTrace); 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; 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){ public void checkParam(QueryTraceParam param){
LocalDateTime beginTime = DateUtils.parseDateTime(param.getBeginTime()).get(); LocalDateTime beginTime = DateUtils.parseDateTime(param.getBeginTime()).get();
......
...@@ -409,4 +409,9 @@ public class LocalDateTimeUtils { ...@@ -409,4 +409,9 @@ public class LocalDateTimeUtils {
Duration duration = Duration.between(startTime, endTime); Duration duration = Duration.between(startTime, endTime);
return duration.getSeconds(); return duration.getSeconds();
} }
public static long betweenMin(LocalDateTime startTime, LocalDateTime endTime){
Duration duration = Duration.between(startTime, endTime);
return duration.toMinutes();
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论