diff --git a/AsbCloudApp/AsbCloudApp.csproj b/AsbCloudApp/AsbCloudApp.csproj index e84cf12c..200ee51b 100644 --- a/AsbCloudApp/AsbCloudApp.csproj +++ b/AsbCloudApp/AsbCloudApp.csproj @@ -6,6 +6,10 @@ disable + + + + diff --git a/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs new file mode 100644 index 00000000..4276ba75 --- /dev/null +++ b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsbCloudApp.Requests +{ + /// + /// класс с фильтрами для запроса + /// + public class SubsystemOperationTimeRequest: RequestBase + { + } +} diff --git a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs index 44e0b2d4..d55a9167 100644 --- a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs +++ b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs @@ -1,12 +1,20 @@ -using System; +using AsbCloudApp.Data.Subsystems; +using AsbCloudApp.Requests; +using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace AsbCloudApp.Services.Subsystems { public interface ISubsystemOperationTimeService { + Task> GetSubsystemAsync(int? idWell, CancellationToken token); + Task> GetStatisticAsync(SubsystemOperationTimeRequest request, CancellationToken token); + Task DeleteAsync(SubsystemOperationTimeRequest request, CancellationToken token); + Task> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); + } } diff --git a/AsbCloudApp/Services/Subsystems/ISubsystemStatisticsService.cs b/AsbCloudApp/Services/Subsystems/ISubsystemStatisticsService.cs deleted file mode 100644 index 411baa9e..00000000 --- a/AsbCloudApp/Services/Subsystems/ISubsystemStatisticsService.cs +++ /dev/null @@ -1,16 +0,0 @@ -using AsbCloudApp.Data.Subsystems; -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace AsbCloudApp.Services.Subsystems -{ - public interface ISubsystemStatisticsService - { - Task> GetStatisticsAsync(CancellationToken token); - Task> GetPeriodStatisticsAsync(DateTime periodBegin, - DateTime periodEnd, - CancellationToken token = default); - } -} diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 3fc9fa73..f061d084 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -481,6 +481,11 @@ namespace AsbCloudDb.Model new Permission{ Id = 124, Name="AdminWell.delete", Description="Разрешение удалять админ. Скважины"}, new Permission{ Id = 125, Name="AdminWell.edit", Description="Разрешение редактировать админ. Скважины"}, new Permission{ Id = 126, Name="AdminWell.get", Description="Разрешение просматривать админ. Скважины"}, + + new Permission{ Id = 127, Name="AdminSubsytem.delete", Description="Разрешение удалять админ. Подсистемы"}, + new Permission{ Id = 128, Name="AdminSubsytem.edit", Description="Разрешение редактировать админ. Подсистемы"}, + new Permission{ Id = 129, Name="AdminSubsytem.get", Description="Разрешение просматривать админ. Подсистемы"}, + new Permission{ Id = 200, Name="Auth.edit", Description="Разрешение редактировать 0"}, new Permission{ Id = 201, Name="Auth.get", Description="Разрешение просматривать 0"}, new Permission{ Id = 202, Name="Cluster.get", Description="Разрешение просматривать Кусты"}, diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs index e4538522..6c6fe8d8 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeBackgroundService.cs @@ -1,7 +1,10 @@ -using Microsoft.Extensions.Configuration; +using AsbCloudDb.Model; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; @@ -16,9 +19,33 @@ namespace AsbCloudInfrastructure.Services.Subsystems { connectionString = configuration.GetConnectionString("DefaultConnection"); } - protected override Task ExecuteAsync(CancellationToken token) + protected override async Task ExecuteAsync(CancellationToken token) { - throw new NotImplementedException(); + var timeToStartAnalysis = DateTime.Now; + var options = new DbContextOptionsBuilder() + .UseNpgsql(connectionString) + .Options; + + while (!token.IsCancellationRequested) + { + if (DateTime.Now > timeToStartAnalysis) + { + timeToStartAnalysis = DateTime.Now + TimeSpan.FromHours(1); + try + { + + } + catch (Exception ex) + { + Trace.TraceError(ex.Message); + } + //GC.Collect(); + } + + var ms = (int)(timeToStartAnalysis - DateTime.Now).TotalMilliseconds; + ms = ms > 100 ? ms : 100; + await Task.Delay(ms, token).ConfigureAwait(false); + } } } } diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs index d756aec6..eb8d9e6c 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs @@ -1,14 +1,74 @@ -using AsbCloudApp.Services.Subsystems; +using AsbCloudApp.Data.Subsystems; +using AsbCloudApp.Requests; +using AsbCloudApp.Services; +using AsbCloudApp.Services.Subsystems; +using AsbCloudDb.Model; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services.Subsystems { - internal class SubsystemOperationTimeService: ISubsystemOperationTimeService + internal class SubsystemOperationTimeService : ISubsystemOperationTimeService { + private readonly IAsbCloudDbContext db; + private readonly IWellService wellService; + + public SubsystemOperationTimeService(IAsbCloudDbContext db, IWellService wellService) + { + this.db = db; + this.wellService = wellService; + } + + public async Task> GetSubsystemAsync(int? idWell, CancellationToken token) + { + var result = new List() { + new SubsystemDto() + { + Id = 1, + Name = "test1", + Description = "test desription1" + }, + new SubsystemDto() + { + Id = 2, + Name = "test2", + Description = "test desription2" + }, + new SubsystemDto() + { + Id = 3, + Name = "test3", + Description = "test desription3" + } + }; + + return result; + + } + + + public async Task DeleteAsync(SubsystemOperationTimeRequest request, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task> GetOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token) + { + throw new NotImplementedException(); + } + + + + Task> ISubsystemOperationTimeService.GetStatisticAsync(SubsystemOperationTimeRequest request, CancellationToken token) + { + throw new NotImplementedException(); + } + + + + } } diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemStatisticService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemStatisticService.cs deleted file mode 100644 index d083bf8b..00000000 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemStatisticService.cs +++ /dev/null @@ -1,30 +0,0 @@ -using AsbCloudApp.Data.Subsystems; -using AsbCloudApp.Services.Subsystems; -using AsbCloudDb.Model; -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace AsbCloudInfrastructure.Services.Subsystems -{ - internal class SubsystemStatisticService : ISubsystemStatisticsService - { - - private readonly IAsbCloudDbContext db; - - public SubsystemStatisticService(IAsbCloudDbContext db) - { - this.db = db; - } - public Task> GetPeriodStatisticsAsync(DateTime periodBegin, DateTime periodEnd, CancellationToken token = default) - { - throw new NotImplementedException(); - } - - public Task> GetStatisticsAsync(CancellationToken token) - { - throw new NotImplementedException(); - } - } -} diff --git a/AsbCloudWebApi/Controllers/Subsystems/OperatingTimeSubsystemController.cs b/AsbCloudWebApi/Controllers/Subsystems/OperatingTimeSubsystemController.cs index 1e6d9451..91697b30 100644 --- a/AsbCloudWebApi/Controllers/Subsystems/OperatingTimeSubsystemController.cs +++ b/AsbCloudWebApi/Controllers/Subsystems/OperatingTimeSubsystemController.cs @@ -1,5 +1,7 @@ using AsbCloudApp.Data.Subsystems; +using AsbCloudApp.Requests; using AsbCloudApp.Services; +using AsbCloudApp.Services.Subsystems; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -9,14 +11,101 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers.Subsystems { + + /// /// Наработка подсистем /// - [Route("api/[OperatingTimeSubsystem]")] + [Route("api/[controller]")] [ApiController] [Authorize] public class OperatingTimeSubsystemController : ControllerBase { + private readonly ISubsystemOperationTimeService subsystemOperationTimeService; + private readonly IWellService wellService; + + public OperatingTimeSubsystemController(ISubsystemOperationTimeService subsystemOperationTimeService, IWellService wellService) + { + this.subsystemOperationTimeService = subsystemOperationTimeService; + this.wellService = wellService; + } + /// + /// получить статистику + /// + [HttpGet("statistic")] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + public async Task GetStatisticsAsync(CancellationToken token = default) + { + var subsystemResult = new List() + { + new SubsystemStatisticsDto(){ + IdSubsystem = 1, + Subsystem = "test1", + UsedTime = System.DateTime.Now, + K2 = System.TimeSpan.MinValue, + KUsage = System.TimeSpan.MinValue + + }, + new SubsystemStatisticsDto(){ + IdSubsystem = 2, + Subsystem = "test2", + UsedTime = System.DateTime.Now, + K2 = System.TimeSpan.Zero, + KUsage = System.TimeSpan.Zero + }, + new SubsystemStatisticsDto(){ + IdSubsystem = 3, + Subsystem = "test3", + UsedTime = System.DateTime.Now, + K2 = System.TimeSpan.MaxValue, + KUsage = System.TimeSpan.MaxValue + } + }; + + return Ok(subsystemResult); + } + + /// + /// получить список подсистем общий. + /// + [HttpGet("subsystem")] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + public async Task GetSubsystemAsync([FromQuery] int? idWell, CancellationToken token = default) + { + var result = await subsystemOperationTimeService.GetSubsystemAsync(idWell, token); + return Ok(result); + } + + /// + /// получить список наработок подсистем + /// + [HttpGet("operationTime")] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + public async Task GetOperationTimeAsync( + [FromQuery] SubsystemOperationTimeRequest request, + CancellationToken token = default) + { + + var result = await subsystemOperationTimeService.GetOperationTimeAsync(request, token); + return Ok(result); + } + + /// + /// Удалить наработки. + /// + /// + /// + /// + [HttpDelete] + [Permission] + [ProducesResponseType(typeof(int), (int)System.Net.HttpStatusCode.OK)] + public async Task DeleteAsync( + [FromQuery] SubsystemOperationTimeRequest request, + CancellationToken token) + { + var result = await subsystemOperationTimeService.DeleteAsync(request, token); + return Ok(result); + } } - } +} diff --git a/AsbCloudWebApi/Controllers/Subsystems/StatisticSubsystemsController.cs b/AsbCloudWebApi/Controllers/Subsystems/StatisticSubsystemsController.cs deleted file mode 100644 index 1fafe82b..00000000 --- a/AsbCloudWebApi/Controllers/Subsystems/StatisticSubsystemsController.cs +++ /dev/null @@ -1,94 +0,0 @@ -using AsbCloudApp.Data.Subsystems; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace AsbCloudWebApi.Controllers.Subsystems -{ - /// - /// Статистика наработки подсистем - /// - [Route("api/statisticsSubsystem")] - [ApiController] - [Authorize] - public class StatisticSubsystemsController : ControllerBase - { - - /// - /// получить без временного периода в запросе. - /// - [HttpGet] - [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] - public async Task GetStatisticsAsync(CancellationToken token = default) - { - var subsystemResult = new List() - { - new SubsystemStatisticsDto(){ - IdSubsystem = 1, - Subsystem = "test1", - UsedTime = System.DateTime.Now, - K2 = System.TimeSpan.MinValue, - KUsage = System.TimeSpan.MinValue - - }, - new SubsystemStatisticsDto(){ - IdSubsystem = 2, - Subsystem = "test2", - UsedTime = System.DateTime.Now, - K2 = System.TimeSpan.Zero, - KUsage = System.TimeSpan.Zero - }, - new SubsystemStatisticsDto(){ - IdSubsystem = 3, - Subsystem = "test3", - UsedTime = System.DateTime.Now, - K2 = System.TimeSpan.MaxValue, - KUsage = System.TimeSpan.MaxValue - } - }; - - return Ok(subsystemResult); - } - - - - //[HttpGet] - //[ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] - //public async Task GetStatisticsPeriodAsync(CancellationToken token = default, DateTime dateBegin , DateTime dateEnd) - //{ - // var subsystemResult = new List() - // { - // new SubsystemStatisticsDto(){ - // IdSubsystem = 1, - // Subsystem = "test1", - // UsedTime = System.DateTime.Now, - // K2 = System.TimeSpan.MinValue, - // KUsage = System.TimeSpan.MinValue - - // }, - // new SubsystemStatisticsDto(){ - // IdSubsystem = 2, - // Subsystem = "test2", - // UsedTime = System.DateTime.Now, - // K2 = System.TimeSpan.Zero, - // KUsage = System.TimeSpan.Zero - // }, - // new SubsystemStatisticsDto(){ - // IdSubsystem = 3, - // Subsystem = "test3", - // UsedTime = System.DateTime.Now, - // K2 = System.TimeSpan.MaxValue, - // KUsage = System.TimeSpan.MaxValue - // } - // }; - - // return Ok(subsystemResult); - //} - - - } -}