forked from ddrilling/AsbCloudServer
Доработан метод получения статистики по активным скважинам
This commit is contained in:
parent
562bf5b348
commit
0e5ff57d0f
@ -14,7 +14,7 @@ namespace AsbCloudApp.Data.Subsystems
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Наработки подсистем
|
/// Наработки подсистем
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IEnumerable<SubsystemStatDto> listSubsystemStat { get; set; }
|
public List<SubsystemStatDto> listSubsystemStat { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -184,71 +184,79 @@ namespace AsbCloudInfrastructure.Services.Subsystems
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO:
|
||||||
|
// скорее всего нужно доработать wellService - первое это метод
|
||||||
|
// GetWellsByCompanyAsync (получать сразу активные скважины ,а не вытягивать сначала все)
|
||||||
|
// второе - метод GetOperationsAsync - по умолчанию если не указан
|
||||||
|
// ИД скважины он заполняется как 0 , в нашем случае нужно получить опред операции по ВСЕМ
|
||||||
|
// скважинам
|
||||||
|
|
||||||
|
|
||||||
private async Task<IEnumerable<WellDto>> GetSubsystemOperationTimeAll(int idCompany, CancellationToken token)
|
private async Task<IEnumerable<WellDto>> GetSubsystemOperationTimeAll(int idCompany, CancellationToken token)
|
||||||
{
|
{
|
||||||
var listWell = await wellService.GetWellsByCompanyAsync(idCompany, token);
|
var listWell = await wellService.GetWellsByCompanyAsync(idCompany, token);
|
||||||
var active = listWell.Where(w => w.IdState == 1);
|
var active = listWell.Where(w => w.IdState == 1);
|
||||||
return active;
|
return active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<IEnumerable<SubsystemActiveWellStatDto>?> GetStatByActiveWell(int idCompany, DateTime? gtDate, DateTime? ltDate, CancellationToken token)
|
public async Task<IEnumerable<SubsystemActiveWellStatDto>?> GetStatByActiveWell(int idCompany, DateTime? gtDate, DateTime? ltDate, CancellationToken token)
|
||||||
{
|
{
|
||||||
var activeWell = await GetSubsystemOperationTimeAll(idCompany, token);
|
var activeWell = await GetSubsystemOperationTimeAll(idCompany, token);
|
||||||
var telemetryIds = activeWell.Select(w => w.IdTelemetry);
|
var telemetryIds = activeWell.Select(w => w.IdTelemetry).Distinct();
|
||||||
var query = db.SubsystemOperationTimes
|
var query = db.SubsystemOperationTimes
|
||||||
.Include(o => o.Subsystem)
|
|
||||||
.Where(o => telemetryIds.Contains(o.IdTelemetry))
|
.Where(o => telemetryIds.Contains(o.IdTelemetry))
|
||||||
.AsNoTracking();
|
.AsNoTracking();
|
||||||
|
|
||||||
if (query is null)
|
if (query is null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
DateTime today = DateTime.Today;
|
DateTime today = DateTime.Today;
|
||||||
if (gtDate.HasValue)
|
if (!gtDate.HasValue)
|
||||||
{
|
|
||||||
query = query.Where(o => o.DateEnd >= gtDate);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
gtDate = today;
|
gtDate = today;
|
||||||
query = query.Where(o => o.DateEnd == gtDate);
|
}
|
||||||
}
|
query = query.Where(o => o.DateStart >= gtDate.Value.ToUniversalTime());
|
||||||
|
|
||||||
if (ltDate.HasValue)
|
if (!ltDate.HasValue)
|
||||||
{
|
|
||||||
query = query.Where(o => o.DateStart <= ltDate);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
ltDate = today.AddDays(-1);
|
ltDate = today.AddDays(-1);
|
||||||
query = query.Where(o => o.DateStart == ltDate );
|
}
|
||||||
}
|
query = query.Where(o => o.DateEnd <= ltDate.Value.ToUniversalTime());
|
||||||
var detectedOperationsRequest = new DetectedOperationRequest()
|
var result = new List<SubsystemActiveWellStatDto>();
|
||||||
{
|
var subsystemsOperationTime = query.ToList();
|
||||||
IdsCategories = new List<int>() {
|
var groupingSubsystemsOperationTime = subsystemsOperationTime.GroupBy(g => g.IdTelemetry).ToList();
|
||||||
1,3
|
|
||||||
},
|
|
||||||
LtDate = ltDate,
|
|
||||||
GtDate = gtDate,
|
|
||||||
};
|
|
||||||
var detectedOperations = await detectedOperationService.GetOperationsAsync(detectedOperationsRequest, token);
|
|
||||||
var groupData = query.GroupBy(g => g.IdTelemetry);
|
|
||||||
var result = new List<SubsystemActiveWellStatDto>();
|
|
||||||
foreach (var group in groupData)
|
|
||||||
{
|
|
||||||
var wellStat = new SubsystemActiveWellStatDto();
|
|
||||||
wellStat.IdWell = activeWell.Where(w => w.IdTelemetry == group.Key).Select(w => w.Id).FirstOrDefault();
|
|
||||||
var groupSubsystem = (IEnumerable<IGrouping<int, SubsystemOperationTimeDto>>)group.GroupBy(g => g.IdSubsystem);
|
|
||||||
var detectedOperationsById = detectedOperations.Where(d => d.IdWell == wellStat.IdWell).ToList();
|
|
||||||
var depthInterval = GetDepthInterval(detectedOperationsById);
|
|
||||||
wellStat.listSubsystemStat = CalcStat((IEnumerable<SubsystemOperationTimeDto>)groupSubsystem, depthInterval);
|
|
||||||
result.Add(wellStat);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
foreach (var group in groupingSubsystemsOperationTime)
|
||||||
|
{
|
||||||
|
var idWell = activeWell.Where(w => w.IdTelemetry == group.Key).Select(w => w.Id).FirstOrDefault();
|
||||||
|
var wellStat = new SubsystemActiveWellStatDto()
|
||||||
|
{
|
||||||
|
IdWell = idWell,
|
||||||
|
listSubsystemStat = new List<SubsystemStatDto>()
|
||||||
|
|
||||||
|
};
|
||||||
|
var detectedOperationsRequest = new DetectedOperationRequest()
|
||||||
|
{
|
||||||
|
IdWell = idWell,
|
||||||
|
IdsCategories = new List<int>() {1,3},
|
||||||
|
LtDate = ltDate,
|
||||||
|
GtDate = gtDate,
|
||||||
|
};
|
||||||
|
var detectedOperations = await detectedOperationService.GetOperationsAsync(detectedOperationsRequest, token);
|
||||||
|
if (detectedOperations is not null && detectedOperations.Any())
|
||||||
|
{
|
||||||
|
var depthInterval = GetDepthInterval(detectedOperations);
|
||||||
|
var groupSubsystem = group.GroupBy(g => g.IdSubsystem).ToList();
|
||||||
|
|
||||||
|
foreach (var subsystem in groupSubsystem)
|
||||||
|
{
|
||||||
|
var dto = subsystem.Select(s => s.Adapt<SubsystemOperationTimeDto>());
|
||||||
|
var subsystemStat = CalcStat(dto, depthInterval);
|
||||||
|
wellStat.listSubsystemStat.AddRange(subsystemStat);
|
||||||
|
}
|
||||||
|
result.Add(wellStat);
|
||||||
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user