diff --git a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj index f2edc76d..a1816762 100644 --- a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj +++ b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj @@ -56,6 +56,7 @@ + diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index 83f82539..8db9e42c 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -220,6 +220,7 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); diff --git a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs index ac59408f..a94726c1 100644 --- a/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs +++ b/AsbCloudInfrastructure/Services/DetectOperations/DetectedOperationExportService.cs @@ -10,6 +10,8 @@ using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data.DetectedOperation; using AsbCloudInfrastructure.Services.DetectOperations.Detectors; +using AsbCloudApp.Repositories; +using Microsoft.AspNetCore.Http.Extensions; namespace AsbCloudInfrastructure.Services.DetectOperations; @@ -21,12 +23,6 @@ public class DetectedOperationExportService new DetectorSlipsTime() }; - private readonly IDictionary domains = new Dictionary - { - { 1, "https://cloud.digitaldrilling.ru" }, - { 2, "https://cloud.autodrilling.ru" } - }; - private const int headerRowsCount = 1; private const string cellDepositName = "B1"; @@ -46,13 +42,23 @@ public class DetectedOperationExportService private const int columnComment = 10; private readonly IAsbCloudDbContext dbContext; + private readonly IWellOperationRepository wellOperationRepository; - public DetectedOperationExportService(IAsbCloudDbContext dbContext) + public DetectedOperationExportService(IAsbCloudDbContext dbContext, IWellOperationRepository wellOperationRepository) { this.dbContext = dbContext; - } + this.wellOperationRepository = wellOperationRepository; + } - public async Task ExportAsync(int idWell, int idDomain, CancellationToken cancellationToken) + /// + /// Экспорт excel файла с операциями по скважине + /// + /// ключ скважины + /// хост + /// + /// + /// + public async Task ExportAsync(int idWell, string host, CancellationToken cancellationToken) { var well = await dbContext.Wells .Include(w => w.Cluster) @@ -67,17 +73,17 @@ public class DetectedOperationExportService var operations = await DetectOperationsAsync(well.IdTelemetry.Value, DateTime.UnixEpoch, cancellationToken); - return await GenerateExcelFileStreamAsync(well, idDomain, operations, cancellationToken); + return await GenerateExcelFileStreamAsync(well, host, operations, cancellationToken); } - private async Task GenerateExcelFileStreamAsync(Well well, int idDomain, IEnumerable operationDetectorResults, + private async Task GenerateExcelFileStreamAsync(Well well, string host, IEnumerable operationDetectorResults, CancellationToken cancellationToken) { using var excelTemplateStream = await GetExcelTemplateStreamAsync(cancellationToken); using var workbook = new XLWorkbook(excelTemplateStream, XLEventTracking.Disabled); - await AddToWorkbookAsync(workbook, well, idDomain, operationDetectorResults, cancellationToken); + await AddToWorkbookAsync(workbook, well, host, operationDetectorResults, cancellationToken); MemoryStream memoryStream = new MemoryStream(); workbook.SaveAs(memoryStream, new SaveOptions { }); @@ -85,7 +91,7 @@ public class DetectedOperationExportService return memoryStream; } - private async Task AddToWorkbookAsync(XLWorkbook workbook, Well well, int idDomain, IEnumerable operationDetectorResults, + private async Task AddToWorkbookAsync(XLWorkbook workbook, Well well, string host, IEnumerable operationDetectorResults, CancellationToken cancellationToken) { const string sheetName = "Операции"; @@ -96,12 +102,12 @@ public class DetectedOperationExportService var sheet = workbook.Worksheets.FirstOrDefault(ws => ws.Name == sheetName) ?? throw new FileFormatException($"Книга excel не содержит листа {sheetName}."); - await AddToSheetAsync(sheet, well, idDomain, operationDetectorResults + await AddToSheetAsync(sheet, well, host, operationDetectorResults .OrderBy(x => x.Operation.DateStart).ThenBy(x => x.Operation.DepthStart).ToArray(), cancellationToken); } - private async Task AddToSheetAsync(IXLWorksheet sheet, Well well, int idDomain, IList operationDetectorResults, + private async Task AddToSheetAsync(IXLWorksheet sheet, Well well, string host, IList operationDetectorResults, CancellationToken cancellationToken) { var wellOperationCategories = await dbContext.WellOperationCategories.ToListAsync(cancellationToken); @@ -132,8 +138,11 @@ public class DetectedOperationExportService && idReasonOfEndObject is int idReasonOfEnd) row.Cell(columnIdReasonOfEnd).Value = GetIdReasonOfEnd(idReasonOfEnd); - var link = - $"{domains[idDomain]}/well/{well.Id}/telemetry/monitoring?end={Uri.EscapeDataString(dateStart.AddSeconds(1800 * 0.9).ToString("yyyy-MM-ddTHH:mm:ss.fff"))}&range=1800"; + var query = new QueryBuilder(); + query.Add("end", dateStart.AddSeconds(1800 * 0.9).ToString("yyyy-MM-ddTHH:mm:ss.fff")); + query.Add("range", "1800"); + + var link = $"{host}/well/{well.Id}/telemetry/monitoring{query}"; row.Cell(columnDateStart).Value = dateStart; row.Cell(columnDateStart).SetHyperlink(new XLHyperlink(link)); diff --git a/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs b/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs index 3c6d5b64..02f2d4cb 100644 --- a/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/DetectedOperationController.cs @@ -122,21 +122,21 @@ namespace AsbCloudWebApi.Controllers.SAUB /// Создает excel файл с операциями по скважине /// /// id скважины - /// Идентификатор домена /// [HttpGet("export")] [Permission] [ProducesResponseType(typeof(PhysicalFileResult), (int)System.Net.HttpStatusCode.OK, "application/octet-stream")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(ValidationProblemDetails), (int)System.Net.HttpStatusCode.BadRequest)] - public async Task ExportAsync(int idWell, [Range(1, 2)] int idDomain, CancellationToken token) + public async Task ExportAsync(int idWell, CancellationToken token) { var idCompany = User.GetCompanyId(); if (idCompany is null) return Forbid(); - - var stream = await detectedOperationExportService.ExportAsync(idWell, idDomain, token); + + var host = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}"; + var stream = await detectedOperationExportService.ExportAsync(idWell, host, token); return File(stream, "application/octet-stream", "operations.xlsx"); }