From a8192f51fefdc031a5b03136d4d6fb7caab26c64 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Fri, 23 Oct 2026 18:45:47 +0800 Subject: [PATCH] fix(lastleg): generate sequenced outbound task numbers --- .../lastleg/delivery/service/DeliveryTransferService.java | 7 +++---- .../lastleg/relabel/service/RelabelApplicationService.java | 3 +-- .../lastleg/service/LastlegDocumentNumberGenerator.java | 2 +- .../baiyue/lastleg/service/LastlegOrderNoGenerator.java | 1 + .../delivery/service/DeliveryTransferServiceTest.java | 6 +++++- .../lastleg/service/LastlegOrderNoGeneratorTest.java | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/delivery/service/DeliveryTransferService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/delivery/service/DeliveryTransferService.java index 3963539c5..f0c033b71 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/delivery/service/DeliveryTransferService.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/delivery/service/DeliveryTransferService.java @@ -78,7 +78,6 @@ import org.springframework.web.server.ResponseStatusException; import java.time.LocalDateTime; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import com.baiyue.lastleg.service.LastlegOrderNoGenerator; import java.math.BigDecimal; import java.math.RoundingMode; @@ -192,7 +191,7 @@ public class DeliveryTransferService { outbound.setVolumeCbm(sum(createdMetricItems, OutboundPalletItem::getVolumeCbm)); outbound.setOverseasWarehouseId(selectedWarehouseId); outboundOrders.updateById(outbound); OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(customerId); task.setOutboundOrderId(outbound.getId()); - task.setTaskNo("PDA" + now.format(DateTimeFormatter.BASIC_ISO_DATE) + task.getId()); task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); pdaTasks.insert(task); + task.setTaskNo(orderNoGenerator.next("OUTBOUND_TASK")); task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); pdaTasks.insert(task); return taskResult(outbound, task); } @@ -307,7 +306,7 @@ public class DeliveryTransferService { delivery.setVersion(0L); delivery.setCreatedBy(operatorId); delivery.setCreatedAt(now); delivery.setUpdatedAt(now); deliveryOrders.insert(delivery); OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(customerId); task.setOutboundOrderId(outbound.getId()); - task.setTaskNo("PDA" + now.format(DateTimeFormatter.BASIC_ISO_DATE) + task.getId()); task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); pdaTasks.insert(task); + task.setTaskNo(orderNoGenerator.next("OUTBOUND_TASK")); task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); pdaTasks.insert(task); return taskResult(outbound, task); } @@ -459,7 +458,7 @@ public class DeliveryTransferService { recordOperation(customerId, delivery.getId(), operatorId, "CREATE_DELIVERY", "仓储转运出库自动生成派送单", now); OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(customerId); - task.setOutboundOrderId(outbound.getId()); task.setTaskNo("PDA" + now.format(DateTimeFormatter.BASIC_ISO_DATE) + task.getId()); + task.setOutboundOrderId(outbound.getId()); task.setTaskNo(orderNoGenerator.next("OUTBOUND_TASK")); task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); pdaTasks.insert(task); transfer.setStatus("WAIT_OUTBOUND"); if ("FBA".equals(destinationType)) transfer.setFbaWarehouseCode(request.destinationWarehouseCode().trim()); diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java index b0d516e32..d6b5614b6 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java @@ -60,7 +60,6 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.time.LocalDateTime; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.HexFormat; import java.util.LinkedHashMap; import java.util.List; @@ -1147,7 +1146,7 @@ public class RelabelApplicationService implements WalletResultHandler { item.setCreatedAt(now); outboundItems.insert(item); } OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(application.getCustomerId()); - task.setOutboundOrderId(outbound.getId()); task.setTaskNo("PDA" + now.format(DateTimeFormatter.BASIC_ISO_DATE) + task.getId()); + task.setOutboundOrderId(outbound.getId()); task.setTaskNo(orderNoGenerator.next("OUTBOUND_TASK")); task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); outboundTasks.insert(task); if (returnOnly) { Map> destinations = relabelItems.stream().collect(Collectors.groupingBy( diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegDocumentNumberGenerator.java b/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegDocumentNumberGenerator.java index 9d3bb752e..b99ad190c 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegDocumentNumberGenerator.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegDocumentNumberGenerator.java @@ -10,7 +10,7 @@ import java.util.Set; /** 按北京时间生成两至四位前缀、八位日期和四位日流水。 */ @Component public class LastlegDocumentNumberGenerator { - private static final Set PREFIXES = Set.of("WC", "IP", "CK", "DFCK", "HBCK", "THCK", "DL", "EX", "CD", "TB", "ZY", "TH", "THHB", "RR", "RB", "HX", "YY", "TR", "LB", "CG", "PR", "PJ", "PF", "PN", "PX", "PG", "CT", "FB", "FO", "VR"); + private static final Set PREFIXES = Set.of("WC", "IP", "CK", "DFCK", "HBCK", "THCK", "PDA", "DL", "EX", "CD", "TB", "ZY", "TH", "THHB", "RR", "RB", "HX", "YY", "TR", "LB", "CG", "PR", "PJ", "PF", "PN", "PX", "PG", "CT", "FB", "FO", "VR"); private final DocumentSequenceRepository sequences; private final Clock clock; diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegOrderNoGenerator.java b/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegOrderNoGenerator.java index 6eaa838ff..8402699e5 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegOrderNoGenerator.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/service/LastlegOrderNoGenerator.java @@ -21,6 +21,7 @@ public class LastlegOrderNoGenerator { case "OUTBOUND" -> "CK"; case "RELABEL_OUTBOUND" -> "HBCK"; case "RETURN_OUTBOUND" -> "THCK"; + case "OUTBOUND_TASK" -> "PDA"; case "DELIVERY" -> "DL"; case "TRUCK" -> "TR"; case "LOOSEBOARD" -> "LB"; diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/delivery/service/DeliveryTransferServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/delivery/service/DeliveryTransferServiceTest.java index 4111fa0b9..e399e12c7 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/delivery/service/DeliveryTransferServiceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/delivery/service/DeliveryTransferServiceTest.java @@ -845,9 +845,13 @@ class DeliveryTransferServiceTest { when(inventoryPositions.selectById(901L)).thenReturn(position); when(inventoryBalances.selectById(801L)).thenReturn(balance); - service.createOneClick("TENANT-A", "U-1", new DeliveryRequests.OneClickOutbound("recipient", List.of( + var result = service.createOneClick("TENANT-A", "U-1", new DeliveryRequests.OneClickOutbound("recipient", List.of( new DeliveryRequests.OneClickItem(901L, 2L, "SKU-1")), null, "split-metrics")); + // 出库单和作业任务各自使用独立日流水,不暴露内部雪花 ID。 + assertEquals("DFCK202610200001", result.outboundNo()); + assertEquals("PDA202610200001", result.taskNo()); + ArgumentCaptor item = ArgumentCaptor.forClass(OutboundPalletItem.class); verify(outboundPallets).insert(item.capture()); assertEquals(new BigDecimal("20.000"), item.getValue().getGrossWeightKg()); diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/service/LastlegOrderNoGeneratorTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/service/LastlegOrderNoGeneratorTest.java index 0e886ee52..9af3d2045 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/service/LastlegOrderNoGeneratorTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/service/LastlegOrderNoGeneratorTest.java @@ -9,7 +9,7 @@ class LastlegOrderNoGeneratorTest { @Test void routesEveryOperationalTypeToItsDailySequence() { var generator=TestDocumentNumbers.orders(); Map.ofEntries(Map.entry("LASTLEG","WC"),Map.entry("OUTBOUND","CK"),Map.entry("ONE_CLICK_DROPSHIP","DFCK"), - Map.entry("RELABEL_OUTBOUND","HBCK"),Map.entry("RETURN_OUTBOUND","THCK"), + Map.entry("RELABEL_OUTBOUND","HBCK"),Map.entry("RETURN_OUTBOUND","THCK"),Map.entry("OUTBOUND_TASK","PDA"), Map.entry("DELIVERY","DL"),Map.entry("TRUCK","TR"),Map.entry("LOOSEBOARD","LB"), Map.entry("EXCEPTION","EX"),Map.entry("DISCARD","CD"),Map.entry("INBOUND_PLAN","IP"), Map.entry("RETURN_RECEIPT","RR"),Map.entry("RETURN_BATCH","RB"),Map.entry("RETURN_PACKING_PLAN","HX")) -- 2.54.0