Fix WorkLimitingParameterCalc sql query

This commit is contained in:
ngfrolov 2023-10-10 11:24:04 +05:00
parent c28315b795
commit 1f79a8f5f7
Signed by: ng.frolov
GPG Key ID: E99907A0357B29A7

View File

@ -7,14 +7,13 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Collections.Generic; using System.Collections.Generic;
using AsbCloudInfrastructure.Background;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace AsbCloudInfrastructure.Services; namespace AsbCloudInfrastructure.Background;
public class WorkLimitingParameterCalc : Work public class WorkLimitingParameterCalc : Work
{ {
public WorkLimitingParameterCalc() public WorkLimitingParameterCalc()
: base("Limiting parameter calc") : base("Limiting parameter calc")
{ {
Timeout = TimeSpan.FromMinutes(30); Timeout = TimeSpan.FromMinutes(30);
@ -51,7 +50,7 @@ public class WorkLimitingParameterCalc : Work
var i = 0d; var i = 0d;
foreach (var item in telemetryLastDetectedDates) foreach (var item in telemetryLastDetectedDates)
{ {
onProgressCallback($"Start hanling telemetry: {item.IdTelemetry} from {item.LastDate}", i++/count); onProgressCallback($"Start hanling telemetry: {item.IdTelemetry} from {item.LastDate}", i++ / count);
var newLimitingParameters = await GetLimitingParameterAsync(item.IdTelemetry, item.LastDate ?? DateTimeOffset.MinValue, db, token); var newLimitingParameters = await GetLimitingParameterAsync(item.IdTelemetry, item.LastDate ?? DateTimeOffset.MinValue, db, token);
if (newLimitingParameters?.Any() == true) if (newLimitingParameters?.Any() == true)
{ {
@ -63,7 +62,7 @@ public class WorkLimitingParameterCalc : Work
private static async Task<IEnumerable<LimitingParameter>> GetLimitingParameterAsync(int idTelemetry, DateTimeOffset begin, IAsbCloudDbContext db, CancellationToken token) private static async Task<IEnumerable<LimitingParameter>> GetLimitingParameterAsync(int idTelemetry, DateTimeOffset begin, IAsbCloudDbContext db, CancellationToken token)
{ {
var query = var query =
$"select " + $"select " +
$"limiting_parameters.date, limiting_parameters.id_feed_regulator, limiting_parameters.well_depth " + $"limiting_parameters.date, limiting_parameters.id_feed_regulator, limiting_parameters.well_depth " +
$"from ( " + $"from ( " +
@ -72,9 +71,9 @@ public class WorkLimitingParameterCalc : Work
$"lag(id_feed_regulator, 1) over (order by date) as id_feed_regulator_lag, " + $"lag(id_feed_regulator, 1) over (order by date) as id_feed_regulator_lag, " +
$"lead(id_feed_regulator, 1) over (order by date) as id_feed_regulator_lead " + $"lead(id_feed_regulator, 1) over (order by date) as id_feed_regulator_lead " +
$"from t_telemetry_data_saub " + $"from t_telemetry_data_saub " +
$"where id_feed_regulator is not null " + $"where id_feed_regulator is not null " +
$"and id_telemetry = {idTelemetry}" + $"and id_telemetry = {idTelemetry} " +
$"and date >= '{begin:u}'" + $"and date >= '{begin:u}' " +
$"order by date) as limiting_parameters " + $"order by date) as limiting_parameters " +
$"where id_feed_regulator_lag is null " + $"where id_feed_regulator_lag is null " +
$"or (id_feed_regulator != id_feed_regulator_lag and id_feed_regulator_lead != id_feed_regulator_lag) " + $"or (id_feed_regulator != id_feed_regulator_lag and id_feed_regulator_lead != id_feed_regulator_lag) " +
@ -102,14 +101,15 @@ public class WorkLimitingParameterCalc : Work
if (limitingLast.IdFeedRegulator != idLimiting || limitingLast.DepthStart < wellDepth) if (limitingLast.IdFeedRegulator != idLimiting || limitingLast.DepthStart < wellDepth)
{ {
limitingParameters.Add(new LimitingParameter { limitingParameters.Add(new LimitingParameter
{
IdTelemetry = idTelemetry, IdTelemetry = idTelemetry,
IdFeedRegulator = limitingLast.IdFeedRegulator, IdFeedRegulator = limitingLast.IdFeedRegulator,
DateStart = limitingLast.DateStart, DateStart = limitingLast.DateStart,
DateEnd = date, DateEnd = date,
DepthStart = limitingLast.DepthStart, DepthStart = limitingLast.DepthStart,
DepthEnd = wellDepth DepthEnd = wellDepth
}); });
limitingLast = new LimitingParameter limitingLast = new LimitingParameter
{ {