230 lines
9.0 KiB
C#
230 lines
9.0 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using MiGu.Server.Persistence;
|
|
|
|
namespace MiGu.Server.Wms;
|
|
|
|
public abstract class WarehouseHistoryBase
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public Guid? RelationId { get; set; }
|
|
public string EventType { get; set; } = "";
|
|
public string BeforeJson { get; set; } = "{}";
|
|
public string AfterJson { get; set; } = "{}";
|
|
public Guid? ContainerId { get; set; }
|
|
public string Operator { get; set; } = "";
|
|
public DateTimeOffset OperatedAt { get; set; }
|
|
public string Source { get; set; } = "Manual";
|
|
public string Reason { get; set; } = "";
|
|
public string Remark { get; set; } = "";
|
|
public string Extend { get; set; } = "{}";
|
|
}
|
|
|
|
public sealed class WarehouseArea : EntityBase
|
|
{
|
|
[MaxLength(64)] public string Code { get; set; } = "";
|
|
[MaxLength(128)] public string Name { get; set; } = "";
|
|
[MaxLength(64)] public string Type { get; set; } = "Storage";
|
|
public bool Enabled { get; set; } = true;
|
|
public int SortOrder { get; set; }
|
|
}
|
|
|
|
public sealed class Storage : EntityBase
|
|
{
|
|
public Guid AreaId { get; set; }
|
|
[MaxLength(64)] public string Code { get; set; } = "";
|
|
[MaxLength(128)] public string Name { get; set; } = "";
|
|
[MaxLength(64)] public string StorageType { get; set; } = "Storage";
|
|
[MaxLength(64)] public string SiteId { get; set; } = "";
|
|
public int Capacity { get; set; }
|
|
[MaxLength(32)] public string Status { get; set; } = StorageStatuses.Available;
|
|
[MaxLength(64)] public string Usage { get; set; } = "";
|
|
public int Priority { get; set; }
|
|
[MaxLength(64)] public string ZoneCode { get; set; } = "";
|
|
public bool AllowInbound { get; set; } = true;
|
|
public bool AllowOutbound { get; set; } = true;
|
|
public bool Enabled { get; set; } = true;
|
|
}
|
|
|
|
public sealed class Container : EntityBase
|
|
{
|
|
[MaxLength(64)] public string Code { get; set; } = "";
|
|
[MaxLength(128)] public string Name { get; set; } = "";
|
|
[MaxLength(64)] public string ContainerType { get; set; } = "Box";
|
|
[MaxLength(64)] public string Status { get; set; } = "Idle";
|
|
public bool Enabled { get; set; } = true;
|
|
}
|
|
|
|
public sealed class Material : EntityBase
|
|
{
|
|
[MaxLength(64)] public string Code { get; set; } = "";
|
|
[MaxLength(128)] public string Name { get; set; } = "";
|
|
[MaxLength(128)] public string Spec { get; set; } = "";
|
|
[MaxLength(32)] public string Unit { get; set; } = "pcs";
|
|
[MaxLength(64)] public string Category { get; set; } = "";
|
|
public bool Enabled { get; set; } = true;
|
|
}
|
|
|
|
public sealed class ContainerLocation : EntityBase
|
|
{
|
|
public Guid ContainerId { get; set; }
|
|
[MaxLength(32)] public string LocationType { get; set; } = ContainerLocationTypes.Storage;
|
|
[MaxLength(64)] public string LocationId { get; set; } = "";
|
|
[MaxLength(64)] public string LocationCode { get; set; } = "";
|
|
[MaxLength(128)] public string LocationName { get; set; } = "";
|
|
[MaxLength(32)] public string Status { get; set; } = ContainerLocationStatuses.Active;
|
|
public DateTimeOffset EnteredAt { get; set; }
|
|
}
|
|
|
|
public sealed class ContainerMaterial : EntityBase
|
|
{
|
|
public Guid ContainerId { get; set; }
|
|
public Guid MaterialId { get; set; }
|
|
public decimal Quantity { get; set; }
|
|
[MaxLength(64)] public string BatchNo { get; set; } = "";
|
|
[MaxLength(64)] public string SerialNo { get; set; } = "";
|
|
[MaxLength(32)] public string Status { get; set; } = ContainerMaterialStatuses.Loaded;
|
|
public DateTimeOffset LoadedAt { get; set; }
|
|
public DateTimeOffset? UnloadedAt { get; set; }
|
|
}
|
|
|
|
public sealed class ContainerLocationHistory : WarehouseHistoryBase
|
|
{
|
|
[MaxLength(32)] public string FromLocationType { get; set; } = "";
|
|
[MaxLength(64)] public string FromLocationId { get; set; } = "";
|
|
[MaxLength(32)] public string ToLocationType { get; set; } = "";
|
|
[MaxLength(64)] public string ToLocationId { get; set; } = "";
|
|
}
|
|
|
|
public sealed class ContainerMaterialHistory : WarehouseHistoryBase
|
|
{
|
|
public Guid? MaterialId { get; set; }
|
|
public decimal QuantityDelta { get; set; }
|
|
}
|
|
|
|
public static class ContainerLocationTypes
|
|
{
|
|
public const string Storage = "Storage";
|
|
public const string Car = "Car";
|
|
public static readonly HashSet<string> All = new(StringComparer.OrdinalIgnoreCase) { Storage, Car };
|
|
}
|
|
|
|
public static class ContainerLocationStatuses
|
|
{
|
|
public const string Active = "Active";
|
|
public const string Locked = "Locked";
|
|
public const string Exception = "Exception";
|
|
public static readonly HashSet<string> All = new(StringComparer.OrdinalIgnoreCase) { Active, Locked, Exception };
|
|
}
|
|
|
|
public static class ContainerMaterialStatuses
|
|
{
|
|
public const string Loaded = "Loaded";
|
|
public const string Unloaded = "Unloaded";
|
|
public const string Adjusted = "Adjusted";
|
|
public const string Frozen = "Frozen";
|
|
public static readonly HashSet<string> All = new(StringComparer.OrdinalIgnoreCase) { Loaded, Unloaded, Adjusted, Frozen };
|
|
}
|
|
|
|
public static class StorageStatuses
|
|
{
|
|
public const string Available = "Available";
|
|
public const string Idle = "Idle";
|
|
public const string Occupied = "Occupied";
|
|
public const string Disabled = "Disabled";
|
|
public static readonly HashSet<string> All = new(StringComparer.OrdinalIgnoreCase) { Available, Idle, Occupied, Disabled };
|
|
}
|
|
|
|
public static class StorageTypes
|
|
{
|
|
public const string Storage = "Storage";
|
|
public const string LineSide = "LineSide";
|
|
public const string OfflinePoint = "OfflinePoint";
|
|
public const string Buffer = "Buffer";
|
|
public const string FinishedGoods = "FinishedGoods";
|
|
}
|
|
|
|
public static class WmsTransportTriggerTypes
|
|
{
|
|
public const string MaterialCall = "MaterialCall";
|
|
public const string FinishedGoodsOffline = "FinishedGoodsOffline";
|
|
public const string AutoTransfer = "AutoTransfer";
|
|
public static readonly HashSet<string> All = new(StringComparer.OrdinalIgnoreCase)
|
|
{ MaterialCall, FinishedGoodsOffline, AutoTransfer };
|
|
}
|
|
|
|
public static class WmsTransportTaskStatuses
|
|
{
|
|
public const string Pending = "Pending";
|
|
public const string Reserved = "Reserved";
|
|
public const string Dispatched = "Dispatched";
|
|
public const string InTransit = "InTransit";
|
|
public const string Completed = "Completed";
|
|
public const string Failed = "Failed";
|
|
public const string Cancelled = "Cancelled";
|
|
public static readonly HashSet<string> Active = new(StringComparer.OrdinalIgnoreCase)
|
|
{ Pending, Reserved, Dispatched, InTransit };
|
|
public static readonly HashSet<string> All = new(StringComparer.OrdinalIgnoreCase)
|
|
{ Pending, Reserved, Dispatched, InTransit, Completed, Failed, Cancelled };
|
|
}
|
|
|
|
public static class WmsReservationStatuses
|
|
{
|
|
public const string Active = "Active";
|
|
public const string Released = "Released";
|
|
public const string Expired = "Expired";
|
|
}
|
|
|
|
public sealed class WmsTransportRule : EntityBase
|
|
{
|
|
[MaxLength(64)] public string Code { get; set; } = "";
|
|
[MaxLength(128)] public string Name { get; set; } = "";
|
|
[MaxLength(64)] public string TriggerType { get; set; } = WmsTransportTriggerTypes.MaterialCall;
|
|
public bool Enabled { get; set; } = true;
|
|
public int Priority { get; set; }
|
|
public string SourceSelectorJson { get; set; } = "{}";
|
|
public string TargetSelectorJson { get; set; } = "{}";
|
|
public string TaskOptionsJson { get; set; } = "{}";
|
|
}
|
|
|
|
public sealed class WmsTransportTask : EntityBase
|
|
{
|
|
[MaxLength(64)] public string BusinessType { get; set; } = "";
|
|
public Guid? RuleId { get; set; }
|
|
public Guid SourceStorageId { get; set; }
|
|
public Guid TargetStorageId { get; set; }
|
|
public Guid ContainerId { get; set; }
|
|
public Guid? MaterialId { get; set; }
|
|
public decimal? Quantity { get; set; }
|
|
[MaxLength(32)] public string Status { get; set; } = WmsTransportTaskStatuses.Pending;
|
|
[MaxLength(64)] public string DispatchMissionId { get; set; } = "";
|
|
[MaxLength(64)] public string DeliveryId { get; set; } = "";
|
|
[MaxLength(32)] public string DispatchStatus { get; set; } = "";
|
|
[MaxLength(500)] public string Reason { get; set; } = "";
|
|
public string SnapshotJson { get; set; } = "{}";
|
|
[MaxLength(1000)] public string ErrorMessage { get; set; } = "";
|
|
public int TaskPriority { get; set; }
|
|
}
|
|
|
|
public sealed class WmsTransportReservation : EntityBase
|
|
{
|
|
public Guid TaskId { get; set; }
|
|
public Guid ContainerId { get; set; }
|
|
public Guid SourceStorageId { get; set; }
|
|
public Guid TargetStorageId { get; set; }
|
|
[MaxLength(32)] public string Status { get; set; } = WmsReservationStatuses.Active;
|
|
public DateTimeOffset? ExpiresAt { get; set; }
|
|
}
|
|
|
|
public sealed class WmsTransportTaskHistory
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public Guid TaskId { get; set; }
|
|
[MaxLength(32)] public string FromStatus { get; set; } = "";
|
|
[MaxLength(32)] public string ToStatus { get; set; } = "";
|
|
[MaxLength(128)] public string Operator { get; set; } = "";
|
|
public DateTimeOffset OperatedAt { get; set; }
|
|
[MaxLength(500)] public string Reason { get; set; } = "";
|
|
[MaxLength(1000)] public string ErrorMessage { get; set; } = "";
|
|
public string SnapshotJson { get; set; } = "{}";
|
|
}
|