|
|
@@ -1,9 +1,9 @@
|
|
|
package com.sckw.transport.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.google.common.collect.Maps;
|
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.core.exception.BusinessException;
|
|
|
import com.sckw.core.model.constant.UrlConstants;
|
|
|
@@ -24,8 +24,10 @@ import com.sckw.payment.api.dubbo.PaymentDubboService;
|
|
|
import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
|
import com.sckw.redis.utils.RedissonUtils;
|
|
|
import com.sckw.system.api.RemoteSystemService;
|
|
|
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
|
|
|
import com.sckw.system.api.model.dto.res.KwsEnterpriseResDto;
|
|
|
import com.sckw.transport.common.config.UrlConfigProperties;
|
|
|
+import com.sckw.transport.model.KwtLogisticsOrderUnit;
|
|
|
import com.sckw.transport.model.KwtWaybillOrder;
|
|
|
import com.sckw.transport.model.KwtWaybillOrderAddress;
|
|
|
import com.sckw.transport.model.KwtWaybillOrderSubtask;
|
|
|
@@ -39,12 +41,12 @@ import com.sckw.transport.model.param.VehiclesTrajectoryReq;
|
|
|
import com.sckw.transport.model.vo.CurrentTaskTraceReqVo;
|
|
|
import com.sckw.transport.model.vo.KwfTruckTraceReplayVo;
|
|
|
import com.sckw.transport.model.vo.TruckInfoVo;
|
|
|
+import com.sckw.transport.repository.KwtLogisticsOrderUnitRepository;
|
|
|
import com.sckw.transport.repository.KwtWaybillOrderAddressRepository;
|
|
|
import com.sckw.transport.repository.KwtWaybillOrderRepository;
|
|
|
import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
|
|
|
import com.sckw.transport.response.CollectZjxlResponse;
|
|
|
import com.sckw.transport.service.zj.VehicleCollectService;
|
|
|
-import jakarta.validation.Valid;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
@@ -53,7 +55,10 @@ import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneOffset;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@@ -69,7 +74,7 @@ public class kwfTruckTraceService {
|
|
|
private final UrlConfigProperties urlConfigProperties;
|
|
|
private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
|
|
|
private final VehicleCollectService vehicleCollectService;
|
|
|
-
|
|
|
+ private final KwtLogisticsOrderUnitRepository kwtLogisticsOrderUnitRepository;
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
|
|
|
RemoteSystemService remoteSystemService;
|
|
|
|
|
|
@@ -96,6 +101,9 @@ public class kwfTruckTraceService {
|
|
|
|
|
|
public PageDataResult<KwfTruckTraceReplayVo> findPage(KwfTruckTraceReplayReq req) {
|
|
|
log.info("查询历轨迹回放氢气参数:{}", req);
|
|
|
+ if (StringUtils.isBlank(req.getTruckNo())){
|
|
|
+ return PageDataResult.empty(req.getPageNum(), req.getPageSize());
|
|
|
+ }
|
|
|
Date date = new Date();
|
|
|
if (StringUtils.isNotBlank(req.getStartTime())){
|
|
|
date = DateUtils.formatDate(req.getStartTime());
|
|
|
@@ -104,29 +112,45 @@ public class kwfTruckTraceService {
|
|
|
if (StringUtils.isNotBlank(req.getEndTime())){
|
|
|
beforeDate = DateUtils.formatDate(req.getEndTime());
|
|
|
}
|
|
|
- Page<KwtWaybillOrder> page = kwtWaybillOrderRepository.findPage(req.getPageNum(), req.getPageSize(), beforeDate, date);
|
|
|
+ Page<KwtWaybillOrder> page = kwtWaybillOrderRepository.findPage(req.getTruckNo(),req.getPageNum(), req.getPageSize(), beforeDate, date);
|
|
|
List<KwtWaybillOrder> records = page.getRecords();
|
|
|
if(CollectionUtils.isEmpty(page.getRecords())) {
|
|
|
return PageDataResult.success(req.getPageNum(), req.getPageSize(),0L, null);
|
|
|
}
|
|
|
//查询企业 获取承运单位
|
|
|
- List<Long> entIds = records.stream().map(KwtWaybillOrder::getId).distinct().collect(Collectors.toList());
|
|
|
+ List<Long> entIds = records.stream().map(KwtWaybillOrder::getEntId).distinct().collect(Collectors.toList());
|
|
|
//运单id
|
|
|
List<Long> wOrderIds = records.stream().map(KwtWaybillOrder::getId).collect(Collectors.toList());
|
|
|
+ //通过运单号查询订单
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks = kwtWaybillOrderSubtaskRepository.queryByWOrderIds(wOrderIds);
|
|
|
+
|
|
|
+ //关联订单id
|
|
|
+ Set<Long> lOrderIds = null;
|
|
|
+ //订单号映射订单对象
|
|
|
+ Map<String, KwtWaybillOrderSubtask> worderNoAndWorderMap = Maps.newHashMap();
|
|
|
+ if (CollectionUtils.isNotEmpty(waybillOrderSubtasks)){
|
|
|
+ lOrderIds = waybillOrderSubtasks.stream().map(KwtWaybillOrderSubtask::getLOrderId).collect(Collectors.toSet());
|
|
|
+ worderNoAndWorderMap = waybillOrderSubtasks.stream()
|
|
|
+ .collect(Collectors.toMap(KwtWaybillOrderSubtask::getWOrderNo, Function.identity(), (k1, k2) -> k1));
|
|
|
+ }
|
|
|
+
|
|
|
+ List<KwtLogisticsOrderUnit> logisticsOrderUnits = kwtLogisticsOrderUnitRepository.queryByLOrderIdsAndUnitType(lOrderIds,2);
|
|
|
+ //物流订单id映射企业
|
|
|
+ Map<Long, KwtLogisticsOrderUnit> lOrderIdAndLogisticsOrderUnitMap = logisticsOrderUnits.stream()
|
|
|
+ .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLOrderId, Function.identity(), (k1, k2) -> k1));
|
|
|
//通过企业id映射企业信息
|
|
|
Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap = remoteSystemService.queryEnterpriseByEntIds(entIds);
|
|
|
|
|
|
//装货地址和卸货地址 kwt_waybill_order_address
|
|
|
- LambdaQueryWrapper<KwtWaybillOrderAddress> wrapper = Wrappers.<KwtWaybillOrderAddress>lambdaQuery()
|
|
|
- .eq(KwtWaybillOrderAddress::getDelFlag, 0)
|
|
|
- .in(KwtWaybillOrderAddress::getWOrderId, wOrderIds);
|
|
|
- List<KwtWaybillOrderAddress> orderAddresses = kwtWaybillOrderAddressRepository.list(wrapper);
|
|
|
+ List<KwtWaybillOrderAddress> orderAddresses = kwtWaybillOrderAddressRepository.queryBywOrderIds(wOrderIds);
|
|
|
+
|
|
|
//运单id和状态组合key映射地址
|
|
|
Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap = orderAddresses.stream()
|
|
|
.collect(Collectors.groupingBy(KwtWaybillOrderAddress::getWOrderId));
|
|
|
|
|
|
+ Map<String, KwtWaybillOrderSubtask> finalWorderNoAndWorderMap = worderNoAndWorderMap;
|
|
|
List<KwfTruckTraceReplayVo> kwfTruckTraceReplayVoList = records.stream()
|
|
|
- .map(r -> getKwfTruckTraceReplayVo(r, idAndKwsEnterpriseMap, wOrderIdAndAddressMap))
|
|
|
+ .map(r -> getKwfTruckTraceReplayVo(r, idAndKwsEnterpriseMap, wOrderIdAndAddressMap, lOrderIdAndLogisticsOrderUnitMap, finalWorderNoAndWorderMap))
|
|
|
.collect(Collectors.toList());
|
|
|
return PageDataResult.of(page,kwfTruckTraceReplayVoList);
|
|
|
}
|
|
|
@@ -138,7 +162,10 @@ public class kwfTruckTraceService {
|
|
|
* @param wOrderIdAndAddressMap 运单id映射地址map
|
|
|
* @return 轨迹回访返回数据
|
|
|
*/
|
|
|
- private static KwfTruckTraceReplayVo getKwfTruckTraceReplayVo(KwtWaybillOrder waybillOrder, Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap, Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap) {
|
|
|
+ private static KwfTruckTraceReplayVo getKwfTruckTraceReplayVo(KwtWaybillOrder waybillOrder, Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap,
|
|
|
+ Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap
|
|
|
+ ,Map<Long, KwtLogisticsOrderUnit> lOrderIdAndLogisticsOrderUnitMap
|
|
|
+ ,Map<String, KwtWaybillOrderSubtask> worderNoAndWorderMap) {
|
|
|
|
|
|
KwfTruckTraceReplayVo kwfTruckTraceReplay = new KwfTruckTraceReplayVo();
|
|
|
kwfTruckTraceReplay.setWOrderId(waybillOrder.getId());
|
|
|
@@ -147,7 +174,10 @@ public class kwfTruckTraceService {
|
|
|
kwfTruckTraceReplay.setPhone(waybillOrder.getDriverPhone());
|
|
|
kwfTruckTraceReplay.setStatus(String.valueOf(waybillOrder.getStatus()));
|
|
|
kwfTruckTraceReplay.setStatusDesc(CarWaybillEnum.getName(waybillOrder.getStatus()));
|
|
|
- KwsEnterpriseResDto orDefault = idAndKwsEnterpriseMap.getOrDefault(waybillOrder.getEntId(), new KwsEnterpriseResDto());
|
|
|
+ KwtWaybillOrderSubtask subtask = worderNoAndWorderMap.getOrDefault(waybillOrder.getWOrderNo(), new KwtWaybillOrderSubtask());
|
|
|
+ kwfTruckTraceReplay.setRelationTaskNo(String.valueOf(subtask.getLOrderId()));
|
|
|
+ KwtLogisticsOrderUnit kwtLogisticsOrderUnit = lOrderIdAndLogisticsOrderUnitMap.getOrDefault(subtask.getLOrderId(), new KwtLogisticsOrderUnit());
|
|
|
+ KwsEnterpriseResDto orDefault = idAndKwsEnterpriseMap.getOrDefault(kwtLogisticsOrderUnit.getEntId(), new KwsEnterpriseResDto());
|
|
|
kwfTruckTraceReplay.setCarrier(orDefault.getFirmName());
|
|
|
List<KwtWaybillOrderAddress> addressList = wOrderIdAndAddressMap.get(waybillOrder.getId());
|
|
|
addressList.forEach(e -> {
|
|
|
@@ -159,7 +189,6 @@ public class kwfTruckTraceService {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- kwfTruckTraceReplay.setRelationTaskNo(Objects.nonNull(waybillOrder.getLOrderId()) ? String.valueOf(waybillOrder.getLOrderId()) : "");
|
|
|
|
|
|
String taskStartEndTime = DateUtils.format(waybillOrder.getTaskStartTime(), DateUtils.DATE_TIME_PATTERN);
|
|
|
kwfTruckTraceReplay.setTaskStartTime(StringUtils.equals(taskStartEndTime, CommonConstants.DATE_TIME) ? StringUtils.EMPTY: taskStartEndTime);
|
|
|
@@ -178,43 +207,83 @@ public class kwfTruckTraceService {
|
|
|
public TruckInfoVo queryTruckInfo(TruckInfoReq req) {
|
|
|
log.info("查询车辆实时位置信息参数:{}", req);
|
|
|
//先查缓存 缓存没有 在查询数据中台 数据中台没有 则查询中交
|
|
|
- if (StringUtils.isNotBlank(req.getTruckId()) && StringUtils.isNotBlank(req.getTruckNo())){
|
|
|
- return getTruckInfo(req.getTruckNo(),req.getWOrderNo(),req.getTruckNo());
|
|
|
+ if (StringUtils.isNotBlank(req.getTruckId()) ){
|
|
|
+ return getTruckInfo(req.getTruckId(),req.getWOrderNo(),req.getTruckNo());
|
|
|
}
|
|
|
|
|
|
//如果车牌为空那么查询车队的第一条数据 (从tab页面直接进来)
|
|
|
- if (StringUtils.isBlank(req.getEntId())){
|
|
|
- throw new BusinessException("企业id不能为空");
|
|
|
- }
|
|
|
- RTruckVo dataFirstTruck = fleetService.findDataFirstTruck(Long.valueOf(req.getEntId()));
|
|
|
- if (Objects.isNull(dataFirstTruck) || Objects.isNull(dataFirstTruck.getTruckNo())){
|
|
|
- return new TruckInfoVo();
|
|
|
+ if (StringUtils.isNotBlank(req.getEntId())){
|
|
|
+ RTruckVo dataFirstTruck = fleetService.findDataFirstTruck(Long.valueOf(req.getEntId()));
|
|
|
+ if (Objects.isNull(dataFirstTruck) || Objects.isNull(dataFirstTruck.getTruckNo())){
|
|
|
+ return new TruckInfoVo();
|
|
|
+ }
|
|
|
+ return getTruckInfo(req.getTruckId(),req.getWOrderNo(),dataFirstTruck.getTruckNo());
|
|
|
}
|
|
|
- return getTruckInfo(req.getTruckId(),req.getWOrderNo(),dataFirstTruck.getTruckNo());
|
|
|
+ return new TruckInfoVo();
|
|
|
}
|
|
|
|
|
|
private TruckInfoVo getTruckInfo(String truckId, String wOrderNo,String truckNo) {
|
|
|
//先查询缓存 如果缓存没有就查数据中台 数据中台没有就查中交
|
|
|
String location = RedissonUtils.getString(CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+wOrderNo);
|
|
|
- if (StringUtils.isBlank(location)){
|
|
|
- return new TruckInfoVo();
|
|
|
- }
|
|
|
- TruckDto truckDto = JSON.parseObject(location, TruckDto.class);
|
|
|
- //如果运单号为空那么返回redis的数据 这个数据是app最后一次上报的数据
|
|
|
- if (Objects.nonNull(truckDto)){
|
|
|
- return TruckInfoVo.toTruckInfoVo(truckDto);
|
|
|
+ if (StringUtils.isNotBlank(location)){
|
|
|
+ TruckDto truckDto = JSON.parseObject(location, TruckDto.class);
|
|
|
+ //如果运单号为空那么返回redis的数据 这个数据是app最后一次上报的数据
|
|
|
+ if (Objects.nonNull(truckDto)){
|
|
|
+ return TruckInfoVo.toTruckInfoVo(truckDto);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
//缓存没有则查询数据中台
|
|
|
VehicleReturnData vehicleReturnData = getVehicleReturnData(truckId);
|
|
|
if (Objects.nonNull(vehicleReturnData)){
|
|
|
- return buildTruckInfo(wOrderNo, vehicleReturnData);
|
|
|
+ saveRedisCache(truckId, wOrderNo, truckNo, vehicleReturnData);
|
|
|
+ return buildTruckInfo(truckId, vehicleReturnData, truckNo);
|
|
|
}
|
|
|
//todo 查询中交 如果数据中台没有数据则查询中交
|
|
|
- return getTruckInfoVoByZj(truckNo, wOrderNo);
|
|
|
+ return getTruckInfoVoByZj(truckNo, wOrderNo,truckId);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveRedisCache(String truckId, String wOrderNo, String truckNo, VehicleReturnData vehicleReturnData) {
|
|
|
+ TruckDto truckDto = new TruckDto();
|
|
|
+ truckDto.setWOrderNo(vehicleReturnData.getWOrderNo());
|
|
|
+ truckDto.setTruckNo(truckNo);
|
|
|
+ truckDto.setGpsStatus(String.valueOf(vehicleReturnData.getSpeed()));
|
|
|
+ truckDto.setLongitude(vehicleReturnData.getLongitude());
|
|
|
+ truckDto.setLatitude(vehicleReturnData.getLatitude());
|
|
|
+ if (Objects.nonNull(vehicleReturnData.getTs())){
|
|
|
+ LocalDateTime ts = vehicleReturnData.getTs();
|
|
|
+ Date date = Date.from(ts.toInstant(ZoneOffset.UTC));
|
|
|
+ truckDto.setLocationTime(DateUtils.format(date, DateUtils.DATE_TIME_PATTERN));
|
|
|
+ }
|
|
|
+ KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(wOrderNo);
|
|
|
+ truckDto.setLOrderNo(Objects.nonNull(subtask) ? String.valueOf(subtask.getLOrderId()):"");
|
|
|
+ String taskAddress = getTaskAddress(subtask);
|
|
|
+ truckDto.setTaskAddress(taskAddress);
|
|
|
+ RedissonUtils.putString(CommonConstants.TRUCK_LOCATION + truckId +CommonConstants.UNDERSCORE+ wOrderNo, JSON.toJSONString(truckDto),10,TimeUnit.DAYS);
|
|
|
}
|
|
|
|
|
|
|
|
|
- private TruckInfoVo getTruckInfoVoByZj(String truckNo, String wOrderNo) {
|
|
|
+ public String getTaskAddress(KwtWaybillOrderSubtask subtask) {
|
|
|
+ String startPoint = "";
|
|
|
+ String endPoint = "";
|
|
|
+ if (Objects.nonNull(subtask)){
|
|
|
+ List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(subtask.getWOrderId());
|
|
|
+ if (CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
|
|
|
+ for (KwtWaybillOrderAddress e : kwtWaybillOrderAddresses) {
|
|
|
+ if (Objects.equals(e.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())) {
|
|
|
+ startPoint = e.getDetailAddress();
|
|
|
+ }
|
|
|
+ if (Objects.equals(e.getAddressType(), AddressTypeEnum.TAKE.getCode())) {
|
|
|
+ endPoint = e.getDetailAddress();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return startPoint+"-" + endPoint;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private TruckInfoVo getTruckInfoVoByZj(String truckNo, String wOrderNo,String truckId) {
|
|
|
CollectZjxlResponse collectZjxlResponse = vehicleCollectService.transTimeManage(truckNo);
|
|
|
TruckInfoVo instance = TruckInfoVo.getInstance();
|
|
|
instance.setWOrderNo(wOrderNo);
|
|
|
@@ -231,45 +300,50 @@ public class kwfTruckTraceService {
|
|
|
KwtWaybillOrderSubtask waybillOrderSubtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(oneByTruckNo.getWOrderNo());
|
|
|
instance.setLOrderNo(Objects.nonNull(waybillOrderSubtask) && Objects.nonNull(waybillOrderSubtask.getLOrderId())
|
|
|
? String.valueOf(waybillOrderSubtask.getLOrderId()) : "");
|
|
|
- String startPoint = "";
|
|
|
- String endPoint = "";
|
|
|
- if (Objects.nonNull(waybillOrderSubtask)){
|
|
|
- List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(waybillOrderSubtask.getWOrderId());
|
|
|
- if (CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
|
|
|
- for (KwtWaybillOrderAddress e : kwtWaybillOrderAddresses) {
|
|
|
- if (Objects.equals(e.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())) {
|
|
|
- startPoint = e.getDetailAddress();
|
|
|
- }
|
|
|
- if (Objects.equals(e.getAddressType(), AddressTypeEnum.TAKE.getCode())) {
|
|
|
- endPoint = e.getDetailAddress();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- instance.setTaskAddress(startPoint+"-"+endPoint);
|
|
|
+ String taskAddress = getTaskAddress(waybillOrderSubtask);
|
|
|
+ instance.setTaskAddress(taskAddress);
|
|
|
return instance;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 将数据中台的数据进行组织
|
|
|
- * @param wOrderNo 运单号
|
|
|
+ * @param truckId 车辆id
|
|
|
* @param vehicleReturn 中台数据
|
|
|
* @return 组织的数据
|
|
|
*/
|
|
|
- private TruckInfoVo buildTruckInfo(String wOrderNo, VehicleReturnData vehicleReturn) {
|
|
|
+ private TruckInfoVo buildTruckInfo(String truckId, VehicleReturnData vehicleReturn, String truckNo) {
|
|
|
TruckInfoVo truckInfoVo = TruckInfoVo.getInstance();
|
|
|
- truckInfoVo.setWOrderNo(vehicleReturn.getWOrderNo());
|
|
|
- truckInfoVo.setTruckNo(vehicleReturn.getCarNo());
|
|
|
+
|
|
|
+ truckInfoVo.setTruckNo(truckNo);
|
|
|
truckInfoVo.setGpsStatus(String.valueOf(vehicleReturn.getSpeed()));
|
|
|
truckInfoVo.setLongitude(vehicleReturn.getLongitude());
|
|
|
truckInfoVo.setLatitude(vehicleReturn.getLatitude());
|
|
|
truckInfoVo.setLocationTime(Objects.isNull(vehicleReturn.getTs())? "" : DateUtils.format(vehicleReturn.getTs(),DateUtils.DATE_TIME_PATTERN));
|
|
|
- KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(wOrderNo);
|
|
|
+ KwtWaybillOrder order = kwtWaybillOrderRepository.findOneByTruckId(truckId);
|
|
|
+ if (Objects.nonNull(order)){
|
|
|
+ truckInfoVo.setTruckNo(order.getTruckNo());
|
|
|
+ truckInfoVo.setWOrderNo(order.getWOrderNo());
|
|
|
+ truckInfoVo.setDriveId(String.valueOf(order.getDriverId()));
|
|
|
+ truckInfoVo.setDriveName(order.getDriverName());
|
|
|
+ truckInfoVo.setDrivePhone(order.getDriverPhone());
|
|
|
+ truckInfoVo.setTruckId(truckId);
|
|
|
+ truckInfoVo.setTaskStatus(String.valueOf(order.getStatus()));
|
|
|
+ }
|
|
|
+
|
|
|
+ KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(Optional.ofNullable(order)
|
|
|
+ .map(KwtWaybillOrder::getWOrderNo).
|
|
|
+ orElse( null));
|
|
|
truckInfoVo.setLOrderNo(Objects.isNull(subtask) ? "" : String.valueOf(subtask.getLOrderId()));
|
|
|
if (Objects.isNull(subtask)){
|
|
|
return truckInfoVo;
|
|
|
}
|
|
|
+ //根据物流订单号查询承运单位 2.代表承运企业
|
|
|
+ KwtLogisticsOrderUnit kwtLogisticsOrderUnit = kwtLogisticsOrderUnitRepository.queryByLOrderIdAndUnitType(subtask.getLOrderId(), 2);
|
|
|
+ if (Objects.nonNull(kwtLogisticsOrderUnit) && Objects.nonNull(kwtLogisticsOrderUnit.getEntId())){
|
|
|
+ EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(kwtLogisticsOrderUnit.getEntId());
|
|
|
+ truckInfoVo.setCarrier(Optional.ofNullable(entCacheResDto).map(EntCacheResDto::getFirmName).orElse(""));
|
|
|
+ }
|
|
|
+
|
|
|
List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(subtask.getWOrderId());
|
|
|
if (CollectionUtils.isEmpty(kwtWaybillOrderAddresses)){
|
|
|
return truckInfoVo;
|
|
|
@@ -295,12 +369,17 @@ public class kwfTruckTraceService {
|
|
|
*/
|
|
|
public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
|
|
|
log.info("查询当前任务轨迹参数:{}", req);
|
|
|
- if (StringUtils.isBlank(req.getWOrderNo())){
|
|
|
- log.info("运单号为空没有任务,没有关联路线");
|
|
|
- return new CurrentTaskTraceReqVo();
|
|
|
+
|
|
|
+
|
|
|
+ String wOrderNo = StringUtils.EMPTY ;
|
|
|
+ if (StringUtils.isNotBlank(req.getWOrderNo())){
|
|
|
+ wOrderNo = req.getWOrderNo();
|
|
|
+ }else {
|
|
|
+ KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo());
|
|
|
+ wOrderNo = Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse("");
|
|
|
}
|
|
|
//查询数据中台获取轨迹
|
|
|
- List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(req.getWOrderNo());
|
|
|
+ List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(wOrderNo);
|
|
|
if (CollectionUtils.isEmpty(vehicleReturnDataList)){
|
|
|
return new CurrentTaskTraceReqVo();
|
|
|
}
|
|
|
@@ -333,7 +412,9 @@ public class kwfTruckTraceService {
|
|
|
if (StringUtils.isBlank(s)){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
- return JSON.parseArray(s, VehicleReturnData.class);
|
|
|
+ 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) {
|
|
|
@@ -349,7 +430,9 @@ public class kwfTruckTraceService {
|
|
|
if (StringUtils.isBlank(s)){
|
|
|
return null;
|
|
|
}
|
|
|
- return JSON.parseObject(s, VehicleReturnData.class);
|
|
|
+ JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
|
|
|
+ String data = JSON.toJSONString(jsonObject.get("data"));
|
|
|
+ return JSON.parseObject(data, VehicleReturnData.class);
|
|
|
}
|
|
|
|
|
|
private static CurrentTaskTraceReqVo.CurrentTaskTrace getCurrentTaskTrace(VehicleReturnData e) {
|
|
|
@@ -380,18 +463,19 @@ public class kwfTruckTraceService {
|
|
|
* @param req 请求参数
|
|
|
* @return 响应参数
|
|
|
*/
|
|
|
- public Void vehiclesTrajectory(@Valid VehiclesTrajectoryReq req) {
|
|
|
+ public Void vehiclesTrajectory( VehiclesTrajectoryReq req) {
|
|
|
//通过手机号查询司机以及车辆信息
|
|
|
//req.setTs(DateUtils.format(new Date(),DateUtils.DATE_TIME_PATTERN));
|
|
|
RDriverVo rDriverVo = fleetService.findDriverByPhone(req.getMobile());
|
|
|
if (Objects.isNull(rDriverVo)){
|
|
|
throw new BusinessException("司机信息不存在");
|
|
|
}
|
|
|
+ initReq(req);
|
|
|
//查询认为中的运单信息
|
|
|
KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByDriverId(rDriverVo.getId());
|
|
|
//获取车队信息
|
|
|
RFleetDriverVo fleetByDriveId = fleetService.findFleetByDriveId(rDriverVo.getId());
|
|
|
-
|
|
|
+ req.setLOrderNo(Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse(""));
|
|
|
|
|
|
VehiclesTrajectoryReq.VehicleDataVO vehicleDataVO = new VehiclesTrajectoryReq.VehicleDataVO();
|
|
|
//车牌id
|
|
|
@@ -405,7 +489,7 @@ public class kwfTruckTraceService {
|
|
|
.map(RFleetDriverVo::getFleetId)
|
|
|
.orElse(null)));
|
|
|
req.setVehicleDataVO(vehicleDataVO);
|
|
|
-
|
|
|
+ req.setStatus("1");
|
|
|
try {
|
|
|
String url = urlConfigProperties.getApiBaseUrl();
|
|
|
HttpUtil.postJson(url+ UrlConstants.VEHICLE_TRAJECTORY, JSON.toJSONString(req), null);
|
|
|
@@ -413,31 +497,49 @@ public class kwfTruckTraceService {
|
|
|
log.error("app上报车辆轨迹异常",e);
|
|
|
throw new BusinessException("app上报车辆轨迹异常");
|
|
|
}
|
|
|
-
|
|
|
+ String key = CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE;
|
|
|
+ String xwOrderNo = "";
|
|
|
+ if (Objects.nonNull(waybillOrder)){
|
|
|
+ xwOrderNo = waybillOrder.getWOrderNo();
|
|
|
+ key = CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+xwOrderNo;
|
|
|
+ }
|
|
|
//先删除缓存
|
|
|
- RedissonUtils.delete(CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+req.getWOrderNo());
|
|
|
+ RedissonUtils.delete(key);
|
|
|
//组织缓存数据
|
|
|
- TruckDto truckDto = getTruckDto(req);
|
|
|
- //放入缓存
|
|
|
- RedissonUtils.add(CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+req.getWOrderNo(),JSON.toJSONString(truckDto));
|
|
|
+ TruckDto truckDto = getTruckDto(req,xwOrderNo);
|
|
|
+ //放入缓存 存十天
|
|
|
+ RedissonUtils.putString(key,JSON.toJSONString(truckDto),10, TimeUnit.DAYS);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ private void initReq(VehiclesTrajectoryReq req) {
|
|
|
+ req.setGpsStatus(req.getStatus());
|
|
|
+ req.setDirection(30.0f);
|
|
|
+ req.setFuelLevel(30.0f);
|
|
|
+ req.setMileage("1.0");
|
|
|
+ req.setEngineTemp(25.0f);
|
|
|
+ req.setBatteryVoltage(12.0f);
|
|
|
+ req.setStatus("1");
|
|
|
+ req.setAlarmCode("123");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 组织返回数据
|
|
|
* @param req 请求参数
|
|
|
* @return 缓存数据
|
|
|
*/
|
|
|
- private static TruckDto getTruckDto(VehiclesTrajectoryReq req) {
|
|
|
+ private TruckDto getTruckDto(VehiclesTrajectoryReq req,String wOrderNo) {
|
|
|
TruckDto truckDto = new TruckDto();
|
|
|
- truckDto.setWOrderNo(req.getWOrderNo());
|
|
|
+ truckDto.setWOrderNo(wOrderNo);
|
|
|
truckDto.setTruckNo(req.getTruckNo());
|
|
|
truckDto.setGpsStatus(String.valueOf(req.getSpeed()));
|
|
|
truckDto.setLongitude(req.getLongitude());
|
|
|
truckDto.setLatitude(req.getLatitude());
|
|
|
truckDto.setLocationTime(DateUtils.format(LocalDateTime.now(), DateUtils.DATE_TIME_PATTERN));
|
|
|
truckDto.setLOrderNo(req.getLOrderNo());
|
|
|
- truckDto.setTaskAddress("");
|
|
|
+ KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(wOrderNo);
|
|
|
+ String taskAddress = getTaskAddress(subtask);
|
|
|
+ truckDto.setTaskAddress(taskAddress);
|
|
|
return truckDto;
|
|
|
}
|
|
|
}
|