fix(lastleg): generate sequenced outbound task numbers
This commit is contained in:
+3
-4
@@ -78,7 +78,6 @@ import org.springframework.web.server.ResponseStatusException;
|
|||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import com.baiyue.lastleg.service.LastlegOrderNoGenerator;
|
import com.baiyue.lastleg.service.LastlegOrderNoGenerator;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
@@ -192,7 +191,7 @@ public class DeliveryTransferService {
|
|||||||
outbound.setVolumeCbm(sum(createdMetricItems, OutboundPalletItem::getVolumeCbm));
|
outbound.setVolumeCbm(sum(createdMetricItems, OutboundPalletItem::getVolumeCbm));
|
||||||
outbound.setOverseasWarehouseId(selectedWarehouseId); outboundOrders.updateById(outbound);
|
outbound.setOverseasWarehouseId(selectedWarehouseId); outboundOrders.updateById(outbound);
|
||||||
OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(customerId); task.setOutboundOrderId(outbound.getId());
|
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);
|
return taskResult(outbound, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +306,7 @@ public class DeliveryTransferService {
|
|||||||
delivery.setVersion(0L); delivery.setCreatedBy(operatorId); delivery.setCreatedAt(now); delivery.setUpdatedAt(now);
|
delivery.setVersion(0L); delivery.setCreatedBy(operatorId); delivery.setCreatedAt(now); delivery.setUpdatedAt(now);
|
||||||
deliveryOrders.insert(delivery);
|
deliveryOrders.insert(delivery);
|
||||||
OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(customerId); task.setOutboundOrderId(outbound.getId());
|
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);
|
return taskResult(outbound, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,7 +458,7 @@ public class DeliveryTransferService {
|
|||||||
recordOperation(customerId, delivery.getId(), operatorId, "CREATE_DELIVERY", "仓储转运出库自动生成派送单", now);
|
recordOperation(customerId, delivery.getId(), operatorId, "CREATE_DELIVERY", "仓储转运出库自动生成派送单", now);
|
||||||
|
|
||||||
OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(customerId);
|
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);
|
task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); pdaTasks.insert(task);
|
||||||
transfer.setStatus("WAIT_OUTBOUND");
|
transfer.setStatus("WAIT_OUTBOUND");
|
||||||
if ("FBA".equals(destinationType)) transfer.setFbaWarehouseCode(request.destinationWarehouseCode().trim());
|
if ("FBA".equals(destinationType)) transfer.setFbaWarehouseCode(request.destinationWarehouseCode().trim());
|
||||||
|
|||||||
+1
-2
@@ -60,7 +60,6 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.HexFormat;
|
import java.util.HexFormat;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -1147,7 +1146,7 @@ public class RelabelApplicationService implements WalletResultHandler {
|
|||||||
item.setCreatedAt(now); outboundItems.insert(item);
|
item.setCreatedAt(now); outboundItems.insert(item);
|
||||||
}
|
}
|
||||||
OutboundPdaTask task = new OutboundPdaTask(); task.setId(IdWorker.getId()); task.setCustomerId(application.getCustomerId());
|
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);
|
task.setStatus("PENDING"); task.setPushedAt(now); task.setCreatedAt(now); task.setUpdatedAt(now); outboundTasks.insert(task);
|
||||||
if (returnOnly) {
|
if (returnOnly) {
|
||||||
Map<String, List<RelabelItem>> destinations = relabelItems.stream().collect(Collectors.groupingBy(
|
Map<String, List<RelabelItem>> destinations = relabelItems.stream().collect(Collectors.groupingBy(
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import java.util.Set;
|
|||||||
/** 按北京时间生成两至四位前缀、八位日期和四位日流水。 */
|
/** 按北京时间生成两至四位前缀、八位日期和四位日流水。 */
|
||||||
@Component
|
@Component
|
||||||
public class LastlegDocumentNumberGenerator {
|
public class LastlegDocumentNumberGenerator {
|
||||||
private static final Set<String> 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<String> 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 DocumentSequenceRepository sequences;
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class LastlegOrderNoGenerator {
|
|||||||
case "OUTBOUND" -> "CK";
|
case "OUTBOUND" -> "CK";
|
||||||
case "RELABEL_OUTBOUND" -> "HBCK";
|
case "RELABEL_OUTBOUND" -> "HBCK";
|
||||||
case "RETURN_OUTBOUND" -> "THCK";
|
case "RETURN_OUTBOUND" -> "THCK";
|
||||||
|
case "OUTBOUND_TASK" -> "PDA";
|
||||||
case "DELIVERY" -> "DL";
|
case "DELIVERY" -> "DL";
|
||||||
case "TRUCK" -> "TR";
|
case "TRUCK" -> "TR";
|
||||||
case "LOOSEBOARD" -> "LB";
|
case "LOOSEBOARD" -> "LB";
|
||||||
|
|||||||
+5
-1
@@ -845,9 +845,13 @@ class DeliveryTransferServiceTest {
|
|||||||
when(inventoryPositions.selectById(901L)).thenReturn(position);
|
when(inventoryPositions.selectById(901L)).thenReturn(position);
|
||||||
when(inventoryBalances.selectById(801L)).thenReturn(balance);
|
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"));
|
new DeliveryRequests.OneClickItem(901L, 2L, "SKU-1")), null, "split-metrics"));
|
||||||
|
|
||||||
|
// 出库单和作业任务各自使用独立日流水,不暴露内部雪花 ID。
|
||||||
|
assertEquals("DFCK202610200001", result.outboundNo());
|
||||||
|
assertEquals("PDA202610200001", result.taskNo());
|
||||||
|
|
||||||
ArgumentCaptor<OutboundPalletItem> item = ArgumentCaptor.forClass(OutboundPalletItem.class);
|
ArgumentCaptor<OutboundPalletItem> item = ArgumentCaptor.forClass(OutboundPalletItem.class);
|
||||||
verify(outboundPallets).insert(item.capture());
|
verify(outboundPallets).insert(item.capture());
|
||||||
assertEquals(new BigDecimal("20.000"), item.getValue().getGrossWeightKg());
|
assertEquals(new BigDecimal("20.000"), item.getValue().getGrossWeightKg());
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ class LastlegOrderNoGeneratorTest {
|
|||||||
@Test void routesEveryOperationalTypeToItsDailySequence() {
|
@Test void routesEveryOperationalTypeToItsDailySequence() {
|
||||||
var generator=TestDocumentNumbers.orders();
|
var generator=TestDocumentNumbers.orders();
|
||||||
Map.ofEntries(Map.entry("LASTLEG","WC"),Map.entry("OUTBOUND","CK"),Map.entry("ONE_CLICK_DROPSHIP","DFCK"),
|
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("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("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"))
|
Map.entry("RETURN_RECEIPT","RR"),Map.entry("RETURN_BATCH","RB"),Map.entry("RETURN_PACKING_PLAN","HX"))
|
||||||
|
|||||||
Reference in New Issue
Block a user