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
}