using PARR.Domain.Common.Template;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
namespace PARR.Domain.Settings
{
///
/// Настройки из БД
///
public class SettingsFromDb
{
// При добавлении свойств, добавлять в миграцию: PARR.DAL.Context.DataContext
///
/// Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.
///
public string Initiator { get; set; } = string.Empty;
///
/// Код закрытия регламентной работы, указывается при создании шаблона в ЕСПП.
///
public string ClosingCode { get; set; } = string.Empty;
///
/// Категория создаваемого объекта в ЕСПП
///
public string Category { get; set; } = string.Empty;
///
/// Префикс имени шаблона в ЕСПП с динамичным префиксом %PREFIX%-
///
public string TemplatePrefixName { get; set; } = string.Empty;
///
/// Префикс имени шаблона в ЕСПП без динамичного префикса (используется для подстановки в полное описание наряда/шаблона)
///
public string TemplatePrefixWithoutVariable => TemplatePrefixName.Replace("%PREFIX%-", "");
public string TemplateNameConstantParts { get; set; } = string.Empty;
[NotMapped]
public List TemplateNameConstantPartsList
{
get
{
if (!string.IsNullOrEmpty(TemplateNameConstantParts))
{
try
{
return JsonSerializer.Deserialize>(TemplateNameConstantParts) ?? new List();
}
catch (Exception ex)
{
// В будущем можно добавить логирование ошибки десериализации
return new List();
}
}
return new List();
}
set
{
if (value != null)
{
//TemplateNameConstantParts = value.ToJson() ?? string.Empty;
try
{
TemplateNameConstantParts = JsonSerializer.Serialize(value, new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All, UnicodeRanges.Cyrillic) });
}
catch
{
TemplateNameConstantParts = string.Empty;
}
}
}
}
///
/// Количество попыток выполнения задания роботом
///
public int RobotAttemptsNumber { get; set; }
///
/// Время ожидания выполнения роботом задания
///
public TimeSpan RobotWaitTime { get; set; }
///
/// Расписание регламентной работы, В каком часовом поясе
///
public string EsppScheduleTimezone { get; set; } = string.Empty;
/////
///// Расписание регламентной работы - Тип исключения
/////
//public string ScheduleExcludeType { get; set; } = string.Empty;
/////
///// Расписание регламентной работы - Календарь
/////
//public string ScheduleExcludeCalendar { get; set; } = string.Empty;
///
/// Расписание регламентной работы - Диапазон повторов
///
public string ScheduleRepeatRange { get; set; } = string.Empty;
///
/// Промежуток времени для поиска нарядов в ЕСПП
///
public TimeSpan OrderSearchDeltaDate { get; set; }
///
/// Таймзона УЗ роботов в ЕСПП, в часах (может быть положительным и отрицательным)
///
public int EsppRobotAccountTimeZoneHour { get; set; }
///
/// Время хранения в кэше данных о выходных и рабочих днях
///
public TimeSpan WeekendCacheTtl { get; set; } = new TimeSpan(0, 5, 0);
///
/// Префикс тега в поле ЭК "Дополнительная информация"
///
public string EsppUnitTag { get; set; } = string.Empty;
///
/// Job в который перемещаем ниспользованные шаблоны
///
public Guid JobIdForUnusedTemplates { get; set; }
///
/// Зона ответственности для получения тайм зоны по умолчанию для расписаний
///
public string DefaultResponseAreaToTimeOffset { get; set; } = string.Empty;
///
/// Минимально допустимый процент связей для продолжения синхронизации.
/// Защищает от удаления данных, если передающая система АИХ ИТ передала аномально малый объем связей.
///
///
/// Диапазон: от 0 до 100
///
/// - 0 — Защита ОТКЛЮЧЕНА. Синхронизация запишет даже 0 связей (риск затереть данные).
/// - 100 — Строгий режим. Синхронизация упадет, если пропадет хотя бы одна связь.
/// - 97 — (Рекомендуется) Стоп, если объем новых связей ниже 97% от предыдущего.
///
///
public int MinRelationshipsThresholdPct { get; set; } = 0;
}
}