feat(esppSync, esppTemplateSync, esppScheduleSync): обновлена логика синхронизации полей. Если объект в БД деактивирован, то с ЕСПП сравниваются только поля isActive и название объекта.

This commit is contained in:
Mikhail Trubnikov
2024-02-28 10:17:01 +10:00
parent 9e2350374f
commit efc91584b6
4 changed files with 47 additions and 4 deletions

View File

@@ -7,5 +7,25 @@ namespace PARR.EsppSync
public string TemplateName { get; set; }
public RobotsEnum Robot { get; }
public bool IsActive { get; set; }
}
/// <summary>
/// Облегченная модель для сравнения полей, если IsActive==false
/// </summary>
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; }
}
}

View File

@@ -20,6 +20,13 @@ namespace PARR.EsppSync
public interface ISyncService<EsppObject> where EsppObject : class, IEsppObject
{
/// <summary>
///
/// </summary>
/// <param name="str">Строка из RabbitMQ</param>
/// <param name="parser">Делегат парсинга из строки в модель EsppObject</param>
/// <param name="converterToEsppObject"> Конвертирует BD Template в модель для сравнения</param>
/// <returns></returns>
Task SyncEsppObjectAsync(string str, ParserHandlerDelegate<EsppObject> parser, ConvertDbObjToComparisonObjHandlerDelegate<EsppObject> converterToEsppObject);
}
}

View File

@@ -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())
{

View File

@@ -66,7 +66,6 @@ namespace PARR.EsppTemplateSync
/// </summary>
/// <param name="template"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
private EsppObjectTemplate ConvertDbObjToEsppObj(Template template)
{
var templateFromDb = new EsppObjectTemplate
@@ -95,7 +94,6 @@ namespace PARR.EsppTemplateSync
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
private EsppObjectTemplate? ParseStrToEsppObject(string str)
{
var splittedContent = str.Split(globalSettings.ParsingSeparator);