2023-12-04 17:09:58 +05:00
|
|
|
|
using System.Collections.Generic;
|
2023-12-13 18:06:48 +05:00
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
2023-12-04 17:09:58 +05:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using AsbCloudApp.Data;
|
|
|
|
|
using AsbCloudApp.Data.ProcessMaps;
|
|
|
|
|
using AsbCloudApp.Repositories;
|
|
|
|
|
using AsbCloudApp.Services;
|
|
|
|
|
using AsbCloudApp.Services.ProcessMaps;
|
|
|
|
|
|
|
|
|
|
namespace AsbCloudInfrastructure.Services.ProcessMaps;
|
|
|
|
|
|
|
|
|
|
public class ProcessMapPlanService<T> : IProcessMapPlanService<T>
|
|
|
|
|
where T : ProcessMapPlanBaseDto
|
|
|
|
|
{
|
|
|
|
|
private readonly ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository;
|
|
|
|
|
private readonly IProcessMapPlanRepository<T> processMapPlanRepository;
|
|
|
|
|
private readonly IRepositoryWellRelated<WellSectionPlanDto> wellSectionPlanRepository;
|
|
|
|
|
|
|
|
|
|
public ProcessMapPlanService(ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository,
|
|
|
|
|
IProcessMapPlanRepository<T> processMapPlanRepository,
|
|
|
|
|
IRepositoryWellRelated<WellSectionPlanDto> wellSectionPlanRepository)
|
|
|
|
|
{
|
|
|
|
|
this.wellSectionTypeRepository = wellSectionTypeRepository;
|
|
|
|
|
this.processMapPlanRepository = processMapPlanRepository;
|
|
|
|
|
this.wellSectionPlanRepository = wellSectionPlanRepository;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task<IEnumerable<ValidationResultDto<T>>> GetAsync(int idWell, CancellationToken cancellationToken)
|
|
|
|
|
{
|
|
|
|
|
var wellSectionTypes = await wellSectionTypeRepository.GetAllAsync(cancellationToken);
|
|
|
|
|
|
2023-12-13 18:06:48 +05:00
|
|
|
|
var processMapsPlan = await processMapPlanRepository.GetByIdWellAsync(idWell, cancellationToken);
|
2023-12-04 17:09:58 +05:00
|
|
|
|
|
2023-12-13 18:06:48 +05:00
|
|
|
|
var wellSectionsPlan = await wellSectionPlanRepository.GetByIdWellAsync(idWell, cancellationToken);
|
|
|
|
|
|
|
|
|
|
return processMapsPlan.Select(processMapPlan =>
|
2023-12-04 17:09:58 +05:00
|
|
|
|
{
|
2023-12-13 18:06:48 +05:00
|
|
|
|
var wellSectionPlan = wellSectionsPlan.FirstOrDefault(s => s.IdSectionType == processMapPlan.IdWellSectionType);
|
2023-12-04 17:09:58 +05:00
|
|
|
|
|
2023-12-13 18:06:48 +05:00
|
|
|
|
var isValid = wellSectionPlan is not null && wellSectionPlan.DepthStart <= processMapPlan.DepthStart &&
|
|
|
|
|
wellSectionPlan.DepthEnd >= processMapPlan.DepthEnd;
|
2023-12-04 17:09:58 +05:00
|
|
|
|
|
|
|
|
|
var validationResult = new ValidationResultDto<T>
|
|
|
|
|
{
|
|
|
|
|
Item = processMapPlan
|
|
|
|
|
};
|
|
|
|
|
|
2023-12-13 18:06:48 +05:00
|
|
|
|
if (isValid)
|
2023-12-04 17:09:58 +05:00
|
|
|
|
return validationResult;
|
2023-12-13 18:06:48 +05:00
|
|
|
|
|
|
|
|
|
var wellSectionType = wellSectionTypes.FirstOrDefault(s => s.Id == processMapPlan.IdWellSectionType);
|
|
|
|
|
|
|
|
|
|
validationResult.Warnings = new ValidationResult[]
|
2023-12-04 17:09:58 +05:00
|
|
|
|
{
|
2023-12-13 18:06:48 +05:00
|
|
|
|
new($"Конструкция секции: {wellSectionType?.Caption}; " +
|
|
|
|
|
$"Интервал бурения от {processMapPlan.DepthStart} до {processMapPlan.DepthEnd} не совпадает с данными указанными на странице " +
|
2023-12-15 11:57:01 +05:00
|
|
|
|
$"Конструкция скважины / План", new[] { nameof(processMapPlan.DepthStart), nameof(processMapPlan.DepthEnd) })
|
2023-12-04 17:09:58 +05:00
|
|
|
|
};
|
2023-12-13 18:06:48 +05:00
|
|
|
|
|
2023-12-04 17:09:58 +05:00
|
|
|
|
return validationResult;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|