Asoka.Wang 21f044712c 1
2025-08-27 18:39:19 +08:00

113 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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