merge dev to subsystem

This commit is contained in:
ngfrolov 2022-09-08 09:46:32 +05:00
commit a0ec08fac5
86 changed files with 27497 additions and 735 deletions

View File

@ -94,6 +94,26 @@
/// НПВ
/// </summary>
public string Npv { get; set; }
/// <summary>
/// Проработка перед наращиванием
/// </summary>
public string ElaborationBeforeBuilding { get; set; }
/// <summary>
/// Шаблонировка перед наращиванием
/// </summary>
public string TemplatingBeforeBuilding { get; set; }
/// <summary>
/// Промывка перед наращиванием
/// </summary>
public string FlushingBeforeBuilding { get; set; }
/// <summary>
/// Статический замер телесистемы
/// </summary>
public string StaticSurveying { get; set; }
}
}

View File

@ -39,11 +39,6 @@ namespace AsbCloudApp.Data
/// </summary>
public long Size { get; set; }
/// <summary>
/// инфо о публикации файла на гугл диске
/// </summary>
public FilePublishInfoDto PublishInfo { get; set; }
/// <summary>
/// DTO автора
/// </summary>

View File

@ -1,25 +0,0 @@
using System;
namespace AsbCloudApp.Data
{
/// <summary>
/// èíôî î ôàéëå íà ãóãë äèñêå
/// </summary>
public class FilePublishInfoDto
{
/// <summary>
/// Ëîãèí ïîëüçîâàòåëÿ âûëîæèâøåãî ôàéë íà äèñê
/// </summary>
public string PublisherLogin { get; set; }
/// <summary>
/// äàòà ïóáëèêàöèè
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// ññûëêà äëÿ ñêà÷èâàíèÿ
/// </summary>
public string WebStorageFileUrl { get; set; }
}
}

View File

@ -15,7 +15,7 @@ namespace AsbCloudApp.Data.SAUB
/// <summary>
/// метка времени данных (legacy)
/// </summary>
public DateTime Date // TODO: remove this legacy after all panels updated
public DateTime Date // TODO: remove this legacy after all panels updated (> 3.2.0407)
{
get { return DateTime; }
set { DateTime = value; }

View File

@ -2,6 +2,8 @@
namespace AsbCloudApp.Data
{
//todo: добавить валидацию
/// <summary>
/// Операции на скважине (заведенные пользователем)
/// </summary>

View File

@ -12,11 +12,51 @@ namespace AsbCloudApp.Services
/// </summary>
public interface IDailyReportService
{
/// <summary>
/// получить список сформированных рапортов по скважине за период времени
/// </summary>
/// <param name="idWell"></param>
/// <param name="v1"></param>
/// <param name="v2"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<IEnumerable<DailyReportDto>> GetListAsync(int idWell, DateTime? v1, DateTime? v2, CancellationToken cancellationToken);
/// <summary>
/// получить из БД или генерировать данные для суточного рапорта за указанную дату
/// </summary>
/// <param name="idWell"></param>
/// <param name="date"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<DailyReportDto> GetOrGenerateAsync(int idWell, DateTime date, CancellationToken token);
/// <summary>
/// Добавить новый рапорт
/// </summary>
/// <param name="idWell"></param>
/// <param name="dto"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> AddAsync(int idWell, DailyReportDto dto, CancellationToken token = default);
/// <summary>
/// изменить данные для суточного рапорта
/// </summary>
/// <param name="idWell"></param>
/// <param name="date"></param>
/// <param name="dto"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> UpdateAsync(int idWell, DateTime date, DailyReportDto dto, CancellationToken token = default);
/// <summary>
/// Сформировать файл рапорта
/// </summary>
/// <param name="idWell"></param>
/// <param name="date"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<Stream> MakeReportAsync(int idWell, DateTime date, CancellationToken token = default);
}
}

View File

@ -9,7 +9,7 @@ namespace AsbCloudApp.Services
/// <summary>
/// РТК
/// </summary>
public interface IDrillFlowChartService : ICrudWellRelatedService<DrillFlowChartDto>
public interface IDrillFlowChartRepository : IRepositoryWellRelated<DrillFlowChartDto>
{
/// <summary>
/// Получить параметры бурения начиная с даты.

View File

@ -19,27 +19,6 @@ namespace AsbCloudApp.Services
/// </summary>
string RootPath { get; }
/// <summary>
/// получить url Google drive
/// </summary>
/// <param name="idFileInfo"></param>
/// <param name="idUser"></param>
/// <param name="fileShareService"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<string> GetSharedUrlAsync(int idFileInfo, int idUser, IFileShareService fileShareService, CancellationToken token);
/// <summary>
/// получить url Google drive
/// </summary>
/// <param name="dto"></param>
/// <param name="idUser"></param>
/// <param name="fileShareService"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<string> GetSharedUrlAsync(FileInfoDto dto, int idUser, IFileShareService fileShareService,
CancellationToken token = default);
/// <summary>
/// Сохранить файл
/// </summary>

View File

@ -1,32 +0,0 @@
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
//TODO: Óäàëèòü ýòîò ôóíêöèîíàë
/// <summary>
/// Ñåðâèñ âûêëàäûâàíèÿ ôàéëà íà Google disk
/// </summary>
public interface IFileShareService
{
/// <summary>
/// Îïóáëèêîâàòü
/// </summary>
/// <param name="filePath"></param>
/// <param name="originalName"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<string> PublishFileToCloudAsync(string filePath, string originalName,
CancellationToken token);
/// <summary>
/// Óäàëèòü ïóáëèêàöèþ
/// </summary>
/// <param name="sharedFileId"></param>
/// <param name="token"></param>
/// <returns></returns>
Task DeleteFileAsync(string sharedFileId,
CancellationToken token = default);
}
}

View File

@ -7,14 +7,36 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис сообщений панели оператора
/// </summary>
public interface IMessageService
{
/// <summary>
/// Получить сообщения по параметрам
/// </summary>
/// <param name="idWell"></param>
/// <param name="categoryids"></param>
/// <param name="begin"></param>
/// <param name="end"></param>
/// <param name="searchString"></param>
/// <param name="skip"></param>
/// <param name="take"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<PaginationContainer<MessageDto>> GetMessagesAsync(int idWell,
IEnumerable<int> categoryids = default, DateTime begin = default,
DateTime end = default, string searchString = default,
int skip = 0, int take = 32,
CancellationToken token = default);
/// <summary>
/// Метод для сохранения сообщения от панели
/// </summary>
/// <param name="uid"></param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
Task InsertAsync(string uid, IEnumerable<TelemetryMessageDto> dtos,
CancellationToken token);
}

View File

@ -1,8 +0,0 @@
using AsbCloudApp.Data;
namespace AsbCloudApp.Services
{
public interface IOperationValueService : ICrudWellRelatedService<OperationValueDto>
{
}
}

View File

@ -5,12 +5,50 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис расчета статистики по операциям вводимым вручную
/// </summary>
public interface IOperationsStatService
{
/// <summary>
/// Получить статистику МСП по кусту в котором находится скважина с IdWell
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<ClusterRopStatDto> GetRopStatAsync(int idWell, CancellationToken token);
/// <summary>
/// Получить статистику по скважинам куста, которые доступны компании
/// </summary>
/// <param name="idCluster"></param>
/// <param name="idCompany"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<StatClusterDto> GetStatClusterAsync(int idCluster, int idCompany, CancellationToken token = default);
/// <summary>
/// получить статистику по скважине
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<StatWellDto> GetWellStatAsync(int idWell, CancellationToken token = default);
/// <summary>
/// Получить данные для графика TVD
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<PlanFactPredictBase<WellOperationDto>>> GetTvdAsync(int idWell, CancellationToken token);
/// <summary>
/// Получить статистику по набору скважин
/// </summary>
/// <param name="idWells"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<StatWellDto>> GetWellsStatAsync(IEnumerable<int> idWells, CancellationToken token);
}
}

View File

@ -1,10 +0,0 @@
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
public interface IPaginationService<Tdto>
{
Task<Data.PaginationContainer<Tdto>> GetPageAsync(int skip = 0, int take = 32, CancellationToken token = default);
}
}

View File

@ -6,15 +6,57 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис рапортов
/// </summary>
public interface IReportService
{
/// <summary>
/// категория рапорта
/// </summary>
int ReportCategoryId { get; }
// TODO: rename this method
/// <summary>
/// Поставить рапорт в очередь на формирование
/// </summary>
/// <param name="idWell"></param>
/// <param name="idUser"></param>
/// <param name="stepSeconds"></param>
/// <param name="format"></param>
/// <param name="begin"></param>
/// <param name="end"></param>
/// <param name="handleReportProgress"></param>
/// <returns></returns>
string CreateReport(int idWell, int idUser, int stepSeconds,
int format, DateTime begin, DateTime end,
Action<object, string> handleReportProgress);
/// <summary>
/// Получить предполагаемый список страниц рапорта
/// </summary>
/// <param name="idWell"></param>
/// <param name="begin"></param>
/// <param name="end"></param>
/// <param name="stepSeconds"></param>
/// <param name="format"></param>
/// <returns></returns>
int GetReportPagesCount(int idWell, DateTime begin, DateTime end,
int stepSeconds, int format);
/// <summary>
/// получить диапазон дат за которые есть данные
/// </summary>
/// <param name="idWell"></param>
/// <returns></returns>
DatesRangeDto GetDatesRangeOrDefault(int idWell);
/// <summary>
/// Список готовых рапортов
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<ReportPropertiesDto>> GetAllReportsByWellAsync(int idWell, CancellationToken token);
}
}

View File

@ -1,11 +0,0 @@
using System;
namespace AsbCloudApp.Services
{
public interface IReportsBackgroundQueue
{
int EnqueueTask(Action<int> action);
bool TryDequeue(out (Action<int> action, int id) item);
}
}

View File

@ -5,12 +5,13 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
#nullable enable
/// <summary>
/// Сервис получения, добавления, изменения, удаления данных<br/>
/// Репозиторий получения, добавления, изменения, удаления данных<br/>
/// Для сущностей относящихся к скважине
/// </summary>
/// <typeparam name="Tdto"></typeparam>
public interface ICrudWellRelatedService<Tdto> : ICrudService<Tdto>
public interface IRepositoryWellRelated<Tdto> : ICrudService<Tdto>
where Tdto : IId, IWellRelated
{
/// <summary>
@ -19,7 +20,7 @@ namespace AsbCloudApp.Services
/// <param name="idWell">id скважины</param>
/// <param name="token"></param>
/// <returns>emptyList if nothing found</returns>
Task<IEnumerable<Tdto>> GetByIdWellAsync(int idWell, CancellationToken token);
Task<IEnumerable<Tdto>?> GetByIdWellAsync(int idWell, CancellationToken token);
/// <summary>
/// Получение всех записей по нескольким скважинам
@ -27,7 +28,7 @@ namespace AsbCloudApp.Services
/// <param name="idsWells">id скважин</param>
/// <param name="token"></param>
/// <returns>emptyList if nothing found</returns>
Task<IEnumerable<Tdto>> GetByIdWellAsync(IEnumerable<int> idsWells, CancellationToken token);
Task<IEnumerable<Tdto>?> GetByIdWellAsync(IEnumerable<int> idsWells, CancellationToken token);
}
#nullable disable
}

View File

@ -4,14 +4,59 @@ using System.Collections.Generic;
namespace AsbCloudApp.Services
{
// TODO: make this nullable
/// <summary>
/// Отслеживание и сбор статистики по запросам
/// </summary>
public interface IRequerstTrackerService
{
/// <summary>
/// Регистрирует новый запрос
/// </summary>
/// <param name="requestLog"></param>
void RegisterRequest(RequestLogDto requestLog);
/// <summary>
/// Регистрирует новый запрос, вызвавший ошибку на сервере
/// </summary>
/// <param name="requestLog"></param>
/// <param name="ex"></param>
void RegisterRequestError(RequestLogDto requestLog, Exception ex);
/// <summary>
/// все зарегистрированные запросы
/// </summary>
/// <param name="take"></param>
/// <returns></returns>
IEnumerable<RequestLogDto> GetAll(int take = -1);
/// <summary>
/// запросы которые выполнялись быстро
/// </summary>
/// <param name="take"></param>
/// <returns></returns>
IEnumerable<RequestLogDto> GetFast(int take = -1);
/// <summary>
/// запросы, которые выполнялись медленно
/// </summary>
/// <param name="take"></param>
/// <returns></returns>
IEnumerable<RequestLogDto> GetSlow(int take = -1);
/// <summary>
/// запросы, которые завершились ошибкой
/// </summary>
/// <param name="take"></param>
/// <returns></returns>
IEnumerable<RequestLogDto> GetError(int take = -1);
/// <summary>
/// Статистика посещений пользователей
/// </summary>
/// <param name="take"></param>
/// <returns></returns>
IEnumerable<RequestLogUserDto> GetUsersStat(int take = -1);
}
}

View File

@ -4,8 +4,17 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис формирования Сетевого графика.
/// </summary>
public interface IScheduleReportService
{
/// <summary>
/// Сформировать.
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<Stream> MakeReportAsync(int idWell, CancellationToken token = default);
}
}

View File

@ -5,8 +5,19 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
public interface IScheduleService : ICrudWellRelatedService<ScheduleDto>
/// <summary>
/// Репозиторий расписания смен бурильщика
/// </summary>
public interface IScheduleRepository : IRepositoryWellRelated<ScheduleDto>
{
// TODO: this should be nullable.
/// <summary>
/// получить бурильщика по idWell и времени
/// </summary>
/// <param name="idWell"></param>
/// <param name="workTime"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<DrillerDto> GetDrillerAsync(int idWell, DateTime workTime, CancellationToken token);
}
}

View File

@ -5,13 +5,55 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис рекомендаций новых уставок для панели оператора САУБ
/// </summary>
public interface ISetpointsService
{
/// <summary>
/// Добавить новый набор рекомендаций
/// </summary>
/// <param name="setpoints"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> InsertAsync(SetpointsRequestDto setpoints, CancellationToken token);
/// <summary>
/// Получить наборы уставок на скважине
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<SetpointsRequestDto>> GetAsync(int idWell, CancellationToken token);
/// <summary>
/// Скачать новые рекомендации (скачивает панель оператора)
/// </summary>
/// <param name="uid"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<SetpointsRequestDto>> GetForPanelAsync(string uid, CancellationToken token);
/// <summary>
/// Попробовать удалить (успешно, если панель еще не забрала уставки)
/// </summary>
/// <param name="id"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> TryDelete(int id, CancellationToken token);
/// <summary>
/// отредактировать состояние набора рекомендаций
/// </summary>
/// <param name="setpointsRequestDto"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> UpdateStateAsync(SetpointsRequestDto setpointsRequestDto, CancellationToken token);
/// <summary>
/// Список уставок для рекомендаций
/// </summary>
/// <returns></returns>
IEnumerable<SetpointInfoDto> GetSetpointsNames();
}
}

View File

@ -6,12 +6,33 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// сервис данных тех. процесса
/// </summary>
/// <typeparam name="TDto"></typeparam>
public interface ITelemetryDataService<TDto> where TDto : ITelemetryData
{
/// <summary>
/// получить данные тех. процесса
/// </summary>
/// <param name="idWell"></param>
/// <param name="dateBegin"></param>
/// <param name="intervalSec"></param>
/// <param name="approxPointsCount">кол-во элементов до которых эти данные прореживаются</param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<TDto>> GetAsync(int idWell,
DateTime dateBegin = default, double intervalSec = 600d,
int approxPointsCount = 1024, CancellationToken token = default);
/// <summary>
/// добавить/изменить данные тех. процесса (используется панелью)
/// </summary>
/// <param name="uid"></param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> UpdateDataAsync(string uid, IEnumerable<TDto> dtos, CancellationToken token = default);
}
}

View File

@ -7,18 +7,89 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис телеметрии
/// </summary>
public interface ITelemetryService
{
/// <summary>
/// сервис временных зон
/// </summary>
ITimezoneService TimeZoneService { get; }
/// <summary>
/// трекер запросов
/// </summary>
ITelemetryTracker TelemetryTracker { get; }
/// <summary>
/// получить idWell по uid телеметрии
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
int? GetIdWellByTelemetryUid(string uid);
/// <summary>
/// Получить id телеметрии. Если её нет в БД, то добавить новую.
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
int GetOrCreateTelemetryIdByUid(string uid);
/// <summary>
/// получить временную зону скважины по idTelemetry
/// </summary>
/// <param name="idTelemetry"></param>
/// <returns></returns>
SimpleTimezoneDto GetTimezone(int idTelemetry);
// TODO: вероятно лишнее
/// <summary>
/// Список передающих в данный момент телеметрий
/// </summary>
/// <returns></returns>
IEnumerable<TelemetryDto> GetTransmittingTelemetries();
// TODO: вероятно лишнее
/// <summary>
/// Получить дату получения последних данных
/// </summary>
/// <param name="idTelemetry"></param>
/// <param name="useUtc"></param>
/// <returns></returns>
DateTime GetLastTelemetryDate(int idTelemetry, bool useUtc = false);
/// <summary>
/// получить idTelemetry по IdWell
/// </summary>
/// <param name="idWell"></param>
/// <returns></returns>
int? GetIdTelemetryByIdWell(int idWell);
/// <summary>
/// получить диапазон дат за которые есть данные
/// </summary>
/// <param name="idTelemetry"></param>
/// <returns></returns>
DatesRangeDto GetDatesRange(int idTelemetry);
/// <summary>
/// обновить данные о телеметрии (используется панелью)
/// </summary>
/// <param name="uid"></param>
/// <param name="info"></param>
/// <param name="token"></param>
/// <returns></returns>
Task UpdateInfoAsync(string uid, TelemetryInfoDto info, CancellationToken token);
// TODO: вероятно лишнее
/// <summary>
/// обновить данные о временной зоне (используется панелью)
/// </summary>
/// <param name="uid"></param>
/// <param name="telemetryTimeZoneInfo"></param>
/// <param name="token"></param>
/// <returns></returns>
Task UpdateTimezoneAsync(string uid, SimpleTimezoneDto telemetryTimeZoneInfo, CancellationToken token);
/// <summary>
@ -29,6 +100,13 @@ namespace AsbCloudApp.Services
/// <param name="token"></param>
/// <returns></returns>
Task<int> MergeAsync(int from, int to, CancellationToken token);
// TODO: вероятно лишнее
/// <summary>
/// сохранить данные о запросе
/// </summary>
/// <param name="uid"></param>
/// <param name="remoteDate"></param>
void SaveRequestDate(string uid, DateTimeOffset remoteDate);
}
}

View File

@ -4,11 +4,36 @@ using System.Collections.Generic;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис статистики телеметрии
/// </summary>
public interface ITelemetryTracker
{
/// <summary>
/// получить дату последней отправки данных панелью
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
DateTimeOffset GetLastTelemetryDateByUid(string uid);
/// <summary>
/// получить диапазон дат за которые есть данные по телеметрии
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
DatesRangeDto GetTelemetryDateRangeByUid(string uid);
/// <summary>
/// список передающих телеметрий
/// </summary>
/// <returns></returns>
IEnumerable<string> GetTransmittingTelemetriesUids();
/// <summary>
/// обновить статистику по телеметрии
/// </summary>
/// <param name="uid"></param>
/// <param name="remoteDate"></param>
void SaveRequestDate(string uid, DateTimeOffset remoteDate);
}
}

View File

@ -5,8 +5,18 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// сервис пользователей телеметрии
/// </summary>
public interface ITelemetryUserService
{
/// <summary>
/// получает и сохраняет/обновляет список пользователей панели оператора
/// </summary>
/// <param name="uid"></param>
/// <param name="dtos"></param>
/// <param name="token"></param>
/// <returns></returns>
Task UpsertAsync(string uid, IEnumerable<TelemetryUserDto> dtos, CancellationToken token = default);
}
}

View File

@ -4,9 +4,26 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// сервис определения временной зоны
/// </summary>
public interface ITimezoneService
{
/// <summary>
/// по координатам
/// </summary>
/// <param name="latitude"></param>
/// <param name="longitude"></param>
/// <returns></returns>
SimpleTimezoneDto GetByCoordinates(double latitude, double longitude);
/// <summary>
/// по координатам
/// </summary>
/// <param name="latitude"></param>
/// <param name="longitude"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<Data.SimpleTimezoneDto> GetByCoordinatesAsync(double latitude, double longitude, CancellationToken token);
}
}

View File

@ -5,11 +5,34 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Репозиторий ролей пользователя
/// </summary>
public interface IUserRoleService : ICrudService<UserRoleDto>
{
Task<UserRoleDto> GetByNameAsync(string name, CancellationToken token = default);
// todo: переименовать
/// <summary>
/// получить dto по названиям
/// </summary>
/// <param name="names"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<UserRoleDto>> GetByNamesAsync(IEnumerable<string> names, CancellationToken token = default);
/// <summary>
/// получить все вложенные разрешения
/// </summary>
/// <param name="id"></param>
/// <param name="counter"></param>
/// <returns></returns>
IEnumerable<UserRoleDto> GetNestedById(int id, int counter = 10);
/// <summary>
/// определяет содержится ли разрешение в одной из указанных ролей
/// </summary>
/// <param name="rolesIds"></param>
/// <param name="permissionName"></param>
/// <returns></returns>
bool HasPermission(IEnumerable<int> rolesIds, string permissionName);
}
}

View File

@ -3,13 +3,37 @@ using System.Collections.Generic;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис пользователей
/// </summary>
public interface IUserService : ICrudService<UserExtendedDto>
{
/// <summary>
/// Сервис ролей
/// </summary>
IUserRoleService RoleService { get; }
/// <summary>
/// Получить список всех прав пользователя (включая наследование групп)
/// </summary>
/// <param name="idUser"></param>
/// <returns></returns>
IEnumerable<PermissionDto> GetNestedPermissions(int idUser);
/// <summary>
/// Получить список ролей пользователя (включая наследование)
/// </summary>
/// <param name="idUser"></param>
/// <param name="nestedLevel"></param>
/// <returns></returns>
IEnumerable<UserRoleDto> GetRolesByIdUser(int idUser, int nestedLevel = 0);
bool HasAnyRoleOf(int idUser, IEnumerable<string> roleNames);
bool HasAnyRoleOf(int idUser, IEnumerable<int> roleIds);
/// <summary>
/// определяет есть ли у пользователя указанное разрешение
/// </summary>
/// <param name="idUser"></param>
/// <param name="permissionName"></param>
/// <returns></returns>
public bool HasPermission(int idUser, string permissionName);
}
}

View File

@ -3,13 +3,47 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// репозиторий для личных настроек пользователя
/// </summary>
public interface IUserSettingsRepository
{
/// <summary>
/// код ошибки: ключ не найден
/// </summary>
public const int ErrorKeyNotFound = -1;
/// <summary>
/// код ошибки: ключ уже занят
/// </summary>
public const int ErrorKeyIsUsed = -2;
Task<object> GetOrDefaultAsync(int userId, string key, CancellationToken token);
Task<int> InsertAsync(int userId, string key, object value, CancellationToken token);
Task<int> UpdateAsync(int userId, string key, object value, CancellationToken token);
/// <summary>
/// Получить настройки по ключу для пользователя
/// </summary>
/// <param name="userId"></param>
/// <param name="key"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<System.Text.Json.JsonDocument> GetOrDefaultAsync(int userId, string key, CancellationToken token);
/// <summary>
/// Добавить или изменить настройки с ключем для пользователя
/// </summary>
/// <param name="userId"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> UpsertAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token);
/// <summary>
/// Удалить настройки с ключем для пользователя
/// </summary>
/// <param name="userId"></param>
/// <param name="key"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> DeleteAsync(int userId, string key, CancellationToken token);
}
}

View File

@ -5,9 +5,26 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// Сервис создания композитной скважины
/// </summary>
public interface IWellCompositeService
{
/// <summary>
/// Получить секции композитной скважины
/// </summary>
/// <param name="idWell"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<IEnumerable<WellCompositeDto>> GetAsync(int idWell, CancellationToken cancellationToken);
/// <summary>
/// сохранить секции композитной скважины
/// </summary>
/// <param name="idWell"></param>
/// <param name="wellComposites"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> SaveAsync(int idWell, IEnumerable<WellCompositeDto> wellComposites, CancellationToken token);
}
}

View File

@ -2,10 +2,30 @@
namespace AsbCloudApp.Services
{
/// <summary>
/// сервис импорта/экспорта операций по скважине вводимых вручную
/// </summary>
public interface IWellOperationImportService
{
/// <summary>
/// скачать в excel
/// </summary>
/// <param name="idWell"></param>
/// <returns></returns>
Stream Export(int idWell);
/// <summary>
/// скачать шаблон для заполнения
/// </summary>
/// <returns></returns>
Stream GetExcelTemplateStream();
/// <summary>
/// закгрузить из excel список операций
/// </summary>
/// <param name="idWell"></param>
/// <param name="stream"></param>
/// <param name="deleteWellOperationsBeforeImport">Очистить старые перед импортом (если файл проходит валидацию)</param>
void Import(int idWell, Stream stream, bool deleteWellOperationsBeforeImport = false);
}
}

View File

@ -6,10 +6,33 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// сервис операций по скважине
/// </summary>
public interface IWellOperationService
{
/// <summary>
/// список названий операций
/// </summary>
/// <returns></returns>
IEnumerable<WellOperationCategoryDto> GetCategories();
// TODO: объединить параметры в объект запроса
/// <summary>
/// Получить список операций
/// </summary>
/// <param name="idWell"></param>
/// <param name="operationType"></param>
/// <param name="sectionTypeIds"></param>
/// <param name="operationCategoryIds"></param>
/// <param name="begin"></param>
/// <param name="end"></param>
/// <param name="minDepth"></param>
/// <param name="maxDepth"></param>
/// <param name="skip"></param>
/// <param name="take"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<PaginationContainer<WellOperationDto>> GetOperationsAsync(
int idWell,
int? operationType = null,
@ -23,16 +46,56 @@ namespace AsbCloudApp.Services
int take = 32,
CancellationToken token = default);
/// <summary>
/// Получить операцию по id
/// </summary>
/// <param name="id"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<WellOperationDto> GetAsync(int id, CancellationToken token);
//todo: idWell Не нужен
/// <summary>
/// Добавить несколько операций за один раз
/// </summary>
/// <param name="idWell"></param>
/// <param name="wellOperationDtos"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> InsertRangeAsync(int idWell,
IEnumerable<WellOperationDto> wellOperationDtos, CancellationToken token);
//todo: id Не нужны
/// <summary>
/// Обновить существующую операцию
/// </summary>
/// <param name="idWell"></param>
/// <param name="idOperation"></param>
/// <param name="item"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<int> UpdateAsync(int idWell, int idOperation, WellOperationDto item,
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>
/// <returns></returns>
IDictionary<int, string> GetSectionTypes();
/// <summary>
/// дата/время первой операции по скважине
/// </summary>
/// <param name="idWell"></param>
/// <returns></returns>
DateTimeOffset? FirstOperationDate(int idWell);
}
}

View File

@ -6,21 +6,100 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
/// <summary>
/// сервис скважин
/// </summary>
public interface IWellService : ICrudService<WellDto>
{
/// <summary>
/// сервис телеметрии
/// </summary>
ITelemetryService TelemetryService { get; }
/// <summary>
/// Список скважин доступных компании
/// </summary>
/// <param name="idCompany"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<WellDto>> GetWellsByCompanyAsync(int idCompany, CancellationToken token);
/// <summary>
/// проверяет доступ к скважине для компании
/// </summary>
/// <param name="idCompany"></param>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<bool> IsCompanyInvolvedInWellAsync(int idCompany, int idWell, CancellationToken token);
Task<string> GetWellCaptionByIdAsync(int idWell, CancellationToken token);
//TODO: remove that
Task<IEnumerable<CompanyDto>> GetCompaniesAsync(int idWell, CancellationToken token);
/// <summary>
/// проверяет доступ к скважине для компании
/// </summary>
/// <param name="idCompany"></param>
/// <param name="idWell"></param>
/// <returns></returns>
bool IsCompanyInvolvedInWell(int idCompany, int idWell);
/// <summary>
/// получить название скважины по id
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<string> GetWellCaptionByIdAsync(int idWell, CancellationToken token);
/// <summary>
/// список компаний участвующих в скважине
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<CompanyDto>> GetCompaniesAsync(int idWell, CancellationToken token);
//TODO: remove that
/// <summary>
///
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
string GetStateText(int state);
/// <summary>
/// дата получения последних данных от панели
/// </summary>
/// <param name="idWell"></param>
/// <returns></returns>
DateTimeOffset GetLastTelemetryDate(int idWell);
//TODO: выяснить и удалить отсюда
/// <summary>
/// получение списка скважин куста в котором находится указанная скважина
/// </summary>
/// <param name="idWell"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<int>> GetClusterWellsIdsAsync(int idWell, CancellationToken token);
SimpleTimezoneDto GetTimezone(int idWell);
/// <summary>
/// часовой пояс скважины
/// </summary>
/// <param name="idWell"></param>
/// <returns></returns>
SimpleTimezoneDto GetTimezone(int idWell);
/// <summary>
/// диапазон дат с данными телеметрии
/// </summary>
/// <param name="idWell"></param>
/// <returns></returns>
DatesRangeDto GetDatesRange(int idWell);
/// <summary>
/// Проверить задан ли у скважины часовой пояс и задать его если он не задан
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
Task EnshureTimezonesIsSetAsync(CancellationToken token);
}
}

View File

@ -4,7 +4,7 @@ using System.Collections.Concurrent;
namespace AsbCloudApp.Services
{
/// <summary>
///
/// Репозиторий для хранения в оперативке данных (от панели)
/// </summary>
public class InstantDataRepository : ConcurrentDictionary<int, ConcurrentDictionary<Type, object>>
{

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,995 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AsbCloudDb.Migrations
{
public partial class Rename_WellOperations_key_param_name : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 4,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 5,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 6,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 7,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 8,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 9,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 10,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 11,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 12,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 13,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 14,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 15,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 16,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 17,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 18,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 19,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 20,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 21,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 22,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1002,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1003,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1004,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1005,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1006,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1007,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1008,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1011,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1012,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1013,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1014,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1015,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1016,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1017,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1018,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1019,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1020,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1021,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1022,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1023,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1024,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1025,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1026,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1027,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1028,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1029,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1030,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1031,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1032,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1033,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1034,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1035,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1037,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1038,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1039,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1040,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1041,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1042,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1043,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1044,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1045,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1046,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1047,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1048,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1050,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1051,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1052,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1053,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1054,
column: "key_value_name",
value: "dT");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1055,
column: "key_value_name",
value: "dT");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 4,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 5,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 6,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 7,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 8,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 9,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 10,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 11,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 12,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 13,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 14,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 15,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 16,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 17,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 18,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 19,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 20,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 21,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 22,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1002,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1003,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1004,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1005,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1006,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1007,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1008,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1011,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1012,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1013,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1014,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1015,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1016,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1017,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1018,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1019,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1020,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1021,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1022,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1023,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1024,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1025,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1026,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1027,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1028,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1029,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1030,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1031,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1032,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1033,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1034,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1035,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1037,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1038,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1039,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1040,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1041,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1042,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1043,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1044,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1045,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1046,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1047,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1048,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1050,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1051,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1052,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1053,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1054,
column: "key_value_name",
value: "Продолжительность");
migrationBuilder.UpdateData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 1055,
column: "key_value_name",
value: "Продолжительность");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AsbCloudDb.Migrations
{
public partial class Add_IdReasonOfEnd_to_DetectedOperation : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "id_reason_of_end",
table: "t_detected_operation",
type: "integer",
nullable: false,
defaultValue: 0,
comment: "Код признака окончания операции");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "id_reason_of_end",
table: "t_detected_operation");
}
}
}

View File

@ -0,0 +1,25 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AsbCloudDb.Migrations
{
public partial class Add_new_operation_DetectorTemplatingWhileDrilling : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.InsertData(
table: "t_well_operation_category",
columns: new[] { "id", "code", "key_value_name", "key_value_units", "name" },
values: new object[] { 23, 0, "dT", "мин", "Шаблонировка при бурении" });
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "t_well_operation_category",
keyColumn: "id",
keyValue: 23);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,26 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AsbCloudDb.Migrations
{
public partial class Remove_fileShare_service : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "publish_info",
table: "t_file_info");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "publish_info",
table: "t_file_info",
type: "jsonb",
nullable: true,
comment: "Информация о файле в облаке");
}
}
}

View File

@ -1,5 +1,6 @@
// <auto-generated />
using System;
using System.Text.Json;
using AsbCloudDb.Model;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
@ -229,6 +230,11 @@ namespace AsbCloudDb.Migrations
.HasColumnName("id_category")
.HasComment("Id категории операции");
b.Property<int>("IdReasonOfEnd")
.HasColumnType("integer")
.HasColumnName("id_reason_of_end")
.HasComment("Код признака окончания операции");
b.Property<int>("IdTelemetry")
.HasColumnType("integer")
.HasColumnName("id_telemetry");
@ -703,11 +709,6 @@ namespace AsbCloudDb.Migrations
.HasColumnName("name")
.HasComment("Название файла");
b.Property<string>("PublishInfo")
.HasColumnType("jsonb")
.HasColumnName("publish_info")
.HasComment("Информация о файле в облаке");
b.Property<long>("Size")
.HasColumnType("bigint")
.HasColumnName("file_size")
@ -4040,7 +4041,7 @@ namespace AsbCloudDb.Migrations
.HasColumnName("key")
.HasComment("Ключ настроек пользователя");
b.Property<object>("Value")
b.Property<JsonDocument>("Value")
.HasColumnType("jsonb")
.HasColumnName("setting_value")
.HasComment("Значение настроек пользователя");
@ -4256,7 +4257,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Невозможно определить операцию"
},
@ -4280,7 +4281,7 @@ namespace AsbCloudDb.Migrations
{
Id = 4,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подъем с проработкой"
},
@ -4288,7 +4289,7 @@ namespace AsbCloudDb.Migrations
{
Id = 5,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск с проработкой"
},
@ -4296,7 +4297,7 @@ namespace AsbCloudDb.Migrations
{
Id = 6,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подъем с промывкой"
},
@ -4304,7 +4305,7 @@ namespace AsbCloudDb.Migrations
{
Id = 7,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск с промывкой"
},
@ -4312,7 +4313,7 @@ namespace AsbCloudDb.Migrations
{
Id = 8,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск в скважину"
},
@ -4320,7 +4321,7 @@ namespace AsbCloudDb.Migrations
{
Id = 9,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск с вращением"
},
@ -4328,7 +4329,7 @@ namespace AsbCloudDb.Migrations
{
Id = 10,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подъем из скважины"
},
@ -4336,7 +4337,7 @@ namespace AsbCloudDb.Migrations
{
Id = 11,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подъем с вращением"
},
@ -4344,7 +4345,7 @@ namespace AsbCloudDb.Migrations
{
Id = 12,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Промывка в покое"
},
@ -4352,7 +4353,7 @@ namespace AsbCloudDb.Migrations
{
Id = 13,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Промывка с вращением"
},
@ -4360,7 +4361,7 @@ namespace AsbCloudDb.Migrations
{
Id = 14,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Удержание в клиньях"
},
@ -4368,7 +4369,7 @@ namespace AsbCloudDb.Migrations
{
Id = 15,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Неподвижное состояние"
},
@ -4376,7 +4377,7 @@ namespace AsbCloudDb.Migrations
{
Id = 16,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Вращение без циркуляции"
},
@ -4384,7 +4385,7 @@ namespace AsbCloudDb.Migrations
{
Id = 17,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "На поверхности"
},
@ -4392,7 +4393,7 @@ namespace AsbCloudDb.Migrations
{
Id = 18,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Проработка перед наращиванием"
},
@ -4400,7 +4401,7 @@ namespace AsbCloudDb.Migrations
{
Id = 19,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Шаблонировка перед наращиванием"
},
@ -4408,7 +4409,7 @@ namespace AsbCloudDb.Migrations
{
Id = 20,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Промывка перед наращиванием"
},
@ -4416,7 +4417,7 @@ namespace AsbCloudDb.Migrations
{
Id = 21,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Статический замер телесистемы"
},
@ -4424,11 +4425,19 @@ namespace AsbCloudDb.Migrations
{
Id = 22,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Промывка"
},
new
{
Id = 23,
Code = 0,
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Шаблонировка при бурении"
},
new
{
Id = 1001,
Code = 0,
@ -4440,7 +4449,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1002,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "ГИС"
},
@ -4448,7 +4457,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1003,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "ГФР"
},
@ -4456,7 +4465,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1004,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Монтаж ПВО"
},
@ -4464,7 +4473,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1005,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Демонтаж ПВО"
},
@ -4472,7 +4481,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1006,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Установка ФА"
},
@ -4480,7 +4489,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1007,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Оборудование устья"
},
@ -4488,7 +4497,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1008,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "ОЗЦ"
},
@ -4496,7 +4505,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1011,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Начало цикла строительства скважины"
},
@ -4504,7 +4513,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1012,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Окончание цикла строительства скважины"
},
@ -4512,7 +4521,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1013,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Опрессовка ПВО"
},
@ -4520,7 +4529,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1014,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Опрессовка Ц.К."
},
@ -4528,7 +4537,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1015,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Опрессовка ВЗД"
},
@ -4536,7 +4545,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1016,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Перевод скв на другой тип промывочной жидкости"
},
@ -4544,7 +4553,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1017,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Перезапись каротажа"
},
@ -4552,7 +4561,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1018,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Перетяжка талевого каната"
},
@ -4560,7 +4569,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1019,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Наращивание, промывка"
},
@ -4568,7 +4577,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1020,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подъем инструмента"
},
@ -4576,7 +4585,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1021,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подъем инструмента с промывкой"
},
@ -4584,7 +4593,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1022,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Обратная проработка"
},
@ -4592,7 +4601,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1023,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Сборка инструмента с мостков"
},
@ -4600,7 +4609,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1024,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подготовительные работы"
},
@ -4608,7 +4617,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1025,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Сборка КНБК"
},
@ -4616,7 +4625,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1026,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Разборка КНБК"
},
@ -4624,7 +4633,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1027,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Промывка"
},
@ -4632,7 +4641,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1028,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Промежуточная промывка"
},
@ -4640,7 +4649,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1029,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Прокачка пачек"
},
@ -4648,7 +4657,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1030,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Разбуривание тех.оснастки"
},
@ -4656,7 +4665,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1031,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Ремонт"
},
@ -4664,7 +4673,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1032,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск инструмента"
},
@ -4672,7 +4681,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1033,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск инструмента с промывкой"
},
@ -4680,7 +4689,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1034,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Прямая проработка"
},
@ -4688,7 +4697,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1035,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Принудительная проработка"
},
@ -4696,7 +4705,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1037,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Тех СПО-подъем"
},
@ -4704,7 +4713,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1038,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Тех СПО-спуск"
},
@ -4712,7 +4721,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1039,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Техническое обслуживание"
},
@ -4720,7 +4729,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1040,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Цементаж"
},
@ -4728,7 +4737,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1041,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Шаблонировка ствола"
},
@ -4736,7 +4745,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1042,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Геологическое осложнение"
},
@ -4744,7 +4753,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1043,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "НПВ"
},
@ -4752,7 +4761,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1044,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "ВМР"
},
@ -4760,7 +4769,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1045,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Прочее"
},
@ -4768,7 +4777,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1046,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск КНБК"
},
@ -4776,7 +4785,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1047,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Подъем КНБК"
},
@ -4784,7 +4793,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1048,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Спуск ОК"
},
@ -4792,7 +4801,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1050,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Промывка при спуске ОК"
},
@ -4800,7 +4809,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1051,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Замер ТС"
},
@ -4808,7 +4817,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1052,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Тех. отстой"
},
@ -4816,7 +4825,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1053,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Циркуляция и Обработка БР"
},
@ -4824,7 +4833,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1054,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Срезка ствола"
},
@ -4832,7 +4841,7 @@ namespace AsbCloudDb.Migrations
{
Id = 1055,
Code = 0,
KeyValueName = "Продолжительность",
KeyValueName = "dT",
KeyValueUnits = "мин",
Name = "Вспомогательные работы"
});

View File

@ -279,12 +279,6 @@ namespace AsbCloudDb.Model
.HasJsonConversion();
});
modelBuilder.Entity<FileInfo>(entity =>
{
entity.Property(e => e.PublishInfo)
.HasJsonConversion();
});
modelBuilder.Entity<FileMark>(entity =>
{
entity.HasOne(d => d.User)

View File

@ -4,81 +4,82 @@
{
protected override WellOperationCategory[] GetData() => new WellOperationCategory[]{
// Автоматически определяемые операции
new () {Id = 1, Name = "Невозможно определить операцию", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин"},
new () {Id = 1, Name = "Невозможно определить операцию", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин"},
new () {Id = 2, Name = "Роторное бурение", Code = 0, KeyValueName = "МСП", KeyValueUnits = "м/ч" },
new () {Id = 3, Name = "Слайдирование", Code = 0, KeyValueName = "МСП", KeyValueUnits = "м/ч" },
new () {Id = 4, Name = "Подъем с проработкой", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 5, Name = "Спуск с проработкой", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 6, Name = "Подъем с промывкой", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 7, Name = "Спуск с промывкой", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 8, Name = "Спуск в скважину", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 9, Name = "Спуск с вращением", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 10, Name = "Подъем из скважины", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 11, Name = "Подъем с вращением", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 12, Name = "Промывка в покое", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 13, Name = "Промывка с вращением", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 14, Name = "Удержание в клиньях", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 15, Name = "Неподвижное состояние", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 16, Name = "Вращение без циркуляции", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 17, Name = "На поверхности", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 18, Name = "Проработка перед наращиванием", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 19, Name = "Шаблонировка перед наращиванием", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 20, Name = "Промывка перед наращиванием", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 21, Name = "Статический замер телесистемы", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 22, Name = "Промывка", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 4, Name = "Подъем с проработкой", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 5, Name = "Спуск с проработкой", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 6, Name = "Подъем с промывкой", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 7, Name = "Спуск с промывкой", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 8, Name = "Спуск в скважину", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 9, Name = "Спуск с вращением", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 10, Name = "Подъем из скважины", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 11, Name = "Подъем с вращением", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 12, Name = "Промывка в покое", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 13, Name = "Промывка с вращением", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 14, Name = "Удержание в клиньях", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 15, Name = "Неподвижное состояние", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 16, Name = "Вращение без циркуляции", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 17, Name = "На поверхности", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 18, Name = "Проработка перед наращиванием", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 19, Name = "Шаблонировка перед наращиванием", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 20, Name = "Промывка перед наращиванием", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 21, Name = "Статический замер телесистемы", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 22, Name = "Промывка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 23, Name = "Шаблонировка при бурении", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
// Операции ручного ввода
new () {Id = 1001, Name = "Бурение", Code = 0, KeyValueName = "МСП", KeyValueUnits = "м/ч" },
new () {Id = 1002, Name = "ГИС", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1003, Name = "ГФР", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1004, Name = "Монтаж ПВО", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1005, Name = "Демонтаж ПВО", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1006, Name = "Установка ФА", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1007, Name = "Оборудование устья", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1008, Name = "ОЗЦ", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1011, Name = "Начало цикла строительства скважины", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1012, Name = "Окончание цикла строительства скважины", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1013, Name = "Опрессовка ПВО", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1014, Name = "Опрессовка Ц.К.", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1015, Name = "Опрессовка ВЗД", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1016, Name = "Перевод скв на другой тип промывочной жидкости", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1017, Name = "Перезапись каротажа", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1018, Name = "Перетяжка талевого каната", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1019, Name = "Наращивание, промывка", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1020, Name = "Подъем инструмента", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1021, Name = "Подъем инструмента с промывкой", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1022, Name = "Обратная проработка", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1023, Name = "Сборка инструмента с мостков", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1024, Name = "Подготовительные работы", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1025, Name = "Сборка КНБК", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1026, Name = "Разборка КНБК", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1027, Name = "Промывка", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1028, Name = "Промежуточная промывка", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1029, Name = "Прокачка пачек", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1030, Name = "Разбуривание тех.оснастки", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1031, Name = "Ремонт", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1032, Name = "Спуск инструмента", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1033, Name = "Спуск инструмента с промывкой", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1034, Name = "Прямая проработка", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1035, Name = "Принудительная проработка", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1037, Name = "Тех СПО-подъем", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1038, Name = "Тех СПО-спуск", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1039, Name = "Техническое обслуживание", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1040, Name = "Цементаж", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1041, Name = "Шаблонировка ствола", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1042, Name = "Геологическое осложнение", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1043, Name = "НПВ", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1044, Name = "ВМР", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1045, Name = "Прочее", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1046, Name = "Спуск КНБК", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1047, Name = "Подъем КНБК", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1048, Name = "Спуск ОК", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1050, Name = "Промывка при спуске ОК", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1051, Name = "Замер ТС", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1052, Name = "Тех. отстой", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1053, Name = "Циркуляция и Обработка БР", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1054, Name = "Срезка ствола", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1055, Name = "Вспомогательные работы", Code = 0, KeyValueName = "Продолжительность", KeyValueUnits = "мин" },
new () {Id = 1002, Name = "ГИС", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1003, Name = "ГФР", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1004, Name = "Монтаж ПВО", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1005, Name = "Демонтаж ПВО", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1006, Name = "Установка ФА", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1007, Name = "Оборудование устья", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1008, Name = "ОЗЦ", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1011, Name = "Начало цикла строительства скважины", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1012, Name = "Окончание цикла строительства скважины", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1013, Name = "Опрессовка ПВО", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1014, Name = "Опрессовка Ц.К.", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1015, Name = "Опрессовка ВЗД", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1016, Name = "Перевод скв на другой тип промывочной жидкости", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1017, Name = "Перезапись каротажа", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1018, Name = "Перетяжка талевого каната", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1019, Name = "Наращивание, промывка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1020, Name = "Подъем инструмента", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1021, Name = "Подъем инструмента с промывкой", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1022, Name = "Обратная проработка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1023, Name = "Сборка инструмента с мостков", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1024, Name = "Подготовительные работы", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1025, Name = "Сборка КНБК", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1026, Name = "Разборка КНБК", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1027, Name = "Промывка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1028, Name = "Промежуточная промывка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1029, Name = "Прокачка пачек", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1030, Name = "Разбуривание тех.оснастки", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1031, Name = "Ремонт", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1032, Name = "Спуск инструмента", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1033, Name = "Спуск инструмента с промывкой", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1034, Name = "Прямая проработка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1035, Name = "Принудительная проработка", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1037, Name = "Тех СПО-подъем", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1038, Name = "Тех СПО-спуск", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1039, Name = "Техническое обслуживание", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1040, Name = "Цементаж", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1041, Name = "Шаблонировка ствола", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1042, Name = "Геологическое осложнение", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1043, Name = "НПВ", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1044, Name = "ВМР", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1045, Name = "Прочее", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1046, Name = "Спуск КНБК", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1047, Name = "Подъем КНБК", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1048, Name = "Спуск ОК", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1050, Name = "Промывка при спуске ОК", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1051, Name = "Замер ТС", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1052, Name = "Тех. отстой", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1053, Name = "Циркуляция и Обработка БР", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1054, Name = "Срезка ствола", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
new () {Id = 1055, Name = "Вспомогательные работы", Code = 0, KeyValueName = "dT", KeyValueUnits = "мин" },
};
}
}

View File

@ -41,6 +41,9 @@ namespace AsbCloudDb.Model
[Column("value"), Comment("Ключевой показатель операции")]
public double Value { get; set; }
[Column("id_reason_of_end"), Comment("Код признака окончания операции")]
public int IdReasonOfEnd { get; set; }
[JsonIgnore]
[ForeignKey(nameof(IdTelemetry))]
public virtual Telemetry Telemetry { get; set; }

View File

@ -33,9 +33,6 @@ namespace AsbCloudDb.Model
[Column("file_size"), Comment("Размер файла")]
public long Size { get; set; }
[Column("publish_info", TypeName = "jsonb"), Comment("Информация о файле в облаке")]
public FilePublishInfo PublishInfo { get; set; }
[Column("is_deleted"), Comment("Удален ли файл")]
public bool IsDeleted { get; set; }

View File

@ -2,6 +2,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
namespace AsbCloudDb.Model
{
@ -16,7 +17,7 @@ namespace AsbCloudDb.Model
public string Key { get; set; } = null!;
[Column("setting_value", TypeName = "jsonb"), Comment("Значение настроек пользователя")]
public object? Value { get; set; }
public JsonDocument? Value { get; set; }
[ForeignKey(nameof(IdUser))]
public User User { get; set; } = null!;

View File

@ -82,7 +82,6 @@ namespace AsbCloudInfrastructure
services.AddFluentValidation();
services.AddScoped<IAsbCloudDbContext>(provider => provider.GetService<AsbCloudDbContext>());
services.AddScoped<IFileShareService, GoogleDriveService>();
services.AddScoped<IEmailService, EmailService>();
services.AddHostedService<OperationDetectionBackgroundService>();
@ -96,7 +95,7 @@ namespace AsbCloudInfrastructure
services.AddTransient<IAuthService, AuthService>();
services.AddTransient<IClusterService, ClusterService>();
services.AddTransient<IDrillFlowChartService, DrillFlowChartService>();
services.AddTransient<IDrillFlowChartRepository, DrillFlowChartRepository>();
services.AddTransient<IDrillingProgramService, DrillingProgramService>();
services.AddTransient<IDrillParamsService, DrillParamsService>();
services.AddTransient<IEventService, EventService>();
@ -122,6 +121,8 @@ namespace AsbCloudInfrastructure
services.AddTransient<IScheduleService, ScheduleService>();
services.AddTransient<IOperationValueService, OperationValueService>();
services.AddTransient<ISubsystemOperationTimeService, SubsystemOperationTimeService>();
services.AddTransient<IScheduleRepository, ScheduleRepository>();
services.AddTransient<IRepositoryWellRelated<OperationValueDto>, CrudWellRelatedServiceBase<OperationValueDto, OperationValue>>();
services.AddTransient<IUserSettingsRepository, UserSettingsRepository>();
// admin crud services:

View File

@ -10,7 +10,7 @@ using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Repository
{
#nullable enable
public class CrudWellRelatedCacheServiceBase<TDto, TEntity> : CrudCacheServiceBase<TDto, TEntity>, ICrudWellRelatedService<TDto>
public class CrudWellRelatedCacheServiceBase<TDto, TEntity> : CrudCacheServiceBase<TDto, TEntity>, IRepositoryWellRelated<TDto>
where TDto : AsbCloudApp.Data.IId, AsbCloudApp.Data.IWellRelated
where TEntity : class, IId, IWellRelated
{

View File

@ -10,7 +10,7 @@ using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Repository
{
#nullable enable
public class CrudWellRelatedServiceBase<TDto, TEntity> : CrudServiceBase<TDto, TEntity>, ICrudWellRelatedService<TDto>
public class CrudWellRelatedServiceBase<TDto, TEntity> : CrudServiceBase<TDto, TEntity>, IRepositoryWellRelated<TDto>
where TDto : AsbCloudApp.Data.IId, AsbCloudApp.Data.IWellRelated
where TEntity : class, IId, IWellRelated
{

View File

@ -1,7 +1,6 @@
using AsbCloudApp.Data;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Repository;
using Mapster;
using Microsoft.EntityFrameworkCore;
using System;
@ -10,18 +9,16 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services
namespace AsbCloudInfrastructure.Repository
{
public class DrillFlowChartService : CrudWellRelatedServiceBase<DrillFlowChartDto, DrillFlowChart>,
IDrillFlowChartService
public class DrillFlowChartRepository : CrudWellRelatedServiceBase<DrillFlowChartDto, DrillFlowChart>,
IDrillFlowChartRepository
{
private readonly IAsbCloudDbContext db;
private readonly IWellService wellService;
public DrillFlowChartService(IAsbCloudDbContext context, IWellService wellService)
public DrillFlowChartRepository(IAsbCloudDbContext context, IWellService wellService)
: base(context)
{
this.db = context;
this.wellService = wellService;
}

View File

@ -1,7 +1,6 @@
using AsbCloudApp.Data;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Repository;
using Mapster;
using Microsoft.EntityFrameworkCore;
using System;
@ -9,14 +8,14 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services
namespace AsbCloudInfrastructure.Repository
{
#nullable enable
public class ScheduleService : CrudWellRelatedServiceBase<ScheduleDto, Schedule>, IScheduleService
public class ScheduleRepository : CrudWellRelatedServiceBase<ScheduleDto, Schedule>, IScheduleRepository
{
private readonly IWellService wellService;
public ScheduleService(IAsbCloudDbContext context, IWellService wellService)
public ScheduleRepository(IAsbCloudDbContext context, IWellService wellService)
: base(context, dbSet => dbSet.Include(s => s.Driller))
{
this.wellService = wellService;
@ -40,7 +39,7 @@ namespace AsbCloudInfrastructure.Services
var time = new TimeOnly(remoteDate.Hour, remoteDate.Minute, remoteDate.Second);
var entity = entities.FirstOrDefault(s =>
(s.ShiftStart > s.ShiftEnd) ^
s.ShiftStart > s.ShiftEnd ^
(time >= s.ShiftStart && time < s.ShiftEnd)
);

View File

@ -5,7 +5,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services
namespace AsbCloudInfrastructure.Repository
{
public class UserSettingsRepository : IUserSettingsRepository
{
@ -16,43 +16,33 @@ namespace AsbCloudInfrastructure.Services
this.context = context;
}
public Task<object> GetOrDefaultAsync(int userId, string key, CancellationToken token)
public Task<System.Text.Json.JsonDocument> GetOrDefaultAsync(int userId, string key, CancellationToken token)
=> context.Set<UserSetting>()
.Where(s => s.IdUser == userId && s.Key == key)
.Select(s=>s.Value)
.Select(s => s.Value)
.FirstOrDefaultAsync(token);
public async Task<int> InsertAsync(int userId, string key, object value, CancellationToken token)
{
var set = context.Set<UserSetting>();
if (await set.AnyAsync(s=>s.IdUser == userId && s.Key == key, token))
return IUserSettingsRepository.ErrorKeyIsUsed;
var entity = new UserSetting
{
IdUser = userId,
Key = key,
Value = value,
};
context.Set<UserSetting>()
.Add(entity);
return await context.SaveChangesAsync(token);
}
public async Task<int> UpdateAsync(int userId, string key, object value, CancellationToken token)
public async Task<int> UpsertAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token)
{
var set = context.Set<UserSetting>();
var updatingItem = await set
.FirstOrDefaultAsync(s => s.IdUser == userId && s.Key == key, token);
if (updatingItem is null)
return IUserSettingsRepository.ErrorKeyNotFound;
updatingItem.Value = value;
set.Update(updatingItem);
{
var settings = new UserSetting
{
IdUser = userId,
Key = key,
Value = value,
};
set.Add(settings);
}
else
{
updatingItem.Value = value;
set.Update(updatingItem);
}
return await context.SaveChangesAsync(token);
}
@ -60,9 +50,9 @@ namespace AsbCloudInfrastructure.Services
{
var set = context.Set<UserSetting>();
var removingItem = await set
.FirstOrDefaultAsync(s=>s.IdUser == userId && s.Key ==key, token);
.FirstOrDefaultAsync(s => s.IdUser == userId && s.Key == key, token);
if(removingItem is null)
if (removingItem is null)
return IUserSettingsRepository.ErrorKeyNotFound;
set.Remove(removingItem);

View File

@ -9,7 +9,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services
namespace AsbCloudInfrastructure.Repository
{
public class WitsRecordRepository<TDto, TEntity> : IWitsRecordRepository<TDto>
where TEntity : class, ITelemetryData
@ -74,7 +74,7 @@ namespace AsbCloudInfrastructure.Services
var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours;
var entities = dtos
.DistinctBy(d => d.DateTime)
.Select(dto => Convert(dto, idTelemetry, timezoneHours));
.Select(dto => Convert(dto, idTelemetry, timezoneHours));
dbset.AddRange(entities);
return db.SaveChangesAsync(token);
}

View File

@ -9,6 +9,9 @@ using AsbCloudApp.Services;
using AsbCloudDb.Model;
using System.Collections.Generic;
using AsbCloudApp.Data.DailyReport;
using AsbCloudApp.Requests;
using AsbCloudInfrastructure.Services.DetectOperations;
using AsbCloudApp.Data.DetectedOperation;
namespace AsbCloudInfrastructure.Services.DailyReport
{
@ -17,12 +20,14 @@ namespace AsbCloudInfrastructure.Services.DailyReport
{
private readonly IAsbCloudDbContext db;
private readonly IWellService wellService;
private readonly IDetectedOperationService detectedOperationService;
private readonly DailyReportMakerExcel dailyReportMaker = new DailyReportMakerExcel();
public DailyReportService(IAsbCloudDbContext db, IWellService wellService)
public DailyReportService(IAsbCloudDbContext db, IWellService wellService, IDetectedOperationService detectedOperationService)
{
this.db = db;
this.wellService = wellService;
this.detectedOperationService = detectedOperationService;
}
public async Task<IEnumerable<DailyReportDto>> GetListAsync(int idWell, DateTime? begin, DateTime? end, CancellationToken token)
@ -109,19 +114,57 @@ namespace AsbCloudInfrastructure.Services.DailyReport
private async Task<DailyReportDto> MakeDefaultDailyReportAsync(int idWell, DateTime date, CancellationToken token)
{
var well = await wellService.GetOrDefaultAsync(idWell, token);
var dto = new DailyReportDto()
{
Head = new HeadDto()
{
ReportDate = date.Date,
WellName = well?.Caption ?? "",
ClusterName = well?.Cluster ?? ""
}
ClusterName = well?.Cluster ?? "",
},
TimeBalance = await MakeTimeBalanceAsync(idWell, date, token),
};
return dto;
}
private async Task<TimeBalanceDto> MakeTimeBalanceAsync(int idWell, DateTime date, CancellationToken token)
{
var stat = await detectedOperationService.GetOperationsStatAsync(new DetectedOperationRequest
{
IdWell = idWell,
GtDate = date.Date,
LtDate = date.Date.AddDays(1)
}, token);
if (stat is null)
return new TimeBalanceDto();
var dto = new TimeBalanceDto()
{
Drilling = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationRotor, DetectedOperationService.IdOperationSlide):#0.00}",
Flushing = $"{GetHoursFromStat(stat, DetectedOperationService.idOperationFlushing):#0.00}",
Building = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationSlipsTime):#0.00}",
Elaboration = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationElaboration):#0.00}",
ElaborationBeforeBuilding = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationElaborationBeforeBuilding):#0.00}",
TemplatingBeforeBuilding = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationTemplatingBeforeBuilding):#0.00}",
FlushingBeforeBuilding = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationFlushingBeforeBuilding):#0.00}",
StaticSurveying = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationStaticSurveying):#0.00}",
Gis = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationGis):#0.00}",
Ozc = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationOzc):#0.00}",
Cementing = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationCementing):#0.00}",
Npv = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationNpv):#0.00}",
};
return dto;
}
private static double GetHoursFromStat(IEnumerable<DetectedOperationStatDto> stat, params int[] idCategories)
{
var valueMinutes = stat.Where(o => idCategories.Contains(o.IdCategory))
.Sum(o => o.MinutesTotal);
return valueMinutes / 60d;
}
private static DailyReportDto Convert(AsbCloudDb.Model.DailyReport.DailyReport entity)
{
var dto = entity.Info.Adapt<DailyReportDto>();

View File

@ -21,14 +21,27 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
public const int IdOperationRotor = 1;
public const int IdOperationSlide = 3;
public const int IdOperationSlipsTime = 14;
public const int idOperationFlushing = 22;
public const int IdOperationElaboration = 1022;
public const int idOperationRepair = 1031;
public const int IdOperationGis = 1001;
public const int IdOperationOzc = 1008;
public const int IdOperationCementing = 1040;
public const int IdOperationNpv = 1043;
public const int IdOperationElaborationBeforeBuilding = 18;
public const int IdOperationTemplatingBeforeBuilding = 19;
public const int IdOperationFlushingBeforeBuilding = 20;
public const int IdOperationStaticSurveying = 21;
private readonly IAsbCloudDbContext db;
private readonly IWellService wellService;
private readonly IOperationValueService operationValueService;
private readonly IScheduleService scheduleService;
private readonly IRepositoryWellRelated<OperationValueDto> operationValueService;
private readonly IScheduleRepository scheduleService;
public DetectedOperationService(IAsbCloudDbContext db, IWellService wellService,
IOperationValueService operationValueService, IScheduleService scheduleService)
IRepositoryWellRelated<OperationValueDto> operationValueService, IScheduleRepository scheduleService)
{
this.db = db;
this.wellService = wellService;

View File

@ -1,6 +1,5 @@
using AsbCloudDb.Model;
using System;
using System.Collections.Generic;
using System.Linq;
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
@ -11,6 +10,30 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
private readonly int idOperation;
private readonly int stepLength = 3;
protected const int IdReasonOfEnd_NotDetected = 0;
protected const int IdReasonOfEnd_NotDetectBegin = 1;
protected const int IdReasonOfEnd_DeltaDepthIsLo = 100;
protected const int IdReasonOfEnd_DeltaDepthIsHi = 101;
protected const int IdReasonOfEnd_DeltaDepthOutOfRange = 102;
protected const int IdReasonOfEnd_WellDepthDeviates = 200;
protected const int IdReasonOfEnd_PressureIsLo = 300;
protected const int IdReasonOfEnd_PressureIsHi = 301;
protected const int IdReasonOfEnd_PressureOutOfRange = 302;
protected const int IdReasonOfEnd_PressureIsRising = 303;
protected const int IdReasonOfEnd_RotorSpeedIsLo = 400;
protected const int IdReasonOfEnd_RotorSpeedIsHi = 401;
protected const int IdReasonOfEnd_AvgRotorSpeedIsHi = 402;
protected const int IdReasonOfEnd_AvgRotorSpeedIsLo = 403;
protected const int IdReasonOfEnd_BlockPositionIsLo = 500;
protected const int IdReasonOfEnd_BlockPositionIsHi = 501;
protected const int IdReasonOfEnd_BlockPositionDeviates = 502;
protected const int IdReasonOfEnd_Custom1 = 10_000;
protected DetectorAbstract(int idOperation)
{
this.idOperation = idOperation;
@ -29,9 +52,10 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
if ((positionEnd > end))
break;
if (DetectEnd(telemetry, positionEnd, previousOperation))
var idReasonOfEnd = DetectEnd(telemetry, positionEnd, previousOperation);
if (idReasonOfEnd != IdReasonOfEnd_NotDetected)
{
result = MakeOperation(idTelemetry, telemetry, begin, positionEnd);
result = MakeOperation(idTelemetry, telemetry, begin, positionEnd, idReasonOfEnd);
return true;
}
}
@ -41,10 +65,12 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
}
protected abstract bool DetectBegin(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation);
protected virtual bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
=> !DetectBegin(telemetry, position, previousOperation);
protected virtual int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
=> DetectBegin(telemetry, position, previousOperation)
? IdReasonOfEnd_NotDetected
: IdReasonOfEnd_NotDetectBegin;
private OperationDetectorResult MakeOperation(int idTelemetry, DetectableTelemetry[] telemetry, int begin, int end)
private OperationDetectorResult MakeOperation(int idTelemetry, DetectableTelemetry[] telemetry, int begin, int end, int idReasonOfEnd)
{
var pBegin = telemetry[begin];
var pEnd = telemetry[end];
@ -62,6 +88,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
DepthStart = (double)pBegin.WellDepth,
DepthEnd = (double)pEnd.WellDepth,
Value = CalcValue(telemetry, begin, end),
IdReasonOfEnd = idReasonOfEnd,
},
};
return result;

View File

@ -36,23 +36,23 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
return true;
}
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if (delta < 0.03d || delta > 30)
return true;
return IdReasonOfEnd_DeltaDepthOutOfRange;
if (point0.Pressure < 15)
return true;
return IdReasonOfEnd_PressureIsLo;
if (point0.BlockPosition > 31)
return true;
return IdReasonOfEnd_BlockPositionIsHi;
if (point0.RotorSpeed < 10)
return true;
return IdReasonOfEnd_RotorSpeedIsLo;
return false;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)

View File

@ -31,19 +31,22 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
if (point0.BlockPosition < 3)
return false;
if (ContainsDeviationApprox(telemetry, t => t.WellDepth, position, 150, 0.0001))
return false;
return true;
}
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if ((delta > 0.03d )
&& (point0.Pressure > 15)
&& ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03))
return true;
return IdReasonOfEnd_Custom1;
return false;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)

View File

@ -34,16 +34,16 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
return true;
}
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if ((delta > 0.03d )
&& (point0.Pressure > 15)
&& ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03))
return true;
return IdReasonOfEnd_Custom1;
return false;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)

View File

@ -28,25 +28,25 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
return true;
}
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if (delta > 0.03d)
return true;
return IdReasonOfEnd_DeltaDepthIsHi;
if (point0.Pressure < 25)
return true;
return IdReasonOfEnd_PressureIsLo;
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 10);
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 60);
if (lineRotorSpeed.IsAverageYLessThan(5))
return true;
if (lineRotorSpeed.IsAverageYLessThan(10))
return IdReasonOfEnd_AvgRotorSpeedIsLo;
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 60, 0.003))
return true;
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 150, 0.003))
return IdReasonOfEnd_WellDepthDeviates;
return false;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)

View File

@ -28,25 +28,25 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
return true;
}
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if (delta > 0.03d)
return true;
return IdReasonOfEnd_DeltaDepthIsHi;
if (point0.Pressure < 25)
return true;
return IdReasonOfEnd_PressureIsLo;
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 10);
var lineRotorSpeed = MakeInterpolationLine(d => d.RotorSpeed, telemetry, position, 60);
if (lineRotorSpeed.IsAverageYGreaterThan(5))
return true;
if (lineRotorSpeed.IsAverageYGreaterThan(10))
return IdReasonOfEnd_AvgRotorSpeedIsHi;
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 60, 0.003))
return true;
if (!DeviatesFromBegin(telemetry, t => t.WellDepth, position, 150, 0.003))
return IdReasonOfEnd_WellDepthDeviates;
return false;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)

View File

@ -1,4 +1,6 @@
using AsbCloudDb.Model;
using System.Linq;
using System;
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
{
@ -20,13 +22,13 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
return false;
var delta = point0.WellDepth - point0.BitDepth;
if (delta > 2.5d || delta < 0.8d)
if (delta > 2.5d || delta < 0.15d)
return false;
if (point0.RotorSpeed > 30)
return false;
if (ContainsDeviation(telemetry, t => t.BlockPosition, position, 60, 0.03))
if (ContainsDeviation(telemetry, t => t.BlockPosition, position, 120, 0.03))
return false;
if (ContainsDeviation(telemetry, t => t.Pressure, position, 60, 10))
@ -35,24 +37,24 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
return true;
}
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if (delta > 2.5d || delta < 0.8d)
return true;
if (delta > 2.5d )
return IdReasonOfEnd_DeltaDepthIsHi;
if (point0.RotorSpeed > 30)
return true;
return IdReasonOfEnd_RotorSpeedIsHi;
if (RisesFromBegin(telemetry, t => t.Pressure, position, 10, 5))
return true;
if (RisesFromBegin(telemetry, t => t.Pressure, position, 10, 15))
return IdReasonOfEnd_PressureIsRising;
if (ContainsDeviation(telemetry, t => t.BlockPosition, position, 10, 0.05))
return false;
return IdReasonOfEnd_BlockPositionDeviates;
return false;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)

View File

@ -37,23 +37,23 @@ namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
return true;
}
protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
var delta = point0.WellDepth - point0.BitDepth;
if (delta < 0.03d || delta > 30)
return true;
return IdReasonOfEnd_DeltaDepthOutOfRange;
if (point0.Pressure < 15)
return true;
return IdReasonOfEnd_PressureIsLo;
if (point0.BlockPosition > 31)
return true;
return IdReasonOfEnd_BlockPositionIsHi;
if (point0.RotorSpeed > 10)
return true;
return IdReasonOfEnd_RotorSpeedIsHi;
return false;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)

View File

@ -0,0 +1,61 @@
using AsbCloudDb.Model;
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
{
#nullable enable
/// <summary>
/// Шаблонировка при бурении
/// </summary>
internal class DetectorTemplatingWhileDrilling : DetectorAbstract
{
public DetectorTemplatingWhileDrilling()
: base(23) { }
protected override double CalcValue(DetectableTelemetry[] telemetry, int begin, int end)
=> CalcDeltaMinutes(telemetry, begin, end);
protected override bool DetectBegin(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
if (previousOperation?.IdCategory != 22)
return false;
var point0 = telemetry[position];
if (point0.Pressure < 15)
return false;
if (point0.RotorSpeed < 1)
return false;
if (RisesFromBegin(telemetry, t => t.BlockPosition, position, 30, 0.5))
return false;
return true;
}
protected override int DetectEnd(DetectableTelemetry[] telemetry, int position, DetectedOperation? previousOperation)
{
var point0 = telemetry[position];
if (point0.Pressure < 15)
return IdReasonOfEnd_PressureIsLo;
if (RisesFromBegin(telemetry, t=>t.WellDepth, position, 10, 0.01))
return IdReasonOfEnd_WellDepthDeviates;
var delta = point0.WellDepth - point0.BitDepth;
if ( (delta > 0.03d )
&& (point0.Pressure > 15)
&& (!ContainsDeviationApprox(telemetry, t=>t.BlockPosition, position, 60, 0.03)))
return IdReasonOfEnd_Custom1;
return IdReasonOfEnd_NotDetected;
}
protected override bool IsValid(DetectableTelemetry[] telemetry, int begin, int end)
=> IsValidByWellDepthDoesNotChange(telemetry, begin, end);
}
#nullable disable
}

View File

@ -28,6 +28,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
new DetectorStaticSurveying(),
new DetectorFlashingBeforeConnection(),
new DetectorFlashing(),
new DetectorTemplatingWhileDrilling(),
};
public OperationDetectionBackgroundService(IConfiguration configuration)

View File

@ -12,8 +12,8 @@
Признак окончания операции =
( расстояние от долота до забоя > 0.03м ) ИЛИ
( давление < 25атм ) ИЛИ
( среднее арифметическое оборотов ротора за 10 сек < 5 об/м ) ИЛИ
( глубина забоя в течении следующих 60 сек не изменяется больше чем на 0.003 );
( среднее арифметическое оборотов ротора за 60 сек < 10 об/м ) ИЛИ
( глубина забоя в течении следующих 150 сек не изменяется больше чем на 0.003 );
## Метод определения бурения в слайде
Повторяет метод определения бурения в роторе, за исключением условия с оборотами ротора. Это уловие нужно инвертировать.

View File

@ -14,7 +14,8 @@
( предыдущая операция == бурение в роторе или слайде)
( расстояние от долота до забоя < 0,05м ) И
( давление > 15 атм ) И
( положение блока > 3м )
( положение блока > 3м ) И
( глубина забоя изменяется менее чем на 0,0001м в течении 150 сек)
Признак окончания операции =
( расстояние от долота до забоя > 0.03м ) И

View File

@ -6,16 +6,16 @@
Признак начала операции =
( давление > 15 атм ) И
( расстояние от долота до забоя > 0.8м ) И
( расстояние от долота до забоя > 0.15м ) И
( расстояние от долота до забоя < 2.5м ) И
( обороты ротора < 30 об/м ) И
( движение тал.блока в течении 60 сек изменяется менее чем на 3 см ) И
( движение тал.блока в течении 120 сек изменяется менее чем на 3 см ) И
( давление за следующие 60 сек изменяется менее чем на 10 атм )
Признак окончания операции =
( расстояние от долота до забоя > 2.5м ) ИЛИ
( обороты ротора > 30 об/м ) ИЛИ
( давление за следующие 10 сек вырастет на 5 атм ) ИЛИ
( давление за следующие 10 сек вырастет на 15 атм ) ИЛИ
( движение тал.блока в течении 10 сек изменяется более чем на 3 см )
## Ключевой параметр

View File

@ -0,0 +1,24 @@
# Алгоритм определения Шаблонировки при бурении
## Описание
Шаблонировка при бурении -
## Метод определения
Признак начала операции =
( предыдущая операция == промывка )
( давление > 15 атм ) И
( положение блока увеличится на 0,5м за следующие 30сек ) И
( Обороты ротора меньше 1 )
Признак окончания операции =
(
( высота блока не изменяется больше чем на 0.03м в течении 60 сек после окончания операции ) И
( расстояние от долота до забоя > 0.03м ) И
( давление > 15 атм )
) ИЛИ
( давление < 15 атм ) ИЛИ
( Увеличение глубины забоя > 0,01м за 10 секунд)
## Ключевой параметр
Продолжительность операции.

View File

@ -434,7 +434,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram
IdCategory = fileEntity.IdCategory,
IdWell = fileEntity.IdWell,
Name = fileEntity.Name,
PublishInfo = fileEntity.PublishInfo.Adapt<FilePublishInfoDto>(),
Size = fileEntity.Size,
UploadDate = fileEntity.UploadDate.ToRemoteDateTime(timezoneOffset),
};

View File

@ -33,33 +33,6 @@ namespace AsbCloudInfrastructure.Services
.Include(f => f.Well);
}
public async Task<string> GetSharedUrlAsync(int idFileInfo, int idUser, IFileShareService fileShareService,
CancellationToken token)
{
var fileInfo = await GetInfoAsync(idFileInfo, token);
if (fileInfo is null)
return null;
var sharedUrl = await GetSharedUrlAsync(fileInfo, idUser, fileShareService, token);
return sharedUrl;
}
public async Task<string> GetSharedUrlAsync(FileInfoDto fileInfo, int idUser, IFileShareService fileShareService,
CancellationToken token)
{
var fileWebUrl = fileInfo.PublishInfo?.WebStorageFileUrl;
if (!string.IsNullOrEmpty(fileWebUrl))
return fileWebUrl;
var relativePath = GetUrl(fileInfo);
var sharedUrl = await fileShareService.PublishFileToCloudAsync(relativePath,
fileInfo.Name, token);
await SaveWeblinkToFileInfo(fileInfo.Id, idUser, sharedUrl, token);
return sharedUrl;
}
public async Task<FileInfoDto> MoveAsync(int idWell, int? idUser, int idCategory,
string destinationFileName, string srcFilePath, CancellationToken token = default)
{
@ -357,21 +330,6 @@ namespace AsbCloudInfrastructure.Services
fileMark.IsDeleted = true;
return await db.SaveChangesAsync(token);
}
private async Task<int> SaveWeblinkToFileInfo(int idFileInfo, int idUser, string weblink,
CancellationToken token)
{
var fileInfo = await db.Files.FirstOrDefaultAsync(f => f.Id == idFileInfo, token)
.ConfigureAwait(false);
fileInfo.PublishInfo = new FilePublishInfo()
{
IdPublisher = idUser,
Date = DateTime.UtcNow,
WebStorageFileUrl = weblink
};
return await db.SaveChangesAsync(token).ConfigureAwait(false);
}
}
}
}

View File

@ -1,176 +0,0 @@
using AsbCloudApp.Services;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services
{
public class GoogleDriveService : IFileShareService, IDisposable
{
private readonly DriveService service;
const string applicationName = "FileSharing";
const string username = "asbautodrilling@gmail.com";
const string redirectUri = "http://autodrilling.naftagaz.com/AuthCallback/IndexAsync";
const string clientId = "1020584579240-f7amqg35qg7j94ta1ntgitajq27cgh49.apps.googleusercontent.com";
const string clientSecret = "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";
const string authorizationCode = "4/0AX4XfWjAV_cwaXdtBHHIseToLqI36PeMycW7wMCdZBmumADKu0Ov2AoVg3F6NDRCApmW8A";
const string refreshToken = "1//04rHpwsBJqXWyCgYIARAAGAQSNwF-L9IrzEaVHpC_Ajim5ZF0_hlSyOOW-QFARlRx4Xanx_H9TxyuRJSCIMmdVDf6S-qejlGli54";
//const string accessToken = "ya29.a0ARrdaM8jLcdNDylpV70X08ix-pqU-1QfLbmQy4iRb7KWUgl3keukmd2mx5AxraEO0eveR3I_p1EacrgtlbbxtNWbXxl_YPf4mQTbhhNaoltp2aSn6VndUlyydLDKzw9J9r8ouFNnVZip9fivBmc-AX_rWXsj";
static readonly IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId = clientId,
ClientSecret = clientSecret
},
Scopes = new[] { DriveService.Scope.Drive },
DataStore = new FileDataStore(applicationName),//TODO: replace FileDataStore by thread safe static datastore service
});
public GoogleDriveService()
{
service = MakeDriveServiceAsync(CancellationToken.None).Result;
}
~GoogleDriveService()
{
Dispose();
}
private async Task<DriveService> MakeDriveServiceAsync(CancellationToken cancellationToken)
{
var token = await flow.LoadTokenAsync(username, cancellationToken).ConfigureAwait(false);
if (flow.ShouldForceTokenRetrieval() || token is null || token.IsExpired(flow.Clock))
{
token = await flow.RefreshTokenAsync(clientId, refreshToken, cancellationToken).ConfigureAwait(false);
//token = await flow.ExchangeCodeForTokenAsync(clientId, authorizationCode, redirectUri, cancellationToken).ConfigureAwait(false);
await flow.DataStore.StoreAsync(username, token).ConfigureAwait(false);
}
var credential = new UserCredential(flow, username, token);
var newService = new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = applicationName
});
return newService;
}
public async Task<IEnumerable<string>> GetAllFileNames()
{
var fileList = service.Files.List();
fileList.Fields = "files(id, webViewLink, size)";
var result = new List<Google.Apis.Drive.v3.Data.File>();
string pageToken = null;
do
{
fileList.PageToken = pageToken;
var filesResult = await fileList.ExecuteAsync();
var files = filesResult.Files;
pageToken = filesResult.NextPageToken;
result.AddRange(files);
} while (pageToken != null);
return result.Select(r => r.Name);
}
public async Task<string> GetFileWebLinkAsync(string idFile,
CancellationToken token = default)
{
var fileList = service.Files.List();
fileList.Fields = "files(id, webViewLink, size)";
var filesResult = await fileList.ExecuteAsync(token)
.ConfigureAwait(false);
var file = filesResult.Files.FirstOrDefault(f => f.Id == idFile);
return file?.WebViewLink ?? string.Empty;
}
public async Task<string> CreateFolderAsync(string folderName,
CancellationToken token = default)
{
var driveFolder = new Google.Apis.Drive.v3.Data.File();
driveFolder.Name = folderName;
driveFolder.MimeType = "application/vnd.google-apps.folder";
//driveFolder.Parents = new string[] { parent };
var command = service.Files.Create(driveFolder);
var file = await command.ExecuteAsync(token)
.ConfigureAwait(false);
return file.Id;
}
public async Task CreatePublicPermissionForFileAsync(string idFile,
CancellationToken token = default)
{
var permission = new Permission() { Type = "anyone", Role = "reader" };
var addPermissionRequest = service.Permissions.Create(permission, idFile);
await addPermissionRequest.ExecuteAsync(token)
.ConfigureAwait(false);
}
public async Task<string> UploadFileAsync(Stream file, string fileName, string fileMime,
string fileDescription, CancellationToken token = default)
{
var driveFile = new Google.Apis.Drive.v3.Data.File();
driveFile.Name = fileName;
driveFile.Description = fileDescription;
driveFile.MimeType = fileMime;
//driveFile.Parents = new [] {folder};
var request = service.Files.Create(driveFile, file, fileMime);
request.Fields = "id";
var response = await request.UploadAsync(token)
.ConfigureAwait(false);
if (response.Status != Google.Apis.Upload.UploadStatus.Completed)
throw response.Exception;
return request.ResponseBody.Id;
}
public async Task DeleteFileAsync(string fileId,
CancellationToken token = default)
{
var command = service.Files.Delete(fileId);
await command.ExecuteAsync(token)
.ConfigureAwait(false);
}
#pragma warning disable CA1816 // Методы Dispose должны вызывать SuppressFinalize
public void Dispose()
{
service?.Dispose();
}
#pragma warning restore CA1816 // Методы Dispose должны вызывать SuppressFinalize
public async Task<string> PublishFileToCloudAsync(string filePath, string originalName, CancellationToken token)
{
await using var fileStream = System.IO.File.Open(filePath, FileMode.Open);
var uploadedFileId = await UploadFileAsync(fileStream, originalName,
"", "uploaded", token)
.ConfigureAwait(false);
await CreatePublicPermissionForFileAsync(uploadedFileId, token)
.ConfigureAwait(false);
var webLink = await GetFileWebLinkAsync(uploadedFileId, token)
.ConfigureAwait(false);
return webLink;
}
}
}

View File

@ -101,7 +101,7 @@ namespace AsbCloudInfrastructure.Services
var timezone = wellService.GetTimezone(idWell);
entity.IdWell = idWell;
entity.Timestamp = dto.Timestamp.ToUtcDateTimeOffset(timezone.Hours);
entity.Data = (RawData)dto.Data;
entity.Data = dto.Data.Adapt<RawData>();
return await db.SaveChangesAsync(token).ConfigureAwait(false);
}

View File

@ -1,14 +0,0 @@
using AsbCloudApp.Data;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Repository;
namespace AsbCloudInfrastructure.Services
{
public class OperationValueService : CrudWellRelatedServiceBase<OperationValueDto, OperationValue>, IOperationValueService
{
public OperationValueService(IAsbCloudDbContext context) : base(context)
{
}
}
}

View File

@ -75,16 +75,6 @@ namespace AsbCloudInfrastructure.Services
return dto;
}
public async Task<UserRoleDto> GetByNameAsync(string name, CancellationToken token = default)
{
var entity = await cacheUserRoles.FirstOrDefaultAsync(r => r.Caption == name, token)
.ConfigureAwait(false);
if (entity is null)
return null;
var dto = Convert(entity);
return dto;
}
public async Task<IEnumerable<UserRoleDto>> GetByNamesAsync(IEnumerable<string> names, CancellationToken token = default)
{
if (names?.Any() != true)

View File

@ -167,28 +167,6 @@ namespace AsbCloudInfrastructure.Services
}), token).ConfigureAwait(false);
}
public bool HasAnyRoleOf(int idUser, IEnumerable<string> roleNames)
{
if (!roleNames.Any())
return true;
var userRoleNames = GetRolesNamesByIdUser(idUser);
foreach (var roleName in userRoleNames)
if (roleNames.Contains(roleName))
return true;
return false;
}
public bool HasAnyRoleOf(int idUser, IEnumerable<int> roleIds)
{
if (!roleIds.Any())
return true;
var userRoles = GetRolesByIdUser(idUser);
foreach (var role in userRoles)
if (roleIds.Contains(role.Id))
return true;
return false;
}
public bool HasPermission(int idUser, string permissionName)
{
if (idUser == 1)

View File

@ -125,7 +125,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
wellServiceMock.Setup(s => s.GetTimezone(It.IsAny<int>())).Returns(timezone);
wellServiceMock.Setup(s => s.GetOrDefaultAsync(It.IsAny<int>(),CancellationToken.None)).Returns(Task.Run(() => wellDto));
var operationValueService = new OperationValueService(context);
var scheduleService = new ScheduleService(context, wellServiceMock.Object);
var scheduleService = new ScheduleRepository(context, wellServiceMock.Object);
service = new DetectedOperationService(context, wellServiceMock.Object, operationValueService, scheduleService);
request = new DetectedOperationRequest

View File

@ -1,7 +1,7 @@
using AsbCloudApp.Data;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services;
using AsbCloudInfrastructure.Repository;
using Moq;
using System;
using System.Linq;
@ -14,7 +14,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
public class ScheduleServiceTest
{
private readonly AsbCloudDbContext context;
private readonly ScheduleService scheduleService;
private readonly ScheduleRepository scheduleService;
private Deposit deposit = new Deposit { Id = 1, Caption = "Депозит 1" };
private Cluster clater = new Cluster { Id = 1, Caption = "Кластер 1", IdDeposit = 1, Timezone = new SimpleTimezone() };
private Schedule scd = new Schedule
@ -71,7 +71,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
var timezone = new SimpleTimezoneDto { Hours = 5 };
var wellServiceMock = new Mock<IWellService>();
wellServiceMock.Setup(s => s.GetTimezone(It.IsAny<int>())).Returns(timezone);
scheduleService = new ScheduleService(context, wellServiceMock.Object);
scheduleService = new ScheduleRepository(context, wellServiceMock.Object);
AsbCloudInfrastructure.DependencyInjection.MapsterSetup();
}

View File

@ -20,7 +20,7 @@ namespace AsbCloudWebApi.Controllers
[Authorize]
public abstract class CrudWellRelatedController<T, TService> : CrudController<T, TService>
where T : IId, IWellRelated
where TService : ICrudWellRelatedService<T>
where TService : IRepositoryWellRelated<T>
{
protected readonly IWellService wellService;

View File

@ -15,11 +15,11 @@ namespace AsbCloudWebApi.Controllers
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class DrillFlowChartController : CrudWellRelatedController<DrillFlowChartDto, IDrillFlowChartService>
public class DrillFlowChartController : CrudWellRelatedController<DrillFlowChartDto, IDrillFlowChartRepository>
{
private readonly ITelemetryService telemetryService;
public DrillFlowChartController(IWellService wellService, IDrillFlowChartService service,
public DrillFlowChartController(IWellService wellService, IDrillFlowChartRepository service,
ITelemetryService telemetryService)
: base(wellService, service)
{

View File

@ -11,9 +11,9 @@ namespace AsbCloudWebApi.Controllers
[Route("api/operationValue")]
[ApiController]
[Authorize]
public class OperationValueController : CrudWellRelatedController<OperationValueDto, IOperationValueService>
public class OperationValueController : CrudWellRelatedController<OperationValueDto, IRepositoryWellRelated<OperationValueDto>>
{
public OperationValueController(IOperationValueService service, IWellService wellService) : base(wellService, service)
public OperationValueController(IRepositoryWellRelated<OperationValueDto> service, IWellService wellService) : base(wellService, service)
{
}
}

View File

@ -14,11 +14,11 @@ namespace AsbCloudWebApi.Controllers
[Route("api/schedule")]
[ApiController]
[Authorize]
public class ScheduleController : CrudWellRelatedController<ScheduleDto, IScheduleService>
public class ScheduleController : CrudWellRelatedController<ScheduleDto, IScheduleRepository>
{
private readonly IScheduleService scheduleService;
private readonly IScheduleRepository scheduleService;
public ScheduleController(IScheduleService scheduleService, IWellService wellService)
public ScheduleController(IScheduleRepository scheduleService, IWellService wellService)
: base(wellService, scheduleService)
{
this.scheduleService = service;

View File

@ -8,6 +8,9 @@ using System.Threading.Tasks;
namespace AsbCloudWebApi.Controllers
{
/// <summary>
/// Контроллер настроек для пользователя
/// </summary>
[Route("api/[controller]")]
[ApiController]
[Authorize]
@ -20,8 +23,15 @@ namespace AsbCloudWebApi.Controllers
this.service = service;
}
/// <summary>
/// Получить настройки
/// </summary>
/// <param name="key"></param>
/// <param name="token"></param>
/// <returns></returns>
[HttpGet("{key}")]
[Permission]
[ProducesResponseType(typeof(object), (int)System.Net.HttpStatusCode.OK)]
[Produces("application/json")]
public virtual async Task<IActionResult> GetAsync(
[StringLength(255, MinimumLength = 1, ErrorMessage = "The key value cannot less then 1 character and greater then 255. ")]
string key,
@ -32,36 +42,37 @@ namespace AsbCloudWebApi.Controllers
return Forbid();
var result = await service.GetOrDefaultAsync((int)userId, key, token).ConfigureAwait(false);
return Ok(result);
}
[HttpPost("{key}")]
[Permission]
public virtual async Task<ActionResult<int>> InsertAsync(string key, [FromBody] object value, CancellationToken token)
{
var userId = User.GetUserId();
if (userId is null)
return Forbid();
var result = await service.InsertAsync((int)userId, key, value, token).ConfigureAwait(false);
if (result == IUserSettingsRepository.ErrorKeyIsUsed)
return BadRequest(ArgumentInvalidException.MakeValidationError(nameof(key), "is already used"));
return Ok(result);
var actionResult = new JsonResult(result);
actionResult.ContentType = "application/json";
return actionResult;
}
/// <summary>
/// записать новые или обновить старые
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="token"></param>
/// <returns></returns>
[HttpPut("{key}")]
public virtual async Task<ActionResult<int>> UpdateAsync(string key, [FromBody] object value, CancellationToken token)
public virtual async Task<ActionResult<int>> UpsertAsync(string key, [FromBody] System.Text.Json.JsonDocument value, CancellationToken token)
{
var userId = User.GetUserId();
if (userId is null)
return Forbid();
var result = await service.UpdateAsync((int)userId, key, value, token).ConfigureAwait(false);
var result = await service.UpsertAsync((int)userId, key, value, token).ConfigureAwait(false);
if (result < 0)
return BadRequest(ArgumentInvalidException.MakeValidationError(nameof(key), "not found"));
return Ok(result);
}
/// <summary>
/// Удалить настройки пользователя по ключу
/// </summary>
/// <param name="key"></param>
/// <param name="token"></param>
/// <returns></returns>
[HttpDelete("{key}")]
public virtual async Task<ActionResult<int>> DeleteAsync(string key, CancellationToken token)
{

View File

@ -1,50 +1,50 @@
{
"files": {
"main.css": "/static/css/main.61ecfb0d.chunk.css",
"main.js": "/static/js/main.2493f2fa.chunk.js",
"main.js.map": "/static/js/main.2493f2fa.chunk.js.map",
"runtime-main.js": "/static/js/runtime-main.83ebcb38.js",
"runtime-main.js.map": "/static/js/runtime-main.83ebcb38.js.map",
"static/js/2.ebe1f792.chunk.js": "/static/js/2.ebe1f792.chunk.js",
"static/js/2.ebe1f792.chunk.js.map": "/static/js/2.ebe1f792.chunk.js.map",
"main.css": "/static/css/main.c2a82e71.chunk.css",
"main.js": "/static/js/main.01e9ada9.chunk.js",
"main.js.map": "/static/js/main.01e9ada9.chunk.js.map",
"runtime-main.js": "/static/js/runtime-main.8da12c69.js",
"runtime-main.js.map": "/static/js/runtime-main.8da12c69.js.map",
"static/js/2.f196b75b.chunk.js": "/static/js/2.f196b75b.chunk.js",
"static/js/2.f196b75b.chunk.js.map": "/static/js/2.f196b75b.chunk.js.map",
"static/css/3.f8ac3883.chunk.css": "/static/css/3.f8ac3883.chunk.css",
"static/js/3.a763380a.chunk.js": "/static/js/3.a763380a.chunk.js",
"static/js/3.a763380a.chunk.js.map": "/static/js/3.a763380a.chunk.js.map",
"static/js/3.31b66021.chunk.js": "/static/js/3.31b66021.chunk.js",
"static/js/3.31b66021.chunk.js.map": "/static/js/3.31b66021.chunk.js.map",
"static/css/4.f8ac3883.chunk.css": "/static/css/4.f8ac3883.chunk.css",
"static/js/4.14deb3a9.chunk.js": "/static/js/4.14deb3a9.chunk.js",
"static/js/4.14deb3a9.chunk.js.map": "/static/js/4.14deb3a9.chunk.js.map",
"static/js/5.54daf1dd.chunk.js": "/static/js/5.54daf1dd.chunk.js",
"static/js/5.54daf1dd.chunk.js.map": "/static/js/5.54daf1dd.chunk.js.map",
"static/js/6.2f64a277.chunk.js": "/static/js/6.2f64a277.chunk.js",
"static/js/6.2f64a277.chunk.js.map": "/static/js/6.2f64a277.chunk.js.map",
"static/js/7.8c90cea1.chunk.js": "/static/js/7.8c90cea1.chunk.js",
"static/js/7.8c90cea1.chunk.js.map": "/static/js/7.8c90cea1.chunk.js.map",
"static/js/8.6e937634.chunk.js": "/static/js/8.6e937634.chunk.js",
"static/js/8.6e937634.chunk.js.map": "/static/js/8.6e937634.chunk.js.map",
"static/js/9.3b35991a.chunk.js": "/static/js/9.3b35991a.chunk.js",
"static/js/9.3b35991a.chunk.js.map": "/static/js/9.3b35991a.chunk.js.map",
"static/js/10.69527c71.chunk.js": "/static/js/10.69527c71.chunk.js",
"static/js/10.69527c71.chunk.js.map": "/static/js/10.69527c71.chunk.js.map",
"static/js/11.f8320c6a.chunk.js": "/static/js/11.f8320c6a.chunk.js",
"static/js/11.f8320c6a.chunk.js.map": "/static/js/11.f8320c6a.chunk.js.map",
"static/js/12.7a9654fd.chunk.js": "/static/js/12.7a9654fd.chunk.js",
"static/js/12.7a9654fd.chunk.js.map": "/static/js/12.7a9654fd.chunk.js.map",
"static/js/13.35247644.chunk.js": "/static/js/13.35247644.chunk.js",
"static/js/13.35247644.chunk.js.map": "/static/js/13.35247644.chunk.js.map",
"static/js/14.0f147158.chunk.js": "/static/js/14.0f147158.chunk.js",
"static/js/14.0f147158.chunk.js.map": "/static/js/14.0f147158.chunk.js.map",
"static/js/4.1f09e89e.chunk.js": "/static/js/4.1f09e89e.chunk.js",
"static/js/4.1f09e89e.chunk.js.map": "/static/js/4.1f09e89e.chunk.js.map",
"static/js/5.ef929bfe.chunk.js": "/static/js/5.ef929bfe.chunk.js",
"static/js/5.ef929bfe.chunk.js.map": "/static/js/5.ef929bfe.chunk.js.map",
"static/js/6.88051835.chunk.js": "/static/js/6.88051835.chunk.js",
"static/js/6.88051835.chunk.js.map": "/static/js/6.88051835.chunk.js.map",
"static/js/7.4f3c315a.chunk.js": "/static/js/7.4f3c315a.chunk.js",
"static/js/7.4f3c315a.chunk.js.map": "/static/js/7.4f3c315a.chunk.js.map",
"static/js/8.8e9a1dc7.chunk.js": "/static/js/8.8e9a1dc7.chunk.js",
"static/js/8.8e9a1dc7.chunk.js.map": "/static/js/8.8e9a1dc7.chunk.js.map",
"static/js/9.71667cac.chunk.js": "/static/js/9.71667cac.chunk.js",
"static/js/9.71667cac.chunk.js.map": "/static/js/9.71667cac.chunk.js.map",
"static/js/10.e5247b1b.chunk.js": "/static/js/10.e5247b1b.chunk.js",
"static/js/10.e5247b1b.chunk.js.map": "/static/js/10.e5247b1b.chunk.js.map",
"static/js/11.70112c8f.chunk.js": "/static/js/11.70112c8f.chunk.js",
"static/js/11.70112c8f.chunk.js.map": "/static/js/11.70112c8f.chunk.js.map",
"static/js/12.2265b74f.chunk.js": "/static/js/12.2265b74f.chunk.js",
"static/js/12.2265b74f.chunk.js.map": "/static/js/12.2265b74f.chunk.js.map",
"static/js/13.063a16c9.chunk.js": "/static/js/13.063a16c9.chunk.js",
"static/js/13.063a16c9.chunk.js.map": "/static/js/13.063a16c9.chunk.js.map",
"static/js/14.50a284b1.chunk.js": "/static/js/14.50a284b1.chunk.js",
"static/js/14.50a284b1.chunk.js.map": "/static/js/14.50a284b1.chunk.js.map",
"index.html": "/index.html",
"static/css/3.f8ac3883.chunk.css.map": "/static/css/3.f8ac3883.chunk.css.map",
"static/css/4.f8ac3883.chunk.css.map": "/static/css/4.f8ac3883.chunk.css.map",
"static/css/main.61ecfb0d.chunk.css.map": "/static/css/main.61ecfb0d.chunk.css.map",
"static/js/2.ebe1f792.chunk.js.LICENSE.txt": "/static/js/2.ebe1f792.chunk.js.LICENSE.txt",
"static/css/main.c2a82e71.chunk.css.map": "/static/css/main.c2a82e71.chunk.css.map",
"static/js/2.f196b75b.chunk.js.LICENSE.txt": "/static/js/2.f196b75b.chunk.js.LICENSE.txt",
"static/media/ClusterIcon.f85713df.svg": "/static/media/ClusterIcon.f85713df.svg",
"static/media/DepositIcon.9688e406.svg": "/static/media/DepositIcon.9688e406.svg"
},
"entrypoints": [
"static/js/runtime-main.83ebcb38.js",
"static/js/2.ebe1f792.chunk.js",
"static/css/main.61ecfb0d.chunk.css",
"static/js/main.2493f2fa.chunk.js"
"static/js/runtime-main.8da12c69.js",
"static/js/2.f196b75b.chunk.js",
"static/css/main.c2a82e71.chunk.css",
"static/js/main.01e9ada9.chunk.js"
]
}

View File

@ -1 +1 @@
<!doctype html><html lang="ru"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="white"/><meta name="theme-color" media="(prefers-color-scheme: light)" content="white"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="black"/><meta name="description" content="Онлайн мониторинг процесса бурения в реальном времени в офисе заказчика"/><title>АСБ Vision</title><script defer="defer" src="/vendors.8b2328d4.js"></script><script defer="defer" src="/main.d469f489.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="ru"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="white"/><meta name="theme-color" media="(prefers-color-scheme: light)" content="white"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="black"/><meta name="description" content="Онлайн мониторинг процесса бурения в реальном времени в офисе заказчика"/><title>АСБ Vision</title><script defer="defer" src="/vendors.5c0d0b53.js"></script><script defer="defer" src="/main.05a81b59.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>