feat(esppSync, esppTemplateSync, esppScheduleSync): обновлена логика синхронизации полей. Если объект в БД деактивирован, то с ЕСПП сравниваются только поля isActive и название объекта.
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user