diff --git a/AsbCloudApp/AsbCloudApp.csproj b/AsbCloudApp/AsbCloudApp.csproj
index fdd95225..dbc15171 100644
--- a/AsbCloudApp/AsbCloudApp.csproj
+++ b/AsbCloudApp/AsbCloudApp.csproj
@@ -4,8 +4,4 @@
net6.0
-
-
-
-
diff --git a/AsbCloudApp/Comparators/TelemetryUserDtoComparer.cs b/AsbCloudApp/Comparators/TelemetryUserDtoComparer.cs
index 48b497a9..ad8f3239 100644
--- a/AsbCloudApp/Comparators/TelemetryUserDtoComparer.cs
+++ b/AsbCloudApp/Comparators/TelemetryUserDtoComparer.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using System.Collections.Generic;
namespace AsbCloudApp.Comparators
diff --git a/AsbCloudApp/Data/ITelemetryData.cs b/AsbCloudApp/Data/ITelemetryData.cs
index b8b00dbc..61d70da7 100644
--- a/AsbCloudApp/Data/ITelemetryData.cs
+++ b/AsbCloudApp/Data/ITelemetryData.cs
@@ -4,7 +4,8 @@ namespace AsbCloudApp.Data
{
public interface ITelemetryData
{
- int IdTelemetry { get; set; }
- DateTime Date { get; set; }
+ int IdTelemetry { get; set; }
+
+ DateTime DateTime { get; set; }
}
}
diff --git a/AsbCloudApp/Data/EventDto.cs b/AsbCloudApp/Data/SAUB/EventDto.cs
similarity index 89%
rename from AsbCloudApp/Data/EventDto.cs
rename to AsbCloudApp/Data/SAUB/EventDto.cs
index df4a3da3..9d81dc56 100644
--- a/AsbCloudApp/Data/EventDto.cs
+++ b/AsbCloudApp/Data/SAUB/EventDto.cs
@@ -1,4 +1,4 @@
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.SAUB
{
public class EventDto : IId
{
diff --git a/AsbCloudApp/Data/SAUB/Readme.md b/AsbCloudApp/Data/SAUB/Readme.md
new file mode 100644
index 00000000..8a09cd11
--- /dev/null
+++ b/AsbCloudApp/Data/SAUB/Readme.md
@@ -0,0 +1,2 @@
+Папка содержит dto для получаемые от панели оператора САУБ.
+Данные WITS вынесены в отдельную папку.
\ No newline at end of file
diff --git a/AsbCloudApp/Data/TelemetryDataSaubDto.cs b/AsbCloudApp/Data/SAUB/TelemetryDataSaubDto.cs
similarity index 94%
rename from AsbCloudApp/Data/TelemetryDataSaubDto.cs
rename to AsbCloudApp/Data/SAUB/TelemetryDataSaubDto.cs
index 15bea34c..3705f867 100644
--- a/AsbCloudApp/Data/TelemetryDataSaubDto.cs
+++ b/AsbCloudApp/Data/SAUB/TelemetryDataSaubDto.cs
@@ -1,13 +1,18 @@
using System;
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.SAUB
{
///
/// Сообщение получаемое по телеметрии и отправляемое в frontend
///
public class TelemetryDataSaubDto : ITelemetryData
{
- public DateTime Date { get; set; }
+ public DateTime DateTime { get; set; }
+ public DateTime Date // TODO: remove this legacy after all panels updated
+ {
+ get { return DateTime; }
+ set { DateTime = value; }
+ }
///
/// Режим работы САУБ:
diff --git a/AsbCloudApp/Data/TelemetryDataSpinDto.cs b/AsbCloudApp/Data/SAUB/TelemetryDataSpinDto.cs
similarity index 93%
rename from AsbCloudApp/Data/TelemetryDataSpinDto.cs
rename to AsbCloudApp/Data/SAUB/TelemetryDataSpinDto.cs
index 8904113d..122ee2ee 100644
--- a/AsbCloudApp/Data/TelemetryDataSpinDto.cs
+++ b/AsbCloudApp/Data/SAUB/TelemetryDataSpinDto.cs
@@ -1,15 +1,16 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.SAUB
{
public class TelemetryDataSpinDto : ITelemetryData
{
public int IdTelemetry { get; set; }
- public DateTime Date { get; set; }
+ public DateTime DateTime { get; set; }
+ public DateTime Date // TODO: remove this legacy after all panels updated
+ {
+ get { return DateTime; }
+ set { DateTime = value; }
+ }
public float? TopDriveSpeed { get; set; }
public float? TopDriveSpeedMin { get; set; }
public float? TopDriveSpeedMax { get; set; }
diff --git a/AsbCloudApp/Data/TelemetryInfoDto.cs b/AsbCloudApp/Data/SAUB/TelemetryInfoDto.cs
similarity index 94%
rename from AsbCloudApp/Data/TelemetryInfoDto.cs
rename to AsbCloudApp/Data/SAUB/TelemetryInfoDto.cs
index 0b601db6..7b9f16cf 100644
--- a/AsbCloudApp/Data/TelemetryInfoDto.cs
+++ b/AsbCloudApp/Data/SAUB/TelemetryInfoDto.cs
@@ -1,6 +1,6 @@
using System;
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.SAUB
{
public class TelemetryInfoDto
{
diff --git a/AsbCloudApp/Data/TelemetryMessageDto.cs b/AsbCloudApp/Data/SAUB/TelemetryMessageDto.cs
similarity index 94%
rename from AsbCloudApp/Data/TelemetryMessageDto.cs
rename to AsbCloudApp/Data/SAUB/TelemetryMessageDto.cs
index bd9d90a2..02d9d728 100644
--- a/AsbCloudApp/Data/TelemetryMessageDto.cs
+++ b/AsbCloudApp/Data/SAUB/TelemetryMessageDto.cs
@@ -1,6 +1,6 @@
using System;
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.SAUB
{
///
/// Сообщение получаемое от телеметрии с буровой
diff --git a/AsbCloudApp/Data/TelemetryUserDto.cs b/AsbCloudApp/Data/SAUB/TelemetryUserDto.cs
similarity index 88%
rename from AsbCloudApp/Data/TelemetryUserDto.cs
rename to AsbCloudApp/Data/SAUB/TelemetryUserDto.cs
index dd58e848..83b8ba26 100644
--- a/AsbCloudApp/Data/TelemetryUserDto.cs
+++ b/AsbCloudApp/Data/SAUB/TelemetryUserDto.cs
@@ -1,4 +1,4 @@
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.SAUB
{
public class TelemetryUserDto : IId
{
diff --git a/AsbCloudApp/Data/TelemetryDto.cs b/AsbCloudApp/Data/TelemetryDto.cs
index df55e879..66bf9cc1 100644
--- a/AsbCloudApp/Data/TelemetryDto.cs
+++ b/AsbCloudApp/Data/TelemetryDto.cs
@@ -1,4 +1,5 @@
-using System.Text.Json.Serialization;
+using AsbCloudApp.Data.SAUB;
+using System.Text.Json.Serialization;
namespace AsbCloudApp.Data
{
diff --git a/AsbCloudApp/Data/WITS/Readme.md b/AsbCloudApp/Data/WITS/Readme.md
new file mode 100644
index 00000000..ac6325ef
--- /dev/null
+++ b/AsbCloudApp/Data/WITS/Readme.md
@@ -0,0 +1,2 @@
+Данные WITS см.: http://www.petrospec-technologies.com/resource/wits_doc.htm.
+Дополнительное описание параметров в сборке AsbWitsInf.dll
\ No newline at end of file
diff --git a/AsbCloudApp/Data/WITS/Record1.cs b/AsbCloudApp/Data/WITS/Record1Dto.cs
similarity index 100%
rename from AsbCloudApp/Data/WITS/Record1.cs
rename to AsbCloudApp/Data/WITS/Record1Dto.cs
diff --git a/AsbCloudApp/Data/WITS/Record50.cs b/AsbCloudApp/Data/WITS/Record50Dto.cs
similarity index 100%
rename from AsbCloudApp/Data/WITS/Record50.cs
rename to AsbCloudApp/Data/WITS/Record50Dto.cs
diff --git a/AsbCloudApp/Data/WITS/Record60.cs b/AsbCloudApp/Data/WITS/Record60Dto.cs
similarity index 100%
rename from AsbCloudApp/Data/WITS/Record60.cs
rename to AsbCloudApp/Data/WITS/Record60Dto.cs
diff --git a/AsbCloudApp/Data/WITS/Record61.cs b/AsbCloudApp/Data/WITS/Record61Dto.cs
similarity index 100%
rename from AsbCloudApp/Data/WITS/Record61.cs
rename to AsbCloudApp/Data/WITS/Record61Dto.cs
diff --git a/AsbCloudApp/Data/WITS/Record7.cs b/AsbCloudApp/Data/WITS/Record7Dto.cs
similarity index 100%
rename from AsbCloudApp/Data/WITS/Record7.cs
rename to AsbCloudApp/Data/WITS/Record7Dto.cs
diff --git a/AsbCloudApp/Data/WITS/Record8.cs b/AsbCloudApp/Data/WITS/Record8Dto.cs
similarity index 100%
rename from AsbCloudApp/Data/WITS/Record8.cs
rename to AsbCloudApp/Data/WITS/Record8Dto.cs
diff --git a/AsbCloudApp/Data/WITS/RecordBase.cs b/AsbCloudApp/Data/WITS/RecordBaseDto.cs
similarity index 96%
rename from AsbCloudApp/Data/WITS/RecordBase.cs
rename to AsbCloudApp/Data/WITS/RecordBaseDto.cs
index 52e3267b..6116650f 100644
--- a/AsbCloudApp/Data/WITS/RecordBase.cs
+++ b/AsbCloudApp/Data/WITS/RecordBaseDto.cs
@@ -1,13 +1,18 @@
+using System;
+
namespace AsbCloudApp.Data.WITS
{
///
/// This is base class for all WITS-0 records
///
- public abstract class RecordBaseDto
+ public abstract class RecordBaseDto: ITelemetryData
{
public int Id { get; set; }
-
+ public int IdTelemetry { get; set; }
+
+ public DateTime DateTime { get; set; }
+
public int TimeStamp { get; set; }
///
@@ -83,7 +88,7 @@ namespace AsbCloudApp.Data.WITS
/// ValueType = "L"
///
- public int? Date { get; set; }
+ public int? Date_ { get; set; }
///
/// RecordId = 1,
@@ -114,6 +119,5 @@ namespace AsbCloudApp.Data.WITS
///
public short? Actcod { get; set; }
-
}
}
diff --git a/AsbCloudApp/Services/IEventService.cs b/AsbCloudApp/Services/IEventService.cs
index 54e8897a..937eb24a 100644
--- a/AsbCloudApp/Services/IEventService.cs
+++ b/AsbCloudApp/Services/IEventService.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
diff --git a/AsbCloudApp/Services/IMessageService.cs b/AsbCloudApp/Services/IMessageService.cs
index 1a2536f2..98dc863d 100644
--- a/AsbCloudApp/Services/IMessageService.cs
+++ b/AsbCloudApp/Services/IMessageService.cs
@@ -1,4 +1,5 @@
using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using System;
using System.Collections.Generic;
using System.Threading;
diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs
index 2d42d53d..144ae3ca 100644
--- a/AsbCloudApp/Services/ITelemetryService.cs
+++ b/AsbCloudApp/Services/ITelemetryService.cs
@@ -1,4 +1,5 @@
using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using System;
using System.Collections.Generic;
using System.Threading;
diff --git a/AsbCloudApp/Services/ITelemetryUserService.cs b/AsbCloudApp/Services/ITelemetryUserService.cs
index 80c465a3..c19dbb39 100644
--- a/AsbCloudApp/Services/ITelemetryUserService.cs
+++ b/AsbCloudApp/Services/ITelemetryUserService.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using System.Collections.Generic;
namespace AsbCloudApp.Services
diff --git a/AsbCloudApp/Services/IWitsRepository.cs b/AsbCloudApp/Services/IWitsRepository.cs
index 32a9c8ee..34a47126 100644
--- a/AsbCloudApp/Services/IWitsRepository.cs
+++ b/AsbCloudApp/Services/IWitsRepository.cs
@@ -1,11 +1,16 @@
-using System.Collections.Generic;
+using AsbCloudApp.Data;
+using System;
+using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
- public interface IWitsRepository
+ public interface IWitsRecordRepository
+ where TDto: ITelemetryData
{
- Task SaveDataAsync(string uid, IEnumerable dtos, CancellationToken token);
+ Task SaveDataAsync(int idTelemetry, IEnumerable dtos, CancellationToken token);
+ Task> GetAsync(int idTelemetry, DateTime begin, DateTime end, CancellationToken token);
+ Task<(DateTime begin, DateTime end, int count)?> GetStatAsync(int idTelemetry, CancellationToken token);
}
}
\ No newline at end of file
diff --git a/AsbCloudDb/Model/WITS/Record15.cs b/AsbCloudDb/Model/WITS/Record15.cs
index 00781033..0f84b023 100644
--- a/AsbCloudDb/Model/WITS/Record15.cs
+++ b/AsbCloudDb/Model/WITS/Record15.cs
@@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
+#nullable enable
namespace AsbCloudDb.Model.WITS
{
diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs
index f7e83474..79ba1f42 100644
--- a/AsbCloudInfrastructure/DependencyInjection.cs
+++ b/AsbCloudInfrastructure/DependencyInjection.cs
@@ -14,6 +14,7 @@ using System;
using FluentValidation;
using FluentValidation.AspNetCore;
using AsbCloudInfrastructure.Services.DrillingProgram;
+using AsbCloudApp.Data.SAUB;
namespace AsbCloudInfrastructure
{
@@ -54,6 +55,7 @@ namespace AsbCloudInfrastructure
services.AddHostedService();// replace by BackgroundWorkerService
+ services.AddSingleton(new WitsInfoService());
services.AddSingleton(new CacheDb());
services.AddSingleton();
services.AddSingleton();
@@ -96,6 +98,14 @@ namespace AsbCloudInfrastructure
services.AddTransient, TelemetryDataSaubService>();
services.AddTransient, TelemetryDataSpinService>();
+ // Wits
+ services.AddTransient, WitsRecordRepository>();
+ services.AddTransient, WitsRecordRepository>();
+ services.AddTransient, WitsRecordRepository>();
+ services.AddTransient, WitsRecordRepository>();
+ services.AddTransient, WitsRecordRepository>();
+ services.AddTransient, WitsRecordRepository>();
+
services.AddValidators();
return services;
diff --git a/AsbCloudInfrastructure/Services/EventService.cs b/AsbCloudInfrastructure/Services/EventService.cs
index f34d5cf0..59828dd4 100644
--- a/AsbCloudInfrastructure/Services/EventService.cs
+++ b/AsbCloudInfrastructure/Services/EventService.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache;
diff --git a/AsbCloudInfrastructure/Services/MessageService.cs b/AsbCloudInfrastructure/Services/MessageService.cs
index 1d3c6d6a..e18aed0d 100644
--- a/AsbCloudInfrastructure/Services/MessageService.cs
+++ b/AsbCloudInfrastructure/Services/MessageService.cs
@@ -1,4 +1,5 @@
using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache;
diff --git a/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs b/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs
index ebf5d0a6..ef8a118a 100644
--- a/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs
+++ b/AsbCloudInfrastructure/Services/TelemetryDataBaseService.cs
@@ -40,16 +40,16 @@ namespace AsbCloudInfrastructure.Services
if (dtos == default || !dtos.Any())
return 0;
- var dtosList = dtos.OrderBy(d => d.Date).ToList();
+ var dtosList = dtos.OrderBy(d => d.DateTime).ToList();
- var dtoMinDate = dtosList.First().Date;
- var dtoMaxDate = dtosList.Last().Date;
+ var dtoMinDate = dtosList.First().DateTime;
+ var dtoMaxDate = dtosList.Last().DateTime;
if (dtosList.Count > 1)
{
var duplicates = new List(8);
for (int i = 1; i < dtosList.Count; i++)
- if (dtosList[i].Date - dtosList[i-1].Date < TimeSpan.FromMilliseconds(100))
+ if (dtosList[i].DateTime - dtosList[i-1].DateTime < TimeSpan.FromMilliseconds(100))
duplicates.Add(dtosList[i - 1]);
foreach (var duplicate in duplicates)
dtosList.Remove(duplicate);
diff --git a/AsbCloudInfrastructure/Services/TelemetryDataSaubService.cs b/AsbCloudInfrastructure/Services/TelemetryDataSaubService.cs
index 18648d93..7bfd7f61 100644
--- a/AsbCloudInfrastructure/Services/TelemetryDataSaubService.cs
+++ b/AsbCloudInfrastructure/Services/TelemetryDataSaubService.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache;
@@ -21,7 +21,7 @@ namespace AsbCloudInfrastructure.Services
var telemetryUser = cacheTelemetryUsers?
.FirstOrDefault(u => u.IdTelemetry == src.IdTelemetry && (u.Name == src.User || u.Surname == src.User));
entity.IdUser = telemetryUser?.IdUser;
- entity.DateTime = src.Date.ToUtcDateTimeOffset(timezoneOffset);
+ entity.DateTime = src.DateTime.ToUtcDateTimeOffset(timezoneOffset);
return entity;
}
@@ -31,7 +31,7 @@ namespace AsbCloudInfrastructure.Services
var telemetryUser = cacheTelemetryUsers?
.FirstOrDefault(u => u.IdTelemetry == src.IdTelemetry && u.IdUser == src.IdUser);
dto.User = telemetryUser?.MakeDisplayName();
- dto.Date = src.DateTime.ToRemoteDateTime(timezoneOffset);
+ dto.DateTime = src.DateTime.ToRemoteDateTime(timezoneOffset);
return dto;
}
}
diff --git a/AsbCloudInfrastructure/Services/TelemetryDataSpinService.cs b/AsbCloudInfrastructure/Services/TelemetryDataSpinService.cs
index c6ac634c..b808ae4c 100644
--- a/AsbCloudInfrastructure/Services/TelemetryDataSpinService.cs
+++ b/AsbCloudInfrastructure/Services/TelemetryDataSpinService.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache;
@@ -18,14 +18,14 @@ namespace AsbCloudInfrastructure.Services
public override TelemetryDataSpin Convert(TelemetryDataSpinDto src, double timezoneOffset)
{
var entity = src.Adapt();
- entity.DateTime = src.Date.ToUtcDateTimeOffset(timezoneOffset);
+ entity.DateTime = src.DateTime.ToUtcDateTimeOffset(timezoneOffset);
return entity;
}
public override TelemetryDataSpinDto Convert(TelemetryDataSpin src, double timezoneOffset)
{
var dto = src.Adapt();
- dto.Date = src.DateTime.ToRemoteDateTime(timezoneOffset);
+ dto.DateTime = src.DateTime.ToRemoteDateTime(timezoneOffset);
return dto;
}
}
diff --git a/AsbCloudInfrastructure/Services/TelemetryService.cs b/AsbCloudInfrastructure/Services/TelemetryService.cs
index 90144464..c88c3972 100644
--- a/AsbCloudInfrastructure/Services/TelemetryService.cs
+++ b/AsbCloudInfrastructure/Services/TelemetryService.cs
@@ -10,6 +10,7 @@ using System;
using System.Threading;
using Microsoft.EntityFrameworkCore;
using AsbCloudDb;
+using AsbCloudApp.Data.SAUB;
namespace AsbCloudInfrastructure.Services
{
diff --git a/AsbCloudInfrastructure/Services/TelemetryUserService.cs b/AsbCloudInfrastructure/Services/TelemetryUserService.cs
index fe6799c3..19b0d781 100644
--- a/AsbCloudInfrastructure/Services/TelemetryUserService.cs
+++ b/AsbCloudInfrastructure/Services/TelemetryUserService.cs
@@ -1,5 +1,5 @@
using AsbCloudApp.Comparators;
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache;
diff --git a/AsbCloudInfrastructure/Services/WitsInfoService.cs b/AsbCloudInfrastructure/Services/WitsInfoService.cs
new file mode 100644
index 00000000..42bea924
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/WitsInfoService.cs
@@ -0,0 +1,34 @@
+using AsbWitsInfo;
+using System.Collections.Generic;
+
+namespace AsbCloudInfrastructure.Services
+{
+ public class WitsInfoService
+ {
+ private readonly InfoService witsInfoService;
+ public WitsInfoService(IEnumerable? customItems = null, IEnumerable? customRecords = null)
+ {
+ witsInfoService = new InfoService(customItems, customRecords);
+ }
+
+ public object GetItems(int idRecord = -1)
+ {
+ object items;
+ if(idRecord > 0)
+ items = witsInfoService.ItemInfoStore.Where(i => i.RecordId == idRecord);
+ else
+ items = witsInfoService.ItemInfoStore.Where(i => true);
+ return items;
+ }
+
+ public object GetRecords(int idRecord = -1)
+ {
+ object items;
+ if (idRecord > 0)
+ items = witsInfoService.RecordInfoStore.Where(i => i.RecordId == idRecord);
+ else
+ items = witsInfoService.RecordInfoStore.Where(i => true);
+ return items;
+ }
+ }
+}
diff --git a/AsbCloudInfrastructure/Services/WitsRecordRepository.cs b/AsbCloudInfrastructure/Services/WitsRecordRepository.cs
new file mode 100644
index 00000000..09cb1d09
--- /dev/null
+++ b/AsbCloudInfrastructure/Services/WitsRecordRepository.cs
@@ -0,0 +1,90 @@
+using AsbCloudApp.Services;
+using AsbCloudDb.Model;
+using Mapster;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudInfrastructure.Services
+{
+ public class WitsRecordRepository : IWitsRecordRepository
+ where TEntity : class, ITelemetryData
+ where TDto: AsbCloudApp.Data.ITelemetryData
+ {
+ private readonly DbSet dbset;
+ private readonly IAsbCloudDbContext db;
+ private readonly ITelemetryService telemetryService;
+
+ public WitsRecordRepository(IAsbCloudDbContext db, ITelemetryService telemetryService)
+ {
+ dbset = db.Set();
+ this.db = db;
+ this.telemetryService = telemetryService;
+ }
+
+ public async Task<(DateTime begin, DateTime end, int count)?> GetStatAsync(int idTelemetry, CancellationToken token)
+ {
+ var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours;
+ var stat = await dbset.Where(d => d.IdTelemetry == idTelemetry)
+ .GroupBy(d => d.IdTelemetry)
+ .Select(g => new Tuple(g.Min(d => d.DateTime), g.Max(d => d.DateTime), g.Count()))
+ .FirstOrDefaultAsync(token);
+
+ if (stat is null || stat.Item3 == 0)
+ return null;
+
+ return (
+ stat.Item1.ToRemoteDateTime(timezoneHours),
+ stat.Item2.ToRemoteDateTime(timezoneHours),
+ stat.Item3);
+ }
+
+ public async Task> GetAsync(int idTelemetry, DateTime begin, DateTime end, CancellationToken token)
+ {
+ var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours;
+ var query = dbset
+ .Where(d => d.IdTelemetry == idTelemetry)
+ .Where(d => d.DateTime >= begin)
+ .Where(d => d.DateTime <= end)
+ .AsNoTracking();
+ var data = await query.ToListAsync(token);
+ return data.Select(d => Convert(d, timezoneHours));
+ }
+
+ public Task SaveDataAsync(int idTelemetry, IEnumerable dtos, CancellationToken token)
+ {
+ if (dtos?.Any() != true)
+ return Task.CompletedTask;
+
+ var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours;
+ var entities = dtos.Select(dto => Convert(dto, idTelemetry, timezoneHours));
+
+ dbset.AddRange(entities);
+ return db.SaveChangesAsync(token);
+ }
+
+ private static TEntity Convert(TDto dto, int idTelemetry, double timezoneHours)
+ {
+ if (dto is null)
+ return null;
+
+ var entity = dto.Adapt();
+ entity.IdTelemetry = idTelemetry;
+ entity.DateTime = dto.DateTime.ToUtcDateTimeOffset(timezoneHours);
+ return entity;
+ }
+
+ private static TDto Convert(TEntity entity, double timezoneHours)
+ {
+ if (entity is null)
+ return default;
+
+ var data = entity.Adapt();
+ data.DateTime = entity.DateTime.ToRemoteDateTime(timezoneHours);
+ return data;
+ }
+ }
+}
diff --git a/AsbCloudInfrastructure/Validators/EventDtoValidator.cs b/AsbCloudInfrastructure/Validators/EventDtoValidator.cs
index d70dea2a..3ed82d24 100644
--- a/AsbCloudInfrastructure/Validators/EventDtoValidator.cs
+++ b/AsbCloudInfrastructure/Validators/EventDtoValidator.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using FluentValidation;
namespace AsbCloudInfrastructure.Validators
diff --git a/AsbCloudWebApi.Tests/ControllersTests/TelemetryDataSaubControllerTests.cs b/AsbCloudWebApi.Tests/ControllersTests/TelemetryDataSaubControllerTests.cs
index 60a6db17..26a4c34b 100644
--- a/AsbCloudWebApi.Tests/ControllersTests/TelemetryDataSaubControllerTests.cs
+++ b/AsbCloudWebApi.Tests/ControllersTests/TelemetryDataSaubControllerTests.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudWebApi.Controllers;
diff --git a/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs
index 9d6baf19..ff03239e 100644
--- a/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs
+++ b/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs
@@ -1,4 +1,3 @@
-using AsbCloudApp.Data;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.Cache;
using AsbCloudInfrastructure.Services;
@@ -8,6 +7,7 @@ using System.Threading.Tasks;
using AsbCloudApp.Services;
using Moq;
using Xunit;
+using AsbCloudApp.Data.SAUB;
namespace AsbCloudWebApi.Tests.ServicesTests;
diff --git a/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs
index 63638083..a29de72f 100644
--- a/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs
+++ b/AsbCloudWebApi.Tests/ServicesTests/TelemetryDataSaubServiceTest.cs
@@ -1,4 +1,5 @@
using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services;
@@ -70,7 +71,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
var newData = new List
{
new TelemetryDataSaubDto{
- Date = now,
+ DateTime = now,
AxialLoad = 1,
MseState = 1,
User = tuser,
diff --git a/AsbCloudWebApi/Controllers/TelemetryController.cs b/AsbCloudWebApi/Controllers/TelemetryController.cs
index e66734a9..9855fa3b 100644
--- a/AsbCloudWebApi/Controllers/TelemetryController.cs
+++ b/AsbCloudWebApi/Controllers/TelemetryController.cs
@@ -1,4 +1,5 @@
using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudWebApi.SignalR;
using Microsoft.AspNetCore.Mvc;
diff --git a/AsbCloudWebApi/Controllers/TelemetryDataSaubController.cs b/AsbCloudWebApi/Controllers/TelemetryDataSaubController.cs
index c24fd103..242ee985 100644
--- a/AsbCloudWebApi/Controllers/TelemetryDataSaubController.cs
+++ b/AsbCloudWebApi/Controllers/TelemetryDataSaubController.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudWebApi.SignalR;
using Microsoft.AspNetCore.Mvc;
diff --git a/AsbCloudWebApi/Controllers/TelemetryDataSpinController.cs b/AsbCloudWebApi/Controllers/TelemetryDataSpinController.cs
index 286efdf2..d8e0bc67 100644
--- a/AsbCloudWebApi/Controllers/TelemetryDataSpinController.cs
+++ b/AsbCloudWebApi/Controllers/TelemetryDataSpinController.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Services;
using AsbCloudWebApi.SignalR;
using Microsoft.AspNetCore.Mvc;
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs
new file mode 100644
index 00000000..58c1aa2a
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs
@@ -0,0 +1,82 @@
+using AsbCloudApp.Data;
+using AsbCloudApp.Data.WITS;
+using AsbCloudApp.Services;
+using AsbCloudWebApi.SignalR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public abstract class WitsControllerAbstract : ControllerBase
+ where TDto : ITelemetryData
+ {
+ private readonly ITelemetryService telemetryService;
+ private readonly IHubContext telemetryHubContext;
+ protected abstract string SirnalRMethodGetDataName { get; }
+
+ public WitsControllerAbstract(
+ ITelemetryService telemetryService,
+ IHubContext telemetryHubContext)
+ {
+ this.telemetryService = telemetryService;
+ this.telemetryHubContext = telemetryHubContext;
+ }
+
+ [HttpPost("{uid}")]
+ [AllowAnonymous]
+ public async virtual Task PostDataAsync(
+ string uid,
+ [FromBody] IEnumerable dtos,
+ [FromServices] IWitsRecordRepository witsRecordRepository,
+ CancellationToken token = default)
+ {
+ var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid);
+ await witsRecordRepository.SaveDataAsync(idTelemetry, dtos, token).ConfigureAwait(false);
+ var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
+ if (idWell != null && dtos.Any())
+ _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_wits")
+ .SendAsync(SirnalRMethodGetDataName, dtos), CancellationToken.None);
+
+ return Ok();
+ }
+
+ [HttpGet("{idWell}")]
+ [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))]
+ public async virtual Task GetDataAsync(
+ int idWell,
+ DateTime begin,
+ DateTime end,
+ [FromServices] IWitsRecordRepository witsRecordRepository,
+ CancellationToken token)
+ {
+ var idTelemetry = telemetryService.GetIdTelemetryByIdWell(idWell);
+ if (idTelemetry is null)
+ return NoContent();
+ var dtos = await witsRecordRepository.GetAsync((int)idTelemetry, begin, end, token);
+ return Ok(dtos);
+ }
+
+ [HttpGet("{idWell}/datesRange")]
+ [ProducesResponseType(StatusCodes.Status200OK, Type = typeof((DateTime begin, DateTime end, int count)?))]
+ public async virtual Task GetDatesRangeAsync(
+ int idWell,
+ [FromServices] IWitsRecordRepository witsRecordRepository,
+ CancellationToken token)
+ {
+ var idTelemetry = telemetryService.GetIdTelemetryByIdWell(idWell);
+ if (idTelemetry is null)
+ return NoContent();
+ var dtos = await witsRecordRepository.GetStatAsync((int)idTelemetry, token);
+ return Ok(dtos);
+ }
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsInfoController.cs b/AsbCloudWebApi/Controllers/WITS/WitsInfoController.cs
new file mode 100644
index 00000000..41e6c9e3
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsInfoController.cs
@@ -0,0 +1,46 @@
+using AsbCloudInfrastructure.Services;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WitsInfoController : ControllerBase
+ {
+ private readonly WitsInfoService witsInfoService;
+
+ public WitsInfoController(WitsInfoService witsInfoService)
+ {
+ this.witsInfoService = witsInfoService;
+ }
+
+ [HttpGet("item")]
+ public IActionResult GetItems()
+ {
+ var result = witsInfoService.GetItems();
+ return Ok(result);
+ }
+
+ [HttpGet("item/{idRecord}")]
+ public IActionResult GetItems(int idRecord)
+ {
+ var result = witsInfoService.GetItems(idRecord);
+ return Ok(result);
+ }
+
+ [HttpGet("record")]
+ public IActionResult GetRecordInfo()
+ {
+ var result = witsInfoService.GetRecords();
+ return Ok(result);
+ }
+
+ [HttpGet("record/{idRecord}")]
+ public IActionResult GetRecordInfo(int idRecord)
+ {
+ var result = witsInfoService.GetRecords(idRecord);
+ return Ok(result);
+ }
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsRecord1Controller.cs b/AsbCloudWebApi/Controllers/WITS/WitsRecord1Controller.cs
new file mode 100644
index 00000000..a0b3f33c
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsRecord1Controller.cs
@@ -0,0 +1,21 @@
+using AsbCloudApp.Data.WITS;
+using AsbCloudApp.Services;
+using AsbCloudWebApi.SignalR;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WitsRecord1Controller : WitsControllerAbstract
+ {
+ protected override string SirnalRMethodGetDataName => "ReceiveWitsRecord1";
+
+ public WitsRecord1Controller(
+ ITelemetryService telemetryService,
+ IHubContext telemetryHubContext)
+ : base(telemetryService, telemetryHubContext) { }
+
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsRecord50Controller.cs b/AsbCloudWebApi/Controllers/WITS/WitsRecord50Controller.cs
new file mode 100644
index 00000000..96d991b2
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsRecord50Controller.cs
@@ -0,0 +1,19 @@
+using AsbCloudApp.Data.WITS;
+using AsbCloudApp.Services;
+using AsbCloudWebApi.SignalR;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WitsRecord50Controller : WitsControllerAbstract
+ {
+ protected override string SirnalRMethodGetDataName => "ReceiveWitsRecord50";
+ public WitsRecord50Controller(
+ ITelemetryService telemetryService,
+ IHubContext telemetryHubContext)
+ : base(telemetryService, telemetryHubContext) { }
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsRecord60Controller.cs b/AsbCloudWebApi/Controllers/WITS/WitsRecord60Controller.cs
new file mode 100644
index 00000000..292cb0a6
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsRecord60Controller.cs
@@ -0,0 +1,19 @@
+using AsbCloudApp.Data.WITS;
+using AsbCloudApp.Services;
+using AsbCloudWebApi.SignalR;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WitsRecord60Controller : WitsControllerAbstract
+ {
+ protected override string SirnalRMethodGetDataName => "ReceiveWitsRecord60";
+ public WitsRecord60Controller(
+ ITelemetryService telemetryService,
+ IHubContext telemetryHubContext)
+ : base(telemetryService, telemetryHubContext) { }
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsRecord61Controller.cs b/AsbCloudWebApi/Controllers/WITS/WitsRecord61Controller.cs
new file mode 100644
index 00000000..c9a9df55
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsRecord61Controller.cs
@@ -0,0 +1,19 @@
+using AsbCloudApp.Data.WITS;
+using AsbCloudApp.Services;
+using AsbCloudWebApi.SignalR;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WitsRecord61Controller : WitsControllerAbstract
+ {
+ protected override string SirnalRMethodGetDataName => "ReceiveWitsRecord61";
+ public WitsRecord61Controller(
+ ITelemetryService telemetryService,
+ IHubContext telemetryHubContext)
+ : base(telemetryService, telemetryHubContext) { }
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsRecord7Controller.cs b/AsbCloudWebApi/Controllers/WITS/WitsRecord7Controller.cs
new file mode 100644
index 00000000..0e32a5f2
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsRecord7Controller.cs
@@ -0,0 +1,19 @@
+using AsbCloudApp.Data.WITS;
+using AsbCloudApp.Services;
+using AsbCloudWebApi.SignalR;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WitsRecord7Controller : WitsControllerAbstract
+ {
+ protected override string SirnalRMethodGetDataName => "ReceiveWitsRecord7";
+ public WitsRecord7Controller(
+ ITelemetryService telemetryService,
+ IHubContext telemetryHubContext)
+ : base(telemetryService, telemetryHubContext) { }
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WITS/WitsRecord8Controller.cs b/AsbCloudWebApi/Controllers/WITS/WitsRecord8Controller.cs
new file mode 100644
index 00000000..08bb7a22
--- /dev/null
+++ b/AsbCloudWebApi/Controllers/WITS/WitsRecord8Controller.cs
@@ -0,0 +1,19 @@
+using AsbCloudApp.Data.WITS;
+using AsbCloudApp.Services;
+using AsbCloudWebApi.SignalR;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.SignalR;
+
+namespace AsbCloudWebApi.Controllers.WITS
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WitsRecord8Controller : WitsControllerAbstract
+ {
+ protected override string SirnalRMethodGetDataName => "ReceiveWitsRecord8";
+ public WitsRecord8Controller(
+ ITelemetryService telemetryService,
+ IHubContext telemetryHubContext)
+ : base(telemetryService, telemetryHubContext) { }
+ }
+}
diff --git a/AsbCloudWebApi/Controllers/WitsController.cs b/AsbCloudWebApi/Controllers/WitsController.cs
deleted file mode 100644
index 4d0e492b..00000000
--- a/AsbCloudWebApi/Controllers/WitsController.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using AsbCloudApp.Services;
-using AsbCloudWebApi.SignalR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.SignalR;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace AsbCloudWebApi.Controllers
-{
- [Route("api/telemetry/{uid}/wits")]
- [ApiController]
- public class WitsController : ControllerBase
- {
- private readonly IWitsRepository witsService;
- private readonly ITelemetryService telemetryService;
- private readonly IHubContext telemetryHubContext;
-
- public WitsController(
- IWitsRepository witsService,
- ITelemetryService telemetryService,
- IHubContext telemetryHubContext)
- {
- this.witsService = witsService;
- this.telemetryService = telemetryService;
- this.telemetryHubContext = telemetryHubContext;
- }
-
- //[HttpPost("record1")]
- //[AllowAnonymous]
- //public virtual async Task PostDataAsync(string uid, [FromBody] IEnumerable dtos,
- // CancellationToken token = default)
- //{
- // await telemetryDataService.UpdateDataAsync(uid, dtos, token).ConfigureAwait(false);
-
- // var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
- // if (idWell != null && dtos.Any())
- // _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}")
- // .SendAsync(SirnalRMethodGetDataName, dtos), CancellationToken.None);
-
- // return Ok();
- //}
-
-
- //private async Task PostDataAsync(
- // string uid,
- // IEnumerable dtos,
- // CancellationToken token = default)
- //{
- // //await witsService.SaveDataAsync(uid, dtos, token).ConfigureAwait(false);
-
- // var idWell = telemetryService.GetIdWellByTelemetryUid(uid);
- // if (idWell != null && dtos.Any())
- // _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}")
- // .SendAsync(SirnalRMethodGetDataName, dtos), CancellationToken.None);
-
- // return Ok();
- //}
- }
-}
diff --git a/AsbCloudWebApi/ProtobufModel.cs b/AsbCloudWebApi/ProtobufModel.cs
index e41cb955..935438c9 100644
--- a/AsbCloudWebApi/ProtobufModel.cs
+++ b/AsbCloudWebApi/ProtobufModel.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
using ProtoBuf.Meta;
namespace AsbCloudWebApi
@@ -18,7 +18,7 @@ namespace AsbCloudWebApi
return;
RuntimeTypeModel.Default.Add(type, false)
.Add(1, nameof(TelemetryDataSpinDto.IdTelemetry))
- .Add(2, nameof(TelemetryDataSpinDto.Date))
+ .Add(2, nameof(TelemetryDataSpinDto.DateTime))
.Add(3, nameof(TelemetryDataSpinDto.TopDriveSpeed))
.Add(4, nameof(TelemetryDataSpinDto.TopDriveSpeedMin))
.Add(5, nameof(TelemetryDataSpinDto.TopDriveSpeedMax))
@@ -91,7 +91,7 @@ namespace AsbCloudWebApi
return;
RuntimeTypeModel.Default.Add(type, false)
.Add(1, nameof(TelemetryDataSaubDto.IdTelemetry))
- .Add(2, nameof(TelemetryDataSaubDto.Date))
+ .Add(2, nameof(TelemetryDataSaubDto.DateTime))
.Add(3, nameof(TelemetryDataSaubDto.Mode))
.Add(4, nameof(TelemetryDataSaubDto.User))
.Add(5, nameof(TelemetryDataSaubDto.WellDepth))
diff --git a/ConsoleApp1/ControllerLoadTester.cs b/ConsoleApp1/ControllerLoadTester.cs
index 2a9a4c0f..3c4133f2 100644
--- a/ConsoleApp1/ControllerLoadTester.cs
+++ b/ConsoleApp1/ControllerLoadTester.cs
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using System.Text;
using System.Text.Json;
using AsbCloudApp.Data;
+using AsbCloudApp.Data.SAUB;
namespace ConsoleApp1
{
@@ -75,7 +76,7 @@ namespace ConsoleApp1
{
var dto = new TelemetryDataSaubDto
{
- Date = date == default ? DateTime.Now : date,
+ DateTime = date == default ? DateTime.Now : date,
User = "Вупсень",
Mode = 1, //ротор
IdFeedRegulator = 1,