diff --git a/Hcs.Client/Client/Api/HouseManagementApi.cs b/Hcs.Client/Client/Api/HouseManagementApi.cs
index 72b4118..15e5e10 100644
--- a/Hcs.Client/Client/Api/HouseManagementApi.cs
+++ b/Hcs.Client/Client/Api/HouseManagementApi.cs
@@ -44,5 +44,17 @@ namespace Hcs.Client.Api
var request = new ExportSupplyResourceContractDataRequest(client);
return await request.ExecuteAsync(contractNumber, token);
}
+
+ ///
+ /// Возвращает объекты жилищного фонда из договора ресурсоснабжения по его идентификатору
+ ///
+ /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ
+ /// Токен отмены
+ /// Объекты жилищного фонда
+ public async Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default)
+ {
+ var request = new ExportSupplyResourceContractObjectAddressDataRequest(client);
+ return await request.ExecuteAsync(contractRootGuid, token);
+ }
}
}
diff --git a/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs b/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs
index e5825a7..53a9f4c 100644
--- a/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs
+++ b/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs
@@ -1,4 +1,5 @@
-using Hcs.Client.Internal;
+using Hcs.Client.Api.Request.Exception;
+using Hcs.Client.Internal;
using Hcs.Service.Async.HouseManagement;
using System;
using System.Collections.Generic;
@@ -107,17 +108,28 @@ namespace Hcs.Client.Api.Request.HouseManagement
Items = [.. items]
};
- var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ try
{
- var ackResponse = await asyncClient.exportSupplyResourceContractDataAsync(
- CreateRequestHeader(), request);
- return ackResponse.AckRequest.Ack;
- }, token);
+ var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ {
+ var ackResponse = await asyncClient.exportSupplyResourceContractDataAsync(
+ CreateRequestHeader(), request);
+ return ackResponse.AckRequest.Ack;
+ }, token);
- var contractResult = result.Items.OfType().First();
- onResultReceived?.Invoke(contractResult.Contract);
+ var contractResult = result.Items.OfType().First();
+ onResultReceived?.Invoke(contractResult.Contract);
- return new PaginationData(contractResult.Item);
+ return new PaginationData(contractResult.Item);
+ }
+ catch (NoResultsRemoteException)
+ {
+ return PaginationData.CreateLastPageData();
+ }
+ catch (System.Exception e)
+ {
+ throw e;
+ }
}
}
}
diff --git a/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractObjectAddressDataRequest.cs b/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractObjectAddressDataRequest.cs
new file mode 100644
index 0000000..97c743f
--- /dev/null
+++ b/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractObjectAddressDataRequest.cs
@@ -0,0 +1,96 @@
+using Hcs.Client.Api.Request.Exception;
+using Hcs.Client.Internal;
+using Hcs.Service.Async.HouseManagement;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.Client.Api.Request.HouseManagement
+{
+ internal class ExportSupplyResourceContractObjectAddressDataRequest(ClientBase client) : HouseManagementRequestBase(client)
+ {
+ internal async Task> ExecuteAsync(Guid contractRootGuid, CancellationToken token)
+ {
+ var result = new List();
+
+ void OnResultReceived(exportSupplyResourceContractObjectAddressResultType[] addresses)
+ {
+ if (addresses?.Length > 0)
+ {
+ result.AddRange(addresses);
+ }
+ }
+
+ var pageNum = 0;
+ Guid? exportObjectGuid = null;
+ while (true)
+ {
+ pageNum++;
+
+ client.TryLog($"Querying page #{pageNum}...");
+
+ var data = await QueryBatchAsync(contractRootGuid, exportObjectGuid, OnResultReceived, token);
+ if (data.IsLastPage)
+ {
+ break;
+ }
+
+ exportObjectGuid = data.NextGuid;
+ }
+
+ return result;
+ }
+
+ private async Task QueryBatchAsync(
+ Guid contractRootGuid, Guid? exportObjectGuid,
+ Action onResultReceived,
+ CancellationToken token)
+ {
+ var itemsElementName = new List();
+ var items = new List();
+
+ itemsElementName.Add(ItemsChoiceType34.ContractRootGUID);
+ items.Add(contractRootGuid.ToString());
+
+ if (exportObjectGuid.HasValue)
+ {
+ itemsElementName.Add(ItemsChoiceType34.ExportObjectGUID);
+ items.Add(exportObjectGuid.ToString());
+ }
+
+ // http://open-gkh.ru/HouseManagement/exportSupplyResourceContractObjectAddressRequest.html
+ var request = new exportSupplyResourceContractObjectAddressRequest
+ {
+ Id = Constants.SIGNED_XML_ELEMENT_ID,
+ version = "13.1.1.1",
+ ItemsElementName = [.. itemsElementName],
+ Items = [.. items]
+ };
+
+ try
+ {
+ var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ {
+ var ackResponse = await asyncClient.exportSupplyResourceContractObjectAddressDataAsync(
+ CreateRequestHeader(), request);
+ return ackResponse.AckRequest.Ack;
+ }, token);
+
+ var contractResult = result.Items.OfType().First();
+ onResultReceived?.Invoke(contractResult.ObjectAddress);
+
+ return new PaginationData(contractResult.Item);
+ }
+ catch (NoResultsRemoteException)
+ {
+ return PaginationData.CreateLastPageData();
+ }
+ catch (System.Exception e)
+ {
+ throw e;
+ }
+ }
+ }
+}
diff --git a/Hcs.Client/Hcs.Client.csproj b/Hcs.Client/Hcs.Client.csproj
index 2b16469..c758742 100644
--- a/Hcs.Client/Hcs.Client.csproj
+++ b/Hcs.Client/Hcs.Client.csproj
@@ -81,6 +81,7 @@
+
diff --git a/Hcs.TestApp/TestApp/Program.cs b/Hcs.TestApp/TestApp/Program.cs
index be9bf73..f6232d4 100644
--- a/Hcs.TestApp/TestApp/Program.cs
+++ b/Hcs.TestApp/TestApp/Program.cs
@@ -45,6 +45,8 @@ namespace Hcs.TestApp
//houseManagementScenario.ExportSupplyResourceContractDataByGuid();
//houseManagementScenario.ExportSupplyResourceContractDataByNumber();
+ //houseManagementScenario.ExportSupplyResourceContractObjectAddressData();
+
//nsiScenario.ExportDataProviderNsiItem1();
//nsiScenario.ExportDataProviderNsiItem51();
//nsiScenario.ExportDataProviderNsiItem59();
diff --git a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs
index 5b2a785..310ac9d 100644
--- a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs
+++ b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs
@@ -24,5 +24,11 @@ namespace Hcs.TestApp.Scenario
var result = client.HouseManagement.ExportSupplyResourceContractDataAsync("239009043").Result;
Console.WriteLine("Scenario execution " + (result != null ? "succeeded" : "failed"));
}
+
+ internal void ExportSupplyResourceContractObjectAddressData()
+ {
+ var result = client.HouseManagement.ExportSupplyResourceContractObjectAddressDataAsync(Guid.Parse("575a7ff9-5473-4ab4-b077-fa80c1f85f0b")).Result;
+ Console.WriteLine("Scenario execution " + (result != null ? "succeeded" : "failed"));
+ }
}
}