Basic formatting applied. Unnecessary comments have been removed. Suspicious code is covered by TODO.
102 lines
4.2 KiB
C#
102 lines
4.2 KiB
C#
using Hcs.ClientApi.DataTypes;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
|
||
using HouseManagement = Hcs.Service.Async.HouseManagement.v14_5_0_1;
|
||
|
||
namespace Hcs.ClientApi.HouseManagementApi
|
||
{
|
||
/// <summary>
|
||
/// Метод получения информации о доме и его помещениях
|
||
/// </summary>
|
||
public class HcsMethodExportHouse : HcsHouseManagementMethod
|
||
{
|
||
public HcsMethodExportHouse(HcsClientConfig config) : base(config)
|
||
{
|
||
CanBeRestarted = true;
|
||
}
|
||
|
||
public async Task<ГисЗдание> ExportHouseByFiasGuid(Guid fiasHouseGuid, CancellationToken token)
|
||
{
|
||
var request = new HouseManagement.exportHouseRequest
|
||
{
|
||
Id = HcsConstants.SignedXmlElementId,
|
||
FIASHouseGuid = FormatGuid(fiasHouseGuid),
|
||
// TODO: Тут хардкод версии
|
||
version = "12.2.0.1"
|
||
};
|
||
|
||
var stateResult = await SendAndWaitResultAsync(request, async (portClient) =>
|
||
{
|
||
var response = await portClient.exportHouseDataAsync(CreateRequestHeader(), request);
|
||
return response.AckRequest.Ack;
|
||
}, token);
|
||
|
||
return Adopt(RequireSingleItem<HouseManagement.exportHouseResultType>(stateResult.Items));
|
||
}
|
||
|
||
private ГисЗдание Adopt(HouseManagement.exportHouseResultType source)
|
||
{
|
||
bool заполнен = false;
|
||
|
||
var дом = new ГисЗдание();
|
||
дом.НомерДомаГис = source.HouseUniqueNumber;
|
||
var помещения = new List<ГисПомещение>();
|
||
|
||
var apartmentHouse = source.Item as HouseManagement.exportHouseResultTypeApartmentHouse;
|
||
if (apartmentHouse != null)
|
||
{
|
||
дом.ТипДома = ГисТипДома.Многоквартирный;
|
||
дом.ГуидЗданияФиас = ParseGuid(apartmentHouse.BasicCharacteristicts.FIASHouseGuid);
|
||
if (apartmentHouse.ResidentialPremises != null)
|
||
{
|
||
apartmentHouse.ResidentialPremises.ToList().ForEach(x => помещения.Add(Adopt(x)));
|
||
}
|
||
if (apartmentHouse.NonResidentialPremises != null)
|
||
{
|
||
apartmentHouse.NonResidentialPremises.ToList().ForEach(x => помещения.Add(Adopt(x)));
|
||
}
|
||
заполнен = true;
|
||
}
|
||
|
||
var livingHouse = source.Item as HouseManagement.exportHouseResultTypeLivingHouse;
|
||
if (livingHouse != null)
|
||
{
|
||
дом.ТипДома = ГисТипДома.Жилой;
|
||
дом.ГуидЗданияФиас = ParseGuid(livingHouse.BasicCharacteristicts.FIASHouseGuid);
|
||
заполнен = true;
|
||
}
|
||
|
||
if (!заполнен) throw new HcsException("В информации о доме неизвестный тип данных: " + source.Item);
|
||
|
||
дом.Помещения = помещения.ToArray();
|
||
return дом;
|
||
}
|
||
|
||
private ГисПомещение Adopt(HouseManagement.exportHouseResultTypeApartmentHouseResidentialPremises source)
|
||
{
|
||
return new ГисПомещение()
|
||
{
|
||
ЭтоЖилоеПомещение = true,
|
||
НомерПомещения = source.PremisesNum,
|
||
ГуидПомещения = ParseGuid(source.PremisesGUID),
|
||
ДатаПрекращения = source.TerminationDateSpecified ? source.TerminationDate : null,
|
||
Аннулирование = source.AnnulmentInfo
|
||
};
|
||
}
|
||
|
||
private ГисПомещение Adopt(HouseManagement.exportHouseResultTypeApartmentHouseNonResidentialPremises source)
|
||
{
|
||
return new ГисПомещение()
|
||
{
|
||
ЭтоЖилоеПомещение = false,
|
||
НомерПомещения = source.PremisesNum,
|
||
ГуидПомещения = ParseGuid(source.PremisesGUID)
|
||
};
|
||
}
|
||
}
|
||
}
|