diff --git a/AsbCloudApp/AsbCloudApp.csproj b/AsbCloudApp/AsbCloudApp.csproj
index 6b214070..64a7b66a 100644
--- a/AsbCloudApp/AsbCloudApp.csproj
+++ b/AsbCloudApp/AsbCloudApp.csproj
@@ -10,4 +10,7 @@
+
+
+
diff --git a/AsbCloudApp/Comparators/ComparerIId.cs b/AsbCloudApp/Comparators/ComparerIId.cs
index 5ea883ec..7dbf5cb5 100644
--- a/AsbCloudApp/Comparators/ComparerIId.cs
+++ b/AsbCloudApp/Comparators/ComparerIId.cs
@@ -9,7 +9,7 @@ namespace AsbCloudApp.Comparators
///
public class ComparerIId : IComparer, IEqualityComparer
{
- private static readonly ComparerIId instance = new ComparerIId();
+ private static readonly ComparerIId instance = new ();
private ComparerIId() { }
///
diff --git a/AsbCloudApp/Data/DailyReport/BhaDto.cs b/AsbCloudApp/Data/DailyReport/BhaDto.cs
new file mode 100644
index 00000000..681ae8a8
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/BhaDto.cs
@@ -0,0 +1,64 @@
+namespace AsbCloudApp.Data.DailyReport
+{
+ ///
+ /// блок КНБК
+ ///
+ public class BhaDto
+ {
+ ///
+ /// КНБК описание
+ ///
+ public string BHADescription { get; set; }
+
+ ///
+ /// Бурение с наращиваниями в инт. 2195-2763м. Время начала
+ ///
+ public string ExtensionDrillingOneBegin{ get; set; }
+
+ ///
+ /// Бурение с наращиваниями в инт. 2195-2763м. Время окончания
+ ///
+ public string ExtensionDrillingOneFinish { get; set; }
+
+ ///
+ /// Промывка. Время начала
+ ///
+ public string SluiceBegin { get; set; }
+
+ ///
+ /// Промывка. Время окончания
+ ///
+ public string SluiceFinish { get; set; }
+
+ ///
+ /// Подъем КНБК. Время начала
+ ///
+ public string ClimbBegin { get; set; }
+
+ ///
+ /// Подъем КНБК. Время окончания
+ ///
+ public string ClimbFinish { get; set; }
+
+ ///
+ /// Спуск КНБК. Время начала
+ ///
+ public string DescentBegin { get; set; }
+
+ ///
+ /// Спуск КНБК. Время окончания
+ ///
+ public string DescentFinish { get; set; }
+
+ ///
+ /// Бурение с наращиваниями в инт. 2763-2850м. Время начала
+ ///
+ public string ExtensionDrillingTwoBegin { get; set; }
+
+ ///
+ /// Бурение с наращиваниями в инт. 2763-2850м. Время окончания
+ ///
+ public string ExtensionDrillingTwoFinish { get; set; }
+ }
+}
+
diff --git a/AsbCloudApp/Data/DailyReport/DailyReportDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
new file mode 100644
index 00000000..c47b8934
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/DailyReportDto.cs
@@ -0,0 +1,38 @@
+namespace AsbCloudApp.Data.DailyReport
+{
+ ///
+ /// Блоки для формирования суточного рапорта
+ ///
+ public class DailyReportDto
+ {
+ ///
+ /// блок заголовка
+ ///
+ public HeadDto Head { get; set; } = new();
+
+ ///
+ /// блок КНБК
+ ///
+ public BhaDto Bha { get; set; } = new();
+
+ ///
+ /// блок безметражные работы
+ ///
+ public NoDrillingDto NoDrilling { get; set; } = new();
+
+ ///
+ /// блок баланса времени
+ ///
+ public TimeBalanceDto TimeBalance { get; set; } = new();
+
+ ///
+ /// блок САУБ
+ ///
+ public SaubDto Saub { get; set; } = new();
+
+ ///
+ /// блок подписи
+ ///
+ public SignDto Sign { get; set; } = new();
+ }
+}
diff --git a/AsbCloudApp/Data/DailyReport/HeadDto.cs b/AsbCloudApp/Data/DailyReport/HeadDto.cs
new file mode 100644
index 00000000..05537aae
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/HeadDto.cs
@@ -0,0 +1,115 @@
+using System;
+namespace AsbCloudApp.Data.DailyReport
+{
+ ///
+ /// блок заголовка
+ ///
+ public class HeadDto
+ {
+ ///
+ /// название скважины
+ ///
+ public string WellName { get; set; }
+
+ ///
+ /// название куста
+ ///
+ public string ClusterName { get; set; }
+
+ ///
+ /// заказчик
+ ///
+ public string Customer { get; set; }
+
+ ///
+ /// подрядчик
+ ///
+ public string Contractor { get; set; }
+
+ ///
+ /// дата рапорта
+ ///
+ public DateTime ReportDate { get; set; }
+
+ ///
+ /// глубина забоя на дату начала интервала
+ ///
+ public double? WellDepthIntervalStartDate { get; set; }
+
+ ///
+ /// глубина забоя на дату окончания интервала
+ ///
+ public double? WellDepthIntervalFinishDate { get; set; }
+
+ ///
+ /// Глубина забоя по стволу на окончание отчетного периода
+ ///
+ public double? BottomholeDepth { get; set; }
+
+ ///
+ /// Глубина забоя по вертикали на дату окончания отчетного периода
+ ///
+ public double? VerticalDepth { get; set; }
+
+ ///
+ /// Зенитный угол на дату окончания отчетного периода
+ ///
+ public double? ZenithAngle { get; set; }
+
+ ///
+ /// Азимутальный угол на дату окончания отчетного периода
+ ///
+ public double? AzimuthAngle { get; set; }
+
+ ///
+ /// ФИО бурильщиков
+ ///
+ public string FirstDriller { get; set; }
+
+ ///
+ /// ФИО бурильщиков
+ ///
+ public string SecondDriller { get; set; }
+
+ ///
+ /// Время работы АПД
+ ///
+ public double? WorkTimeSAUB { get; set; }
+
+ ///
+ /// Время работы спин мастер
+ ///
+ public double? WorkTimeSpinMaster { get; set; }
+
+ ///
+ /// Время работы torqueMaster
+ ///
+ public double? WorkTimeTorkMaster { get; set; }
+
+ ///
+ /// количество метров пробуренных с включенным АПД
+ ///
+ public double? PenetrationSAUB { get; set; }
+
+ ///
+ /// количество метров пробуренных с включенным Спин мастер
+ ///
+ public double? PenetrationSpinMaster { get; set; }
+
+ ///
+ /// количество метров пробуренных с включенным torqueMaster
+ ///
+ public double? PenetrationTorkMaster { get; set; }
+
+ ///
+ /// Количество запусков МСЕ
+ ///
+ public int CountLaunchesMSE { get; set; }
+
+
+
+
+
+ }
+}
+
diff --git a/AsbCloudApp/Data/DailyReport/NoDrillingDto.cs b/AsbCloudApp/Data/DailyReport/NoDrillingDto.cs
new file mode 100644
index 00000000..55f34e1c
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/NoDrillingDto.cs
@@ -0,0 +1,29 @@
+namespace AsbCloudApp.Data.DailyReport
+{
+ ///
+ /// блок безметражные работы
+ ///
+ public class NoDrillingDto
+ {
+ ///
+ /// Нормативное время на одну операцию по подготовке ствола скважины к наращиванию
+ ///
+ public double? StandardTimeBarrelPreparation { get; set; }
+
+ ///
+ /// Нормативное время на одну операцию по наращиванию
+ ///
+ public double? StandardTimeExtension { get; set; }
+
+ ///
+ /// Фактическое время проработок при подготовке ствола скважины к наращиванию.
+ ///
+ public double? ActualTimeBarrelPreparation { get; set; }
+
+ ///
+ /// Фактическое время наращиваний
+ ///
+ public double? ActualTimeExtension { get; set; }
+ }
+}
+
diff --git a/AsbCloudApp/Data/DailyReport/SaubDto.cs b/AsbCloudApp/Data/DailyReport/SaubDto.cs
new file mode 100644
index 00000000..e0a22102
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/SaubDto.cs
@@ -0,0 +1,107 @@
+using System.Collections.Generic;
+
+namespace AsbCloudApp.Data.DailyReport
+{
+ ///
+ /// блок САУБ
+ ///
+ public class SaubDto
+ {
+ ///
+ /// Режимы бурения в роторе
+ ///
+ public string RotorDrillingModes { get; set; }
+
+ ///
+ /// режимы бурения в слайде
+ ///
+ public string SlideDrillingModes { get; set; }
+
+ ///
+ /// Количество метров пробуренных в роторе за отчетный период
+ ///
+ public double? PenetrationInRotor { get; set; }
+
+ ///
+ /// Количество часов бурения в роторе за отчетный период
+ ///
+ public double? NumberDrillingHours { get; set; }
+
+ ///
+ /// средний диф перепад в роторе за отчетный период
+ ///
+ public double? AVGDiffDropRotor { get; set; }
+
+ ///
+ /// количество метров пробуренных в слайде за отчетный период
+ ///
+ public double? PenetrationInSlide { get; set; }
+
+ ///
+ /// время бурения в роторе за отчетный период
+ ///
+ public double? DrillingTimeInRotor { get; set; }
+
+ ///
+ /// средний диф. перепад в слайде за отчетный период
+ ///
+ public double? AVGDiffPressureSlide { get; set; }
+
+ ///
+ /// Плановая МСП за секцию
+ ///
+ public double? SectionROPPlan { get; set; }
+
+ ///
+ /// Общее время бурения за секцию
+ ///
+ public double? SectionDrillingTimeTotal { get; set; }
+
+ ///
+ /// Общая проходка за секцию
+ ///
+ public double? SectionPenetrationTotal { get; set; }
+
+ ///
+ /// Количество наращиваний за отчетный период
+ ///
+ public int ExtensionsCount { get; set; }
+
+ ///
+ /// Отклонение относительно ГГД
+ ///
+ public double? DeviationFromTVD { get; set; }
+
+ ///
+ /// указываются все причины, которые влияют на снижение МСП.
+ ///
+ public string DeclinesReasonsROP { get; set; }
+
+ ///
+ /// Увеличение мех скорости за секцию %
+ ///
+ public string IncreaseSpeedSection { get; set; }
+
+ ///
+ /// Увеличение мех скорости за сутки %
+ ///
+ public string IncreaseSpeedDay { get; set; }
+
+ ///
+ /// Сокращение времени бурения за секцию, ч
+ ///
+ public string ReductionTimeDrilling { get; set; }
+
+ ///
+ /// Ротор/Слайд %
+ ///
+ public string RotorSlidePercent { get; set; }
+
+ ///
+ /// МСП
+ ///
+ public string MspSection { get; set; }
+
+ }
+}
+
diff --git a/AsbCloudApp/Data/DailyReport/SignDto.cs b/AsbCloudApp/Data/DailyReport/SignDto.cs
new file mode 100644
index 00000000..3c75bf33
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/SignDto.cs
@@ -0,0 +1,19 @@
+namespace AsbCloudApp.Data.DailyReport
+{
+ ///
+ /// блок подписи
+ ///
+ public class SignDto
+ {
+ ///
+ /// ФИО Мастера буровой
+ ///
+ public string DrillingMaster { get; set; }
+
+ ///
+ /// ФИО супервайзера
+ ///
+ public string Supervisor { get; set; }
+ }
+}
+
diff --git a/AsbCloudApp/Data/DailyReport/TimeBalanceDto.cs b/AsbCloudApp/Data/DailyReport/TimeBalanceDto.cs
new file mode 100644
index 00000000..96f6bba6
--- /dev/null
+++ b/AsbCloudApp/Data/DailyReport/TimeBalanceDto.cs
@@ -0,0 +1,99 @@
+namespace AsbCloudApp.Data.DailyReport
+{
+ ///
+ /// блок баланса времени
+ ///
+ public class TimeBalanceDto
+ {
+ ///
+ /// Бурение
+ ///
+ public string Drilling { get; set; }
+
+ ///
+ /// Промывка
+ ///
+ public string Flushing { get; set; }
+
+ ///
+ /// Наращивание
+ ///
+ public string Building { get; set; }
+
+ ///
+ /// Проработка
+ ///
+ public string Elaboration { get; set; }
+
+ ///
+ /// Расширка
+ ///
+ public string Extension { get; set; }
+
+ ///
+ /// Ремонт
+ ///
+ public string Repair { get; set; }
+
+ ///
+ /// КНБК
+ ///
+ public string Knbk { get; set; }
+
+ ///
+ /// СПО
+ ///
+ public string Spo { get; set; }
+
+ ///
+ /// ПЗР
+ ///
+ public string Pzr { get; set; }
+
+ ///
+ /// ПВО
+ ///
+ public string Pvo { get; set; }
+
+ ///
+ /// ПГР
+ ///
+ public string Pgr { get; set; }
+
+ ///
+ /// ГИС
+ ///
+ public string Gis { get; set; }
+
+ ///
+ /// ОЗЦ
+ ///
+ public string Ozc { get; set; }
+
+ ///
+ /// Тех. работы
+ ///
+ public string EngineeringWorks { get; set; }
+
+ ///
+ /// Снятие замера
+ ///
+ public string TakingMeasure { get; set; }
+
+ ///
+ /// Цементирование
+ ///
+ public string Cementing { get; set; }
+
+ ///
+ /// Простой
+ ///
+ public string Simple { get; set; }
+
+ ///
+ /// НПВ
+ ///
+ public string Npv { get; set; }
+ }
+}
+
diff --git a/AsbCloudApp/Data/DailyReportDto.cs b/AsbCloudApp/Data/DailyReportDto.cs
deleted file mode 100644
index 2137e510..00000000
--- a/AsbCloudApp/Data/DailyReportDto.cs
+++ /dev/null
@@ -1,216 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace AsbCloudApp.Data
-{
- ///
- /// Параметры для формирования суточного рапорта
- ///
- public class DailyReportDto
- {
- ///
- /// название скважины
- ///
- public string WellName { get; set; }
-
- ///
- /// название куста
- ///
- public string ClusterName { get; set; }
-
- ///
- /// заказчик
- ///
- public string Customer { get; set; }
-
- ///
- /// подрядчик
- ///
- public string Contractor { get; set; }
-
- ///
- /// дата рапорта
- ///
- public DateTime ReportDate { get; set; }
-
- ///
- /// глубина забоя на дату начала интервала
- ///
- public double? WellDepthIntervalStartDate { get; set; }
-
- ///
- /// глубина забоя на дату окончания интервала
- ///
- public double? WellDepthIntervalFinishDate { get; set; }
-
- ///
- /// Глубина забоя по стволу на окончание отчетного периода
- ///
- public double? BottomholeDepth { get; set; }
-
- ///
- /// Глубина забоя по вертикали на дату окончания отчетного периода
- ///
- public double? VerticalDepth { get; set; }
-
- ///
- /// Зенитный угол на дату окончания отчетного периода
- ///
- public double? ZenithAngle { get; set; }
-
- ///
- /// Азимутальный угол на дату окончания отчетного периода
- ///
- public double? AzimuthAngle { get; set; }
-
- ///
- /// ФИО бурильщиков
- ///
- public string FirstDriller { get; set; }
-
- ///
- /// ФИО бурильщиков
- ///
- public string SecondDriller { get; set; }
-
- ///
- /// Время работы АПД
- ///
- public double? WorkTimeSAUB { get; set; }
-
- ///
- /// Время работы спин мастер
- ///
- public double? WorkTimeSpinMaster { get; set; }
-
- ///
- /// Время работы torqueMaster
- ///
- public double? WorkTimeTorkMaster { get; set; }
-
- ///
- /// количество метров пробуренных с включенным АПД
- ///
- public double? PenetrationSAUB { get; set; }
-
- ///
- /// количество метров пробуренных с включенным Спин мастер
- ///
- public double? PenetrationSpinMaster { get; set; }
-
- ///
- /// количество метров пробуренных с включенным torqueMaster
- ///
- public double? PenetrationTorkMaster { get; set; }
-
- ///
- /// Количество запусков МСЕ
- ///
- public int CountLaunchesMSE { get; set; }
-
- ///
- /// КНБК описание
- ///
- public string BHADescription { get; set; }
-
- ///
- /// Нормативное время на одну операцию по подготовке ствола скважины к наращиванию
- ///
- public double? StandardTimeBarrelPreparation { get; set; }
-
- ///
- /// Нормативное время на одну операцию по наращиванию
- ///
- public double? StandardTimeExtension { get; set; }
-
- ///
- /// Фактическое время проработок при подготовке ствола скважины к наращиванию.
- ///
- public double? ActualTimeBarrelPreparation { get; set; }
-
- ///
- /// Фактическое время наращиваний
- ///
- public double? ActualTimeExtension { get; set; }
-
- ///
- /// Режимы бурения в роторе
- ///
- public IEnumerable RotorDrillingModes { get; set; }
-
- ///
- /// режимы бурения в слайде
- ///
- public IEnumerable SlideDrillingModes { get; set; }
-
- ///
- /// Количество метров пробуренных в роторе за отчетный период
- ///
- public double? PenetrationInRotor { get; set; }
-
- ///
- /// Количество часов бурения в роторе за отчетный период
- ///
- public double? NumberDrillingHours { get; set; }
-
- ///
- /// средний диф перепад в роторе за отчетный период
- ///
- public double? AVGDiffDropRotor { get; set; }
-
- ///
- /// количество метров пробуренных в слайде за отчетный период
- ///
- public double? PenetrationInSlide { get; set; }
-
- ///
- /// время бурения в роторе за отчетный период
- ///
- public double? DrillingTimeInRotor { get; set; }
-
- ///
- /// средний диф. перепад в слайде за отчетный период
- ///
- public double? AVGDiffPressureSlide { get; set; }
-
- ///
- /// Плановая МСП за секцию
- ///
- public double? SectionROPPlan { get; set; }
-
- ///
- /// Общее время бурения за секцию
- ///
- public double? SectionDrillingTimeTotal { get; set; }
-
- ///
- /// Общая проходка за секцию
- ///
- public double? SectionPenetrationTotal { get; set; }
-
- ///
- /// Количество наращиваний за отчетный период
- ///
- public int ExtensionsCount { get; set; }
-
- ///
- /// Отклонение относительно ГГД
- ///
- public double? DeviationFromTVD { get; set; }
-
- ///
- /// указываются все причины, которые влияют на снижение МСП.
- ///
- public string DeclinesReasonsROP { get; set; }
-
- ///
- /// ФИО Мастера буровой
- ///
- public string DrillingMaster { get; set; }
-
- ///
- /// ФИО супервайзера
- ///
- public string Supervisor { get; set; }
- }
-}
diff --git a/AsbCloudApp/Data/DetectedOperationListDto.cs b/AsbCloudApp/Data/DetectedOperation/DetectedOperationDrillersStatDto.cs
similarity index 66%
rename from AsbCloudApp/Data/DetectedOperationListDto.cs
rename to AsbCloudApp/Data/DetectedOperation/DetectedOperationDrillersStatDto.cs
index a18f6e87..65cce4aa 100644
--- a/AsbCloudApp/Data/DetectedOperationListDto.cs
+++ b/AsbCloudApp/Data/DetectedOperation/DetectedOperationDrillersStatDto.cs
@@ -1,12 +1,10 @@
-using System.Collections.Generic;
-
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.DetectedOperation
{
#nullable enable
///
/// Статистика по операциям бурильщика
///
- public class DetectedOperationStatDto
+ public class DetectedOperationDrillersStatDto
{
///
/// Бурильщик
@@ -38,18 +36,5 @@ namespace AsbCloudApp.Data
///
public double? Loss { get; set; }
}
-
- ///
- /// Автоматически определяемая операция
- ///
- public class DetectedOperationListDto
- {
- ///
- /// Список всех операций
- ///
- public IEnumerable Operations { get; set; }
-
- public IEnumerable Stats { get; set; }
- }
#nullable disable
}
diff --git a/AsbCloudApp/Data/DetectedOperationDto.cs b/AsbCloudApp/Data/DetectedOperation/DetectedOperationDto.cs
similarity index 95%
rename from AsbCloudApp/Data/DetectedOperationDto.cs
rename to AsbCloudApp/Data/DetectedOperation/DetectedOperationDto.cs
index 59b28043..62837213 100644
--- a/AsbCloudApp/Data/DetectedOperationDto.cs
+++ b/AsbCloudApp/Data/DetectedOperation/DetectedOperationDto.cs
@@ -1,6 +1,6 @@
using System;
-namespace AsbCloudApp.Data
+namespace AsbCloudApp.Data.DetectedOperation
{
#nullable enable
///
@@ -52,12 +52,12 @@ namespace AsbCloudApp.Data
///
/// название/описание операции
///
- public WellOperationCategoryDto OperationCategory { get; set; }
+ public WellOperationCategoryDto OperationCategory { get; set; } = null!;
///
/// Пользователь панели оператора
///
- public string TelemetryUserName { get; set; }
+ public string? TelemetryUserName { get; set; }
///
/// Бурильщик
diff --git a/AsbCloudApp/Data/DetectedOperation/DetectedOperationListDto.cs b/AsbCloudApp/Data/DetectedOperation/DetectedOperationListDto.cs
new file mode 100644
index 00000000..c52b2860
--- /dev/null
+++ b/AsbCloudApp/Data/DetectedOperation/DetectedOperationListDto.cs
@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+
+namespace AsbCloudApp.Data.DetectedOperation
+{
+
+ ///
+ /// Автоматически определяемая операция
+ ///
+ public class DetectedOperationListDto
+ {
+ ///
+ /// Список всех операций
+ ///
+ public IEnumerable Operations { get; set; }
+
+ ///
+ /// Статистика по бурильщикам
+ ///
+ public IEnumerable Stats { get; set; }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Data/DetectedOperation/DetectedOperationStatDto.cs b/AsbCloudApp/Data/DetectedOperation/DetectedOperationStatDto.cs
new file mode 100644
index 00000000..aebe2f46
--- /dev/null
+++ b/AsbCloudApp/Data/DetectedOperation/DetectedOperationStatDto.cs
@@ -0,0 +1,60 @@
+namespace AsbCloudApp.Data.DetectedOperation
+{
+#nullable enable
+ ///
+ /// Статистика по операциям например за период.
+ ///
+ public class DetectedOperationStatDto
+ {
+ ///
+ /// Id названия/описания операции
+ ///
+ public int IdCategory { get; set; }
+
+ ///
+ /// Название операции
+ ///
+ public string Category { get; set; } = string.Empty;
+
+ ///
+ /// Количество операций
+ ///
+ public int Count { get; set; }
+
+ ///
+ /// Среднее по ключевому показателю
+ ///
+ public double ValueAverage { get; set; }
+
+ ///
+ /// Мин по ключевому показателю
+ ///
+ public double ValueMin { get; set; }
+
+ ///
+ /// Макс по ключевому показателю
+ ///
+ public double ValueMax { get; set; }
+
+ ///
+ /// Суммарное время операций, мин
+ ///
+ public double MinutesTotal { get; set; }
+
+ ///
+ /// Мин продолжительность операции, мин
+ ///
+ public double MinutesMin { get; set; }
+
+ ///
+ /// Макс продолжительность операции, мин
+ ///
+ public double MinutesMax { get; set; }
+
+ ///
+ /// Средняя продолжительность операции, мин
+ ///
+ public double MinutesAverage { get; set; }
+ }
+#nullable disable
+}
diff --git a/AsbCloudApp/Data/TimeDto.cs b/AsbCloudApp/Data/TimeDto.cs
index 6bb4b1e5..faf99427 100644
--- a/AsbCloudApp/Data/TimeDto.cs
+++ b/AsbCloudApp/Data/TimeDto.cs
@@ -120,5 +120,32 @@ namespace AsbCloudApp.Data
///
public int CompareTo(TimeDto other)
=> TotalSeconds - other.TotalSeconds;
+
+ ///
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(this, obj))
+ {
+ return true;
+ }
+
+ if (obj is null)
+ {
+ return false;
+ }
+
+ if (obj is TimeDto objTime)
+ {
+ return objTime == this;
+ }
+
+ return false;
+ }
+
+ ///
+ public override int GetHashCode()
+ {
+ return base.GetHashCode();
+ }
}
}
diff --git a/AsbCloudApp/Data/WellOperationCategoryDto.cs b/AsbCloudApp/Data/WellOperationCategoryDto.cs
index 6238f97a..fda6c4ee 100644
--- a/AsbCloudApp/Data/WellOperationCategoryDto.cs
+++ b/AsbCloudApp/Data/WellOperationCategoryDto.cs
@@ -1,4 +1,6 @@
-namespace AsbCloudApp.Data
+using System.ComponentModel.DataAnnotations;
+
+namespace AsbCloudApp.Data
{
///
/// DTO категория операции
@@ -17,5 +19,17 @@
/// код операции
///
public int Code { get; set; }
+
+ ///
+ /// Название ключевого показателя операции
+ ///
+ [StringLength(32)]
+ public string KeyValueName { get; set; }
+
+ ///
+ /// Единицы измерения ключевого показателя операции
+ ///
+ [StringLength(16)]
+ public string KeyValueUnits { get; set; }
}
}
diff --git a/AsbCloudApp/Requests/DetectedOperationRequest.cs b/AsbCloudApp/Requests/DetectedOperationRequest.cs
index 6d54a801..a6097b9c 100644
--- a/AsbCloudApp/Requests/DetectedOperationRequest.cs
+++ b/AsbCloudApp/Requests/DetectedOperationRequest.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Requests
@@ -15,10 +16,9 @@ namespace AsbCloudApp.Requests
public int IdWell { get; set; }
///
- /// категория операций
+ /// категории операций
///
- [Required]
- public int IdCategory { get; set; }
+ public IEnumerable IdsCategories { get; set; }
///
/// Больше или равно дате
diff --git a/AsbCloudApp/Services/IAuthService.cs b/AsbCloudApp/Services/IAuthService.cs
index 783eb8e0..34030c24 100644
--- a/AsbCloudApp/Services/IAuthService.cs
+++ b/AsbCloudApp/Services/IAuthService.cs
@@ -5,14 +5,49 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ ///
+ /// Сервис авторизации
+ ///
public interface IAuthService
{
+ ///
+ /// Смена пароля пользователю
+ ///
+ ///
+ ///
+ ///
int ChangePassword(int idUser, string newPassword);
+
+ ///
+ /// Смена пароля пользователю
+ ///
+ ///
+ ///
+ ///
int ChangePassword(string userLogin, string newPassword);
+
+ ///
+ /// Авторизация
+ ///
+ ///
+ ///
+ /// токен отмены задачи
+ ///
Task LoginAsync(string login,
string password, CancellationToken token = default);
+ ///
+ /// Обновление токена авторизации
+ ///
+ ///
+ ///
string Refresh(ClaimsPrincipal user);
+
+ ///
+ /// Регистрация нового пользователя
+ ///
+ ///
+ ///
int Register(UserRegistrationDto userDto);
}
}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/IBackgroundWorkerService.cs b/AsbCloudApp/Services/IBackgroundWorkerService.cs
index c65fd4f5..2ccc47ab 100644
--- a/AsbCloudApp/Services/IBackgroundWorkerService.cs
+++ b/AsbCloudApp/Services/IBackgroundWorkerService.cs
@@ -4,19 +4,47 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ ///
+ /// Сервис выстраивает очередь из фоновых задач. Ограничивает количество одновременно выполняющихся задач.
+ ///
public interface IBackgroundWorkerService
{
+ ///
+ /// Проверка, есть ли задача в очереди
+ ///
+ /// идентификатор задачи
+ ///
bool Contains(string id);
///
/// Добавляет в очередь задач новую задачу
///
- /// id задачи в очереди
+ /// идентификатор задачи
/// делегат
/// id задачи в очереди
string Enqueue(string id, Func func);
+
+ ///
+ /// Добавляет в очередь задач новую задачу
+ ///
+ ///
+ ///
string Enqueue(Func func);
+
+ ///
+ /// Добавляет в очередь задач новую задачу
+ ///
+ /// идентификатор задачи
+ ///
+ ///
+ ///
string Enqueue(string id, Func func, Func onError);
+
+ ///
+ /// Пробуем удалить задачу по идентификатору
+ ///
+ ///
+ ///
bool TryRemove(string id);
}
}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/IClusterService.cs b/AsbCloudApp/Services/IClusterService.cs
index 66952f21..5a77d46d 100644
--- a/AsbCloudApp/Services/IClusterService.cs
+++ b/AsbCloudApp/Services/IClusterService.cs
@@ -5,16 +5,57 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ //TODO: remove unused methods
+
+ ///
+ /// Сервис информации о кустах
+ ///
public interface IClusterService
{
+ ///
+ /// список месторождений
+ ///
+ ///
+ ///
+ ///
Task> GetDepositsAsync(int idCompany,
CancellationToken token);
+
+ ///
+ /// Список кустов с заполненными параметрами бурения
+ ///
+ ///
+ ///
+ ///
Task> GetDepositsDrillParamsAsync(int idCompany,
CancellationToken token = default);
+
+ ///
+ /// Список кустов месторождения доступных компании
+ ///
+ ///
+ ///
+ ///
+ ///
Task> GetClustersAsync(int idCompany,
int depositId, CancellationToken token);
+
+ ///
+ /// Список кустов доступных компании
+ ///
+ ///
+ ///
+ ///
Task> GetClustersAsync(int idCompany,
CancellationToken token);
+
+ ///
+ /// Список скважин доступных компании
+ ///
+ ///
+ ///
+ ///
+ ///
Task> GetWellsAsync(int idCompany,
int clusterId, CancellationToken token);
}
diff --git a/AsbCloudApp/Services/IDailyReportService.cs b/AsbCloudApp/Services/IDailyReportService.cs
index 380622d1..28bc72fc 100644
--- a/AsbCloudApp/Services/IDailyReportService.cs
+++ b/AsbCloudApp/Services/IDailyReportService.cs
@@ -1,4 +1,4 @@
-using AsbCloudApp.Data;
+using AsbCloudApp.Data.DailyReport;
using System;
using System.Collections.Generic;
using System.IO;
@@ -7,8 +7,12 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ ///
+ /// Суточный рапорт (сводка)
+ ///
public interface IDailyReportService
- {
+ {
+
Task> GetListAsync(int idWell, DateTime? v1, DateTime? v2, CancellationToken cancellationToken);
Task GetOrGenerateAsync(int idWell, DateTime date, CancellationToken token);
Task AddAsync(int idWell, DailyReportDto dto, CancellationToken token = default);
diff --git a/AsbCloudApp/Services/IDetectedOperationService.cs b/AsbCloudApp/Services/IDetectedOperationService.cs
index eb932c53..0a0bd999 100644
--- a/AsbCloudApp/Services/IDetectedOperationService.cs
+++ b/AsbCloudApp/Services/IDetectedOperationService.cs
@@ -1,15 +1,59 @@
using AsbCloudApp.Data;
+using AsbCloudApp.Data.DetectedOperation;
using AsbCloudApp.Requests;
using System.Collections.Generic;
+using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+#nullable enable
+ ///
+ /// Сервис автоматически определенных по телеметрии операций
+ ///
public interface IDetectedOperationService
{
- Task> GetCategoriesAsync(int? idWell, CancellationToken token);
- Task GetAsync(DetectedOperationRequest request, CancellationToken token);
+ ///
+ /// Список названий операций.
+ /// Если указан idWell, то возвращается список названий операций найденных на указанной скважине.
+ ///
+ ///
+ ///
+ ///
+ Task?> GetCategoriesAsync(int? idWell, CancellationToken token);
+
+ ///
+ /// Получить автоматически определенные по телеметрии операции с анализом по бурильщикам
+ ///
+ ///
+ ///
+ ///
+ Task GetAsync(DetectedOperationRequest request, CancellationToken token);
+
+ ///
+ /// Удалить операции
+ ///
+ ///
+ ///
+ ///
Task DeleteAsync(DetectedOperationRequest request, CancellationToken token);
+
+ ///
+ /// Статистика по операциям
+ ///
+ ///
+ ///
+ ///
+ Task?> GetOperationsStatAsync(DetectedOperationRequest request, CancellationToken token);
+
+ ///
+ /// Выгрузка в Excel
+ ///
+ ///
+ ///
+ ///
+ Task ExportAsync(IEnumerable idsWells, CancellationToken token);
}
+#nullable disable
}
diff --git a/AsbCloudApp/Services/IDrillFlowChartService.cs b/AsbCloudApp/Services/IDrillFlowChartService.cs
index 693cab85..54e98b71 100644
--- a/AsbCloudApp/Services/IDrillFlowChartService.cs
+++ b/AsbCloudApp/Services/IDrillFlowChartService.cs
@@ -6,8 +6,18 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ ///
+ ///
+ ///
public interface IDrillFlowChartService : ICrudWellRelatedService
{
+ ///
+ /// .
+ ///
+ ///
+ ///
+ ///
+ ///
Task> GetAllAsync(int idWell,
DateTime updateFrom, CancellationToken token = default);
}
diff --git a/AsbCloudApp/Services/IDrillerService.cs b/AsbCloudApp/Services/IDrillerService.cs
index 505eba3f..79de46c4 100644
--- a/AsbCloudApp/Services/IDrillerService.cs
+++ b/AsbCloudApp/Services/IDrillerService.cs
@@ -2,6 +2,9 @@
namespace AsbCloudApp.Services
{
+ ///
+ /// Сервис добавления бурильщиков
+ ///
public interface IDrillerService : ICrudService
{
diff --git a/AsbCloudApp/Services/IDrillingProgramService.cs b/AsbCloudApp/Services/IDrillingProgramService.cs
index e17b6481..ee24d34e 100644
--- a/AsbCloudApp/Services/IDrillingProgramService.cs
+++ b/AsbCloudApp/Services/IDrillingProgramService.cs
@@ -5,19 +5,109 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ ///
+ /// Программа бурения
+ ///
public interface IDrillingProgramService
{
+ ///
+ /// Получить пользователей доступных для назначения в публикаторы или акцепторы
+ ///
+ ///
+ ///
+ ///
Task> GetAvailableUsers(int idWell, CancellationToken token = default);
+
+ ///
+ /// Части программы бурения
+ ///
+ ///
+ ///
Task> GetCategoriesAsync(CancellationToken token = default);
+
+ ///
+ /// Состояние программы бурения
+ ///
+ ///
+ ///
+ ///
+ ///
Task GetStateAsync(int idWell, int idUser,
CancellationToken token = default);
+
+ ///
+ /// Загрузить файл
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task AddFile(int idWell, int idFileCategory, int idUser, string fileFullName, System.IO.Stream fileStream, CancellationToken token = default);
+
+ ///
+ /// Добавить часть программы бурения
+ ///
+ ///
+ ///
+ ///
+ ///
Task AddPartsAsync(int idWell, IEnumerable idFileCategories, CancellationToken token = default);
+
+ ///
+ /// Удалить часть программы бурения
+ ///
+ ///
+ ///
+ ///
+ ///
Task RemovePartsAsync(int idWell, IEnumerable idFileCategories, CancellationToken token = default);
+
+ ///
+ /// Назначить пользователю роль
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task AddUserAsync(int idWell, int idFileCategory, int idUser, int idUserRole, CancellationToken token = default);
+
+ ///
+ /// Удалить пользователя
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task RemoveUserAsync(int idWell, int idFileCategory, int idUser, int idUserRole, CancellationToken token = default);
+
+ ///
+ /// Добавить или изменить отметку для файла (согласование/отклонение)
+ ///
+ ///
+ ///
+ ///
+ ///
Task AddOrReplaceFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token);
+
+ ///
+ /// Удалить отметку с файла
+ ///
+ ///
+ ///
+ ///
Task MarkAsDeletedFileMarkAsync(int idFileMark, CancellationToken token);
+
+ ///
+ /// Сбросить ошибку формирования
+ ///
+ ///
void ClearError(int idWell);
}
}
\ No newline at end of file
diff --git a/AsbCloudApp/Services/IEmailService.cs b/AsbCloudApp/Services/IEmailService.cs
index a196ca03..f1c065f6 100644
--- a/AsbCloudApp/Services/IEmailService.cs
+++ b/AsbCloudApp/Services/IEmailService.cs
@@ -2,9 +2,25 @@
namespace AsbCloudApp.Services
{
+ ///
+ /// Сервис отправки сообщений
+ ///
public interface IEmailService
{
+ ///
+ /// добавить сообщение на отправку нескольким пользователям
+ ///
+ ///
+ ///
+ ///
void EnqueueSend(IEnumerable addresses, string subject, string htmlBody);
+
+ ///
+ /// добавить сообщение на отправку одному пользователю
+ ///
+ ///
+ ///
+ ///
void EnqueueSend(string address, string subject, string htmlBody);
}
}
diff --git a/AsbCloudApp/Services/IEventService.cs b/AsbCloudApp/Services/IEventService.cs
index 937eb24a..4adf287c 100644
--- a/AsbCloudApp/Services/IEventService.cs
+++ b/AsbCloudApp/Services/IEventService.cs
@@ -5,8 +5,18 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ ///
+ /// Сервис сохранения списка сообщений от панелей
+ ///
public interface IEventService
{
+ ///
+ /// Сохранить. Добавить или заменить.
+ ///
+ ///
+ ///
+ ///
+ ///
Task UpsertAsync(string uid, IEnumerable dtos,
CancellationToken token = default);
}
diff --git a/AsbCloudApp/Services/IFileService.cs b/AsbCloudApp/Services/IFileService.cs
index 86c9c2e3..23f0ee88 100644
--- a/AsbCloudApp/Services/IFileService.cs
+++ b/AsbCloudApp/Services/IFileService.cs
@@ -7,35 +7,178 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ //TODO: refactor IFileService
+
+ ///
+ /// Сервис доступа к файлам
+ ///
public interface IFileService
{
+ ///
+ /// Директория хранения файлов
+ ///
string RootPath { get; }
+ ///
+ /// получить url Google drive
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task GetSharedUrlAsync(int idFileInfo, int idUser, IFileShareService fileShareService, CancellationToken token);
+
+ ///
+ /// получить url Google drive
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task GetSharedUrlAsync(FileInfoDto dto, int idUser, IFileShareService fileShareService,
CancellationToken token = default);
+ ///
+ /// Сохранить файл
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task SaveAsync(int idWell, int? idUser, int idCategory, string fileFullName, Stream fileStream, CancellationToken token = default);
+ ///
+ /// Получить список файлов в контейнере
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task> GetInfosAsync(int idWell,
int idCategory, string companyName = default, string fileName = default, DateTime begin = default, DateTime end = default,
int skip = 0, int take = 32, CancellationToken token = default);
+ ///
+ /// Инфо о файле
+ ///
+ ///
+ ///
+ ///
Task GetInfoAsync(int idFile,
CancellationToken token);
+ ///
+ /// Пометить файл как удаленный
+ ///
+ ///
+ ///
+ ///
Task MarkAsDeletedAsync(int idFile,
CancellationToken token = default);
+
+ ///
+ /// Получить файлы определенной категории
+ ///
+ ///
+ ///
+ ///
+ ///
Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token = default);
+
+ ///
+ /// удалить файл
+ ///
+ ///
+ ///
+ ///
Task DeleteAsync(int id, CancellationToken token);
+
+ ///
+ /// удалить файлы
+ ///
+ ///
+ ///
+ ///
Task DeleteAsync(IEnumerable ids, CancellationToken token);
+
+ ///
+ /// получить путь для скачивания
+ ///
+ ///
+ ///
string GetUrl(FileInfoDto fileInfo);
+
+ ///
+ /// получить путь для скачивания
+ ///
+ ///
+ ///
string GetUrl(int idFile);
+
+ ///
+ /// получить путь для скачивания
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
string GetUrl(int idWell, int idCategory, int idFile, string dotExtention);
+
+ ///
+ /// добавить метку на файл
+ ///
+ ///
+ ///
+ ///
+ ///
Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token);
+
+ ///
+ /// пометить метку файла как удаленную
+ ///
+ ///
+ ///
+ ///
Task MarkFileMarkAsDeletedAsync(int idMark, CancellationToken token);
+
+ ///
+ /// переместить файл
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task MoveAsync(int idWell, int? idUser, int idCategory, string destinationFileName, string srcFileFullName, CancellationToken token = default);
+
+ ///
+ /// получить инфо о файле по метке
+ ///
+ ///
+ ///
+ ///
Task GetByMarkId(int idMark, CancellationToken token);
+
+ ///
+ /// пометить метки файлов как удаленные
+ ///
+ ///
+ ///
+ ///
Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token);
}
}
diff --git a/AsbCloudApp/Services/IFileShareService.cs b/AsbCloudApp/Services/IFileShareService.cs
index 051e8d96..98ce3ab7 100644
--- a/AsbCloudApp/Services/IFileShareService.cs
+++ b/AsbCloudApp/Services/IFileShareService.cs
@@ -3,11 +3,29 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ //TODO:
+
+ ///
+ /// Google disk
+ ///
public interface IFileShareService
{
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task PublishFileToCloudAsync(string filePath, string originalName,
CancellationToken token);
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
Task DeleteFileAsync(string sharedFileId,
CancellationToken token = default);
}
diff --git a/AsbCloudApp/Services/IMeasureService.cs b/AsbCloudApp/Services/IMeasureService.cs
index ea8b930b..f7fff368 100644
--- a/AsbCloudApp/Services/IMeasureService.cs
+++ b/AsbCloudApp/Services/IMeasureService.cs
@@ -5,14 +5,70 @@ using System.Threading.Tasks;
namespace AsbCloudApp.Services
{
+ ///
+ /// Сервис хранения результатов лабораторных анализов и измерений
+ ///
public interface IMeasureService
{
+ ///
+ /// Категории измерений
+ ///
+ ///
+ ///
Task> GetCategoriesAsync(CancellationToken token);
+
+ ///
+ /// Последние измерения по категории
+ ///
+ ///
+ ///
+ ///
+ ///
Task GetLastAsync(int idWell, int idCategory, CancellationToken token);
+
+ ///
+ /// История измерений по категории
+ ///
+ ///
+ ///
+ ///
+ ///
Task> GetHisoryAsync(int idWell, int? idCategory, CancellationToken token);
+
+ ///
+ /// Добавить измерение
+ ///
+ ///
+ ///
+ ///
+ ///
Task InsertAsync(int idWell, MeasureDto data, CancellationToken token);
+
+ ///
+ /// Редактировать
+ ///
+ ///
+ ///
+ ///
+ ///
Task UpdateAsync(int idWell, MeasureDto data, CancellationToken token);
+
+ ///
+ /// Пометить удаленным
+ ///
+ ///
+ ///
+ ///
+ ///
Task MarkAsDeleteAsync(int idWell, int idData, CancellationToken token);
+
+ ///
+ /// Удалить
+ ///
+ ///
+ ///
+ ///
+ ///
Task DeleteAsync(int idWell, int idData, CancellationToken token);
}
}
diff --git a/AsbCloudApp/Services/IUserSettingsRepository.cs b/AsbCloudApp/Services/IUserSettingsRepository.cs
new file mode 100644
index 00000000..218b23f3
--- /dev/null
+++ b/AsbCloudApp/Services/IUserSettingsRepository.cs
@@ -0,0 +1,15 @@
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudApp.Services
+{
+ public interface IUserSettingsRepository
+ {
+ public const int ErrorKeyNotFound = -1;
+ public const int ErrorKeyIsUsed = -2;
+ Task