2026-03-04 12:13:49 +08:00
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
|
|
|
|
|
|
|
|
namespace YD_Event.Application.Certificate.Dtos;
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 更新DOC模板输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UpdateDocTemplateInput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 模板ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "模板ID不能为空")]
|
|
|
|
|
|
public long Id { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 版本号
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "版本号不能为空")]
|
|
|
|
|
|
public int Version { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// DOC模板文件(可选)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public IFormFile TemplateFile { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 像素宽度
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "宽度不能为空")]
|
|
|
|
|
|
[Range(100, 5000, ErrorMessage = "宽度必须在100-5000像素之间")]
|
|
|
|
|
|
public int Width { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 像素高度
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "高度不能为空")]
|
|
|
|
|
|
[Range(100, 5000, ErrorMessage = "高度必须在100-5000像素之间")]
|
|
|
|
|
|
public int Height { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否当前激活版本
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsActive { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 证书模板上传结果
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class CertificateTemplateUploadResult
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 模板ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long TemplateId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 模板文件URL
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string TemplateUrl { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检测到的占位符列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<DetectedPlaceholderOutput> DetectedPlaceholders { get; set; } = new();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 总占位符数量
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int TotalPlaceholders { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 有效占位符数量
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int ValidPlaceholders { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检测占位符输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class DetectPlaceholdersInput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// DOC模板文件
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "请选择DOC模板文件")]
|
|
|
|
|
|
public IFormFile TemplateFile { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 保存占位符配置输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class SavePlaceholdersInput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 模板ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "模板ID不能为空")]
|
|
|
|
|
|
public long TemplateId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "占位符列表不能为空")]
|
|
|
|
|
|
public List<PlaceholderInput> Placeholders { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class PlaceholderInput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符键名
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "占位符键名不能为空")]
|
|
|
|
|
|
[StringLength(50, ErrorMessage = "占位符键名长度不能超过50个字符")]
|
|
|
|
|
|
public string PlaceholderKey { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 显示名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "显示名称不能为空")]
|
|
|
|
|
|
[StringLength(100, ErrorMessage = "显示名称长度不能超过100个字符")]
|
|
|
|
|
|
public string DisplayName { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "占位符类型不能为空")]
|
|
|
|
|
|
public string PlaceholderType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 默认值
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string DefaultValue { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否必填
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsRequired { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 验证规则
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string ValidationRule { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 描述
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Description { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 排序
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int Sort { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class PlaceholderOutput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long Id { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 模板ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long TemplateId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符键名
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string PlaceholderKey { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 显示名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string DisplayName { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string PlaceholderType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 默认值
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string DefaultValue { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否必填
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsRequired { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 验证规则
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string ValidationRule { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 描述
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Description { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 排序
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int Sort { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检测到的占位符输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class DetectedPlaceholderOutput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符键名
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string PlaceholderKey { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string PlaceholderType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否有效
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsValid { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 验证消息
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string ValidationMessage { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 建议的显示名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string SuggestedDisplayName { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符检测结果
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class PlaceholderDetectionResult
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检测到的占位符列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<DetectedPlaceholderOutput> Placeholders { get; set; } = new();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 总数
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int TotalCount => Placeholders.Count;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 有效数量
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int ValidCount { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 无效数量
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int InvalidCount { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 证书模板输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class CertificateTemplateOutput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long Id { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 版本号
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int Version { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 模板类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string TemplateType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// DOC模板URL
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string DocxTemplateUrl { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否当前激活版本
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsActive { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 状态
|
|
|
|
|
|
/// </summary>
|
2026-03-25 09:09:45 +08:00
|
|
|
|
public AvailabilityStatus Status { get; set; }
|
2026-03-04 12:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 创建时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime CreatedTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 占位符列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<PlaceholderOutput> Placeholders { get; set; } = new();
|
|
|
|
|
|
}
|