This commit is contained in:
Mikhail Trubnikov
2024-01-22 11:48:24 +10:00

View File

@@ -131,13 +131,13 @@ namespace PARR.AIHIT
if (ek.IP == null)
continue;
var foundHost = await hostService.GetHostWithAppsAsync(ek.IP);
var host = await hostService.GetHostWithAppsAsync(ek.IP);
var mappedHost = mapper.Map<Host>(ek);
//TODO Валидация по внешним связям
var hostApplications = await GetAndFillApplicationsAsync(ek);
if (foundHost == null)
if (host == null)
{
// создаем
if (!await hostService.CreateAsync(mappedHost) || !await hostService.CommitAsync())
@@ -148,28 +148,28 @@ namespace PARR.AIHIT
else
logger.LogInformation($"----- Создан Host: {mappedHost.Id} -----");
host = await hostService.GetHostWithAppsAsync(mappedHost.IP);
// Синхронизация Applications
await SyncApplicationAndHostAsync(foundHost, hostApplications);
await SyncApplicationAndHostAsync(host, hostApplications);
}
else
{
// обновляем
var isChanged = false;
if (!foundHost.EkStatusCode!.Equals(mappedHost.EkStatusCode))
if (!host.EkStatusCode!.Equals(mappedHost.EkStatusCode))
{
foundHost.EkStatusCode = mappedHost.EkStatusCode;
host.EkStatusCode = mappedHost.EkStatusCode;
isChanged = true;
}
else if (mappedHost.WorkGroup != null && (foundHost.WorkGroup == null || !foundHost.WorkGroup!.Equals(mappedHost.WorkGroup)))
else if (mappedHost.WorkGroup != null && (host.WorkGroup == null || !host.WorkGroup!.Equals(mappedHost.WorkGroup)))
{
foundHost.WorkGroup = mappedHost.WorkGroup;
host.WorkGroup = mappedHost.WorkGroup;
isChanged = true;
}
if (isChanged)
{
foundHost.DateModified = DateTimeOffset.UtcNow;
host.DateModified = DateTimeOffset.UtcNow;
if (!await hostService.CommitAsync())
logger.LogError($"Не удалось обновить узел {mappedHost.IP}");
else
@@ -177,11 +177,18 @@ namespace PARR.AIHIT
}
// Синхронизация Applications
await SyncApplicationAndHostAsync(foundHost, hostApplications, true);
await SyncApplicationAndHostAsync(host, hostApplications, true);
}
}
}
/// <summary>
/// Метод синхронизации
/// </summary>
/// <param name="host">Хост</param>
/// <param name="hostApplications">Список программного обеспечения</param>
/// <param name="isUpdateDateModified">Признак обновления поля DateModified</param>
/// <returns></returns>
private async Task SyncApplicationAndHostAsync(Host? host, List<Application> hostApplications, bool isUpdateDateModified = false)
{