package com.ruoyi.order.controller; import com.ruoyi.order.api.vo.ChargingOrderListVO; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.util.Arrays; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; class FinancialSettlementControllerTest { @Test void shouldFormatChargingDurationInMinutes() { assertEquals("377.5", FinancialSettlementController.formatChargingDurationMinutes(22650L)); assertEquals("34.6", FinancialSettlementController.formatChargingDurationMinutes(2076L)); assertEquals("", FinancialSettlementController.formatChargingDurationMinutes(null)); } @Test void shouldFormatNullChargingEndModeAsBlank() { assertEquals("", FinancialSettlementController.formatChargingEndMode(null)); assertEquals("0", FinancialSettlementController.formatChargingEndMode(0)); assertEquals("3", FinancialSettlementController.formatChargingEndMode(3)); } @Test void shouldBuildChargingPeriodExportSummaryFromExportRows() { ChargingOrderListVO first = new ChargingOrderListVO(); first.setElectrovalence(new BigDecimal("10.12")); first.setServiceCharge(new BigDecimal("2.34")); first.setPaymentAmount(new BigDecimal("12.46")); first.setElectricity(new BigDecimal("8.1234")); first.setChargingSecond(90L); first.setSharingAmount(new BigDecimal("0.46")); first.setPlatformIncome(new BigDecimal("1.24")); first.setPartnerIncome(new BigDecimal("0.64")); first.setBalanceIncome(new BigDecimal("3.00")); first.setBalanceGiftIncome(new BigDecimal("1.00")); first.setVipDiscountAmount(new BigDecimal("0.50")); ChargingOrderListVO second = new ChargingOrderListVO(); second.setElectrovalence(new BigDecimal("1.00")); second.setServiceCharge(new BigDecimal("1.00")); second.setPaymentAmount(new BigDecimal("2.00")); second.setElectricity(new BigDecimal("1.0000")); second.setChargingSecond(30L); second.setPlatformIncome(new BigDecimal("0.76")); second.setPartnerIncome(new BigDecimal("0.36")); String summary = FinancialSettlementController.buildChargingPeriodExportSummary(Arrays.asList(first, second)); assertTrue(summary.contains("总计:2条")); assertTrue(summary.contains("充电电费:11.12元")); assertTrue(summary.contains("充电服务费:3.34元")); assertTrue(summary.contains("充电收入:14.46元")); assertTrue(summary.contains("充电电量:9.123度")); assertTrue(summary.contains("充电时长:2分钟")); assertTrue(summary.contains("平台收入:2.00元")); assertTrue(summary.contains("合作商分成:1.00元")); assertTrue(summary.contains("三方平台分佣:0.46元")); assertTrue(summary.contains("余额收入:3.00元")); assertTrue(summary.contains("余额赠送:1.00元")); assertTrue(summary.contains("会员赠送:0.50元")); } @Test void shouldPrependMergedSummaryRowBeforeExportHeader() throws Exception { try (Workbook workbook = new HSSFWorkbook()) { Sheet sheet = workbook.createSheet("充电时段统计"); sheet.createRow(0).createCell(0).setCellValue("订单编号"); sheet.getRow(0).createCell(1).setCellValue("电站名称"); sheet.createRow(1).createCell(0).setCellValue("ORDER-1"); FinancialSettlementController.prependChargingPeriodSummary(workbook, "总计:1条"); assertEquals("总计:1条", sheet.getRow(0).getCell(0).getStringCellValue()); assertEquals("订单编号", sheet.getRow(1).getCell(0).getStringCellValue()); assertEquals("ORDER-1", sheet.getRow(2).getCell(0).getStringCellValue()); assertEquals(1, sheet.getNumMergedRegions()); assertEquals("A1:B1", sheet.getMergedRegion(0).formatAsString()); } } }