Синхронное получение диапазона дат операций

This commit is contained in:
Степанов Дмитрий 2024-03-25 07:33:42 +03:00
parent 16645d053a
commit e9386b5897
3 changed files with 29 additions and 6 deletions

View File

@ -76,6 +76,14 @@ namespace AsbCloudApp.Repositories
/// <returns></returns>
Task<IEnumerable<SectionByOperationsDto>> GetSectionsAsync(IEnumerable<int> idsWells, CancellationToken token);
/// <summary>
/// Получить диапазон дат выполнения операций
/// </summary>
/// <param name="idWell"></param>
/// <param name="idType"></param>
/// <returns></returns>
DatesRangeDto? GetDatesRange(int idWell, int idType);
/// <summary>
/// Получить диапазон дат выполнения операций
/// </summary>

View File

@ -314,6 +314,23 @@ public class WellOperationRepository : CrudRepositoryBase<WellOperationDto, Well
return sections;
}
public DatesRangeDto? GetDatesRange(int idWell, int idType)
{
var query = dbContext.WellOperations.Where(o => o.IdWell == idWell && o.IdType == idType);
if (!query.Any())
return null;
var minDate = query.Min(o => o.DateStart);
var maxDate = query.Max(o => o.DateStart);
return new DatesRangeDto
{
From = minDate.ToOffset(minDate.Offset),
To = maxDate.ToOffset(minDate.Offset)
};
}
public async Task<DatesRangeDto?> GetDatesRangeAsync(int idWell, int idType, CancellationToken cancellationToken)
{
var query = dbContext.WellOperations.Where(o => o.IdWell == idWell && o.IdType == idType);
@ -344,7 +361,6 @@ public class WellOperationRepository : CrudRepositoryBase<WellOperationDto, Well
//TODO: пока такое получение TimeZone скважины, нужно исправить на Lazy
//Хоть мы и тянем данные из кэша, но от получения TimeZone в этом методе нужно избавиться, пока так
var timeZoneOffset = wellService.GetTimezone(src.IdWell).Offset;
var dto = src.Adapt<WellOperationDto>();
dto.DateStart = src.DateStart.ToOffset(timeZoneOffset);
dto.LastUpdateDate = src.LastUpdateDate?.ToOffset(timeZoneOffset);

View File

@ -273,8 +273,7 @@ namespace AsbCloudInfrastructure.Services
if (entity.Timezone is null)
dto.Timezone = GetTimezone(entity.Id);
//TODO: фикс
//dto.StartDate = wellOperationRepository.GetDatesRangeAsync(entity.Id, ).FirstOperationDate(entity.Id)?.ToRemoteDateTime(dto.Timezone.Hours);
dto.StartDate = wellOperationRepository.GetDatesRange(entity.Id, WellOperation.IdOperationTypeFact)?.From.ToRemoteDateTime(dto.Timezone.Hours);
dto.WellType = entity.WellType.Caption;
dto.Cluster = entity.Cluster.Caption;
dto.Deposit = entity.Cluster.Deposit.Caption;