package com.baiyue.lastleg.dto; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; public final class LastlegOrderRequests { private LastlegOrderRequests() { } public record Query( @Min(1) Long page, @Min(1) @Max(200) Long size, String orderNo, String orderType, String inboundCode, String sourceOrderNo, String containerNo, String currentStatus, String status, String warehouse, String transferWarehouseCode, Boolean abnormal, Boolean detained, LocalDateTime createdFrom, LocalDateTime createdTo ) { public Query { if (page == null || page == 0) page = 1L; if (size == null || size == 0) size = 20L; } } public record ContainerProgressQuery( @Min(1) long page, @Min(1) @Max(200) long size, String containerNo, LocalDateTime createdFrom, LocalDateTime createdTo ) { public ContainerProgressQuery { if (page == 0) page = 1; if (size == 0) size = 20; } } public record TransferDestination( @NotEmpty @Size(max = 200) List orderIds, @NotBlank @Size(max = 128) String warehouseId, @NotBlank @Size(max = 128) String warehouseCode, @NotBlank @Size(max = 255) String warehouseName, @Size(max = 500) String remark ) { } public record SingleTransferDestination( @NotBlank @Size(max = 128) String warehouseId, @NotBlank @Size(max = 128) String warehouseCode, @NotBlank @Size(max = 255) String warehouseName, @Size(max = 500) String remark ) { public TransferDestination withOrderId(long orderId) { return new TransferDestination(List.of(orderId), warehouseId, warehouseCode, warehouseName, remark); } } public record CreateFee( @NotBlank @Size(max = 128) String feeItem, @NotBlank @Pattern(regexp = "[A-Z]{3}") String currency, @NotNull @DecimalMin(value = "0.01") BigDecimal amount, @NotBlank @Pattern(regexp = "PENDING_REVIEW|APPROVED|REJECTED") String status, @Size(max = 500) String supplierDescription ) { } public record SetDetained( @NotNull Boolean detained, @NotBlank @Size(max = 500) String remark ) { } public record SetPalletMergeRequired( @NotNull Boolean palletMergeRequired ) { } public record SetPalletMergeBatch( @NotEmpty @Size(max = 200) List orderIds, @NotNull Boolean palletMergeRequired ) { } }