Add project
Basic formatting applied. Unnecessary comments have been removed. Suspicious code is covered by TODO.
This commit is contained in:
@ -0,0 +1,133 @@
|
||||
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 HcsMethodImportSupplyResourceContractObjectAddress : HcsHouseManagementMethod
|
||||
{
|
||||
public HcsMethodImportSupplyResourceContractObjectAddress
|
||||
(HcsClientConfig config) : base(config)
|
||||
{
|
||||
EnableMinimalResponseWaitDelay = true;
|
||||
CanBeRestarted = true;
|
||||
}
|
||||
|
||||
public async Task ImportObjectAddresses(
|
||||
ГисДоговор договор,
|
||||
IEnumerable<ГисАдресныйОбъект> адресаДляРазмещения,
|
||||
IEnumerable<ГисАдресныйОбъект> адресаДляУдаления,
|
||||
CancellationToken token)
|
||||
{
|
||||
if (договор == null) throw new ArgumentNullException(nameof(договор));
|
||||
|
||||
var list = new List<HouseManagement.importSupplyResourceContractObjectAddressRequestObjectAddress>();
|
||||
if (адресаДляРазмещения != null) list.AddRange(адресаДляРазмещения.Select(AdoptForLoading));
|
||||
if (адресаДляУдаления != null) list.AddRange(адресаДляУдаления.Select(AdoptForRemoval));
|
||||
|
||||
var request = new HouseManagement.importSupplyResourceContractObjectAddressRequest()
|
||||
{
|
||||
Id = HcsConstants.SignedXmlElementId,
|
||||
Item = FormatGuid(договор.ГуидДоговора),
|
||||
ItemElementName = HouseManagement.ItemChoiceType28.ContractRootGUID,
|
||||
ObjectAddress = list.ToArray()
|
||||
// TODO: Проверить комментарий
|
||||
//version = "13.1.1.1" // Версия указана в API
|
||||
};
|
||||
|
||||
var stateResult = await SendAndWaitResultAsync(request, async (portClient) =>
|
||||
{
|
||||
var ackResponse = await portClient.importSupplyResourceContractObjectAddressDataAsync(
|
||||
CreateRequestHeader(), request);
|
||||
return ackResponse.AckRequest.Ack;
|
||||
}, token);
|
||||
|
||||
ParseImportResults(stateResult, list.Count(), true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Готовит структуру адресного объекта для удаления в ГИС
|
||||
/// </summary>
|
||||
private HouseManagement.importSupplyResourceContractObjectAddressRequestObjectAddress AdoptForRemoval(
|
||||
ГисАдресныйОбъект адрес)
|
||||
{
|
||||
if (адрес == null) throw new ArgumentNullException(nameof(адрес));
|
||||
|
||||
Guid transportGuid = Guid.NewGuid();
|
||||
|
||||
bool deleteObject = true;
|
||||
|
||||
return new HouseManagement.importSupplyResourceContractObjectAddressRequestObjectAddress()
|
||||
{
|
||||
TransportGUID = FormatGuid(transportGuid),
|
||||
ObjectGUID = FormatGuid(адрес.ГуидАдресногоОбъекта),
|
||||
Item = deleteObject
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Готовит структуру адресного объекта для добавления/обновления в ГИС
|
||||
/// </summary>
|
||||
private HouseManagement.importSupplyResourceContractObjectAddressRequestObjectAddress AdoptForLoading(
|
||||
ГисАдресныйОбъект адрес)
|
||||
{
|
||||
if (адрес == null) throw new ArgumentNullException(nameof(адрес));
|
||||
|
||||
Guid transportGuid = Guid.NewGuid();
|
||||
|
||||
var serviceType = new HouseManagement.ContractSubjectObjectAdressTypeServiceType()
|
||||
{
|
||||
Code = HcsHouseManagementNsi.ElectricSupplyServiceType.Code,
|
||||
GUID = HcsHouseManagementNsi.ElectricSupplyServiceType.GUID,
|
||||
Name = HcsHouseManagementNsi.ElectricSupplyServiceType.Name
|
||||
};
|
||||
|
||||
var municipalResource = new HouseManagement.ContractSubjectObjectAdressTypeMunicipalResource()
|
||||
{
|
||||
Code = HcsHouseManagementNsi.ElectricSupplyMunicipalResource.Code,
|
||||
GUID = HcsHouseManagementNsi.ElectricSupplyMunicipalResource.GUID,
|
||||
Name = HcsHouseManagementNsi.ElectricSupplyMunicipalResource.Name
|
||||
};
|
||||
|
||||
var pair = new HouseManagement.importSupplyResourceContractObjectAddressRequestObjectAddressLoadObjectPair()
|
||||
{
|
||||
// TODO: Проверить комментарий
|
||||
TransportGUID = FormatGuid(Guid.NewGuid()), // Получал BadRequest пока не сделал здесь новый GUID
|
||||
ServiceType = serviceType,
|
||||
MunicipalResource = municipalResource,
|
||||
// TODO: Проверить комментарий
|
||||
StartSupplyDate = DateTime.Now // В договоре нет даты начала снабжения адреса, ставлю что-нибудь
|
||||
};
|
||||
|
||||
var loadObject = new HouseManagement.importSupplyResourceContractObjectAddressRequestObjectAddressLoadObject()
|
||||
{
|
||||
FIASHouseGuid = FormatGuid(адрес.ГуидЗданияФиас),
|
||||
ApartmentNumber = MakeEmptyNull(адрес.НомерПомещения),
|
||||
RoomNumber = MakeEmptyNull(адрес.НомерКомнаты),
|
||||
Pair = [pair]
|
||||
};
|
||||
|
||||
var address = new HouseManagement.importSupplyResourceContractObjectAddressRequestObjectAddress()
|
||||
{
|
||||
TransportGUID = FormatGuid(transportGuid),
|
||||
Item = loadObject
|
||||
};
|
||||
|
||||
if (адрес.ГуидАдресногоОбъекта != default)
|
||||
{
|
||||
address.ObjectGUID = FormatGuid(адрес.ГуидАдресногоОбъекта);
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user