From 91da4fa9c2fd1e63a2cef4450643e5e64ef8dc71 Mon Sep 17 00:00:00 2001 From: KharchenkoVV Date: Mon, 9 Aug 2021 14:01:57 +0500 Subject: [PATCH] Deleted link to AsbCloudDb from AsbCloudApp + codefix --- AsbCloudApp/AsbCloudApp.csproj | 8 --- AsbCloudApp/Data/DataSaubBaseDto.cs | 5 ++ AsbCloudApp/Data/TelemetryAnalysisDto.cs | 26 ++++++++ AsbCloudApp/Services/IAnalyticsService.cs | 3 +- AsbCloudApp/Services/ISaubDataCache.cs | 10 +-- AsbCloudApp/Services/ITelemetryService.cs | 3 +- AsbCloudDb/Model/LastData.cs | 3 +- .../Services/AnalyticsService.cs | 65 ++++++++++--------- .../Services/CrudService.cs | 5 +- .../Services/DataService.cs | 13 ++-- .../Services/FileService.cs | 4 -- .../Services/LastDataService.cs | 3 +- .../Services/MessageService.cs | 16 ++--- .../Services/ReportService.cs | 8 +-- .../Services/SaubDataCache.cs | 16 ++--- .../Services/TelemetryOperationDetector.cs | 3 +- .../TelemetryOperationDetectorService.cs | 3 +- .../Services/TelemetryService.cs | 8 +-- 18 files changed, 108 insertions(+), 94 deletions(-) create mode 100644 AsbCloudApp/Data/TelemetryAnalysisDto.cs diff --git a/AsbCloudApp/AsbCloudApp.csproj b/AsbCloudApp/AsbCloudApp.csproj index 60d2ae14..f208d303 100644 --- a/AsbCloudApp/AsbCloudApp.csproj +++ b/AsbCloudApp/AsbCloudApp.csproj @@ -4,12 +4,4 @@ net5.0 - - - - - - - - diff --git a/AsbCloudApp/Data/DataSaubBaseDto.cs b/AsbCloudApp/Data/DataSaubBaseDto.cs index 36f61f39..20cedf1f 100644 --- a/AsbCloudApp/Data/DataSaubBaseDto.cs +++ b/AsbCloudApp/Data/DataSaubBaseDto.cs @@ -23,6 +23,11 @@ namespace AsbCloudApp.Data /// public int? Mode { get; set; } + /// + /// telemetry id + /// + public int IdTelemetry { get; set; } + /// /// telemetry user /// diff --git a/AsbCloudApp/Data/TelemetryAnalysisDto.cs b/AsbCloudApp/Data/TelemetryAnalysisDto.cs new file mode 100644 index 00000000..ed48f2bc --- /dev/null +++ b/AsbCloudApp/Data/TelemetryAnalysisDto.cs @@ -0,0 +1,26 @@ +namespace AsbCloudApp.Data +{ + public class TelemetryAnalysisDto + { + public int Id { get; set; } + public int IdTelemetry { get; set; } + public int IdOperation { get; set; } + public long UnixDate { get; set; } + public int DurationSec { get; set; } + public double? OperationStartDepth { get; set; } + public double? OperationEndDepth { get; set; } + public bool IsWellDepthIncreasing { get; set; } + public bool IsWellDepthDecreasing { get; set; } + public bool IsBitPositionIncreasing { get; set; } + public bool IsBitPositionDecreasing { get; set; } + public bool IsBitPositionLt20 { get; set; } + public bool IsBlockPositionIncreasing { get; set; } + public bool IsBlockPositionDecreasing { get; set; } + public bool IsRotorSpeedLt3 { get; set; } + public bool IsRotorSpeedGt3 { get; set; } + public bool IsPressureLt20 { get; set; } + public bool IsPressureGt20 { get; set; } + public bool IsHookWeightNotChanges { get; set; } + public bool IsHookWeightLt3 { get; set; } + } +} diff --git a/AsbCloudApp/Services/IAnalyticsService.cs b/AsbCloudApp/Services/IAnalyticsService.cs index 28b83d96..88b3c753 100644 --- a/AsbCloudApp/Services/IAnalyticsService.cs +++ b/AsbCloudApp/Services/IAnalyticsService.cs @@ -1,5 +1,4 @@ using AsbCloudApp.Data; -using AsbCloudDb.Model; using System; using System.Collections.Generic; @@ -17,6 +16,6 @@ namespace AsbCloudApp.Services DateTime begin = default, DateTime end = default); IEnumerable GetOperationsToInterval(int idWell, int intervalHoursTimestamp, int workBeginTimestamp); - void SaveAnalytics(DataSaubBase dataSaub); + void SaveAnalytics(DataSaubBaseDto dataSaub); } } diff --git a/AsbCloudApp/Services/ISaubDataCache.cs b/AsbCloudApp/Services/ISaubDataCache.cs index 95745e34..a1474615 100644 --- a/AsbCloudApp/Services/ISaubDataCache.cs +++ b/AsbCloudApp/Services/ISaubDataCache.cs @@ -1,12 +1,12 @@ -using AsbCloudDb.Model; -using System.Collections.Generic; +using System.Collections.Generic; +using AsbCloudApp.Data; namespace AsbCloudApp.Services { public interface ISaubDataCache { - TelemetryAnalysis CurrentAnalysis { get; set; } - IEnumerable GetOrCreateCache(int telemetryId); - void AddData(DataSaubBase data); + TelemetryAnalysisDto CurrentAnalysis { get; set; } + IEnumerable GetOrCreateCache(int telemetryId); + void AddData(DataSaubBaseDto data); } } diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs index 4c876077..30a26cee 100644 --- a/AsbCloudApp/Services/ITelemetryService.cs +++ b/AsbCloudApp/Services/ITelemetryService.cs @@ -1,5 +1,4 @@ using AsbCloudApp.Data; -using AsbCloudDb.Model; namespace AsbCloudApp.Services { @@ -9,6 +8,6 @@ namespace AsbCloudApp.Services int GetOrCreateTemetryIdByUid(string uid); double GetTimezoneOffsetByTelemetryId(int idTelemetry); void UpdateInfo(string uid, TelemetryInfoDto info); - Telemetry GetTelemetryByidWell(int idWell); + int? GetIdTelemetryByIdWell(int idWell); } } diff --git a/AsbCloudDb/Model/LastData.cs b/AsbCloudDb/Model/LastData.cs index 7cdfa796..c9679c78 100644 --- a/AsbCloudDb/Model/LastData.cs +++ b/AsbCloudDb/Model/LastData.cs @@ -1,5 +1,4 @@ -using System; -using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; diff --git a/AsbCloudInfrastructure/Services/AnalyticsService.cs b/AsbCloudInfrastructure/Services/AnalyticsService.cs index a18657e5..6d279833 100644 --- a/AsbCloudInfrastructure/Services/AnalyticsService.cs +++ b/AsbCloudInfrastructure/Services/AnalyticsService.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; +using Mapster; namespace AsbCloudInfrastructure.Services { @@ -31,13 +32,13 @@ namespace AsbCloudInfrastructure.Services public IEnumerable GetWellDepthToDay(int idWell) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); - if (telemetry is null) + if (telemetryId is null) return null; var depthToTimeData = (from d in db.DataSaubBases - where d.IdTelemetry == telemetry.Id + where d.IdTelemetry == telemetryId select new { d.Id, @@ -64,14 +65,14 @@ namespace AsbCloudInfrastructure.Services { intervalSeconds = intervalSeconds == 0 ? 86400 : intervalSeconds; - var telemetry = telemetryService.GetTelemetryByidWell(idWell); + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); - if (telemetry is null) + if (telemetryId is null) return null; - var timezoneOffset = telemetryService.GetTimezoneOffsetByTelemetryId(telemetry.Id); + var timezoneOffset = telemetryService.GetTimezoneOffsetByTelemetryId((int)telemetryId); - var drillingPeriodsInfo = db.GetDepthToInterval(telemetry.Id, intervalSeconds, + var drillingPeriodsInfo = db.GetDepthToInterval((int)telemetryId, intervalSeconds, workBeginSeconds, timezoneOffset); var wellDepthToIntervalData = drillingPeriodsInfo.Select(d => new WellDepthToIntervalDto @@ -87,14 +88,14 @@ namespace AsbCloudInfrastructure.Services IEnumerable categoryIds = default, DateTime begin = default, DateTime end = default, int skip = 0, int take = 32) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); - if (telemetry is null) + if (telemetryId is null) return null; var operations = from a in db.TelemetryAnalysis.Include(t => t.Operation) - where a.IdTelemetry == telemetry.Id - select a; + where a.IdTelemetry == telemetryId + select a; if ((categoryIds != default) && (categoryIds.Any())) operations = operations.Where(o => categoryIds.Contains(o.IdOperation)); @@ -150,16 +151,16 @@ namespace AsbCloudInfrastructure.Services public IEnumerable GetOperationsSummary(int idWell, DateTime begin = default, DateTime end = default) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); - if (telemetry is null) + if (telemetryId is null) return null; var unixBegin = (begin - new DateTime(1970, 1, 1)).TotalSeconds; var unixEnd = (end - new DateTime(1970, 1, 1)).TotalSeconds; var operations = (from a in db.TelemetryAnalysis - where a.IdTelemetry == telemetry.Id && + where a.IdTelemetry == telemetryId && a.UnixDate > unixBegin && a.UnixDate < unixEnd join o in db.Operations on a.IdOperation equals o.Id group a by new { a.IdOperation, o.Name } into g @@ -178,15 +179,15 @@ namespace AsbCloudInfrastructure.Services { intervalSeconds = intervalSeconds == 0 ? 86400 : intervalSeconds; - var telemetry = telemetryService.GetTelemetryByidWell(idWell); + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); - if (telemetry is null) + if (telemetryId is null) return null; - var timezoneOffset = telemetryService.GetTimezoneOffsetByTelemetryId(telemetry.Id); + var timezoneOffset = telemetryService.GetTimezoneOffsetByTelemetryId((int)telemetryId); var operations = (from a in db.TelemetryAnalysis - where a.IdTelemetry == telemetry.Id + where a.IdTelemetry == telemetryId join o in db.Operations on a.IdOperation equals o.Id group a by new { @@ -216,36 +217,36 @@ namespace AsbCloudInfrastructure.Services return operationsGroupedByInterval; } - public void SaveAnalytics(DataSaubBase dataSaub) + public void SaveAnalytics(DataSaubBaseDto dataSaubDto) { - saubDataCache.AddData(dataSaub); + saubDataCache.AddData(dataSaubDto); - if (saubDataCache.GetOrCreateCache(dataSaub.IdTelemetry).Count() > 1) + if (saubDataCache.GetOrCreateCache(dataSaubDto.IdTelemetry).Count() > 1) { - var dataSaubs = saubDataCache.GetOrCreateCache(dataSaub.IdTelemetry) + var dataSaubs = saubDataCache.GetOrCreateCache(dataSaubDto.IdTelemetry) .OrderBy(d => d.Date); - var telemetryAnalysis = GetDrillingAnalysis(dataSaubs); + var telemetryAnalysisDto = GetDrillingAnalysis(dataSaubs); if (saubDataCache.CurrentAnalysis is null) - saubDataCache.CurrentAnalysis = telemetryAnalysis; + saubDataCache.CurrentAnalysis = telemetryAnalysisDto; - if (saubDataCache.CurrentAnalysis.IdOperation == telemetryAnalysis.IdOperation) + if (saubDataCache.CurrentAnalysis.IdOperation == telemetryAnalysisDto.IdOperation) { saubDataCache.CurrentAnalysis.DurationSec += - telemetryAnalysis.DurationSec; - saubDataCache.CurrentAnalysis.OperationEndDepth = dataSaub.WellDepth; + telemetryAnalysisDto.DurationSec; + saubDataCache.CurrentAnalysis.OperationEndDepth = dataSaubDto.WellDepth; } else { - db.TelemetryAnalysis.Add(saubDataCache.CurrentAnalysis); - saubDataCache.CurrentAnalysis = telemetryAnalysis; - saubDataCache.CurrentAnalysis.OperationStartDepth = dataSaub.WellDepth; + db.TelemetryAnalysis.Add(saubDataCache.CurrentAnalysis.Adapt()); + saubDataCache.CurrentAnalysis = telemetryAnalysisDto; + saubDataCache.CurrentAnalysis.OperationStartDepth = dataSaubDto.WellDepth; } } } - private TelemetryAnalysis GetDrillingAnalysis(IEnumerable dataSaubBases) + private TelemetryAnalysisDto GetDrillingAnalysis(IEnumerable dataSaubBases) { var lastSaubDate = dataSaubBases.Last().Date; @@ -279,7 +280,7 @@ namespace AsbCloudInfrastructure.Services var IsBlockGoesDown = InterpolationLine.IsValueIncreases(blockPositionChangingIndex, 0.0001); var IsBlockStandsStill = InterpolationLine.IsValueNotChanges(blockPositionChangingIndex, (0.0001, -0.0001)); - var drillingAnalysis = new TelemetryAnalysis + var drillingAnalysis = new TelemetryAnalysisDto { IdTelemetry = dataSaubBases.First().IdTelemetry, UnixDate = (long)(lastSaubDate - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds, diff --git a/AsbCloudInfrastructure/Services/CrudService.cs b/AsbCloudInfrastructure/Services/CrudService.cs index a21b709b..6fb65bb7 100644 --- a/AsbCloudInfrastructure/Services/CrudService.cs +++ b/AsbCloudInfrastructure/Services/CrudService.cs @@ -4,7 +4,6 @@ using AsbCloudDb.Model; using AsbCloudApp.Services; using Mapster; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; namespace AsbCloudInfrastructure.Services { @@ -22,12 +21,12 @@ namespace AsbCloudInfrastructure.Services dbSet = context.Set(); } - public IEnumerable GetAll(System.Linq.Expressions.Expression> predicate = null) + public IEnumerable GetAll(System.Linq.Expressions.Expression> predicate = null) { IQueryable entities = dbSet; if (predicate is not null) - entities = entities.Where(predicate); + entities = entities.Where(predicate).Cast(); var dto = entities.Adapt(); return dto; diff --git a/AsbCloudInfrastructure/Services/DataService.cs b/AsbCloudInfrastructure/Services/DataService.cs index 2f672b52..233d4cfc 100644 --- a/AsbCloudInfrastructure/Services/DataService.cs +++ b/AsbCloudInfrastructure/Services/DataService.cs @@ -85,13 +85,14 @@ namespace AsbCloudInfrastructure.Services db.DataSaubBases.RemoveRange(oldDataSaubBase); - foreach (var item in dtos) + foreach (var dto in dtos) { - var dataSaub = item.Adapt(); + var dataSaub = dto.Adapt(); dataSaub.IdTelemetry = telemetryId; db.DataSaubBases.Add(dataSaub); - analyticsService.SaveAnalytics(dataSaub); + dto.IdTelemetry = telemetryId; + analyticsService.SaveAnalytics(dto); } db.SaveChanges(); @@ -99,11 +100,11 @@ namespace AsbCloudInfrastructure.Services public DatesRangeDto GetDataDatesRange(int idWell) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); - if (telemetry is null) + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); + if (telemetryId is null) return null; - var (From, To) = db.GetDatesRange(telemetry.Id); + var (From, To) = db.GetDatesRange((int)telemetryId); return new DatesRangeDto { From = From, To = To }; } diff --git a/AsbCloudInfrastructure/Services/FileService.cs b/AsbCloudInfrastructure/Services/FileService.cs index 6a825413..36bad845 100644 --- a/AsbCloudInfrastructure/Services/FileService.cs +++ b/AsbCloudInfrastructure/Services/FileService.cs @@ -49,10 +49,6 @@ namespace AsbCloudInfrastructure.Services int idCategory, DateTime begin = default, DateTime end = default, int skip = 0, int take = 32) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); - if (telemetry is null) - return null; - var filesInfoQuery = db.Files.Include(f => f.User) .Where(f => f.IdWell == idWell && f.IdCategory == idCategory); diff --git a/AsbCloudInfrastructure/Services/LastDataService.cs b/AsbCloudInfrastructure/Services/LastDataService.cs index b9102cb8..41b71218 100644 --- a/AsbCloudInfrastructure/Services/LastDataService.cs +++ b/AsbCloudInfrastructure/Services/LastDataService.cs @@ -1,5 +1,4 @@ -using System; -using System.Linq; +using System.Linq; using AsbCloudDb.Model; using AsbCloudApp.Services; using Mapster; diff --git a/AsbCloudInfrastructure/Services/MessageService.cs b/AsbCloudInfrastructure/Services/MessageService.cs index 05f936a4..81fd14e5 100644 --- a/AsbCloudInfrastructure/Services/MessageService.cs +++ b/AsbCloudInfrastructure/Services/MessageService.cs @@ -27,17 +27,17 @@ namespace AsbCloudInfrastructure.Services public PaginationContainer GetMessages(int idWell, IEnumerable categoryids = default, DateTime begin = default, DateTime end = default, int skip = 0, int take = 32) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); - if (telemetry is null) + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); + if (telemetryId is null) return null; - var events = cacheEvents.Select(e => e.IdTelemetry == telemetry.Id); + var events = cacheEvents.Select(e => e.IdTelemetry == telemetryId); if (!events.Any()) return null; var messages = from m in db.Messages - where m.IdTelemetry == telemetry.Id + where m.IdTelemetry == telemetryId select m; if ((categoryids != default) && (categoryids.Any())) @@ -72,7 +72,7 @@ namespace AsbCloudInfrastructure.Services if (messagesList.Count == 0) return result; - var users = cacheTUsers.Select(u => u.IdTelemetry == telemetry.Id); + var users = cacheTUsers.Select(u => u.IdTelemetry == telemetryId); foreach (var message in messagesList) { @@ -98,11 +98,11 @@ namespace AsbCloudInfrastructure.Services public DatesRangeDto GetMessagesDatesRange(int idWell) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); - if (telemetry is null) + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); + if (telemetryId is null) return null; - var (From, To) = db.GetDatesRange(telemetry.Id); + var (From, To) = db.GetDatesRange((int)telemetryId); return new DatesRangeDto { From = From, To = To }; } diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs index 602db859..87ffcf02 100644 --- a/AsbCloudInfrastructure/Services/ReportService.cs +++ b/AsbCloudInfrastructure/Services/ReportService.cs @@ -111,16 +111,16 @@ namespace AsbCloudInfrastructure.Services public DatesRangeDto GetReportsDatesRange(int idWell) { - var telemetry = telemetryService.GetTelemetryByidWell(idWell); + var telemetryId = telemetryService.GetIdTelemetryByIdWell(idWell); - if (telemetry is null) + if (telemetryId is null) return null; var datesRange = (from d in db.DataSaubBases - where d.IdTelemetry == telemetry.Id + where d.IdTelemetry == telemetryId select d.Date).Union( from m in db.Messages - where m.IdTelemetry == telemetry.Id + where m.IdTelemetry == telemetryId select m.Date).DefaultIfEmpty().GroupBy(g => true) .Select(g => new { diff --git a/AsbCloudInfrastructure/Services/SaubDataCache.cs b/AsbCloudInfrastructure/Services/SaubDataCache.cs index 21e4bced..264dc6fc 100644 --- a/AsbCloudInfrastructure/Services/SaubDataCache.cs +++ b/AsbCloudInfrastructure/Services/SaubDataCache.cs @@ -1,25 +1,25 @@ -using AsbCloudApp.Services; -using AsbCloudDb.Model; +using AsbCloudApp.Data; +using AsbCloudApp.Services; using System.Collections.Generic; namespace AsbCloudInfrastructure.Services { public class SaubDataCache : ISaubDataCache { - public TelemetryAnalysis CurrentAnalysis { get; set; } + public TelemetryAnalysisDto CurrentAnalysis { get; set; } - private readonly Dictionary> saubData = - new Dictionary>(); + private readonly Dictionary> saubData = + new Dictionary>(); - public IEnumerable GetOrCreateCache(int telemetryId) + public IEnumerable GetOrCreateCache(int telemetryId) { if (!saubData.ContainsKey(telemetryId)) - saubData[telemetryId] = new List(); + saubData[telemetryId] = new List(); return saubData[telemetryId]; } - public void AddData(DataSaubBase data) + public void AddData(DataSaubBaseDto data) { GetOrCreateCache(data.IdTelemetry); diff --git a/AsbCloudInfrastructure/Services/TelemetryOperationDetector.cs b/AsbCloudInfrastructure/Services/TelemetryOperationDetector.cs index 6a9af0b5..38c174bd 100644 --- a/AsbCloudInfrastructure/Services/TelemetryOperationDetector.cs +++ b/AsbCloudInfrastructure/Services/TelemetryOperationDetector.cs @@ -1,4 +1,5 @@ using AsbCloudDb.Model; +using AsbCloudApp.Data; using System; namespace AsbCloudInfrastructure.Services @@ -7,6 +8,6 @@ namespace AsbCloudInfrastructure.Services { public int Order { get; set; } public TelemetryOperation Operation { get; set; } - public Func Detect { get; set; } + public Func Detect { get; set; } } } diff --git a/AsbCloudInfrastructure/Services/TelemetryOperationDetectorService.cs b/AsbCloudInfrastructure/Services/TelemetryOperationDetectorService.cs index 49ca1e90..05e369fd 100644 --- a/AsbCloudInfrastructure/Services/TelemetryOperationDetectorService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryOperationDetectorService.cs @@ -1,4 +1,5 @@ using AsbCloudDb.Model; +using AsbCloudApp.Data; using System.Collections.Generic; using System.Linq; @@ -179,7 +180,7 @@ namespace AsbCloudInfrastructure.Services }; } - public TelemetryOperation DetectOperation(TelemetryAnalysis data) => + public TelemetryOperation DetectOperation(TelemetryAnalysisDto data) => detectors.OrderBy(d => d.Order).First(o => o.Detect(data)).Operation ?? new TelemetryOperation { Id = 1, Name = "Невозможно определить операцию" }; } diff --git a/AsbCloudInfrastructure/Services/TelemetryService.cs b/AsbCloudInfrastructure/Services/TelemetryService.cs index be950ed6..d3d495b2 100644 --- a/AsbCloudInfrastructure/Services/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryService.cs @@ -33,17 +33,13 @@ namespace AsbCloudInfrastructure.Services cacheTelemetry.Upsert(telemetry); } - public Telemetry GetTelemetryByidWell(int idWell) + public int? GetIdTelemetryByIdWell(int idWell) { var well = cacheWells.FirstOrDefault(w => w.Id == idWell); if (well is null) return null; - var telemetry = cacheTelemetry.FirstOrDefault(t => t.Id == well.Id); - if (telemetry is null) - return null; - - return telemetry; + return well.IdTelemetry; } private Well GetWellByTelemetryUid(string uid)