using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using XdCxRhDW.Dto.Attribute; namespace XdCxRhDW.Dto { /// /// 检测计算模型 /// public class DetectDto : IValidatableObject { /// /// 调用Upload接口上传文件后返回的文件名 /// [FileMustExist] public string file1 { get; set; } /// /// 检测类型 /// public EnumSigCheckTypeDto dmcType { get; set; } /// /// 多个检测类型时是否合并检测结果(重叠的信号只算一个,重叠区域超过500样点则认为是同一个) /// public bool mergeRes { get; set; } = false; /// /// 采样率 Hz /// [RangeDouble(0, 100e6, IncludeMin = true)] public double fsHz { get; set; } /// /// 信号带宽(KHz,只对IBS信号有效,默认25KHz) /// [RangeDouble(0, 100)] public double band { get; set; } = 25; /// /// 是否对信号进行识别(获取调制类型、速率、频偏等) /// public bool SigProc { get; set; } = false; /// /// 超时时间(单位秒,默认30秒) /// [RangeInt(10, 600, IncludeMin = true)] public int TimeoutSeconds { get; set; } = 30; /// /// /// /// /// public IEnumerable Validate(ValidationContext validationContext) { var fields = typeof(EnumSigCheckTypeDto).GetFields().Where(p => p.FieldType.IsEnum); bool hasError = true; foreach (var field in fields) { var value = field.GetValue(null); if (this.dmcType.HasFlag((Enum)value)) { hasError = false; break; } } if (hasError) yield return new ValidationResult("检测类型错误", new[] { nameof(this.dmcType) }); else { if (dmcType.HasFlag(EnumSigCheckTypeDto.Normal)) { yield return new ValidationResult("常规信号不需要检测", new[] { nameof(this.dmcType) }); } if (dmcType.HasFlag(EnumSigCheckTypeDto.DAMA) && fsHz != 96000) { yield return new ValidationResult("DAMA检测采样率只支持96K", new[] { nameof(this.fsHz) }); } if (dmcType.HasFlag(EnumSigCheckTypeDto.IBS) && band != 5 && band != 25) { yield return new ValidationResult("IBS检测信号带宽只支持5K、25K两种", new[] { nameof(this.band) }); } } yield return null; } } }