diff --git a/order/src/main/java/com/baiyue/order/dto/OrderSplitDtos.java b/order/src/main/java/com/baiyue/order/dto/OrderSplitDtos.java new file mode 100644 index 000000000..e374e63b1 --- /dev/null +++ b/order/src/main/java/com/baiyue/order/dto/OrderSplitDtos.java @@ -0,0 +1,47 @@ +package com.baiyue.order.dto; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; + +import java.time.LocalDateTime; +import java.util.List; + +/** Order-domain contract consumed by Firstleg when a container pick is settled. */ +public final class OrderSplitDtos { + private OrderSplitDtos() {} + + public record CreateRequest( + @Positive Long tenantId, + @Positive Long parentOrderId, + @Positive Long sourceOrderId, + @Positive Long loadingPlanId, + @Positive Long containerBookingId, + @NotNull @Min(1) Integer sourcePackageCount, + @NotNull @Min(1) Integer loadedPackageCount, + @NotNull @Min(0) Integer remainingPackageCount, + @NotNull @Min(0) Integer expectedParentVersion, + @NotBlank String idempotencyKey, + String operationId, + List lines, + String operatorName + ) {} + + public record QuantityLine(@Positive Long sourceDetailId, @NotNull @Min(1) Integer packageCount) {} + + public record Response( + Long parentOrderId, String parentOrderNo, Integer parentVersion, + Child loadedChild, Child remainderChild, Integer sourcePackageCount, + Integer loadedPackageCount, Integer remainingPackageCount, + Long loadingPlanId, Long containerBookingId, String idempotencyKey, + LocalDateTime createdAt + ) {} + + public record Child(Long orderId, String orderNo, Integer splitSequence, + String splitRole, Integer packageCount) {} + + public record Tree(Long parentOrderId, String parentOrderNo, Integer parentVersion, + List children, Integer allocatedPackageCount, + Integer remainingPackageCount) {} +}