From 9906c0637173b47f7de910a96350c54413ed8a4e Mon Sep 17 00:00:00 2001 From: MysticBoy Date: Wed, 23 Mar 2022 23:23:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20=E9=81=A5=E6=B5=8B?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20=E7=9A=84=E6=97=B6=E9=97=B4=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IoTSharp.Data/Enums.cs | 21 ++++++++++++ IoTSharp/Controllers/DevicesController.cs | 11 ++++-- IoTSharp/Dtos/TelemetryDataDto.cs | 41 ++++++++++++++++++++++- IoTSharp/IoTSharp.xml | 5 +++ 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/IoTSharp.Data/Enums.cs b/IoTSharp.Data/Enums.cs index d7ad5c90..d28944f3 100644 --- a/IoTSharp.Data/Enums.cs +++ b/IoTSharp.Data/Enums.cs @@ -173,12 +173,33 @@ namespace IoTSharp.Data /// 不使用 /// None, + /// + /// 平均数 + /// Mean, + /// + /// 中值 + /// Median, + /// + /// 最后一个值 + /// Last, + /// + /// 第一个值 + /// First, + /// + /// 最大 + /// Max, + /// + /// 最小 + /// Min, + /// + /// 合计 + /// Sum } diff --git a/IoTSharp/Controllers/DevicesController.cs b/IoTSharp/Controllers/DevicesController.cs index 9b7f312e..36cd4edc 100644 --- a/IoTSharp/Controllers/DevicesController.cs +++ b/IoTSharp/Controllers/DevicesController.cs @@ -527,8 +527,15 @@ namespace IoTSharp.Controllers /// /// 返回指定设备的的遥测数据, 按照keyname 和指定时间范围获取,如果keyname 为 all , 则返回全部key 的数据 /// - /// Which device do you read? - /// 查询条件 + /// 指定设备ID + /// 查询条件例子: + ///{ + /// "keys": "", + /// "begin": "2022-03-23T11:44:56.488Z", + /// "every": "1.03:14:56:166", + /// "aggregate": "Mean" + /// } + /// /// [Authorize(Roles = nameof(UserRole.NormalUser))] [HttpPost("{deviceId}/TelemetryData")] diff --git a/IoTSharp/Dtos/TelemetryDataDto.cs b/IoTSharp/Dtos/TelemetryDataDto.cs index 87729dff..b02791ca 100644 --- a/IoTSharp/Dtos/TelemetryDataDto.cs +++ b/IoTSharp/Dtos/TelemetryDataDto.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Text.Json; using System.Threading.Tasks; namespace IoTSharp.Dtos @@ -16,6 +17,39 @@ namespace IoTSharp.Dtos public object Value { get; set; } } + public class TimespanConverterNewtonsoft : Newtonsoft.Json.JsonConverter + { + /// + /// Format: Days.Hours:Minutes:Seconds:Milliseconds + /// + public const string TimeSpanFormatString = @"d\.hh\:mm\:ss\:FFF"; + + public override void WriteJson(Newtonsoft.Json.JsonWriter writer, TimeSpan value, Newtonsoft.Json.JsonSerializer serializer) + { + var timespanFormatted = $"{value.ToString(TimeSpanFormatString)}"; + writer.WriteValue(timespanFormatted); + } + + public override TimeSpan ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, TimeSpan existingValue, bool hasExistingValue, Newtonsoft.Json.JsonSerializer serializer) + { + TimeSpan parsedTimeSpan; + TimeSpan.TryParseExact((string)reader.Value, TimeSpanFormatString, null, out parsedTimeSpan); + return parsedTimeSpan; + } + } + public class TimeSpanConverter : System.Text.Json.Serialization.JsonConverter + { + public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return TimeSpan.Parse(reader.GetString()); + } + + public override void Write(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString()); + } + } + /// /// 查询历史遥测数据请求结构体 /// @@ -24,7 +58,7 @@ namespace IoTSharp.Dtos /// /// 要获取的键值, 如果为空, 则为全部 /// - public string keys { get; set; }=String.Empty; + public string keys { get; set; }= string.Empty; /// /// 开始时间 /// @@ -36,6 +70,11 @@ namespace IoTSharp.Dtos /// /// 数据截面聚合间隔 /// + /// 1.03:14:56:166 + /// d.hh:mm:ss:FFF + [Newtonsoft.Json. JsonConverter(typeof(TimespanConverterNewtonsoft))] + [Newtonsoft.Json.JsonProperty(TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All)] + [System.Text.Json.Serialization.JsonConverter(typeof(TimeSpanConverter))] public TimeSpan every { get; set; }= TimeSpan.Zero; /// /// 数据截面计算方式, diff --git a/IoTSharp/IoTSharp.xml b/IoTSharp/IoTSharp.xml index a7c73ab0..43634547 100644 --- a/IoTSharp/IoTSharp.xml +++ b/IoTSharp/IoTSharp.xml @@ -701,6 +701,11 @@ 是否被安装 + + + Format: Days.Hours:Minutes:Seconds:Milliseconds + + 查询历史遥测数据请求结构体 -- GitLab