From 9adef3dd7723930d44f72713c3cf28e50b002055 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 01 四月 2026 15:45:19 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java |   37 +++++++++++++++++++++++++++----------
 1 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java
index 7cf9015..1b41300 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java
@@ -264,7 +264,7 @@
             xpOrder.setVehicleId(vehicleId);
             xpOrder.setFleetId(xpVehicle.getFleetId());
             this.save(xpOrder);
-            redisService.setCacheObject("ORDER_STATUS:" + xpOrder.getId(), 1, 24L, TimeUnit.HOURS);
+            redisService.setCacheObject("TEST_ORDER_STATUS:" + xpOrder.getId(), 1, 24L, TimeUnit.HOURS);
             //缓存导航数据,用于下单后推送导航给车端和乘客端
             redisService.setCacheObject("TEST_ORDER_NAVIGATION_END_DATA:" + vehicleId, JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
             //下发XPU消息
@@ -590,7 +590,6 @@
      * 取消订单
      */
     private void cancelOrder(XpTestOrder order) {
-        redisService.removeByPattern(order.getQueueName(), order.getOrderNumber());
         //判断还原车辆状态
         if (null == order.getVehicleId()) {
             Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString());
@@ -671,7 +670,7 @@
         order.setDuration(new BigDecimal(duration).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
         order.setStartTestPointId(null);
         this.updateById(order);
-        redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 7, 24L, TimeUnit.HOURS);
+        redisService.setCacheObject("TEST_ORDER_STATUS:" + order.getId(), 7, 24L, TimeUnit.HOURS);
 
         //给XPU推送订单取消的报文
         PushOrderDto pushOrderDto = new PushOrderDto();
@@ -720,9 +719,9 @@
         // 运营状态:1=运营中 2=维修中 3=已收车 4=车辆异常
         // 当前模式:1=接单 2=测试
         // 模式状态:1=开始接单/开始测试 2=停止接单/停止测试
-        if (Objects.isNull(newVehicle.getStatus()) || newVehicle.getStatus() == 3) {
-            throw new ServiceException("新车辆保险或年检已过期,无法接单", I18nKeyConstant.ORDER_REASSIGN_NEW_VEHICLE_STATUS_INVALID);
-        }
+//        if (Objects.isNull(newVehicle.getStatus()) || newVehicle.getStatus() == 3) {
+//            throw new ServiceException("新车辆保险或年检已过期,无法接单", I18nKeyConstant.ORDER_REASSIGN_NEW_VEHICLE_STATUS_INVALID);
+//        }
         if (Objects.isNull(newVehicle.getOperatingStatus()) || newVehicle.getOperatingStatus() != 1) {
             throw new ServiceException("新车辆运营状态异常,无法接单", I18nKeyConstant.ORDER_REASSIGN_NEW_VEHICLE_OPERATING_STATUS_INVALID);
         }
@@ -911,6 +910,7 @@
                 case 6:
                     // 行程开始时间
                     xpOrder.setTripBegin(LocalDateTime.now());
+                    redisService.deleteObject("TEST_ORDER_NAVIGATION_START_DATA:" + xpOrder.getVehicleId());
                     break;
                 case 7:
                     xpOrder.setGetoffTime(LocalDateTime.now());
@@ -931,19 +931,36 @@
                     xpOrder.setMileageKilometers(new BigDecimal(reduce).divide(new BigDecimal(1000)).setScale(4, RoundingMode.HALF_EVEN).doubleValue());
                     long duration = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) - xpOrder.getTripBegin().toEpochSecond(ZoneOffset.of("+8"));
                     xpOrder.setDuration(new BigDecimal(duration).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
+
+                    //创建定时结束订单和等待结束后下发巡游单的定时任务
+                    Integer arriveTime = xpSystemSettingClient.getOrderFinishTime().getData();
+                    // 添加自动结束行程定时任务job
+                    Map<String, ? extends Object> endTripJobMaps =
+                            new ImmutableMap.Builder<String, String>()
+                                    .put("id", xpOrder.getId().toString())
+                                    .put("orderType", OrderType.TEST_ORDER)
+                                    .build();
+                    QuartzManager.addJob(
+                            EndTripJob.class,
+                            (EndTripJob.name + xpOrder.getId()).toUpperCase(),
+                            TimeJobType.END_TRIP,
+                            DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(arriveTime)),
+                            endTripJobMaps
+                    );
                     break;
             }
 
             xpOrder.setStatus(status);
             xpOrder.setStartTestPointId(null);
             this.updateById(xpOrder);
-            redisService.setCacheObject("ORDER_STATUS:" + xpOrder.getId(), status, 24L, TimeUnit.HOURS);
+            redisService.setCacheObject("TEST_ORDER_STATUS:" + xpOrder.getId(), status, 24L, TimeUnit.HOURS);
         }else{
+            //测试巡游单,只需要修改状态
             if(status == 10){
                 xpOrder.setStatus(status);
                 xpOrder.setStartTestPointId(null);
                 this.updateById(xpOrder);
-                redisService.setCacheObject("ORDER_STATUS:" + xpOrder.getId(), status, 24L, TimeUnit.HOURS);
+                redisService.setCacheObject("TEST_ORDER_STATUS:" + xpOrder.getId(), status, 24L, TimeUnit.HOURS);
             }
         }
         return R.ok();
@@ -972,7 +989,7 @@
         order.setStartTestPointId(null);
         order.setTripEnd(LocalDateTime.now());
         baseMapper.updateById(order);
-        redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 8, 24L, TimeUnit.HOURS);
+        redisService.setCacheObject("TEST_ORDER_STATUS:" + order.getId(), 8, 24L, TimeUnit.HOURS);
 
         // 根据订单所属开通城市id 查询定价
         R<XpPricing> pricingByCityId = xpPricingClient.getPricingByCid(order.getCityId());
@@ -1340,7 +1357,7 @@
     @Override
     public void saveVehicleLocation(OrderTrajectory orderTrajectory) {
         // 查询订单信息
-        Integer status = redisService.getCacheObject("ORDER_STATUS:" + orderTrajectory.getOrderId());
+        Integer status = redisService.getCacheObject("TEST_ORDER_STATUS:" + orderTrajectory.getOrderId());
         if(status < 6 || status > 8){
             return;
         }

--
Gitblit v1.7.1