From 8ea02ca30907216aece38fda1ba918e5a5246abe Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 14 十月 2026 15:00:51 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index eec9c0e..900dda3 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/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()));
+    }
+
+
     /**
      * 停止充电操作
      *

--
Gitblit v1.7.1