forked from ddrilling/AsbCloudServer
1. Возвращаемый тип списка плановых операций - IEnumerable<WellOperationDto>
2. Добавлен CancellationToken token 3. Рефактор запроса на получение списка плановых операций 4. Проверка на доступность скважины пользователю 5. Сортировка данных по дате в методе MergeArrays
This commit is contained in:
parent
aa3b96b31b
commit
c7a6e38315
@ -28,9 +28,10 @@ namespace AsbCloudApp.Repositories
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// список плановых операций для сопоставления
|
/// список плановых операций для сопоставления
|
||||||
/// <param name="idWell"></param>
|
/// <param name="idWell"></param>
|
||||||
|
/// <param name="token"></param>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<WellOperationDto>> GetOperationsPlan(int idWell);
|
Task<IEnumerable<WellOperationDto>> GetOperationsPlanAsync(int idWell, CancellationToken token);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// дата/время первой операции по скважине
|
/// дата/время первой операции по скважине
|
||||||
|
@ -58,34 +58,37 @@ namespace AsbCloudInfrastructure.Repository
|
|||||||
.GetOrCreateBasic<WellSectionType>(db)
|
.GetOrCreateBasic<WellSectionType>(db)
|
||||||
.ToDictionary(s => s.Id, s => s.Caption);
|
.ToDictionary(s => s.Id, s => s.Caption);
|
||||||
|
|
||||||
public async Task<List<WellOperationDto>> GetOperationsPlan(int idWell)
|
public async Task<IEnumerable<WellOperationDto>> GetOperationsPlanAsync(int idWell, CancellationToken token)
|
||||||
{
|
{
|
||||||
var lastFactOperation = await db.WellOperations
|
var lastFactOperation = await db.WellOperations
|
||||||
.Where(x => x.IdType == WellOperation.IdOperationTypeFact)
|
.Where(x => x.IdType == WellOperation.IdOperationTypeFact)
|
||||||
.Where(x => x.IdPlan != null)
|
.Where(x => x.IdPlan != null)
|
||||||
.OrderByDescending(x => x.DateStart)
|
.OrderByDescending(x => x.DateStart)
|
||||||
.FirstOrDefaultAsync()
|
.FirstOrDefaultAsync(token)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
var query = await db.WellOperations
|
var query = db.WellOperations
|
||||||
.Include(x => x.OperationCategory)
|
.Include(x => x.OperationCategory)
|
||||||
.Where(x => x.IdWell == idWell)
|
.Where(x => x.IdWell == idWell)
|
||||||
.Where(x => x.IdType == WellOperation.IdOperationTypePlan)
|
.Where(x => x.IdType == WellOperation.IdOperationTypePlan);
|
||||||
.AsNoTracking()
|
|
||||||
.ToListAsync()
|
|
||||||
.ConfigureAwait(false);
|
|
||||||
|
|
||||||
if (lastFactOperation is not null)
|
if (lastFactOperation is not null)
|
||||||
{
|
{
|
||||||
var dateStart = lastFactOperation?.DateStart!;
|
var dateStart = lastFactOperation?.DateStart!;
|
||||||
query = query.Where(x => x.DateStart >= dateStart).ToList();
|
query = query.Where(x => x.DateStart >= dateStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
var timezone = wellService.GetTimezone(idWell);
|
var timezone = wellService.GetTimezone(idWell);
|
||||||
var timeZoneOffset = TimeSpan.FromHours(timezone.Hours);
|
var timeZoneOffset = TimeSpan.FromHours(timezone.Hours);
|
||||||
|
|
||||||
var result = query.
|
var entities = await query
|
||||||
Select(o => new WellOperationDto()
|
.AsNoTracking()
|
||||||
|
.ToArrayAsync(token)
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
|
var result = entities
|
||||||
|
.Select(o => new WellOperationDto()
|
||||||
{
|
{
|
||||||
IdWell = o.IdWell,
|
IdWell = o.IdWell,
|
||||||
CategoryName = o.OperationCategory.Name,
|
CategoryName = o.OperationCategory.Name,
|
||||||
@ -94,8 +97,7 @@ namespace AsbCloudInfrastructure.Repository
|
|||||||
DepthStart = o.DepthStart,
|
DepthStart = o.DepthStart,
|
||||||
DateStart = DateTime.SpecifyKind(o.DateStart.UtcDateTime + timeZoneOffset, DateTimeKind.Unspecified),
|
DateStart = DateTime.SpecifyKind(o.DateStart.UtcDateTime + timeZoneOffset, DateTimeKind.Unspecified),
|
||||||
Id = o.Id
|
Id = o.Id
|
||||||
})
|
});
|
||||||
.ToList();
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
|
|||||||
BhaUpSpeed = CalcBhaUpSpeed(races),
|
BhaUpSpeed = CalcBhaUpSpeed(races),
|
||||||
CasingDownSpeed = CalcCasingDownSpeed(operations),
|
CasingDownSpeed = CalcCasingDownSpeed(operations),
|
||||||
NonProductiveHours = operations
|
NonProductiveHours = operations
|
||||||
.Where(o => WellOperationCategory.NonProductiveTimeSubIds.Contains( o.IdCategory))
|
.Where(o => WellOperationCategory.NonProductiveTimeSubIds.Contains(o.IdCategory))
|
||||||
.Sum(o => o.DurationHours),
|
.Sum(o => o.DurationHours),
|
||||||
};
|
};
|
||||||
return section;
|
return section;
|
||||||
@ -330,7 +330,7 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
|
|||||||
{
|
{
|
||||||
if (race.Operations[i].IdCategory == WellOperationCategory.IdBhaDown)
|
if (race.Operations[i].IdCategory == WellOperationCategory.IdBhaDown)
|
||||||
dHours += race.Operations[i].DurationHours;
|
dHours += race.Operations[i].DurationHours;
|
||||||
if (WellOperationCategory.MechanicalDrillingSubIds.Contains( race.Operations[i].IdCategory))
|
if (WellOperationCategory.MechanicalDrillingSubIds.Contains(race.Operations[i].IdCategory))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -492,7 +492,10 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
|
|||||||
result.AddRange(oparationsFactWithPlan);
|
result.AddRange(oparationsFactWithPlan);
|
||||||
result.AddRange(oparationsPlanWithNoFact);
|
result.AddRange(oparationsPlanWithNoFact);
|
||||||
|
|
||||||
result = result.OrderBy(x => x.Item1?.DateStart).ToList();
|
result = result
|
||||||
|
.OrderBy(x => x.Item1?.DateStart)
|
||||||
|
.ThenBy(x => x.Item2?.DateStart)
|
||||||
|
.ToList();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,15 +64,18 @@ namespace AsbCloudWebApi.Controllers
|
|||||||
/// Возвращает список плановых операций для сопоставления
|
/// Возвращает список плановых операций для сопоставления
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="idWell">id скважины</param>
|
/// <param name="idWell">id скважины</param>
|
||||||
|
/// <param name="token"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("operationsPlan")]
|
[Route("operationsPlan")]
|
||||||
[Permission]
|
[ProducesResponseType(typeof(IEnumerable<WellOperationDto>), (int)System.Net.HttpStatusCode.OK)]
|
||||||
[ProducesResponseType(typeof(List<WellOperationDto>), (int)System.Net.HttpStatusCode.OK)]
|
public async Task<IActionResult> GetOperationsPlanAsync([FromRoute] int idWell, CancellationToken token)
|
||||||
public async Task<IActionResult> GetOperationsPlan([FromRoute] int idWell)
|
|
||||||
{
|
{
|
||||||
|
if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))
|
||||||
|
return Forbid();
|
||||||
|
|
||||||
var result = await operationRepository
|
var result = await operationRepository
|
||||||
.GetOperationsPlan(idWell)
|
.GetOperationsPlanAsync(idWell, token)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
@ -167,8 +170,8 @@ namespace AsbCloudWebApi.Controllers
|
|||||||
if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))
|
if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))
|
||||||
return Forbid();
|
return Forbid();
|
||||||
|
|
||||||
foreach(var value in values)
|
foreach (var value in values)
|
||||||
value.IdWell= idWell;
|
value.IdWell = idWell;
|
||||||
|
|
||||||
var result = await operationRepository.InsertRangeAsync(values, token)
|
var result = await operationRepository.InsertRangeAsync(values, token)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
@ -193,7 +196,7 @@ namespace AsbCloudWebApi.Controllers
|
|||||||
if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))
|
if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))
|
||||||
return Forbid();
|
return Forbid();
|
||||||
|
|
||||||
value.IdWell= idWell;
|
value.IdWell = idWell;
|
||||||
value.Id = idOperation;
|
value.Id = idOperation;
|
||||||
|
|
||||||
var result = await operationRepository.UpdateAsync(value, token)
|
var result = await operationRepository.UpdateAsync(value, token)
|
||||||
|
Loading…
Reference in New Issue
Block a user