diff --git a/AsbCloudApp/Data/SetpointInfoDto.cs b/AsbCloudApp/Data/SetpointInfoDto.cs new file mode 100644 index 00000000..65a4d59b --- /dev/null +++ b/AsbCloudApp/Data/SetpointInfoDto.cs @@ -0,0 +1,12 @@ +namespace AsbCloudApp.Data +{ + public class SetpointInfoDto + { + public string DisplayName { get; set; } + public string Name { get; set; } + public string Units { get; set; } + public string Comment { get; set; } + public double Max { get; set; } + public double Min { get; set; } + } +} diff --git a/AsbCloudApp/Services/ISetpointsService.cs b/AsbCloudApp/Services/ISetpointsService.cs index acb07002..1def6ea4 100644 --- a/AsbCloudApp/Services/ISetpointsService.cs +++ b/AsbCloudApp/Services/ISetpointsService.cs @@ -15,5 +15,6 @@ namespace AsbCloudApp.Services Task> GetForPanelAsync(string uid, CancellationToken token); Task TryDelete(int idWell, int id, CancellationToken token); Task UpdateStateAsync(string uid, int id, SetpointsRequestDto setpointsRequestDto, CancellationToken token); + IEnumerable GetSetpointsNames(int idWell); } } diff --git a/AsbCloudInfrastructure/Services/SetpointsService.cs b/AsbCloudInfrastructure/Services/SetpointsService.cs index 4f3bfd39..7108cd75 100644 --- a/AsbCloudInfrastructure/Services/SetpointsService.cs +++ b/AsbCloudInfrastructure/Services/SetpointsService.cs @@ -13,6 +13,41 @@ namespace AsbCloudInfrastructure.Services { public class SetpointsService : ISetpointsService, IConverter { + private static readonly Dictionary SetpointInfos = new () + { + { "pressureSp", new SetpointInfoDto { Name = "pressureSp", DisplayName = "Заданное давление в зависимости от режима" } }, + { "dPressureMaxSP", new SetpointInfoDto { Name = "dPressureMaxSP", DisplayName = "Заданное максимально допустимое дифференциальное рабочее давление" } }, + { "pressureRotorSp", new SetpointInfoDto { Name = "pressureRotorSp", DisplayName = "Заданное рабочее давление в роторе" } }, + { "pressureDevelopSp", new SetpointInfoDto { Name = "pressureDevelopSp", DisplayName = "Заданное рабочее давление при проработке" } }, + { "pressureSlideSp", new SetpointInfoDto { Name = "pressureSlideSp", DisplayName = "Заданное рабочее давление в слайде" } }, + { "dPressureMaxRotorSP", new SetpointInfoDto { Name = "dPressureMaxRotorSP", DisplayName = "Заданное дифференциальное рабочее давление при бурении в роторе" } }, + { "dPressureMaxDevelopSP", new SetpointInfoDto { Name = "dPressureMaxDevelopSP", DisplayName = "Заданное дифференциальное рабочее давление при проработке" } }, + { "dPressureMaxSlideSP", new SetpointInfoDto { Name = "dPressureMaxSlideSP", DisplayName = "Дифференциальное рабочее давление в слайде" } }, + { "torqueSp", new SetpointInfoDto { Name = "torqueSp", DisplayName = "Момент заданный" } }, + { "speedSp", new SetpointInfoDto { Name = "speedSp", DisplayName = "Скорость заданная" } }, + { "filterSpeedPidTime", new SetpointInfoDto { Name = "filterSpeedPidTime", DisplayName = "Время усреднения скорости для регулятора" } }, + { "filterSpeedHmiTime", new SetpointInfoDto { Name = "filterSpeedHmiTime", DisplayName = "Время усреднения скорости для панели" } }, + { "torqueSwitchModeSp", new SetpointInfoDto { Name = "torqueSwitchModeSp", DisplayName = "момент для переключения слайд/ротор" } }, + { "speedSwitchModeSp", new SetpointInfoDto { Name = "speedSwitchModeSp", DisplayName = "Скорость для переключения слайд/ротор" } }, + { "speedRotorSp", new SetpointInfoDto { Name = "speedRotorSp", DisplayName = "Задание скорости бурения в роторе" } }, + { "speedSlideSp", new SetpointInfoDto { Name = "speedSlideSp", DisplayName = "Задание скорости бурения в слайде" } }, + { "speedDevelopSp", new SetpointInfoDto { Name = "speedDevelopSp", DisplayName = "Задание скорости проработки" } }, + { "hookWeightSp", new SetpointInfoDto { Name = "hookWeightSp", DisplayName = "Рабочий вес накрюке" } }, + { "speedOutMax", new SetpointInfoDto { Name = "speedOutMax", DisplayName = "Верхний предел аналогового выхода по скорости" } }, + { "liftingSpeedMax", new SetpointInfoDto { Name = "liftingSpeedMax", DisplayName = "Макс скорость при подъёме" } }, + { "loweringSpeedMax", new SetpointInfoDto { Name = "loweringSpeedMax", DisplayName = "Макс скорость при спуске СПО" } }, + { "dDepthSwitchSp", new SetpointInfoDto { Name = "dDepthSwitchSp", DisplayName = "Высота над забоем для перехода на режим спускоподъёмных операций" } }, + { "speedSpMax", new SetpointInfoDto { Name = "speedSpMax", DisplayName = "Верхняя граница шкалы выходного сигнала задания скорости в инженерных единицах" } }, + { "speedSpMin", new SetpointInfoDto { Name = "speedSpMin", DisplayName = "Нижняя граница шкалы выходного сигнала задания скорости в инженерных единицах" } }, + { "ramp_dSP_g", new SetpointInfoDto { Name = "ramp_dSP_g", DisplayName = "темп изменения задания регулятору нагрузки" } }, + { "ramp_dSP_P", new SetpointInfoDto { Name = "ramp_dSP_P", DisplayName = "темп изменения задания регулятору дифперепада давления" } }, + { "ramp_dSP_M", new SetpointInfoDto { Name = "ramp_dSP_M", DisplayName = "темп изменения задания регулятору момента" } }, + { "T_IdleSp", new SetpointInfoDto { Name = "T_IdleSp", DisplayName = "Время контроля простоя в открытом стволе (МИНУТЫ!!!)" } }, + { "Break2Sp", new SetpointInfoDto { Name = "Break2Sp", DisplayName = "% вспом. тормоз" } }, + { "mseNVspMax", new SetpointInfoDto { Name = "mseNVspMax", DisplayName = "Задание оптимальной скорости вращения ВСП определённое в результате работы MSE" } }, + { "mseAutoSpeedLoAuto", new SetpointInfoDto { Name = "mseAutoSpeedLoAuto", DisplayName = "Минимальная скорость проходки для автоматического включения режима МСЕ, в % от заданной скорости" } }, + }; + private readonly CacheTable cacheSetpoints; private readonly ITelemetryService telemetryService; @@ -30,6 +65,7 @@ namespace AsbCloudInfrastructure.Services public async Task InsertAsync(SetpointsRequestDto setpoints, CancellationToken token) { setpoints.IdState = 1; + setpoints.UploadDate = DateTime.Now; var inserted = await cacheSetpoints.InsertAsync(Convert(setpoints), token) .ConfigureAwait(false); return inserted?.Id ?? 0; @@ -50,17 +86,18 @@ namespace AsbCloudInfrastructure.Services if (idWell < 0) return null; - var entities = await cacheSetpoints.WhereAsync(s => + var entities = (await cacheSetpoints.WhereAsync(s => s.IdWell == idWell && s.IdState == 1 && s.UploadDate.AddSeconds(s.ObsolescenceSec) > DateTime.Now, token) - .ConfigureAwait(false); + .ConfigureAwait(false)) + .ToList();// без .ToList() работает не правильно. if (!entities.Any()) return null; foreach (var entity in entities) entity.IdState = 2; - + await cacheSetpoints.UpsertAsync(entities, token) .ConfigureAwait(false); @@ -71,7 +108,7 @@ namespace AsbCloudInfrastructure.Services public async Task UpdateStateAsync(string uid, int id, SetpointsRequestDto setpointsRequestDto, CancellationToken token) { - if (setpointsRequestDto.IdState != 3 || setpointsRequestDto.IdState != 4) + if (setpointsRequestDto.IdState != 3 && setpointsRequestDto.IdState != 4) throw new ArgumentOutOfRangeException(nameof(setpointsRequestDto), $"{nameof(setpointsRequestDto.IdState)} = {setpointsRequestDto.IdState}. Mast be 3 or 4."); var idWell = telemetryService.GetidWellByTelemetryUid(uid) ?? -1; @@ -83,6 +120,10 @@ namespace AsbCloudInfrastructure.Services var entity = await cacheSetpoints.FirstOrDefaultAsync(Predicate, token) .ConfigureAwait(false); + + if (entity is null) + return 0; + entity.IdState = setpointsRequestDto.IdState; await cacheSetpoints.UpsertAsync(entity, token) .ConfigureAwait(false); @@ -116,5 +157,8 @@ namespace AsbCloudInfrastructure.Services var dto = src.Adapt(); return dto; } + + public IEnumerable GetSetpointsNames(int idWell) + => SetpointInfos.Values; } } diff --git a/AsbCloudWebApi/Controllers/SetpointsController.cs b/AsbCloudWebApi/Controllers/SetpointsController.cs index 882e6af0..6bca8f0b 100644 --- a/AsbCloudWebApi/Controllers/SetpointsController.cs +++ b/AsbCloudWebApi/Controllers/SetpointsController.cs @@ -26,6 +26,26 @@ namespace AsbCloudWebApi.Controllers this.wellService = wellService; } + /// + /// Получает список запросов на изменение уставок. + /// + /// + /// + [HttpGet("api/well/{idWell}/setpointsNames")] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + public IActionResult GetSetpointsNamesByIdWellAsync([FromRoute] int idWell) + { + int? idCompany = User.GetCompanyId(); + int? idUser = User.GetUserId(); + + if (idCompany is null || idUser is null) + return Forbid(); + + var result = setpointsService.GetSetpointsNames(idWell); + + return Ok(result); + } + /// /// Добавляет запрос на изменение заданий панели оператора. /// @@ -138,12 +158,12 @@ namespace AsbCloudWebApi.Controllers } /// - /// Пробуем удалить запрос на изменение уставок. Это будет выполнено, если запрос еще не был отправлен. + /// Пробует удалить запрос на изменение уставок. Это будет выполнено, если запрос еще не был отправлен на панель. /// /// /// /// - /// 1 - удалено, <= 0 - не удалено + /// 1 - удалено, 0 и меньше - не удалено [HttpDelete("api/well/{idWell}/setpoints/{id}")] public async Task TryDeleteByIdWellAsync(int idWell, int id, CancellationToken token = default) {