From e7311db7b916fb597ef3fa23b54222a1ca96dcc8 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 13 二月 2026 14:52:31 +0800
Subject: [PATCH] feat(order): 添加订单弹出功能和地理查询实体迁移

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

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 a169094..f89847b 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
@@ -12,6 +12,7 @@
 import com.xiaopeng.api.dto.order.GetOrderNumDto;
 import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
 import com.xiaopeng.api.dto.order.HistoryStartPointsDto;
+import com.xiaopeng.api.dto.order.PopOrderDto;
 import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
 import com.xiaopeng.api.dto.statistics.DailyCountDTO;
 import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO;
@@ -28,6 +29,7 @@
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
 import com.xiaopeng.api.model.account.XpAppUser;
+import com.xiaopeng.api.model.operation.XpGeoQueryEntity;
 import com.xiaopeng.api.model.operation.XpPoint;
 import com.xiaopeng.api.model.order.XpOrder;
 import com.xiaopeng.api.model.order.XpOrderCancel;
@@ -71,11 +73,13 @@
 import com.xiaopeng.order.utils.holiday.HolidayUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.transaction.core.TransactionType;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
@@ -1590,6 +1594,42 @@
 
 
     /**
+     * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据
+     * @param dto
+     */
+    @Override
+    @Transactional
+//    @ShardingTransactionType(TransactionType.BASE)
+    public void popOrder(PopOrderDto dto) {
+
+        XpOrder order = this.getById(dto.getOrderId());
+        order.setAcceptanceTime(LocalDateTime.now());
+        order.setVehicleId(dto.getXpVehicleId());
+        order.setStatus(2);
+
+        // Redis弹出这个队列元素
+        // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
+        String popFirstElement = redisService.popFirstElement(dto.getQueueName());
+        XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
+        String[] split = popFirstElement.split("_");
+        xpGeoQueryEntity.setOrderId(split[0]);
+        String[] split1 = split[1].split(",");
+        xpGeoQueryEntity.setLocation(new GeoJsonPoint(Double.parseDouble(split1[0]), Double.parseDouble(split1[1])));
+        xpGeoQueryEntity.setTimestamp(new Date());
+        // 计算2个时间的秒数
+        LocalDateTime createTime = order.getCreateTime();
+        LocalDateTime acceptanceTime = order.getAcceptanceTime();
+        xpGeoQueryEntity.setSeconds((int) Duration.between(createTime, acceptanceTime).getSeconds());
+        String currentTimeSlot = DateUtils.getCurrentTimeSlot();
+        xpGeoQueryEntity.setTime(currentTimeSlot);
+        // 存mongo数据
+        xpPricingClient.saveXpGeoQueryEntity(xpGeoQueryEntity);
+        this.updateById(order);
+
+    }
+
+
+    /**
      * 获取当前用户正在执行的订单
      *
      * @param uid

--
Gitblit v1.7.1