forked from ddrilling/AsbCloudServer
Правка по результатам ревью
This commit is contained in:
parent
9ead473975
commit
cb54d40774
@ -16,11 +16,11 @@ namespace AsbCloudApp.Data
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Список операций композитной скважины
|
/// Список операций композитной скважины
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<WellOperationDto> WellOperationsComposite { get; set; } = new();
|
public IEnumerable<WellOperationDto> WellOperationsComposite { get; set; } = null!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Список операций, сгруппированный по скважинам
|
/// Список операций, на основе которых были рассчитаны операции по композитной скважине
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Dictionary<int, WellOperationDto[]> WellOperationsGroupedByWell { get; set; } = new();
|
public IEnumerable<WellCompositeOperationSourceDto> WellCompositeSourceOperations { get; set; } = null!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,24 @@
|
|||||||
using AsbCloudApp.Data;
|
using AsbCloudApp.Data;
|
||||||
|
using AsbCloudApp.Data.WellOperation;
|
||||||
using AsbCloudApp.Repositories;
|
using AsbCloudApp.Repositories;
|
||||||
using AsbCloudApp.Requests;
|
using AsbCloudApp.Requests;
|
||||||
using AsbCloudApp.Services;
|
using AsbCloudApp.Services;
|
||||||
using AsbCloudDb.Model;
|
using AsbCloudDb.Model;
|
||||||
|
using Mapster;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AsbCloudApp.Data.WellOperation;
|
|
||||||
using Mapster;
|
|
||||||
|
|
||||||
namespace AsbCloudInfrastructure.Services
|
namespace AsbCloudInfrastructure.Services
|
||||||
{
|
{
|
||||||
public class WellCompositeOperationService : IWellCompositeOperationService
|
public class WellCompositeOperationService : IWellCompositeOperationService
|
||||||
{
|
{
|
||||||
private ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository;
|
private readonly ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository;
|
||||||
private IWellOperationCategoryRepository wellOperationCategoryRepository;
|
private readonly IWellOperationCategoryRepository wellOperationCategoryRepository;
|
||||||
private IWellOperationRepository wellOperationRepository;
|
private readonly IWellOperationRepository wellOperationRepository;
|
||||||
|
private readonly IWellService wellService;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Тип секции "Транспортный стол"
|
/// Тип секции "Транспортный стол"
|
||||||
@ -128,11 +129,13 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
public WellCompositeOperationService(
|
public WellCompositeOperationService(
|
||||||
ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository,
|
ICrudRepository<WellSectionTypeDto> wellSectionTypeRepository,
|
||||||
IWellOperationCategoryRepository wellOperationCategoryRepository,
|
IWellOperationCategoryRepository wellOperationCategoryRepository,
|
||||||
IWellOperationRepository wellOperationRepository)
|
IWellOperationRepository wellOperationRepository,
|
||||||
|
IWellService wellService)
|
||||||
{
|
{
|
||||||
this.wellSectionTypeRepository = wellSectionTypeRepository;
|
this.wellSectionTypeRepository = wellSectionTypeRepository;
|
||||||
this.wellOperationCategoryRepository = wellOperationCategoryRepository;
|
this.wellOperationCategoryRepository = wellOperationCategoryRepository;
|
||||||
this.wellOperationRepository = wellOperationRepository;
|
this.wellOperationRepository = wellOperationRepository;
|
||||||
|
this.wellService = wellService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<WellCompositeOperationDto> GetAsync(IEnumerable<int> idsWells, CancellationToken token)
|
public async Task<WellCompositeOperationDto> GetAsync(IEnumerable<int> idsWells, CancellationToken token)
|
||||||
@ -143,6 +146,9 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
var categories = wellOperationCategoryRepository.Get(true);
|
var categories = wellOperationCategoryRepository.Get(true);
|
||||||
var categoriesDict = categories.ToDictionary(s => s.Id, s => s.Name);
|
var categoriesDict = categories.ToDictionary(s => s.Id, s => s.Name);
|
||||||
|
|
||||||
|
var wells = await wellService.GetAsync(new WellRequest { Ids = idsWells }, token);
|
||||||
|
var wellsDict = wells.ToDictionary(w => w.Id, w => w.Caption);
|
||||||
|
|
||||||
var idsWellSectionTypes = WellSectionTypesWithCategories.Select(t => t.IdSectionType).Distinct();
|
var idsWellSectionTypes = WellSectionTypesWithCategories.Select(t => t.IdSectionType).Distinct();
|
||||||
var usedCategories = WellSectionTypesWithCategories.Select(c => c.IdCategory).Distinct();
|
var usedCategories = WellSectionTypesWithCategories.Select(c => c.IdCategory).Distinct();
|
||||||
|
|
||||||
@ -158,9 +164,10 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
|
|
||||||
var wellOperationsWithComposite = new List<Dictionary<int, WellOperationDto>>();
|
var wellOperationsWithComposite = new List<Dictionary<int, WellOperationDto>>();
|
||||||
var compositeDepth = 0d;
|
var compositeDepth = 0d;
|
||||||
|
var compositeDay = 0d;
|
||||||
var result = new WellCompositeOperationDto();
|
var result = new WellCompositeOperationDto();
|
||||||
|
|
||||||
var prevDay = 0.0;
|
var compositeOperations = new List<WellOperationDto>();
|
||||||
foreach ((int IdSection, int IdCategory) in WellSectionTypesWithCategories)
|
foreach ((int IdSection, int IdCategory) in WellSectionTypesWithCategories)
|
||||||
{
|
{
|
||||||
var filteredByTemplate = operationsForComposite
|
var filteredByTemplate = operationsForComposite
|
||||||
@ -188,22 +195,32 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
.First();
|
.First();
|
||||||
|
|
||||||
compositeOperation.IdWell = 0;
|
compositeOperation.IdWell = 0;
|
||||||
compositeOperation.Day = prevDay + compositeOperation.DurationHours;
|
compositeOperation.Day = compositeDay + compositeOperation.DurationHours;
|
||||||
|
|
||||||
if (compositeDepth > compositeOperation.DepthStart)
|
if (compositeDepth > compositeOperation.DepthStart)
|
||||||
compositeOperation.DepthStart = compositeDepth;
|
compositeOperation.DepthStart = compositeDepth;
|
||||||
|
|
||||||
|
compositeOperations.Add(compositeOperation);
|
||||||
|
|
||||||
compositeDepth = compositeOperation.DepthStart;
|
compositeDepth = compositeOperation.DepthStart;
|
||||||
|
compositeDay = compositeOperation.Day;
|
||||||
result.WellOperationsComposite.Add(compositeOperation);
|
|
||||||
|
|
||||||
prevDay = compositeOperation.Day;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var groupedByWellOperations = operations
|
var groupedByWellOperations = operations
|
||||||
.GroupBy(o => o.IdWell)
|
.GroupBy(o => o.IdWell)
|
||||||
.ToDictionary(o => o.Key, o => o.ToArray());
|
.ToDictionary(o => o.Key, o => o.ToArray())
|
||||||
result.WellOperationsGroupedByWell = groupedByWellOperations;
|
.Select(o => new WellCompositeOperationSourceDto()
|
||||||
|
{
|
||||||
|
Operations = o.Value,
|
||||||
|
Well = new WellDto()
|
||||||
|
{
|
||||||
|
Id = o.Key,
|
||||||
|
Caption = wellsDict.TryGetValue(o.Key, out string? caption) ? caption : string.Empty,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
result.WellOperationsComposite = compositeOperations;
|
||||||
|
result.WellCompositeSourceOperations = groupedByWellOperations;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,16 @@
|
|||||||
using AsbCloudApp.Requests;
|
using AsbCloudApp.Data;
|
||||||
using AsbCloudDb.Model;
|
using AsbCloudApp.Data.WellOperation;
|
||||||
using AsbCloudInfrastructure.Repository;
|
using AsbCloudApp.Repositories;
|
||||||
using AsbCloudInfrastructure.Services.ProcessMaps.Report;
|
using AsbCloudApp.Requests;
|
||||||
|
using AsbCloudApp.Services;
|
||||||
using AsbCloudInfrastructure.Services;
|
using AsbCloudInfrastructure.Services;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using ProtoBuf.Meta;
|
|
||||||
using SignalRSwaggerGen.Enums;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using AsbCloudApp.Repositories;
|
|
||||||
using AsbCloudApp.Data;
|
|
||||||
using AsbCloudApp.Data.WellOperation;
|
|
||||||
using AsbCloudApp.Services;
|
|
||||||
|
|
||||||
namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
||||||
{
|
{
|
||||||
@ -30,6 +24,8 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
|||||||
= Substitute.For<IWellOperationCategoryRepository>();
|
= Substitute.For<IWellOperationCategoryRepository>();
|
||||||
private IWellOperationRepository wellOperationRepository
|
private IWellOperationRepository wellOperationRepository
|
||||||
= Substitute.For<IWellOperationRepository>();
|
= Substitute.For<IWellOperationRepository>();
|
||||||
|
private IWellService wellService
|
||||||
|
= Substitute.For<IWellService>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -169,7 +165,8 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
|||||||
service = new WellCompositeOperationService(
|
service = new WellCompositeOperationService(
|
||||||
wellSectionTypeRepository,
|
wellSectionTypeRepository,
|
||||||
wellOperationCategoryRepository,
|
wellOperationCategoryRepository,
|
||||||
wellOperationRepository);
|
wellOperationRepository,
|
||||||
|
wellService);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -306,7 +303,8 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
|||||||
var result = await service.GetAsync(idsWell, CancellationToken.None);
|
var result = await service.GetAsync(idsWell, CancellationToken.None);
|
||||||
|
|
||||||
// assert
|
// assert
|
||||||
var wellOperationsCount = result.WellOperationsGroupedByWell.SelectMany(v => v.Value).Count();
|
var wellOperationsCount = result.WellCompositeSourceOperations
|
||||||
|
.SelectMany(o => o.Operations).Count();
|
||||||
Assert.Equal(wellOperations.Count(), wellOperationsCount);
|
Assert.Equal(wellOperations.Count(), wellOperationsCount);
|
||||||
|
|
||||||
var lastOperationComposite = result.WellOperationsComposite.Last();
|
var lastOperationComposite = result.WellOperationsComposite.Last();
|
||||||
|
Loading…
Reference in New Issue
Block a user