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