feat(esppScheduleSync, esppTemplateSync): в шаблонах синхронизируется поле Исполнитель. В расписаниях исправлена логика поиска связанного шаблона. Добавлен атрибут SkipComparision - исключить поля для сравнения
This commit is contained in:
11
PARR.EsppSync/Attributes/SkipComparisonAttribute.cs
Normal file
11
PARR.EsppSync/Attributes/SkipComparisonAttribute.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace PARR.EsppSync.Attributes
|
||||
{
|
||||
/// <summary>
|
||||
/// Атрибут для исключения свойства из сравнения в EsppSync в методе IsChanged.
|
||||
/// Применяется к свойствам можели, которые не должны участвовать в проверке изменений.
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
|
||||
public sealed class SkipComparisonAttribute : Attribute
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
using PARR.Constants;
|
||||
using PARR.DAL.Contracts;
|
||||
|
||||
namespace PARR.EsppSync.Domain
|
||||
{
|
||||
public class EsppObjectSchedule : IEsppObject
|
||||
{
|
||||
//Все поля описаны в документации по роботам: http://gitlab.dvgd.oao.rzd/devptk/parr/parr_api/-/wikis/EsppRobots
|
||||
|
||||
public RobotsEnum Robot => RobotsEnum.ScheduleOrder;
|
||||
|
||||
public required string TemplateName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ИД расписания
|
||||
/// </summary>
|
||||
public string Code { get; set; } = string.Empty;
|
||||
|
||||
public string ScheduleName { get; set; } = string.Empty;
|
||||
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
public string ResponseArea { get; set; } = string.Empty;
|
||||
|
||||
public string WorkGroup { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Тип повторения: Регулярно, Ежегодно...
|
||||
/// </summary>
|
||||
public EsppSchTypeScheduleEnum TypeSchedule { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Интервал времени: Ежедневно, 1 00:00:00
|
||||
/// </summary>
|
||||
public string Interval { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Еженедельно: Каждый понедельник
|
||||
/// </summary>
|
||||
public string Dayofweek { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Ежемесячно: Каждое 23
|
||||
/// </summary>
|
||||
public string Dayofmonth { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Ежемесячно-2: Каждый Первый
|
||||
/// </summary>
|
||||
public string Md1 { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Ежемесячно-2: Каждый Понедельник
|
||||
/// </summary>
|
||||
public string Md2 { get; set; } = string.Empty;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Ежегодно: Каждый Январь
|
||||
/// </summary>
|
||||
public string Annualm { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Ежегодно: Каждый 12
|
||||
/// </summary>
|
||||
public string Annualday { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Ежегодно-2: Каждый Первый
|
||||
/// </summary>
|
||||
public string An1 { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Ежегодно-2: Каждый Понедельник
|
||||
/// </summary>
|
||||
public string An2 { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Ежегодно-2: Каждый Января
|
||||
/// </summary>
|
||||
public string An3 { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Тип исключения: Нет исключений
|
||||
/// </summary>
|
||||
public string TypeV60calendar { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Следующее срабатывание: 16/10/23 17:00:00
|
||||
/// </summary>
|
||||
public required string Scheduled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// В каком часовом поясе: Greenwich/Universal
|
||||
/// </summary>
|
||||
public required string Timezone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип прекращения, Отсутствует дата завершения: Выбран radio button forever
|
||||
/// </summary>
|
||||
public required string TerminationType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Завершение после: 0
|
||||
/// </summary>
|
||||
public string CompleteAfter { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Рабочий график
|
||||
/// </summary>
|
||||
public string V60calendar { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Время создания наряда (чч:мм:сс)
|
||||
/// </summary>
|
||||
public string BasisTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ using PARR.DAL.Contracts;
|
||||
using PARR.DAL.DomainServices.Shortcodes;
|
||||
using PARR.DAL.Models;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
using PARR.EsppSync.Attributes;
|
||||
using PARR.EsppSync.Helpers;
|
||||
using System.Reflection;
|
||||
|
||||
@@ -260,6 +261,13 @@ namespace PARR.EsppSync
|
||||
{
|
||||
foreach (var prop in dbObj.GetType().GetProperties())
|
||||
{
|
||||
// Пропускаем свойства, помеченные атрибутом SkipComparison
|
||||
if (Attribute.IsDefined(prop, typeof(SkipComparisonAttribute)))
|
||||
{
|
||||
logger.LogDebug("Пропущено сравнение поля {PropertyName} (помечено [SkipComparison]). Шаблон: {TemplateName}", prop.Name, templateName);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (prop == null)
|
||||
continue;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user