From 06006887e9625a5d8b2f348ce9aca65ee296c768 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 25 二月 2026 18:49:59 +0800
Subject: [PATCH] 修改推送导航数据逻辑
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 121 ++++++++++++++++++++++++++++++----------
1 files changed, 90 insertions(+), 31 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 c017bdb..4a458e9 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
@@ -5,6 +5,7 @@
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -41,8 +42,10 @@
import com.xiaopeng.api.model.order.*;
import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.api.vo.OrderType;
import com.xiaopeng.api.vo.account.UserCouponVo;
import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperationType;
+import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.order.*;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
@@ -1649,46 +1652,102 @@
@Transactional
// @ShardingTransactionType(TransactionType.BASE)
public void popOrder(PopOrderDto dto) {
- XpOrder order = this.getById(dto.getOrderId());
- order.setAcceptanceTime(LocalDateTime.now());
- AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
- R<XpVehicle> byVehicleVin = xpVehicleClient.findByVehicleVin(dto.getXpVehicleVin());
- XpVehicle vehicle = null;
- if (byVehicleVin.getCode() == 200) {
- vehicle = byVehicleVin.getData();
- order.setVehicleId(vehicle.getId());
- addTaxiPassengerVo.setVin(vehicle.getVehicleVin());
+ String orderType = dto.getOrderType();
+ Long orderId = dto.getOrderId();
+ //巡游单处理逻辑
+ if(OrderType.CRUISE_ORDER.equals(orderType)){
+ // todo 需要处理巡游的逻辑
+
+
+
}
- order.setStatus(2);
+ //乘客单处理逻辑
+ if(OrderType.USER_ORDER.equals(orderType)){
+ XpOrder order = this.getById(orderId);
+ //订单为待接单状态
+ if(order.getStatus() == 1){
+ AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
+ order.setAcceptanceTime(LocalDateTime.now());
+ R<XpVehicle> byVehicleVin = xpVehicleClient.findByVehicleVin(dto.getXpVehicleVin());
+ XpVehicle vehicle = null;
+ if (byVehicleVin.getCode() == 200) {
+ vehicle = byVehicleVin.getData();
+ order.setVehicleId(vehicle.getId());
+ addTaxiPassengerVo.setVin(vehicle.getVehicleVin());
+ }
+ order.setStatus(2);
- addTaxiPassengerVo.setUid(order.getAppUserId().toString());
- addTaxiPassengerVo.setOrderNo(order.getOrderNumber());
- // TODO appid
- addTaxiPassengerVo.setAppId("");
+ // Redis弹出这个队列元素
+ // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
+ String popFirstElement = redisService.popFirstElement(order.getQueueName());
+ XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
+ String[] split = popFirstElement.split("_");
+ xpGeoQueryEntity.setOrderId(split[0]);
+ // 存mongo数据
+ xpPricingClient.updateXpGeoQueryEntity(split[0]);
+ this.updateById(order);
- BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
- if (baseVehicleUserDto.getCode() == 200) {
+ // 修改车辆信息
+ vehicle.setState(1);
+ xpVehicleClient.updateVehicleById(vehicle);
- // Redis弹出这个队列元素
- // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
- String popFirstElement = redisService.popFirstElement(order.getQueueName());
- XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
- String[] split = popFirstElement.split("_");
- xpGeoQueryEntity.setOrderId(split[0]);
- // 存mongo数据
- xpPricingClient.updateXpGeoQueryEntity(split[0]);
- this.updateById(order);
-
- // 修改车辆信息
- vehicle.setState(1);
- xpVehicleClient.updateVehicleById(vehicle);
-
-
+ //绑定用户和车辆关系
+ addTaxiPassengerVo.setUid(order.getAppUserId().toString());
+ addTaxiPassengerVo.setOrderNo(order.getOrderNumber());
+ // TODO appid
+ addTaxiPassengerVo.setAppId("");
+ userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
+ //推送乘客车辆到达预约点的导航数据
+ sendRoute(order.getAppUserId().toString(), orderId, "ORDER_NAVIGATION_START_DATA");
+ }else{
+ //推送行起点到终点的驶轨迹给乘客端
+ sendRoute(order.getAppUserId().toString(), orderId, "ORDER_NAVIGATION_END_DATA");
+ }
}
}
/**
+ * 发送乘客导航路径数据
+ * @param appUserId
+ * @param keyStr
+ */
+ public void sendRoute(String appUserId, Long orderId, String keyStr){
+ Object cacheObject = redisService.getCacheObject(keyStr + ":" + appUserId);
+ if(null != cacheObject){
+ RouteVo routeVo = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("type", "ORDER_ROUTE");
+ jsonObject.put("timestamp", System.currentTimeMillis());
+ JSONObject content = new JSONObject();
+ content.put("orderId", orderId);
+ content.put("routeType", "ORDER_NAVIGATION_START_DATA".equals(keyStr) ? 1 : 2);
+ JSONObject route = new JSONObject();
+ route.put("distance", routeVo.getDistance());
+ route.put("duration", routeVo.getDuration());
+ route.put("routeID", routeVo.getRouteID());
+
+ List<JSONObject> collect = routeVo.getPolyline().stream().map(item->{
+ JSONObject point = new JSONObject();
+ point.put("latitude", item.getLatitude());
+ point.put("longitude", item.getLongitude());
+ return point;
+ }).collect(Collectors.toList());
+
+ route.put("polyline", collect);
+ content.put("route", route);
+ jsonObject.put("content", content);
+ SendMessageDTO messageDTO = new SendMessageDTO();
+ messageDTO.setAppUserId(appUserId);
+ messageDTO.setMessage(jsonObject.toJSONString());
+ xpPushMessageClient.sendRoute(messageDTO);
+ }
+ }
+
+
+
+
+ /**
* 获取当前用户正在执行的订单
*
* @param uid
--
Gitblit v1.7.1