DD.WellWorkover.Cloud/AsbCloudInfrastructure/Services/ProcessMaps/ProcessMapPlanService.cs

65 lines
2.6 KiB
C#
Raw Normal View History

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} не совпадает с данными указанными на странице " +
$"Конструкция скважины / План", 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;
});
}
}