| | |
| | | import com.baomidou.mybatisplus.core.MybatisConfiguration; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; |
| | | import com.ruoyi.account.api.feignClient.AppUserWhitelistClient; |
| | | import com.ruoyi.account.api.feignClient.ChargingCardClient; |
| | | import com.ruoyi.account.api.feignClient.VinManagementClient; |
| | | import com.ruoyi.account.api.model.TVinManagement; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.other.api.domain.TGroupCompany; |
| | |
| | | assertEquals(2, detail.getMonthRechargeAmount().scale()); |
| | | } |
| | | |
| | | /** |
| | | * 公司详情(带充电用户聚合)统计 VIN码车辆数量:与 VIN 列表接口同口径, |
| | | * 且聚合充电用户时复用同一远程结果,不重复调用远程接口。 |
| | | */ |
| | | @Test |
| | | void fillsVinCountAndReusesRemoteVinList() { |
| | | TGroupCompany company = new TGroupCompany(); |
| | | company.setId(1); |
| | | company.setAccountMode(1); |
| | | company.setAvailableBalance(new BigDecimal("100.00")); |
| | | |
| | | TVinManagement vin1 = new TVinManagement(); |
| | | vin1.setId(11L); |
| | | vin1.setVin("TESTVIN0001"); |
| | | vin1.setBalance(new BigDecimal("10.00")); |
| | | vin1.setStatus(1); |
| | | TVinManagement vin2 = new TVinManagement(); |
| | | vin2.setId(12L); |
| | | vin2.setVin("TESTVIN0002"); |
| | | vin2.setBalance(new BigDecimal("20.00")); |
| | | vin2.setStatus(1); |
| | | |
| | | TFleetMapper fleetMapper = Mockito.mock(TFleetMapper.class); |
| | | Mockito.when(fleetMapper.selectCount(Mockito.any())).thenReturn(0L); |
| | | Mockito.when(fleetMapper.selectList(Mockito.any())).thenReturn(Collections.emptyList()); |
| | | |
| | | TCompanyRechargeRecordMapper rechargeMapper = Mockito.mock(TCompanyRechargeRecordMapper.class); |
| | | Mockito.when(rechargeMapper.selectList(Mockito.any())).thenReturn(Collections.emptyList()); |
| | | |
| | | VinManagementClient vinClient = Mockito.mock(VinManagementClient.class); |
| | | Mockito.when(vinClient.listByCompany(1)).thenReturn(R.ok(Arrays.asList(vin1, vin2))); |
| | | ChargingCardClient cardClient = Mockito.mock(ChargingCardClient.class); |
| | | Mockito.when(cardClient.listByCompany(1)).thenReturn(R.ok(Collections.emptyList())); |
| | | AppUserWhitelistClient whitelistClient = Mockito.mock(AppUserWhitelistClient.class); |
| | | Mockito.when(whitelistClient.listByCompany(1)).thenReturn(R.ok(Collections.emptyList())); |
| | | |
| | | TGroupCompanyServiceImpl service = buildService(company, fleetMapper, rechargeMapper); |
| | | ReflectionTestUtils.setField(service, "vinManagementClient", vinClient); |
| | | ReflectionTestUtils.setField(service, "chargingCardClient", cardClient); |
| | | ReflectionTestUtils.setField(service, "appUserWhitelistClient", whitelistClient); |
| | | |
| | | TGroupCompany detail = service.getDetailWithChargingUsers(1); |
| | | |
| | | assertEquals(2, detail.getVinCount()); |
| | | assertEquals(2, detail.getChargingUsers().size()); |
| | | // VIN 远程接口仅调用一次:vinCount 统计与充电用户聚合复用同一结果 |
| | | Mockito.verify(vinClient, Mockito.times(1)).listByCompany(1); |
| | | } |
| | | |
| | | /** |
| | | * VIN 远程接口异常降级:vinCount 返回 0,详情主流程不受影响 |
| | | */ |
| | | @Test |
| | | void vinCountZeroWhenVinRemoteFails() { |
| | | TGroupCompany company = new TGroupCompany(); |
| | | company.setId(1); |
| | | company.setAccountMode(1); |
| | | |
| | | TFleetMapper fleetMapper = Mockito.mock(TFleetMapper.class); |
| | | Mockito.when(fleetMapper.selectCount(Mockito.any())).thenReturn(0L); |
| | | Mockito.when(fleetMapper.selectList(Mockito.any())).thenReturn(Collections.emptyList()); |
| | | |
| | | TCompanyRechargeRecordMapper rechargeMapper = Mockito.mock(TCompanyRechargeRecordMapper.class); |
| | | Mockito.when(rechargeMapper.selectList(Mockito.any())).thenReturn(Collections.emptyList()); |
| | | |
| | | VinManagementClient vinClient = Mockito.mock(VinManagementClient.class); |
| | | Mockito.when(vinClient.listByCompany(1)).thenThrow(new RuntimeException("remote down")); |
| | | ChargingCardClient cardClient = Mockito.mock(ChargingCardClient.class); |
| | | Mockito.when(cardClient.listByCompany(1)).thenReturn(R.ok(Collections.emptyList())); |
| | | AppUserWhitelistClient whitelistClient = Mockito.mock(AppUserWhitelistClient.class); |
| | | Mockito.when(whitelistClient.listByCompany(1)).thenReturn(R.ok(Collections.emptyList())); |
| | | |
| | | TGroupCompanyServiceImpl service = buildService(company, fleetMapper, rechargeMapper); |
| | | ReflectionTestUtils.setField(service, "vinManagementClient", vinClient); |
| | | ReflectionTestUtils.setField(service, "chargingCardClient", cardClient); |
| | | ReflectionTestUtils.setField(service, "appUserWhitelistClient", whitelistClient); |
| | | |
| | | TGroupCompany detail = service.getDetailWithChargingUsers(1); |
| | | |
| | | assertEquals(0, detail.getVinCount()); |
| | | assertTrue(detail.getChargingUsers().isEmpty()); |
| | | } |
| | | |
| | | @Test |
| | | void returnsNullAndSkipsStatisticsWhenCompanyNotExists() { |
| | | TFleetMapper fleetMapper = Mockito.mock(TFleetMapper.class); |