forked from ddrilling/AsbCloudServer
Fix migration.
Fix GtrWitsRepository.
This commit is contained in:
parent
1bdb88492e
commit
9c31c803de
@ -4,11 +4,11 @@
|
|||||||
/// Класс позволяющий хранить значение неопределенного типа.
|
/// Класс позволяющий хранить значение неопределенного типа.
|
||||||
/// Все возможные типы должны быть описаны в JsonValueJsonConverter.
|
/// Все возможные типы должны быть описаны в JsonValueJsonConverter.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="value"></param>
|
/// <param name="Value"></param>
|
||||||
public record JsonValue(object value)
|
public record JsonValue(object Value)
|
||||||
{
|
{
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
=> value.ToString() ?? string.Empty;
|
=> Value.ToString() ?? string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,11 +13,6 @@ namespace AsbCloudApp.Data.GTR
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Id телеметрии
|
|
||||||
/// </summary>
|
|
||||||
public int IdTelemetry { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Дата создания записи
|
/// Дата создания записи
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -32,7 +32,7 @@ namespace AsbCloudApp.Repositories
|
|||||||
/// <param name="token"></param>
|
/// <param name="token"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<IEnumerable<WitsRecordDto>> GetAsync(int idWell,
|
Task<IEnumerable<WitsRecordDto>> GetAsync(int idWell,
|
||||||
DateTime dateBegin = default, double intervalSec = 600d,
|
DateTime? dateBegin, double intervalSec = 600d,
|
||||||
int approxPointsCount = 1024, CancellationToken token = default);
|
int approxPointsCount = 1024, CancellationToken token = default);
|
||||||
}
|
}
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
@ -13,8 +13,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
namespace AsbCloudDb.Migrations
|
namespace AsbCloudDb.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(AsbCloudDbContext))]
|
[DbContext(typeof(AsbCloudDbContext))]
|
||||||
[Migration("20230417131126_add_tableWits_and_manualHypertable")]
|
[Migration("20230418055848_Add_GTR")]
|
||||||
partial class add_tableWits_and_manualHypertable
|
partial class Add_GTR
|
||||||
{
|
{
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
@ -829,7 +829,7 @@ namespace AsbCloudDb.Migrations
|
|||||||
|
|
||||||
b.ToTable("t_wits_float");
|
b.ToTable("t_wits_float");
|
||||||
|
|
||||||
b.HasComment("таблица данных ГТИ с типом значения ");
|
b.HasComment("таблица данных ГТИ с типом значения float");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b =>
|
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b =>
|
||||||
@ -858,7 +858,7 @@ namespace AsbCloudDb.Migrations
|
|||||||
|
|
||||||
b.ToTable("t_wits_int");
|
b.ToTable("t_wits_int");
|
||||||
|
|
||||||
b.HasComment("таблица данных ГТИ с типом значения int16 int32");
|
b.HasComment("таблица данных ГТИ с типом значения int");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b =>
|
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b =>
|
||||||
@ -4213,6 +4213,21 @@ namespace AsbCloudDb.Migrations
|
|||||||
.HasColumnName("pressure_sp_slide")
|
.HasColumnName("pressure_sp_slide")
|
||||||
.HasComment("Давление. Задание для режима слайда");
|
.HasComment("Давление. Задание для режима слайда");
|
||||||
|
|
||||||
|
b.Property<float?>("Pump0Flow")
|
||||||
|
.HasColumnType("real")
|
||||||
|
.HasColumnName("pump0_flow")
|
||||||
|
.HasComment("Расход. Буровой насос 1");
|
||||||
|
|
||||||
|
b.Property<float?>("Pump1Flow")
|
||||||
|
.HasColumnType("real")
|
||||||
|
.HasColumnName("pump1_flow")
|
||||||
|
.HasComment("Расход. Буровой насос 2");
|
||||||
|
|
||||||
|
b.Property<float?>("Pump2Flow")
|
||||||
|
.HasColumnType("real")
|
||||||
|
.HasColumnName("pump2_flow")
|
||||||
|
.HasComment("Расход. Буровой насос 3");
|
||||||
|
|
||||||
b.Property<float?>("RotorSpeed")
|
b.Property<float?>("RotorSpeed")
|
||||||
.HasColumnType("real")
|
.HasColumnType("real")
|
||||||
.HasColumnName("rotor_speed")
|
.HasColumnName("rotor_speed")
|
@ -5,7 +5,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
|
|||||||
|
|
||||||
namespace AsbCloudDb.Migrations
|
namespace AsbCloudDb.Migrations
|
||||||
{
|
{
|
||||||
public partial class add_tableWits_and_manualHypertable : Migration
|
public partial class Add_GTR : Migration
|
||||||
{
|
{
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
@ -29,7 +29,7 @@ namespace AsbCloudDb.Migrations
|
|||||||
principalColumn: "id",
|
principalColumn: "id",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
},
|
},
|
||||||
comment: "таблица данных ГТИ с типом значения ");
|
comment: "таблица данных ГТИ с типом значения float");
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "t_wits_int",
|
name: "t_wits_int",
|
||||||
@ -51,7 +51,7 @@ namespace AsbCloudDb.Migrations
|
|||||||
principalColumn: "id",
|
principalColumn: "id",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
},
|
},
|
||||||
comment: "таблица данных ГТИ с типом значения int16 int32");
|
comment: "таблица данных ГТИ с типом значения int");
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "t_wits_string",
|
name: "t_wits_string",
|
||||||
@ -74,6 +74,12 @@ namespace AsbCloudDb.Migrations
|
|||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
},
|
},
|
||||||
comment: "таблица данных ГТИ с типом значения string");
|
comment: "таблица данных ГТИ с типом значения string");
|
||||||
|
|
||||||
|
migrationBuilder.Sql
|
||||||
|
("SELECT create_hypertable('t_wits_string','date','id_telemetry',2,chunk_time_interval => INTERVAL '5 day'); " +
|
||||||
|
"SELECT create_hypertable('t_wits_float','date','id_telemetry',2,chunk_time_interval => INTERVAL '5 day'); " +
|
||||||
|
"SELECT create_hypertable('t_wits_int','date','id_telemetry',2,chunk_time_interval => INTERVAL '5 day'); ");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
protected override void Down(MigrationBuilder migrationBuilder)
|
@ -827,7 +827,7 @@ namespace AsbCloudDb.Migrations
|
|||||||
|
|
||||||
b.ToTable("t_wits_float");
|
b.ToTable("t_wits_float");
|
||||||
|
|
||||||
b.HasComment("таблица данных ГТИ с типом значения ");
|
b.HasComment("таблица данных ГТИ с типом значения float");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b =>
|
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b =>
|
||||||
@ -856,7 +856,7 @@ namespace AsbCloudDb.Migrations
|
|||||||
|
|
||||||
b.ToTable("t_wits_int");
|
b.ToTable("t_wits_int");
|
||||||
|
|
||||||
b.HasComment("таблица данных ГТИ с типом значения int16 int32");
|
b.HasComment("таблица данных ГТИ с типом значения int");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b =>
|
modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b =>
|
||||||
|
@ -29,9 +29,9 @@ namespace AsbCloudDb.Model.GTR
|
|||||||
[Table("t_wits_string"), Comment("таблица данных ГТИ с типом значения string")]
|
[Table("t_wits_string"), Comment("таблица данных ГТИ с типом значения string")]
|
||||||
public class WitsItemString : WitsItemBase<string> { }
|
public class WitsItemString : WitsItemBase<string> { }
|
||||||
|
|
||||||
[Table("t_wits_float"), Comment("таблица данных ГТИ с типом значения ")]
|
[Table("t_wits_float"), Comment("таблица данных ГТИ с типом значения float")]
|
||||||
public class WitsItemFloat : WitsItemBase<float> { }
|
public class WitsItemFloat : WitsItemBase<float> { }
|
||||||
|
|
||||||
[Table("t_wits_int"), Comment("таблица данных ГТИ с типом значения int16 int32")]
|
[Table("t_wits_int"), Comment("таблица данных ГТИ с типом значения int")]
|
||||||
public class WitsItemInt : WitsItemBase<int> { }
|
public class WitsItemInt : WitsItemBase<int> { }
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ namespace AsbCloudInfrastructure.Repository
|
|||||||
this.telemetryService = telemetryService;
|
this.telemetryService = telemetryService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<WitsRecordDto>> GetAsync(int idWell, DateTime dateBegin = default, double intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default)
|
public async Task<IEnumerable<WitsRecordDto>> GetAsync(int idWell, DateTime? dateBegin, double intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default)
|
||||||
{
|
{
|
||||||
var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell);
|
var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell);
|
||||||
if (telemetry is null)
|
if (telemetry is null)
|
||||||
@ -36,91 +36,53 @@ namespace AsbCloudInfrastructure.Repository
|
|||||||
|
|
||||||
var timezone = telemetryService.GetTimezone(telemetry.Id);
|
var timezone = telemetryService.GetTimezone(telemetry.Id);
|
||||||
|
|
||||||
var filterByDateEnd = dateBegin != default;
|
DateTimeOffset? dateBeginUtc = dateBegin?.ToUtcDateTimeOffset(timezone.Hours);
|
||||||
DateTimeOffset dateBeginUtc;
|
var dateEnd = dateBeginUtc?.AddSeconds(intervalSec);
|
||||||
if (dateBegin == default)
|
|
||||||
{
|
|
||||||
dateBeginUtc = telemetryService.GetLastTelemetryDate(telemetry.Id)
|
|
||||||
.ToUtcDateTimeOffset(timezone.Hours);
|
|
||||||
if (dateBeginUtc != default)
|
|
||||||
dateBeginUtc = dateBeginUtc.AddSeconds(-intervalSec);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dateBeginUtc = dateBegin.ToUtcDateTimeOffset(timezone.Hours);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dateBeginUtc == default)
|
var recordAllInt = await GetItemsOrDefaultAsync<WitsItemInt, int>(telemetry.Id, dateBeginUtc, dateEnd, approxPointsCount, timezone.Hours, token);
|
||||||
dateBeginUtc = DateTime.UtcNow.AddSeconds(-intervalSec);
|
var recordAllFloat = await GetItemsOrDefaultAsync<WitsItemFloat, float>(telemetry.Id, dateBeginUtc, dateEnd, approxPointsCount,timezone.Hours, token);
|
||||||
var dateEnd = dateBeginUtc.AddSeconds(intervalSec);
|
var recordAllString = await GetItemsOrDefaultAsync<WitsItemString, string>(telemetry.Id, dateBeginUtc, dateEnd, approxPointsCount, timezone.Hours, token);
|
||||||
|
|
||||||
var queryWitsInt = db.Set<WitsItemInt>()
|
var dtos = (recordAllFloat.Union(recordAllInt)).Union(recordAllString)
|
||||||
.Where(d => d.IdTelemetry == telemetry.Id);
|
|
||||||
var queryWitsString = db.Set<WitsItemString>()
|
|
||||||
.Where(d => d.IdTelemetry == telemetry.Id);
|
|
||||||
var queryWitsFloat = db.Set<WitsItemFloat>()
|
|
||||||
.Where(d => d.IdTelemetry == telemetry.Id);
|
|
||||||
|
|
||||||
var recordAllInt = await GetItemsOrDefaultAsync(queryWitsInt, dateBeginUtc, dateEnd, filterByDateEnd, approxPointsCount, timezone.Hours, token);
|
|
||||||
var recordAllFloat = await GetItemsOrDefaultAsync(queryWitsFloat, dateBeginUtc, dateEnd, filterByDateEnd, approxPointsCount,timezone.Hours, token);
|
|
||||||
var recordAllString = await GetItemsOrDefaultAsync(queryWitsString, dateBeginUtc, dateEnd, filterByDateEnd, approxPointsCount, timezone.Hours, token);
|
|
||||||
var groupRecordDate = (recordAllFloat.Union(recordAllInt)).Union(recordAllString)
|
|
||||||
.GroupBy(g => new
|
.GroupBy(g => new
|
||||||
{
|
{
|
||||||
g.IdRecord,
|
g.IdRecord,
|
||||||
g.Date
|
g.Date
|
||||||
}).ToList();
|
})
|
||||||
var dtos = groupRecordDate.Select(g => new WitsRecordDto
|
.Select(g => new WitsRecordDto
|
||||||
{
|
{
|
||||||
Id = g.Key.IdRecord,
|
Id = g.Key.IdRecord,
|
||||||
Date = g.Key.Date,
|
Date = g.Key.Date,
|
||||||
IdTelemetry = g.First().IdTelemetry,
|
Items = g.Select(r => new {
|
||||||
Items = g.Select(r => new {
|
Key = r.IdItem,
|
||||||
Key = r.IdItem,
|
Value = r.Item
|
||||||
Value = r.Item
|
}).ToDictionary(x => x.Key, x => x.Value)
|
||||||
}).ToDictionary(x => x.Key, x => x.Value)
|
});
|
||||||
});
|
|
||||||
return dtos;
|
return dtos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token)
|
private async Task<IEnumerable<ItemRecord>> GetItemsOrDefaultAsync<TEntity, TValue>(
|
||||||
|
int idTelemetry,
|
||||||
|
DateTimeOffset? dateBegin,
|
||||||
|
DateTimeOffset? dateEnd,
|
||||||
|
int approxPointsCount,
|
||||||
|
double timezoneHours,
|
||||||
|
CancellationToken token)
|
||||||
|
where TEntity: WitsItemBase<TValue>
|
||||||
|
where TValue: notnull
|
||||||
{
|
{
|
||||||
if (dto is null)
|
var query = db.Set<TEntity>()
|
||||||
return;
|
.Where(i => i.IdTelemetry == idTelemetry);
|
||||||
var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours;
|
|
||||||
foreach (var item in dto.Items)
|
|
||||||
{
|
|
||||||
var jsonValue = item.Value;
|
|
||||||
if(jsonValue.value is string valueString)
|
|
||||||
{
|
|
||||||
var entity = ConvertToEntity(dto, valueString, timezoneHours);
|
|
||||||
db.WitsItemString.Add(entity.Adapt<WitsItemString>());
|
|
||||||
}
|
|
||||||
if (jsonValue.value is float valueFloat)
|
|
||||||
{
|
|
||||||
var entity = ConvertToEntity(dto, valueFloat, timezoneHours);
|
|
||||||
db.WitsItemFloat.Add(entity.Adapt<WitsItemFloat>());
|
|
||||||
}
|
|
||||||
if (jsonValue.value is int valueInt)
|
|
||||||
{
|
|
||||||
var entity = ConvertToEntity(dto, valueInt, timezoneHours);
|
|
||||||
db.WitsItemInt.Add(entity.Adapt<WitsItemInt>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await db.SaveChangesAsync(token);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static async Task<IEnumerable<ItemRecord>> GetItemsOrDefaultAsync<T>(IQueryable<WitsItemBase<T>> query,
|
if (dateBegin is not null)
|
||||||
DateTimeOffset dateBeginUtc,
|
query = query
|
||||||
DateTimeOffset dateEnd, bool filterByDateEnd, int approxPointsCount, double timezoneHours
|
.Where(d => d.DateTime >= dateBegin);
|
||||||
, CancellationToken token)
|
|
||||||
where T: notnull
|
|
||||||
{
|
|
||||||
if (filterByDateEnd)
|
|
||||||
query = query.Where(d => d.DateTime <= dateEnd);
|
|
||||||
|
|
||||||
var fullDataCount = await query.CountAsync(token)
|
if (dateEnd is not null)
|
||||||
.ConfigureAwait(false);
|
query = query
|
||||||
|
.Where(d => d.DateTime <= dateEnd);
|
||||||
|
|
||||||
|
var fullDataCount = await query.CountAsync(token);
|
||||||
|
|
||||||
if (fullDataCount == 0)
|
if (fullDataCount == 0)
|
||||||
return Enumerable.Empty<ItemRecord>();
|
return Enumerable.Empty<ItemRecord>();
|
||||||
@ -133,7 +95,6 @@ namespace AsbCloudInfrastructure.Repository
|
|||||||
}
|
}
|
||||||
|
|
||||||
var entities = await query
|
var entities = await query
|
||||||
.Where(d => d.DateTime >= dateBeginUtc)
|
|
||||||
.OrderBy(d => d.DateTime)
|
.OrderBy(d => d.DateTime)
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.ToListAsync(token)
|
.ToListAsync(token)
|
||||||
@ -149,15 +110,43 @@ namespace AsbCloudInfrastructure.Repository
|
|||||||
});
|
});
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
private static WitsItemBase<Tvalue> ConvertToEntity<Tvalue>(WitsRecordDto record, Tvalue value, double timezoneHours)
|
|
||||||
where Tvalue: notnull
|
public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token)
|
||||||
{
|
{
|
||||||
var entity = record.Adapt<WitsItemBase<Tvalue>>();
|
var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours;
|
||||||
entity.DateTime = record.Date.ToUtcDateTimeOffset(timezoneHours);
|
foreach (var item in dto.Items)
|
||||||
entity.Value = value;
|
{
|
||||||
return entity;
|
var dateTime = dto.Date.ToUtcDateTimeOffset(timezoneHours);
|
||||||
|
if (item.Value.Value is string valueString)
|
||||||
|
{
|
||||||
|
var entity = MakeEntity<WitsItemString, string>( dto.Id, item.Key, idTelemetry, dateTime, valueString);
|
||||||
|
db.WitsItemString.Add(entity);
|
||||||
|
}
|
||||||
|
if (item.Value.Value is float valueFloat)
|
||||||
|
{
|
||||||
|
var entity = MakeEntity<WitsItemFloat, float>(dto.Id, item.Key, idTelemetry, dateTime, valueFloat);
|
||||||
|
db.WitsItemFloat.Add(entity);
|
||||||
|
}
|
||||||
|
if (item.Value.Value is int valueInt)
|
||||||
|
{
|
||||||
|
var entity = MakeEntity<WitsItemInt, int>(dto.Id, item.Key, idTelemetry, dateTime, valueInt);
|
||||||
|
db.WitsItemInt.Add(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await db.SaveChangesAsync(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static TEntity MakeEntity<TEntity, TValue>(int idRecord, int idItem, int idTelemetry, DateTimeOffset dateTime, TValue value)
|
||||||
|
where TEntity : WitsItemBase<TValue>, new()
|
||||||
|
where TValue: notnull
|
||||||
|
=> new TEntity() {
|
||||||
|
IdRecord = idRecord,
|
||||||
|
IdItem = idItem,
|
||||||
|
IdTelemetry = idTelemetry,
|
||||||
|
DateTime = dateTime,
|
||||||
|
Value = value,
|
||||||
|
};
|
||||||
|
|
||||||
internal class ItemRecord
|
internal class ItemRecord
|
||||||
{
|
{
|
||||||
public int IdRecord { get; set; }
|
public int IdRecord { get; set; }
|
||||||
|
@ -12,6 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace AsbCloudWebApi.Controllers.SAUB
|
namespace AsbCloudWebApi.Controllers.SAUB
|
||||||
{
|
{
|
||||||
|
#nullable enable
|
||||||
[Route("api/[controller]")]
|
[Route("api/[controller]")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class GtrWitsController : ControllerBase
|
public class GtrWitsController : ControllerBase
|
||||||
@ -22,7 +23,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
|
|||||||
private readonly IGtrRepository gtrRepository;
|
private readonly IGtrRepository gtrRepository;
|
||||||
private readonly IHubContext<TelemetryHub> telemetryHubContext;
|
private readonly IHubContext<TelemetryHub> telemetryHubContext;
|
||||||
|
|
||||||
public string SirnalRMethodGetDataName { get; protected set; } = "ReceiveData";
|
public string SignalRMethodGetDataName { get; protected set; } = "ReceiveData";
|
||||||
|
|
||||||
public GtrWitsController(
|
public GtrWitsController(
|
||||||
ITelemetryService telemetryService,
|
ITelemetryService telemetryService,
|
||||||
@ -47,7 +48,7 @@ namespace AsbCloudWebApi.Controllers.SAUB
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("{idWell}")]
|
[HttpGet("{idWell}")]
|
||||||
[Permission]
|
[Permission]
|
||||||
public async Task<ActionResult<IEnumerable<WitsRecordDto>>> GetDataAsync(int idWell, DateTime begin = default,
|
public async Task<ActionResult<IEnumerable<WitsRecordDto>>> GetDataAsync(int idWell, DateTime? begin,
|
||||||
int intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default)
|
int intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default)
|
||||||
{
|
{
|
||||||
int? idCompany = User.GetCompanyId();
|
int? idCompany = User.GetCompanyId();
|
||||||
@ -86,8 +87,9 @@ namespace AsbCloudWebApi.Controllers.SAUB
|
|||||||
var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
|
var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
|
||||||
if (idWell is not null && dto is not null)
|
if (idWell is not null && dto is not null)
|
||||||
_ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_gtr")
|
_ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_gtr")
|
||||||
.SendAsync(SirnalRMethodGetDataName, dto), CancellationToken.None);
|
.SendAsync(SignalRMethodGetDataName, dto), CancellationToken.None);
|
||||||
return Ok();
|
return Ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#nullable disable
|
||||||
}
|
}
|
||||||
|
@ -30,37 +30,37 @@ namespace AsbCloudWebApi.Converters
|
|||||||
|
|
||||||
public override void Write(Utf8JsonWriter writer, JsonValue value, JsonSerializerOptions options)
|
public override void Write(Utf8JsonWriter writer, JsonValue value, JsonSerializerOptions options)
|
||||||
{
|
{
|
||||||
if (value.value is string strValue)
|
if (value.Value is string strValue)
|
||||||
{
|
{
|
||||||
writer.WriteStringValue(FormatString(strValue));
|
writer.WriteStringValue(FormatString(strValue));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.value is int intValue)
|
if (value.Value is int intValue)
|
||||||
{
|
{
|
||||||
writer.WriteNumberValue(intValue);
|
writer.WriteNumberValue(intValue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.value is short shortValue)
|
if (value.Value is short shortValue)
|
||||||
{
|
{
|
||||||
writer.WriteNumberValue(shortValue);
|
writer.WriteNumberValue(shortValue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.value is float floatValue)
|
if (value.Value is float floatValue)
|
||||||
{
|
{
|
||||||
writer.WriteRawValue(floatValue.ToString("#0.0##", CultureInfo.InvariantCulture), true);
|
writer.WriteRawValue(floatValue.ToString("#0.0##", CultureInfo.InvariantCulture), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.value is double doubleValue)
|
if (value.Value is double doubleValue)
|
||||||
{
|
{
|
||||||
writer.WriteRawValue(doubleValue.ToString("#0.0##", CultureInfo.InvariantCulture), true);
|
writer.WriteRawValue(doubleValue.ToString("#0.0##", CultureInfo.InvariantCulture), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var typeName = value.value.GetType().Name;
|
var typeName = value.Value.GetType().Name;
|
||||||
throw new NotImplementedException($"{typeName} is not supported type for WITS value");
|
throw new NotImplementedException($"{typeName} is not supported type for WITS value");
|
||||||
}
|
}
|
||||||
|
|
31
AsbCloudWebApi/Rest/Gtr.http
Normal file
31
AsbCloudWebApi/Rest/Gtr.http
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
@baseUrl = http://127.0.0.1:5000
|
||||||
|
@contentType = application/json
|
||||||
|
@auth = Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6IkpXVCJ9.eyJpZCI6IjEiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiZGV2IiwiaWRDb21wYW55IjoiMSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6InJvb3QiLCJuYmYiOjE2NjI1NDgxNjIsImV4cCI6MTY5NDEwNTc2MiwiaXNzIjoiYSIsImF1ZCI6ImEifQ.OEAlNzxi7Jat6pzDBTAjTbChskc-tdJthJexyWwwUKE
|
||||||
|
|
||||||
|
@uid = 20210910_012752700
|
||||||
|
@idCluster = 1
|
||||||
|
@idWell = 1
|
||||||
|
|
||||||
|
# https://marketplace.visualstudio.com/items?itemName=humao.rest-client
|
||||||
|
|
||||||
|
###
|
||||||
|
GET {{baseUrl}}/api/GtrWits/{{idWell}}
|
||||||
|
Content-Type: {{contentType}}
|
||||||
|
accept: */*
|
||||||
|
Authorization: {{auth}}
|
||||||
|
|
||||||
|
### Post
|
||||||
|
POST {{baseUrl}}/api/GtrWits/{{uid}}
|
||||||
|
Content-Type: {{contentType}}
|
||||||
|
accept: */*
|
||||||
|
Authorization: {{auth}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"id":1,
|
||||||
|
"date": "2023-04-18T08:41:49.332Z",
|
||||||
|
"items": {
|
||||||
|
"1": 1,
|
||||||
|
"2": 1.1,
|
||||||
|
"3": "string1"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user