using System.ComponentModel.DataAnnotations; using Dlhis.Entity.Device.Enums; using Kurisu.AspNetCore.Utils.Extensions; namespace Dlhis.Basic.Device.Request; public class DeviceSaveRequest : IValidatableObject { public long? Id { get; set; } /// /// 设备唯一号 /// [Required(ErrorMessage = "设备唯一号不能为空")] public string UniqueNo { get; set; } /// /// 模板code /// [Required(ErrorMessage = "模板不能为空")] public Guid TemplateCode { get; set; } /// /// 供应商信息 /// [Required(ErrorMessage = "供应商信息不能为空")] public string Supplier { get; set; } /// /// 设备功能 DeviceFuncEnumType /// [MinLength(1, ErrorMessage = "设备功能不能为空")] [Required(ErrorMessage = "设备功能不能为空")] public List Funcs { get; set; } /// /// 设备类型 DeviceTypeEnumType /// [Required(ErrorMessage = "设备类型不能为空")] [EnumDataType(typeof(DeviceTypeEnumType))] public DeviceTypeEnumType Type { get; set; } /// /// 心跳间隔 /// public int HeartbeatInterval { get; set; } /// /// 部署点 /// public string DeployPlace { get; set; } /// /// 部署坐标 /// public string DeployPosition { get; set; } /// /// 部署方向 DeviceDeployDirectionEnumType /// public DeviceDeployDirectionEnumType? DeployDirection { get; set; } /// /// 连接信息 /// [Required(ErrorMessage = "连接信息不能为空")] public string ConnectionInfo { get; set; } /// /// 是否启用 /// public bool Enable { get; set; } /// /// 是否作为考勤设备 /// public bool AsAttendance { get; set; } public bool EnableTimePeriod { get; set; } public IEnumerable Validate(ValidationContext validationContext) { if (Type != DeviceTypeEnumType.Door && AsAttendance) { yield return new ValidationResult($"{DeviceTypeEnumType.Door.GetDescription()}才可设置作为考勤设备", new[] { nameof(AsAttendance) }); } if (HeartbeatInterval < 0) { yield return new ValidationResult("心跳间隔不可小于0", new[] { nameof(HeartbeatInterval) }); } } }