版本260406

This commit is contained in:
2026-04-06 22:04:05 +08:00
parent 7dc5e73af7
commit 0b150470be
216 changed files with 98993 additions and 33 deletions

View File

@@ -0,0 +1,372 @@
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
}