diff --git a/PARR.EsppSync/IEsppObject.cs b/PARR.EsppSync/IEsppObject.cs index 54862c3b..e62efe81 100644 --- a/PARR.EsppSync/IEsppObject.cs +++ b/PARR.EsppSync/IEsppObject.cs @@ -7,5 +7,25 @@ namespace PARR.EsppSync public string TemplateName { get; set; } public RobotsEnum Robot { get; } + + public bool IsActive { get; set; } + } + + /// + /// Облегченная модель для сравнения полей, если IsActive==false + /// + public class EsppLightObject : IEsppObject + { + public EsppLightObject(IEsppObject obj) + { + TemplateName = obj.TemplateName; + IsActive = obj.IsActive; + } + + public string TemplateName { get; set; } + + public RobotsEnum Robot { get; } + + public bool IsActive { get; set; } } } diff --git a/PARR.EsppSync/ISyncService.cs b/PARR.EsppSync/ISyncService.cs index 73b027b2..449d5e1d 100644 --- a/PARR.EsppSync/ISyncService.cs +++ b/PARR.EsppSync/ISyncService.cs @@ -20,6 +20,13 @@ namespace PARR.EsppSync public interface ISyncService where EsppObject : class, IEsppObject { + /// + /// + /// + /// Строка из RabbitMQ + /// Делегат парсинга из строки в модель EsppObject + /// Конвертирует BD Template в модель для сравнения + /// Task SyncEsppObjectAsync(string str, ParserHandlerDelegate parser, ConvertDbObjToComparisonObjHandlerDelegate converterToEsppObject); } } \ No newline at end of file diff --git a/PARR.EsppSync/SyncService.cs b/PARR.EsppSync/SyncService.cs index 57107ac3..630b5294 100644 --- a/PARR.EsppSync/SyncService.cs +++ b/PARR.EsppSync/SyncService.cs @@ -61,7 +61,24 @@ namespace PARR.EsppSync else { var dbObjectInEsppObject = converterToEsppObject.Invoke(template); - var isChanged = IsChanged(esppObject, dbObjectInEsppObject); + + bool isChanged; + + // если в БД isActive == false, то синхронизировать только по полям из IEsppObject + if (dbObjectInEsppObject.IsActive == false) + { + logger.LogDebug($"Объект деактивирован в ПАРР. Сравниваем только обязательные поля. {esppObject.TemplateName}"); + var lightDbObj = new EsppLightObject(dbObjectInEsppObject); + var lightEsppObject = new EsppLightObject(esppObject); + + isChanged = IsChanged(lightEsppObject, lightDbObj); + } + else + { + logger.LogDebug($"Объект активирован в ПАРР. Сравниваем все поля. {esppObject.TemplateName}"); + isChanged = IsChanged(esppObject, dbObjectInEsppObject); + } + if (isChanged) { @@ -112,7 +129,8 @@ namespace PARR.EsppSync } - private bool IsChanged(EsppObject esppObj, EsppObject dbObj) + //private bool IsChanged(EsppObject esppObj, EsppObject dbObj) + private bool IsChanged(object esppObj, object dbObj) { foreach (var prop in dbObj.GetType().GetProperties()) { diff --git a/PARR.EsppTemplateSync/TemplateMQSyncer.cs b/PARR.EsppTemplateSync/TemplateMQSyncer.cs index 316563da..c1aab207 100644 --- a/PARR.EsppTemplateSync/TemplateMQSyncer.cs +++ b/PARR.EsppTemplateSync/TemplateMQSyncer.cs @@ -66,7 +66,6 @@ namespace PARR.EsppTemplateSync /// /// /// - /// private EsppObjectTemplate ConvertDbObjToEsppObj(Template template) { var templateFromDb = new EsppObjectTemplate @@ -95,7 +94,6 @@ namespace PARR.EsppTemplateSync /// /// /// - /// private EsppObjectTemplate? ParseStrToEsppObject(string str) { var splittedContent = str.Split(globalSettings.ParsingSeparator);