forked from ddrilling/AsbCloudServer
-correction sql parameter on Background service
-revision TRIM function on SubsystemOperationTimeService
This commit is contained in:
parent
e62d9907cd
commit
74901407c0
@ -3,6 +3,7 @@ using AsbCloudDb.Model.Subsystems;
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
|
using Npgsql;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
@ -108,12 +109,12 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
$"select tt.date, tt.mode, tt.well_depth" +
|
$"select tt.date, tt.mode, tt.well_depth" +
|
||||||
$" from (select date, mode, well_depth, lag(mode,1) over (order by date) as mode_prev" +
|
$" 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" +
|
$" 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;";
|
$" where tt.mode != tt.mode_prev and tt.date >= @begin order by tt.date;";
|
||||||
using var command = db.Database.GetDbConnection().CreateCommand();
|
using var command = db.Database.GetDbConnection().CreateCommand();
|
||||||
command.CommandText = operationTimeSaub;
|
command.CommandText = operationTimeSaub;
|
||||||
SqlParameter telemetry = new SqlParameter("@idTelemetry", idTelemetry);
|
var telemetry = new NpgsqlParameter("@idTelemetry", idTelemetry);
|
||||||
command.Parameters.Add(telemetry);
|
command.Parameters.Add(telemetry);
|
||||||
SqlParameter dateStart = new SqlParameter("@begin", begin);
|
var dateStart = new NpgsqlParameter("@begin", begin);
|
||||||
command.Parameters.Add(dateStart);
|
command.Parameters.Add(dateStart);
|
||||||
db.Database.OpenConnection();
|
db.Database.OpenConnection();
|
||||||
using var result = await command.ExecuteReaderAsync(token);
|
using var result = await command.ExecuteReaderAsync(token);
|
||||||
@ -169,15 +170,15 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
var operationTimeSpinWithDepth =
|
var operationTimeSpinWithDepth =
|
||||||
$"select tspin.\"date\", tspin.\"mode\", tspin.\"state\", tsaub.\"well_depth\"" +
|
$"select tspin.\"date\", tspin.\"mode\", tspin.\"state\", tsaub.\"well_depth\"" +
|
||||||
$" from (select \"date\" ,\"mode\" ,lag(mode, 1) over (order by \"date\") as mode_pre, state , " +
|
$" from (select \"date\" ,\"mode\" ,lag(mode, 1) over (order by \"date\") as mode_pre, state , " +
|
||||||
$"lag(state, 1) over (order by \"date\") as state_pre from t_telemetry_data_spin where id_telemetry = {idTelemetry} and date >= '{begin}') as tspin " +
|
$"lag(state, 1) over (order by \"date\") as state_pre from t_telemetry_data_spin where id_telemetry = @idTelemetry and date >= @begin) as tspin " +
|
||||||
$"join (select \"date\", well_depth from t_telemetry_data_saub where id_telemetry = {idTelemetry} and date >= '{begin}') as tsaub " +
|
$"join (select \"date\", well_depth from t_telemetry_data_saub where id_telemetry = @idTelemetry and date >= @begin) as tsaub " +
|
||||||
$"on EXTRACT(EPOCH from tspin.date) = EXTRACT(EPOCH from tsaub.date) " +
|
$"on EXTRACT(EPOCH from tspin.date) = EXTRACT(EPOCH from tsaub.date) " +
|
||||||
$"where mode!=mode_pre or state != state_pre order by \"date\";";
|
$"where mode!=mode_pre or state != state_pre order by \"date\";";
|
||||||
using var command = db.Database.GetDbConnection().CreateCommand();
|
using var command = db.Database.GetDbConnection().CreateCommand();
|
||||||
command.CommandText = operationTimeSpinWithDepth;
|
command.CommandText = operationTimeSpinWithDepth;
|
||||||
SqlParameter telemetry = new SqlParameter("@idTelemetry", idTelemetry);
|
var telemetry = new NpgsqlParameter("@idTelemetry", idTelemetry);
|
||||||
command.Parameters.Add(telemetry);
|
command.Parameters.Add(telemetry);
|
||||||
SqlParameter dateStart = new SqlParameter("@begin", begin);
|
var dateStart = new NpgsqlParameter("@begin", begin);
|
||||||
command.Parameters.Add(dateStart);
|
command.Parameters.Add(dateStart);
|
||||||
db.Database.OpenConnection();
|
db.Database.OpenConnection();
|
||||||
using var result = await command.ExecuteReaderAsync(token);
|
using var result = await command.ExecuteReaderAsync(token);
|
||||||
|
@ -28,7 +28,7 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
this.db = db;
|
this.db = db;
|
||||||
this.wellService = wellService;
|
this.wellService = wellService;
|
||||||
this.subsystemService = subsystemService;
|
this.subsystemService = subsystemService;
|
||||||
}
|
}
|
||||||
public async Task<int> DeleteAsync(SubsystemOperationTimeRequest request, CancellationToken token)
|
public async Task<int> DeleteAsync(SubsystemOperationTimeRequest request, CancellationToken token)
|
||||||
{
|
{
|
||||||
var well = await wellService.GetOrDefaultAsync(request.IdWell, token);
|
var well = await wellService.GetOrDefaultAsync(request.IdWell, token);
|
||||||
@ -48,8 +48,8 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
return null;
|
return null;
|
||||||
var query = BuildQuery(request);
|
var query = BuildQuery(request);
|
||||||
if (query is null)
|
if (query is null)
|
||||||
return null;
|
return null;
|
||||||
if (request.SelectMode == SubsystemOperationTimeRequest.SelectModeInner)
|
if (request.SelectMode == SubsystemOperationTimeRequest.SelectModeInner)
|
||||||
{
|
{
|
||||||
if (request.GtDate is not null)
|
if (request.GtDate is not null)
|
||||||
query = query.Where(o => o.DateStart >= request.GtDate.Value || o.DateEnd >= request.GtDate.Value);
|
query = query.Where(o => o.DateStart >= request.GtDate.Value || o.DateEnd >= request.GtDate.Value);
|
||||||
@ -59,13 +59,17 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
}
|
}
|
||||||
if (request.SelectMode == SubsystemOperationTimeRequest.SelectModeTrim)
|
if (request.SelectMode == SubsystemOperationTimeRequest.SelectModeTrim)
|
||||||
{
|
{
|
||||||
var begin = request.GtDate ?? query.Min(d => d.DateStart).UtcDateTime;
|
if (!request.GtDate.HasValue)
|
||||||
var end = request.LtDate ?? query.Max(d => d.DateEnd).UtcDateTime;
|
throw new ArgumentNullException(nameof(request.GtDate));
|
||||||
|
var begin = request.GtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours);
|
||||||
|
if (!request.LtDate.HasValue)
|
||||||
|
throw new ArgumentNullException(nameof(request.LtDate));
|
||||||
|
var end = request.LtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours);
|
||||||
var data = query.ToList();
|
var data = query.ToList();
|
||||||
data = Trim(data, begin, end);
|
data = Trim(data, begin, end);
|
||||||
return data.Select(o => Convert(o, well));
|
return data.Select(o => Convert(o, well));
|
||||||
}
|
}
|
||||||
var dtos = query.Select(o => Convert(o,well));
|
var dtos = query.Select(o => Convert(o, well));
|
||||||
return dtos;
|
return dtos;
|
||||||
}
|
}
|
||||||
public async Task<IEnumerable<SubsystemStatDto>?> GetStatAsync(SubsystemOperationTimeRequest request, CancellationToken token)
|
public async Task<IEnumerable<SubsystemStatDto>?> GetStatAsync(SubsystemOperationTimeRequest request, CancellationToken token)
|
||||||
@ -77,25 +81,29 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
var statList = CalcStat(data, request);
|
var statList = CalcStat(data, request);
|
||||||
return statList;
|
return statList;
|
||||||
}
|
}
|
||||||
private List<SubsystemOperationTime> Trim(List<SubsystemOperationTime> data, DateTime gtDate, DateTime ltDate)
|
private List<SubsystemOperationTime> Trim(List<SubsystemOperationTime> data, DateTimeOffset gtDate, DateTimeOffset ltDate)
|
||||||
{
|
{
|
||||||
var itemsToTrim = data.Where(q =>
|
var ItemsNormal = data.Where(q =>
|
||||||
(q.DateStart >= gtDate && q.DateStart <= ltDate)||
|
(q.DateStart >= gtDate) && (q.DateEnd <= ltDate)).ToList();
|
||||||
(q.DateEnd >= gtDate && q.DateEnd <= ltDate))
|
var itemsToTrim = data.Where(q =>
|
||||||
|
(q.DateStart < gtDate && q.DateEnd <= ltDate && q.DateEnd > gtDate) ||
|
||||||
|
(q.DateStart >= gtDate && q.DateEnd > ltDate && q.DateStart < ltDate) ||
|
||||||
|
(q.DateStart < gtDate && q.DateEnd > ltDate))
|
||||||
.Select(o => new SubsystemOperationTime
|
.Select(o => new SubsystemOperationTime
|
||||||
{
|
{
|
||||||
Id = o.Id,
|
Id = o.Id,
|
||||||
DateStart = gtDate < o.DateStart ? gtDate : o.DateStart,
|
DateStart = (o.DateStart >= gtDate) && (o.DateStart <= ltDate) ? o.DateStart : gtDate,
|
||||||
DateEnd = ltDate > o.DateEnd ? ltDate : o.DateEnd,
|
DateEnd = (o.DateEnd >= gtDate) && (o.DateEnd <= ltDate) ? o.DateEnd : ltDate,
|
||||||
IdSubsystem = o.IdSubsystem,
|
IdSubsystem = o.IdSubsystem,
|
||||||
IdTelemetry = o.IdTelemetry,
|
IdTelemetry = o.IdTelemetry,
|
||||||
DepthEnd = ltDate>o.DateEnd ? null : o.DepthEnd,
|
DepthEnd = (o.DateEnd >= gtDate) && (o.DateEnd <= ltDate) ? o.DepthEnd : null ,
|
||||||
DepthStart = gtDate < o.DateStart ? null : o.DepthStart,
|
DepthStart = (o.DateStart >= gtDate) && (o.DateStart <= ltDate) ? o.DepthStart : null,
|
||||||
Subsystem = o.Subsystem,
|
Subsystem = o.Subsystem,
|
||||||
Telemetry = o.Telemetry
|
Telemetry = o.Telemetry
|
||||||
})
|
})
|
||||||
.ToList();
|
.ToList();
|
||||||
return itemsToTrim;
|
ItemsNormal.AddRange(itemsToTrim);
|
||||||
|
return ItemsNormal.OrderBy(o => o.DateStart).ToList();
|
||||||
}
|
}
|
||||||
private IEnumerable<SubsystemStatDto> CalcStat(IEnumerable<SubsystemOperationTimeDto> listOperationTimeSubsystems, SubsystemOperationTimeRequest request)
|
private IEnumerable<SubsystemStatDto> CalcStat(IEnumerable<SubsystemOperationTimeDto> listOperationTimeSubsystems, SubsystemOperationTimeRequest request)
|
||||||
{
|
{
|
||||||
@ -137,11 +145,15 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
query = query.Where(o => request.IdsSubsystems.Contains(o.IdSubsystem));
|
query = query.Where(o => request.IdsSubsystems.Contains(o.IdSubsystem));
|
||||||
|
|
||||||
|
|
||||||
if (request.GtDate is not null)
|
if (request.GtDate is not null && request.LtDate is not null)
|
||||||
|
{
|
||||||
|
query = query.Where(o => (o.DateStart >= request.GtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours))
|
||||||
|
||(o.DateEnd <= request.LtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours)));
|
||||||
|
}
|
||||||
|
else if (request.GtDate is not null)
|
||||||
query = query.Where(o => o.DateStart >= request.GtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours));
|
query = query.Where(o => o.DateStart >= request.GtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours));
|
||||||
|
|
||||||
if (request.LtDate is not null)
|
else if (request.LtDate is not null)
|
||||||
query = query.Where(o => o.DateEnd <= request.LtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours));
|
query = query.Where(o => o.DateEnd <= request.LtDate.Value.ToUtcDateTimeOffset(well.Timezone.Hours));
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user