Files
OrpaonVision/OrpaonVision.Model/Security/ProductPermissionModel.cs
2026-04-06 22:04:05 +08:00

373 lines
7.5 KiB
C#
Raw Blame History

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