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