using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Input; /// /// 撤销整合记录输入参数 /// 包含撤销操作的所有必要信息和业务规则 /// /// 业务思考: /// 1. 撤销是发布后的逆向操作,需要严格的权限控制 /// 2. 撤销会将任务状态从Assigned回退到PendingIntegration /// 3. 撤销操作必须记录详细的审计信息 /// 4. 支持部分撤销,提高操作的灵活性 /// public class CancelIntegrationRecordInput { /// /// 整合记录ID /// [Required(ErrorMessage = "整合记录ID不能为空")] [Range(1, long.MaxValue, ErrorMessage = "整合记录ID必须大于0")] public long IntegrationRecordId { get; set; } /// /// 撤销操作员用户ID /// [Required(ErrorMessage = "撤销操作员用户ID不能为空")] [Range(1, long.MaxValue, ErrorMessage = "撤销操作员用户ID必须大于0")] public long CancelledByUserId { get; set; } /// /// 撤销操作员用户名 /// [Required(ErrorMessage = "撤销操作员用户名不能为空")] [StringLength(50, ErrorMessage = "撤销操作员用户名长度不能超过50个字符")] public string CancelledByUserName { get; set; } = string.Empty; /// /// 撤销原因 /// 必填字段,用于审计和问题追踪 /// [Required(ErrorMessage = "撤销原因不能为空")] [StringLength(500, ErrorMessage = "撤销原因长度不能超过500个字符")] public string CancelReason { get; set; } = string.Empty; /// /// 是否强制撤销 /// 当存在已开始执行的任务时,是否强制撤销 /// 需要更高级别的权限 /// public bool ForceCancelInProgressTasks { get; set; } = false; /// /// 是否通知相关人员 /// 撤销后是否通知已分配的人员和设备管理员 /// public bool NotifyRelatedPersonnel { get; set; } = true; /// /// 撤销范围限制 /// 指定只撤销特定任务,null表示撤销整合记录中的所有任务 /// /// 业务价值: /// - 支持部分撤销功能,提高撤销的灵活性 /// - 当某些任务需要重新分配时,可以单独撤销 /// - 减少对正常执行任务的影响 /// public List? SpecificTaskIds { get; set; } /// /// 撤销后处理方式 /// 控制撤销后任务的处理方式 /// public CancelAfterProcessingType AfterProcessingType { get; set; } = CancelAfterProcessingType.ReturnToPendingIntegration; } /// /// 撤销后处理方式枚举 /// public enum CancelAfterProcessingType { /// /// 回退到待整合状态 /// 任务状态回退到PendingIntegration,等待重新整合 /// ReturnToPendingIntegration = 0, /// /// 标记为需要重新分配 /// 任务保持在特殊状态,需要手动处理 /// MarkForReassignment = 1, /// /// 暂停任务 /// 将任务状态设置为暂停,等待进一步决策 /// PauseTasks = 2 }