From e16df1f70561b6582afe0a199009f0e33b282cb4 Mon Sep 17 00:00:00 2001 From: IvanovEugeniy Date: Thu, 30 Jun 2022 16:01:46 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B5=D0=B9=20Dto?= =?UTF-8?q?=20=D0=B2=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=BA=20=D0=B2=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=20?= =?UTF-8?q?DailyReport=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8=20=D0=B8=20=D0=BB=D0=B8?= =?UTF-8?q?=D1=88=D0=BD=D0=B8=D0=B9=20=D0=BA=D0=BE=D0=B4=20:=20-=D0=B8?= =?UTF-8?q?=D0=B7=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B7=D0=B4=D0=B0=D1=8E=D1=89=D0=B8=D1=85=20=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=B0=20-?= =?UTF-8?q?=D0=B8=D0=B7=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20MakerExce?= =?UTF-8?q?l=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=20Dimensionless?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/DailyReport/DailyReportBhaDto.cs | 2 +- .../DailyReportDimensionlessDto.cs | 2 +- .../Data/DailyReport/DailyReportHeadDto.cs | 2 +- .../Data/DailyReport/DailyReportSaubDto.cs | 2 +- .../Data/DailyReport/DailyReportSignDto.cs | 2 +- AsbCloudApp/Data/DailyReportDto.cs | 213 +--- .../Model/DailyReportDB/DailyReportBha.cs | 2 +- .../Model/DailyReportDB/DailyReportDb.cs | 4 +- .../DailyReportDB/DailyReportDimensionless.cs | 2 +- .../Model/DailyReportDB/DailyReportHead.cs | 2 +- .../Model/DailyReportDB/DailyReportSaub.cs | 2 +- .../Model/DailyReportDB/DailyReportSign.cs | 2 +- .../DailyReportDB/DailyReportTimeBalance.cs | 103 ++ AsbCloudDb/Model/DailyReportInfo.cs | 211 +--- .../Services/DailyReport/BlockAbstract.cs | 90 +- .../DailyReport/DailyReportBlocks/BhaBlock.cs | 28 +- .../DailyReportBlocks/DimensionlessBlock.cs | 120 +- .../DailyReportBlocks/HeadBlock.cs | 51 +- .../DailyReportBlocks/SaubBlock.cs | 6 +- .../DailyReportBlocks/SignBlock.cs | 16 +- .../DailyReportBlocks/TimeBalanceBlock.cs | 37 - .../DailyReport/DailyReportMakerExcel.cs | 1024 +---------------- .../DailyReport/DailyReportService.cs | 90 +- .../ServicesTests/ScheduleServiceTest.cs | 8 +- ConsoleApp1/Program.cs | 505 +------- 25 files changed, 283 insertions(+), 2243 deletions(-) create mode 100644 AsbCloudDb/Model/DailyReportDB/DailyReportTimeBalance.cs diff --git a/AsbCloudApp/Data/DailyReport/DailyReportBhaDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportBhaDto.cs index 1eef09ab..3347e01f 100644 --- a/AsbCloudApp/Data/DailyReport/DailyReportBhaDto.cs +++ b/AsbCloudApp/Data/DailyReport/DailyReportBhaDto.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudApp.Data.DailyReport { public class DailyReportBhaDto { diff --git a/AsbCloudApp/Data/DailyReport/DailyReportDimensionlessDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportDimensionlessDto.cs index 27766df6..39fae88d 100644 --- a/AsbCloudApp/Data/DailyReport/DailyReportDimensionlessDto.cs +++ b/AsbCloudApp/Data/DailyReport/DailyReportDimensionlessDto.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudApp.Data.DailyReport { public class DailyReportDimensionlessDto { diff --git a/AsbCloudApp/Data/DailyReport/DailyReportHeadDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportHeadDto.cs index 615859ca..db9d9d4d 100644 --- a/AsbCloudApp/Data/DailyReport/DailyReportHeadDto.cs +++ b/AsbCloudApp/Data/DailyReport/DailyReportHeadDto.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudApp.Data.DailyReport { public class DailyReportHeadDto diff --git a/AsbCloudApp/Data/DailyReport/DailyReportSaubDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportSaubDto.cs index b9a2a032..c5ea8559 100644 --- a/AsbCloudApp/Data/DailyReport/DailyReportSaubDto.cs +++ b/AsbCloudApp/Data/DailyReport/DailyReportSaubDto.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudApp.Data.DailyReport { public class DailyReportSaubDto { diff --git a/AsbCloudApp/Data/DailyReport/DailyReportSignDto.cs b/AsbCloudApp/Data/DailyReport/DailyReportSignDto.cs index 3c1bd223..974e939c 100644 --- a/AsbCloudApp/Data/DailyReport/DailyReportSignDto.cs +++ b/AsbCloudApp/Data/DailyReport/DailyReportSignDto.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudApp.Data.DailyReport { public class DailyReportSignDto { diff --git a/AsbCloudApp/Data/DailyReportDto.cs b/AsbCloudApp/Data/DailyReportDto.cs index 2137e510..f9bf7e36 100644 --- a/AsbCloudApp/Data/DailyReportDto.cs +++ b/AsbCloudApp/Data/DailyReportDto.cs @@ -1,216 +1,23 @@ using System; using System.Collections.Generic; +using AsbCloudApp.Data.DailyReport; + namespace AsbCloudApp.Data { /// - /// Параметры для формирования суточного рапорта + /// Блоки для формирования суточного рапорта /// public class DailyReportDto { - /// - /// название скважины - /// - public string WellName { get; set; } + + public DailyReportHeadDto HeadDto { get; set; } + public DailyReportBhaDto BhaDto { get; set; } + public DailyReportDimensionlessDto DimensionlessDto { get; set; } + public DailyReportTimeBalanceDto TimeBalanceDto { get; set; } + public DailyReportSaubDto SaubDto { get; set; } + public DailyReportSignDto SignDto { 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/AsbCloudDb/Model/DailyReportDB/DailyReportBha.cs b/AsbCloudDb/Model/DailyReportDB/DailyReportBha.cs index 142ed009..8adc9512 100644 --- a/AsbCloudDb/Model/DailyReportDB/DailyReportBha.cs +++ b/AsbCloudDb/Model/DailyReportDB/DailyReportBha.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudDb.Model.DailyReportDB { public class DailyReportBha { diff --git a/AsbCloudDb/Model/DailyReportDB/DailyReportDb.cs b/AsbCloudDb/Model/DailyReportDB/DailyReportDb.cs index 874fc154..a4e16ec3 100644 --- a/AsbCloudDb/Model/DailyReportDB/DailyReportDb.cs +++ b/AsbCloudDb/Model/DailyReportDB/DailyReportDb.cs @@ -1,7 +1,7 @@ using System; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations.Schema; -using AsbCloudApp.Data.DailyReportModel; + namespace AsbCloudDb.Model.DailyReportDB { #nullable disable @@ -15,7 +15,7 @@ namespace AsbCloudDb.Model.DailyReportDB public DateTimeOffset StartDate { get; set; } [Column("blockHead", TypeName = "jsonb"), Comment("1 блок параметров для отчёта")] - public DailyReportHead BlockHead { get; set; } + public DailyReportInfo BlockHead { get; set; } [Column("blockBha", TypeName = "jsonb"), Comment("2 блок параметров для отчёта")] public DailyReportBha BlockBha { get; set; } diff --git a/AsbCloudDb/Model/DailyReportDB/DailyReportDimensionless.cs b/AsbCloudDb/Model/DailyReportDB/DailyReportDimensionless.cs index 7ca1697d..42b84e62 100644 --- a/AsbCloudDb/Model/DailyReportDB/DailyReportDimensionless.cs +++ b/AsbCloudDb/Model/DailyReportDB/DailyReportDimensionless.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudDb.Model.DailyReportDB { public class DailyReportDimensionless { diff --git a/AsbCloudDb/Model/DailyReportDB/DailyReportHead.cs b/AsbCloudDb/Model/DailyReportDB/DailyReportHead.cs index e49a9a0f..3e2120c8 100644 --- a/AsbCloudDb/Model/DailyReportDB/DailyReportHead.cs +++ b/AsbCloudDb/Model/DailyReportDB/DailyReportHead.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudDb.Model.DailyReportDB { public class DailyReportHead { diff --git a/AsbCloudDb/Model/DailyReportDB/DailyReportSaub.cs b/AsbCloudDb/Model/DailyReportDB/DailyReportSaub.cs index 1d45aa14..77ea88f0 100644 --- a/AsbCloudDb/Model/DailyReportDB/DailyReportSaub.cs +++ b/AsbCloudDb/Model/DailyReportDB/DailyReportSaub.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudDb.Model.DailyReportDB { public class DailyReportSaub { diff --git a/AsbCloudDb/Model/DailyReportDB/DailyReportSign.cs b/AsbCloudDb/Model/DailyReportDB/DailyReportSign.cs index 31d951b0..99373e2f 100644 --- a/AsbCloudDb/Model/DailyReportDB/DailyReportSign.cs +++ b/AsbCloudDb/Model/DailyReportDB/DailyReportSign.cs @@ -1,5 +1,5 @@ using System; -namespace AsbCloudApp.Data.DailyReportModel +namespace AsbCloudDb.Model.DailyReportDB { public class DailyReportSign { diff --git a/AsbCloudDb/Model/DailyReportDB/DailyReportTimeBalance.cs b/AsbCloudDb/Model/DailyReportDB/DailyReportTimeBalance.cs new file mode 100644 index 00000000..21b7a7ee --- /dev/null +++ b/AsbCloudDb/Model/DailyReportDB/DailyReportTimeBalance.cs @@ -0,0 +1,103 @@ +using System; +namespace AsbCloudDb.Model.DailyReportDB +{ + public class DailyReportTimeBalance + { + + /// + /// Бурение + /// + 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/AsbCloudDb/Model/DailyReportInfo.cs b/AsbCloudDb/Model/DailyReportInfo.cs index 5f611f29..40833d8d 100644 --- a/AsbCloudDb/Model/DailyReportInfo.cs +++ b/AsbCloudDb/Model/DailyReportInfo.cs @@ -1,215 +1,18 @@ using System; using System.Collections.Generic; +using AsbCloudDb.Model.DailyReportDB; namespace AsbCloudDb.Model { #nullable disable public class DailyReportInfo { - /// - /// название скважины - /// - public string WellName { get; set; } - - /// - /// название куста - /// - public string ClusterName { get; set; } - - /// - /// заказчик - /// - public string Customer { get; set; } - - /// - /// подрядчик - /// - public string Contractor { get; set; } - - /// - /// дата рапорта - /// - public DateTimeOffset 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; } + public DailyReportHead HeadInfo { get; set; } + public DailyReportBha BhaDto { get; set; } + public DailyReportDimensionless DimensionlessInfo { get; set; } + public DailyReportTimeBalance TimeBalanceInfo { get; set; } + public DailyReportSaub SaubInfo { get; set; } + public DailyReportSign SignInfo { get; set; } } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/BlockAbstract.cs b/AsbCloudInfrastructure/Services/DailyReport/BlockAbstract.cs index 2a8440c3..cebcb11f 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/BlockAbstract.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/BlockAbstract.cs @@ -1,95 +1,7 @@ -using AsbCloudApp.Data.DailyReportModel; -using AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks; -using ClosedXML.Excel; -using System.Linq; +using ClosedXML.Excel; namespace AsbCloudInfrastructure.Services.DailyReport { - internal class BlockHeader : BlockAbstract - { - private readonly DailyReportHeadDto blockDto; - - public CellAddress AddressTitle { get; } - public CellAddress AddressCustomer { get; } - public CellAddress AddressDriller { get; } - public CellAddress AddressPeriod { get; } - public CellAddress AddressExampleData1 { get; } - public CellAddress[] AddressesExampleDataArray { get; } - - /// - /// Значение нижняя правая ячейка блока - /// - public override CellAddress AddressBlockBegin { get; } - - /// - /// Значение нижняя правая ячейка блока - /// - public override CellAddress AddressBlockEnd { get; } - - public BlockHeader(CellAddress addressBlockBegin, DailyReportHeadDto blockDto) - { - AddressBlockBegin = addressBlockBegin.Copy(); - - this.blockDto = blockDto; - AddressTitle = addressBlockBegin + (0, 0); - AddressCustomer = addressBlockBegin + (1,0); - AddressDriller = addressBlockBegin + (2, 0); - AddressPeriod = addressBlockBegin + (3, 0); - AddressExampleData1 = addressBlockBegin + (5, 0); - - AddressesExampleDataArray = new CellAddress[5]; - for (int i = 0; i < 5; i++) - AddressesExampleDataArray[i] = addressBlockBegin + (6 + i, 0); - - AddressBlockEnd = AddressesExampleDataArray.Last(); - } - - public override void Draw(IXLWorksheet sheet) - { - // значение в одну ячейку - sheet.Cell(AddressTitle) - ._SetValue($"Суточная сводка бурения скважины: {blockDto.WellName}, куст: {blockDto.ClusterName}") - .Style.SetH1(); - - // значение в несколько ячеек с объединением - sheet._Range(AddressCustomer, AddressCustomer + (0,7)) - ._SetValue($"Заказчик: {blockDto.Customer}"); - - sheet.Cell(AddressDriller) - ._SetValue($"Подрядчик: {blockDto.Contractor}"); - - sheet._Range(AddressExampleData1, AddressExampleData1 + (0, 4)) - ._SetValue(blockDto.BottomholeDepth); // для примера с будущей формулой - } - } - - internal class BlockWithFormula : BlockAbstract - { - private readonly HeadBlock blockHeader; - - public override CellAddress AddressBlockBegin { get; } - - public override CellAddress AddressBlockEnd { get; } - - public CellAddress AddressFomulaExample { get; set; } - - public BlockWithFormula(CellAddress addressBlockBegin, HeadBlock blockHeader) - { - AddressFomulaExample = addressBlockBegin + (0, 0); - AddressBlockBegin = addressBlockBegin.Copy(); - AddressBlockEnd = addressBlockBegin + (1, 0); - this.blockHeader = blockHeader; - } - - public override void Draw(IXLWorksheet sheet) - { - // var formula = string.Format("{0}/5", blockHeader.AddressExampleData1.ToString()); - - // sheet.Cell(AddressFomulaExample) - // .SetFormulaA1(formula); - } - } - abstract class BlockAbstract { public abstract CellAddress AddressBlockBegin { get; } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/BhaBlock.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/BhaBlock.cs index 36c1c935..7c536e04 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/BhaBlock.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/BhaBlock.cs @@ -1,5 +1,5 @@ using System; -using AsbCloudApp.Data.DailyReportModel; +using AsbCloudApp.Data.DailyReport; using ClosedXML.Excel; namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks @@ -10,24 +10,14 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks private readonly DailyReportBhaDto blockDto; public CellAddress AddressBhaDescription { get; } - public CellAddress AddressOperationTitle { get; } public CellAddress AddressDurationTitle { get; } public CellAddress AddressTotalTitle { get; } - public CellAddress[] AddressOperationData { get; } public CellAddress[] AddressDurationDataStart { get; } public CellAddress[] AddressDurationDataFinish { get; } public CellAddress[] AddressTotaData { get; } - - /// - /// Значение нижняя правая ячейка блока - /// public override CellAddress AddressBlockBegin { get; } - - /// - /// Значение нижняя правая ячейка блока - /// public override CellAddress AddressBlockEnd { get; } public BhaBlock(CellAddress addressBlockBegin, DailyReportBhaDto blockDto) @@ -40,36 +30,29 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks AddressDurationTitle = addressBlockBegin + (3, 5); AddressTotalTitle = addressBlockBegin + (3, 7); AddressOperationData = new CellAddress[5]; - AddressOperationData[0] = addressBlockBegin + (4, 0); AddressOperationData[1] = addressBlockBegin + (5, 0); AddressOperationData[2] = addressBlockBegin + (6, 0); AddressOperationData[3] = addressBlockBegin + (7, 0); AddressOperationData[4] = addressBlockBegin + (8, 0); - AddressDurationDataStart = new CellAddress[5]; AddressDurationDataStart[0] = addressBlockBegin + (4, 5); AddressDurationDataStart[1] = addressBlockBegin + (5, 5); AddressDurationDataStart[2] = addressBlockBegin + (6, 5); AddressDurationDataStart[3] = addressBlockBegin + (7, 5); AddressDurationDataStart[4] = addressBlockBegin + (8, 5); - AddressDurationDataFinish = new CellAddress[5]; AddressDurationDataFinish[0] = addressBlockBegin + (4, 6); AddressDurationDataFinish[1] = addressBlockBegin + (5, 6); AddressDurationDataFinish[2] = addressBlockBegin + (6, 6); AddressDurationDataFinish[3] = addressBlockBegin + (7, 6); AddressDurationDataFinish[4] = addressBlockBegin + (8, 6); - AddressTotaData = new CellAddress[5]; AddressTotaData[0] = addressBlockBegin + (4, 7); AddressTotaData[1] = addressBlockBegin + (5, 7); AddressTotaData[2] = addressBlockBegin + (6, 7); AddressTotaData[3] = addressBlockBegin + (7, 7); AddressTotaData[4] = addressBlockBegin + (8, 7); - - - AddressBlockEnd = AddressTotaData[4]; } @@ -83,15 +66,12 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks sheet._Range(AddressBhaDescription, AddressBhaDescription + (0, 7)) ._SetValue($"{blockDto.BHADescription}"); - - sheet._Range(AddressOperationTitle, AddressOperationTitle + (0, 4)) ._SetValue("Выполняемые операции в отчетный период, комментарии:"); sheet._Range(AddressDurationTitle, AddressDurationTitle + (0, 1)) ._SetValue("Продолжительность, ч. "); sheet.Cell(AddressTotalTitle) ._SetValue("Итого"); - sheet._Range(AddressOperationData[0], AddressOperationData[0] + (0, 4)) ._SetValue("Бурение с наращиваниями в инт. 2195-2763м."); sheet.Cell(AddressDurationDataStart[0]) @@ -100,7 +80,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.ExtensionDrillingOneFinish}"); sheet.Cell(AddressTotaData[0]) .SetFormulaA1($"{FormulaBhaBlock(AddressDurationDataStart[0], AddressDurationDataFinish[0])}"); - sheet._Range(AddressOperationData[1], AddressOperationData[1] + (0, 4)) ._SetValue("Промывка."); sheet.Cell(AddressDurationDataStart[1]) @@ -109,7 +88,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.SluiceBegin}"); sheet.Cell(AddressTotaData[1]) .SetFormulaA1($"{FormulaBhaBlock(AddressDurationDataStart[1], AddressDurationDataFinish[1])}"); - sheet._Range(AddressOperationData[2], AddressOperationData[2] + (0, 4)) ._SetValue("Подъем КНБК в инт. 2763-2442м."); sheet.Cell(AddressDurationDataStart[2]) @@ -118,7 +96,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.ClimbFinish}"); sheet.Cell(AddressTotaData[2]) .SetFormulaA1($"{FormulaBhaBlock(AddressDurationDataStart[2], AddressDurationDataFinish[2])}"); - sheet._Range(AddressOperationData[3], AddressOperationData[3] + (0, 4)) ._SetValue("Спуск КНБК в инт. 2442-2763м."); sheet.Cell(AddressDurationDataStart[3]) @@ -127,7 +104,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.DescentFinish}"); sheet.Cell(AddressTotaData[3]) .SetFormulaA1($"{FormulaBhaBlock(AddressDurationDataStart[3], AddressDurationDataFinish[3])}"); - sheet._Range(AddressOperationData[4], AddressOperationData[4] + (0, 4)) ._SetValue("Бурение с наращиваниями в инт. 2763-2850м."); sheet.Cell(AddressDurationDataStart[4]) @@ -136,8 +112,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.ExtensionDrillingTwoFinish}"); sheet.Cell(AddressTotaData[4]) .SetFormulaA1($"{FormulaBhaBlock(AddressDurationDataStart[4], AddressDurationDataFinish[4])}"); - - } } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/DimensionlessBlock.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/DimensionlessBlock.cs index d72f977a..afe7053a 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/DimensionlessBlock.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/DimensionlessBlock.cs @@ -1,5 +1,5 @@ using System; -using AsbCloudApp.Data.DailyReportModel; +using AsbCloudApp.Data.DailyReport; using ClosedXML.Excel; namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks @@ -9,50 +9,106 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks { private readonly DailyReportDimensionlessDto blockDto; - public CellAddress AddressBhaDescription { get; } - - - public CellAddress[] AddressPeriodTableDataArray { get; } - - /// - /// Значение нижняя правая ячейка блока - /// + private readonly SaubBlock saubBlock; + public CellAddress AddressDimensionTitle { get; } + public CellAddress AddressPreparationTitle { get; } + public CellAddress AddressExtensionTitle { get; } + public CellAddress AddressPreparationDescription { get; } + public CellAddress AddressExtensionDescription { get; } + public CellAddress[] AddressPreparationHead { get; } + public CellAddress[] AddressPreparationValue { get; } + public CellAddress[] AddressExtensionHead { get; } + public CellAddress[] AddressExtensionValue { get; } + public CellAddress AddressBlockFormula { get; } public override CellAddress AddressBlockBegin { get; } - - /// - /// Значение нижняя правая ячейка блока - /// public override CellAddress AddressBlockEnd { get; } - public DimensionlessBlock(CellAddress addressBlockBegin, DailyReportDimensionlessDto blockDto) { AddressBlockBegin = addressBlockBegin.Copy(); this.blockDto = blockDto; - AddressBhaDescription = addressBlockBegin + (0, 0); + AddressDimensionTitle = addressBlockBegin + (2, 3); + AddressPreparationTitle = addressBlockBegin + (3, 1); + AddressExtensionTitle = addressBlockBegin + (3, 4); + AddressPreparationHead = new CellAddress[4]; + AddressPreparationHead[0] = addressBlockBegin + (4, 1); + AddressPreparationHead[1] = addressBlockBegin + (5, 1); + AddressPreparationHead[2] = addressBlockBegin + (6, 1); + AddressPreparationHead[3] = addressBlockBegin + (7, 1); + AddressPreparationValue = new CellAddress[4]; + AddressPreparationValue[0] = addressBlockBegin + (4, 3); + AddressPreparationValue[1] = addressBlockBegin + (5, 3); + AddressPreparationValue[2] = addressBlockBegin + (6, 3); + AddressPreparationValue[3] = addressBlockBegin + (7, 3); + AddressPreparationDescription = addressBlockBegin + (8, 1); + AddressExtensionHead = new CellAddress[4]; + AddressExtensionHead[0] = addressBlockBegin + (4, 4); + AddressExtensionHead[1] = addressBlockBegin + (5, 4); + AddressExtensionHead[2] = addressBlockBegin + (6, 4); + AddressExtensionHead[3] = addressBlockBegin + (7, 4); + AddressExtensionValue = new CellAddress[4]; + AddressExtensionValue[0] = addressBlockBegin + (4, 6); + AddressExtensionValue[1] = addressBlockBegin + (5, 6); + AddressExtensionValue[2] = addressBlockBegin + (6, 6); + AddressExtensionValue[3] = addressBlockBegin + (7, 6); + AddressExtensionDescription = addressBlockBegin + (8, 4); + AddressBlockEnd = addressBlockBegin + (9,0); + } - //AddressExampleData1 = addressBlockBegin + (5, 0); + private string FormulaBlockPlan(CellAddress cellTarget) + { + return $"={cellTarget}/60*{saubBlock.AddressBhaWithFormula}"; + } - - - //AddressBlockEnd = AddressesExampleDataArray.Last(); + private string FormulaBlockExcess(CellAddress cellFact, CellAddress cellPlan) + { + return $"={cellFact}-{cellPlan}"; } public override void Draw(IXLWorksheet sheet) { - // sheet.Range(AddressBhaDescription, AddressBhaDescription + (0, 7)) - // ._SetValue($"{blockDto.BHADescription}"); - - - - - - - - - - // sheet._Range(AddressExampleData1, AddressExampleData1 + (0, 4)) - // ._SetValue(blockDto.BottomholeDepth); // для примера с будущей формулой + sheet._Range(AddressDimensionTitle, AddressDimensionTitle + (0, 1)) + ._SetValue("БЕЗМЕТРАЖНЫЕ РАБОТЫ"); + sheet._Range(AddressPreparationTitle, AddressPreparationTitle + (0, 2)) + ._SetValue("Подготовка ствола скв. к наращиванию"); + sheet._Range(AddressExtensionTitle, AddressExtensionTitle + (0, 2)) + ._SetValue("Наращивание"); + sheet._Range(AddressPreparationHead[0], AddressPreparationHead[0] + (0, 1)) + ._SetValue("Норматив на одну операцию, (мин):"); + sheet.Cell(AddressPreparationValue[0]) + ._SetValue($"{blockDto.StandardTimeBarrelPreparation}"); + sheet._Range(AddressPreparationHead[1], AddressPreparationHead[1] + (0, 1)) + ._SetValue("Проработка при бур, план (ч):"); + sheet.Cell(AddressPreparationValue[1]) + .SetFormulaA1($"{FormulaBlockPlan(AddressPreparationValue[0])}"); + sheet._Range(AddressPreparationHead[2], AddressPreparationHead[2] + (0, 1)) + ._SetValue("Проработка при бур, факт (ч):"); + sheet.Cell(AddressPreparationValue[2]) + ._SetValue($"{blockDto.StandardTimeExtension}"); + sheet._Range(AddressPreparationHead[3], AddressPreparationHead[3] + (0, 1)) + ._SetValue("Превышение плановых норм, (ч):"); + sheet.Cell(AddressPreparationValue[3]) + .SetFormulaA1($"{FormulaBlockExcess(AddressPreparationValue[2], AddressPreparationValue[1])}"); + sheet._Range(AddressExtensionHead[0], AddressExtensionHead[0] + (0, 1)) + ._SetValue("Норматив на одну операцию, (мин):"); + sheet.Cell(AddressExtensionValue[0]) + ._SetValue($"{blockDto.StandardTimeExtension}"); + sheet._Range(AddressExtensionHead[1], AddressExtensionHead[1] + (0, 1)) + ._SetValue("Наращивание, план (ч):"); + sheet.Cell(AddressExtensionValue[1]) + .SetFormulaA1($"{FormulaBlockPlan(AddressExtensionValue[0])}"); + sheet._Range(AddressExtensionHead[2], AddressExtensionHead[2] + (0, 1)) + ._SetValue("Наращивание, факт (ч):"); + sheet.Cell(AddressExtensionValue[2]) + ._SetValue($"{blockDto.ActualTimeExtension}"); + sheet._Range(AddressExtensionHead[3], AddressExtensionHead[3] + (0, 1)) + ._SetValue("Превышение плановых норм, (ч):"); + sheet.Cell(AddressExtensionValue[3]) + .SetFormulaA1($"{FormulaBlockExcess(AddressExtensionValue[2], AddressExtensionValue[1])}"); + sheet._Range(AddressPreparationDescription, AddressPreparationDescription + (1, 2)) + ._SetValue("Подготовка ствола скв. к наращиванию"); + sheet._Range(AddressExtensionDescription, AddressExtensionDescription + (1, 2)) + ._SetValue("Наращивание"); } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/HeadBlock.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/HeadBlock.cs index 28c0c688..adce76aa 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/HeadBlock.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/HeadBlock.cs @@ -1,7 +1,5 @@ -using AsbCloudApp.Data.DailyReportModel; -using AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks; +using AsbCloudApp.Data.DailyReport; using ClosedXML.Excel; -using System.Linq; namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks { @@ -20,39 +18,21 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks public CellAddress AddressDrillerOne { get; } public CellAddress AddressDrillerTwoTitle { get; } public CellAddress AddressDrillerTwo { get; } - public CellAddress AddressWorkSaubTitle { get; } public CellAddress AddressWatchTitle { get; } public CellAddress AddressMetreTitle { get; } - public CellAddress[] AddressWorkSaubData { get; } public CellAddress[] AddressWatchData { get; } public CellAddress[] AddressMetreData { get; } - - - public CellAddress[] AddressPeriodTableHeadArray { get; } public CellAddress[] AddressPeriodTableDataArray { get; } - public CellAddress[] AddressTrajectoryTableHeadArray { get; } public CellAddress[] AddressTrajectoryTableDataArray { get; } - /// - /// Значение нижняя правая ячейка блока - /// public override CellAddress AddressBlockBegin { get; } - - /// - /// Значение нижняя правая ячейка блока - /// - public override CellAddress AddressBlockEnd { get; } - public void WriteRowToArray(CellAddress[] cellsArray, CellAddress startCells) - { - - } + public override CellAddress AddressBlockEnd { get; } public HeadBlock(CellAddress addressBlockBegin, DailyReportHeadDto blockDto) { AddressBlockBegin = addressBlockBegin.Copy(); - this.blockDto = blockDto; AddressTitle = addressBlockBegin + (0, 0); AddressCustomer = addressBlockBegin + (1, 0); @@ -87,24 +67,20 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks AddressWorkSaubTitle = addressBlockBegin + (15, 0); AddressWatchTitle = addressBlockBegin + (15, 3); AddressMetreTitle = addressBlockBegin + (15, 4); - AddressWorkSaubData = new CellAddress[4]; AddressWorkSaubData[0] = addressBlockBegin + (16, 0); AddressWorkSaubData[1] = addressBlockBegin + (17, 0); AddressWorkSaubData[2] = addressBlockBegin + (18, 0); AddressWorkSaubData[3] = addressBlockBegin + (19, 0); - AddressWatchData = new CellAddress[4]; AddressWatchData[0] = addressBlockBegin + (16, 3); AddressWatchData[1] = addressBlockBegin + (17, 3); AddressWatchData[2] = addressBlockBegin + (18, 3); AddressWatchData[3] = addressBlockBegin + (19, 3); - AddressMetreData = new CellAddress[4]; AddressMetreData[0] = addressBlockBegin + (16, 4); AddressMetreData[1] = addressBlockBegin + (17, 4); AddressMetreData[2] = addressBlockBegin + (18, 4); - AddressBlockEnd = AddressWatchData[3]+(0,1); } @@ -114,22 +90,17 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks sheet._Range(AddressTitle, AddressTitle + (0, 7)) ._SetValue($"Суточная сводка бурения скважины: {blockDto.WellName}, куст: {blockDto.ClusterName}") - .Style.SetH1(); - + .Style.SetH1(); sheet._Range(AddressCustomer, AddressCustomer + (0, 7)) ._SetValue($"Заказчик: {blockDto.Customer}") .Style.SetH1(); - sheet._Range(AddressDriller, AddressDriller + (0, 7)) ._SetValue($"Подрядчик: {blockDto.Contractor}") .Style.SetH1(); - sheet._Range(AddressPeriod, AddressPeriod + (0, 3)) ._SetValue("Отчетный период"); - sheet._Range(AddressSlaughter, AddressSlaughter + (0, 3)) ._SetValue("Забой за отчетный период, м"); - sheet._Range(AddressPeriodTableHeadArray[0], AddressPeriodTableHeadArray[0] + (0, 1)) ._SetValue("От (дата, время)"); sheet._Range(AddressPeriodTableHeadArray[1], AddressPeriodTableHeadArray[1] + (0, 1)) @@ -138,19 +109,17 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue("От"); sheet._Range(AddressPeriodTableHeadArray[3], AddressPeriodTableHeadArray[3] + (0, 1)) ._SetValue("До"); - sheet._Range(AddressPeriodTableDataArray[0], AddressPeriodTableDataArray[0] + (0, 1)) ._SetValue($"{blockDto.ReportDate}"); - sheet._Range(AddressPeriodTableDataArray[1], AddressPeriodTableDataArray[1] + (0, 1)) - ._SetValue("До (дата, время)"); + sheet._Range(AddressPeriodTableDataArray[1], AddressPeriodTableDataArray[1] + (0, 1)); + sheet.Cell(AddressPeriodTableDataArray[1]) + .SetFormulaA1($"={AddressPeriodTableDataArray[0].ToString()}-1"); sheet._Range(AddressPeriodTableDataArray[2], AddressPeriodTableDataArray[2] + (0, 1)) ._SetValue($"{blockDto.WellDepthIntervalStartDate}"); sheet._Range(AddressPeriodTableDataArray[3], AddressPeriodTableDataArray[3] + (0, 1)) ._SetValue($"{blockDto.WellDepthIntervalFinishDate}"); - sheet._Range(AddressTrajectoryTableTitle, AddressTrajectoryTableTitle + (0, 7)) ._SetValue("Данные по траектории скважины на конец суток"); - sheet._Range(AddressTrajectoryTableHeadArray[0], AddressTrajectoryTableHeadArray[0] + (0, 1)) ._SetValue("Глубина по стволу"); sheet._Range(AddressTrajectoryTableHeadArray[1], AddressTrajectoryTableHeadArray[1] + (0, 1)) @@ -159,7 +128,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue("Зенитный угол"); sheet._Range(AddressTrajectoryTableHeadArray[3], AddressTrajectoryTableHeadArray[3] + (0, 1)) ._SetValue("Азимут"); - sheet._Range(AddressTrajectoryTableDataArray[0], AddressTrajectoryTableDataArray[0] + (0, 1)) ._SetValue($"{blockDto.BottomholeDepth}"); sheet._Range(AddressTrajectoryTableDataArray[1], AddressTrajectoryTableDataArray[1] + (0, 1)) @@ -168,7 +136,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.ZenithAngle}"); sheet._Range(AddressTrajectoryTableDataArray[3], AddressTrajectoryTableDataArray[3] + (0, 1)) ._SetValue($"{blockDto.AzimuthAngle}"); - sheet._Range(AddressDrillerOneTitle, AddressDrillerOneTitle + (0, 1)) ._SetValue("Бурильщик 1 смена"); sheet._Range(AddressDrillerOne, AddressDrillerOne + (0, 1)) @@ -177,40 +144,34 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue("Бурильщик 2 смена"); sheet._Range(AddressDrillerTwo, AddressDrillerTwo + (0, 1)) ._SetValue($"{blockDto.SecondDriller}"); - sheet._Range(AddressWorkSaubTitle, AddressWorkSaubTitle + (0, 2)) ._SetValue("Работа модулей САУБ:"); sheet.Cell(AddressWatchTitle) ._SetValue("Часов:"); sheet.Cell(AddressMetreTitle) ._SetValue("Метров:"); - sheet._Range(AddressWorkSaubData[0], AddressWorkSaubData[0] + (0, 2)) ._SetValue("АПД (автоматическая подача долота), ч/м:"); sheet.Cell(AddressWatchData[0]) ._SetValue($"{blockDto.WorkTimeSAUB}"); sheet.Cell(AddressMetreData[0]) ._SetValue($"{blockDto.PenetrationSAUB}"); - sheet._Range(AddressWorkSaubData[1], AddressWorkSaubData[1] + (0, 2)) ._SetValue("Спин Мастер (осцилляция),ч/м:"); sheet.Cell(AddressWatchData[1]) ._SetValue($"{blockDto.WorkTimeSpinMaster}"); sheet.Cell(AddressMetreData[1]) ._SetValue($"{blockDto.PenetrationTorkMaster}"); - sheet._Range(AddressWorkSaubData[2], AddressWorkSaubData[2] + (0, 2)) ._SetValue("Торк Мастер (демпфирование), ч/:"); sheet.Cell(AddressWatchData[2]) ._SetValue($"{blockDto.WorkTimeTorkMaster}"); sheet.Cell(AddressMetreData[2]) ._SetValue($"{blockDto.PenetrationTorkMaster}"); - sheet._Range(AddressWorkSaubData[3], AddressWorkSaubData[3] + (0, 2)) ._SetValue("МСЕ, колличество запусков, раз:"); sheet._Range(AddressWatchData[3], AddressWatchData[3] + (0, 1)) ._SetValue($"{blockDto.CountLaunchesMSE}"); - } } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SaubBlock.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SaubBlock.cs index 9e7508fe..ec3ae8ea 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SaubBlock.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SaubBlock.cs @@ -1,5 +1,5 @@ using System; -using AsbCloudApp.Data.DailyReportModel; +using AsbCloudApp.Data.DailyReport; using ClosedXML.Excel; namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks @@ -9,7 +9,7 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks { private readonly DailyReportSaubDto blockDto; - public CellAddress AddressBhaDescription { get; } + public CellAddress AddressBhaWithFormula { get; } public CellAddress[] AddressPeriodTableDataArray { get; } @@ -28,7 +28,7 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks { AddressBlockBegin = addressBlockBegin.Copy(); this.blockDto = blockDto; - AddressBhaDescription = addressBlockBegin + (0, 0); + AddressBhaWithFormula = addressBlockBegin + (0, 0); //AddressExampleData1 = addressBlockBegin + (5, 0); diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SignBlock.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SignBlock.cs index 5fb02b9b..7ed0347f 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SignBlock.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/SignBlock.cs @@ -1,5 +1,5 @@ using System; -using AsbCloudApp.Data.DailyReportModel; +using AsbCloudApp.Data.DailyReport; using ClosedXML.Excel; namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks @@ -13,16 +13,8 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks public CellAddress AddressDrillMaster { get; } public CellAddress AddressSupervisorHead { get; } public CellAddress AddressSupervisor { get; } - public CellAddress[] AddressPeriodTableDataArray { get; } - - /// - /// Значение нижняя правая ячейка блока - /// - public override CellAddress AddressBlockBegin { get; } - - /// - /// Значение нижняя правая ячейка блока - /// + public CellAddress[] AddressPeriodTableDataArray { get; } + public override CellAddress AddressBlockBegin { get; } public override CellAddress AddressBlockEnd { get; } public SignBlock(CellAddress addressBlockBegin, DailyReportSignDto blockDto) @@ -38,7 +30,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks public override void Draw(IXLWorksheet sheet) { - sheet.Range(AddressDrillMasterHead, AddressDrillMasterHead + (0, 2)) ._SetValue("Мастер буровой "); sheet.Range(AddressDrillMaster, AddressDrillMaster + (0, 2)) @@ -47,7 +38,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue("Супервайзер "); sheet.Range(AddressSupervisor, AddressSupervisor + (0, 2)) ._SetValue($"{blockDto.Supervisor}"); - } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/TimeBalanceBlock.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/TimeBalanceBlock.cs index 0a3bef43..788dc3ec 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/TimeBalanceBlock.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportBlocks/TimeBalanceBlock.cs @@ -17,55 +17,38 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks public CellAddress AddressElaboration { get; set; } public CellAddress AddressExtension { get; set; } public CellAddress AddressRepair { get; set; } - public CellAddress AddressDrillingValue { get; set; } public CellAddress AddressFlushingValue { get; set; } public CellAddress AddressBuildingValue { get; set; } public CellAddress AddressElaborationValue { get; set; } public CellAddress AddressExtensionValue { get; set; } public CellAddress AddressRepairValue { get; set; } - public CellAddress AddressKnbk { get; set; } public CellAddress AddressSpo { get; set; } public CellAddress AddressPzr { get; set; } public CellAddress AddressPvo { get; set; } public CellAddress AddressPgr { get; set; } public CellAddress AddressGis { get; set; } - public CellAddress AddressKnbkValue { get; set; } public CellAddress AddressSpoValue { get; set; } public CellAddress AddressPzrValue { get; set; } public CellAddress AddressPvoValue { get; set; } public CellAddress AddressPgrValue { get; set; } public CellAddress AddressGisValue { get; set; } - - - public CellAddress AddressOzc { get; set; } public CellAddress AddressEngineeringWorks { get; set; } public CellAddress AddressTakingMeasure { get; set; } public CellAddress AddressCementing { get; set; } public CellAddress AddressSimple { get; set; } public CellAddress AddressNpv { get; set; } - public CellAddress AddressOzcValue { get; set; } public CellAddress AddressEngineeringWorksValue { get; set; } public CellAddress AddressTakingMeasureValue { get; set; } public CellAddress AddressCementingValue { get; set; } public CellAddress AddressSimpleValue { get; set; } public CellAddress AddressNpvValue { get; set; } - - public CellAddress[] AddressPeriodTableDataArray { get; } - - /// - /// Значение нижняя правая ячейка блока - /// public override CellAddress AddressBlockBegin { get; } - - /// - /// Значение нижняя правая ячейка блока - /// public override CellAddress AddressBlockEnd { get; } public TimeBalanceBlock(CellAddress addressBlockBegin, DailyReportTimeBalanceDto blockDto) @@ -73,49 +56,42 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks AddressBlockBegin = addressBlockBegin.Copy(); this.blockDto = blockDto; AddressTitle = addressBlockBegin + (3, 0); - AddressDrilling = addressBlockBegin + (4, 1); AddressFlushing = addressBlockBegin + (5, 1); AddressBuilding = addressBlockBegin + (6, 1); AddressElaboration = addressBlockBegin + (7, 1); AddressExtension = addressBlockBegin + (8, 1); AddressRepair = addressBlockBegin + (9, 1); - AddressDrillingValue = addressBlockBegin + (4, 2); AddressFlushingValue = addressBlockBegin + (5, 2); AddressBuildingValue = addressBlockBegin + (6, 2); AddressElaborationValue = addressBlockBegin + (7, 2); AddressExtensionValue = addressBlockBegin + (8, 2); AddressRepairValue = addressBlockBegin + (9, 2); - AddressKnbk = addressBlockBegin + (4, 3); AddressSpo = addressBlockBegin + (5, 3); AddressPzr = addressBlockBegin + (6, 3); AddressPvo = addressBlockBegin + (7, 3); AddressPgr = addressBlockBegin + (8, 3); AddressGis = addressBlockBegin + (9, 3); - AddressKnbkValue = addressBlockBegin + (4, 4); AddressSpoValue = addressBlockBegin + (5, 4); AddressPzrValue = addressBlockBegin + (6, 4); AddressPvoValue = addressBlockBegin + (7, 4); AddressPgrValue = addressBlockBegin + (8, 4); AddressGisValue = addressBlockBegin + (9, 4); - AddressOzc = addressBlockBegin + (4, 5); AddressEngineeringWorks = addressBlockBegin + (5, 5); AddressTakingMeasure = addressBlockBegin + (6, 5); AddressCementing = addressBlockBegin + (7, 5); AddressSimple = addressBlockBegin + (8, 5); AddressNpv = addressBlockBegin + (9, 5); - AddressOzcValue = addressBlockBegin + (4, 6); AddressEngineeringWorksValue = addressBlockBegin + (5, 6); AddressTakingMeasureValue = addressBlockBegin + (6, 6); AddressCementingValue = addressBlockBegin + (7, 6); AddressSimpleValue = addressBlockBegin + (8, 6); AddressNpvValue = addressBlockBegin + (9, 6); - AddressBlockEnd = AddressNpvValue; } @@ -124,7 +100,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks sheet._Range(AddressTitle, AddressTitle + (0, 1)) ._SetValue("БАЛАНС ВРЕМЕНИ"); - sheet.Cell(AddressDrilling) ._SetValue("Бурение"); sheet.Cell(AddressFlushing) @@ -149,7 +124,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.Extension}"); sheet.Cell(AddressRepairValue) ._SetValue($"{blockDto.Repair}"); - sheet.Cell(AddressKnbk) ._SetValue("КНБК"); sheet.Cell(AddressSpo) @@ -174,7 +148,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.Pgr}"); sheet.Cell(AddressGisValue) ._SetValue($"{blockDto.Gis}"); - sheet.Cell(AddressOzc) ._SetValue("ОЗЦ"); sheet.Cell(AddressEngineeringWorks) @@ -199,16 +172,6 @@ namespace AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks ._SetValue($"{blockDto.Simple}"); sheet.Cell(AddressNpvValue) ._SetValue($"{blockDto.Npv}"); - - - - - - - - - - } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportMakerExcel.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportMakerExcel.cs index 0fabf266..e9276b05 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportMakerExcel.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportMakerExcel.cs @@ -1,6 +1,5 @@ using AsbCloudApp.Data; using AsbCloudApp.Data.DailyReport; -using AsbCloudApp.Data.DailyReportModel; using AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks; using ClosedXML.Excel; using System; @@ -11,1029 +10,48 @@ namespace AsbCloudInfrastructure.Services.DailyReport { public class DailyReportMakerExcel { - - - // черновик реализации отчета "по блокам" - - public Stream MakeReportFromBlocks(DailyReportHeadDto blockHead, DailyReportBhaDto blockBha, DailyReportTimeBalanceDto blockBalance ,DailyReportDimensionlessDto blockDimensionless, DailyReportSaubDto blockSaub, DailyReportSignDto blockSign) + public Stream MakeReportFromBlocks(DailyReportDto dto) { using var workbook = new XLWorkbook(); - FillExampleBlocks(workbook, blockHead, blockBha, blockBalance); - //FillSheet6blocks(workbook, blockHead, blockBha, blockDimensionless, blockSaub, blockSign); + FillExampleBlocks(workbook, dto); MemoryStream memoryStream = new MemoryStream(); workbook.SaveAs(memoryStream, new SaveOptions { }); memoryStream.Seek(0, SeekOrigin.Begin); return memoryStream; } - private void FillExampleBlocks(XLWorkbook workbook, DailyReportHeadDto blockHeadDto, DailyReportBhaDto blockBhaDto, DailyReportTimeBalanceDto timeBalanceDto) + private void FillExampleBlocks(XLWorkbook workbook, DailyReportDto dto) { - var sheet = workbook.Worksheets.Add(blockHeadDto.ReportDate.ToString("dd.MM.yyyy")); + var sheet = workbook.Worksheets.Add(dto.HeadDto.ReportDate.ToString("dd.MM.yyyy")); var addressStart = new CellAddress(sheet, 1, 1); - var blockHeader = new HeadBlock(addressStart, blockHeadDto); + var blockHeader = new HeadBlock(addressStart, dto.HeadDto); addressStart = blockHeader.AddressBlockEnd + (1, 0); - var blockBha = new BhaBlock(addressStart, blockBhaDto); + addressStart.ColumnNumber = 0; + var blockBha = new BhaBlock(addressStart, dto.BhaDto); addressStart = blockBha.AddressBlockEnd + (1, 0); - var timeBalance = new TimeBalanceBlock(addressStart, timeBalanceDto); + addressStart.ColumnNumber = 0; + var timeBalance = new TimeBalanceBlock(addressStart, dto.TimeBalanceDto); + addressStart = timeBalance.AddressBlockEnd + (1, 0); + addressStart.ColumnNumber = 0; + var blockDimensionless = new DimensionlessBlock(addressStart, dto.DimensionlessDto); + addressStart = blockDimensionless.AddressBlockEnd + (1, 0); + addressStart.ColumnNumber = 0; + var blockSign = new SignBlock(addressStart, dto.SignDto); + addressStart = blockSign.AddressBlockEnd + (1, 0); + addressStart.ColumnNumber = 0; + blockHeader.Draw(sheet); blockBha.Draw(sheet); timeBalance.Draw(sheet); - //blockWithFormula.Draw(sheet); - } - - private String converteCellCoordinate(int row, bool isCaps, int column) - { - var c = (Char)((isCaps ? 65 : 97) + (column - 1)); - string convertColumn = c.ToString(); - return $"{convertColumn}{row}"; - } - - private string FormulaBhaBlock((int row, int col) tuple) - { - return $"IF({converteCellCoordinate(tuple.row, true, tuple.col - 1)}>0,({converteCellCoordinate(tuple.row, true, tuple.col - 1)}-{converteCellCoordinate(tuple.row, true, tuple.col - 2)})*24, \"\")"; - } - - private string FormulaMechanicalSpeed((int row, int col) tuple) - { - return $"=IF({converteCellCoordinate(tuple.row, true, tuple.col - 2)}>0," + - $"{converteCellCoordinate(tuple.row, true, tuple.col - 4)}/{converteCellCoordinate(tuple.row, true, tuple.col - 2)},0)"; - } - - private string FormulaDrillingWatch((int row, int col) tuple) - { - return $"=IF({converteCellCoordinate(tuple.row - 8, true, tuple.col)}+" + - $"{converteCellCoordinate(tuple.row - 4, true, tuple.col)}"; - } - - private string FormulaSinking((int row, int col) tuple) - { - return $"=IF(({converteCellCoordinate(tuple.row - 4, true, tuple.col)}+{converteCellCoordinate(tuple.row - 8, true, tuple.col)})" + - $"<>({converteCellCoordinate(tuple.row - 54, true, tuple.col + 6)}-{converteCellCoordinate(tuple.row - 54, true, tuple.col + 4)}),\"ОШИБКА\"" + - $",{converteCellCoordinate(tuple.row - 4, true, tuple.col)}+{converteCellCoordinate(tuple.row - 8, true, tuple.col)})"; - } - - public void FillSheet6blocks(XLWorkbook workbook, DailyReportHeadDto blockHead, DailyReportBhaDto blockBha, DailyReportDimensionlessDto blockDimensionless, DailyReportSaubDto blockSaub, DailyReportSignDto blockSign) - { - var sheet = workbook.Worksheets.Add(blockHead.ReportDate.ToString("dd.MM.yyyy")); - sheet.Style.Font.FontName = "TimesNewRoman"; - sheet.Style.Font.FontSize = 10; - var tuple = (row: 3, column: 3); - tuple = (AddBlockHead1(sheet, blockHead,(tuple.row,tuple.column))); - tuple = AddBlockBha(sheet, blockBha, tuple); - tuple = AddBlockTimeBalance(sheet, tuple); - tuple = AddBlockDimensionless(sheet, blockDimensionless, tuple); - tuple = AddBlockSaub(sheet, blockSaub, tuple); - tuple = AddBlockSign(sheet, blockSign, tuple); - } - - private (int row, int column) AddBlockHead1(IXLWorksheet sheet, DailyReportHeadDto blockDto, (int row, int column) tupleStart) - { - var tuple = (row: tupleStart.row, column: tupleStart.column); - sheet.Cell(tuple.row, tuple.column).Value = - $"Суточная сводка бурения скважины: {blockDto.WellName}, куст: {blockDto.ClusterName}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge(); - tuple.row += 1; - sheet.Cell(tuple.row, tuple.column).Value = - $"Заказчик: {blockDto.Customer}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge(); - tuple.row += 1; - sheet.Cell(tuple.row, tuple.column).Value = - $"Подрядчик: {blockDto.Contractor}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge(); - tuple.row += 2; - //7,3 - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Отчетный период"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - sheet.Cell(tuple.row, tuple.column + 3).Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Забой за отчетный период, м"); - tuple.column = tupleStart.column; - tuple.row += 1; - //8,3 - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "От (дата, время)"); - tuple.column += 2; //8,5 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "До (дата, время)"); - tuple.column += 2; //8,7 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "От"); - tuple.column += 2; //8,9 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "До"); - sheet.Cell(tuple.row, tuple.column + 1).Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.column = tupleStart.column; - tuple.row += 1; //9,3 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.ReportDate}"); - tuple.column += 2; - //согласно формуле в шаблоне - ячейка С9 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = $"={converteCellCoordinate(tuple.row, true, tuple.column - 2)}-1"; - SetDateTime(sheet.Cell(tuple.row, tuple.column)); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.WellDepthIntervalStartDate}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.WellDepthIntervalFinishDate}"); - tuple.column = tupleStart.column; - tuple.row += 2; //11,3 - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Данные по траектории скважины на конец суток"); - tuple.column = tupleStart.column; - tuple.row += 1;//12 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Глубина по стволу"); - tuple.column += 2; //12,5 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Глубина по вертикали"); - tuple.column += 2; //12,7 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Зенитный угол"); - tuple.column += 2; //12,9 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Азимут"); - tuple.column = tupleStart.column; - tuple.row += 1; //13,3 - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.BottomholeDepth}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.VerticalDepth}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.ZenithAngle}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.AzimuthAngle}"); - tuple.column = tupleStart.column; - tuple.row += 2; //15,3 - sheet.Cell(tuple.row, tuple.column).Value = "Бурильщик 1 смена"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.column += 2; - sheet.Cell(tuple.row, tuple.column).Value = $"{blockDto.FirstDriller}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Cell(tuple.row, tuple.column).Value = "Бурильщик 2 смена"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.column += 2; - sheet.Cell(tuple.row, tuple.column).Value = $"{blockDto.SecondDriller}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.row += 2; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Работа модулей САУБ:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row), tuple.column, "Часов:"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "Метров:").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "АПД (автоматическая подача долота), ч/м:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.WorkTimeSAUB}"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.PenetrationSAUB}").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Спин Мастер (осцилляция),ч/м:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.WorkTimeSpinMaster}"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.PenetrationSpinMaster}").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Торк Мастер (демпфирование), ч/:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.WorkTimeTorkMaster}"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.PenetrationTorkMaster}").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "МСЕ, колличество запусков, раз:"); - tuple.column += 3; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.CountLaunchesMSE}"); - tuple.column += 2; - return tuple; - } - - - private (int row, int column) AddBlockBha(IXLWorksheet sheet, DailyReportBhaDto blockDto, (int row, int column) tupleStart) - { - tupleStart.column = 3; - tupleStart.row += 1; - var tuple = (row: tupleStart.row, column: tupleStart.column); + blockDimensionless.Draw(sheet); + blockSign.Draw(sheet); + - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.BHADescription}"); - tuple.row += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 4).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Выполняемые операции в отчетный период, комментарии:"); - tuple.column += 5; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Продолжительность, ч. "); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, "Итого").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.column = tupleStart.column; - tuple.row += 1; - - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 4).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Бурение с наращиваниями в инт. 2195-2763м."); - tuple.column += 5; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:00:00"); - tuple.column += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:30:00"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column) - .FormulaR1C1 = FormulaBhaBlock(tuple); - tuple.column = tupleStart.column; - tuple.row += 1; - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 4).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Промывка."); - tuple.column += 5; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:00:00"); - tuple.column += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:30:00"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column) - .FormulaR1C1 = FormulaBhaBlock(tuple); - tuple.column = tupleStart.column; - tuple.row += 1; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 4).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Подъем КНБК в инт. 2763-2442м."); - tuple.column += 5; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:00:00"); - tuple.column += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:30:00"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column) - .FormulaR1C1 = FormulaBhaBlock(tuple); - tuple.column = tupleStart.column; - tuple.row += 1; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 4).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Спуск КНБК в инт. 2442-2763м."); - tuple.column += 5; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:00:00"); - tuple.column += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:30:00"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column) - .FormulaR1C1 = FormulaBhaBlock(tuple); - tuple.column = tupleStart.column; - tuple.row += 1; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 4).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Бурение с наращиваниями в инт. 2763-2850м."); - tuple.column += 5; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:00:00"); - tuple.column += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "17:30:00"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column) - .FormulaR1C1 = FormulaBhaBlock(tuple); - - return tuple; } - - private (int row, int column) AddBlockTimeBalance(IXLWorksheet sheet, (int row, int column) tupleStart) - { - tupleStart.column = 4; - tupleStart.row += 2; - var tuple = (row: tupleStart.row, column: tupleStart.column); - - sheet.Cell(tuple.row, tuple.column + 2).Value = - "БАЛАНС ВРЕМЕНИ"; - sheet.Range(tuple.row, tuple.column + 2, tuple.row, tuple.column + 3).Merge(); - tuple.row += 1; - - - SetCell(sheet.Row(tuple.row), tuple.column, "Бурение"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "КНБК"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "ОЗЦ"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "Промывка"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "СПО"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "Тех. работы"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "Наращивание"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "ПЗР"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "Снятие замера"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "Расширка"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "ПГР"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "Простой"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - - SetCell(sheet.Row(tuple.row), tuple.column, "Ремонт"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "ГИС"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, "НПВ"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - return tuple; - } - - private (int row, int column) AddBlockDimensionless(IXLWorksheet sheet, DailyReportDimensionlessDto blockDto, (int row, int column) tupleStart) - { - - tupleStart.column = 4; - tupleStart.row += 2; - var tuple = (row: tupleStart.row, column: tupleStart.column); - - sheet.Cell(tuple.row, tuple.column).Value = - "БЕЗМЕТРАЖНЫЕ РАБОТЫ"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 5).Merge(); - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Подготовка ствола скв. к наращиванию"); - tuple.column += 3; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Наращивание"); - tuple.row += 1; - tuple.column = tupleStart.column; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Норматив на одну операцию, (мин):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.StandardTimeBarrelPreparation}"); - tuple.column += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Норматив на одну операцию, (мин):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.StandardTimeExtension}"); - tuple.column = tupleStart.column; - tuple.row += 1; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Проработка при бур, план (ч):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = $"{converteCellCoordinate(tuple.row - 1, true, tuple.column)}/60*{converteCellCoordinate(tuple.row + 28, true, tuple.column + 1)}"; - tuple.column += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Наращивание, план (ч):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = $"{converteCellCoordinate(tuple.row - 1, true, tuple.column)}/60*{converteCellCoordinate(tuple.row + 28, true, tuple.column - 2)}"; - tuple.column = tupleStart.column; - tuple.row += 1; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Проработка при бур, факт (ч):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.ActualTimeBarrelPreparation}"); - tuple.column += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Наращивание, факт (ч):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.ActualTimeExtension}"); - tuple.column = tupleStart.column; - tuple.row += 1; - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Превышение плановых норм, (ч):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = $"{converteCellCoordinate(tuple.row - 1, true, tuple.column)}-{converteCellCoordinate(tuple.row - 2, true, tuple.column)}"; - tuple.column += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Превышение плановых норм, (ч):"); - tuple.column += 2; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = $"{converteCellCoordinate(tuple.row - 1, true, tuple.column)}-{converteCellCoordinate(tuple.row - 2, true, tuple.column)}"; - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row + 1, tuple.column + 2).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Краткие причины: доп проработки при переходе из слайда в ротор, в середине свечи."); - tuple.column += 3; - sheet.Range(tuple.row, tuple.column, tuple.row + 1, tuple.column + 2).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Краткие причины: нехватка пальцев на обоих руках у первого помощника бурильщика."); - tuple.column += 2; - return tuple; - } - private (int row, int column) AddBlockSaub(IXLWorksheet sheet, DailyReportSaubDto blockDto, (int row, int column) tupleStart) - { - - tupleStart.row += 2; - tupleStart.column = 3; - var tuple = (row: tupleStart.row, column: tupleStart.column); - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"Бурение в роторе : {blockDto.RotorDrillingModes}"); - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"Бурение в слайде : {blockDto.SlideDrillingModes}"); - tuple.row += 2; - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Бурение в роторе (за отчетный период) с использование САУБ-1"); - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Проходка"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Часы бурения"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Мех. скорость"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Среднее диф. Давление") - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.PenetrationInRotor}"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.NumberDrillingHours}"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = FormulaMechanicalSpeed(tuple); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.AVGDiffDropRotor}") - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - tuple.column = tupleStart.column; - tuple.row += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Бурение в слайде (за отчетный период) с использование САУБ-1"); - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Проходка"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Часы бурения"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Мех. скорость"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Среднее диф. Давление"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.PenetrationInSlide}"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.DrillingTimeInRotor}"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = FormulaMechanicalSpeed(tuple); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.AVGDiffPressureSlide}"); - tuple.column = tupleStart.column; - tuple.row += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 5).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Итого за отчетный период, использование САУБ-1"); - tuple.column += 6; - sheet.Range(tuple.row, tuple.column, tuple.row + 1, tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, "Плановая мех скорость"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Проходка"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Часы бурения"); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Мех. скорость"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = FormulaSinking(tuple); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, ""); - sheet.Cell(tuple.row, tuple.column).FormulaA1 = FormulaDrillingWatch(tuple); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column += 2; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.SectionROPPlan}"); - tuple.column = tupleStart.column; - tuple.row += 2; - - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Увеличение мех скорости за секцию %"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Увеличение мех скорости за сутки %"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Сокращение времени бурения за секцию, ч"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Ротор / слайд, %"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "МСП за секцию м/ч."); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, ""); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Время бурения за секцию"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.SectionDrillingTimeTotal}"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Проходка за секцию"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.SectionPenetrationTotal}"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Кол- во наращиваний"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.ExtensionsCount}"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row), tuple.column, "Отклонение от ГГД +/-, сут"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"{blockDto.DeviationFromTVD}"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row), tuple.column, $"Примечание: {blockDto.DeclinesReasonsROP}"); - tuple.column += 7; - return tuple; - - } - - private (int row, int column) AddBlockSign(IXLWorksheet sheet, DailyReportSignDto blockDto, (int row, int column) tupleStart) - { - tupleStart.row += 2; - tupleStart.column = 3; - var tuple = (row: tupleStart.row, column: tupleStart.column); - sheet.Cell(tuple.row,tuple.column).Value = - "Мастер буровой "; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - sheet.Cell(tuple.row, tuple.column+5).Value = - $"{blockDto.DrillingMaster}"; - sheet.Range(tuple.row, tuple.column + 5, tuple.row, tuple.column + 1).Merge(); - tuple.column = tupleStart.column; - tuple.row += 2; - sheet.Cell(tuple.row, tuple.column).Value = - "Супервайзер "; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - sheet.Cell(tuple.row, tuple.column + 5).Value = - $"{blockDto.Supervisor}"; - sheet.Range(tuple.row, tuple.column + 5, tuple.row, tuple.column + 1).Merge(); - - return tuple; - - } - - - - - // реализация "как есть" - - public Stream MakeReport(DailyReportDto dailyReportDto) - { - using var templateStream = System.Reflection.Assembly.GetExecutingAssembly() - .GetManifestResourceStream("AsbCloudInfrastructure.Services.DailyReport.DailyReportTemplate.xlsx"); - using var workbook = new XLWorkbook(templateStream, XLEventTracking.Disabled); - FillSheet(workbook, dailyReportDto); - - MemoryStream memoryStream = new MemoryStream(); - workbook.SaveAs(memoryStream, new SaveOptions { }); - memoryStream.Seek(0, SeekOrigin.Begin); - return memoryStream; - } - - public void FillSheet(XLWorkbook workbook, DailyReportDto reportParams) - { - var sheet = workbook.Worksheets.First();//.Add(reportParams.ReportDate.ToString("dd.MM.yyyy")); - sheet.Name = reportParams.ReportDate.ToString("dd.MM.yyyy"); - - var activeRow = 3; - activeRow = AddBlockHead(sheet, activeRow, reportParams); - activeRow = AddBlockSlaughtersReport(sheet, activeRow, reportParams); - activeRow = AddBlockTrajectoryReport(sheet, activeRow, reportParams); - activeRow = AddBlockDrillers(sheet, activeRow, reportParams); - activeRow = AddBlockSAUB(sheet, activeRow, reportParams); - activeRow = AddBlockBHA(sheet, activeRow, reportParams); - activeRow = AddBlockBHADescription(sheet, activeRow, reportParams); - activeRow = AddBlockOperations(sheet, activeRow, reportParams); - activeRow = AddBlockTimeBalans(sheet, activeRow, reportParams); - activeRow = AddBlockMeterlessWorks(sheet, activeRow, reportParams); - activeRow = AddBlockDrillingModes(sheet, activeRow, reportParams); - activeRow = AddBlockRotorDrilling(sheet, activeRow, reportParams); - activeRow = AddBlockSlideDrilling(sheet, activeRow, reportParams); - activeRow = AddBlockROPPlan(sheet, activeRow, reportParams); - activeRow = AddBlockSummary(sheet, activeRow, reportParams); - activeRow = AddBlockSubscribes(sheet, activeRow, reportParams); - } - - private int AddBlockHead(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow, 3).Value = - $"Суточная сводка бурения скважины №{reportDto.WellName}, куст: {reportDto.ClusterName}"; - sheet.Cell(startRow + 1, 3).Value = - $"Заказчик: {reportDto.Customer}"; - sheet.Cell(startRow + 2, 3).Value = - $"Подрядчик: {reportDto.Contractor}"; - - - return startRow + 2; - } - - private int AddBlockSlaughtersReport(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 4, 3).Value = - $"{reportDto.ReportDate}"; - sheet.Cell(startRow + 4, 5).Value = - $"{reportDto.WellDepthIntervalStartDate}"; - sheet.Cell(startRow + 4, 6).Value = - $"{reportDto.WellDepthIntervalFinishDate}"; - - return startRow + 4; - } - - private int AddBlockTrajectoryReport(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 4, 3).Value = - $"{reportDto.BottomholeDepth}"; - sheet.Cell(startRow + 4, 4).Value = - $"{reportDto.VerticalDepth}"; - sheet.Cell(startRow + 4, 5).Value = - $"{reportDto.ZenithAngle}"; - sheet.Cell(startRow + 4, 6).Value = - $"{reportDto.AzimuthAngle}"; - - return startRow + 4; - } - - private int AddBlockDrillers(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 2, 4).Value = - $"{reportDto.FirstDriller}"; - sheet.Cell(startRow + 3, 4).Value = - $"{reportDto.SecondDriller}"; - - return startRow + 3; - } - - private int AddBlockSAUB(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 3, 6).Value = - $"{reportDto.WorkTimeSAUB}"; - sheet.Cell(startRow + 4, 6).Value = - $"{reportDto.WorkTimeSpinMaster}"; - sheet.Cell(startRow + 5, 6).Value = - $"{reportDto.WorkTimeTorkMaster}"; - sheet.Cell(startRow + 3, 7).Value = - $"{reportDto.PenetrationSAUB}"; - sheet.Cell(startRow + 4, 7).Value = - $"{reportDto.PenetrationSpinMaster}"; - sheet.Cell(startRow + 5, 7).Value = - $"{reportDto.PenetrationTorkMaster}"; - sheet.Cell(startRow + 6, 6).Value = - $"{reportDto.CountLaunchesMSE}"; - - return startRow + 6; - } - - private int AddBlockBHA(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 3, 6).Value = - $"{reportDto.WorkTimeSAUB}"; - sheet.Cell(startRow + 4, 6).Value = - $"{reportDto.WorkTimeSpinMaster}"; - sheet.Cell(startRow + 5, 6).Value = - $"{reportDto.WorkTimeTorkMaster}"; - sheet.Cell(startRow + 3, 7).Value = - $"{reportDto.PenetrationSAUB}"; - sheet.Cell(startRow + 4, 7).Value = - $"{reportDto.PenetrationSpinMaster}"; - sheet.Cell(startRow + 5, 7).Value = - $"{reportDto.PenetrationTorkMaster}"; - sheet.Cell(startRow + 6, 6).Value = - $"{reportDto.CountLaunchesMSE}"; - - return startRow + 6; - } - - private int AddBlockBHADescription(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 2, 3).Value = - $"{reportDto.BHADescription}"; - - return startRow + 6; - } - - private int AddBlockOperations(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - return startRow + 7; - } - - private int AddBlockTimeBalans(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - return startRow + 8; - } - - private int AddBlockMeterlessWorks(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 4, 6).Value = - $"{reportDto.StandardTimeBarrelPreparation}"; - sheet.Cell(startRow + 4, 9).Value = - $"{reportDto.StandardTimeExtension}"; - sheet.Cell(startRow + 6, 6).Value = - $"{reportDto.ActualTimeBarrelPreparation}"; - sheet.Cell(startRow + 6, 9).Value = - $"{reportDto.ActualTimeExtension}"; - - return startRow + 9; - } - - // - private int AddBlockDrillingModes(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 2, 6).Value = - $"{string.Join(", ", reportDto.RotorDrillingModes)}"; - sheet.Cell(startRow + 3, 9).Value = - $"{string.Join(", ", reportDto.SlideDrillingModes)}"; - - return startRow + 3; - } - - private int AddBlockRotorDrilling(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 3, 3).Value = - $"{reportDto.PenetrationInRotor}"; - sheet.Cell(startRow + 3, 5).Value = - $"{reportDto.NumberDrillingHours}"; - sheet.Cell(startRow + 3, 9).Value = - $"{reportDto.AVGDiffDropRotor}"; - - return startRow + 3; - } - - private int AddBlockSlideDrilling(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 3, 3).Value = - $"{reportDto.PenetrationInSlide}"; - sheet.Cell(startRow + 3, 5).Value = - $"{reportDto.DrillingTimeInRotor}"; - sheet.Cell(startRow + 3, 9).Value = - $"{reportDto.AVGDiffPressureSlide}"; - - return startRow + 3; - } - - private int AddBlockROPPlan(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 3, 9).Value = - $"{reportDto.SectionROPPlan}"; - - return startRow + 3; - } - - private int AddBlockSummary(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 7, 7).Value = - $"{reportDto.SectionDrillingTimeTotal}"; - sheet.Cell(startRow + 8, 7).Value = - $"{reportDto.SectionPenetrationTotal}"; - sheet.Cell(startRow + 9, 7).Value = - $"{reportDto.ExtensionsCount}"; - sheet.Cell(startRow + 10, 7).Value = - $"{reportDto.DeviationFromTVD}"; - sheet.Cell(startRow + 11, 3).Value = - $"{reportDto.DeclinesReasonsROP}"; - - return startRow + 13; - } - // - private int AddBlockSubscribes(IXLWorksheet sheet, int startRow, DailyReportDto reportDto) - { - sheet.Cell(startRow + 3, 9).Value = - $"{reportDto.DrillingMaster}"; - sheet.Cell(startRow + 5, 9).Value = - $"{reportDto.Supervisor}"; - - return startRow + 5; - } - - private static string GetColunmLetter(int columnNumber) - { - string letter = ""; - - while (columnNumber > 0) - { - int modulo = (columnNumber - 1) % 26; - letter = Convert.ToChar('A' + modulo) + letter; - columnNumber = (columnNumber - modulo) / 26; - } - - return letter; - } - - private static IXLStyle SetBorder(IXLStyle style) - { - style.Border.RightBorder = XLBorderStyleValues.Thin; - style.Border.LeftBorder = XLBorderStyleValues.Thin; - style.Border.TopBorder = XLBorderStyleValues.Thin; - style.Border.BottomBorder = XLBorderStyleValues.Thin; - style.Border.InsideBorder = XLBorderStyleValues.Thin; - return style; - } - - private static IXLCell SetDateTime(IXLCell cell) - { - cell.DataType = XLDataType.DateTime; - cell.Style.DateFormat.Format = "DD.MM.YYYY HH:MM:SS"; - return cell; - } - - private static IXLCell SetNumber(IXLCell cell) - { - cell.DataType = XLDataType.Number; - cell.Style.NumberFormat.Format = "0.00"; - return cell; - } - - private static IXLCell SetCell(IXLRow row, int colunm, object value, int maxChartsToWrap = 88) - { - var cell = row.Cell(colunm); - cell.Value = value; - - SetBorder(cell.Style); - cell.Style.Alignment.WrapText = true; - - if (value is string valueString && valueString.Length > maxChartsToWrap) - { - var baseHeight = row.Height; - row.Height = 0.82d * baseHeight * Math.Ceiling(1d + valueString.Length / maxChartsToWrap); - } - - if (value is DateTime) - { - SetDateTime(cell); - } - else if (value is IFormattable) - { - SetNumber(cell); - } - - return cell; - } } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs index 0af2a8e5..b0a689f6 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs @@ -9,7 +9,7 @@ using AsbCloudApp.Data; using AsbCloudApp.Services; using AsbCloudDb.Model; using System.Collections.Generic; -using AsbCloudApp.Data.DailyReportModel; + using AsbCloudApp.Data.DailyReport; namespace AsbCloudInfrastructure.Services.DailyReport @@ -62,7 +62,7 @@ namespace AsbCloudInfrastructure.Services.DailyReport public async Task AddAsync(int idWell, DailyReportDto dto, CancellationToken token = default) { var offsetHours = wellService.GetTimezone(idWell).Hours; - var reportDateOffset = dto.ReportDate.ToUtcDateTimeOffset(offsetHours); + var reportDateOffset = dto.HeadDto.ReportDate.ToUtcDateTimeOffset(offsetHours); var info = Convert(dto, offsetHours); var entity = new AsbCloudDb.Model.DailyReport { @@ -101,7 +101,7 @@ namespace AsbCloudInfrastructure.Services.DailyReport if (dailyReportDto is null) return null; - var memoryStream = dailyReportMaker.MakeReport(dailyReportDto); + var memoryStream = dailyReportMaker.MakeReportFromBlocks(dailyReportDto); return memoryStream; } @@ -127,12 +127,16 @@ namespace AsbCloudInfrastructure.Services.DailyReport { var well = await wellService.GetAsync(idWell, token); var offsetHours = wellService.GetTimezone(idWell).Hours; - var dto = new DailyReportDto() + var headDto = new DailyReportHeadDto() { ReportDate = date, WellName = well.Caption, ClusterName = well.Cluster, }; + var dto = new DailyReportDto() + { + HeadDto = headDto + }; DailyReportDto result = dto; return result; } @@ -140,7 +144,7 @@ namespace AsbCloudInfrastructure.Services.DailyReport private static DailyReportDto Convert(AsbCloudDb.Model.DailyReport entity, double offsetHours) { var dto = entity.Info.Adapt(); - dto.ReportDate = entity.StartDate + dto.HeadDto.ReportDate = entity.StartDate .ToRemoteDateTime(offsetHours); return dto; } @@ -148,83 +152,11 @@ namespace AsbCloudInfrastructure.Services.DailyReport private static DailyReportInfo Convert(DailyReportDto dto, double offsetHours) { var entity = dto.Adapt(); - entity.ReportDate = dto.ReportDate + entity.HeadInfo.ReportDate = dto.HeadDto.ReportDate .ToUtcDateTimeOffset(offsetHours) .Date; return entity; - } - - - // черновик реализации "по блокам" - - public async Task MakeReportFromBlocksAsync(int idWell, DateTime date, CancellationToken token = default) - { - var dailyReportDto = await GetAsync(idWell, date, token); - if (dailyReportDto is null) - return null; - var block1 = new DailyReportHeadDto() - { - WellName = dailyReportDto.WellName, - ClusterName = dailyReportDto.ClusterName, - Customer = dailyReportDto.Customer, - Contractor = dailyReportDto.Contractor, - ReportDate = dailyReportDto.ReportDate, - WellDepthIntervalStartDate = dailyReportDto.WellDepthIntervalStartDate, - WellDepthIntervalFinishDate = dailyReportDto.WellDepthIntervalFinishDate, - BottomholeDepth = dailyReportDto.BottomholeDepth, - VerticalDepth = dailyReportDto.VerticalDepth, - ZenithAngle = dailyReportDto.ZenithAngle, - AzimuthAngle = dailyReportDto.AzimuthAngle, - FirstDriller = dailyReportDto.FirstDriller, - SecondDriller = dailyReportDto.SecondDriller, - WorkTimeSAUB = dailyReportDto.WorkTimeSAUB, - WorkTimeSpinMaster = dailyReportDto.WorkTimeSpinMaster, - WorkTimeTorkMaster = dailyReportDto.WorkTimeTorkMaster, - PenetrationSAUB = dailyReportDto.PenetrationSAUB, - PenetrationSpinMaster = dailyReportDto.PenetrationSpinMaster, - PenetrationTorkMaster = dailyReportDto.PenetrationTorkMaster, - CountLaunchesMSE = dailyReportDto.CountLaunchesMSE - }; - var block2 = new DailyReportBhaDto() - { - BHADescription = dailyReportDto.BHADescription - }; - var block3 = new DailyReportTimeBalanceDto(); - - var block4 = new DailyReportDimensionlessDto() - { - ActualTimeBarrelPreparation = dailyReportDto.ActualTimeBarrelPreparation, - ActualTimeExtension = dailyReportDto.ActualTimeExtension, - StandardTimeBarrelPreparation = dailyReportDto.StandardTimeBarrelPreparation, - StandardTimeExtension = dailyReportDto.StandardTimeExtension - }; - var block5 = new DailyReportSaubDto() - { - AVGDiffDropRotor = dailyReportDto.AVGDiffDropRotor, - AVGDiffPressureSlide = dailyReportDto.AVGDiffPressureSlide, - DeclinesReasonsROP = dailyReportDto.DeclinesReasonsROP, - DeviationFromTVD = dailyReportDto.DeviationFromTVD, - DrillingTimeInRotor = dailyReportDto.DrillingTimeInRotor, - NumberDrillingHours = dailyReportDto.NumberDrillingHours, - ExtensionsCount = dailyReportDto.ExtensionsCount, - PenetrationInRotor = dailyReportDto.PenetrationInRotor, - PenetrationInSlide = dailyReportDto.PenetrationInSlide, - RotorDrillingModes = dailyReportDto.RotorDrillingModes, - SectionDrillingTimeTotal = dailyReportDto.SectionDrillingTimeTotal, - SectionPenetrationTotal = dailyReportDto.SectionPenetrationTotal, - SectionROPPlan = dailyReportDto.SectionROPPlan, - SlideDrillingModes = dailyReportDto.SlideDrillingModes - - }; - var block6 = new DailyReportSignDto() - { - DrillingMaster = dailyReportDto.DrillingMaster, - Supervisor = dailyReportDto.Supervisor - }; - - var memoryStream = dailyReportMaker.MakeReportFromBlocks(block1, block2, block3, block4, block5, block6); - return memoryStream; - } + } } #nullable disable } diff --git a/AsbCloudWebApi.Tests/ServicesTests/ScheduleServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/ScheduleServiceTest.cs index 5b9f64ba..9c707ef0 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/ScheduleServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/ScheduleServiceTest.cs @@ -115,8 +115,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests public async Task GetDriller_by_workTime_shift1() { var dto = MakeScheduleDto(); - dto.ShiftStart = new TimeOnly(8, 00); - dto.ShiftEnd = new TimeOnly(20, 00); + dto.ShiftStart = new TimeDto(8, 00); + dto.ShiftEnd = new TimeDto(20, 00); var id = await scheduleService.InsertAsync(dto, CancellationToken.None); var drillerWorkTime = new DateTime( dto.DrillStart.Year, @@ -131,8 +131,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests public async Task GetDriller_by_workTime_shift2() { var dto = MakeScheduleDto(); - dto.ShiftStart = new TimeOnly(20, 00); - dto.ShiftEnd = new TimeOnly(8, 00); + dto.ShiftStart = new TimeDto(20, 00); + dto.ShiftEnd = new TimeDto(8, 00); var id = await scheduleService.InsertAsync(dto, CancellationToken.None); var drillerWorkTime = new DateTime( dto.DrillStart.Year, diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index 549bfc7a..076a509d 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -1,13 +1,8 @@ using AsbCloudApp.Data.DailyReport; -using AsbCloudApp.Data.DailyReportModel; -using AsbCloudInfrastructure.EfCache; -using AsbCloudInfrastructure.Services.DailyReport; using ClosedXML.Excel; using System; using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; + namespace ConsoleApp1 { @@ -19,15 +14,15 @@ namespace ConsoleApp1 { var block = new DailyReportHeadDto() { - AzimuthAngle=12, - WellName= "WellName", - ClusterName= "clusterName", - Customer="customer", - Contractor="Contractor", + AzimuthAngle = 12, + WellName = "WellName", + ClusterName = "clusterName", + Customer = "customer", + Contractor = "Contractor", ReportDate = DateTime.Now, - WellDepthIntervalFinishDate= 27.5, - WellDepthIntervalStartDate= 26.5, - BottomholeDepth= 66.6 + WellDepthIntervalFinishDate = 27.5, + WellDepthIntervalStartDate = 26.5, + BottomholeDepth = 66.6 }; var block2 = new DailyReportBhaDto() { @@ -35,7 +30,7 @@ namespace ConsoleApp1 }; var block3 = new DailyReportTimeBalanceDto(); - //------------- example ----------------- + /* var service = new DailyReportMakerExcel(); var stream = service.MakeReportFromBlocks(block, block2, block3,null, null, null); var filename = "____.xlsx"; @@ -45,11 +40,11 @@ namespace ConsoleApp1 stream.CopyTo(fileStream); return; - //------------- end of example ----------------- + */ + + - - //var ms = MakeReportFromBlocks(block,block3); ////File.Create("", MakeReportFromBlocks(block)); @@ -60,482 +55,8 @@ namespace ConsoleApp1 //ms.Close(); } - public static Stream MakeReportFromBlocks(DailyReportHeadDto blockHead, DailyReportSaubDto blockD) - { - using var workbook = new XLWorkbook(); - FillSheet6blocks(workbook, blockHead, blockD); - MemoryStream memoryStream = new MemoryStream(); - workbook.SaveAs(memoryStream, new SaveOptions { }); - memoryStream.Seek(0, SeekOrigin.Begin); - return memoryStream; - } - - private static String converteCellCoordinate(int row, bool isCaps, int column) - { - var c = (Char)((isCaps ? 65 : 97) + (column - 1)); - string convertColumn = c.ToString(); - return $"{convertColumn}{row}"; - } - - private static string FormulaMechanicalSpeed((int row, int col) tuple) - { - return $"=IF({converteCellCoordinate(tuple.row,true,tuple.col-2)}>0," + - $"{converteCellCoordinate(tuple.row,true,tuple.col-4)}/{converteCellCoordinate(tuple.row,true,tuple.col-2)},0)"; - } - - private static string FormulaDrillingWatch((int row, int col) tuple) - { - return $"=IF({converteCellCoordinate(tuple.row - 8,true,tuple.col)}+" + - $"{converteCellCoordinate(tuple.row - 4,true,tuple.col)}"; - } - - private static string FormulaSinking((int row, int col) tuple) - { - return $"=IF(({converteCellCoordinate(tuple.row - 4,true,tuple.col)}+{converteCellCoordinate(tuple.row - 8,true,tuple.col)})" + - $"<>({converteCellCoordinate(tuple.row - 54,true,tuple.col + 6)}-{converteCellCoordinate(tuple.row - 54,true,tuple.col + 4)}),\"ОШИБКА\"" + - $",{converteCellCoordinate(tuple.row - 4,true,tuple.col)}+{converteCellCoordinate(tuple.row - 8,true,tuple.col)})"; - - //return $"=IF({converteCellCoordinate(tuple.row - 8,true,tuple.col)}+" + - // $"{converteCellCoordinate(tuple.row - 4,true,tuple.col)}"; - } - - public static void FillSheet6blocks(XLWorkbook workbook, DailyReportHeadDto blockHead, DailyReportSaubDto blockD) - { - var sheet = workbook.Worksheets.Add(blockHead.ReportDate.ToString("dd.MM.yyyy")); - //sheet.Name = blockHead.ReportDate.ToString("dd.MM.yyyy"); - - var tuple = (row: 3, column: 3); - sheet.Style.Font.FontName = "TimesNewRoman"; - sheet.Style.Font.FontSize = 10; - - tuple = (AddBlockHead1(sheet, blockHead, (tuple.row, tuple.column)).row, AddBlockHead1(sheet, blockHead, (tuple.row, tuple.column)).column); - AddBlockBha(sheet, blockD, tuple); - //sheet.Columns().AdjustToContents(8,9); - //sheet.Rows().AdjustToContents(3,21); - - - } - // - - private static IXLStyle SetBorder(IXLStyle style) - { - style.Border.RightBorder = XLBorderStyleValues.Thin; - style.Border.LeftBorder = XLBorderStyleValues.Thin; - style.Border.TopBorder = XLBorderStyleValues.Thin; - style.Border.BottomBorder = XLBorderStyleValues.Thin; - style.Border.InsideBorder = XLBorderStyleValues.Thin; - return style; - } - - private static IXLCell SetDateTime(IXLCell cell) - { - cell.DataType = XLDataType.DateTime; - cell.Style.DateFormat.Format = "DD.MM.YYYY HH:MM:SS"; - return cell; - } - - private static IXLCell SetNumber(IXLCell cell) - { - cell.DataType = XLDataType.Number; - cell.Style.NumberFormat.Format = "0.00"; - return cell; - } - - private static IXLCell SetCell(IXLRow row, int colunm, object value, int maxChartsToWrap = 88) - { - var cell = row.Cell(colunm); - cell.Value = value; - - SetBorder(cell.Style); - cell.Style.Alignment.WrapText = true; - - - if (value is string valueString && valueString.Length > maxChartsToWrap) - { - var baseHeight = row.Height; - row.Height = 0.82d * baseHeight * Math.Ceiling(1d + valueString.Length / maxChartsToWrap); - } - - if (value is DateTime) - { - SetDateTime(cell); - } - else if (value is IFormattable) - { - SetNumber(cell); - } - - return cell; - } - - private static (int row, int column) AddBlockHead1(IXLWorksheet sheet, DailyReportHeadDto blockDto, (int row, int column) tupleStart) - { - - var tuple = (row: tupleStart.row, column: tupleStart.column); - sheet.Cell(tuple.row, tuple.column).Value = - $"Суточная сводка бурения скважины: {blockDto.WellName}, куст: {blockDto.ClusterName}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge(); - tuple.row += 1; - sheet.Cell(tuple.row, tuple.column).Value = - $"Заказчик: {blockDto.Customer}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge(); - tuple.row += 1; - sheet.Cell(tuple.row, tuple.column).Value = - $"Подрядчик: {blockDto.Contractor}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge(); - tuple.row += 2; - //7,3 - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Отчетный период"); - tuple.column += 4; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 3).Merge(); - sheet.Cell(tuple.row, tuple.column+3).Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, "Забой за отчетный период, м"); - tuple.column = tupleStart.column; - tuple.row += 1; - //8,3 - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "От (дата, время)"); - tuple.column += 2; //8,5 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "До (дата, время)"); - tuple.column += 2; //8,7 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "От"); - tuple.column += 2; //8,9 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "До"); - sheet.Cell(tuple.row, tuple.column+1).Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.column = tupleStart.column; - tuple.row += 1; //9,3 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.ReportDate}"); - tuple.column += 2; - - //согласно формуле в шаблоне - ячейка С9 - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, ""); - sheet.Cell(tuple.row,tuple.column).FormulaA1 = $"={converteCellCoordinate(tuple.row, true, tuple.column - 2)}-1"; - SetDateTime(sheet.Cell(tuple.row,tuple.column)); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.WellDepthIntervalStartDate}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.WellDepthIntervalFinishDate}"); - tuple.column = tupleStart.column; - tuple.row += 2; //11,3 - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 7).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, "Данные по траектории скважины на конец суток"); - tuple.column = tupleStart.column; - tuple.row += 1;//12 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Глубина по стволу"); - tuple.column += 2; //12,5 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Глубина по вертикали"); - tuple.column += 2; //12,7 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Зенитный угол"); - tuple.column += 2; //12,9 - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, "Азимут"); - tuple.column = tupleStart.column; - tuple.row += 1; //13,3 - - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.BottomholeDepth}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.VerticalDepth}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.ZenithAngle}"); - tuple.column += 2; - - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.AzimuthAngle}"); - tuple.column = tupleStart.column; - tuple.row += 2; //15,3 - sheet.Cell(tuple.row, tuple.column).Value = "Бурильщик 1 смена"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.column += 2; - sheet.Cell(tuple.row, tuple.column).Value = $"{blockDto.FirstDriller}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Cell(tuple.row, tuple.column).Value = "Бурильщик 2 смена"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.column += 2; - sheet.Cell(tuple.row, tuple.column).Value = $"{blockDto.SecondDriller}"; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge(); - tuple.row += 2; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column,"Работа модулей САУБ:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row),tuple.column,"Часов:"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row),tuple.column, "Метров:").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column,"АПД (автоматическая подача долота), ч/м:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row),tuple.column,$"{blockDto.WorkTimeSAUB}"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.PenetrationSAUB}").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column,"Спин Мастер (осцилляция),ч/м:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row),tuple.column,$"{blockDto.WorkTimeSpinMaster}"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.PenetrationSpinMaster}").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column,"Торк Мастер (демпфирование), ч/:"); - tuple.column += 3; - SetCell(sheet.Row(tuple.row),tuple.column,$"{blockDto.WorkTimeTorkMaster}"); - tuple.column += 1; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.PenetrationTorkMaster}").Style.Border.RightBorder = XLBorderStyleValues.Thin; - tuple.row += 1; - tuple.column = tupleStart.column; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 2).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column,"МСЕ, колличество запусков, раз:"); - tuple.column += 3; - sheet.Range(tuple.row, tuple.column, tuple.row, tuple.column + 1).Merge().Style.Border.RightBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.CountLaunchesMSE}"); - tuple.column+=2; - return tuple; - } - - private static (int row, int column) AddBlockBha(IXLWorksheet sheet, DailyReportSaubDto blockDto, (int row, int column) tupleStart) - { - tupleStart.row += 2; - tupleStart.column = 3; - var tuple = (row: tupleStart.row, column: tupleStart.column); - - - sheet.Range(tuple.row, tuple.column, tuple.row,tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"Бурение в роторе : {blockDto.RotorDrillingModes}"); - tuple.row+=1; - sheet.Range(tuple.row, tuple.column, tuple.row,tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"Бурение в слайде : {blockDto.SlideDrillingModes}"); - tuple.row+=2; - - - sheet.Range(tuple.row, tuple.column, tuple.row,tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, "Бурение в роторе (за отчетный период) с использование САУБ-1"); - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Проходка"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Часы бурения"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Мех. скорость"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Среднее диф. Давление") - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.PenetrationInRotor}"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.NumberDrillingHours}"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, ""); - sheet.Cell(tuple.row,tuple.column).FormulaA1 = FormulaMechanicalSpeed(tuple); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.AVGDiffDropRotor}") - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - tuple.column=tupleStart.column; - tuple.row+=2; - - sheet.Range(tuple.row, tuple.column, tuple.row,tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, "Бурение в слайде (за отчетный период) с использование САУБ-1"); - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Проходка"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Часы бурения"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Мех. скорость"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, "Среднее диф. Давление"); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.PenetrationInSlide}"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.DrillingTimeInRotor}"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, ""); - sheet.Cell(tuple.row,tuple.column).FormulaA1 = FormulaMechanicalSpeed(tuple); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.AVGDiffPressureSlide}"); - tuple.column=tupleStart.column; - tuple.row+=2; - - sheet.Range(tuple.row, tuple.column, tuple.row,tuple.column + 5).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Итого за отчетный период, использование САУБ-1"); - tuple.column+=6; - sheet.Range(tuple.row,tuple.column, tuple.row + 1,tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, "Плановая мех скорость"); - tuple.column = tupleStart.column; - tuple.row += 1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Проходка"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Часы бурения"); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Мех. скорость"); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, ""); - sheet.Cell(tuple.row,tuple.column).FormulaA1 = FormulaSinking(tuple); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, ""); - sheet.Cell(tuple.row,tuple.column).FormulaA1 = FormulaDrillingWatch(tuple); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, ""); - tuple.column+=2; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 1).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.SectionROPPlan}"); - tuple.column=tupleStart.column; - tuple.row+=2; - - - - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Увеличение мех скорости за секцию %"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, ""); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Увеличение мех скорости за сутки %"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, ""); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Сокращение времени бурения за секцию, ч"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, ""); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Ротор / слайд, %"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, ""); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "МСП за секцию м/ч."); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, ""); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Время бурения за секцию"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.SectionDrillingTimeTotal}"); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Проходка за секцию"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.SectionPenetrationTotal}"); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Кол- во наращиваний"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.ExtensionsCount}"); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge(); - SetCell(sheet.Row(tuple.row),tuple.column, "Отклонение от ГГД +/-, сут"); - tuple.column+=4; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 3).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"{blockDto.DeviationFromTVD}"); - tuple.column=tupleStart.column; - tuple.row+=1; - sheet.Range(tuple.row,tuple.column, tuple.row,tuple.column + 7).Merge() - .Style.Border.OutsideBorder = XLBorderStyleValues.Thin; - SetCell(sheet.Row(tuple.row),tuple.column, $"Примечание: {blockDto.DeclinesReasonsROP}"); - tuple.column += 7; - return tuple; - } - } - struct CellAddress - { - public int Col { get; set; } - public int Row { get; set; } - //public string GetExcelAddress() - //{ - - //} } }