namespace OrpaonVision.Model.Security; /// /// 机种权限模型。 /// public sealed class ProductPermissionModel { /// /// 权限ID。 /// public Guid Id { get; set; } /// /// 机种ID。 /// public Guid ProductTypeId { get; set; } /// /// 用户ID。 /// public Guid UserId { get; set; } /// /// 角色ID。 /// public Guid RoleId { get; set; } /// /// 权限类型。 /// public ProductPermissionType PermissionType { get; set; } /// /// 是否启用。 /// public bool IsEnabled { get; set; } /// /// 授权时间(UTC)。 /// public DateTime GrantedAtUtc { get; set; } /// /// 授权人。 /// public string GrantedBy { get; set; } = string.Empty; /// /// 过期时间(UTC)。 /// public DateTime? ExpiresAtUtc { get; set; } /// /// 备注。 /// public string? Remark { get; set; } /// /// 创建时间(UTC)。 /// public DateTime CreatedAtUtc { get; set; } /// /// 创建人。 /// public string CreatedBy { get; set; } = string.Empty; /// /// 更新时间(UTC)。 /// public DateTime UpdatedAtUtc { get; set; } /// /// 更新人。 /// public string UpdatedBy { get; set; } = string.Empty; } /// /// 机种权限类型枚举。 /// public enum ProductPermissionType { /// /// 查看权限。 /// View = 0, /// /// 编辑权限。 /// Edit = 1, /// /// 发布权限。 /// Publish = 2, /// /// 切换权限。 /// Switch = 3, /// /// 强制切换权限(班组长专用)。 /// ForceSwitch = 4, /// /// 管理权限。 /// Manage = 5 } /// /// 机种锁定记录模型。 /// public sealed class ProductLockRecordModel { /// /// 记录ID。 /// public Guid Id { get; set; } /// /// 机种ID。 /// public Guid ProductTypeId { get; set; } /// /// 锁定类型。 /// public ProductLockType LockType { get; set; } /// /// 锁定原因。 /// public string LockReason { get; set; } = string.Empty; /// /// 锁定人ID。 /// public Guid LockedByUserId { get; set; } /// /// 锁定人姓名。 /// public string LockedByName { get; set; } = string.Empty; /// /// 锁定时间(UTC)。 /// public DateTime LockedAtUtc { get; set; } /// /// 预计解锁时间(UTC)。 /// public DateTime? ExpectedUnlockAtUtc { get; set; } /// /// 实际解锁时间(UTC)。 /// public DateTime? UnlockedAtUtc { get; set; } /// /// 解锁人ID。 /// public Guid? UnlockedByUserId { get; set; } /// /// 解锁人姓名。 /// public string? UnlockedByName { get; set; } /// /// 解锁原因。 /// public string? UnlockReason { get; set; } /// /// 是否已解锁。 /// public bool IsUnlocked { get; set; } /// /// 创建时间(UTC)。 /// public DateTime CreatedAtUtc { get; set; } /// /// 创建人。 /// public string CreatedBy { get; set; } = string.Empty; } /// /// 机种锁定类型枚举。 /// public enum ProductLockType { /// /// 权限锁定。 /// Permission = 0, /// /// 配置锁定。 /// Configuration = 1, /// /// 运行锁定。 /// Runtime = 2, /// /// 维护锁定。 /// Maintenance = 3, /// /// 审计锁定。 /// Audit = 4, /// /// 紧急锁定。 /// Emergency = 5 } /// /// 机种切换记录模型。 /// public sealed class ProductSwitchRecordModel { /// /// 记录ID。 /// public Guid Id { get; set; } /// /// 源机种ID。 /// public Guid? SourceProductTypeId { get; set; } /// /// 源机种编码。 /// public string? SourceProductTypeCode { get; set; } /// /// 目标机种ID。 /// public Guid TargetProductTypeId { get; set; } /// /// 目标机种编码。 /// public string TargetProductTypeCode { get; set; } = string.Empty; /// /// 切换类型。 /// public ProductSwitchType SwitchType { get; set; } /// /// 切换原因。 /// public string SwitchReason { get; set; } = string.Empty; /// /// 切换人ID。 /// public Guid SwitchedByUserId { get; set; } /// /// 切换人姓名。 /// public string SwitchedByName { get; set; } = string.Empty; /// /// 切换人角色。 /// public string SwitchedByRole { get; set; } = string.Empty; /// /// 切换时间(UTC)。 /// public DateTime SwitchedAtUtc { get; set; } /// /// 是否强制切换。 /// public bool IsForced { get; set; } /// /// 强制切换原因。 /// public string? ForcedReason { get; set; } /// /// 审批人ID(强制切换时需要)。 /// public Guid? ApprovedByUserId { get; set; } /// /// 审批人姓名。 /// public string? ApprovedByName { get; set; } /// /// 审批时间(UTC)。 /// public DateTime? ApprovedAtUtc { get; set; } /// /// 审批意见。 /// public string? ApprovalComment { get; set; } /// /// 切换前状态。 /// public string? PreviousStateJson { get; set; } /// /// 切换后状态。 /// public string? NewStateJson { get; set; } /// /// 创建时间(UTC)。 /// public DateTime CreatedAtUtc { get; set; } /// /// 创建人。 /// public string CreatedBy { get; set; } = string.Empty; } /// /// 机种切换类型枚举。 /// public enum ProductSwitchType { /// /// 正常切换。 /// Normal = 0, /// /// 强制切换。 /// Forced = 1, /// /// 紧急切换。 /// Emergency = 2, /// /// 计划切换。 /// Planned = 3, /// /// 回滚切换。 /// Rollback = 4 }