From af5ffb2c572c3188052b0d4b37c4bcec43f11c7d Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 20 四月 2026 21:41:58 +0800
Subject: [PATCH] 增加修改目的地后的XPU消息下发

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java |   52 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 47 insertions(+), 5 deletions(-)

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 1e85c55..788bdbf 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
@@ -80,7 +80,7 @@
         if(dto.getOrderType().equals(com.xiaopeng.api.vo.OrderType.CRUISE_ORDER)){
             RtTask.Builder taskBuilder = RtTask.newBuilder();
             taskBuilder.setOrderId(dto.getOrderId().toString());
-            taskBuilder.setTaskId(snowflake.nextId() + "");
+            taskBuilder.setTaskId(StringUtils.isNotEmpty(dto.getTaskId()) ? dto.getTaskId() : snowflake.nextId() + "");
             taskBuilder.setTaskType(OrderType.ORDER_TYPE_CRUISE);
             //构建起点坐标数据
             pointBuilderStart.setWaypointId(dto.getOrderId() + "-001");
@@ -111,7 +111,7 @@
             for (int i = 1; i < 3; i++) {
                 RtTask.Builder taskBuilder = RtTask.newBuilder();
                 taskBuilder.setOrderId(dto.getOrderId().toString());
-                taskBuilder.setTaskId(snowflake.nextId() + "");
+                taskBuilder.setTaskId(StringUtils.isNotEmpty(dto.getTaskId()) ? dto.getTaskId() : snowflake.nextId() + "");
                 taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI);
                 if(i == 1){
                     VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(dto.getVin())), VehiclePosition.class);
@@ -171,7 +171,7 @@
             for (int i = 1; i < 3; i++) {
                 RtTask.Builder taskBuilder = RtTask.newBuilder();
                 taskBuilder.setOrderId(dto.getOrderId().toString());
-                taskBuilder.setTaskId(snowflake.nextId() + "");
+                taskBuilder.setTaskId(StringUtils.isNotEmpty(dto.getTaskId()) ? dto.getTaskId() : snowflake.nextId() + "");
                 taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI);
                 if(i == 1){
                     VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(dto.getVin())), VehiclePosition.class);
@@ -230,7 +230,7 @@
             //测试单巡游单
             RtTask.Builder taskBuilder = RtTask.newBuilder();
             taskBuilder.setOrderId(dto.getOrderId().toString());
-            taskBuilder.setTaskId(snowflake.nextId() + "");
+            taskBuilder.setTaskId(StringUtils.isNotEmpty(dto.getTaskId()) ? dto.getTaskId() : snowflake.nextId() + "");
             taskBuilder.setTaskType(OrderType.ORDER_TYPE_CRUISE);
             //构建起点坐标数据
             pointBuilderStart.setWaypointId(dto.getOrderId() + "-001");
@@ -281,7 +281,7 @@
     }
 
     @PostMapping("/logan/inner/cancelOrder")
-    R<Boolean> cancelOrder(@RequestBody PushOrderDto dto) {
+    public R<Boolean> cancelOrder(@RequestBody PushOrderDto dto) {
         log.info("取消订单,推送XPU报文:{}", JSON.toJSONString(dto));
         String taskId = StringUtils.isNotEmpty(dto.getTaskId()) ? dto.getTaskId() : snowflake.nextId() + "";
         OrderOperation.Builder operationBuilder = OrderOperation.newBuilder();
@@ -317,6 +317,48 @@
 
 
 
+    @PostMapping("/logan/inner/updateEndAddress")
+    public R<Boolean> updateEndAddress(@RequestBody PushOrderDto dto){
+        log.info("修改目的地,推送XPU报文:{}", JSON.toJSONString(dto));
+        String taskId = StringUtils.isNotEmpty(dto.getTaskId()) ? dto.getTaskId() : snowflake.nextId() + "";
+        OrderOperation.Builder operationBuilder = OrderOperation.newBuilder();
+        operationBuilder.setOrderId(dto.getOrderId().toString());
+        operationBuilder.setTaskId(taskId);
+        if (dto.getOperation_type() != null) {
+            operationBuilder.setOperationType(OrderOperationType.forNumber(dto.getOperation_type().getNumber()));
+        }
+        Waypoint.Builder waypointBuilder = Waypoint.newBuilder();
+        waypointBuilder.setWaypointId(dto.getOrderId() + "-002");
+        waypointBuilder.setPointType(PointType.END_POINT);
+        waypointBuilder.setActionType(ActionType.DROP_OFF);
+        waypointBuilder.setSequence(2);
+        GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder();
+        geoPointBuilder.setLatitude(dto.getStartLatitude());
+        geoPointBuilder.setLongitude(dto.getStartLongitude());
+        waypointBuilder.setPoint(geoPointBuilder.build());
+        waypointBuilder.setPoiName(dto.getEndPoiName());
+        operationBuilder.setTargetPoint(waypointBuilder);
+        long sequence = snowflake.nextId();
+        MqttPublishDto mqttPublishDto = xpuUtil.cloudOrderOperation(operationBuilder.build(), dto.getVin(), sequence);
+
+        if (mqttPublishDto.getCode() == 200) {
+            if(!dto.getOrderId().contains("XU")){
+                Map<String, Object> cancelContext = new HashMap<>();
+                cancelContext.put("orderId", dto.getOrderId());
+                cancelContext.put("vin", dto.getVin());
+                cancelContext.put("cancelScene", StringUtils.isNotEmpty(dto.getCancelScene())
+                        ? dto.getCancelScene()
+                        : CancelOrderSceneEnum.NORMAL_CANCEL.getCode());
+                redisService.setCacheObject("CANCEL_ORDER_CONTEXT:" + taskId,
+                        JSONObject.toJSONString(cancelContext), 30L, TimeUnit.MINUTES);
+                log.info("记录修改目的地订单上下文成功,orderId: {}, vin: {}, taskId: {}, cancelScene: {}",
+                        dto.getOrderId(), dto.getVin(), taskId, cancelContext.get("cancelScene"));
+            }
+            return R.ok(true);
+        }
+
+        return R.ok(false);
+    }
 
 
 

--
Gitblit v1.7.1