using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Input;
///
/// 发布整合记录输入参数
/// 包含发布操作的所有必要信息和业务规则验证参数
///
/// 业务思考:
/// 1. 发布是整合记录生命周期的关键节点,需要严格的权限验证
/// 2. 发布后任务状态将从PendingIntegration更新为Assigned,这是不可逆操作
/// 3. 支持发布备注,记录发布的业务背景和特殊说明
/// 4. 包含强制发布选项,应对特殊业务场景但需要额外权限
///
public class PublishIntegrationRecordInput
{
///
/// 整合记录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 PublishedByUserId { get; set; }
///
/// 发布操作员用户名
///
[Required(ErrorMessage = "发布操作员用户名不能为空")]
[StringLength(50, ErrorMessage = "发布操作员用户名长度不能超过50个字符")]
public string PublishedByUserName { get; set; } = string.Empty;
///
/// 发布操作员真实姓名
///
[Required(ErrorMessage = "发布操作员真实姓名不能为空")]
[StringLength(50, ErrorMessage = "发布操作员真实姓名长度不能超过50个字符")]
public string PublishedByRealName { get; set; } = string.Empty;
///
/// 发布说明
/// 记录发布的业务背景、特殊情况或注意事项
///
[StringLength(500, ErrorMessage = "发布说明长度不能超过500个字符")]
public string PublishRemarks { get; set; } = string.Empty;
///
/// 是否跳过发布前验证
/// 默认false,true时需要额外权限验证
///
/// 业务意义:
/// - 正常情况应该为false,进行完整的发布前验证
/// - 紧急情况下可以设为true,但需要管理员权限
/// - 跳过验证的发布需要记录审计日志
///
public bool SkipPrePublishValidation { get; set; } = false;
///
/// 是否强制发布
/// 当发现潜在冲突但仍需要发布时使用,需要特殊权限
///
/// 业务场景:
/// - 临时调整导致的轻微冲突但业务必须继续
/// - 系统维护期间的特殊发布需求
/// - 应急处理场景下的破例发布
///
public bool ForcePublish { get; set; } = false;
///
/// 预期发布生效时间
/// null表示立即生效,否则按指定时间生效
///
/// 业务考虑:
/// - 支持定时发布功能,便于计划性任务安排
/// - 立即发布适用于紧急任务调度
/// - 定时发布可以配合班次计划进行优化
///
public DateTime? ScheduledPublishTime { get; set; }
///
/// 发布后是否自动开始任务
/// 控制发布后是否将任务状态进一步更新为InProgress
///
/// 业务逻辑:
/// - true:发布后任务自动开始执行(PendingIntegration -> Assigned -> InProgress)
/// - false:发布后任务处于已分配状态,等待手动开始(PendingIntegration -> Assigned)
///
public bool AutoStartTasksAfterPublish { get; set; } = false;
///
/// 通知相关人员
/// 发布后是否通知相关的人员和设备管理员
///
public bool NotifyRelatedPersonnel { get; set; } = true;
///
/// 发布范围限制
/// 指定只发布特定任务,null表示发布整合记录中的所有任务
///
/// 业务价值:
/// - 支持部分发布功能,提高发布的灵活性
/// - 当某些任务出现问题时,可以单独发布其他正常任务
/// - 便于分阶段发布和风险控制
///
public List? SpecificTaskIds { get; set; }
}