using Hcs.ClientApi.DataTypes; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace Hcs.ClientApi.HouseManagementApi { /// /// Методы ГИС ЖКХ сервиса hcs-house-management (Договоры, ЛицевыеСчета, Приборы учета) /// public class HcsHouseManagementApi { public HcsClientConfig Config { get; private set; } public HcsHouseManagementApi(HcsClientConfig config) { this.Config = config; } /// /// Размещает договор и возвращает дату размещения /// public async Task РазместитьДоговор( ГисДоговор договор, IEnumerable<ГисАдресныйОбъект> адреса, CancellationToken token = default) { var method = new HcsMethodImportSupplyResourceContractData(Config); return await method.ImportContract(договор, адреса, token); } /// /// Размещает лицевой счет и возвращает его ЕЛС /// public async Task РазместитьЛицевойСчет( ГисДоговор договор, ГисЛицевойСчет лицевойСчет, CancellationToken token = default) { var method = new HcsMethodImportAccountData(Config); return await method.ImportAccount(договор, лицевойСчет, token); } /// /// Размещает прибор учета и возвращает его ГУИД /// public async Task РазместитьПриборУчета( ГисПриборУчета прибор, CancellationToken token = default) { var method = new HcsMethodImportMeteringDeviceData(Config); return await method.ImportMeteringDevice(прибор, token); } public async Task АрхивироватьПриборУчета( ГисПриборУчета прибор, CancellationToken token = default) { var method = new HcsMethodImportMeteringDeviceData(Config); return await method.ArchiveMeteringDevice(прибор, token); } public async Task РасторгнутьДоговор( ГисДоговор договор, DateTime датаРасторжения, CancellationToken token = default) { var method = new HcsMethodImportSupplyResourceContractData(Config); return await method.TerminateContract(договор, датаРасторжения, token); } public async Task АннулироватьДоговор( ГисДоговор договор, string причина, CancellationToken token = default) { var method = new HcsMethodImportSupplyResourceContractData(Config); return await method.AnnulContract(договор, причина, token); } public async Task УдалитьПроектДоговора( ГисДоговор договор, CancellationToken token = default) { var method = new HcsMethodImportSupplyResourceContractProject(Config); await method.DeleteContractProject(договор, token); } /// /// Переводит проект договора в состояние "Размещен" /// public async Task РазместитьПроектДоговора( ГисДоговор договор, CancellationToken token = default) { var method = new HcsMethodImportSupplyResourceContractProject(Config); await method.PlaceContractProject(договор, token); } /// /// Получение одного договора ресурсоснабжения по его ГУИД. /// Если такого договора нет, будет выброшено HcsNoResultsRemoteException. /// public async Task<ГисДоговор> ПолучитьДоговорРСО( Guid гуидДоговора, CancellationToken token = default) { var method = new HcsMethodExportSupplyResourceContractData(Config); method.EnableMinimalResponseWaitDelay = true; return await method.QueryOne(гуидДоговора, token); } /// /// Получение одного договора ресурсоснабжения по его номеру. /// Если такого договора нет, будет выброшено HcsNoResultsRemoteException. /// public async Task<ГисДоговор[]> ПолучитьДоговорыРСО( string номерДоговора, CancellationToken token = default) { var method = new HcsMethodExportSupplyResourceContractData(Config); method.EnableMinimalResponseWaitDelay = true; return await method.QueryByContractNumber(номерДоговора, token); } /// /// Получение списка договоров ресурсоснабжения /// public async Task ПолучитьДоговорыРСО( Action<ГисДоговор> resultHandler, CancellationToken token = default) { var method = new HcsMethodExportSupplyResourceContractData(Config); return await method.QueryAll(resultHandler, token); } /// /// Запрос на экспорт объектов жилищного фонда из договора ресурсоснабжения /// public async Task ПолучитьАдресаДоговораРСО( ГисДоговор договор, Action<ГисАдресныйОбъект> resultHandler, CancellationToken token = default) { var method = new HcsMethodExportSupplyResourceContractObjectAddress(Config); return await method.QueryAddresses(договор, resultHandler, token); } /// /// Размещение изменения списка адресных объектов в договоре /// public async Task РазместитьАдресаДоговораРСО( ГисДоговор договор, IEnumerable<ГисАдресныйОбъект> адресаДляРазмещения, IEnumerable<ГисАдресныйОбъект> адресаДляУдаления, CancellationToken token) { var method = new HcsMethodImportSupplyResourceContractObjectAddress(Config); await method.ImportObjectAddresses(договор, адресаДляРазмещения, адресаДляУдаления, token); } /// /// Получение списка лицевых счетов для одного здания /// public async Task ПолучитьЛицевыеСчетаПоЗданию( Guid fiasHouseGuid, Action<ГисЛицевойСчет> resultHandler, CancellationToken token = default) { var method = new HcsMethodExportAccountData(Config); return await method.Query(fiasHouseGuid, null, resultHandler, token); } /// /// Получение списка приборов учета для одного здания /// public async Task ПолучитьПриборыУчетаПоЗданию( Guid fiasHouseGuid, Action<ГисПриборУчета> resultHandler, CancellationToken token = default) { var method = new HcsMethodExportMeteringDeviceData(Config); return await method.ExportByHouse(fiasHouseGuid, resultHandler, token); } /// /// Пример получения данных об одном здании по его идентификатору в ФИАС /// public async Task<ГисЗдание> ПолучитьЗданиеПоГуидФиас(Guid fiasHouseGuid, CancellationToken token = default) { try { var method = new HcsMethodExportHouse(Config); return await method.ExportHouseByFiasGuid(fiasHouseGuid, token); } catch (HcsException e) { throw new HcsException($"Не удалось получить здание по ФИАС GUID {fiasHouseGuid}", e); } } public async Task<ГисДоговорыИПриборы> ПолучитьВсеДоговорыИПриборы( Func<ГисДоговор, bool> contractFilter, CancellationToken token = default) { return await (new HcsContractRegistryDownloader(this)) .ПолучитьВсеДоговорыИПриборы(contractFilter, token); } } }