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");
}