zjk
2026-04-16 37c5a4bb649bdebe05193a91d86610f6b20ec7ab
1.行程分享功能开发
2个文件已添加
5个文件已修改
240 ■■■■■ 已修改文件
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/ActiveOrderController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/XpPricingController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/ActiveOrderServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/ActiveOrderController.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/ActiveOrderController.java
New file
@@ -0,0 +1,53 @@
package com.xiaopeng.itinerary.controller;
import com.xiaopeng.api.dto.order.OrderChangeDto;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.itinerary.service.ActiveOrderService;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
 * <p>
 * 订单行程
 * </p>
 */
@Slf4j
@RestController
@RequestMapping("")
@Api(tags = "费用管理")
public class ActiveOrderController {
    @Resource
    private ActiveOrderService activeOrderService;
    /**
     * 行程中 修改目的地 确认按钮
     * 修改目的地,
     * 1.重新确认路线
     * 2.确认价格
     */
    @ApiOperation(value = "行程中 修改目的地 确认按钮", notes = "", tags = {"小程序-行程中修改目的地"})
    @PostMapping("/api/v1/mini-program/order/orderChange")
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<?> orderChange(@RequestBody @Validated OrderChangeDto dto, HttpServletRequest request) {
        String uid = request.getHeader("XP-Uid");
        activeOrderService.orderChange(dto, uid);
        return R.ok();
    }
}
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/XpPricingController.java
@@ -57,8 +57,6 @@
    private final IXpGeoQueryEntityService xpGeoQueryEntityService;
    private final RedisService redisService;
    private final ImageTagProcessor imageTagProcessor;
    @Resource
    private ActiveOrderService activeOrderService;
    public XpPricingController(XpPricingService xpPricingService, IXpGeoQueryEntityService xpGeoQueryEntityService, RedisService redisService, ImageTagProcessor imageTagProcessor) {
@@ -143,21 +141,6 @@
    }
    /**
     * 行程中 修改目的地 确认按钮
     * 修改目的地,
     * 1.重新确认路线
     * 2.确认价格
     */
    @ApiOperation(value = "行程中 修改目的地 确认按钮", notes = "", tags = {"小程序-行程中修改目的地"})
    @PostMapping("/api/v1/mini-program/order/orderChange")
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<?> orderChange(@RequestBody @Validated OrderChangeDto dto, HttpServletRequest request) {
        String uid = request.getHeader("XP-Uid");
        activeOrderService.orderChange(dto, uid);
        return R.ok();
    }
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/ActiveOrderServiceImpl.java
@@ -125,14 +125,14 @@
            log.info("当前区域暂未开通,下单失败 {}", uid);
            throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
        }
        boolean inTime = xpPointClient.nowInTimePoint(dto.getEndPointId()).getData();
        if (!inTime) {
            throw new ServiceException("终点点位未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
        }
        // 终点
        XpPoint endXpPoint = xpPointService.getById(dto.getEndPointId());
        if(endXpPoint ==null || endXpPoint.getOperationStatus()!=2){
            throw new ServiceException("该站点已停止运营", 200,I18nKeyConstant.NO_CURRENT_POINT);
        }
        boolean inTime = xpPointClient.nowInTimePoint(dto.getEndPointId()).getData();
        if (!inTime) {
            throw new ServiceException("当前点位未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
        }
        //修改订单数据
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/ActiveOrderController.java
New file
@@ -0,0 +1,146 @@
package com.xiaopeng.order.controller;
import com.xiaopeng.api.dto.QueryOrderRouteDTO;
import com.xiaopeng.api.feignClient.operation.XpPointClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.operation.XpPoint;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.order.model.vo.XpOrderDetailVO;
import com.xiaopeng.order.service.IXpOrderService;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.time.Duration;
import java.time.LocalDateTime;
@RestController
@Api(tags = "订单")
@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class ActiveOrderController {
    @Autowired
    private MongoTemplate mongoTemplate;
    @Resource
    XpOrderController xpOrderController;
    @Resource
    private final IXpOrderService xpOrderService;
    @Resource
    private final XpPointClient xpPointClient;
    @Resource
    private final XpVehicleClient xpVehicleClient;
    @Nullable
    private R<XpOrder> getOrderTripEnd(String orderId) {
        XpOrder xpOrder = xpOrderService.getById(orderId);
        if(xpOrder == null){
            return R.fail("订单不存在");
        }
        if(xpOrder.getTripEnd() != null){
            Duration duration = Duration.between(xpOrder.getTripEnd(), LocalDateTime.now());
            if(duration.toHours()>=24){
                return R.fail("行程结束已超过24小时查看行程信息,请联系客服");
            }
        }
        return R.ok(xpOrder);
    }
    /**
     * 分享行程接口1-订单查询实时轨迹路线
     */
    @ApiOperation(value = "分享行程接口1 订单查询实时轨迹路线")
    @GetMapping("/base/v1/mini-program/orderActive/share/queryOrderRoute")
    @XpClientCheck(checkToken = false, checkOtpToken = false)
    public R<RouteVo> queryOrderRoute(@RequestParam String orderId, HttpServletRequest request) {
        // 查询订单信息
        if(StringUtils.isBlank(orderId) ){
            return R.fail("参数不能为空");
        }
        R r = getOrderTripEnd(orderId);
        if (r != null && r.getCode() != 200) {
            return r;
        }
        QueryOrderRouteDTO dto = new QueryOrderRouteDTO();
        return xpOrderController.queryOrderRoute(dto,request);
    }
    /**
     * 分享行程接口2-订单查询轨迹路线
     */
    @ApiOperation(value = "分享行程接口2-订单查询轨迹路线")
    @GetMapping("/base/v1/mini-program/orderActive/share/queryOrderTrajectory")
    @XpClientCheck(checkToken = false, checkOtpToken = false)
    public R<RouteVo> queryOrderTrajectory(@RequestParam String orderId,HttpServletRequest request) {
        if(StringUtils.isBlank(orderId) ){
            return R.fail("参数不能为空");
        }
        R r = getOrderTripEnd(orderId);
        if (r != null && r.getCode() != 200) {
            return r;
        }
        return xpOrderController.queryOrderTrajectory(orderId,request);
    }
    /**
     * 分享行程接口3-订单信息
     */
    @ApiOperation(value = "分享行程接口3-订单查询实时轨迹路线")
    @GetMapping("/base/v1/mini-program/orderActive/share/orderInfo")
    @XpClientCheck(checkToken = false, checkOtpToken = false)
    public R<XpOrderDetailVO> shareOrderInfo(@RequestParam String orderId, HttpServletRequest request) {
        // 查询订单信息
        if(orderId == null){
            return R.fail("参数不能为空");
        }
        R<XpOrder> r = getOrderTripEnd(orderId);
        if (r != null && r.getCode() != 200) {
            return R.fail(r.getMsg());
        }
        XpOrder xpOrder = r.getData();
        XpOrderDetailVO xpOrderDetailVO = new XpOrderDetailVO();
        BeanUtils.copyProperties(xpOrder, xpOrderDetailVO);
        R<XpPoint> xpPointR = xpPointClient.queryById(xpOrder.getStartPointId());
        if (xpPointR.getCode() == R.SUCCESS) {
            XpPoint startPoint = xpPointR.getData();
            xpOrderDetailVO.setStartParkingTimeLimit(startPoint.getParkingTimeLimit());
        }
        R<XpPoint> xpPointR1 = xpPointClient.queryById(xpOrder.getEndPointId());
        if (xpPointR1.getCode() == R.SUCCESS) {
            XpPoint endPoint = xpPointR1.getData();
            xpOrderDetailVO.setEndParkingTimeLimit(endPoint.getParkingTimeLimit());
        }
        if (xpOrder.getVehicleId() != null) {
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleId(vehicle.getId());
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
            xpOrderDetailVO.setVehiclePictures(vehicle.getVehiclePictures());
        }
        return R.ok(xpOrderDetailVO);
    }
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -566,6 +566,9 @@
    @PostMapping("/api/v1/mini-program/order/queryOrderRoute")
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<RouteVo> queryOrderRoute(@Validated @RequestBody QueryOrderRouteDTO dto, HttpServletRequest request) {
        if(dto.getOrderId() == null){
            return R.fail("参数不能为空");
        }
        String uid = request.getHeader("XP-Uid");
        // 查询订单信息
        XpOrder xpOrder = xpOrderService.getById(dto.getOrderId());
@@ -595,7 +598,9 @@
    @GetMapping("/api/v1/mini-program/order/queryOrderTrajectory")
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<RouteVo> queryOrderTrajectory(@RequestParam String orderId, HttpServletRequest request) {
        String uid = request.getHeader("XP-Uid");
        if(orderId == null){
            return R.fail("参数不能为空");
        }
        List<OrderTrajectory> trajectories = mongoTemplate.find(
                new Query(Criteria.where("orderId").is(Long.valueOf(orderId)))
                        .with(Sort.by(Sort.Direction.ASC, "locatetime")),
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java
@@ -135,6 +135,8 @@
    @ApiModelProperty(value = "车辆vin码")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -3467,6 +3467,8 @@
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
            xpOrderDetailVO.setVehiclePictures(vehicle.getVehiclePictures());
        }
@@ -3493,6 +3495,11 @@
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
            xpOrderDetailVO.setVehiclePictures(vehicle.getVehiclePictures());
        }
        Boolean cancelShow = isCancelShow(xpOrder,xpOrderDetailVO.getVehicleVin()); //是否能取消行程
        xpOrderDetailVO.setCancelShow(cancelShow);