puzhibing
9 小时以前 8ea02ca30907216aece38fda1ba918e5a5246abe
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2852,7 +2852,14 @@
                .eq(TChargingOrder::getDelFlag, 0)
                .orderByDesc(TChargingOrder::getCreateTime)
                .last(" limit 0, 1"));
        if (null == one || !one.getAppUserId().equals(userId)) {
        if (null != one && !userId.equals(one.getAppUserId())) {
            one = null;
        }
        // 普通订单在充电中(2=启动中/3=充电中/4=停止中)时直接返回,保持原快路径不变;
        // 普通订单已结束(5)或不存在时才与 VIN 码订单比较:未结束订单优先,其次取创建时间更近的一笔。
        // 避免同一把枪先有普通订单完成、随后 VIN 码充电时,充电页被历史完成订单抢占而误入
        // 「充电完成」弹窗,导致用户无法停止充电。
        if (null == one || !isActiveStatus(one.getStatus())) {
            // VIN 码充电订单兜底:VD 订单存于 t_vin_charging_order,且后付模式无支付动作,
            // 不按 rechargePaymentStatus 过滤;TVinChargingOrder 继承 TChargingOrder,后续组装原样复用
            // 状态同样包含已结束(5),保证 VIN 订单结束后前端仍能拿到完成态
@@ -2863,10 +2870,12 @@
                    .eq(TVinChargingOrder::getDelFlag, 0)
                    .orderByDesc(TVinChargingOrder::getCreateTime)
                    .last(" limit 0, 1"));
            if (null == vinOrder) {
                return null;
            if (null != vinOrder && (isActiveStatus(vinOrder.getStatus()) || null == one || isNewerOrder(vinOrder, one))) {
                one = vinOrder;
            }
            one = vinOrder;
        }
        if (null == one) {
            return null;
        }
        ChargingDetails chargingDetails = new ChargingDetails();
        chargingDetails.setId(one.getId().toString());
@@ -2911,6 +2920,18 @@
    }
    /** 订单是否为未结束状态:2=启动中、3=充电中、4=停止中(5=已结束 不算未结束) */
    private boolean isActiveStatus(Integer status) {
        return null != status && status >= 2 && status <= 4;
    }
    /** candidate 订单创建时间是否晚于 current(createTime 缺失时按“不更晚”处理,保持普通订单优先的历史行为) */
    private boolean isNewerOrder(TChargingOrder candidate, TChargingOrder current) {
        return null != candidate.getCreateTime()
                && (null == current.getCreateTime() || candidate.getCreateTime().isAfter(current.getCreateTime()));
    }
    /**
     * 停止充电操作
     *