diff --git a/Hcs.Broker.Mock/Api/MockNsiApi.cs b/Hcs.Broker.Mock/Api/MockNsiApi.cs
index abe40b2..3fe17d2 100644
--- a/Hcs.Broker.Mock/Api/MockNsiApi.cs
+++ b/Hcs.Broker.Mock/Api/MockNsiApi.cs
@@ -13,5 +13,13 @@ namespace Hcs.Broker.Mock.Api
return [];
}
+
+ ///
+ public async Task RequestExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default)
+ {
+ await Task.Delay(3000, token);
+
+ return Guid.NewGuid().ToString();
+ }
}
}
diff --git a/Hcs.Broker/Api/INsiApi.cs b/Hcs.Broker/Api/INsiApi.cs
index 14c8169..a4ab04f 100644
--- a/Hcs.Broker/Api/INsiApi.cs
+++ b/Hcs.Broker/Api/INsiApi.cs
@@ -12,5 +12,13 @@ namespace Hcs.Broker.Api
/// Токен отмены
/// Данные справочника
Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default);
+
+ ///
+ /// Запрашивает экспорт данных справочника поставщика информации
+ ///
+ /// Реестровый номер справочника
+ /// Токен отмены
+ /// Идентификатор сообщения операции экспорта
+ Task RequestExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default);
}
}
diff --git a/Hcs.Broker/Api/NsiApi.cs b/Hcs.Broker/Api/NsiApi.cs
index c0372e7..d9450d5 100644
--- a/Hcs.Broker/Api/NsiApi.cs
+++ b/Hcs.Broker/Api/NsiApi.cs
@@ -20,5 +20,12 @@ namespace Hcs.Broker.Api
return [];
}
}
+
+ ///
+ public async Task RequestExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default)
+ {
+ var request = new ExportDataProviderNsiItemRequest(client);
+ return await request.SendAsync(registryNumber, token);
+ }
}
}
diff --git a/Hcs.Broker/Api/Request/Nsi/ExportDataProviderNsiItemRequest.cs b/Hcs.Broker/Api/Request/Nsi/ExportDataProviderNsiItemRequest.cs
index b79b0bc..acc6181 100644
--- a/Hcs.Broker/Api/Request/Nsi/ExportDataProviderNsiItemRequest.cs
+++ b/Hcs.Broker/Api/Request/Nsi/ExportDataProviderNsiItemRequest.cs
@@ -23,5 +23,22 @@ namespace Hcs.Broker.Api.Request.Nsi
return result.Items.OfType();
}
+
+ internal async Task SendAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token)
+ {
+ // http://open-gkh.ru/Nsi/exportDataProviderNsiItemRequest.html
+ var request = new exportDataProviderNsiItemRequest
+ {
+ Id = Constants.SIGNED_XML_ELEMENT_ID,
+ version = "10.0.1.2",
+ RegistryNumber = registryNumber
+ };
+
+ return await SendAsync(request, async asyncClient =>
+ {
+ var response = await asyncClient.exportDataProviderNsiItemAsync(CreateRequestHeader(), request);
+ return response.AckRequest.Ack;
+ }, token);
+ }
}
}
diff --git a/Hcs.WebApp/BackgroundServices/OperationExecutors/ExecutorFactory.cs b/Hcs.WebApp/BackgroundServices/OperationExecutors/ExecutorFactory.cs
index 67d4f8b..37d314c 100644
--- a/Hcs.WebApp/BackgroundServices/OperationExecutors/ExecutorFactory.cs
+++ b/Hcs.WebApp/BackgroundServices/OperationExecutors/ExecutorFactory.cs
@@ -1,4 +1,5 @@
using Hcs.Broker;
+using Hcs.WebApp.BackgroundServices.OperationExecutors.Nsi;
using Hcs.WebApp.BackgroundServices.OperationExecutors.NsiCommon;
using Hcs.WebApp.Data.Hcs;
@@ -10,6 +11,9 @@ namespace Hcs.WebApp.BackgroundServices.OperationExecutors
{
switch (operation.Type)
{
+ case Operation.OperationType.Nsi_ExportNsiItem_15_7_0_1:
+ return new ExportDataProviderNsiItemExecutor_15_7_0_1(client, scope, operation);
+
case Operation.OperationType.NsiCommon_ExportNsiItem_15_7_0_1:
return new ExportNsiItemExecutor_15_7_0_1(client, scope, operation);
}
diff --git a/Hcs.WebApp/BackgroundServices/OperationExecutors/Nsi/ExportDataProviderNsiItemExecutor_15_7_0_1.cs b/Hcs.WebApp/BackgroundServices/OperationExecutors/Nsi/ExportDataProviderNsiItemExecutor_15_7_0_1.cs
new file mode 100644
index 0000000..950fbd6
--- /dev/null
+++ b/Hcs.WebApp/BackgroundServices/OperationExecutors/Nsi/ExportDataProviderNsiItemExecutor_15_7_0_1.cs
@@ -0,0 +1,33 @@
+using Hcs.Broker;
+using Hcs.Service.Async.Nsi;
+using Hcs.WebApp.Data.Hcs;
+using Hcs.WebApp.Services;
+
+namespace Hcs.WebApp.BackgroundServices.OperationExecutors.Nsi
+{
+ public class ExportDataProviderNsiItemExecutor_15_7_0_1(IClient client, IServiceScope scope, Operation operation) : ExecutorBase(client, scope, operation)
+ {
+ public override async Task ExecuteAsync(CancellationToken cancellationToken)
+ {
+ var registryService = scope.ServiceProvider.GetRequiredService();
+ var registry = await registryService.GetRegistryByOperationIdAsync(operation.Id);
+ var number = RegistryNumberFromInt(registry.Number);
+ return await client.Nsi.RequestExportDataProviderNsiItemAsync(number, cancellationToken);
+ }
+
+ private exportDataProviderNsiItemRequestRegistryNumber RegistryNumberFromInt(int number)
+ {
+ return number switch
+ {
+ 1 => exportDataProviderNsiItemRequestRegistryNumber.Item1,
+ 51 => exportDataProviderNsiItemRequestRegistryNumber.Item51,
+ 59 => exportDataProviderNsiItemRequestRegistryNumber.Item59,
+ 219 => exportDataProviderNsiItemRequestRegistryNumber.Item219,
+ 272 => exportDataProviderNsiItemRequestRegistryNumber.Item272,
+ 302 => exportDataProviderNsiItemRequestRegistryNumber.Item302,
+ 337 => exportDataProviderNsiItemRequestRegistryNumber.Item337,
+ _ => throw new ArgumentException($"Не удалось получить номер справочника из значения {number}"),
+ };
+ }
+ }
+}