From efc91584b60517795d12b549e59ec286434c22f7 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 28 Feb 2024 10:17:01 +1000 Subject: [PATCH] =?UTF-8?q?feat(esppSync,=20esppTemplateSync,=20esppSchedu?= =?UTF-8?q?leSync):=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D1=81=D0=B8?= =?UTF-8?q?=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9.=20=D0=95=D1=81=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=20=D0=B2=20=D0=91?= =?UTF-8?q?=D0=94=20=D0=B4=D0=B5=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD,=20=D1=82=D0=BE=20=D1=81=20=D0=95?= =?UTF-8?q?=D0=A1=D0=9F=D0=9F=20=D1=81=D1=80=D0=B0=D0=B2=D0=BD=D0=B8=D0=B2?= =?UTF-8?q?=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=D0=BB=D1=8F=20isActive=20=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=8A?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.EsppSync/IEsppObject.cs | 20 ++++++++++++++++++++ PARR.EsppSync/ISyncService.cs | 7 +++++++ PARR.EsppSync/SyncService.cs | 22 ++++++++++++++++++++-- PARR.EsppTemplateSync/TemplateMQSyncer.cs | 2 -- 4 files changed, 47 insertions(+), 4 deletions(-) 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);