|
|
@@ -1,8 +1,7 @@
|
|
|
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.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.core.exception.BusinessException;
|
|
|
@@ -24,8 +23,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,6 +40,7 @@ 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;
|
|
|
@@ -54,6 +56,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@@ -69,6 +72,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;
|
|
|
@@ -113,20 +117,24 @@ public class kwfTruckTraceService {
|
|
|
List<Long> entIds = records.stream().map(KwtWaybillOrder::getId).distinct().collect(Collectors.toList());
|
|
|
//运单id
|
|
|
List<Long> wOrderIds = records.stream().map(KwtWaybillOrder::getId).collect(Collectors.toList());
|
|
|
+ //关联订单id
|
|
|
+ Set<Long> lOrderIds = records.stream().map(KwtWaybillOrder::getLOrderId).collect(Collectors.toSet());
|
|
|
+ List<KwtLogisticsOrderUnit> logisticsOrderUnits = kwtLogisticsOrderUnitRepository.queryByLOrderIdsAndUnitType(lOrderIds,2);
|
|
|
+ //运单号映射企业
|
|
|
+ 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));
|
|
|
|
|
|
List<KwfTruckTraceReplayVo> kwfTruckTraceReplayVoList = records.stream()
|
|
|
- .map(r -> getKwfTruckTraceReplayVo(r, idAndKwsEnterpriseMap, wOrderIdAndAddressMap))
|
|
|
+ .map(r -> getKwfTruckTraceReplayVo(r, idAndKwsEnterpriseMap, wOrderIdAndAddressMap, lOrderIdAndLogisticsOrderUnitMap))
|
|
|
.collect(Collectors.toList());
|
|
|
return PageDataResult.of(page,kwfTruckTraceReplayVoList);
|
|
|
}
|
|
|
@@ -138,7 +146,9 @@ 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) {
|
|
|
|
|
|
KwfTruckTraceReplayVo kwfTruckTraceReplay = new KwfTruckTraceReplayVo();
|
|
|
kwfTruckTraceReplay.setWOrderId(waybillOrder.getId());
|
|
|
@@ -147,7 +157,8 @@ 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());
|
|
|
+ KwtLogisticsOrderUnit kwtLogisticsOrderUnit = lOrderIdAndLogisticsOrderUnitMap.get(waybillOrder.getLOrderId());
|
|
|
+ KwsEnterpriseResDto orDefault = idAndKwsEnterpriseMap.getOrDefault(kwtLogisticsOrderUnit.getEntId(), new KwsEnterpriseResDto());
|
|
|
kwfTruckTraceReplay.setCarrier(orDefault.getFirmName());
|
|
|
List<KwtWaybillOrderAddress> addressList = wOrderIdAndAddressMap.get(waybillOrder.getId());
|
|
|
addressList.forEach(e -> {
|
|
|
@@ -178,36 +189,36 @@ 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);
|
|
|
+ return buildTruckInfo(truckId, vehicleReturnData, truckNo);
|
|
|
}
|
|
|
//todo 查询中交 如果数据中台没有数据则查询中交
|
|
|
return getTruckInfoVoByZj(truckNo, wOrderNo);
|
|
|
@@ -253,23 +264,43 @@ public class kwfTruckTraceService {
|
|
|
|
|
|
/**
|
|
|
* 将数据中台的数据进行组织
|
|
|
- * @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 +326,9 @@ public class kwfTruckTraceService {
|
|
|
*/
|
|
|
public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
|
|
|
log.info("查询当前任务轨迹参数:{}", req);
|
|
|
- if (StringUtils.isBlank(req.getWOrderNo())){
|
|
|
- log.info("运单号为空没有任务,没有关联路线");
|
|
|
- return new CurrentTaskTraceReqVo();
|
|
|
- }
|
|
|
+ KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo());
|
|
|
//查询数据中台获取轨迹
|
|
|
- List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(req.getWOrderNo());
|
|
|
+ List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(waybillOrder.getWOrderNo());
|
|
|
if (CollectionUtils.isEmpty(vehicleReturnDataList)){
|
|
|
return new CurrentTaskTraceReqVo();
|
|
|
}
|
|
|
@@ -333,7 +361,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 +379,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) {
|