test new rep

This commit is contained in:
eugeniy_ivanov 2022-08-17 17:23:24 +05:00
parent dcda244e3c
commit babd1076a4

View File

@ -101,59 +101,45 @@ namespace AsbCloudInfrastructure.Services.Subsystems
} }
return affected; return affected;
} }
private static async Task<IEnumerable<SubsystemOperationTime>?> OperationTimeSaubAsync(int idTelemetry, DateTimeOffset begin, IAsbCloudDbContext db, CancellationToken token) private static async Task<IEnumerable<SubsystemOperationTime>?> OperationTimeSaubAsync(int idTelemetry, DateTimeOffset begin, IAsbCloudDbContext db, CancellationToken token)
{ {
var query = db.TelemetryDataSaub var dateStart = db.TelemetryDataSaub
.AsNoTracking() .AsNoTracking()
.Where(d => d.IdTelemetry == idTelemetry) .Where(d => (d.IdTelemetry == idTelemetry) & (d.DateTime >= begin))
.Select(d => new .Min(d => d.DateTime);
{ var depthStart = db.TelemetryDataSaub
DateTime = d.DateTime, .AsNoTracking()
Mode = d.Mode, .Where(d => (d.IdTelemetry == idTelemetry) & (d.DateTime >= begin))
Depth = d.WellDepth .Min(d => d.WellDepth);
})
.OrderBy(d => d.DateTime);
var take = 4 * 86_400; // 4 дня
var startDate = begin;
var operationTimeSpinWithDepth =
$"select tt.date, tt.mode, tt.mode_prev, tt.well_depth" +
$" from (select date, mode, well_depth, lag(mode,1) over (order by date) as mode_prev" +
$" from t_telemetry_data_saub where id_telemetry = {idTelemetry}) as tt" +
$" where tt.mode != tt.mode_prev and tt.date >='{begin}' order by tt.date;";
using var command = db.Database.GetDbConnection().CreateCommand();
command.CommandText = operationTimeSpinWithDepth;
command.
db.Database.OpenConnection();
using var result = await command.ExecuteReaderAsync(token);
var resultSubsystemOperationTime = new List<SubsystemOperationTime>(); var resultSubsystemOperationTime = new List<SubsystemOperationTime>();
while (true) if (result.HasRows)
{ {
var data = await query while (result.Read())
.Where(d => d.DateTime > startDate)
.Take(take)
.ToArrayAsync(token);
var firstItem = data.FirstOrDefault();
if (firstItem is null)
break;
short? mode = firstItem.Mode;
DateTimeOffset dateBegin = firstItem.DateTime;
float? depthStart = firstItem.Depth;
for (int i = 1; i < data.Length; i++)
{ {
if (data[i].Mode != mode) var itemEntity = new SubsystemOperationTime()
{
var operationTimeItem = new SubsystemOperationTime()
{ {
IdTelemetry = idTelemetry, IdTelemetry = idTelemetry,
DateStart = dateBegin, DateStart = dateStart,
DateEnd = data[i - 1].DateTime, DateEnd = result.GetFieldValue<DateTimeOffset>(0),
DepthStart = depthStart, DepthStart = depthStart,
DepthEnd = data[i - 1].Depth DepthEnd = result.GetFieldValue<float>(3),
IdSubsystem = result.GetFieldValue<short>(2) + 1
}; };
if (mode.HasValue) dateStart = itemEntity.DateEnd;
{ depthStart = itemEntity.DepthStart;
operationTimeItem.IdSubsystem = (int)mode + 1; resultSubsystemOperationTime.Add(itemEntity);
resultSubsystemOperationTime.Add(operationTimeItem);
} }
mode = data[i].Mode;
dateBegin = data[i].DateTime;
depthStart = data[i].Depth;
}
}
startDate = data.Last().DateTime;
} }
return resultSubsystemOperationTime; return resultSubsystemOperationTime;
} }
@ -197,46 +183,36 @@ namespace AsbCloudInfrastructure.Services.Subsystems
} }
} }
} }
var take = 4 * 86_400; // 4 дня
var startDate = begin;
var resultSubsystemOperationTime = new List<SubsystemOperationTime>(); var resultSubsystemOperationTime = new List<SubsystemOperationTime>();
while (true) var firstItem = telemetryOpearationSpinSubsystems.FirstOrDefault();
{
var data = telemetryOpearationSpinSubsystems
.Where(d => d.Date > startDate)
.Take(take)
.ToArray();
var firstItem = data.FirstOrDefault();
if (firstItem is null) if (firstItem is null)
break; return null;
int idSubsystem = firstItem.IdSubsystem; int idSubsystem = firstItem.IdSubsystem;
DateTimeOffset dateBegin = firstItem.Date; DateTimeOffset dateBegin = firstItem.Date;
float? depthStart = firstItem.Depth; float? depthStart = firstItem.Depth;
for (int i = 1; i < data.Length; i++) for (int i = 1; i < telemetryOpearationSpinSubsystems.Count; i++)
{ {
if (data[i].IdSubsystem != idSubsystem) if (telemetryOpearationSpinSubsystems[i].IdSubsystem != idSubsystem)
{ {
var operationTimeItem = new SubsystemOperationTime() var operationTimeItem = new SubsystemOperationTime()
{ {
IdTelemetry = idTelemetry, IdTelemetry = idTelemetry,
DateStart = dateBegin, DateStart = dateBegin,
IdSubsystem = data[i - 1].IdSubsystem, IdSubsystem = telemetryOpearationSpinSubsystems[i - 1].IdSubsystem,
DateEnd = data[i].Date, DateEnd = telemetryOpearationSpinSubsystems[i].Date,
DepthStart = depthStart, DepthStart = depthStart,
DepthEnd = data[i].Depth DepthEnd = telemetryOpearationSpinSubsystems[i].Depth
}; };
dateBegin = data[i].Date; dateBegin = telemetryOpearationSpinSubsystems[i].Date;
depthStart = data[i].Depth; depthStart = telemetryOpearationSpinSubsystems[i].Depth;
idSubsystem = data[i].IdSubsystem; idSubsystem = telemetryOpearationSpinSubsystems[i].IdSubsystem;
if (data[i - 1].IdSubsystem != 0) if (telemetryOpearationSpinSubsystems[i - 1].IdSubsystem != 0)
{ {
resultSubsystemOperationTime.Add(operationTimeItem); resultSubsystemOperationTime.Add(operationTimeItem);
} }
} }
} }
startDate = data.LastOrDefault().Date;
}
return resultSubsystemOperationTime; return resultSubsystemOperationTime;
} }
} }