puzhibing
2026-03-11 124045dda668eeaa2b7a0648776d9b7b7a12ca06
Merge remote-tracking branch 'origin/master'
8个文件已修改
94 ■■■■■ 已修改文件
xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/exception/ServiceException.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/XpPricingController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/utils/XpPricingUtil.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderDetailVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/exception/ServiceException.java
@@ -67,10 +67,11 @@
        this.message = message;
    }
    public ServiceException(String message, Integer code)
    public ServiceException(String message, Integer code,String messageKey)
    {
        this.message = message;
        this.code = code;
        this.messageKey = messageKey;
    }
    public ServiceException(String message, String messageKey, Object[] args)
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/XpPricingController.java
@@ -93,9 +93,21 @@
    @PostMapping("/base/v1/mini-program/order/save")
    @ApiOperation(value = "保存订单", tags = {"小程序-保存订单"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<SaveOrderVo> saveOrder(@RequestBody @Validated XpOrderDto dto, HttpServletRequest request) {
    public R<?> saveOrder(@RequestBody @Validated XpOrderDto dto, HttpServletRequest request) {
        String uid = request.getHeader("XP-Uid");
        String orderId = xpPricingService.saveOrder(dto, uid);
        if(orderId==null){
            String language = request.getHeader("language");
            if(language==null){
                return R.ok("站点已停止运营");
            }
            if("1".equals( language)){
                return R.ok("站点已停止运营");
            }
            if("2".equals( language)){
                return R.ok("This site has ceased operations");
            }
        }
        SaveOrderVo saveOrderVo = new SaveOrderVo();
        saveOrderVo.setOrderId(orderId);
        return R.ok(saveOrderVo);
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -467,14 +467,15 @@
        // 获取起点经纬度
        XpPoint xpPoint = xpPointService.getById(dto.getStartPointId());
        if(xpPoint.getOperationStatus()!=2){
            throw new ServiceException("该站点已停止运营", I18nKeyConstant.NO_CURRENT_POINT);
        if(xpPoint ==null || xpPoint.getOperationStatus()!=2){
            return null;
        }
        // 终点
        XpPoint endXpPoint = xpPointService.getById(dto.getEndPointId());
        if(endXpPoint.getOperationStatus()!=2){
            throw new ServiceException("该站点已停止运营", I18nKeyConstant.NO_CURRENT_POINT);
        if(endXpPoint ==null || endXpPoint.getOperationStatus()!=2){
//            throw new ServiceException("该站点已停止运营", 200,I18nKeyConstant.NO_CURRENT_POINT);
            return null;
        }
        // 判断点位是否在运营区域内
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/utils/XpPricingUtil.java
@@ -312,6 +312,7 @@
        } else {
            // 夜间
            if (date.getTime() > calendarNight.getTimeInMillis() && date.getTime() < calendar.getTimeInMillis()) {
                if (realDistance > rule.getDouble("num6") && realDistance < rule.getDouble("num7")) {
                    longDistanceOne = rule.getDouble("num18") * (realDistance - rule.getDouble("num6"));
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -314,7 +314,6 @@
    public R<OrderDetailVo> orderDetail(@PathVariable("orderId") Long orderId, HttpServletRequest request) {
        // uid已通过拦截器otp校验,可以直接使用
        String uid = request.getHeader("XP-Uid");
        ;
        return R.ok(xpOrderService.orderDetail(orderId,uid));
    }
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java
@@ -133,6 +133,9 @@
    @ApiModelProperty(value = "车辆型号")
    private String vehicleModel;
    @ApiModelProperty(value = "车辆图片")
    private String vehiclePictures;
    // ========== 车队信息 ==========
    @ApiModelProperty(value = "车队id")
    private Long fleetId;
@@ -140,6 +143,8 @@
    @ApiModelProperty(value = "车队名称")
    private String fleetName;
    // ========== 费用信息 ==========
    @ApiModelProperty(value = "订单金额")
    private BigDecimal orderMoney;
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -412,6 +412,7 @@
        wrapper.orderByDesc(XpOrder::getCreateTime);
        return wrapper;
    }
    private LambdaQueryWrapper<XpOrder> buildExcelQueryWrapper(XpOrderExcelQuery query) {
        LambdaQueryWrapper<XpOrder> wrapper = new LambdaQueryWrapper<>();
@@ -548,7 +549,7 @@
        vo.setStatus(order.getStatus());
        // 用户信息
        if (Objects.nonNull(order.getAppUserId()) && userInfoMap !=null && userInfoMap.containsKey(order.getAppUserId().toString())) {
        if (Objects.nonNull(order.getAppUserId()) && userInfoMap != null && userInfoMap.containsKey(order.getAppUserId().toString())) {
            UcUserInfo userInfo = userInfoMap.get(order.getAppUserId().toString());
            vo.setNickName(userInfo.getNickName());
            vo.setPhoneNumber(userInfo.getMobile());
@@ -574,15 +575,15 @@
     * 取消订单
     */
    private void cancelOrder(XpOrder order) {
        redisService.removeByPattern(order.getQueueName(),order.getOrderNumber());
        redisService.removeByPattern(order.getQueueName(), order.getOrderNumber());
        //判断还原车辆状态
        if(null == order.getVehicleId()){
        if (null == order.getVehicleId()) {
            Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString());
            if(null != cacheObject1){
            if (null != cacheObject1) {
                com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString());
                String vin = jsonObject.getString("vin");
                XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
                if(null != vehicle && 0 != vehicle.getState()){
                if (null != vehicle && 0 != vehicle.getState()) {
                    vehicle.setState(0);
                    xpVehicleClient.updateVehicleById(vehicle);
                }
@@ -625,7 +626,7 @@
            }
            //还原车辆状态
            if(1 == xpVehicle.getState()){
            if (1 == xpVehicle.getState()) {
                xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0));
            }
@@ -1086,7 +1087,7 @@
    @Transactional
    public void cancelOrder(Long orderId, String uid) {
        XpOrder order = this.getById(orderId);
        if(order.getStatus()==0){
        if (order.getStatus() == 0) {
            return;
        }
        if (order == null) {
@@ -1100,17 +1101,17 @@
        }
        try {
            redisService.removeByPattern(order.getQueueName(),order.getOrderNumber());
        }catch (Exception e){
            redisService.removeByPattern(order.getQueueName(), order.getOrderNumber());
        } catch (Exception e) {
        }
        //判断还原车辆状态
        if(null == order.getVehicleId()){
        if (null == order.getVehicleId()) {
            Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString());
            if(null != cacheObject1){
            if (null != cacheObject1) {
                com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString());
                String vin = jsonObject.getString("vin");
                XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
                if(null != vehicle && 0 != vehicle.getState()){
                if (null != vehicle && 0 != vehicle.getState()) {
                    vehicle.setState(0);
                    xpVehicleClient.updateVehicleById(vehicle);
                }
@@ -1123,7 +1124,7 @@
            baseMapper.updateById(order);
            return;
        }
        if(order.getStatus()==1){
        if (order.getStatus() == 1) {
            order.setStatus(0);
            baseMapper.updateById(order);
            return;
@@ -1158,7 +1159,7 @@
        xpOrderCancel.setCancelReason("用户取消订单");
        xpOrderCancelService.save(xpOrderCancel);
        //还原车辆状态
        if(1 == xpVehicle.getState()){
        if (1 == xpVehicle.getState()) {
            xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0));
        }
@@ -1218,7 +1219,7 @@
        xpOrderCancel.setCreateTime(LocalDateTime.now());
        xpOrderCancelService.save(xpOrderCancel);
        redisService.removeByPattern(order.getQueueName(),order.getOrderNumber());
        redisService.removeByPattern(order.getQueueName(), order.getOrderNumber());
        R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(order.getVehicleId());
@@ -1373,6 +1374,11 @@
        order.setStatus(8);
        order.setAppUserId(null);
        order.setTripEnd(LocalDateTime.now());
        long minutes = Duration.between(order.getBoardingTime(), order.getTripEnd()).toMinutes();
        order.setDuration((double) minutes);
//        order.setMileageKilometers(80.0);
        baseMapper.updateById(order);
        // 解绑用户与车辆关系
@@ -1736,13 +1742,13 @@
            return;
        }
        if(vehicle.getState()!=0 || vehicle.getOperatingStatus()!=1){
        if (vehicle.getState() != 0 || vehicle.getOperatingStatus() != 1) {
            return;
        }
        // 判断是否有计划
        R<XpCruisePlanVehicle> xpCruisePlanR = xpCruisePlanClient.getCruisePlan(vehicle.getId());
        if(xpCruisePlanR==null || xpCruisePlanR.getData()==null){
        if (xpCruisePlanR == null || xpCruisePlanR.getData() == null) {
            return;
        }
@@ -2201,17 +2207,16 @@
                OrderTrajectory.class
        );
        orderDetailVo.setTrajectories(trajectories);
        if (order.getTripBegin() != null && order.getTripEnd() != null) {
        if (order.getBoardingTime() != null && order.getTripEnd() != null) {
            // 计算两个时间相差多少分钟
            long minutesDifference = Duration.between(order.getTripBegin(), order.getTripEnd()).toMinutes();
            orderDetailVo.setOrderTime(minutesDifference);
            double exactMinutes = Duration.between(order.getBoardingTime(), order.getTripEnd()).toMillis() / (1000.0 * 60);
            exactMinutes = new BigDecimal(exactMinutes).setScale(2, RoundingMode.HALF_UP).doubleValue();
            orderDetailVo.setOrderTime(exactMinutes);
        } else {
            orderDetailVo.setOrderTime(0l);
            orderDetailVo.setOrderTime(0.0);
        }
        if (order.getStartMileage() != null) {
            orderDetailVo.setTotalMileage(order.getStartMileage() + (order.getMileageKilometers() != null ? order.getMileageKilometers() : 0D));
        orderDetailVo.setTotalMileage(order.getMileageKilometers() != null ? new BigDecimal(order.getMileageKilometers()).setScale(2, RoundingMode.HALF_UP).doubleValue() : 0D);
        }
        return orderDetailVo;
    }
@@ -2271,7 +2276,7 @@
                // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
                try {
                    redisService.popFirstElement(order.getQueueName());
                }catch (Exception e){
                } catch (Exception e) {
                    log.error("Redis弹出队列元素出错");
                }
                XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
@@ -2384,7 +2389,9 @@
        if (xpOrder.getVehicleId() != null) {
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            xpOrderDetailVO.setPlateNumber(xpVehicleR.getData().getPlateNumber());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
            xpOrderDetailVO.setVehiclePictures(vehicle.getVehiclePictures());
        }
        return xpOrderDetailVO;
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderDetailVo.java
@@ -29,7 +29,7 @@
    @ApiModelProperty(value = "评分")
    private Integer orderRating;
    @ApiModelProperty(value = "时长分钟")
    private Long orderTime;
    private Double orderTime;
    @ApiModelProperty(value = "总里程")
    private Double totalMileage;
    @ApiModelProperty(value = "轨迹")