From 07b823813e0f41c49f3468f1d2fa86b82b46689e Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 13 五月 2026 09:18:00 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java |   61 ++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 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 23ae882..d18f2d8 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
@@ -39,6 +39,7 @@
 import com.xiaopeng.common.core.constant.CacheConstants;
 import com.xiaopeng.common.core.constant.HttpStatus;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.enums.OrderStatusEnum;
 import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.DateUtils;
 import com.xiaopeng.common.core.utils.GeodesyUtil;
@@ -690,6 +691,66 @@
         endTrip(order.getId());
     }
 
+
+
+    public void carAbnormalUpdateOrderStatus(Long orderId) {
+        XpTestOrder order = this.getById(orderId);
+        XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData();
+        order.setStatus(7);
+        order.setGetoffTime(LocalDateTime.now());
+        // 解析下车地点
+        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
+        if(Objects.nonNull(vehiclePosition)){
+            GeoJsonPoint point = vehiclePosition.getPoint();
+            if(Objects.nonNull(point)){
+                double x = point.getX();
+                double y = point.getY();
+                Map<String, String> geocode = gdMapGeocodingUtil.geocode(String.valueOf(x), String.valueOf(y));
+                order.setGetoffAddress(geocode.get("address"));
+            }
+        }
+        //计算行驶总距离和时长
+        List<OrderTrajectory> orderTrajectoryList = mongoTemplate.find(new Query().addCriteria(Criteria.where("orderId").is(order.getId())), OrderTrajectory.class);
+        Double reduce = orderTrajectoryList.stream().map(OrderTrajectory::getDistance).reduce(0.0, Double::sum);
+        order.setMileageKilometers(new BigDecimal(reduce).divide(new BigDecimal(1000)).setScale(4, RoundingMode.HALF_EVEN).doubleValue());
+        long duration = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) - order.getTripBegin().toEpochSecond(ZoneOffset.of("+8"));
+        order.setDuration(new BigDecimal(duration).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
+        order.setStartTestPointId(null);
+        this.updateById(order);
+        redisService.setCacheObject("TEST_ORDER_STATUS:" + order.getId(), 7, 24L, TimeUnit.HOURS);
+
+        //给XPU推送订单取消的报文
+        PushOrderDto pushOrderDto = new PushOrderDto();
+        pushOrderDto.setOrderId("TEST" + order.getId().toString());
+        pushOrderDto.setVin(xpVehicle.getVehicleVin());
+        pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER);
+        orderMissionClient.cancelOrder(pushOrderDto);
+
+        //结束行程,修改状态和计算费用
+        endTrip(order.getId());
+
+        //将支付金额修改成0 并将状态修改成 订单状态9
+        setFree(order.getId());
+    }
+
+
+
+    /**
+     * 豁免
+     */
+    public void setFree(Long id) {
+
+        //将支付金额修改成0 并将状态修改成 订单状态9
+        XpTestOrder xpOrder1 = new XpTestOrder();
+        xpOrder1.setId(id);
+        xpOrder1.setIsFree(true);//豁免
+        xpOrder1.setPayMoney(BigDecimal.ZERO);
+        xpOrder1.setStatus(OrderStatusEnum.PENDING_PAYMENT.getCode());
+        xpOrder1.setUpdateTime(LocalDateTime.now());
+        baseMapper.updateById(xpOrder1);
+    }
+
+
     /**
      * 改派订单
      */

--
Gitblit v1.7.1