From 8d5f2e4948c9aa18e8024232e3f6dcd712be61ae Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期日, 01 三月 2026 07:41:43 +0800
Subject: [PATCH] 修改bug

---
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpOrderClient.java                               |    9 ++++
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java                         |   10 ++--
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpOrderClientFallbackFactory.java                    |    8 ++++
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java                      |   20 ++++-----
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/OrderTrajectoryVo.java                                    |   44 ++++++++++++++++++++++
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java |   13 ++++++
 6 files changed, 86 insertions(+), 18 deletions(-)

diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpOrderClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpOrderClientFallbackFactory.java
index 3ee5292..11ae823 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpOrderClientFallbackFactory.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpOrderClientFallbackFactory.java
@@ -6,6 +6,7 @@
 import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
 import com.xiaopeng.api.feignClient.order.XpOrderClient;
 import com.xiaopeng.api.model.order.XpOrder;
+import com.xiaopeng.api.vo.order.OrderTrajectoryVo;
 import com.xiaopeng.common.core.domain.R;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -94,6 +95,13 @@
                 log.error("更新订单状态失败,原因: {}", cause.getMessage());
                 return R.fail("更新订单状态失败");
             }
+
+
+            @Override
+            public R<String> saveVehicleLocation(OrderTrajectoryVo orderTrajectory) {
+                log.error("保存订单轨迹数据失败,原因: {}", cause.getMessage());
+                return R.fail("保存订单轨迹数据失败");
+            }
         };
     }
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpOrderClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpOrderClient.java
index 62eccc7..11af294 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpOrderClient.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpOrderClient.java
@@ -6,6 +6,7 @@
 import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
 import com.xiaopeng.api.factory.order.XpOrderClientFallbackFactory;
 import com.xiaopeng.api.model.order.XpOrder;
+import com.xiaopeng.api.vo.order.OrderTrajectoryVo;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -111,6 +112,12 @@
                                        @RequestParam Integer status);
 
 
-
+    /**
+     * 保存订单轨迹数据
+     * @param orderTrajectory
+     * @return
+     */
+    @PostMapping("/inner/v1/order/saveVehicleLocation")
+    R<String> saveVehicleLocation(@RequestBody OrderTrajectoryVo orderTrajectory);
 
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/OrderTrajectoryVo.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/OrderTrajectoryVo.java
new file mode 100644
index 0000000..9e60a27
--- /dev/null
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/OrderTrajectoryVo.java
@@ -0,0 +1,44 @@
+package com.xiaopeng.api.vo.order;
+
+
+import com.xiaopeng.common.core.web.domain.MongoBaseModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+public class OrderTrajectoryVo extends MongoBaseModel {
+
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+    /**
+     * 经纬度 坐标  (104.45645456,34.41564654)
+     */
+    private String location;
+    /**
+     * 方向角(0-359°)
+     */
+    private Integer direction;
+    /**
+     * 速度
+     */
+    private Double speed;
+    /**
+     * 时间戳 毫秒
+     */
+    private Long locatetime;
+
+    /**
+     * 距离 米
+     */
+    private Double distance;
+}
+
diff --git a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
index 7f20de2..6102a1f 100644
--- a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
+++ b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -23,6 +23,7 @@
 import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.TaskType;
 import com.xiaopeng.api.vo.automaticPilot.protobuf.*;
 import com.xiaopeng.api.vo.operation.RouteVo;
+import com.xiaopeng.api.vo.order.OrderTrajectoryVo;
 import com.xiaopeng.automaticPilot.util.XPUUtil;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.enums.OrderStatusEnum;
@@ -41,7 +42,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
+import java.util.Date;import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -418,6 +419,16 @@
                     dto.setDistance(10);
                     dto.setDirection(60);
                     xpPushMessageClient.pushOrderRoute(dto);
+
+                    //存储历史轨迹
+                    OrderTrajectoryVo orderTrajectory = new OrderTrajectoryVo();
+                    orderTrajectory.setOrderId(orderId);
+                    orderTrajectory.setLocation(longitude + "," + latitude);
+                    orderTrajectory.setDirection(dto.getDirection());
+                    orderTrajectory.setSpeed(0D);
+                    orderTrajectory.setLocatetime(System.currentTimeMillis());
+                    orderTrajectory.setCreateTime(new Date());
+                    xpOrderClient.saveVehicleLocation(orderTrajectory);
                 }
 
                 //5秒钟循环一次
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
index 0c68941..dba9a0d 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -15,10 +15,7 @@
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
 import com.xiaopeng.api.vo.operation.RouteVo;
-import com.xiaopeng.api.vo.order.FareBreakdownVo;
-import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo;
-import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo;
-import com.xiaopeng.api.vo.order.XpPointInfoVo;
+import com.xiaopeng.api.vo.order.*;
 import com.xiaopeng.common.core.constant.CacheConstants;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.utils.WebUtils;
@@ -43,6 +40,7 @@
 import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -474,7 +472,9 @@
      */
     @ApiOperation(value = "订单车辆定位实时存储")
     @PostMapping("/inner/v1/order/saveVehicleLocation")
-    public R<String> saveVehicleLocation(@RequestBody OrderTrajectory orderTrajectory) {
+    public R<String> saveVehicleLocation(@RequestBody OrderTrajectoryVo vo) {
+        OrderTrajectory orderTrajectory = new OrderTrajectory();
+        BeanUtils.copyProperties(vo, orderTrajectory);
         xpOrderService.saveVehicleLocation(orderTrajectory);
         return R.ok();
     }
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index ebfdb4b..dcd2236 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -1880,10 +1880,11 @@
         if (StringUtils.isEmpty(oldLocation)) {
             // 首次定位
             xpOrder.setMileageKilometers(0D);
+            xpOrder.setAppUserId(null);
             this.updateById(xpOrder);
             orderTrajectory.setDistance(0D);
             // 存储mongo数据
-            orderTrajectoryService.create(orderTrajectory);
+            mongoTemplate.save(orderTrajectory);
             // 存储首次定位
             redisService.setCacheObject(CacheConstants.ORDER_OLD_LOCATION + orderTrajectory.getOrderId(), orderTrajectory.getLocation());
         } else {
@@ -1892,11 +1893,12 @@
                 Double distance1 = distance.get("WGS84");
                 if (distance1 > 50 && xpOrder.getStatus() == 6) {//大于50米表示在移动,且在服务中的时候记录里程
                     xpOrder.setMileageKilometers(BigDecimal.valueOf(xpOrder.getMileageKilometers()).add(new BigDecimal(distance1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+                    xpOrder.setAppUserId(null);
                     this.updateById(xpOrder);
                     // 存储本次距离
                     orderTrajectory.setDistance(distance1);
                     // 存储mongo数据
-                    orderTrajectoryService.create(orderTrajectory);
+                    mongoTemplate.save(orderTrajectory);
                 }
             } else {
                 log.error("调用高德计算距离出错");
@@ -1930,15 +1932,11 @@
             }
 
         }
-//        List<OrderTrajectory> trajectories = mongoTemplate.find(
-//                new Query(Criteria.where("orderId").is(orderId))
-//                        .with(Sort.by(Sort.Direction.ASC, "locatetime")),
-//                OrderTrajectory.class
-//        );
-        List<TaxiPricingDemoService.GpsPoint> mockGpsPoints = TaxiPricingDemoService.createMockGpsPoints(DateUtils.toDate(order.getCreateTime()));
-
-        // 生成轨迹记录
-        List<OrderTrajectory> trajectories = TrajectoryGenerator.generateTrajectory(mockGpsPoints);
+        List<OrderTrajectory> trajectories = mongoTemplate.find(
+                new Query(Criteria.where("orderId").is(orderId))
+                        .with(Sort.by(Sort.Direction.ASC, "locatetime")),
+                OrderTrajectory.class
+        );
         orderDetailVo.setTrajectories(trajectories);
         if (order.getTripBegin() != null && order.getTripEnd() != null) {
             // 计算两个时间相差多少分钟

--
Gitblit v1.7.1