using AsbCloudApp.Data; using AsbCloudApp.Requests; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace AsbCloudApp.Repositories { /// <summary> /// сервис операций по скважине /// </summary> public interface IWellOperationRepository { /// <summary> /// Список секций /// </summary> /// <returns></returns> IEnumerable<WellSectionTypeDto> GetSectionTypes(); /// <summary> /// список плановых операций для сопоставления /// <param name="idWell"></param> /// <param name="currentDate"></param> /// <param name="token"></param> /// </summary> /// <returns></returns> Task<WellOperationPlanDto> GetOperationsPlanAsync(int idWell, DateTime? currentDate, CancellationToken token); /// <summary> /// дата/время первой операции по скважине /// </summary> /// <param name="idWell"></param> /// <returns></returns> DateTimeOffset? FirstOperationDate(int idWell); /// <summary> /// Получить страницу списка операций /// </summary> /// <param name="request"></param> /// <param name="token"></param> /// <returns></returns> Task<IEnumerable<WellOperationDto>> GetAsync(WellOperationRequest request, CancellationToken token); /// <summary> /// Получить список операций по запросу /// </summary> /// <param name="request"></param> /// <param name="token"></param> /// <returns></returns> Task<IEnumerable<WellOperationDataDto>> GetAsync(WellsOperationRequest request, CancellationToken token); /// <summary> /// Получить страницу списка операций /// </summary> /// <param name="request"></param> /// <param name="token"></param> /// <returns></returns> Task<PaginationContainer<WellOperationDto>> GetPageAsync(WellOperationRequest request, CancellationToken token); /// <summary> /// Получить операцию по id /// </summary> /// <param name="id"></param> /// <param name="token"></param> /// <returns></returns> Task<WellOperationDto?> GetOrDefaultAsync(int id, CancellationToken token); /// <summary> /// Получить статистику операции по скважине с группировкой по категориям /// </summary> /// <param name="request"></param> /// <param name="token"></param> /// <returns></returns> Task<IEnumerable<WellGroupOpertionDto>> GetGroupOperationsStatAsync( WellOperationRequest request, CancellationToken token); /// <summary> /// Добавить несколько операций за один раз /// </summary> /// <param name="wellOperationDtos"></param> /// <param name="token"></param> /// <returns></returns> Task<int> InsertRangeAsync(IEnumerable<WellOperationDto> wellOperationDtos, CancellationToken token); /// <summary> /// Обновить существующую операцию /// </summary> /// <param name="dto"></param> /// <param name="token"></param> /// <returns></returns> Task<int> UpdateAsync(WellOperationDto dto, CancellationToken token); /// <summary> /// Удалить операции по id /// </summary> /// <param name="ids"></param> /// <param name="token"></param> /// <returns></returns> Task<int> DeleteAsync(IEnumerable<int> ids, CancellationToken token); /// <summary> /// Получить секции скважин из операций ГГД. Секцие поделены на плановые и фактические. /// </summary> /// <param name="idsWells"></param> /// <param name="token"></param> /// <returns></returns> Task<IEnumerable<SectionByOperationsDto>> GetSectionsAsync(IEnumerable<int> idsWells, CancellationToken token); /// <summary> /// Получить диапазон дат выполнения операций /// </summary> /// <param name="idWell"></param> /// <param name="idType"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<DatesRangeDto?> GetDatesRangeAsync(int idWell, int idType, CancellationToken cancellationToken); /// <summary> /// Удаление полных дубликатов операций по всем скважинам /// </summary> /// <param name="onProgressCallback"></param> /// <param name="token"></param> /// <returns></returns> Task<int> RemoveDuplicates(Action<string, double?> onProgressCallback, CancellationToken token); /// <summary> /// Усечение пересекающейся последующей операции по дате и глубине забоя /// </summary> /// <param name="geDate">Фильтр по дате. Если хоть одна операция попадет в в фильтр, то будет обработана вся скважина, а не только эта операция</param> /// <param name="leDate">Фильтр по дате. Если хоть одна операция попадет в в фильтр, то будет обработана вся скважина, а не только эта операция</param> /// <param name="onProgressCallback"></param> /// <param name="token"></param> /// <returns></returns> Task<int> TrimOverlapping(DateTimeOffset? geDate, DateTimeOffset leDate, Action<string, double?> onProgressCallback, CancellationToken token); } }