118 lines
4.4 KiB
C#
118 lines
4.4 KiB
C#
using Hcs.Client.Api.Payload.HouseManagement;
|
||
using Hcs.Client.Api.Request.Exception;
|
||
using Hcs.Client.Internal;
|
||
using Hcs.Service.Async.HouseManagement;
|
||
using System;
|
||
using System.Linq;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace Hcs.Client.Api.Request.HouseManagement
|
||
{
|
||
internal class ImportHouseUODataRequest(ClientBase client) : HouseManagementRequestBase(client)
|
||
{
|
||
protected override bool CanBeRestarted => false;
|
||
|
||
internal async Task<bool> ExecuteAsync(ImportLivingHouseUODataPayload payload, CancellationToken token)
|
||
{
|
||
// TODO: Добавить проверку пейлоада
|
||
|
||
// http://open-gkh.ru/HouseManagement/importHouseUORequest.html
|
||
var request = new importHouseUORequest
|
||
{
|
||
Id = Constants.SIGNED_XML_ELEMENT_ID,
|
||
version = "13.2.3.2",
|
||
Item = GetLivingHouseFromPayload(payload)
|
||
};
|
||
|
||
var result = await SendAndWaitResultAsync(request, async asyncClient =>
|
||
{
|
||
var response = await asyncClient.importHouseUODataAsync(CreateRequestHeader(), request);
|
||
return response.AckRequest.Ack;
|
||
}, token);
|
||
|
||
result.Items.OfType<ErrorMessageType>().ToList().ForEach(error =>
|
||
{
|
||
throw RemoteException.CreateNew(error.ErrorCode, error.Description);
|
||
});
|
||
|
||
var importResults = result.Items.OfType<getStateResultImportResult>();
|
||
var commonResults = GetCommonResults(importResults);
|
||
foreach (var commonResult in commonResults)
|
||
{
|
||
if (commonResult.ItemElementName == ItemChoiceType26.ImportHouseUO)
|
||
{
|
||
return commonResult.Item is OGFImportStatusType;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
private importHouseUORequestLivingHouse GetLivingHouseFromPayload(ImportLivingHouseUODataPayload payload)
|
||
{
|
||
var livingHouse = new importHouseUORequestLivingHouseLivingHouseToCreate()
|
||
{
|
||
TransportGUID = Guid.NewGuid().ToString(),
|
||
BasicCharacteristicts = new HouseBasicUOType()
|
||
{
|
||
FIASHouseGuid = payload.fiasHouseGuid.ToString(),
|
||
TotalSquare = payload.totalSquare,
|
||
State = new nsiRef()
|
||
{
|
||
Code = payload.state.Code,
|
||
GUID = payload.state.GUID
|
||
},
|
||
LifeCycleStage = new nsiRef()
|
||
{
|
||
Code = payload.lifeCycleStage.Code,
|
||
GUID = payload.lifeCycleStage.GUID
|
||
},
|
||
UsedYear = payload.usedYear,
|
||
FloorCount = payload.floorCount,
|
||
OKTMO = payload.oktmo,
|
||
OlsonTZ = new nsiRef()
|
||
{
|
||
Code = payload.olsonTZ.Code,
|
||
GUID = payload.olsonTZ.GUID
|
||
},
|
||
CulturalHeritage = payload.culturalHeritage,
|
||
OGFData = payload.ogfData,
|
||
// TODO: Разобраться с кадастровым номером
|
||
Items = [true, payload.conditionalNumber],
|
||
ItemsElementName = [ItemsChoiceType3.NoCadastralNumber, ItemsChoiceType3.ConditionalNumber]
|
||
}
|
||
};
|
||
|
||
if (!payload.isMunicipalProperty)
|
||
{
|
||
livingHouse.BasicCharacteristicts.IsMunicipalProperty = false;
|
||
livingHouse.BasicCharacteristicts.IsMunicipalPropertySpecified = true;
|
||
}
|
||
|
||
if (!payload.isRegionProperty)
|
||
{
|
||
livingHouse.BasicCharacteristicts.IsRegionProperty = false;
|
||
livingHouse.BasicCharacteristicts.IsRegionPropertySpecified = true;
|
||
}
|
||
|
||
if (payload.hasBlocks)
|
||
{
|
||
livingHouse.HasBlocks = true;
|
||
livingHouse.HasBlocksSpecified = true;
|
||
}
|
||
|
||
if (payload.hasMultipleHousesWithSameAddress)
|
||
{
|
||
livingHouse.HasMultipleHousesWithSameAddress = true;
|
||
livingHouse.HasMultipleHousesWithSameAddressSpecified = true;
|
||
}
|
||
|
||
return new importHouseUORequestLivingHouse()
|
||
{
|
||
Item = livingHouse
|
||
};
|
||
}
|
||
}
|
||
}
|