|
|
@@ -3,7 +3,6 @@ package com.sckw.transport.service;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.core.exception.BusinessException;
|
|
|
@@ -48,16 +47,18 @@ 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;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
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;
|
|
|
|
|
|
@@ -75,7 +76,6 @@ public class kwfTruckTraceService {
|
|
|
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;
|
|
|
|
|
|
@@ -237,14 +237,54 @@ public class kwfTruckTraceService {
|
|
|
//缓存没有则查询数据中台
|
|
|
VehicleReturnData vehicleReturnData = getVehicleReturnData(truckId);
|
|
|
if (Objects.nonNull(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);
|
|
|
+ }
|
|
|
+
|
|
|
+ @NotNull
|
|
|
+ private 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) {
|
|
|
+ private TruckInfoVo getTruckInfoVoByZj(String truckNo, String wOrderNo,String truckId) {
|
|
|
CollectZjxlResponse collectZjxlResponse = vehicleCollectService.transTimeManage(truckNo);
|
|
|
TruckInfoVo instance = TruckInfoVo.getInstance();
|
|
|
instance.setWOrderNo(wOrderNo);
|
|
|
@@ -261,23 +301,8 @@ 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;
|
|
|
}
|
|
|
|
|
|
@@ -439,18 +464,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
|
|
|
@@ -464,7 +490,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);
|
|
|
@@ -472,16 +498,30 @@ public class kwfTruckTraceService {
|
|
|
log.error("app上报车辆轨迹异常",e);
|
|
|
throw new BusinessException("app上报车辆轨迹异常");
|
|
|
}
|
|
|
-
|
|
|
+ String key = CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE;
|
|
|
+ if (Objects.nonNull(waybillOrder)){
|
|
|
+ key = CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+waybillOrder.getWOrderNo();
|
|
|
+ }
|
|
|
//先删除缓存
|
|
|
- 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));
|
|
|
+ //放入缓存 存十天
|
|
|
+ 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 请求参数
|