|
@@ -42,6 +42,7 @@ import com.sckw.transport.model.dto.TruckDto;
|
|
|
import com.sckw.transport.api.feign.VehicleTraceClient;
|
|
import com.sckw.transport.api.feign.VehicleTraceClient;
|
|
|
import com.sckw.transport.api.model.dto.VehicleDataDTO;
|
|
import com.sckw.transport.api.model.dto.VehicleDataDTO;
|
|
|
import com.sckw.transport.api.model.dto.VehicleReturnData;
|
|
import com.sckw.transport.api.model.dto.VehicleReturnData;
|
|
|
|
|
+import com.sckw.transport.model.enuma.ExceptionSortTypeEnum;
|
|
|
import com.sckw.transport.model.enuma.VehicleExceptionTypeEnum;
|
|
import com.sckw.transport.model.enuma.VehicleExceptionTypeEnum;
|
|
|
import com.sckw.transport.model.param.*;
|
|
import com.sckw.transport.model.param.*;
|
|
|
import com.sckw.transport.model.dto.GenerateTraceReq;
|
|
import com.sckw.transport.model.dto.GenerateTraceReq;
|
|
@@ -423,34 +424,42 @@ public class kwfTruckTraceService {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 查询当前任务的轨迹
|
|
* 查询当前任务的轨迹
|
|
|
- * @param req 请求参数
|
|
|
|
|
- * @return 响应参数
|
|
|
|
|
|
|
+ * @param req 请求参数,包含车辆编号和订单号等信息
|
|
|
|
|
+ * @return 当前任务轨迹信息,包括轨迹点列表和地址点列表
|
|
|
*/
|
|
*/
|
|
|
public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
|
|
public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
|
|
|
log.info("查询当前任务轨迹参数:{}", req);
|
|
log.info("查询当前任务轨迹参数:{}", req);
|
|
|
|
|
|
|
|
|
|
+ // 获取当前登录用户的企业ID
|
|
|
Long entId = LoginUserHolder.getEntId();
|
|
Long entId = LoginUserHolder.getEntId();
|
|
|
String wOrderNo = StringUtils.EMPTY ;
|
|
String wOrderNo = StringUtils.EMPTY ;
|
|
|
|
|
+
|
|
|
|
|
+ // 如果请求中包含订单号,则直接使用;否则根据车牌号查询对应订单号
|
|
|
if (StringUtils.isNotBlank(req.getOrderNo())){
|
|
if (StringUtils.isNotBlank(req.getOrderNo())){
|
|
|
wOrderNo = req.getOrderNo();
|
|
wOrderNo = req.getOrderNo();
|
|
|
}else {
|
|
}else {
|
|
|
KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo(),entId);
|
|
KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo(),entId);
|
|
|
wOrderNo = Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse("");
|
|
wOrderNo = Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse("");
|
|
|
}
|
|
}
|
|
|
- //查询数据中台获取轨迹
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 查询数据中台获取轨迹数据
|
|
|
List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(wOrderNo);
|
|
List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(wOrderNo);
|
|
|
|
|
|
|
|
CurrentTaskTraceReqVo currentTaskTraceReqVo = new CurrentTaskTraceReqVo();
|
|
CurrentTaskTraceReqVo currentTaskTraceReqVo = new CurrentTaskTraceReqVo();
|
|
|
|
|
+
|
|
|
|
|
+ // 如果轨迹数据不为空,则处理轨迹点信息
|
|
|
if (CollectionUtils.isNotEmpty(vehicleReturnDataList)){
|
|
if (CollectionUtils.isNotEmpty(vehicleReturnDataList)){
|
|
|
- //组织返回数据
|
|
|
|
|
|
|
+ // 将VehicleReturnData转换为CurrentTaskTrace,并按时间排序
|
|
|
List<CurrentTaskTraceReqVo.CurrentTaskTrace> currentTaskTraceList = vehicleReturnDataList.stream()
|
|
List<CurrentTaskTraceReqVo.CurrentTaskTrace> currentTaskTraceList = vehicleReturnDataList.stream()
|
|
|
.map(kwfTruckTraceService::getCurrentTaskTrace)
|
|
.map(kwfTruckTraceService::getCurrentTaskTrace)
|
|
|
.filter(x->StringUtils.isNotBlank(x.getLocationTime()))
|
|
.filter(x->StringUtils.isNotBlank(x.getLocationTime()))
|
|
|
.sorted(Comparator.comparing(CurrentTaskTraceReqVo.CurrentTaskTrace::getLocationTime))
|
|
.sorted(Comparator.comparing(CurrentTaskTraceReqVo.CurrentTaskTrace::getLocationTime))
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
+ // 设置订单号
|
|
|
currentTaskTraceReqVo.setOrderNo(vehicleReturnDataList.get(0).getWOrderNo());
|
|
currentTaskTraceReqVo.setOrderNo(vehicleReturnDataList.get(0).getWOrderNo());
|
|
|
|
|
|
|
|
|
|
+ // 计算相邻轨迹点之间的时间间隔(分钟)
|
|
|
for (int i = 1; i < currentTaskTraceList.size(); i++) {
|
|
for (int i = 1; i < currentTaskTraceList.size(); i++) {
|
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace current = currentTaskTraceList.get(i);
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace current = currentTaskTraceList.get(i);
|
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace previous = currentTaskTraceList.get(i - 1);
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace previous = currentTaskTraceList.get(i - 1);
|
|
@@ -460,6 +469,8 @@ public class kwfTruckTraceService {
|
|
|
Duration duration = Duration.between(previousTime, currentTime);
|
|
Duration duration = Duration.between(previousTime, currentTime);
|
|
|
current.setDuration(String.valueOf(duration.toMinutes()));
|
|
current.setDuration(String.valueOf(duration.toMinutes()));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 计算总时长(第一个点到最后一个点的时间差)
|
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace first = currentTaskTraceList.get(0);
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace first = currentTaskTraceList.get(0);
|
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace last = currentTaskTraceList.get(currentTaskTraceList.size() - 1);
|
|
CurrentTaskTraceReqVo.CurrentTaskTrace last = currentTaskTraceList.get(currentTaskTraceList.size() - 1);
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
@@ -472,10 +483,12 @@ public class kwfTruckTraceService {
|
|
|
currentTaskTraceReqVo.setCurrentTaskTraceList(currentTaskTraceList);
|
|
currentTaskTraceReqVo.setCurrentTaskTraceList(currentTaskTraceList);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //构造点位假数据
|
|
|
|
|
|
|
+ // 构造点位假数据(用于演示或测试)
|
|
|
List<CurrentTaskTraceReqVo.CurrentAddress> addressList = getCurrentAddresses();
|
|
List<CurrentTaskTraceReqVo.CurrentAddress> addressList = getCurrentAddresses();
|
|
|
// 将地址列表设置到 CurrentTaskTraceReqVo 对象中
|
|
// 将地址列表设置到 CurrentTaskTraceReqVo 对象中
|
|
|
currentTaskTraceReqVo.setCurrentAddressList(addressList);
|
|
currentTaskTraceReqVo.setCurrentAddressList(addressList);
|
|
|
|
|
+
|
|
|
|
|
+ // 计算地址点的总时长
|
|
|
int sum = addressList.stream()
|
|
int sum = addressList.stream()
|
|
|
.filter(a -> StringUtils.isNotBlank(a.getDuration()))
|
|
.filter(a -> StringUtils.isNotBlank(a.getDuration()))
|
|
|
.mapToInt(x -> Integer.parseInt(x.getDuration()))
|
|
.mapToInt(x -> Integer.parseInt(x.getDuration()))
|
|
@@ -526,19 +539,21 @@ public class kwfTruckTraceService {
|
|
|
private List<VehicleReturnData> getVehicleReturnDataList(String wOrderNo) {
|
|
private List<VehicleReturnData> getVehicleReturnDataList(String wOrderNo) {
|
|
|
VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
|
|
VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
|
|
|
vehicleDataDTO.setWOrderNo(wOrderNo);
|
|
vehicleDataDTO.setWOrderNo(wOrderNo);
|
|
|
- String s;
|
|
|
|
|
|
|
+
|
|
|
try {
|
|
try {
|
|
|
- s = HttpUtil.postJson(urlConfigProperties.getApiBaseUrl()+ UrlConstants.QUERY_TRACE_URL, JSON.toJSONString(vehicleDataDTO), null);
|
|
|
|
|
|
|
+ // 使用 Feign 调用查询车辆轨迹列表
|
|
|
|
|
+ log.info("查询任务轨迹列表请求参数: {}", JSON.toJSONString(vehicleDataDTO));
|
|
|
|
|
+ BaseIotResult<List<VehicleReturnData>> result = vehicleTraceClient.queryVehicleDataList(vehicleDataDTO);
|
|
|
|
|
+
|
|
|
|
|
+ if (result == null || !StringUtils.equals(result.getCode(), "0") || result.getData() == null) {
|
|
|
|
|
+ log.warn("查询任务轨迹返回空数据, 运单号: {}", wOrderNo);
|
|
|
|
|
+ return List.of();
|
|
|
|
|
+ }
|
|
|
|
|
+ return result.getData();
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- log.error("查询任务轨迹异常",e);
|
|
|
|
|
|
|
+ log.error("查询任务轨迹异常, 运单号: {}", wOrderNo, e);
|
|
|
throw new BusinessException("查询任务轨迹异常");
|
|
throw new BusinessException("查询任务轨迹异常");
|
|
|
}
|
|
}
|
|
|
- if (StringUtils.isBlank(s)){
|
|
|
|
|
- return Collections.emptyList();
|
|
|
|
|
- }
|
|
|
|
|
- JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
|
|
|
|
|
- String data = JSON.toJSONString(jsonObject.get("data"));
|
|
|
|
|
- return JSON.parseArray(data, VehicleReturnData.class);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public VehicleReturnData getVehicleReturnData(String truckId) {
|
|
public VehicleReturnData getVehicleReturnData(String truckId) {
|
|
@@ -566,6 +581,8 @@ public class kwfTruckTraceService {
|
|
|
currentTaskTrace.setLongitude(e.getLongitude());
|
|
currentTaskTrace.setLongitude(e.getLongitude());
|
|
|
currentTaskTrace.setLatitude(e.getLatitude());
|
|
currentTaskTrace.setLatitude(e.getLatitude());
|
|
|
currentTaskTrace.setLocationTime(Objects.isNull(e.getTs()) ? "" : DateUtils.format(e.getTs().toLocalDateTime(), DateUtils.DATE_TIME_PATTERN));
|
|
currentTaskTrace.setLocationTime(Objects.isNull(e.getTs()) ? "" : DateUtils.format(e.getTs().toLocalDateTime(), DateUtils.DATE_TIME_PATTERN));
|
|
|
|
|
+ currentTaskTrace.setStatus(e.getStatus());
|
|
|
|
|
+ currentTaskTrace.setStatusDesc(StringUtils.isNotBlank(e.getStatus()) ? VehicleExceptionTypeEnum.getName(Integer.parseInt(e.getStatus())) : "");
|
|
|
return currentTaskTrace;
|
|
return currentTaskTrace;
|
|
|
}
|
|
}
|
|
|
|
|
|