提交
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package com.baiyue.lastleg.export;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class LastlegExportLabelsTest {
|
||||
@Test void translatesEveryEnumColumnOfAllLastlegTaskTypes() {
|
||||
Object[][] examples = {
|
||||
{"LAST_MILE_ORDER_LIST", "currentStatus", "WAIT_PDA_RECEIVING", "入库测量中"},
|
||||
{"LAST_MILE_ORDER_LIST", "orderTypeName", "FIRST_LEG", "头程订单"},
|
||||
{"LAST_MILE_ORDER_LIST", "businessSource.label", "LOCAL_LOOSEBOARD", "本土散板"},
|
||||
{"LAST_MILE_ORDER_LIST", "containerNode", "PICKUP_READY", "已清关、可提柜"},
|
||||
{"LAST_MILE_ORDER_LIST", "relabelStatus", "CUSTOMER_CONFIRM_PENDING", "待客户确认"},
|
||||
{"LAST_MILE_ORDER_LIST", "palletMergeFlag", "REQUIRED", "待合托"},
|
||||
{"OVERSEAS_INVENTORY_LEDGER", "businessType", "RETURN_STOCK_IN", "退回入库"},
|
||||
{"OVERSEAS_INVENTORY_LEDGER", "statusFrom", "PICKED", "已拣货"},
|
||||
{"OVERSEAS_INVENTORY_LEDGER", "statusTo", "SHIPPED", "已出库"},
|
||||
{"OVERSEAS_QUOTE_LIST", "status", "ACTIVE", "启用"},
|
||||
{"MONTHLY_EXCHANGE_RATE_LIST", "status", "INACTIVE", "停用"},
|
||||
{"FLEET_QUOTE_LIST", "status", "ACTIVE", "启用"},
|
||||
{"FLEET_QUOTE_LIST", "details.kind", "PURCHASE", "车队采购报价"},
|
||||
{"FLEET_QUOTE_LIST", "details.kind", "SALE", "外接销售报价"},
|
||||
{"VEHICLE_LIST", "status", "DISPATCHED", "外派中"},
|
||||
{"VEHICLE_LIST", "ownership", "DISPATCHED", "外派"},
|
||||
{"VEHICLE_LIST", "region", "OVERSEAS", "海外"},
|
||||
{"TRIP_OPERATIONS_LIST", "status", "COMPLETED", "货物已结案"}
|
||||
};
|
||||
for (Object[] example : examples) {
|
||||
assertEquals(example[3], LastlegExportLabels.value((String) example[0], (String) example[1], example[2]), example[0] + ":" + example[1]);
|
||||
assertTrue(LastlegExportColumns.columns((String) example[0]).stream().anyMatch(c -> c.key().equals(example[1])), "映射必须对应实际导出列");
|
||||
}
|
||||
}
|
||||
|
||||
@Test void translatesCompositeSubOrdersAndAllVehicleStatuses() {
|
||||
assertEquals("出库单:已出库;派送单:待派送", LastlegExportLabels.value("LAST_MILE_ORDER_LIST", "subOrderStatus", "OUTBOUND:OUTBOUNDED;DELIVERY:WAIT_DELIVERY"));
|
||||
assertEquals("入库单:部分入库", LastlegExportLabels.value("LAST_MILE_ORDER_LIST", "subOrderStatus", "INBOUND_PLAN:PARTIAL_INBOUND"));
|
||||
for (String code : List.of("IN_SERVICE", "DISPATCHED", "MAINTENANCE", "INACTIVE", "RETURNED")) {
|
||||
String label = (String) LastlegExportLabels.value("VEHICLE_LIST", "status", code);
|
||||
assertTrue(label.matches(".*[一-鿿].*")); assertFalse(label.contains("未知"));
|
||||
}
|
||||
for (String code : List.of("OUTSIDE", "UNBOUND", "IN_TRANSIT", "RECEIVING", "AVAILABLE", "HOLD", "ALLOCATED", "PICKED", "SHIPPED")) {
|
||||
assertFalse(LastlegExportLabels.value("OVERSEAS_INVENTORY_LEDGER", "statusTo", code).toString().contains("未知"));
|
||||
}
|
||||
for (String code : List.of("RECEIVING_WAREHOUSE_CHANGED", "INTERNAL_MOVE", "RELABEL_PALLET_DISASSEMBLE")) {
|
||||
assertFalse(LastlegExportLabels.value("OVERSEAS_INVENTORY_LEDGER", "businessType", code).toString().contains("未知"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test void preservesBusinessIdentifiersAmountsDatesCurrenciesAndFreeText() {
|
||||
for (String type : List.of("LAST_MILE_ORDER_LIST", "OVERSEAS_INVENTORY_BALANCE", "OVERSEAS_INVENTORY_LEDGER", "OVERSEAS_QUOTE_LIST", "MONTHLY_EXCHANGE_RATE_LIST", "VEHICLE_LIST", "FLEET_QUOTE_LIST", "TRIP_OPERATIONS_LIST", "SELFOP_INVENTORY_TURNOVER")) {
|
||||
assertEquals("ACTIVE", LastlegExportLabels.value(type, "remark", "ACTIVE"));
|
||||
assertEquals("ONT8", LastlegExportLabels.value(type, "warehouseCode", "ONT8"));
|
||||
assertEquals("USD", LastlegExportLabels.value(type, "currency", "USD"));
|
||||
assertEquals(BigDecimal.TEN, LastlegExportLabels.value(type, "amount", BigDecimal.TEN));
|
||||
assertNull(LastlegExportLabels.value(type, "status", null));
|
||||
}
|
||||
assertEquals("已完成", LastlegExportLabels.value("LAST_MILE_ORDER_LIST", "currentStatus", "已完成"));
|
||||
assertEquals("未知状态", LastlegExportLabels.value("TRIP_OPERATIONS_LIST", "status", "NEW_INTERNAL_STATE"));
|
||||
}
|
||||
}
|
||||
+11
@@ -46,6 +46,17 @@ class LastlegExportProviderServiceTest {
|
||||
}
|
||||
@AfterEach void close() { validators.close(); }
|
||||
|
||||
@Test void rowProjectionTranslatesOnlyBusinessEnumsBeforeWritingBatches() {
|
||||
Map<String, Object> row = ReflectionTestUtils.invokeMethod(service, "row", "FLEET_QUOTE_LIST",
|
||||
Map.of("status", "ACTIVE", "quoteNo", "ACTIVE", "details", Map.of("kind", "SALE", "currency", "USD", "remark", "SALE")),
|
||||
LastlegExportColumns.columns("FLEET_QUOTE_LIST"));
|
||||
assertEquals("启用", row.get("status"));
|
||||
assertEquals("外接销售报价", row.get("details.kind"));
|
||||
assertEquals("ACTIVE", row.get("quoteNo"));
|
||||
assertEquals("USD", row.get("details.currency"));
|
||||
assertEquals("SALE", row.get("details.remark"));
|
||||
}
|
||||
|
||||
@Test void batchesAllRowsAndBindsSnapshotToFiltersRequesterAndAttempt() {
|
||||
var row = new MonthlyExchangeRateDtos.Response("2026-10", "USD", "CNY", new BigDecimal("7.12"), "ACTIVE", 1, "operator", LocalDateTime.of(2026,10,8,12,0), null);
|
||||
when(rates.page(any())).thenAnswer(call -> {
|
||||
|
||||
Reference in New Issue
Block a user