Dto суточного отчёта

1. Добавлен Dto суточного отчёта
2. Добавлены блок для суточного отчёта
This commit is contained in:
Степанов Дмитрий 2023-11-03 19:16:26 +05:00
parent 6b0db1adbc
commit b92acca29b
13 changed files with 437 additions and 36 deletions

View File

@ -0,0 +1,12 @@
namespace AsbCloudApp.Data.DailyReport.Blocks;
/// <summary>
/// Базовый класс для редактируемых блоков
/// </summary>
public abstract class EditableBlock
{
/// <summary>
/// Id пользователя внесшего изменения в блок
/// </summary>
public int IdUser { get; set; }
}

View File

@ -0,0 +1,29 @@
namespace AsbCloudApp.Data.DailyReport.Blocks;
/// <summary>
/// РТК
/// </summary>
public class ProcessMapWellDrillingRecordDto
{
/// <summary>
/// Id режима бурения
/// 1 - ротор
/// 2 - слайд
/// </summary>
public int IdMode { get; set; }
/// <summary>
/// Мех. скорость
/// </summary>
public PlanFactDto<double?> Rop { get; set; }
/// <summary>
/// Глубина ствола
/// </summary>
public double? WellBoreDepth { get; set; }
/// <summary>
/// Часы бурения
/// </summary>
public double MechDrillingHours { get; set; }
}

View File

@ -0,0 +1,32 @@
namespace AsbCloudApp.Data.DailyReport.Blocks;
/// <summary>
/// Блок с графиком работы
/// </summary>
public class ScheduleRecordDto
{
/// <summary>
/// Начало смены
/// </summary>
public TimeDto? ShiftStart { get; set; }
/// <summary>
/// Конец смены
/// </summary>
public TimeDto? ShiftEnd { get; set; }
/// <summary>
/// Имя бурильщика
/// </summary>
public string? Name { get; set; }
/// <summary>
/// Фамилия бурильщика
/// </summary>
public string? Surname { get; set; }
/// <summary>
/// Отчество бурильщика
/// </summary>
public string? Patronymic { get; set; }
}

View File

@ -0,0 +1,17 @@
namespace AsbCloudApp.Data.DailyReport.Blocks.Sign;
/// <summary>
/// Блок с подписями
/// </summary>
public class SignBlockDto : EditableBlock
{
/// <summary>
/// Подпись мастера буровой
/// </summary>
public SignRecordDto? DrillingMaster { get; set; }
/// <summary>
/// Подпись супервайзера
/// </summary>
public SignRecordDto? Supervisor { get; set; }
}

View File

@ -0,0 +1,28 @@
namespace AsbCloudApp.Data.DailyReport.Blocks.Sign;
/// <summary>
/// Подпись
/// </summary>
public class SignRecordDto
{
/// <summary>
/// Имя
/// </summary>
public string Name { get; set; } = null!;
/// <summary>
/// Фамилия
/// </summary>
public string Surname { get; set; } = null!;
/// <summary>
/// Отчество
/// </summary>
public string? Patronymic { get; set; }
/// <inheritdoc />
public override string ToString()
{
return $"{Surname} {Name} {Patronymic}";
}
}

View File

@ -0,0 +1,35 @@
using System.Collections.Generic;
using System.Linq;
namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
/// <summary>
/// Блок статистики работы подсистем
/// </summary>
public class SubsystemBlockDto : EditableBlock
{
/// <summary>
/// Длина ствола скважины
/// </summary>
public double? WellBoreDepth { get; set; }
/// <summary>
/// Кол-во замеров за сутки
/// </summary>
public double? MeasurementsPerDaily { get; set; }
/// <summary>
/// Общая плановая мех. скорость
/// </summary>
public double? TotalRopPlan { get; set; }
/// <summary>
/// Рекомендации специалиста
/// </summary>
public string? Comment { get; set; }
/// <summary>
/// Модули
/// </summary>
public IEnumerable<SubsystemRecordDto> Modules { get; set; } = Enumerable.Empty<SubsystemRecordDto>();
}

View File

@ -0,0 +1,44 @@
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
/// <summary>
/// Модуль подсистемы
/// </summary>
public class SubsystemRecordDto
{
/// <summary>
/// 1 - АПД, ч/м
/// 11 - АПД ротор
/// 12 - АПД слайд
/// 65536 - Осцилляция
/// 65537 - Демпфер
/// 100000 - Автопроработка
/// 100001 - АвтоСПО
/// </summary>
public int IdSubsystem { get; set; }
/// <summary>
/// Идентификатор временного интервала
/// 1 - за сутки
/// 2 - за скважину
/// </summary>
[Range(1, 2)]
public int IdTimeInterval { get; set; }
/// <summary>
/// Сумма изменения глубин при включеной подсистеме
/// </summary>
public double? SumDepthInterval { get; set; }
/// <summary>
/// Наработка подсистемы
/// </summary>
public double? UsedTimeHours { get; set; }
/// <summary>
/// Коэффициент использования
/// </summary>
[Range(0, 100)]
public double? KUsage { get; set; }
}

View File

@ -0,0 +1,37 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
/// <summary>
/// Блок с балансом времени
/// </summary>
public class TimeBalanceBlockDto : EditableBlock
{
/// <summary>
/// Идентификатор секции
/// </summary>
[Range(1, int.MaxValue)]
public int IdSection { get; set; }
/// <summary>
/// Плановая проходка скважины
/// </summary>
public double? WellDepthPlan { get; set; }
/// <summary>
/// Фактическая проходка скважины
/// </summary>
public double WellDepthFact { get; set; }
/// <summary>
/// Кол-во наращиваний за сутки
/// </summary>
public double? CountWellOperationSlipsTime { get; set; }
/// <summary>
/// Операции на скважине
/// </summary>
public IEnumerable<TimeBalanceRecordDto> WellOperations { get; set; } = Enumerable.Empty<TimeBalanceRecordDto>();
}

View File

@ -0,0 +1,35 @@
namespace AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
/// <summary>
/// Операции проводимые на скважине
/// </summary>
public class TimeBalanceRecordDto
{
/// <summary>
/// Мех. бурение - 4001
/// Статический замер - 4002
/// Наращивание - 4004
/// Промывка, ОБР - 4012
/// </summary>
public int IdWellOperation { get; set; }
/// <summary>
/// Продолжительность операции, ч
/// </summary>
public PlanFactDto<double>? DurationHours { get; set; }
/// <summary>
/// Отклонение за секцию
/// </summary>
public double? DrillingDeviationPerSection { get; set; }
/// <summary>
/// Отклонение за сутки
/// </summary>
public double? DrillingDeviationPerDaily { get; set; }
/// <summary>
/// Причина отклонения
/// </summary>
public string? ReasonDeviation { get; set; }
}

View File

@ -0,0 +1,27 @@
namespace AsbCloudApp.Data.DailyReport.Blocks;
/// <summary>
/// Блок с траекторией скважины
/// </summary>
public class TrajectoryBlockDto
{
/// <summary>
/// Глубина по стволу
/// </summary>
public double? WellboreDepth { get; set; }
/// <summary>
/// Глубина вертикальная
/// </summary>
public double? VerticalDepth { get; set; }
/// <summary>
/// Угол зенитный
/// </summary>
public double? ZenithAngle { get; set; }
/// <summary>
/// Азимут Географ.
/// </summary>
public double? AzimuthGeo { get; set; }
}

View File

@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Linq;
namespace AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
/// <summary>
/// Блок с операциями проводимыми на скважине
/// </summary>
public class WellOperationBlockDto
{
/// <summary>
/// Продолжительность бурения за секцию
/// </summary>
public double DurationHoursDrillingPerSection { get; set; }
/// <summary>
/// Операции проводимые на скважине
/// </summary>
public IEnumerable<WellOperationRecordDto> WellOperations { get; set; } = Enumerable.Empty<WellOperationRecordDto>();
}

View File

@ -0,0 +1,17 @@
namespace AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
/// <summary>
/// Операция на скважине
/// </summary>
public class WellOperationRecordDto
{
/// <summary>
/// Id категории операции
/// </summary>
public int? IdWellCategory { get; set; }
/// <summary>
/// Продолжительность операции
/// </summary>
public double? DurationHours { get; set; }
}

View File

@ -1,45 +1,113 @@
using System;
using System.Collections.Generic;
using System.Linq;
using AsbCloudApp.Data.DailyReport.Blocks;
using AsbCloudApp.Data.DailyReport.Blocks.Sign;
using AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
using AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
using AsbCloudApp.Data.DailyReport.Blocks.WellOperation;
namespace AsbCloudApp.Data.DailyReport
namespace AsbCloudApp.Data.DailyReport;
/// <summary>
/// Суточный отчёт
/// </summary>
public class DailyReportDto : IId,
IWellRelated
{
/// <summary>
/// Блоки для формирования суточного рапорта
/// </summary>
public class DailyReportDto
{
/// <summary>
/// дата отчёта
/// </summary>
public DateOnly StartDate { get; set; }
/// <inheritdoc/>
public int Id { get; set; }
/// <summary>
/// блок заголовка
/// </summary>
public HeadDto Head { get; set; } = new();
/// <inheritdoc/>
public int IdWell { get; set; }
/// <summary>
/// блок КНБК
/// </summary>
public BhaDto Bha { get; set; } = new();
/// <summary>
/// Название скважины
/// </summary>
public string WellName { get; set; } = null!;
/// <summary>
/// блок безметражные работы
/// </summary>
public NoDrillingDto NoDrilling { get; set; } = new();
/// <summary>
/// Название типа скважины
/// </summary>
public string? WellType { get; set; }
/// <summary>
/// блок баланса времени
/// </summary>
public TimeBalanceDto TimeBalance { get; set; } = new();
/// <summary>
/// Название куста
/// </summary>
public string? Cluster { get; set; }
/// <summary>
/// блок САУБ
/// </summary>
public SaubDto Saub { get; set; } = new();
/// <summary>
/// Заказчик
/// </summary>
public string? Customer { get; set; }
/// <summary>
/// блок подписи
/// </summary>
public SignDto Sign { get; set; } = new();
}
}
/// <summary>
/// Подрядчик
/// </summary>
public string? Contractor { get; set; }
/// <summary>
/// Месторождение
/// </summary>
public string? Deposit { get; set; }
/// <summary>
/// Глубина забоя на дату начала интервала
/// </summary>
public double? DepthStart { get; set; }
/// <summary>
/// Глубина забоя на дату окончания интервала
/// </summary>
public double? DepthEnd { get; set; }
/// <summary>
/// Дата последнего обновления
/// </summary>
public DateTime? DateLastUpdate { get; set; }
/// <summary>
/// Начальная дата отчёта
/// </summary>
public DateTime DateStart { get; set; }
/// <summary>
/// Конечная дата отчёта
/// </summary>
public DateTime DateEnd => DateStart.AddHours(24);
/// <summary>
/// Блок фактической траектории
/// </summary>
public TrajectoryBlockDto TrajectoryBlock { get; set; } = null!;
/// <summary>
/// Фактические операции
/// </summary>
public WellOperationBlockDto FactWellOperationBlock { get; set; } = null!;
/// <summary>
/// Баланс времени
/// </summary>
public TimeBalanceBlockDto? TimeBalanceBlock { get; set; }
/// <summary>
/// Наработка подсистем
/// </summary>
public SubsystemBlockDto? SubsystemBlock { get; set; }
/// <summary>
/// Подпись
/// </summary>
public SignBlockDto? SignBlock { get; set; }
/// <summary>
/// Блок расписания
/// </summary>
public IEnumerable<ScheduleRecordDto> ScheduleBlock { get; set; } = Enumerable.Empty<ScheduleRecordDto>();
/// <summary>
/// РТК
/// </summary>
public IEnumerable<ProcessMapWellDrillingRecordDto> ProcessMapWellDrillingBlock { get; set; } = Enumerable.Empty<ProcessMapWellDrillingRecordDto>();
}