using System.ComponentModel.DataAnnotations; namespace Oms.Application.Dtos.Warehouse; public class WarehousePageInput { public int Page { get; set; } = 1; public int PageSize { get; set; } = 30; public int? CustomerId { get; set; } } // --- SKU --- public class WarehouseSkuListInput : WarehousePageInput { public string? Keyword { get; set; } } public class WarehouseSkuOutput { public int Id { get; set; } public int CustomerId { get; set; } public string SkuCode { get; set; } = string.Empty; public string SkuName { get; set; } = string.Empty; public string? SkuImageUrl { get; set; } public decimal? WeightG { get; set; } public decimal? LengthCm { get; set; } public decimal? WidthCm { get; set; } public decimal? HeightCm { get; set; } public string? Remark { get; set; } public int TotalQty { get; set; } public DateTime CreateTime { get; set; } public DateTime? UpdateTime { get; set; } } public class WarehouseSkuSaveInput { public int Id { get; set; } public int? CustomerId { get; set; } [Required] public string SkuCode { get; set; } = string.Empty; [Required] public string SkuName { get; set; } = string.Empty; public string? SkuImageUrl { get; set; } public decimal? WeightG { get; set; } public decimal? LengthCm { get; set; } public decimal? WidthCm { get; set; } public decimal? HeightCm { get; set; } public string? Remark { get; set; } } public class WarehouseSkuBindMappingInput { public int? CustomerId { get; set; } [Required] public int StoreId { get; set; } [Required] public string PlatformSku { get; set; } = string.Empty; [Required] public int SkuId { get; set; } } public class WarehouseSkuMappingOutput { public int Id { get; set; } public int StoreId { get; set; } public string PlatformSku { get; set; } = string.Empty; public int SkuId { get; set; } public string SkuCode { get; set; } = string.Empty; } // --- Bin Location --- public class WarehouseBinLocationListInput { public int WarehouseId { get; set; } public string? Keyword { get; set; } public bool? IsEnabled { get; set; } } public class WarehouseBinLocationOutput { public int Id { get; set; } public int WarehouseId { get; set; } public string BinCode { get; set; } = string.Empty; public string? BinName { get; set; } public string? ZoneCode { get; set; } public bool IsEnabled { get; set; } public string? Remark { get; set; } } public class WarehouseBinLocationSaveInput { public int Id { get; set; } [Required] public int WarehouseId { get; set; } [Required] public string BinCode { get; set; } = string.Empty; public string? BinName { get; set; } public string? ZoneCode { get; set; } public bool IsEnabled { get; set; } = true; public string? Remark { get; set; } } // --- Inbound --- public class WarehouseInboundListInput : WarehousePageInput { public int? WarehouseId { get; set; } /// /// 收货状态:forecasted / received / completed;空或 all 表示全部。 /// public string? ReceiptStatus { get; set; } public string? Keyword { get; set; } } public class WarehouseInboundOutput { public int Id { get; set; } public int CustomerId { get; set; } public int WarehouseId { get; set; } public string NoticeNo { get; set; } = string.Empty; public string? MarkReference { get; set; } public string InboundType { get; set; } = string.Empty; public string ReceiptStatus { get; set; } = string.Empty; public DateTime? ExpectedArrivalTime { get; set; } public DateTime? ActualArrivalTime { get; set; } public string? Remark { get; set; } public int BoxCount { get; set; } public int PlannedQty { get; set; } public DateTime CreateTime { get; set; } } public class WarehouseInboundLineSaveInput { public int SkuId { get; set; } public string SkuCode { get; set; } = string.Empty; public int PlannedQty { get; set; } } public class WarehouseInboundBoxSaveInput { public string BoxSeqNo { get; set; } = string.Empty; public string? MarkBoxNo { get; set; } public decimal? WeightG { get; set; } public decimal? LengthCm { get; set; } public decimal? WidthCm { get; set; } public decimal? HeightCm { get; set; } public List Lines { get; set; } = []; } public class WarehouseInboundSaveInput { public int Id { get; set; } public int? CustomerId { get; set; } [Required] public int WarehouseId { get; set; } public string? MarkReference { get; set; } public string InboundType { get; set; } = "normal"; public DateTime? ExpectedArrivalTime { get; set; } public string? Remark { get; set; } public List Boxes { get; set; } = []; } public class WarehouseInboundLineOutput { public int Id { get; set; } public int SkuId { get; set; } public string SkuCode { get; set; } = string.Empty; public int PlannedQty { get; set; } public int? ReceivedQty { get; set; } public int? BinLocationId { get; set; } } public class WarehouseInboundBoxOutput { public int Id { get; set; } public string BoxSeqNo { get; set; } = string.Empty; public string? MarkBoxNo { get; set; } public decimal? WeightG { get; set; } public decimal? LengthCm { get; set; } public decimal? WidthCm { get; set; } public decimal? HeightCm { get; set; } public bool IsReceived { get; set; } public List Lines { get; set; } = []; } public class WarehouseInboundDetailOutput : WarehouseInboundOutput { public List Boxes { get; set; } = []; } public class WarehouseInboundConfirmLineInput { public int LineId { get; set; } public int ReceivedQty { get; set; } public int BinLocationId { get; set; } } public class WarehouseInboundConfirmBoxInput { public int BoxId { get; set; } public List Lines { get; set; } = []; } public class WarehouseInboundConfirmReceiveInput { [Required] public int InboundNoticeId { get; set; } public int? CustomerId { get; set; } public List Boxes { get; set; } = []; } public class WarehouseInboundSummaryOutput { public int Forecasted { get; set; } public int Received { get; set; } public int Completed { get; set; } } // --- Parcel --- public class WarehouseParcelListInput : WarehousePageInput { public int? WarehouseId { get; set; } /// /// 生命周期状态:inTransit / arrived / stored;空或 all 表示全部。 /// public string? LifecycleStatus { get; set; } public string? Keyword { get; set; } } public class WarehouseParcelItemSaveInput { public int Id { get; set; } public string? ProductName { get; set; } public string? AttributeText { get; set; } /// 商品图片 URL。 public string? ImageUrl { get; set; } public int Quantity { get; set; } public string? Remark { get; set; } } public class WarehouseParcelItemOutput { public int Id { get; set; } public string? ProductName { get; set; } public string? AttributeText { get; set; } /// 商品图片 URL。 public string? ImageUrl { get; set; } public int Quantity { get; set; } public int? SkuId { get; set; } public string? SkuCode { get; set; } public int? BinLocationId { get; set; } public string? Remark { get; set; } } public class WarehouseParcelOutput { public int Id { get; set; } public int CustomerId { get; set; } public int WarehouseId { get; set; } public string TrackingNo { get; set; } = string.Empty; public string? CarrierName { get; set; } public string LifecycleStatus { get; set; } = string.Empty; public DateTime? ArrivalTime { get; set; } public string? Remark { get; set; } public List Items { get; set; } = []; public DateTime CreateTime { get; set; } } public class WarehouseParcelSaveInput { public int Id { get; set; } public int? CustomerId { get; set; } [Required] public int WarehouseId { get; set; } [Required] public string TrackingNo { get; set; } = string.Empty; public string? CarrierName { get; set; } public string LifecycleStatus { get; set; } = "inTransit"; public string? Remark { get; set; } public List Items { get; set; } = []; } public class WarehouseParcelPutawayItemInput { public int ItemId { get; set; } public int SkuId { get; set; } public int BinLocationId { get; set; } } public class WarehouseParcelPutawayInput { [Required] public int ParcelId { get; set; } public int? CustomerId { get; set; } public List Items { get; set; } = []; } // --- Inventory --- public class WarehouseInventoryListInput : WarehousePageInput { public int? WarehouseId { get; set; } public string? Keyword { get; set; } } public class WarehouseInventoryOutput { public int SkuId { get; set; } public string SkuCode { get; set; } = string.Empty; public string SkuName { get; set; } = string.Empty; public int WarehouseId { get; set; } public int TotalQty { get; set; } public int BinCount { get; set; } } public class WarehouseInventoryBinDetailOutput { public int Id { get; set; } public int BinLocationId { get; set; } public string BinCode { get; set; } = string.Empty; public string? BinName { get; set; } public int Qty { get; set; } } public class WarehouseInventoryRelocateInput { public int? CustomerId { get; set; } [Required] public int WarehouseId { get; set; } [Required] public int SkuId { get; set; } [Required] public int SourceBinLocationId { get; set; } [Required] public int TargetBinLocationId { get; set; } [Range(1, int.MaxValue)] public int Qty { get; set; } } // --- Parcel arrival(快递到仓)--- public class WarehouseParcelArrivalListInput : WarehousePageInput { public int? WarehouseId { get; set; } public string? Keyword { get; set; } } public class WarehouseParcelArrivalCreateInput { public int? CustomerId { get; set; } [Required] public int WarehouseId { get; set; } [Required] public string TrackingNo { get; set; } = string.Empty; } public class WarehouseParcelArrivalOutput { public int Id { get; set; } public int CustomerId { get; set; } public int WarehouseId { get; set; } public string? WarehouseName { get; set; } public int? ParcelId { get; set; } public string TrackingNo { get; set; } = string.Empty; public DateTime CreateTime { get; set; } public int CreateUserId { get; set; } public string? CreateBy { get; set; } }