提交
This commit is contained in:
@@ -363,17 +363,30 @@ public class FinanceExportProviderService {
|
|||||||
"receivedAmount", value.receivedAmount(), "outstandingAmount", value.outstandingAmount(), "settled", value.settled(), "status", value.status(),
|
"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());
|
"remark", value.remark(), "createdByName", value.createdByName(), "createdAt", value.createdAt(), "updatedByName", value.updatedByName(), "updatedAt", value.updatedAt());
|
||||||
}
|
}
|
||||||
|
/** 结算单列表导出使用中文状态,便于财务人员直接阅读。 */
|
||||||
private Map<String, Object> settlementRow(SettlementSummary value) {
|
private Map<String, Object> settlementRow(SettlementSummary value) {
|
||||||
return row("settlementNo", value.settlementNo(), "customerName", value.customerName(), "supplierName", value.supplierName(),
|
return row("settlementNo", value.settlementNo(), "customerName", value.customerName(), "supplierName", value.supplierName(),
|
||||||
"currency", value.currency(), "totalAmount", value.totalAmount(), "paidAmount", value.paidAmount(), "outstandingAmount", value.outstandingAmount(),
|
"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<String, Object> settlementDetailRow(SettlementSummary summary, SettlementLine line) {
|
private Map<String, Object> settlementDetailRow(SettlementSummary summary, SettlementLine line) {
|
||||||
return row("settlementNo", summary.settlementNo(), "customerName", summary.customerName(), "supplierName", summary.supplierName(),
|
return row("settlementNo", summary.settlementNo(), "customerName", summary.customerName(), "supplierName", summary.supplierName(),
|
||||||
"feeItemName", line == null ? null : line.feeItemName(), "inboundCode", line == null ? null : line.inboundCode(),
|
"feeItemName", line == null ? null : line.feeItemName(), "inboundCode", line == null ? null : line.inboundCode(),
|
||||||
"containerNo", line == null ? null : line.containerNo(), "businessDate", line == null ? null : line.businessDate(),
|
"containerNo", line == null ? null : line.containerNo(), "businessDate", line == null ? null : line.businessDate(),
|
||||||
"lineAmount", line == null ? null : line.amount(), "totalAmount", summary.totalAmount(), "paidAmount", summary.paidAmount(),
|
"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<String, Object> receivableStatisticsRow(YearMonth month, ReceivableStatisticsRow value) {
|
private Map<String, Object> receivableStatisticsRow(YearMonth month, ReceivableStatisticsRow value) {
|
||||||
return row("statisticsMonth", month.toString(), "customerName", value.customerName(),
|
return row("statisticsMonth", month.toString(), "customerName", value.customerName(),
|
||||||
|
|||||||
+20
@@ -45,6 +45,26 @@ class FinanceExportProviderServiceTest {
|
|||||||
service.initializeSigningKey();
|
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
|
@Test
|
||||||
void exportsStatementRowsUsingBusinessContainerNumberAndStableSnapshot() {
|
void exportsStatementRowsUsingBusinessContainerNumberAndStableSnapshot() {
|
||||||
Statement summary = new Statement(501L, 10001L, "REC-501", "客户A", LocalDate.parse("2026-08-31"),
|
Statement summary = new Statement(501L, 10001L, "REC-501", "客户A", LocalDate.parse("2026-08-31"),
|
||||||
|
|||||||
Reference in New Issue
Block a user