diff --git a/Hcs.Client/Client/Api/HouseManagementApi.cs b/Hcs.Client/Client/Api/HouseManagementApi.cs index 1176b43..3f03297 100644 --- a/Hcs.Client/Client/Api/HouseManagementApi.cs +++ b/Hcs.Client/Client/Api/HouseManagementApi.cs @@ -118,6 +118,18 @@ namespace Hcs.Client.Api return await request.ExecuteAsync(payload, token); } + /// + /// Импорт прибора учета + /// + /// Прибор учета + /// Токен отмены + /// true, если операция выполнена успешно, иначе - false + public async Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default) + { + var request = new ImportMeteringDeviceDataRequest(client); + return await request.ExecuteAsync(meteringDevice, token); + } + /// /// Импорт новости для информирования граждан /// diff --git a/Hcs.Client/Client/Api/Registry/Registry16.cs b/Hcs.Client/Client/Api/Registry/Registry16.cs new file mode 100644 index 0000000..060aee5 --- /dev/null +++ b/Hcs.Client/Client/Api/Registry/Registry16.cs @@ -0,0 +1,20 @@ +using Hcs.Service.Async.HouseManagement; + +namespace Hcs.Client.Api.Registry +{ + /// + /// НСИ "Межповерочный интервал" (реестровый номер 16). + /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-16/v1. + /// + public static class Registry16 + { + /// + /// 4 года + /// + public static nsiRef Element4 => new() + { + Code = "4", + GUID = "296aff1b-0fbe-4111-9aea-1693a6e58db0" + }; + } +} diff --git a/Hcs.Client/Client/Api/Request/HouseManagement/ImportMeteringDeviceDataRequest.cs b/Hcs.Client/Client/Api/Request/HouseManagement/ImportMeteringDeviceDataRequest.cs new file mode 100644 index 0000000..0b2f140 --- /dev/null +++ b/Hcs.Client/Client/Api/Request/HouseManagement/ImportMeteringDeviceDataRequest.cs @@ -0,0 +1,56 @@ +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 ImportMeteringDeviceDataRequest(ClientBase client) : HouseManagementRequestBase(client) + { + protected override bool CanBeRestarted => false; + + internal async Task ExecuteAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token) + { + // http://open-gkh.ru/HouseManagement/importMeteringDeviceDataRequest.html + var request = new importMeteringDeviceDataRequest + { + Id = Constants.SIGNED_XML_ELEMENT_ID, + version = "11.1.0.8", + MeteringDevice = + [ + new importMeteringDeviceDataRequestMeteringDevice() + { + TransportGUID = Guid.NewGuid().ToString(), + Item = meteringDevice + } + ] + }; + + var result = await SendAndWaitResultAsync(request, async asyncClient => + { + var response = await asyncClient.importMeteringDeviceDataAsync(CreateRequestHeader(), request); + return response.AckRequest.Ack; + }, token); + + result.Items.OfType().ToList().ForEach(error => + { + throw RemoteException.CreateNew(error.ErrorCode, error.Description); + }); + + var importResults = result.Items.OfType(); + var commonResults = GetCommonResults(importResults); + foreach (var commonResult in commonResults) + { + if (commonResult.ItemElementName == ItemChoiceType26.importMeteringDevice) + { + return commonResult.Item is getStateResultImportResultCommonResultImportMeteringDevice; + } + } + + return false; + } + } +} diff --git a/Hcs.Client/Hcs.Client.csproj b/Hcs.Client/Hcs.Client.csproj index b156b4e..7d460dd 100644 --- a/Hcs.Client/Hcs.Client.csproj +++ b/Hcs.Client/Hcs.Client.csproj @@ -74,6 +74,7 @@ + @@ -101,6 +102,7 @@ + diff --git a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs index d0901be..fd1a2e7 100644 --- a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs +++ b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs @@ -183,6 +183,41 @@ namespace Hcs.TestApp.Scenario Console.WriteLine("Scenario execution " + (result ? "succeeded" : "failed")); } + internal void ImportMeteringDeviceData() + { + var result = client.HouseManagement.ImportMeteringDeviceDataAsync(new MeteringDeviceFullInformationType() + { + BasicChatacteristicts = new MeteringDeviceBasicCharacteristicsType() + { + MeteringDeviceNumber = "Н43733003", + MeteringDeviceStamp = "-", + MeteringDeviceModel = "-", + CommissioningDate = new DateTime(2021, 1, 1), + CommissioningDateSpecified = true, + RemoteMeteringMode = false, + FirstVerificationDate = new DateTime(2021, 1, 1), + FirstVerificationDateSpecified = true, + VerificationInterval = Registry16.Element4, + FactorySealDate = new DateTime(2021, 1, 1), + FactorySealDateSpecified = true, + TemperatureSensor = false, + PressureSensor = false, + Item = new MeteringDeviceBasicCharacteristicsTypeResidentialPremiseDevice() + { + PremiseGUID = ["6e011824-3d8a-48d7-b0ee-7b36be7096bf"], + AccountGUID = ["019917a8-6eb6-74cc-99b7-58350127ac50"] + } + }, + Item = true, + Items = [new MunicipalResourceNotElectricBaseType() + { + MunicipalResource = Registry239.Element4, + MeteringValue = "0" + }] + }).Result; + Console.WriteLine("Scenario execution " + (result ? "succeeded" : "failed")); + } + internal void ImportNotificationData() { var payload = new ImportNotificationDataPayload()