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/test/java/com/ruoyi/order/service/impl/TChargingOrderServiceImplVinFallbackTest.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/service/impl/TChargingOrderServiceImplVinFallbackTest.java b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/service/impl/TChargingOrderServiceImplVinFallbackTest.java
index 3b32ec4..c498df5 100644
--- a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/service/impl/TChargingOrderServiceImplVinFallbackTest.java
+++ b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/service/impl/TChargingOrderServiceImplVinFallbackTest.java
@@ -47,6 +47,7 @@
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -303,6 +304,106 @@
         assertStatusFilterCoversFinished(captor.getValue());
     }
 
+    @Test
+    void getChargingDetailsPrefersActiveVinOrderOverFinishedNormalOrder() {
+        // 同一把枪:普通订单已完成(5),随后 VIN 码订单充电中(3)。
+        // 充电页必须拿到未结束的 VIN 订单,否则会误入「充电完成」弹窗、用户无法停止充电
+        LoginUserApplet loginUser = new LoginUserApplet();
+        loginUser.setUserId(88L);
+        when(tokenService.getLoginUserApplet()).thenReturn(loginUser);
+        TChargingOrder finishedNormalOrder = new TChargingOrder();
+        finishedNormalOrder.setId(3003L);
+        finishedNormalOrder.setAppUserId(88L);
+        finishedNormalOrder.setChargingGunId(5);
+        finishedNormalOrder.setStatus(5);
+        finishedNormalOrder.setCode("CH20261014001");
+        finishedNormalOrder.setResidualAmount(new BigDecimal("2.06"));
+        finishedNormalOrder.setCreateTime(LocalDateTime.of(2026, 10, 14, 14, 22, 49));
+        when(mapper.selectOne(any())).thenReturn(finishedNormalOrder);
+        TVinChargingOrder activeVinOrder = new TVinChargingOrder();
+        activeVinOrder.setId(2002L);
+        activeVinOrder.setAppUserId(88L);
+        activeVinOrder.setChargingGunId(5);
+        activeVinOrder.setStatus(3);
+        activeVinOrder.setCode("VD20261014002");
+        activeVinOrder.setResidualAmount(new BigDecimal("3.44"));
+        activeVinOrder.setCreateTime(LocalDateTime.of(2026, 10, 14, 14, 38, 30));
+        when(vinChargingOrderMapper.selectOne(any())).thenReturn(activeVinOrder);
+        stubGunPileAndSite();
+        when(uploadRealTimeMonitoringDataService.getLastDataById("VD20261014002")).thenReturn(null);
+
+        ChargingDetails details = service.getChargingDetails(5);
+
+        assertNotNull(details, "普通订单已结束时不应定格完成态,应返回充电中的 VIN 订单");
+        assertEquals("2002", details.getId());
+        assertEquals(Integer.valueOf(3), details.getStatus());
+        assertEquals("VD20261014002", details.getCode());
+        assertEquals(0, new BigDecimal("3.44").compareTo(details.getChargingCost()));
+    }
+
+    @Test
+    void getChargingDetailsKeepsActiveNormalOrderWithoutQueryingVinOrder() {
+        // 普通订单充电中(3)时走原快路径直接返回,不再查询 VIN 订单表
+        LoginUserApplet loginUser = new LoginUserApplet();
+        loginUser.setUserId(88L);
+        when(tokenService.getLoginUserApplet()).thenReturn(loginUser);
+        TChargingOrder activeNormalOrder = new TChargingOrder();
+        activeNormalOrder.setId(3004L);
+        activeNormalOrder.setAppUserId(88L);
+        activeNormalOrder.setChargingGunId(5);
+        activeNormalOrder.setStatus(3);
+        activeNormalOrder.setCode("CH20261014002");
+        activeNormalOrder.setResidualAmount(new BigDecimal("8.80"));
+        activeNormalOrder.setCreateTime(LocalDateTime.of(2026, 10, 14, 15, 0));
+        when(mapper.selectOne(any())).thenReturn(activeNormalOrder);
+        stubGunPileAndSite();
+        when(uploadRealTimeMonitoringDataService.getLastDataById("CH20261014002")).thenReturn(null);
+
+        ChargingDetails details = service.getChargingDetails(5);
+
+        assertNotNull(details);
+        assertEquals("3004", details.getId());
+        assertEquals(Integer.valueOf(3), details.getStatus());
+        assertEquals("CH20261014002", details.getCode());
+        verify(vinChargingOrderMapper, never()).selectOne(any());
+    }
+
+    @Test
+    void getChargingDetailsPrefersNewerFinishedOrderWhenBothFinished() {
+        // 两笔均已结束(5)时取创建时间更近的一笔:VIN 订单结束后完成页应展示 VIN 订单,而非更早的普通订单
+        LoginUserApplet loginUser = new LoginUserApplet();
+        loginUser.setUserId(88L);
+        when(tokenService.getLoginUserApplet()).thenReturn(loginUser);
+        TChargingOrder finishedNormalOrder = new TChargingOrder();
+        finishedNormalOrder.setId(3003L);
+        finishedNormalOrder.setAppUserId(88L);
+        finishedNormalOrder.setChargingGunId(5);
+        finishedNormalOrder.setStatus(5);
+        finishedNormalOrder.setCode("CH20261014001");
+        finishedNormalOrder.setResidualAmount(new BigDecimal("2.06"));
+        finishedNormalOrder.setCreateTime(LocalDateTime.of(2026, 10, 14, 14, 22, 49));
+        when(mapper.selectOne(any())).thenReturn(finishedNormalOrder);
+        TVinChargingOrder finishedVinOrder = new TVinChargingOrder();
+        finishedVinOrder.setId(2003L);
+        finishedVinOrder.setAppUserId(88L);
+        finishedVinOrder.setChargingGunId(5);
+        finishedVinOrder.setStatus(5);
+        finishedVinOrder.setCode("VD20261014003");
+        finishedVinOrder.setResidualAmount(new BigDecimal("5.20"));
+        finishedVinOrder.setCreateTime(LocalDateTime.of(2026, 10, 14, 14, 42, 26));
+        when(vinChargingOrderMapper.selectOne(any())).thenReturn(finishedVinOrder);
+        stubGunPileAndSite();
+        when(uploadRealTimeMonitoringDataService.getLastDataById("VD20261014003")).thenReturn(null);
+
+        ChargingDetails details = service.getChargingDetails(5);
+
+        assertNotNull(details);
+        assertEquals("2003", details.getId());
+        assertEquals(Integer.valueOf(5), details.getStatus());
+        assertEquals("VD20261014003", details.getCode());
+        assertEquals(0, new BigDecimal("5.20").compareTo(details.getChargingCost()));
+    }
+
     /** getChargingDetails 组装链路依赖的充电枪/充电桩/站点远程调用 stub */
     private void stubGunPileAndSite() {
         TChargingGun gun = new TChargingGun();

--
Gitblit v1.7.1