|
@@ -0,0 +1,209 @@
|
|
|
|
|
+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.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
+import com.sckw.contract.api.RemoteContractService;
|
|
|
|
|
+import com.sckw.core.exception.BusinessException;
|
|
|
|
|
+import com.sckw.core.model.enums.CarWaybillEnum;
|
|
|
|
|
+import com.sckw.core.model.page.PageResult;
|
|
|
|
|
+
|
|
|
|
|
+import com.sckw.core.utils.DateUtils;
|
|
|
|
|
+import com.sckw.core.web.constant.CommonConstants;
|
|
|
|
|
+import com.sckw.fleet.api.RemoteFleetService;
|
|
|
|
|
+import com.sckw.fleet.api.model.vo.RTruckVo;
|
|
|
|
|
+import com.sckw.manage.api.RemoteManageService;
|
|
|
|
|
+import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
|
|
|
|
|
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
|
|
+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.KwsEnterpriseResDto;
|
|
|
|
|
+import com.sckw.transport.model.KwtWaybillOrder;
|
|
|
|
|
+import com.sckw.transport.model.KwtWaybillOrderAddress;
|
|
|
|
|
+import com.sckw.transport.model.dto.TruckDto;
|
|
|
|
|
+import com.sckw.transport.model.param.CurrentTaskTraceReq;
|
|
|
|
|
+import com.sckw.transport.model.param.KwfTruckTraceReplayReq;
|
|
|
|
|
+import com.sckw.transport.model.param.TruckInfoReq;
|
|
|
|
|
+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.KwtWaybillOrderAddressRepository;
|
|
|
|
|
+import com.sckw.transport.repository.KwtWaybillOrderRepository;
|
|
|
|
|
+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.springframework.stereotype.Service;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @author PC
|
|
|
|
|
+ */
|
|
|
|
|
+@Service
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+@RequiredArgsConstructor
|
|
|
|
|
+public class kwfTruckTraceService {
|
|
|
|
|
+ private final KwtWaybillOrderRepository kwtWaybillOrderRepository;
|
|
|
|
|
+ private final KwtWaybillOrderAddressRepository kwtWaybillOrderAddressRepository;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
|
|
|
|
|
+ RemoteSystemService remoteSystemService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
|
|
|
|
|
+ TradeOrderInfoService tradeOrderInfoService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
|
|
|
|
|
+ RemoteTradeOrderAmountService tradeOrderAmountService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
|
|
|
|
|
+ GoodsInfoService goodsInfoService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
|
|
|
|
|
+ RemoteFleetService fleetService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
|
|
|
|
|
+ RemoteContractService remoteContractService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
|
|
|
|
|
+ RemoteManageService remoteManageService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
|
|
|
|
|
+ PaymentDubboService paymentDubboService ;
|
|
|
|
|
+
|
|
|
|
|
+ public PageResult findPage(KwfTruckTraceReplayReq req) {
|
|
|
|
|
+ log.info("查询历轨迹回放氢气参数:{}", req);
|
|
|
|
|
+ Date date = new Date();
|
|
|
|
|
+ if (StringUtils.isBlank(req.getStartTime())){
|
|
|
|
|
+ date = DateUtils.formatDate(req.getStartTime());
|
|
|
|
|
+ }
|
|
|
|
|
+ Date beforeDate = DateUtils.addDateDays(date, -30);
|
|
|
|
|
+ if (StringUtils.isBlank(req.getEndTime())){
|
|
|
|
|
+ beforeDate = DateUtils.formatDate(req.getEndTime());
|
|
|
|
|
+ }
|
|
|
|
|
+ Page<KwtWaybillOrder> page = kwtWaybillOrderRepository.findPage(req.getPageNum(), req.getPageSize(), beforeDate, date);
|
|
|
|
|
+ List<KwtWaybillOrder> records = page.getRecords();
|
|
|
|
|
+ if(CollectionUtils.isEmpty(page.getRecords())) {
|
|
|
|
|
+ return new PageResult();
|
|
|
|
|
+ }
|
|
|
|
|
+ //查询企业 获取承运单位
|
|
|
|
|
+ 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映射企业信息
|
|
|
|
|
+ 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);
|
|
|
|
|
+ //运单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))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ return PageResult.of(page,kwfTruckTraceReplayVoList);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private static KwfTruckTraceReplayVo getKwfTruckTraceReplayVo(KwtWaybillOrder r, Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap, Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap) {
|
|
|
|
|
+
|
|
|
|
|
+ KwfTruckTraceReplayVo kwfTruckTraceReplay = new KwfTruckTraceReplayVo();
|
|
|
|
|
+ kwfTruckTraceReplay.setWOrderId(r.getId());
|
|
|
|
|
+ kwfTruckTraceReplay.setWOrderNo(r.getWOrderNo());
|
|
|
|
|
+ kwfTruckTraceReplay.setDriverName(r.getDriverName());
|
|
|
|
|
+ kwfTruckTraceReplay.setPhone(r.getDriverPhone());
|
|
|
|
|
+ kwfTruckTraceReplay.setStatus(String.valueOf(r.getStatus()));
|
|
|
|
|
+ kwfTruckTraceReplay.setStatusDesc(CarWaybillEnum.getName(r.getStatus()));
|
|
|
|
|
+ KwsEnterpriseResDto orDefault = idAndKwsEnterpriseMap.getOrDefault(r.getEntId(), new KwsEnterpriseResDto());
|
|
|
|
|
+ kwfTruckTraceReplay.setCarrier(orDefault.getFirmName());
|
|
|
|
|
+ List<KwtWaybillOrderAddress> addressList = wOrderIdAndAddressMap.get(r.getId());
|
|
|
|
|
+ addressList.forEach(e -> {
|
|
|
|
|
+ if (Objects.equals(e.getAddressType(),1)){
|
|
|
|
|
+ kwfTruckTraceReplay.setStartAddress(e.getDetailAddress());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (Objects.equals(e.getAddressType(),2)){
|
|
|
|
|
+ kwfTruckTraceReplay.setEndAddress(e.getDetailAddress());
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ kwfTruckTraceReplay.setRelationTaskNo(Objects.nonNull(r.getLOrderId()) ? String.valueOf(r.getLOrderId()) : "");
|
|
|
|
|
+// if (Objects.equals(r.getStatus(), CarWaybillEnum.WAIT_LOADING.getCode())){
|
|
|
|
|
+//
|
|
|
|
|
+// }
|
|
|
|
|
+ String taskStartEndTime = DateUtils.format(r.getTaskStartTime(), DateUtils.DATE_TIME_PATTERN);
|
|
|
|
|
+ kwfTruckTraceReplay.setTaskStartTime(StringUtils.equals(taskStartEndTime, CommonConstants.DATE_TIME) ? StringUtils.EMPTY: taskStartEndTime);
|
|
|
|
|
+// if (Objects.equals(r.getStatus(),CarWaybillEnum.COMPLETION_UNLOADING.getCode())){
|
|
|
|
|
+//
|
|
|
|
|
+// }
|
|
|
|
|
+ String endStartEndTime = DateUtils.format(r.getTaskEndTime(), DateUtils.DATE_TIME_PATTERN);
|
|
|
|
|
+ kwfTruckTraceReplay.setTaskEndTime(StringUtils.equals(endStartEndTime, CommonConstants.DATE_TIME) ? StringUtils.EMPTY: endStartEndTime);
|
|
|
|
|
+ kwfTruckTraceReplay.setWarningCount("");
|
|
|
|
|
+ return kwfTruckTraceReplay;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public TruckInfoVo queryTruckInfo(TruckInfoReq req) {
|
|
|
|
|
+ log.info("查询车辆实时位置信息参数:{}", req);
|
|
|
|
|
+ //todo cxf 查询当前位置 有可能没有任务则不查询td 查询redis
|
|
|
|
|
+ String location;
|
|
|
|
|
+ if (StringUtils.isNotBlank(req.getTruckNo())){
|
|
|
|
|
+ return getTruckInfoVo(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();
|
|
|
|
|
+ }
|
|
|
|
|
+ return getTruckInfoVo(dataFirstTruck.getTruckNo());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static TruckInfoVo getTruckInfoVo(String truckNo) {
|
|
|
|
|
+ String location = RedissonUtils.getString(CommonConstants.TRUCK_LOCATION + truckNo);
|
|
|
|
|
+ if (StringUtils.isBlank(location)){
|
|
|
|
|
+ //todo cxf 查询中交运车辆位置
|
|
|
|
|
+ return new TruckInfoVo();
|
|
|
|
|
+ }
|
|
|
|
|
+ TruckDto truckDto = JSON.parseObject(location, TruckDto.class);
|
|
|
|
|
+ //如果运单号为空那么返回redis的数据 这个数据是app最后一次上报的数据
|
|
|
|
|
+ if (Objects.nonNull(truckDto) && StringUtils.isBlank(truckDto.getWOrderNo())){
|
|
|
|
|
+ return TruckInfoVo.toTruckInfoVo(truckDto);
|
|
|
|
|
+ }
|
|
|
|
|
+ //如果车牌不为空直接查询 查缓存
|
|
|
|
|
+ if (StringUtils.isNotBlank(truckDto.getWOrderNo())){
|
|
|
|
|
+ //todo cxf 查询中交
|
|
|
|
|
+ return new TruckInfoVo();
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
|
|
|
|
|
+ log.info("查询当前任务轨迹参数:{}", req);
|
|
|
|
|
+ if (StringUtils.isBlank(req.getWOrderNo())){
|
|
|
|
|
+ log.info("运单号为空没有任务,没有关联路线");
|
|
|
|
|
+ return new CurrentTaskTraceReqVo();
|
|
|
|
|
+ }
|
|
|
|
|
+ //cxf todo 查询车辆td数据库
|
|
|
|
|
+ return new CurrentTaskTraceReqVo();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public CurrentTaskTraceReqVo queryCurrentTruckTrace(CurrentTaskTraceReq req) {
|
|
|
|
|
+ if (StringUtils.isBlank(req.getTruckNo())){
|
|
|
|
|
+ throw new BusinessException("车牌号不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ //cxf todo 查询车辆td数据库
|
|
|
|
|
+ return new CurrentTaskTraceReqVo();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|