提交 9906c063 编写于 作者: 麦壳饼's avatar 麦壳饼

修正 遥测数据 的时间格式。

上级 a470c2fd
...@@ -173,12 +173,33 @@ namespace IoTSharp.Data ...@@ -173,12 +173,33 @@ namespace IoTSharp.Data
/// 不使用 /// 不使用
/// </summary> /// </summary>
None, None,
/// <summary>
/// 平均数
/// </summary>
Mean, Mean,
/// <summary>
/// 中值
/// </summary>
Median, Median,
/// <summary>
/// 最后一个值
/// </summary>
Last, Last,
/// <summary>
/// 第一个值
/// </summary>
First, First,
/// <summary>
/// 最大
/// </summary>
Max, Max,
/// <summary>
/// 最小
/// </summary>
Min, Min,
/// <summary>
/// 合计
/// </summary>
Sum Sum
} }
......
...@@ -527,8 +527,15 @@ namespace IoTSharp.Controllers ...@@ -527,8 +527,15 @@ namespace IoTSharp.Controllers
/// <summary> /// <summary>
/// 返回指定设备的的遥测数据, 按照keyname 和指定时间范围获取,如果keyname 为 all , 则返回全部key 的数据 /// 返回指定设备的的遥测数据, 按照keyname 和指定时间范围获取,如果keyname 为 all , 则返回全部key 的数据
/// </summary> /// </summary>
/// <param name="deviceId">Which device do you read?</param> /// <param name="deviceId">指定设备ID</param>
/// <param name="queryDto">查询条件</param> /// <param name="queryDto">查询条件例子:
///{
/// "keys": "",
/// "begin": "2022-03-23T11:44:56.488Z",
/// "every": "1.03:14:56:166",
/// "aggregate": "Mean"
/// }
/// </param>
/// <returns></returns> /// <returns></returns>
[Authorize(Roles = nameof(UserRole.NormalUser))] [Authorize(Roles = nameof(UserRole.NormalUser))]
[HttpPost("{deviceId}/TelemetryData")] [HttpPost("{deviceId}/TelemetryData")]
......
...@@ -3,6 +3,7 @@ using System; ...@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace IoTSharp.Dtos namespace IoTSharp.Dtos
...@@ -16,6 +17,39 @@ namespace IoTSharp.Dtos ...@@ -16,6 +17,39 @@ namespace IoTSharp.Dtos
public object Value { get; set; } public object Value { get; set; }
} }
public class TimespanConverterNewtonsoft : Newtonsoft.Json.JsonConverter<TimeSpan>
{
/// <summary>
/// Format: Days.Hours:Minutes:Seconds:Milliseconds
/// </summary>
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<TimeSpan>
{
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());
}
}
/// <summary> /// <summary>
/// 查询历史遥测数据请求结构体 /// 查询历史遥测数据请求结构体
/// </summary> /// </summary>
...@@ -24,7 +58,7 @@ namespace IoTSharp.Dtos ...@@ -24,7 +58,7 @@ namespace IoTSharp.Dtos
/// <summary> /// <summary>
/// 要获取的键值, 如果为空, 则为全部 /// 要获取的键值, 如果为空, 则为全部
/// </summary> /// </summary>
public string keys { get; set; }=String.Empty; public string keys { get; set; }= string.Empty;
/// <summary> /// <summary>
/// 开始时间 /// 开始时间
/// </summary> /// </summary>
...@@ -36,6 +70,11 @@ namespace IoTSharp.Dtos ...@@ -36,6 +70,11 @@ namespace IoTSharp.Dtos
/// <summary> /// <summary>
/// 数据截面聚合间隔 /// 数据截面聚合间隔
/// </summary> /// </summary>
/// <example>1.03:14:56:166</example>
/// <remarks>d.hh:mm:ss:FFF</remarks>
[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; public TimeSpan every { get; set; }= TimeSpan.Zero;
/// <summary> /// <summary>
/// 数据截面计算方式, /// 数据截面计算方式,
......
...@@ -701,6 +701,11 @@ ...@@ -701,6 +701,11 @@
是否被安装 是否被安装
</summary> </summary>
</member> </member>
<member name="F:IoTSharp.Dtos.TimespanConverterNewtonsoft.TimeSpanFormatString">
<summary>
Format: Days.Hours:Minutes:Seconds:Milliseconds
</summary>
</member>
<member name="T:IoTSharp.Dtos.TelemetryDataQueryDto"> <member name="T:IoTSharp.Dtos.TelemetryDataQueryDto">
<summary> <summary>
查询历史遥测数据请求结构体 查询历史遥测数据请求结构体
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册