liujie
2026-06-09 c96fbe6b0aeb413a17c429133ee6d81d138144b9
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -7,6 +7,7 @@
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.xiaopeng.api.dto.QueryOrderRouteDTO;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.order.GetOrderNumDto;
@@ -16,6 +17,7 @@
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.dto.vehicleConvoy.BleInfoResponseDto;
import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
import com.xiaopeng.api.feignClient.frdXfipEvent.XpFrdXfipEventClient;
import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
import com.xiaopeng.api.feignClient.operation.XpWhiteListClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.BluetoothUnlockClient;
@@ -24,6 +26,7 @@
import com.xiaopeng.api.model.operation.XpOfficialPartner;
import com.xiaopeng.api.model.operation.XpSystemSetting;
import com.xiaopeng.api.model.operation.XpWhitelist;
import com.xiaopeng.api.model.order.OrderTrajectory;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.account.LoginUser;
@@ -47,6 +50,7 @@
import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.order.config.BluetoothDebugConfig;
import com.xiaopeng.order.dto.OrderNavigationDto;
import com.xiaopeng.order.model.dto.*;
import com.xiaopeng.api.model.order.OrderTrajectory;
import com.xiaopeng.order.mangodb.service.OrderTrajectoryService;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
@@ -57,6 +61,7 @@
import com.xiaopeng.order.model.query.XpHistoryOrderListQuery;
import com.xiaopeng.order.model.query.XpOrderExcelQuery;
import com.xiaopeng.order.model.query.XpOrderPageQuery;
import com.xiaopeng.order.model.vo.CreditPayCallVo;
import com.xiaopeng.order.model.vo.XpOrderDetailVO;
import com.xiaopeng.order.model.vo.XpOrderHistoryVO;
import com.xiaopeng.order.model.vo.XpOrderPageVO;
@@ -94,6 +99,9 @@
import java.util.*;
import java.util.stream.Collectors;
import static org.bouncycastle.asn1.x500.style.RFC4519Style.o;
import static org.bouncycastle.asn1.x500.style.RFC4519Style.uid;
/**
 * <p>
 * 订单 前端控制器
@@ -116,8 +124,6 @@
    @Resource
    private  VehicleMacClient vehicleMacClient;
    @Resource
    private SysGroupMenuClient groupMenuClient;
    @Resource
    private XpWhiteListClient xpWhiteListClient;
@@ -164,6 +170,23 @@
        }
        return R.ok(0L);
    }
    /**
     * 查询是否有未支付订单
     * 返回0 可以下单,非0为未支付订单ID
     */
    @PostMapping("/logan/inner/order/has-unpay-order")
    @ApiOperation(value = "查询是否有未支付订单", tags = {"内部接口"})
    public R<Long> hasUnPayOrder(String uid) {
        XpOrder order = xpOrderService.getOne(new LambdaQueryWrapper<XpOrder>()
                .eq(XpOrder::getAppUserId, Long.parseLong(uid))
                .eq(XpOrder::getStatus, 8)
                .last("LIMIT 1"));
        if (order != null) {
            return R.ok(order.getId());
        }
        return R.ok(0L);
    }
    /**
@@ -578,6 +601,7 @@
                xpOrder1.setStatus(OrderStatusEnum.PENDING_PAYMENT.getCode());
                xpOrder1.setUpdateTime(LocalDateTime.now());
                xpOrderService.updateById(xpOrder1);
                xpOrder1.setAppUserId(Long.parseLong(uid));
                bootCommonService.setCache_orderStatus(xpOrder1.getId(), xpOrder1, null);
            }
            return R.ok(b);
@@ -586,6 +610,36 @@
            return R.ok();
        }
    }
    @PutMapping("/base/v1/order/testEndTrip/{orderId}")
    @ApiOperation(value = "结束行程", tags = {"小程序-结束行程"})
    public R<?> testEndTrip(@PathVariable("orderId") Long orderId, HttpServletRequest request) {
        XpOrder xpOrder = xpOrderService.getById(orderId);
        try {
            Boolean b = xpOrderService.endTrip(orderId, xpOrder.getAppUserId().toString());
            //判断是否测试免费
            XpSystemSetting xpSystemSetting = xpSystemSettingClient.getSystemSettingOne().getData();
            if (xpSystemSetting != null && xpSystemSetting.getOperateFree() == 1) {
                //将支付金额修改成0 并将状态修改成 订单状态9
                XpOrder xpOrder1 = new XpOrder();
                xpOrder1.setId(orderId);
                xpOrder1.setIsFree(true);//豁免
                xpOrder1.setPayMoney(BigDecimal.ZERO);
                xpOrder1.setStatus(OrderStatusEnum.PENDING_PAYMENT.getCode());
                xpOrder1.setUpdateTime(LocalDateTime.now());
                xpOrderService.updateById(xpOrder1);
                xpOrder1.setAppUserId(xpOrder.getAppUserId());
                bootCommonService.setCache_orderStatus(xpOrder1.getId(), xpOrder1, null);
            }
            return R.ok(b);
        } catch (Exception e) {
            return R.ok();
        }
    }
    /**
@@ -991,22 +1045,80 @@
    @GetMapping("/api/v1/mini-program/order/queryOrderStatusFromOrderId")
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<OrderStatusFromOrderIdVo> queryOrderStatusFromOrderId(Long orderId) {
        XpOrder order = xpOrderService.getById(orderId);
        OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo();
        orderStatusFromOrderIdVo.setOrderId(order.getId());
        orderStatusFromOrderIdVo.setStatus(order.getStatus());
        return R.ok(orderStatusFromOrderIdVo);
        return R.ok(xpOrderService.queryOrderStatusFromOrderId(orderId));
    }
    /**
     * 查询是否有未支付订单
     * 将订单推单状态还原重新推单
     * @param orderId
     * @return
     */
    @PostMapping("/logan/inner/order/has-unpay-order")
    public R<Long> hasUnPayOrder(@RequestParam String uid){
        long count = xpOrderService.count(new QueryWrapper<XpOrder>().eq("app_user_id", Long.valueOf(uid))
                .eq("status", 8).eq("is_deleted", 0));
        return R.ok(count);
    @PostMapping("/logan/inner/order/againPushOrder")
    public R<?> againPushOrder(@RequestParam("orderId") String orderId){
        XpOrder xpOrder = xpOrderService.getById(orderId);
        String firstElement = redisService.getFirstElement(xpOrder.getQueueName());
        String[] split = firstElement.split("_");
        if (split[2].equals("1")) {
            String value = split[0] + "_" + split[1] + "_0" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7];
            // 状态改为处理中
            redisService.updateFirst(xpOrder.getQueueName(), value);
        }
        return R.ok();
    }
    /**
     * 信用支付下单回调
     */
    @PostMapping("/base/v1/mini-program/order/creditPayCall")
    @ApiOperation(value = "信用支付下单回调", tags = {"小程序-发起支付"}, response = CreditPayCallVo.class)
    public R<CreditPayCallVo> creditPayCall(@RequestBody CreditPayCallDto dto) {
        CreditPayCallVo vo = new CreditPayCallVo();
        vo.setRetCode("0");
        vo.setRetMsg("成功");
        if (dto == null || (StringUtils.isBlank(dto.getAuthOrderId()) || StringUtils.isBlank(dto.getBusinessOrderId()))) {
            return R.ok(vo);
        }
        LambdaQueryWrapper<XpOrder> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(XpOrder::getAuthOrderId, dto.getAuthOrderId());
        XpOrder order = xpOrderService.getOne(wrapper.last("LIMIT 1"));
        if (order == null) {
            return R.ok(vo);
        }
        if ("SUCCESS".equals(dto.getCreditOrderStatus())) {
            // 发起扣款
            xpOrderService.creditPayCall(order);
        }
        return R.ok(vo);
    }
    /**
     * 信用扣款回调
     */
    @PostMapping("/base/v1/mini-program/order/creditPaySuccessCall")
    @ApiOperation(value = "信用扣款回调", tags = {"小程序-发起支付"}, response = CreditPayCallVo.class)
    public R<CreditPayCallVo> creditPaySuccessCall(@RequestBody CreditPaySuccessCallDto dto) {
        CreditPayCallVo vo = xpOrderService.creditPaySuccessCall(dto);
        return R.ok(vo);
    }
    /**
     * 根据车辆id查询正在服务的订单
     * @param vehicleId
     * @return
     */
    @PostMapping("/logan/inner/order/getOrderByVehicleId")
    public R<XpOrder> getOrderByVehicleId(@RequestParam("vehicleId") String vehicleId){
        XpOrder one = xpOrderService.getOne(new LambdaUpdateWrapper<XpOrder>().eq(XpOrder::getVehicleId, vehicleId)
                .in(XpOrder::getStatus, Arrays.asList(2, 3, 4, 5, 6, 7)));
        return R.ok(one);
    }
}