Selaa lähdekoodia

提交修改商品名称

chenxiaofei 2 viikkoa sitten
vanhempi
commit
0465291235

+ 5 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/LocUtils.java

@@ -110,10 +110,10 @@ public class LocUtils {
             }
             
             // 从所有点位中均匀选取指定数量的点
-            List<RoutePoint> selectedPoints = selectUniformPoints(allPoints, pointCount);
+           // List<RoutePoint> selectedPoints = selectUniformPoints(allPoints, pointCount);
             
             RouteResult result = new RouteResult();
-            result.setPointInfo(JSON.toJSONString(selectedPoints));
+            result.setPointInfo(JSON.toJSONString(allPoints));
             result.setDuration(duration);
             
             return result;
@@ -189,7 +189,9 @@ public class LocUtils {
     private static List<RoutePoint> selectUniformPoints(List<RoutePoint> allPoints, int pointCount) {
         List<RoutePoint> selectedPoints = new ArrayList<>();
         
-        if (allPoints.isEmpty()) return selectedPoints;
+        if (allPoints.isEmpty()) {
+            return selectedPoints;
+        }
         
         if (allPoints.size() <= pointCount) {
             LocalDateTime now = LocalDateTime.now();

+ 7 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -2479,8 +2479,9 @@ public class KwtLogisticsConsignmentService {
 
         KwtLogisticsOrderGoods goods = finalLogIdAndGoodsMap.getOrDefault(kwtLogisticsOrder.getId(), new KwtLogisticsOrderGoods());
         KwpGoods kwpGoods = finalGoodsIdAndGoodsMap.get(goods.getGoodsId());
-        String priceUnit = kwpGoods.getPriceUnit();
+        String priceUnit = "";
         if (Objects.nonNull(kwpGoods)) {
+            priceUnit = kwpGoods.getPriceUnit();
             logisticsOrderResp.setGoodsId(String.valueOf(goods.getGoodsId()));
             Map<String, String> goodsTypeMap = dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), new HashMap<>());
             Map<String, String> goodsSpecMap = dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.GOODS_SPEC.getType(), new HashMap<>());
@@ -3151,6 +3152,11 @@ public class KwtLogisticsConsignmentService {
 
             //查询物流订单下的所有运单
             List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogId(x.getId());
+            if (org.apache.commons.collections4.CollectionUtils.isEmpty(waybillOrderSubtasks)) {
+                updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.COMPLETED.getCode());
+                logisticsOrders.add(updateLogisticsOrder);
+                tradeIds.add(x.getTOrderId());
+            }
             if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrderSubtasks) && Objects.equals(x.getStatus(), LogisticsOrderV1Enum.IN_TRANSIT.getCode())) {
                 boolean b = waybillOrderSubtasks.stream()
                         .anyMatch(y -> !Arrays.asList(CarWaybillV1Enum.COMPLETED.getCode(), CarWaybillV1Enum.CANCELLED.getCode()).contains(y.getStatus()));

+ 82 - 17
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -14,6 +14,7 @@ import com.sckw.core.model.enums.AddressTypeEnum;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.utils.DateUtils;
+import com.sckw.core.utils.LocUtils;
 import com.sckw.core.web.constant.CommonConstants;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.BaseIotResult;
@@ -33,6 +34,7 @@ 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.system.api.model.dto.res.SysDictResDto;
+import com.sckw.transport.api.model.vo.RWaybillOrderVo;
 import com.sckw.transport.common.config.UrlConfigProperties;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.TruckDto;
@@ -1467,7 +1469,41 @@ public class kwfTruckTraceService {
         if (Objects.isNull(subOrders)){
             throw new BusinessException("子运单不存在");
         }
-        
+        //查询运单装卸货地址
+        List<KwtWaybillOrderAddress> addressList = kwtWaybillOrderAddressRepository.queryByWOrderId(order.getId());
+        if (CollectionUtils.isEmpty(addressList)){
+            throw new BusinessException("运单地址不存在");
+        }
+        String startLng= "";
+        String startLat= "";
+        String endLng =  "";
+        String endLat = "";
+        for (KwtWaybillOrderAddress address : addressList) {
+            if (Objects.equals(address.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())) {
+                startLng = address.getLng();
+                startLat = address.getLat();
+            }
+            if (Objects.equals(address.getAddressType(), AddressTypeEnum.TAKE.getCode())) {
+                endLng = address.getLng();
+                endLat = address.getLat();
+            }
+        }
+        if (!Objects.equals(order.getStatus(), CarWaybillV1Enum.COMPLETED.getCode())){
+             endLng =  longitude;
+             endLat = latitude;
+        }
+
+        LocUtils.RouteResult routeResult = generateRoutePointsWithDuration(startLng, startLat, endLng, endLat);
+        if (routeResult == null || com.sckw.core.utils.StringUtils.isBlank(routeResult.getPointInfo())) {
+            log.error("高德API生成轨迹点位失败,起点: {},{} 终点: {},{}", startLng, startLat, endLng, endLat);
+            throw new BusinessException("生成轨迹失败:高德API生成轨迹点位失败");
+        }
+        List<LocUtils.RoutePoint> routePoints = JSON.parseArray(routeResult.getPointInfo(), LocUtils.RoutePoint.class);
+        if (CollectionUtils.isEmpty(routePoints)) {
+            log.error("高德API生成轨迹点位失败,起点: {},{} 终点: {},{}", startLng, startLat, endLng, endLat);
+            throw new BusinessException("生成轨迹失败:高德API生成轨迹点位为空");
+        }
+
         // 通过车牌ID查询所属车队信息
         RFleetVo fleetByTruckId = fleetService.findFleetByTruckId(order.getTruckId());
         
@@ -1475,29 +1511,58 @@ public class kwfTruckTraceService {
         KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderRepository.queryByLogisticsOrderId(subOrders.getLOrderId());
 
         // 构造要发送给数据中台的轨迹数据请求
-        VehiclesTrajectoryReq vehiclesTrajectoryReq = getVehiclesTrajectoryReq(req, order, longitude, latitude, logisticsOrder, fleetByTruckId);
+        routePoints.forEach(point -> {
+            VehiclesTrajectoryReq vehiclesTrajectoryReq = getVehiclesTrajectoryReq(req, order, point.getLongitude(), point.getLatitude(), logisticsOrder, fleetByTruckId);
+
+            try {
+                // 调用数据中台保存轨迹数据
+                log.info("调用数据中台保存车辆轨迹数据:{}", JSON.toJSONString(vehiclesTrajectoryReq));
+                BaseIotResult<Void> result = vehicleTraceClient.saveVehicleData(vehiclesTrajectoryReq);
+                if (!Objects.equals(result.getCode(), "0")) {
+                    log.error("保存车辆轨迹数据失败:{}", result.getMessage());
+                    throw new BusinessException("生成轨迹失败:" + result.getMessage());
+                }
+
+                // 如果请求中包含异常类型,则同时保存到本地车辆异常表
+                saveException(req, order, longitude, latitude);
 
+                log.info("生成车辆轨迹成功,运单号:{},车牌号:{}", req.getWayOrderNo(), req.getTruckNo());
+            } catch (Exception e) {
+                log.error("生成车辆轨迹异常:", e);
+                throw new BusinessException("生成轨迹失败:" + e.getMessage());
+            }
+        });
+
+
+    }
+
+
+    private LocUtils.RouteResult generateRoutePointsWithDuration(String startLng, String startLat, String endLng, String endLat) {
         try {
-            // 调用数据中台保存轨迹数据
-            log.info("调用数据中台保存车辆轨迹数据:{}", JSON.toJSONString(vehiclesTrajectoryReq));
-            BaseIotResult<Void> result = vehicleTraceClient.saveVehicleData(vehiclesTrajectoryReq);
-            if (!Objects.equals(result.getCode(), "0")) {
-                log.error("保存车辆轨迹数据失败:{}", result.getMessage());
-                throw new BusinessException("生成轨迹失败:" + result.getMessage());
+            log.info("开始调用高德API生成轨迹点位和耗时,起点: {},{} 终点: {},{}",
+                    startLng, startLat, endLng, endLat);
+
+            // 调用高德驾车路径规划API,生成20个轨迹点位和耗时
+            LocUtils.RouteResult routeResult = com.sckw.core.utils.LocUtils.getDrivingRoutePointsWithDuration(
+                    startLng,
+                    startLat,
+                    endLng,
+                    endLat,
+                    20
+            );
+
+            if (routeResult != null && com.sckw.core.utils.StringUtils.isNotBlank(routeResult.getPointInfo())) {
+                log.info("高德API生成轨迹点位成功,耗时: {}秒", routeResult.getDuration());
+            } else {
+                log.warn("高德API生成轨迹点位失败或返回空数据");
             }
-            
-            // 如果请求中包含异常类型,则同时保存到本地车辆异常表
-            saveException(req, order, longitude, latitude);
 
-            log.info("生成车辆轨迹成功,运单号:{},车牌号:{}", req.getWayOrderNo(), req.getTruckNo());
+            return routeResult;
         } catch (Exception e) {
-            log.error("生成车辆轨迹异常:", e);
-            throw new BusinessException("生成轨迹失败:" + e.getMessage());
+            log.error("调用高德API生成轨迹点位异常", e);
+            return null;
         }
-
-
     }
-
     private void saveException(GenerateTraceReq req, KwtWaybillOrder order, String longitude, String latitude) {
         if (Objects.nonNull(req.getExceptionType())) {
             // 保存到车辆异常表