Add export from nsi service
This commit is contained in:
@ -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 [.. элементыСправочника];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user