refact save method

This commit is contained in:
eugeniy_ivanov 2023-04-11 12:06:05 +05:00
parent 7e2b1e56c8
commit 27ee40816f
2 changed files with 59 additions and 43 deletions

View File

@ -158,17 +158,17 @@ namespace AsbCloudInfrastructure.Repository
{ {
var jsonValue = item.Value; var jsonValue = item.Value;
var type = jsonValue.Value.GetType().Name; var type = jsonValue.Value.GetType().Name;
if (type == "string") if (type == "String")
{ {
var entity = GetEntityStr(dto, jsonValue, item.Key, timezoneHours); var entity = GetEntityStr(dto, jsonValue, item.Key, timezoneHours);
db.WitsItemString.Add(entity); db.WitsItemString.Add(entity);
} }
else if (type == "int") else if (type == "Int32")
{ {
var entity = GetEntityInt(dto, jsonValue, item.Key, timezoneHours); var entity = GetEntityInt(dto, jsonValue, item.Key, timezoneHours);
db.WitsItemInt.Add(entity); db.WitsItemInt.Add(entity);
} }
else if (type == "float") else if (type == "Single")
{ {
var entity = GetEntityFloat(dto, jsonValue, item.Key, timezoneHours); var entity = GetEntityFloat(dto, jsonValue, item.Key, timezoneHours);
db.WitsItemFloat.Add(entity); db.WitsItemFloat.Add(entity);
@ -182,21 +182,21 @@ namespace AsbCloudInfrastructure.Repository
DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount
, CancellationToken token) , CancellationToken token)
{ {
if (filterByDateEnd) //if (filterByDateEnd)
query = query.Where(d => d.DateTime <= dateEnd); // query = query.Where(d => d.DateTime <= dateEnd);
var fullDataCount = await query.CountAsync(token) //var fullDataCount = await query.CountAsync(token)
.ConfigureAwait(false); // .ConfigureAwait(false);
if (fullDataCount == 0) //if (fullDataCount == 0)
return Enumerable.Empty<WitsItemInt>(); // return Enumerable.Empty<WitsItemInt>();
if (fullDataCount > 1.75 * approxPointsCount) //if (fullDataCount > 1.75 * approxPointsCount)
{ //{
var m = (int)Math.Round(1d * fullDataCount / approxPointsCount); // var m = (int)Math.Round(1d * fullDataCount / approxPointsCount);
if (m > 1) // if (m > 1)
query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); // query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0);
} //}
var entities = await query var entities = await query
.OrderBy(d => d.DateTime) .OrderBy(d => d.DateTime)
@ -210,21 +210,21 @@ namespace AsbCloudInfrastructure.Repository
DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount
, CancellationToken token) , CancellationToken token)
{ {
if (filterByDateEnd) //if (filterByDateEnd)
query = query.Where(d => d.DateTime <= dateEnd); // query = query.Where(d => d.DateTime <= dateEnd);
var fullDataCount = await query.CountAsync(token) //var fullDataCount = await query.CountAsync(token)
.ConfigureAwait(false); // .ConfigureAwait(false);
if (fullDataCount == 0) //if (fullDataCount == 0)
return Enumerable.Empty<WitsItemFloat>(); // return Enumerable.Empty<WitsItemFloat>();
if (fullDataCount > 1.75 * approxPointsCount) //if (fullDataCount > 1.75 * approxPointsCount)
{ //{
var m = (int)Math.Round(1d * fullDataCount / approxPointsCount); // var m = (int)Math.Round(1d * fullDataCount / approxPointsCount);
if (m > 1) // if (m > 1)
query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); // query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0);
} //}
var entities = await query var entities = await query
.OrderBy(d => d.DateTime) .OrderBy(d => d.DateTime)
@ -238,21 +238,21 @@ namespace AsbCloudInfrastructure.Repository
DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount
, CancellationToken token) , CancellationToken token)
{ {
if (filterByDateEnd) //if (filterByDateEnd)
query = query.Where(d => d.DateTime <= dateEnd); // query = query.Where(d => d.DateTime <= dateEnd);
var fullDataCount = await query.CountAsync(token) //var fullDataCount = await query.CountAsync(token)
.ConfigureAwait(false); // .ConfigureAwait(false);
if (fullDataCount == 0) //if (fullDataCount == 0)
return Enumerable.Empty<WitsItemString>(); // return Enumerable.Empty<WitsItemString>();
if (fullDataCount > 1.75 * approxPointsCount) //if (fullDataCount > 1.75 * approxPointsCount)
{ //{
var m = (int)Math.Round(1d * fullDataCount / approxPointsCount); // var m = (int)Math.Round(1d * fullDataCount / approxPointsCount);
if (m > 1) // if (m > 1)
query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); // query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0);
} //}
var entities = await query var entities = await query
.OrderBy(d => d.DateTime) .OrderBy(d => d.DateTime)
@ -270,7 +270,7 @@ namespace AsbCloudInfrastructure.Repository
DateTime = record.Date.ToUtcDateTimeOffset(timezoneHours), DateTime = record.Date.ToUtcDateTimeOffset(timezoneHours),
IdRecord = record.Id, IdRecord = record.Id,
IdItem = idItems, IdItem = idItems,
Value = JsonSerializer.Deserialize<string>(value.ToString())!, Value = value.Value.ToString()!,
}; };
return entity; return entity;
} }
@ -296,7 +296,7 @@ namespace AsbCloudInfrastructure.Repository
DateTime = record.Date.ToUtcDateTimeOffset(timezoneHours), DateTime = record.Date.ToUtcDateTimeOffset(timezoneHours),
IdRecord = record.Id, IdRecord = record.Id,
IdItem = idItems, IdItem = idItems,
Value = JsonSerializer.Deserialize<float>(value.ToString())!, Value = (float)value.Value,
}; };
return entity; return entity;
} }

View File

@ -38,8 +38,7 @@ namespace AsbCloudWebApi.Controllers.GTR
} }
/// <summary> /// <summary>
/// Возвращает данные САУБ по скважине. ///
/// По умолчанию за последние 10 минут.
/// </summary> /// </summary>
/// <param name = "idWell" > id скважины</param> /// <param name = "idWell" > id скважины</param>
/// <param name = "begin" > дата начала выборки.По умолчанию: текущее время - intervalSec</param> /// <param name = "begin" > дата начала выборки.По умолчанию: текущее время - intervalSec</param>
@ -68,5 +67,22 @@ namespace AsbCloudWebApi.Controllers.GTR
return Ok(content); return Ok(content);
} }
[HttpPost("{uid}")]
public async Task<IActionResult> PostDataAsync(
string uid,
[FromBody] WitsRecordDto dto,
[FromServices] IGtrRepository gtrRepository,
CancellationToken token = default)
{
var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid);
await gtrRepository.SaveDataAsync(idTelemetry, dto, token).ConfigureAwait(false);
//var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
//if (idWell != null && dtos.Any())
// _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_wits")
// .SendAsync(SirnalRMethodGetDataName, dtos), CancellationToken.None);
return Ok();
}
} }
} }