using System.ComponentModel.DataAnnotations;
using MilitaryTrainingManagement.Models.Enums;
namespace MilitaryTrainingManagement.Models.DTOs;
///
/// 创建人员请求DTO
///
public class CreatePersonnelRequest
{
[Required(ErrorMessage = "姓名不能为空")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "姓名长度应在2-50个字符之间")]
public string Name { get; set; } = string.Empty;
[StringLength(100, ErrorMessage = "单位长度不能超过100个字符")]
public string? Unit { get; set; }
[Required(ErrorMessage = "职位不能为空")]
[StringLength(100, ErrorMessage = "职位长度不能超过100个字符")]
public string Position { get; set; } = string.Empty;
[Required(ErrorMessage = "军衔不能为空")]
[StringLength(50, ErrorMessage = "军衔长度不能超过50个字符")]
public string Rank { get; set; } = string.Empty;
[StringLength(50, ErrorMessage = "士兵证号长度不能超过50个字符")]
public string? IdNumber { get; set; }
[StringLength(100, ErrorMessage = "专业岗位长度不能超过100个字符")]
public string? ProfessionalTitle { get; set; }
[StringLength(50, ErrorMessage = "文化程度长度不能超过50个字符")]
public string? EducationLevel { get; set; }
[StringLength(50, ErrorMessage = "民族长度不能超过50个字符")]
public string? Ethnicity { get; set; }
[StringLength(50, ErrorMessage = "政治面貌长度不能超过50个字符")]
public string? PoliticalStatus { get; set; }
[StringLength(20, ErrorMessage = "出生年月格式不正确")]
public string? BirthDate { get; set; }
[StringLength(20, ErrorMessage = "入伍年月格式不正确")]
public string? EnlistmentDate { get; set; }
[StringLength(200, ErrorMessage = "籍贯长度不能超过200个字符")]
public string? Hometown { get; set; }
[StringLength(200, ErrorMessage = "特长长度不能超过200个字符")]
public string? Specialty { get; set; }
[StringLength(1000, ErrorMessage = "参加培训、集训情况长度不能超过1000个字符")]
public string? TrainingParticipation { get; set; }
[StringLength(1000, ErrorMessage = "取得成绩长度不能超过1000个字符")]
public string? Achievements { get; set; }
}
///
/// 更新人员请求DTO
///
public class UpdatePersonnelRequest
{
[Required(ErrorMessage = "姓名不能为空")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "姓名长度应在2-50个字符之间")]
public string Name { get; set; } = string.Empty;
[Required(ErrorMessage = "职位不能为空")]
[StringLength(100, ErrorMessage = "职位长度不能超过100个字符")]
public string Position { get; set; } = string.Empty;
[Required(ErrorMessage = "军衔不能为空")]
[StringLength(50, ErrorMessage = "军衔长度不能超过50个字符")]
public string Rank { get; set; } = string.Empty;
[Required(ErrorMessage = "性别不能为空")]
[RegularExpression("^(男|女)$", ErrorMessage = "性别必须是'男'或'女'")]
public string Gender { get; set; } = string.Empty;
[StringLength(100, ErrorMessage = "专业职位长度不能超过100个字符")]
public string? ProfessionalTitle { get; set; }
[StringLength(50, ErrorMessage = "文化程度长度不能超过50个字符")]
public string? EducationLevel { get; set; }
[Required(ErrorMessage = "年龄不能为空")]
[Range(18, 60, ErrorMessage = "年龄应在18-60岁之间")]
public int Age { get; set; }
[Range(140, 220, ErrorMessage = "身高应在140-220厘米之间")]
public decimal? Height { get; set; }
[StringLength(100, ErrorMessage = "联系方式长度不能超过100个字符")]
public string? ContactInfo { get; set; }
[StringLength(200, ErrorMessage = "籍贯长度不能超过200个字符")]
public string? Hometown { get; set; }
[StringLength(1000, ErrorMessage = "参加培训情况长度不能超过1000个字符")]
public string? TrainingParticipation { get; set; }
[StringLength(1000, ErrorMessage = "取得成绩长度不能超过1000个字符")]
public string? Achievements { get; set; }
}
///
/// 审批人员请求DTO
///
public class ApprovePersonnelRequest
{
[Required(ErrorMessage = "人员等级不能为空")]
public PersonnelLevel Level { get; set; }
}
///
/// 拒绝人员请求DTO
///
public class RejectPersonnelRequest
{
[StringLength(500, ErrorMessage = "拒绝原因长度不能超过500个字符")]
public string? Reason { get; set; }
}
///
/// 拒绝向上申报请求DTO
///
public class RejectUpgradeRequest
{
[Required(ErrorMessage = "拒绝原因不能为空")]
[StringLength(500, ErrorMessage = "拒绝原因长度不能超过500个字符")]
public string Comments { get; set; } = string.Empty;
}
///
/// 人员响应DTO
///
public class PersonnelResponse
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public string? PhotoPath { get; set; }
public string? Unit { get; set; }
public string Position { get; set; } = string.Empty;
public string Rank { get; set; } = string.Empty;
public string Gender { get; set; } = string.Empty;
public string? IdNumber { get; set; }
public string? ProfessionalTitle { get; set; }
public string? EducationLevel { get; set; }
public int Age { get; set; }
public decimal? Height { get; set; }
public string? ContactInfo { get; set; }
public string? Hometown { get; set; }
public string? TrainingParticipation { get; set; }
public string? Achievements { get; set; }
public string? SupportingDocuments { get; set; }
// 新增字段
public string? Ethnicity { get; set; }
public string? PoliticalStatus { get; set; }
public string? BirthDate { get; set; }
public string? EnlistmentDate { get; set; }
public string? Specialty { get; set; }
public int SubmittedByUnitId { get; set; }
public string? SubmittedByUnitName { get; set; }
public PersonnelLevel? ApprovedLevel { get; set; }
public int? ApprovedByUnitId { get; set; }
public string? ApprovedByUnitName { get; set; }
public PersonnelStatus Status { get; set; }
public DateTime SubmittedAt { get; set; }
public DateTime? ApprovedAt { get; set; }
public int? PendingUpgradeByUnitId { get; set; } // 待向上申报的申报单位ID
}
///
/// 人员列表响应DTO
///
public class PersonnelListResponse
{
public IEnumerable Items { get; set; } = new List();
public int TotalCount { get; set; }
}
///
/// 提交人员请求DTO(包含文件上传)
///
public class SubmitPersonnelRequest
{
[Required(ErrorMessage = "姓名不能为空")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "姓名长度应在2-50个字符之间")]
public string Name { get; set; } = string.Empty;
[StringLength(100, ErrorMessage = "单位长度不能超过100个字符")]
public string? Unit { get; set; }
[Required(ErrorMessage = "职位不能为空")]
[StringLength(100, ErrorMessage = "职位长度不能超过100个字符")]
public string Position { get; set; } = string.Empty;
[Required(ErrorMessage = "军衔不能为空")]
[StringLength(50, ErrorMessage = "军衔长度不能超过50个字符")]
public string Rank { get; set; } = string.Empty;
[StringLength(50, ErrorMessage = "士兵证号长度不能超过50个字符")]
public string? IdNumber { get; set; }
[StringLength(100, ErrorMessage = "专业岗位长度不能超过100个字符")]
public string? ProfessionalTitle { get; set; }
[StringLength(50, ErrorMessage = "文化程度长度不能超过50个字符")]
public string? EducationLevel { get; set; }
[StringLength(50, ErrorMessage = "民族长度不能超过50个字符")]
public string? Ethnicity { get; set; }
[StringLength(50, ErrorMessage = "政治面貌长度不能超过50个字符")]
public string? PoliticalStatus { get; set; }
[StringLength(20, ErrorMessage = "出生年月格式不正确")]
public string? BirthDate { get; set; }
[StringLength(20, ErrorMessage = "入伍年月格式不正确")]
public string? EnlistmentDate { get; set; }
[StringLength(200, ErrorMessage = "籍贯长度不能超过200个字符")]
public string? Hometown { get; set; }
[StringLength(200, ErrorMessage = "特长长度不能超过200个字符")]
public string? Specialty { get; set; }
[StringLength(1000, ErrorMessage = "参加培训、集训情况长度不能超过1000个字符")]
public string? TrainingParticipation { get; set; }
[StringLength(1000, ErrorMessage = "取得成绩长度不能超过1000个字符")]
public string? Achievements { get; set; }
}
///
/// 批量审批人员请求DTO
///
public class BatchApprovePersonnelRequest
{
[Required(ErrorMessage = "人员ID列表不能为空")]
public int[] PersonnelIds { get; set; } = Array.Empty();
[Required(ErrorMessage = "人员等级不能为空")]
public PersonnelLevel Level { get; set; }
}
///
/// 批量拒绝人员请求DTO
///
public class BatchRejectPersonnelRequest
{
[Required(ErrorMessage = "人员ID列表不能为空")]
public int[] PersonnelIds { get; set; } = Array.Empty();
[Required(ErrorMessage = "拒绝原因不能为空")]
[StringLength(500, ErrorMessage = "拒绝原因长度不能超过500个字符")]
public string Reason { get; set; } = string.Empty;
}
///
/// 人员转移请求DTO
///
public class TransferPersonnelRequest
{
[Required(ErrorMessage = "目标单位ID不能为空")]
public int TargetUnitId { get; set; }
}
///
/// 人员修改请求DTO
///
public class PersonnelModificationRequest
{
[Required(ErrorMessage = "修改原因不能为空")]
[StringLength(500, ErrorMessage = "修改原因长度不能超过500个字符")]
public string Reason { get; set; } = string.Empty;
[Required(ErrorMessage = "修改的人员信息不能为空")]
public UpdatePersonnelRequest ModifiedPersonnel { get; set; } = new();
}