2026-05-04 11:55:07 +10:00
|
|
|
|
using PARR.Domain.Common.Template;
|
2025-06-18 09:58:23 +10:00
|
|
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
2026-05-04 11:55:07 +10:00
|
|
|
|
using System.Text.Encodings.Web;
|
2025-06-18 09:58:23 +10:00
|
|
|
|
using System.Text.Json;
|
2026-05-04 11:55:07 +10:00
|
|
|
|
using System.Text.Unicode;
|
2025-06-18 09:58:23 +10:00
|
|
|
|
|
2026-05-04 11:55:07 +10:00
|
|
|
|
namespace PARR.Domain.Settings
|
2023-09-19 14:34:55 +10:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Настройки из БД
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class SettingsFromDb
|
|
|
|
|
|
{
|
|
|
|
|
|
// При добавлении свойств, добавлять в миграцию: PARR.DAL.Context.DataContext
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Initiator { get; set; } = string.Empty;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Код закрытия регламентной работы, указывается при создании шаблона в ЕСПП.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string ClosingCode { get; set; } = string.Empty;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Категория создаваемого объекта в ЕСПП
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string Category { get; set; } = string.Empty;
|
2023-09-20 11:52:30 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-02-13 15:28:32 +10:00
|
|
|
|
/// Префикс имени шаблона в ЕСПП с динамичным префиксом %PREFIX%-
|
2023-09-20 11:52:30 +10:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string TemplatePrefixName { get; set; } = string.Empty;
|
2023-10-03 14:30:54 +10:00
|
|
|
|
|
2024-02-13 15:28:32 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Префикс имени шаблона в ЕСПП без динамичного префикса (используется для подстановки в полное описание наряда/шаблона)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string TemplatePrefixWithoutVariable => TemplatePrefixName.Replace("%PREFIX%-", "");
|
|
|
|
|
|
|
2025-06-18 09:58:23 +10:00
|
|
|
|
public string TemplateNameConstantParts { get; set; } = string.Empty;
|
|
|
|
|
|
|
|
|
|
|
|
[NotMapped]
|
|
|
|
|
|
public List<TemplateNameConstantPart> TemplateNameConstantPartsList
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!string.IsNullOrEmpty(TemplateNameConstantParts))
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
return JsonSerializer.Deserialize<List<TemplateNameConstantPart>>(TemplateNameConstantParts) ?? new List<TemplateNameConstantPart>();
|
|
|
|
|
|
}
|
2026-02-09 12:00:46 +10:00
|
|
|
|
catch (Exception ex)
|
2025-06-18 09:58:23 +10:00
|
|
|
|
{
|
2026-02-09 12:00:46 +10:00
|
|
|
|
// В будущем можно добавить логирование ошибки десериализации
|
2025-06-18 09:58:23 +10:00
|
|
|
|
return new List<TemplateNameConstantPart>();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return new List<TemplateNameConstantPart>();
|
|
|
|
|
|
}
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
if (value != null)
|
2026-05-04 11:55:07 +10:00
|
|
|
|
{
|
|
|
|
|
|
//TemplateNameConstantParts = value.ToJson() ?? string.Empty;
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
TemplateNameConstantParts = JsonSerializer.Serialize(value, new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All, UnicodeRanges.Cyrillic) });
|
|
|
|
|
|
}
|
|
|
|
|
|
catch
|
|
|
|
|
|
{
|
2026-07-14 10:29:01 +10:00
|
|
|
|
TemplateNameConstantParts = string.Empty;
|
2026-05-04 11:55:07 +10:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-18 09:58:23 +10:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-03 14:30:54 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Количество попыток выполнения задания роботом
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int RobotAttemptsNumber { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Время ожидания выполнения роботом задания
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public TimeSpan RobotWaitTime { get; set; }
|
2023-10-09 16:11:27 +10:00
|
|
|
|
|
2026-02-16 16:54:06 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Расписание регламентной работы, В каком часовом поясе
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string EsppScheduleTimezone { get; set; } = string.Empty;
|
2023-10-09 16:11:27 +10:00
|
|
|
|
|
2025-12-25 17:01:42 +10:00
|
|
|
|
///// <summary>
|
|
|
|
|
|
///// Расписание регламентной работы - Тип исключения
|
|
|
|
|
|
///// </summary>
|
|
|
|
|
|
//public string ScheduleExcludeType { get; set; } = string.Empty;
|
|
|
|
|
|
|
|
|
|
|
|
///// <summary>
|
|
|
|
|
|
///// Расписание регламентной работы - Календарь
|
|
|
|
|
|
///// </summary>
|
|
|
|
|
|
//public string ScheduleExcludeCalendar { get; set; } = string.Empty;
|
2023-10-09 16:11:27 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-02-03 16:15:19 +10:00
|
|
|
|
/// Расписание регламентной работы - Диапазон повторов
|
2023-10-09 16:11:27 +10:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string ScheduleRepeatRange { get; set; } = string.Empty;
|
|
|
|
|
|
|
2023-10-23 13:50:43 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Промежуток времени для поиска нарядов в ЕСПП
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public TimeSpan OrderSearchDeltaDate { get; set; }
|
|
|
|
|
|
|
2024-08-06 10:52:27 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Таймзона УЗ роботов в ЕСПП, в часах (может быть положительным и отрицательным)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int EsppRobotAccountTimeZoneHour { get; set; }
|
|
|
|
|
|
|
2024-09-17 11:55:55 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Время хранения в кэше данных о выходных и рабочих днях
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public TimeSpan WeekendCacheTtl { get; set; } = new TimeSpan(0, 5, 0);
|
|
|
|
|
|
|
2025-12-25 13:53:38 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Префикс тега в поле ЭК "Дополнительная информация"
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string EsppUnitTag { get; set; } = string.Empty;
|
|
|
|
|
|
|
2025-12-30 12:16:51 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Job в который перемещаем ниспользованные шаблоны
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public Guid JobIdForUnusedTemplates { get; set; }
|
|
|
|
|
|
|
2026-02-03 16:15:19 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Зона ответственности для получения тайм зоны по умолчанию для расписаний
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string DefaultResponseAreaToTimeOffset { get; set; } = string.Empty;
|
2026-07-14 10:29:01 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Минимально допустимый процент связей для продолжения синхронизации.
|
|
|
|
|
|
/// Защищает от удаления данных, если передающая система АИХ ИТ передала аномально малый объем связей.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <remarks>
|
|
|
|
|
|
/// Диапазон: от 0 до 100
|
|
|
|
|
|
/// <list type="bullet">
|
|
|
|
|
|
/// <item><description>0 — Защита ОТКЛЮЧЕНА. Синхронизация запишет даже 0 связей (риск затереть данные).</description></item>
|
|
|
|
|
|
/// <item><description>100 — Строгий режим. Синхронизация упадет, если пропадет хотя бы одна связь.</description></item>
|
|
|
|
|
|
/// <item><description>97 — (Рекомендуется) Стоп, если объем новых связей ниже 97% от предыдущего.</description></item>
|
|
|
|
|
|
/// </list>
|
|
|
|
|
|
/// </remarks>
|
|
|
|
|
|
public int MinRelationshipsThresholdPct { get; set; } = 0;
|
2023-09-19 14:34:55 +10:00
|
|
|
|
}
|
2026-02-09 12:00:46 +10:00
|
|
|
|
}
|