forked from ddrilling/AsbCloudServer
65cccbfba0
1. Поправлен запрос в репозитории 2. Поправлен DbConxtext, удалено лишнее поле 3. Поправлена валидация. у ValidationResult добавлено название параметров
65 lines
2.6 KiB
C#
65 lines
2.6 KiB
C#
using System.Collections.Generic;
|
||
using System.ComponentModel.DataAnnotations;
|
||
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);
|
||
|
||
var processMapsPlan = await processMapPlanRepository.GetByIdWellAsync(idWell, cancellationToken);
|
||
|
||
var wellSectionsPlan = await wellSectionPlanRepository.GetByIdWellAsync(idWell, cancellationToken);
|
||
|
||
return processMapsPlan.Select(processMapPlan =>
|
||
{
|
||
var wellSectionPlan = wellSectionsPlan.FirstOrDefault(s => s.IdSectionType == processMapPlan.IdWellSectionType);
|
||
|
||
var isValid = wellSectionPlan is not null && wellSectionPlan.DepthStart <= processMapPlan.DepthStart &&
|
||
wellSectionPlan.DepthEnd >= processMapPlan.DepthEnd;
|
||
|
||
var validationResult = new ValidationResultDto<T>
|
||
{
|
||
Item = processMapPlan
|
||
};
|
||
|
||
if (isValid)
|
||
return validationResult;
|
||
|
||
var wellSectionType = wellSectionTypes.FirstOrDefault(s => s.Id == processMapPlan.IdWellSectionType);
|
||
|
||
validationResult.Warnings = new ValidationResult[]
|
||
{
|
||
new($"Конструкция секции: {wellSectionType?.Caption}; " +
|
||
$"Интервал бурения от {processMapPlan.DepthStart} до {processMapPlan.DepthEnd} не совпадает с данными указанными на странице " +
|
||
$"Конструкция скважины / План", new[] { nameof(processMapPlan.DepthStart), nameof(processMapPlan.DepthEnd) })
|
||
};
|
||
|
||
return validationResult;
|
||
});
|
||
}
|
||
} |