diff --git a/AsbCloudApp/Data/DailyReport/TimeBalanceDto.cs b/AsbCloudApp/Data/DailyReport/TimeBalanceDto.cs index 96f6bba6..40634148 100644 --- a/AsbCloudApp/Data/DailyReport/TimeBalanceDto.cs +++ b/AsbCloudApp/Data/DailyReport/TimeBalanceDto.cs @@ -94,6 +94,26 @@ /// НПВ /// public string Npv { get; set; } + + /// + /// Проработка перед наращиванием + /// + public string ElaborationBeforeBuilding { get; set; } + + /// + /// Шаблонировка перед наращиванием + /// + public string TemplatingBeforeBuilding { get; set; } + + /// + /// Промывка перед наращиванием + /// + public string FlushingBeforeBuilding { get; set; } + + /// + /// Статический замер телесистемы + /// + public string StaticSurveying { get; set; } } } diff --git a/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs b/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs index a59cfc93..1c30ba0b 100644 --- a/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs +++ b/AsbCloudInfrastructure/Services/DailyReport/DailyReportService.cs @@ -9,6 +9,9 @@ using AsbCloudApp.Services; using AsbCloudDb.Model; using System.Collections.Generic; using AsbCloudApp.Data.DailyReport; +using AsbCloudApp.Requests; +using AsbCloudInfrastructure.Services.DetectOperations; +using AsbCloudApp.Data.DetectedOperation; namespace AsbCloudInfrastructure.Services.DailyReport { @@ -17,12 +20,14 @@ namespace AsbCloudInfrastructure.Services.DailyReport { private readonly IAsbCloudDbContext db; private readonly IWellService wellService; + private readonly IDetectedOperationService detectedOperationService; private readonly DailyReportMakerExcel dailyReportMaker = new DailyReportMakerExcel(); - public DailyReportService(IAsbCloudDbContext db, IWellService wellService) + public DailyReportService(IAsbCloudDbContext db, IWellService wellService, IDetectedOperationService detectedOperationService) { this.db = db; this.wellService = wellService; + this.detectedOperationService = detectedOperationService; } public async Task> GetListAsync(int idWell, DateTime? begin, DateTime? end, CancellationToken token) @@ -109,19 +114,57 @@ namespace AsbCloudInfrastructure.Services.DailyReport private async Task MakeDefaultDailyReportAsync(int idWell, DateTime date, CancellationToken token) { var well = await wellService.GetOrDefaultAsync(idWell, token); + var dto = new DailyReportDto() { Head = new HeadDto() { ReportDate = date.Date, WellName = well?.Caption ?? "", - ClusterName = well?.Cluster ?? "" - } + ClusterName = well?.Cluster ?? "", + }, + TimeBalance = await MakeTimeBalanceAsync(idWell, date, token), }; - return dto; } + private async Task MakeTimeBalanceAsync(int idWell, DateTime date, CancellationToken token) + { + var stat = await detectedOperationService.GetOperationsStatAsync(new DetectedOperationRequest + { + IdWell = idWell, + GtDate = date.Date, + LtDate = date.Date.AddDays(1) + }, token); + + if (stat is null) + return new TimeBalanceDto(); + + var dto = new TimeBalanceDto() + { + Drilling = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationRotor, DetectedOperationService.IdOperationSlide):#0.00}", + Flushing = $"{GetHoursFromStat(stat, DetectedOperationService.idOperationFlushing):#0.00}", + Building = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationSlipsTime):#0.00}", + Elaboration = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationElaboration):#0.00}", + ElaborationBeforeBuilding = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationElaborationBeforeBuilding):#0.00}", + TemplatingBeforeBuilding = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationTemplatingBeforeBuilding):#0.00}", + FlushingBeforeBuilding = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationFlushingBeforeBuilding):#0.00}", + StaticSurveying = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationStaticSurveying):#0.00}", + Gis = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationGis):#0.00}", + Ozc = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationOzc):#0.00}", + Cementing = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationCementing):#0.00}", + Npv = $"{GetHoursFromStat(stat, DetectedOperationService.IdOperationNpv):#0.00}", + }; + return dto; + } + + private static double GetHoursFromStat(IEnumerable stat, params int[] idCategories) + { + var valueMinutes = stat.Where(o => idCategories.Contains(o.IdCategory)) + .Sum(o => o.MinutesTotal); + return valueMinutes / 60d; + } + private static DailyReportDto Convert(AsbCloudDb.Model.DailyReport.DailyReport entity) { var dto = entity.Info.Adapt(); diff --git a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs index 067d7e73..5b2d2071 100644 --- a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs +++ b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationService.cs @@ -21,6 +21,19 @@ namespace AsbCloudInfrastructure.Services.DetectOperations public const int IdOperationRotor = 1; public const int IdOperationSlide = 3; public const int IdOperationSlipsTime = 14; + public const int idOperationFlushing = 22; + public const int IdOperationElaboration = 1022; + + public const int idOperationRepair = 1031; + public const int IdOperationGis = 1001; + public const int IdOperationOzc = 1008; + public const int IdOperationCementing = 1040; + public const int IdOperationNpv = 1043; + + public const int IdOperationElaborationBeforeBuilding = 18; + public const int IdOperationTemplatingBeforeBuilding = 19; + public const int IdOperationFlushingBeforeBuilding = 20; + public const int IdOperationStaticSurveying = 21; private readonly IAsbCloudDbContext db; private readonly IWellService wellService;