forked from ddrilling/AsbCloudServer
изменен метод BuildQuery в WellOperationRepository: вначале фильтрация, далее - проекция
This commit is contained in:
parent
c7a6e38315
commit
85c6b63c7a
@ -294,41 +294,8 @@ namespace AsbCloudInfrastructure.Repository
|
||||
var query = db.WellOperations
|
||||
.Include(s => s.WellSectionType)
|
||||
.Include(s => s.OperationCategory)
|
||||
.Where(o => o.IdWell == request.IdWell)
|
||||
.Select(o => new WellOperationDto
|
||||
{
|
||||
Id = o.Id,
|
||||
IdPlan = o.IdPlan,
|
||||
IdType = o.IdType,
|
||||
IdWell = o.IdWell,
|
||||
IdWellSectionType = o.IdWellSectionType,
|
||||
IdCategory = o.IdCategory,
|
||||
.Where(o => o.IdWell == request.IdWell);
|
||||
|
||||
CategoryName = o.WellSectionType.Caption,
|
||||
WellSectionTypeName = o.WellSectionType.Caption,
|
||||
|
||||
DateStart = DateTime.SpecifyKind(o.DateStart.UtcDateTime + timeZoneOffset, DateTimeKind.Unspecified),
|
||||
DepthStart = o.DepthStart,
|
||||
DepthEnd = o.DepthEnd,
|
||||
DurationHours = o.DurationHours,
|
||||
CategoryInfo = o.CategoryInfo,
|
||||
Comment = o.Comment,
|
||||
|
||||
NptHours = db.WellOperations
|
||||
.Where(subOp => subOp.IdWell == request.IdWell)
|
||||
.Where(subOp => subOp.IdType == 1)
|
||||
.Where(subOp => WellOperationCategory.NonProductiveTimeSubIds.Contains(subOp.IdCategory))
|
||||
.Where(subOp => subOp.DateStart <= o.DateStart)
|
||||
.Select(subOp => subOp.DurationHours)
|
||||
.Sum(),
|
||||
|
||||
Day = (o.DateStart - db.WellOperations
|
||||
.Where(subOp => subOp.IdWell == request.IdWell)
|
||||
.Where(subOp => subOp.IdType == o.IdType)
|
||||
.Where(subOp => subOp.DateStart <= o.DateStart)
|
||||
.Min(subOp => subOp.DateStart))
|
||||
.TotalDays,
|
||||
});
|
||||
|
||||
if (request.OperationType.HasValue)
|
||||
query = query.Where(e => e.IdType == request.OperationType.Value);
|
||||
@ -357,19 +324,58 @@ namespace AsbCloudInfrastructure.Repository
|
||||
query = query.Where(e => e.DateStart <= leDateOffset);
|
||||
}
|
||||
|
||||
var currentWellOperations = db.WellOperations
|
||||
.Where(subOp => subOp.IdWell == request.IdWell);
|
||||
|
||||
var wellOperationsWithCategoryNPT = currentWellOperations
|
||||
.Where(subOp => subOp.IdType == 1)
|
||||
.Where(subOp => WellOperationCategory.NonProductiveTimeSubIds.Contains(subOp.IdCategory));
|
||||
|
||||
|
||||
var result = query.Select(o => new WellOperationDto
|
||||
{
|
||||
Id = o.Id,
|
||||
IdPlan = o.IdPlan,
|
||||
IdType = o.IdType,
|
||||
IdWell = o.IdWell,
|
||||
IdWellSectionType = o.IdWellSectionType,
|
||||
IdCategory = o.IdCategory,
|
||||
|
||||
CategoryName = o.WellSectionType.Caption,
|
||||
WellSectionTypeName = o.WellSectionType.Caption,
|
||||
|
||||
DateStart = DateTime.SpecifyKind(o.DateStart.UtcDateTime + timeZoneOffset, DateTimeKind.Unspecified),
|
||||
DepthStart = o.DepthStart,
|
||||
DepthEnd = o.DepthEnd,
|
||||
DurationHours = o.DurationHours,
|
||||
CategoryInfo = o.CategoryInfo,
|
||||
Comment = o.Comment,
|
||||
|
||||
NptHours = wellOperationsWithCategoryNPT
|
||||
.Where(subOp => subOp.DateStart <= o.DateStart)
|
||||
.Select(subOp => subOp.DurationHours)
|
||||
.Sum(),
|
||||
|
||||
Day = (o.DateStart - currentWellOperations
|
||||
.Where(subOp => subOp.IdType == o.IdType)
|
||||
.Where(subOp => subOp.DateStart <= o.DateStart)
|
||||
.Min(subOp => subOp.DateStart))
|
||||
.TotalDays,
|
||||
});
|
||||
|
||||
if (request.SortFields?.Any() == true)
|
||||
{
|
||||
query = query.SortBy(request.SortFields);
|
||||
result = result.SortBy(request.SortFields);
|
||||
}
|
||||
else
|
||||
{
|
||||
query = query
|
||||
result = result
|
||||
.OrderBy(e => e.DateStart)
|
||||
.ThenBy(e => e.DepthEnd)
|
||||
.ThenBy(e => e.Id);
|
||||
}
|
||||
};
|
||||
|
||||
return query;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
#nullable disable
|
||||
|
Loading…
Reference in New Issue
Block a user