From 413e1e83e88de3f4aedf81c8f0e10b1696f27887 Mon Sep 17 00:00:00 2001 From: liuyihe <2513762445@qq.com> Date: Wed, 4 Nov 2026 10:39:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/FinanceExportProviderService.java | 17 ++++++++++++++-- .../FinanceExportProviderServiceTest.java | 20 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/finance/src/main/java/com/baiyue/finance/service/FinanceExportProviderService.java b/finance/src/main/java/com/baiyue/finance/service/FinanceExportProviderService.java index 020b496f1..a1290218f 100644 --- a/finance/src/main/java/com/baiyue/finance/service/FinanceExportProviderService.java +++ b/finance/src/main/java/com/baiyue/finance/service/FinanceExportProviderService.java @@ -363,17 +363,30 @@ public class FinanceExportProviderService { "receivedAmount", value.receivedAmount(), "outstandingAmount", value.outstandingAmount(), "settled", value.settled(), "status", value.status(), "remark", value.remark(), "createdByName", value.createdByName(), "createdAt", value.createdAt(), "updatedByName", value.updatedByName(), "updatedAt", value.updatedAt()); } + /** 结算单列表导出使用中文状态,便于财务人员直接阅读。 */ private Map settlementRow(SettlementSummary value) { return row("settlementNo", value.settlementNo(), "customerName", value.customerName(), "supplierName", value.supplierName(), "currency", value.currency(), "totalAmount", value.totalAmount(), "paidAmount", value.paidAmount(), "outstandingAmount", value.outstandingAmount(), - "businessPeriod", value.businessPeriod(), "generatedDate", value.generatedDate(), "dueDate", value.dueDate(), "status", value.status()); + "businessPeriod", value.businessPeriod(), "generatedDate", value.generatedDate(), "dueDate", value.dueDate(), "status", settlementStatusLabel(value.status())); } + /** 明细导出与列表保持相同的中文结算状态。 */ private Map settlementDetailRow(SettlementSummary summary, SettlementLine line) { return row("settlementNo", summary.settlementNo(), "customerName", summary.customerName(), "supplierName", summary.supplierName(), "feeItemName", line == null ? null : line.feeItemName(), "inboundCode", line == null ? null : line.inboundCode(), "containerNo", line == null ? null : line.containerNo(), "businessDate", line == null ? null : line.businessDate(), "lineAmount", line == null ? null : line.amount(), "totalAmount", summary.totalAmount(), "paidAmount", summary.paidAmount(), - "outstandingAmount", summary.outstandingAmount(), "status", summary.status()); + "outstandingAmount", summary.outstandingAmount(), "status", settlementStatusLabel(summary.status())); + } + /** 转换正式结算状态,未知值保留原值以便排查。 */ + private String settlementStatusLabel(String status) { + if (status == null) return null; + return switch (status) { + case "ISSUED" -> "已出账"; + case "PARTIALLY_PAID" -> "部分结清"; + case "PAID" -> "已结清"; + case "VOIDED" -> "已作废"; + default -> status; + }; } private Map receivableStatisticsRow(YearMonth month, ReceivableStatisticsRow value) { return row("statisticsMonth", month.toString(), "customerName", value.customerName(), diff --git a/finance/src/test/java/com/baiyue/finance/service/FinanceExportProviderServiceTest.java b/finance/src/test/java/com/baiyue/finance/service/FinanceExportProviderServiceTest.java index 12b66abcd..8ed3e61d7 100644 --- a/finance/src/test/java/com/baiyue/finance/service/FinanceExportProviderServiceTest.java +++ b/finance/src/test/java/com/baiyue/finance/service/FinanceExportProviderServiceTest.java @@ -45,6 +45,26 @@ class FinanceExportProviderServiceTest { service.initializeSigningKey(); } + @Test + /** 应付结算列表和详情导出均使用中文状态,包括无明细的单据。 */ + void exportsSettlementStatusesInChinese() { + for (var entry : Map.of("ISSUED", "已出账", "PARTIALLY_PAID", "部分结清", "PAID", "已结清", "VOIDED", "已作废").entrySet()) { + var summary = new com.baiyue.finance.dto.FinanceSettlementDtos.SettlementSummary( + 701L, "AP-701", "PAYABLE", 10001L, "客户A", 301L, "供应商A", null, null, + "2026-11", "操作费", "CNY", BigDecimal.TEN, BigDecimal.ZERO, BigDecimal.TEN, + LocalDate.parse("2026-11-03"), null, "UNPAID", entry.getKey(), 7L, "财务员", null, null, null, 1); + when(settlementService.listSettlements("PAYABLE", null)).thenReturn(List.of(summary)); + when(settlementService.getSettlement(701L)).thenReturn(new com.baiyue.finance.dto.FinanceSettlementDtos.SettlementDetail( + summary, List.of(), List.of(), List.of())); + var list = service.exportBatch(FinanceExportProviderService.PAYABLE_SETTLEMENT_LIST, + request(Map.of("status", entry.getKey()), null, null)); + var detail = service.exportBatch(FinanceExportProviderService.PAYABLE_SETTLEMENT_DETAIL, + request(Map.of("settlementId", "701"), null, null)); + assertThat(list.rows().get(0)).containsEntry("status", entry.getValue()); + assertThat(detail.rows().get(0)).containsEntry("status", entry.getValue()); + } + } + @Test void exportsStatementRowsUsingBusinessContainerNumberAndStableSnapshot() { Statement summary = new Statement(501L, 10001L, "REC-501", "客户A", LocalDate.parse("2026-08-31"),