Add export data provider nsi item executor

This commit is contained in:
2025-11-05 09:19:25 +09:00
parent 35c4bb37ce
commit acbbc13fa8
6 changed files with 77 additions and 0 deletions

View File

@ -13,5 +13,13 @@ namespace Hcs.Broker.Mock.Api
return []; return [];
} }
/// <inheritdoc cref="INsiApi"/>
public async Task<string> RequestExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default)
{
await Task.Delay(3000, token);
return Guid.NewGuid().ToString();
}
} }
} }

View File

@ -12,5 +12,13 @@ namespace Hcs.Broker.Api
/// <param name="token">Токен отмены</param> /// <param name="token">Токен отмены</param>
/// <returns>Данные справочника</returns> /// <returns>Данные справочника</returns>
Task<IEnumerable<NsiItemType>> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default); Task<IEnumerable<NsiItemType>> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default);
/// <summary>
/// Запрашивает экспорт данных справочника поставщика информации
/// </summary>
/// <param name="registryNumber">Реестровый номер справочника</param>
/// <param name="token">Токен отмены</param>
/// <returns>Идентификатор сообщения операции экспорта</returns>
Task<string> RequestExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default);
} }
} }

View File

@ -20,5 +20,12 @@ namespace Hcs.Broker.Api
return []; return [];
} }
} }
/// <inheritdoc cref="INsiApi"/>
public async Task<string> RequestExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default)
{
var request = new ExportDataProviderNsiItemRequest(client);
return await request.SendAsync(registryNumber, token);
}
} }
} }

View File

@ -23,5 +23,22 @@ namespace Hcs.Broker.Api.Request.Nsi
return result.Items.OfType<NsiItemType>(); return result.Items.OfType<NsiItemType>();
} }
internal async Task<string> 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);
}
} }
} }

View File

@ -1,4 +1,5 @@
using Hcs.Broker; using Hcs.Broker;
using Hcs.WebApp.BackgroundServices.OperationExecutors.Nsi;
using Hcs.WebApp.BackgroundServices.OperationExecutors.NsiCommon; using Hcs.WebApp.BackgroundServices.OperationExecutors.NsiCommon;
using Hcs.WebApp.Data.Hcs; using Hcs.WebApp.Data.Hcs;
@ -10,6 +11,9 @@ namespace Hcs.WebApp.BackgroundServices.OperationExecutors
{ {
switch (operation.Type) 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: case Operation.OperationType.NsiCommon_ExportNsiItem_15_7_0_1:
return new ExportNsiItemExecutor_15_7_0_1(client, scope, operation); return new ExportNsiItemExecutor_15_7_0_1(client, scope, operation);
} }

View File

@ -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<string> ExecuteAsync(CancellationToken cancellationToken)
{
var registryService = scope.ServiceProvider.GetRequiredService<RegistryService>();
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}"),
};
}
}
}