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; } }