Add export from nsi service

This commit is contained in:
2025-08-14 12:00:48 +09:00
parent de36ea2a13
commit c6c1b31575
8 changed files with 127 additions and 9 deletions

View File

@ -1,4 +1,8 @@
using System.Threading;
using Hcs.ClientApi.DataTypes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Nsi = Hcs.Service.Async.Nsi.v15_7_0_1;
@ -19,12 +23,15 @@ namespace Hcs.ClientApi.NsiApi
/// <summary>
/// Возвращает данные справочников поставщика информации
/// </summary>
public async Task<object[]> GetNsiItem(int regNum, CancellationToken token)
/// <param name="regNum">Реестровый номер справочника</param>
/// <param name="token">Токен отмены</param>
/// <returns>Список справочников</returns>
public async Task<IEnumerable<ГисСправочник>> GetNsiItem(int regNum, CancellationToken token)
{
var request = new Nsi.exportDataProviderNsiItemRequest
{
Id = HcsConstants.SignedXmlElementId,
RegistryNumber = (Nsi.exportDataProviderNsiItemRequestRegistryNumber)regNum,
RegistryNumber = GetRegNumFromInt(regNum),
// http://open-gkh.ru/Nsi/exportDataProviderNsiItemRequest.html
version = "10.0.1.2"
};
@ -35,7 +42,69 @@ namespace Hcs.ClientApi.NsiApi
return response.AckRequest.Ack;
}, token);
return stateResult.Items;
return stateResult.Items
.OfType<Nsi.NsiItemType>()
.Select(x => AdoptNsiItemType(x));
}
private Nsi.exportDataProviderNsiItemRequestRegistryNumber GetRegNumFromInt(int regNum)
{
switch (regNum)
{
case 1:
return Nsi.exportDataProviderNsiItemRequestRegistryNumber.Item1;
case 51:
return Nsi.exportDataProviderNsiItemRequestRegistryNumber.Item51;
case 59:
return Nsi.exportDataProviderNsiItemRequestRegistryNumber.Item59;
case 219:
return Nsi.exportDataProviderNsiItemRequestRegistryNumber.Item219;
case 272:
return Nsi.exportDataProviderNsiItemRequestRegistryNumber.Item272;
case 302:
return Nsi.exportDataProviderNsiItemRequestRegistryNumber.Item302;
case 337:
return Nsi.exportDataProviderNsiItemRequestRegistryNumber.Item337;
default:
throw new NotImplementedException($"Cannot convert {regNum} to {typeof(Nsi.exportDataProviderNsiItemRequestRegistryNumber)}");
}
}
private ГисСправочник AdoptNsiItemType(Nsi.NsiItemType input)
{
var справочник = new ГисСправочник()
{
РеестровыйНомер = input.NsiItemRegistryNumber,
ДатаФормирования = input.Created,
Элементы = AdoptNsiElementTypes(input.NsiElement)
};
return справочник;
}
private ГисЭлементСправочника[] AdoptNsiElementTypes(Nsi.NsiElementType[] input)
{
var элементыСправочника = new List<ГисЭлементСправочника>();
foreach (var element in input)
{
// TODO: Добавить конвертацию типов
//var поляЭлементаСправочника = new List<ГисПолеЭлементаСправочника>();
//foreach (var field in element.NsiElementField)
//{
//}
элементыСправочника.Add(new ГисЭлементСправочника()
{
Код = element.Code,
Гуид = ParseGuid(element.GUID),
Актуальный = element.IsActual,
// TODO: Добавить конвертацию типов
//Поля = [.. поляЭлементаСправочника]
Поля = element.NsiElementField,
Элементы = element.ChildElement.Length > 0 ? AdoptNsiElementTypes(element.ChildElement) : null
});
}
return [.. элементыСправочника];
}
}
}

View File

@ -1,4 +1,6 @@
using System.Threading;
using Hcs.ClientApi.DataTypes;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace Hcs.ClientApi.NsiApi
@ -12,7 +14,13 @@ namespace Hcs.ClientApi.NsiApi
Config = config;
}
public async Task<object[]> GetNsiItem(int regNum, CancellationToken token = default)
/// <summary>
/// Возвращает данные справочников поставщика информации
/// </summary>
/// <param name="regNum">Реестровый номер справочника</param>
/// <param name="token">Токен отмены</param>
/// <returns>Список справочников</returns>
public async Task<IEnumerable<ГисСправочник>> GetNsiItem(int regNum, CancellationToken token = default)
{
try
{