feat(aihitRelationshipsSyncer): Изменены уровни сообщений, добавлено удаление всех дочерних связей ЭК если по ним не пришла информация из АИХ ИТ
This commit is contained in:
@@ -4,6 +4,8 @@ using PARR.AIHITRelationshipsSyncer.Models;
|
|||||||
using PARR.AIHITRelationshipsSyncer.Services.Interfaces;
|
using PARR.AIHITRelationshipsSyncer.Services.Interfaces;
|
||||||
using PARR.DAL.Models.Unit;
|
using PARR.DAL.Models.Unit;
|
||||||
using PARR.DAL.Services.Interfaces.Unit;
|
using PARR.DAL.Services.Interfaces.Unit;
|
||||||
|
using System.Reactive;
|
||||||
|
using Unit = PARR.DAL.Models.Unit.Unit;
|
||||||
|
|
||||||
namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
||||||
{
|
{
|
||||||
@@ -23,39 +25,30 @@ namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
|||||||
|
|
||||||
public async Task SyncAsync(List<AihitData> aihitdata)
|
public async Task SyncAsync(List<AihitData> aihitdata)
|
||||||
{
|
{
|
||||||
var groupedData = aihitdata.GroupBy(ad => ad.EKFindCode);
|
var groupedData = aihitdata.Where(t => t.EKFindCode != null && t.ChildEk != null).GroupBy(ad => ad.EKFindCode);
|
||||||
|
|
||||||
var units = await GetUnitsWithChildrens();
|
|
||||||
|
|
||||||
//Перебираем сгруппированные по родительскому ЭК данные
|
//Перебираем сгруппированные по родительскому ЭК данные
|
||||||
foreach (var item in groupedData)
|
foreach (var item in groupedData)
|
||||||
{
|
{
|
||||||
//Получаем имя родителя
|
//Получаем имя родителя
|
||||||
var parentName = item.Select(t => t.EKFindCode).First();
|
var parentName = item.First().EKFindCode;
|
||||||
if (parentName == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
//if (parentName.ToLower() != "ас-рп-рцку-гор")
|
//if (parentName.ToLower() != "ас-рп-рцку-гор")
|
||||||
// continue;
|
// continue;
|
||||||
|
|
||||||
//По имени получаем экземпляр Unit со всеми дочерними связями
|
//По имени получаем экземпляр Unit со всеми дочерними связями
|
||||||
var unit = await GetUnitByNameAsync(parentName);
|
var unit = await GetUnitByNameAsync(parentName!);
|
||||||
|
|
||||||
//Из данных АИХ ИТ получаем имена всех дочерних ЭК
|
//Из данных АИХ ИТ получаем имена всех дочерних ЭК
|
||||||
var childsName = item.Select(t => t.ChildEk).ToList();
|
var childsName = item.Select(t => t.ChildEk);
|
||||||
if (childsName == null || childsName.Count == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
//Проходим циклом по полученному списку для актуализации связей в полученном нами экземпляре Unit
|
//Проходим циклом по полученному списку для актуализации связей в полученном нами экземпляре Unit
|
||||||
foreach (var childName in childsName)
|
foreach (var childName in childsName)
|
||||||
{
|
{
|
||||||
if (childName == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
//if (childName.ToLower() != "рпа-робин-рцку-спиуи-прочее-26-гор")
|
//if (childName.ToLower() != "рпа-робин-рцку-спиуи-прочее-26-гор")
|
||||||
// continue;
|
// continue;
|
||||||
//Ищем детей по имени
|
//Ищем детей по имени
|
||||||
var child = unit.ChildUnits.FirstOrDefault(t => t.ChildUnit?.Name.ToLower() == childName.ToLower().Trim());
|
var child = unit.ChildUnits.FirstOrDefault(t => t.ChildUnit?.Name.ToLower() == childName!.ToLower().Trim());
|
||||||
|
|
||||||
//не нашли создаём и сразу пишем в базу, чтобы если попадуться дубликаты в списке они были созданы
|
//не нашли создаём и сразу пишем в базу, чтобы если попадуться дубликаты в списке они были созданы
|
||||||
if (child == null)
|
if (child == null)
|
||||||
@@ -74,7 +67,7 @@ namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
|||||||
if (!await unitService.CommitAsync())
|
if (!await unitService.CommitAsync())
|
||||||
logger.LogError($"Не удалось создать связь Unit {unit.Name} с {childUnit.Name}");
|
logger.LogError($"Не удалось создать связь Unit {unit.Name} с {childUnit.Name}");
|
||||||
else
|
else
|
||||||
logger.LogDebug($"----- Изменене связи Unit: {unit.Name} -----");
|
logger.LogInformation($"----- Создана новая связь Unit {unit.Name} с {childUnit.Name} -----");
|
||||||
}
|
}
|
||||||
//Для всех обновляем дату синхронизации
|
//Для всех обновляем дату синхронизации
|
||||||
else
|
else
|
||||||
@@ -82,8 +75,8 @@ namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
|||||||
}
|
}
|
||||||
|
|
||||||
//После проверки пришедших к нам из АИХ ИТ дочерних связей удаляем лишние/уже не существующие в базе
|
//После проверки пришедших к нам из АИХ ИТ дочерних связей удаляем лишние/уже не существующие в базе
|
||||||
var childsToDelete = unit.ChildUnits.Where(t => childsName.All(a => t.ChildUnit?.Name != a)).ToList();
|
var childsToDelete = unit.ChildUnits.Where(t => childsName.All(a => t.ChildUnit?.Name != a));
|
||||||
if (childsToDelete != null && childsToDelete.Count() > 0)
|
if (childsToDelete.Any())
|
||||||
DeleteChilds(unit, childsToDelete);
|
DeleteChilds(unit, childsToDelete);
|
||||||
|
|
||||||
//применяем изменения в базе данных
|
//применяем изменения в базе данных
|
||||||
@@ -92,6 +85,27 @@ namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
|||||||
else
|
else
|
||||||
logger.LogDebug($"----- Изменены связи Unit: {unit.Name} -----");
|
logger.LogDebug($"----- Изменены связи Unit: {unit.Name} -----");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Удаляем детей у тех кого детей в выборке АИХ ИТ не оказалось
|
||||||
|
var parentNames = groupedData.Select(t => t.Key);
|
||||||
|
|
||||||
|
var units = await unitService.Get().Include(t => t.ChildUnits).ToListAsync();
|
||||||
|
|
||||||
|
var parentsToDeleteChild = units.Where(t => parentNames.All(a => t.Name != a) && t.ChildUnits.Any());
|
||||||
|
|
||||||
|
if (parentsToDeleteChild.Any())
|
||||||
|
{
|
||||||
|
foreach (var unit in parentsToDeleteChild)
|
||||||
|
{
|
||||||
|
unit.ChildUnits.Clear();
|
||||||
|
|
||||||
|
//применяем изменения в базе данных
|
||||||
|
if (!await unitService.CommitAsync())
|
||||||
|
logger.LogError($"Не удалось удалить лишние связи Unit {unit.Name}");
|
||||||
|
else
|
||||||
|
logger.LogInformation($"----- Удалены лишние связи Unit {unit.Name} -----");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -100,7 +114,7 @@ namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="unit"></param>
|
/// <param name="unit"></param>
|
||||||
/// <param name="unitToDeleteChilds"></param>
|
/// <param name="unitToDeleteChilds"></param>
|
||||||
private void DeleteChilds(Unit unit, List<UnitInUnit> unitToDeleteChilds)
|
private void DeleteChilds(Unit unit, IEnumerable<UnitInUnit> unitToDeleteChilds)
|
||||||
{
|
{
|
||||||
foreach (var childUnit in unitToDeleteChilds)
|
foreach (var childUnit in unitToDeleteChilds)
|
||||||
{
|
{
|
||||||
@@ -110,17 +124,6 @@ namespace PARR.AIHITRelationshipsSyncer.Services.Implementations
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Получение списка ЭК с дочерними связями
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
private async Task<List<Unit>> GetUnitsWithChildrens()
|
|
||||||
{
|
|
||||||
return await unitService.Get()
|
|
||||||
.Include(t => t.ChildUnits).ToListAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Создать новый ЭК по имени
|
/// Создать новый ЭК по имени
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user