Add project
Basic formatting applied. Unnecessary comments have been removed. Suspicious code is covered by TODO.
This commit is contained in:
35
Hcs.Client/ClientApi/DataTypes/ГисАдресныйОбъект.cs
Normal file
35
Hcs.Client/ClientApi/DataTypes/ГисАдресныйОбъект.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using System;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Информация о зданиях и помещениях в зданиях (объектах жилого фонда),
|
||||
/// которые связаны с договором (в договоре имеются Лицевые Счета в
|
||||
/// указанных объектах)
|
||||
/// </summary>
|
||||
public class ГисАдресныйОбъект
|
||||
{
|
||||
public Guid ГуидДоговора;
|
||||
public Guid ГуидВерсииДоговора;
|
||||
public Guid ГуидЗданияФиас;
|
||||
public Guid ГуидАдресногоОбъекта;
|
||||
|
||||
public class ИзвестныеТипыЗдания
|
||||
{
|
||||
public const string MKD = "MKD";
|
||||
public const string ZHD = "ZHD";
|
||||
public const string ZHDBlockZastroyki = "ZHDBlockZastroyki";
|
||||
}
|
||||
|
||||
public string ТипЗдания;
|
||||
public string НомерПомещения;
|
||||
public string НомерКомнаты;
|
||||
|
||||
public bool СвязанСДоговором(ГисДоговор договор) => договор != null && договор.ГуидДоговора == ГуидДоговора;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Тип=[{ТипЗдания}] ЗданиеФиас=[{ГуидЗданияФиас}] Объект[{ГуидАдресногоОбъекта}] Помещ[{НомерПомещения}] Комн[{НомерКомнаты}]";
|
||||
}
|
||||
}
|
||||
}
|
||||
140
Hcs.Client/ClientApi/DataTypes/ГисДоговор.cs
Normal file
140
Hcs.Client/ClientApi/DataTypes/ГисДоговор.cs
Normal file
@ -0,0 +1,140 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Договор с ресурсоснабжающей организацией
|
||||
/// </summary>
|
||||
public class ГисДоговор
|
||||
{
|
||||
public Guid ГуидДоговора;
|
||||
public Guid ГуидВерсииДоговора;
|
||||
public string НомерВерсии;
|
||||
|
||||
public ГисСостояниеДоговора СостояниеДоговора;
|
||||
public ГисСтатусВерсииДоговора СтатусВерсииДоговора;
|
||||
|
||||
public ГисТипДоговораРСО ТипДоговораРСО;
|
||||
public string НомерДоговора;
|
||||
public DateTime? ДатаЗаключения;
|
||||
public DateTime? ДатаВступленияВСилу;
|
||||
|
||||
public bool НачисленияРазмещаетРСО;
|
||||
public bool ПриборыРазмещаетРСО;
|
||||
|
||||
public ГисКонтрагент Контрагент;
|
||||
|
||||
public ГисПредметДоговора[] ПредметыДоговора;
|
||||
|
||||
public ГисПриложение[] ПриложенияДоговора;
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоДоговорИКУ => (ТипДоговораРСО == ГисТипДоговораРСО.НеПубличныйИлиНеНежилые);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоДоговорНежилогоПомещения => (ТипДоговораРСО == ГисТипДоговораРСО.ПубличныйИлиНежилые);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоПроектДоговора => (СтатусВерсииДоговора == ГисСтатусВерсииДоговора.Проект);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool Расторгнут => (СтатусВерсииДоговора == ГисСтатусВерсииДоговора.Расторгнут);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ИмеетГуидДоговора => (ГуидДоговора != default);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ПриниматьИзГисНаАнализ
|
||||
{
|
||||
get
|
||||
{
|
||||
return СтатусВерсииДоговора switch
|
||||
{
|
||||
// TODO: Проверить комментирование этой строчки
|
||||
//ГисСтатусВерсииДоговора.Проект => false, // С 15.11.2024 принимаем проекты
|
||||
ГисСтатусВерсииДоговора.Аннулирован => false,
|
||||
ГисСтатусВерсииДоговора.Расторгнут => false,
|
||||
_ => true
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Договор №{НомерДоговора} Тип={ТипДоговораРСО}" +
|
||||
$" Статус={СтатусВерсииДоговора} Состояние={СостояниеДоговора}" +
|
||||
$" Заключен={HcsUtil.FormatDate(ДатаЗаключения)}" +
|
||||
$" №Версии={НомерВерсии} ГуидДог={ГуидДоговора}" +
|
||||
$" ГуидВерсии={ГуидВерсииДоговора}";
|
||||
}
|
||||
}
|
||||
|
||||
public enum ГисТипДоговораРСО
|
||||
{
|
||||
/// <summary>
|
||||
/// Договор не является публичным и/или присутствует заключенный на бумажном
|
||||
/// носителе (электронной форме) и/или не заключен в отношении нежилых помещений
|
||||
/// в многоквартирных домах (IsContract в терминах HCS)
|
||||
/// </summary>
|
||||
НеПубличныйИлиНеНежилые,
|
||||
|
||||
/// <summary>
|
||||
/// Договор является публичным и/или отсутствует заключенный на бумажном носителе
|
||||
/// (в электронной форме) и/или заключен в отношении нежилых помещений в
|
||||
/// многоквартирных домах (IsNotContract в терминах HCS)
|
||||
/// </summary>
|
||||
ПубличныйИлиНежилые
|
||||
}
|
||||
|
||||
public enum ГисСостояниеДоговора
|
||||
{
|
||||
НеВступилВСилу, // NotTakeEffect
|
||||
Действующий, // Proceed
|
||||
ИстекСрокДействия // Expired
|
||||
}
|
||||
|
||||
public enum ГисСтатусВерсииДоговора
|
||||
{
|
||||
Размещен, // Posted
|
||||
Расторгнут, // Terminated
|
||||
Проект, // Draft
|
||||
Аннулирован // Annul
|
||||
}
|
||||
|
||||
public class ГисПредметДоговора
|
||||
{
|
||||
// Вид КУ. Ссылка на НСИ "Вид коммунальной услуги" (реестровый номер 3)
|
||||
public string КодНсиУслуги;
|
||||
public Guid ГуидНсиУслуги;
|
||||
public string ИмяНсиУслуги;
|
||||
|
||||
// Коммунальный ресурс. Ссылка на НСИ "Тарифицируемый ресурс" (реестровый номер 239)
|
||||
public string КодНсиРесурса;
|
||||
public Guid ГуидНсиРесурса;
|
||||
public string ИмяНсиРесурса;
|
||||
}
|
||||
|
||||
public class ГисПриложение
|
||||
{
|
||||
/// <summary>
|
||||
/// Имя файла приложения
|
||||
/// </summary>
|
||||
public string ИмяПриложения;
|
||||
|
||||
/// <summary>
|
||||
/// Пояснение к файлу приложения
|
||||
/// </summary>
|
||||
public string ОписаниеПриложения;
|
||||
|
||||
/// <summary>
|
||||
/// ГУИД файла приложения из ext-bus-file-store-service
|
||||
/// </summary>
|
||||
public Guid ГуидПриложения;
|
||||
|
||||
/// <summary>
|
||||
/// Хэш файла приложения в устаревшем стандарте "ГОСТ Р 34.11-94" в Binhex
|
||||
/// </summary>
|
||||
public string ХэшПриложения;
|
||||
}
|
||||
}
|
||||
197
Hcs.Client/ClientApi/DataTypes/ГисДоговорыИПриборы.cs
Normal file
197
Hcs.Client/ClientApi/DataTypes/ГисДоговорыИПриборы.cs
Normal file
@ -0,0 +1,197 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Сборный класс для получения сразу всех договоров, их лицевых счетов
|
||||
/// и приборов учета привязанных к лицевым счетам договоров
|
||||
/// </summary>
|
||||
public class ГисДоговорыИПриборы
|
||||
{
|
||||
public DateTime ДатаНачалаСборки;
|
||||
public DateTime ДатаКонцаСборки;
|
||||
|
||||
/// <summary>
|
||||
/// Договоры ресурсоснабжения
|
||||
/// </summary>
|
||||
public List<ГисДоговор> ДоговорыРСО = new List<ГисДоговор>();
|
||||
|
||||
public List<ГисАдресныйОбъект> АдресаОбъектов = new List<ГисАдресныйОбъект>();
|
||||
|
||||
public List<ГисЗдание> Здания = new List<ГисЗдание>();
|
||||
|
||||
public List<ГисЛицевойСчет> ЛицевыеСчета = new List<ГисЛицевойСчет>();
|
||||
|
||||
public List<ГисПриборУчета> ПриборыУчета = new List<ГисПриборУчета>();
|
||||
|
||||
public ГисДоговор НайтиДоговорПоНомеру(string номерДоговора)
|
||||
=> ДоговорыРСО.FirstOrDefault(x => x.НомерДоговора == номерДоговора);
|
||||
|
||||
public bool ЭтотЛицевойСчетСвязанСДоговорами(ГисЛицевойСчет лс)
|
||||
{
|
||||
return ДоговорыРСО.Any(договор => лс.СвязанСДоговором(договор));
|
||||
}
|
||||
|
||||
public ГисЗдание НайтиЗданиеПомещения(Guid гуидПомещения)
|
||||
{
|
||||
foreach (var здание in Здания)
|
||||
{
|
||||
foreach (var помещение in здание.Помещения)
|
||||
{
|
||||
if (помещение.ГуидПомещения == гуидПомещения) return здание;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public ГисЗдание НайтиЗданиеЛицевогоСчета(ГисЛицевойСчет лс)
|
||||
{
|
||||
if (лс.Размещения == null) return null;
|
||||
|
||||
foreach (var размещение in лс.Размещения)
|
||||
{
|
||||
if (размещение.ГуидПомещения == null) continue;
|
||||
var здание = НайтиЗданиеПомещения((Guid)размещение.ГуидПомещения);
|
||||
if (здание != null) return здание;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void УдалитьЛицевыеСчетаЗдания(Guid гуидЗданияФиас)
|
||||
{
|
||||
var здание = Здания.FirstOrDefault(x => x.ГуидЗданияФиас == гуидЗданияФиас);
|
||||
if (здание == null || здание.Помещения == null) return;
|
||||
|
||||
var лсДляУдаления = new List<ГисЛицевойСчет>();
|
||||
var гуидыПомещенийЗдания = new HashSet<Guid>(здание.Помещения.Select(x => x.ГуидПомещения));
|
||||
|
||||
foreach (var лс in ЛицевыеСчета)
|
||||
{
|
||||
if (лс.Размещения == null) continue;
|
||||
foreach (var размещениеЛС in лс.Размещения)
|
||||
{
|
||||
if (размещениеЛС.ГуидПомещения == null) continue;
|
||||
if (гуидыПомещенийЗдания.Contains((Guid)размещениеЛС.ГуидПомещения))
|
||||
{
|
||||
лсДляУдаления.Add(лс);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var лсУдалить in лсДляУдаления)
|
||||
ЛицевыеСчета.Remove(лсУдалить);
|
||||
}
|
||||
|
||||
public int ЗаменитьЛицевыеСчетаЗданияВЛокальномСнимке(
|
||||
Guid гуидЗданияФиас, IEnumerable<ГисЛицевойСчет> лицевые)
|
||||
{
|
||||
УдалитьЛицевыеСчетаЗдания(гуидЗданияФиас);
|
||||
|
||||
var живые = лицевые.Where(лс => лс.ДействуетСейчас && ЭтотЛицевойСчетСвязанСДоговорами(лс));
|
||||
ЛицевыеСчета.AddRange(живые);
|
||||
return живые.Count();
|
||||
}
|
||||
|
||||
public bool ЭтотПриборСвязанСЛицевымиСчетами(ГисПриборУчета прибор)
|
||||
{
|
||||
return ЛицевыеСчета.Any(лс => прибор.СвязанСЛицевымСчетом(лс));
|
||||
}
|
||||
|
||||
public IEnumerable<ГисАдресныйОбъект> ДатьАдресаОбъектовДоговора(ГисДоговор договор)
|
||||
{
|
||||
return АдресаОбъектов.Where(x => x.СвязанСДоговором(договор));
|
||||
}
|
||||
|
||||
public IEnumerable<ГисПриборУчета> ДатьПриборыУчетаДоговора(ГисДоговор договор)
|
||||
{
|
||||
var адресаДоговора = ДатьАдресаОбъектовДоговора(договор).ToArray();
|
||||
var лицевыеДоговора = ЛицевыеСчета.Where(x => x.СвязанСДоговором(договор)).ToArray();
|
||||
|
||||
var приборы = new List<ГисПриборУчета>();
|
||||
foreach (var прибор in ПриборыУчета)
|
||||
{
|
||||
if (прибор == null) continue;
|
||||
|
||||
if (договор.ЭтоДоговорИКУ)
|
||||
{
|
||||
foreach (var адрес in адресаДоговора)
|
||||
{
|
||||
if (прибор.СвязанСАдреснымОбъектом(адрес)) приборы.Add(прибор);
|
||||
}
|
||||
}
|
||||
|
||||
if (договор.ЭтоДоговорНежилогоПомещения)
|
||||
{
|
||||
foreach (var лицевой in лицевыеДоговора)
|
||||
{
|
||||
if (прибор.СвязанСЛицевымСчетом(лицевой)) приборы.Add(прибор);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return приборы;
|
||||
}
|
||||
|
||||
public IEnumerable<ГисПомещение> ДатьПомещенияАдресногоОбъекта(ГисАдресныйОбъект адрес)
|
||||
{
|
||||
var здание = Здания.FirstOrDefault(x => x.ГуидЗданияФиас == адрес.ГуидЗданияФиас);
|
||||
if (здание == null) return new List<ГисПомещение>();
|
||||
return здание.Помещения;
|
||||
}
|
||||
|
||||
public IEnumerable<ГисПриборУчета> ДатьПриборыУчетаЛицевогоСчета(ГисЛицевойСчет лс)
|
||||
{
|
||||
return ПриборыУчета.Where(x => x.СвязанСЛицевымСчетом(лс));
|
||||
}
|
||||
|
||||
public ГисЗданиеПомещение НайтиПомещениеЛицевогоСчета(ГисЛицевойСчет лс)
|
||||
{
|
||||
foreach (var размещение in лс.Размещения)
|
||||
{
|
||||
foreach (var здание in Здания)
|
||||
{
|
||||
if (здание.Помещения == null) continue;
|
||||
foreach (var помещение in здание.Помещения)
|
||||
{
|
||||
if (помещение.ГуидПомещения == размещение.ГуидПомещения)
|
||||
{
|
||||
return new ГисЗданиеПомещение(здание, помещение);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return new ГисЗданиеПомещение(null, null);
|
||||
}
|
||||
|
||||
public static ГисДоговорыИПриборы ПрочитатьФайлJson(string jsonFileName)
|
||||
{
|
||||
using (StreamReader file = File.OpenText(jsonFileName))
|
||||
{
|
||||
JsonSerializer serializer = new JsonSerializer();
|
||||
return (ГисДоговорыИПриборы)serializer.Deserialize(file, typeof(ГисДоговорыИПриборы));
|
||||
}
|
||||
}
|
||||
|
||||
public void ЗаписатьФайлJson(string jsonFileName)
|
||||
{
|
||||
using (StreamWriter file = File.CreateText(jsonFileName))
|
||||
{
|
||||
JsonSerializer serializer = new JsonSerializer();
|
||||
serializer.Serialize(file, this);
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"ДоговорыРСО={ДоговорыРСО.Count} Адреса={АдресаОбъектов.Count}" +
|
||||
$" ЛС={ЛицевыеСчета.Count} ПУ={ПриборыУчета.Count}";
|
||||
}
|
||||
}
|
||||
}
|
||||
24
Hcs.Client/ClientApi/DataTypes/ГисЗдание.cs
Normal file
24
Hcs.Client/ClientApi/DataTypes/ГисЗдание.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Дом ГИС ЖКХ
|
||||
/// </summary>
|
||||
public class ГисЗдание
|
||||
{
|
||||
public ГисТипДома ТипДома;
|
||||
public Guid ГуидЗданияФиас;
|
||||
public string НомерДомаГис;
|
||||
|
||||
public ГисПомещение[] Помещения;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{ТипДома} дом №ГИС={НомерДомаГис} Помещения={Помещения.Count()}";
|
||||
}
|
||||
}
|
||||
|
||||
public enum ГисТипДома { Многоквартирный, Жилой };
|
||||
}
|
||||
8
Hcs.Client/ClientApi/DataTypes/ГисЗданиеПомещение.cs
Normal file
8
Hcs.Client/ClientApi/DataTypes/ГисЗданиеПомещение.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
public record struct ГисЗданиеПомещение(ГисЗдание Здание, ГисПомещение Помещение)
|
||||
{
|
||||
public bool Пустое => (Здание == null || Помещение == null);
|
||||
public bool Заполнено => !Пустое;
|
||||
}
|
||||
}
|
||||
72
Hcs.Client/ClientApi/DataTypes/ГисКонтрагент.cs
Normal file
72
Hcs.Client/ClientApi/DataTypes/ГисКонтрагент.cs
Normal file
@ -0,0 +1,72 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Сведения о контрагенте договора РСО
|
||||
/// </summary>
|
||||
public class ГисКонтрагент
|
||||
{
|
||||
public ГисТипКонтрагента ТипКонтрагента;
|
||||
|
||||
/// <summary>
|
||||
/// ГУИД из реестра организаций ГИС ЖКХ
|
||||
/// </summary>
|
||||
public Guid? ГуидОрганизации;
|
||||
|
||||
/// <summary>
|
||||
/// ГУИД версии организации из реестра организаций ГИС ЖКХ необходим
|
||||
/// для размещения Лицевого счета
|
||||
/// </summary>
|
||||
public Guid? ГуидВерсииОрганизации;
|
||||
|
||||
/// <summary>
|
||||
/// Сведения об индивидуальном физическом лице
|
||||
/// </summary>
|
||||
public ГисИндивид Индивид;
|
||||
}
|
||||
|
||||
public enum ГисТипКонтрагента
|
||||
{
|
||||
НеУказано,
|
||||
ВладелецПомещения,
|
||||
УправляющаяКомпания
|
||||
}
|
||||
|
||||
public class ГисИндивид
|
||||
{
|
||||
public string Фамилия;
|
||||
public string Имя;
|
||||
public string Отчество;
|
||||
public string СНИЛС;
|
||||
public string НомерДокумента;
|
||||
public string СерияДокумента;
|
||||
public DateTime? ДатаДокумента;
|
||||
|
||||
[JsonIgnore]
|
||||
public bool СНИЛСЗаполнен
|
||||
=> !string.IsNullOrEmpty(СНИЛС);
|
||||
|
||||
[JsonIgnore]
|
||||
public string СНИЛСТолькоЦифры
|
||||
=> СНИЛСЗаполнен ? string.Concat(СНИЛС.Where(char.IsDigit)) : null;
|
||||
|
||||
[JsonIgnore]
|
||||
public bool СНИЛСЗаполненВернойДлины
|
||||
=> (СНИЛСЗаполнен && СНИЛСТолькоЦифры.Length == 11);
|
||||
|
||||
public void ПроверитьЗаполнениеСНИЛС()
|
||||
{
|
||||
if (!СНИЛСЗаполненВернойДлины)
|
||||
throw new HcsException($"В СНИЛС контрагента ФЛ должно быть указано 11 цифр: {СНИЛС}");
|
||||
}
|
||||
|
||||
public void ПроверитьЗаполнениеФИО()
|
||||
{
|
||||
if (string.IsNullOrEmpty(Фамилия)) throw new HcsException("Не заполнена Фамилия контрагента ФЛ");
|
||||
if (string.IsNullOrEmpty(Имя)) throw new HcsException("Не заполнено Имя контрагента ФЛ");
|
||||
}
|
||||
}
|
||||
}
|
||||
112
Hcs.Client/ClientApi/DataTypes/ГисЛицевойСчет.cs
Normal file
112
Hcs.Client/ClientApi/DataTypes/ГисЛицевойСчет.cs
Normal file
@ -0,0 +1,112 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Лицевой счет из ГИС ЖКХ имеет номер единого лицевого счета (ЕЛС)
|
||||
/// и выдается на каждую точку поставки в жилом доме для договора
|
||||
/// по нежилым помещениям
|
||||
/// </summary>
|
||||
public class ГисЛицевойСчет
|
||||
{
|
||||
public Guid ГуидЛицевогоСчета;
|
||||
public string НомерЛицевогоСчета;
|
||||
public string НомерЕЛС;
|
||||
|
||||
public DateTime? ДатаСоздания;
|
||||
public DateTime? ДатаЗакрытия;
|
||||
public string КодНсиПричиныЗакрытия;
|
||||
public string ИмяПричиныЗакрытия;
|
||||
|
||||
public decimal? ПолнаяПлощадь;
|
||||
public decimal? ЖилаяПлощадь;
|
||||
public string КодЖКУ;
|
||||
|
||||
public ГисРазмещениеЛС[] Размещения;
|
||||
public ГисОснованиеЛС[] Основания;
|
||||
|
||||
public bool СвязанСДоговором(ГисДоговор договор)
|
||||
{
|
||||
if (договор != null && Основания != null && Основания.Any(
|
||||
основание => основание.ГуидДоговора == договор.ГуидВерсииДоговора ||
|
||||
основание.ГуидДоговора == договор.ГуидДоговора ||
|
||||
string.Compare(основание.НомерДоговора, договор.НомерДоговора) == 0)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ДействуетСейчас => (ДатаЗакрытия == null);
|
||||
|
||||
[JsonIgnore]
|
||||
public string ОписаниеРазмещений
|
||||
{
|
||||
get
|
||||
{
|
||||
var accomod = new StringBuilder();
|
||||
foreach (var x in Размещения) accomod.Append($"[{x}]");
|
||||
return accomod.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public string ОписаниеОснований
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Основания == null) return null;
|
||||
var reasons = new StringBuilder();
|
||||
foreach (var x in Основания) reasons.Append($"[{x}]");
|
||||
return reasons.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"ЛС №{НомерЛицевогоСчета} ЕЛС={НомерЕЛС}" +
|
||||
$" Создан={HcsUtil.FormatDate(ДатаСоздания)}" +
|
||||
$" Закрыт={HcsUtil.FormatDate(ДатаЗакрытия)}" +
|
||||
$" Размещения={ОписаниеРазмещений}" +
|
||||
$" Основания={ОписаниеОснований}";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Лицевой счет может быть привязан к нескольким размещениям.
|
||||
/// Каждое размещение может быть или в здании, или в жилой комнате или в помещении
|
||||
/// </summary>
|
||||
public class ГисРазмещениеЛС
|
||||
{
|
||||
public Guid? ГуидЗдания;
|
||||
public Guid? ГуидПомещения;
|
||||
public Guid? ГуидЖилойКомнаты;
|
||||
public decimal? ПроцентДоли;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (ГуидЗдания != null) return $"Здание={ГуидЗдания}";
|
||||
if (ГуидПомещения != null) return $"Помещение={ГуидПомещения}";
|
||||
if (ГуидЖилойКомнаты != null) return $"ЖилКомната={ГуидЖилойКомнаты}";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public enum ГисТипОснованияЛС { ДоговорРСО, Соцнайм, Договор }
|
||||
|
||||
/// <summary>
|
||||
/// Основание создания лицевого счета (договор на основании которого открыт ЛС)
|
||||
/// </summary>
|
||||
public class ГисОснованиеЛС
|
||||
{
|
||||
public ГисТипОснованияЛС ТипОснованияЛС;
|
||||
public Guid ГуидДоговора;
|
||||
public string НомерДоговора;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{ТипОснованияЛС}={ГуидДоговора}";
|
||||
}
|
||||
}
|
||||
}
|
||||
57
Hcs.Client/ClientApi/DataTypes/ГисОрганизация.cs
Normal file
57
Hcs.Client/ClientApi/DataTypes/ГисОрганизация.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Сведения из реестра оргнаизации ГИС ЖКХ
|
||||
/// </summary>
|
||||
public class ГисОрганизация
|
||||
{
|
||||
public Guid ГуидОрганизации;
|
||||
|
||||
public Guid ГуидВерсииОрганизации;
|
||||
|
||||
public ГисТипОрганизации ТипОрганизации;
|
||||
|
||||
public string КраткоеИмяОрганизации;
|
||||
|
||||
public string ПолноеИмяОрганизации;
|
||||
|
||||
public bool Действующая;
|
||||
|
||||
public string ИНН;
|
||||
|
||||
public string КПП;
|
||||
|
||||
public string ОГРН;
|
||||
|
||||
public string ОКОПФ;
|
||||
|
||||
public string Фамилия;
|
||||
|
||||
public string Имя;
|
||||
|
||||
public string Отчество;
|
||||
|
||||
public string ЮридическийАдрес;
|
||||
|
||||
public DateTime? ДатаЛиквидации;
|
||||
|
||||
[JsonIgnore]
|
||||
public const int ДлинаОГРН = 13;
|
||||
|
||||
[JsonIgnore]
|
||||
public const int ДлинаОГРНИП = 15;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string имя = ТипОрганизации == ГисТипОрганизации.ИП ?
|
||||
$"ИП {Фамилия} {Имя} {Отчество}" : КраткоеИмяОрганизации;
|
||||
return $"{ТипОрганизации}: [{имя}] ИНН={ИНН} КПП={КПП} Действующая={Действующая}" +
|
||||
$" ГУИД={ГуидОрганизации} Версия={ГуидВерсииОрганизации}";
|
||||
}
|
||||
}
|
||||
|
||||
public enum ГисТипОрганизации { НетУказано, ЮЛ, ИП, Филиал, Иностранный }
|
||||
}
|
||||
43
Hcs.Client/ClientApi/DataTypes/ГисПоказания.cs
Normal file
43
Hcs.Client/ClientApi/DataTypes/ГисПоказания.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
public class ГисПоказания
|
||||
{
|
||||
public DateTime ДатаСнятия;
|
||||
public string ПоказанияТ1;
|
||||
public string ПоказанияТ2;
|
||||
public string ПоказанияТ3;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
var buf = new StringBuilder();
|
||||
|
||||
if (!string.IsNullOrEmpty(ПоказанияТ1))
|
||||
{
|
||||
buf.AppendFormat("Т1={0}", ПоказанияТ1);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(ПоказанияТ2))
|
||||
{
|
||||
if (buf.Length > 0) buf.Append(" ");
|
||||
buf.AppendFormat("Т2={0}", ПоказанияТ2);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(ПоказанияТ3))
|
||||
{
|
||||
if (buf.Length > 0) buf.Append(" ");
|
||||
buf.AppendFormat("Т3={0}", ПоказанияТ3);
|
||||
}
|
||||
|
||||
if (ДатаСнятия != default)
|
||||
{
|
||||
if (buf.Length > 0) buf.Append(" ");
|
||||
buf.AppendFormat("на {0:d}", ДатаСнятия);
|
||||
}
|
||||
|
||||
return buf.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
21
Hcs.Client/ClientApi/DataTypes/ГисПомещение.cs
Normal file
21
Hcs.Client/ClientApi/DataTypes/ГисПомещение.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Жилое или нежилое момещение в доме ГИС ЖКХ
|
||||
/// </summary>
|
||||
public class ГисПомещение
|
||||
{
|
||||
public Guid ГуидПомещения;
|
||||
public bool ЭтоЖилоеПомещение;
|
||||
public string НомерПомещения;
|
||||
public DateTime? ДатаПрекращения;
|
||||
public string Аннулирование;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"ГисПомещение={НомерПомещения} Жилое={ЭтоЖилоеПомещение} Guid={ГуидПомещения} Прекращено={ДатаПрекращения} Аннул={Аннулирование}";
|
||||
}
|
||||
}
|
||||
}
|
||||
102
Hcs.Client/ClientApi/DataTypes/ГисПриборУчета.cs
Normal file
102
Hcs.Client/ClientApi/DataTypes/ГисПриборУчета.cs
Normal file
@ -0,0 +1,102 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Hcs.ClientApi.DataTypes
|
||||
{
|
||||
/// <summary>
|
||||
/// Прибор учета из ГИС ЖКХ может быть привязан к списку зданий (ОДПУ)
|
||||
/// или к списку Лицевых счетов (все виды кроме ОДПУ)
|
||||
/// </summary>
|
||||
public class ГисПриборУчета
|
||||
{
|
||||
public Guid ГуидПрибораУчета;
|
||||
public Guid ГуидВерсииПрибора;
|
||||
public string НомерПрибораУчетаГис;
|
||||
|
||||
public DateTime? ДатаРазмещенияВерсии;
|
||||
public Guid ГуидВладельцаПрибора;
|
||||
|
||||
public ГисСтатусПрибораУчета СтатусПрибораУчета;
|
||||
public ГисВидПрибораУчета ВидПрибораУчета;
|
||||
|
||||
public string ЗаводскойНомер;
|
||||
public string МодельПрибораУчета;
|
||||
|
||||
[JsonIgnore]
|
||||
public bool КоэффициентТрансформацииУказан => (КоэффициентТрансформации > 0);
|
||||
public decimal КоэффициентТрансформации;
|
||||
|
||||
public string ПоказаниеТ1;
|
||||
public string ПоказаниеТ2;
|
||||
public string ПоказаниеТ3;
|
||||
|
||||
// TODO: Добавить эти комментарии как XML-комментарии
|
||||
public DateTime? ДатаИзготовления; // Обязательно при импорте
|
||||
public DateTime? ДатаУстановки;
|
||||
public DateTime? ДатаВводаВЭксплуатацию; // Обязательно кроме ОДПУ
|
||||
public DateTime? ДатаПоследнейПоверки; // Обязательно для ОДПУ
|
||||
|
||||
public bool РежимДистанционногоОпроса; // Признак наличия ИСУ
|
||||
public string ОписаниеДистанционногоОпроса; // Наименование ИСУ
|
||||
|
||||
public Guid[] ГуидыЗданийФиас;
|
||||
public Guid[] ГуидыЛицевыхСчетов;
|
||||
public Guid[] ГуидыПомещений;
|
||||
public Guid[] ГуидыЖилыхКомнат;
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоАктивный => (СтатусПрибораУчета == ГисСтатусПрибораУчета.Активный);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоАрхивный => (СтатусПрибораУчета == ГисСтатусПрибораУчета.Архивный);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоОДПУ => (ВидПрибораУчета == ГисВидПрибораУчета.ОДПУ);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоНежилоеПомещение => (ВидПрибораУчета == ГисВидПрибораУчета.НежилоеПомещение);
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ЭтоПриборЮЛ => ЭтоОДПУ || ЭтоНежилоеПомещение;
|
||||
|
||||
public bool СвязанСЛицевымСчетом(ГисЛицевойСчет лс)
|
||||
{
|
||||
if (лс == null || ГуидыЛицевыхСчетов == null || ГуидыЛицевыхСчетов.Length == 0) return false;
|
||||
if (ГуидыЛицевыхСчетов.Length == 1) return (ГуидыЛицевыхСчетов[0] == лс.ГуидЛицевогоСчета);
|
||||
return ГуидыЛицевыхСчетов.Contains(лс.ГуидЛицевогоСчета);
|
||||
}
|
||||
|
||||
public bool СвязанСАдреснымОбъектом(ГисАдресныйОбъект адрес)
|
||||
{
|
||||
// TODO: Для лицевых счетов здесь надо тестировать ГУИД помещения
|
||||
if (адрес == null || ГуидыЗданийФиас == null || ГуидыЗданийФиас.Length == 0) return false;
|
||||
if (ГуидыЗданийФиас.Length == 1) return ГуидыЗданийФиас[0] == адрес.ГуидЗданияФиас;
|
||||
return ГуидыЗданийФиас.Contains(адрес.ГуидЗданияФиас);
|
||||
}
|
||||
|
||||
public bool ЗаполненГуидЗданияФиас => (ГуидыЗданийФиас != null && ГуидыЗданийФиас.Length > 0);
|
||||
|
||||
public Guid? ОдинГуидЗданияФиас => (ЗаполненГуидЗданияФиас ? ГуидыЗданийФиас[0] : null);
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
int числоЛС = ГуидыЛицевыхСчетов != null ? ГуидыЛицевыхСчетов.Length : 0;
|
||||
int числоДомов = ГуидыЗданийФиас != null ? ГуидыЗданийФиас.Length : 0;
|
||||
return $"{ВидПрибораУчета} {СтатусПрибораУчета} №{ЗаводскойНомер} [{МодельПрибораУчета}]" +
|
||||
$"Гуид={ГуидПрибораУчета} ЧислоЛС={числоЛС} ЧислоДомов={числоДомов}";
|
||||
}
|
||||
}
|
||||
|
||||
public enum ГисВидПрибораУчета
|
||||
{
|
||||
ЖилоеПомещение,
|
||||
НежилоеПомещение,
|
||||
ОДПУ,
|
||||
ЖилойДом,
|
||||
ЖилаяКомната,
|
||||
КоммунальнаяКвартира
|
||||
}
|
||||
|
||||
public enum ГисСтатусПрибораУчета { Активный, Архивный }
|
||||
}
|
||||
Reference in New Issue
Block a user