diff --git a/Hcs.Client/Client/Api/HouseManagementApi.cs b/Hcs.Client/Client/Api/HouseManagementApi.cs index 1109e02..72b4118 100644 --- a/Hcs.Client/Client/Api/HouseManagementApi.cs +++ b/Hcs.Client/Client/Api/HouseManagementApi.cs @@ -1,6 +1,7 @@ using Hcs.Client.Api.Request.HouseManagement; using Hcs.Service.Async.HouseManagement; using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -9,6 +10,17 @@ namespace Hcs.Client.Api // http://open-gkh.ru/HouseManagementServiceAsync/ public class HouseManagementApi(ClientBase client) : ApiBase(client) { + /// + /// Возвращает все договора ресурсоснабжения + /// + /// Токен отмены + /// Договора ресурсоснабжения + public async Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default) + { + var request = new ExportSupplyResourceContractDataRequest(client); + return await request.ExecuteAsync(token); + } + /// /// Возвращает договор ресурсоснабжения по его идентификатору в ГИС ЖКХ /// @@ -20,5 +32,17 @@ namespace Hcs.Client.Api var request = new ExportSupplyResourceContractDataRequest(client); return await request.ExecuteAsync(contractRootGuid, token); } + + /// + /// Возвращает договор ресурсоснабжения по номеру договора в ГИС ЖКХ + /// + /// Номер договора ресурсоснабжения в ГИС ЖКХ + /// Токен отмены + /// Договор ресурсоснабжения + public async Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default) + { + var request = new ExportSupplyResourceContractDataRequest(client); + return await request.ExecuteAsync(contractNumber, token); + } } } diff --git a/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs b/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs index 24eb256..e5825a7 100644 --- a/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs +++ b/Hcs.Client/Client/Api/Request/HouseManagement/ExportSupplyResourceContractDataRequest.cs @@ -12,13 +12,45 @@ namespace Hcs.Client.Api.Request.HouseManagement { protected override bool EnableMinimalResponseWaitDelay => false; + internal async Task> ExecuteAsync(CancellationToken token) + { + var result = new List(); + + void OnResultReceived(exportSupplyResourceContractResultType[] contracts) + { + if (contracts?.Length > 0) + { + result.AddRange(contracts); + } + } + + var pageNum = 0; + Guid? exportContractRootGuid = null; + while (true) + { + pageNum++; + + client.TryLog($"Querying page #{pageNum}..."); + + var data = await QueryBatchAsync(null, null, exportContractRootGuid, OnResultReceived, token); + if (data.IsLastPage) + { + break; + } + + exportContractRootGuid = data.NextGuid; + } + + return result; + } + internal async Task ExecuteAsync(Guid contractRootGuid, CancellationToken token) { exportSupplyResourceContractResultType result = null; void OnResultReceived(exportSupplyResourceContractResultType[] contracts) { - result = contracts.Length > 0 ? contracts[0] : null; + result = contracts?.Length > 0 ? contracts[0] : null; } await QueryBatchAsync(contractRootGuid, null, null, OnResultReceived, token); @@ -26,6 +58,20 @@ namespace Hcs.Client.Api.Request.HouseManagement return result; } + internal async Task ExecuteAsync(string contractNumber, CancellationToken token) + { + exportSupplyResourceContractResultType result = null; + + void OnResultReceived(exportSupplyResourceContractResultType[] contracts) + { + result = contracts?.Length > 0 ? contracts[0] : null; + } + + await QueryBatchAsync(null, contractNumber, null, OnResultReceived, token); + + return result; + } + private async Task QueryBatchAsync( Guid? contractRootGuid, string contractNumber, Guid? exportContractRootGuid, Action onResultReceived, diff --git a/Hcs.TestApp/TestApp/Program.cs b/Hcs.TestApp/TestApp/Program.cs index 7a5d5fc..be9bf73 100644 --- a/Hcs.TestApp/TestApp/Program.cs +++ b/Hcs.TestApp/TestApp/Program.cs @@ -41,7 +41,9 @@ namespace Hcs.TestApp var nsiCommonScenario = new NsiCommonScenario(client); try { + //houseManagementScenario.ExportAllSupplyResourceContractData(); //houseManagementScenario.ExportSupplyResourceContractDataByGuid(); + //houseManagementScenario.ExportSupplyResourceContractDataByNumber(); //nsiScenario.ExportDataProviderNsiItem1(); //nsiScenario.ExportDataProviderNsiItem51(); diff --git a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs index 6aa471c..5b2a785 100644 --- a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs +++ b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs @@ -7,10 +7,22 @@ namespace Hcs.TestApp.Scenario { private readonly UniClient client = client; + internal void ExportAllSupplyResourceContractData() + { + var result = client.HouseManagement.ExportSupplyResourceContractDataAsync().Result; + Console.WriteLine("Scenario execution " + (result != null ? "succeeded" : "failed")); + } + internal void ExportSupplyResourceContractDataByGuid() { var result = client.HouseManagement.ExportSupplyResourceContractDataAsync(Guid.Parse("575a7ff9-5473-4ab4-b077-fa80c1f85f0b")).Result; Console.WriteLine("Scenario execution " + (result != null ? "succeeded" : "failed")); } + + internal void ExportSupplyResourceContractDataByNumber() + { + var result = client.HouseManagement.ExportSupplyResourceContractDataAsync("239009043").Result; + Console.WriteLine("Scenario execution " + (result != null ? "succeeded" : "failed")); + } } }