feat(dal, aihitSyncer, aihitLoader): добавлена ЗО для РГ. Обновлён список ЗО. Обновлена синхронизация из АИХИТ.

This commit is contained in:
Mikhail Trubnikov
2024-06-18 14:28:38 +10:00
parent e6cca214d4
commit d4af32515d
15 changed files with 8561 additions and 11 deletions

View File

@@ -84,6 +84,9 @@ namespace PARR.AIHITSyncer.Services
{
var id = Guid.NewGuid();
int responseAreaCode = GetResponseAreaCodeFromStr(objFromQuery.ResponseArea) ?? 0;
if (responseAreaCode == 0)
return null;
var host = new Host
{
@@ -92,8 +95,9 @@ namespace PARR.AIHITSyncer.Services
IP = objFromQuery.IP,
EkStatusCode = ResolveCode(objFromQuery.Status),
//WorkGroup = objFromQuery.WorkGroup,
WorkGroup = await CreateWorkGroupIfNotExistAsync(objFromQuery.WorkGroup),
ResponseAreaCode = ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea))
WorkGroup = await CreateWorkGroupIfNotExistAsync(objFromQuery.WorkGroup, objFromQuery.WorkGroupResponseArea),
// ResponseAreaCode = ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea))
ResponseAreaCode = responseAreaCode
};
if (!await hostService.CreateAsync(host) || !await hostService.CommitAsync())
@@ -106,18 +110,41 @@ namespace PARR.AIHITSyncer.Services
return await hostService.GetHostWithAppsByEkAsync(host.Ek);
}
private async Task<WorkGroup?> CreateWorkGroupIfNotExistAsync(string? workGroupName)
private async Task<WorkGroup?> CreateWorkGroupIfNotExistAsync(string? workGroupName, string wgResponseArea)
{
if (string.IsNullOrEmpty(workGroupName) || string.IsNullOrWhiteSpace(workGroupName)) return null;
if (string.IsNullOrEmpty(workGroupName) || string.IsNullOrWhiteSpace(workGroupName))
return null;
if (string.IsNullOrEmpty(wgResponseArea) || string.IsNullOrWhiteSpace(wgResponseArea))
return null;
int wgCode = GetResponseAreaCodeFromStr(wgResponseArea) ?? 0;
if (wgCode == 0)
return null;
var existWorkGroup = await workGroupService.GetByNameAsync(workGroupName);
if (existWorkGroup != null)
{
//проверяем, соответствует ли рабочая группа
if (existWorkGroup.ResponseAreaCode != wgCode)
{
logger.LogDebug($"У рабочей группы {existWorkGroup.Name} не совпадают ЗО, обновляем, текущее значение: {existWorkGroup.ResponseAreaCode}, новое: {wgCode}");
existWorkGroup.ResponseAreaCode = wgCode;
if (!await workGroupService.CommitAsync())
{
logger.LogError($"Ошибка при обновлении ЗО рабочей группы {existWorkGroup.Name}");
}
}
return existWorkGroup;
}
var workGroup = new WorkGroup
{
Id = Guid.NewGuid(),
Name = workGroupName.Trim(),
ResponseAreaCode = wgCode
};
if (!await workGroupService.CreateAsync(workGroup) || !await workGroupService.CommitAsync())
@@ -151,14 +178,21 @@ namespace PARR.AIHITSyncer.Services
if (objFromQuery.WorkGroup != null && (host.WorkGroup == null || !host.WorkGroup!.Name.Equals(objFromQuery.WorkGroup)))
{
host.WorkGroup = await CreateWorkGroupIfNotExistAsync(objFromQuery.WorkGroup);
host.WorkGroup = await CreateWorkGroupIfNotExistAsync(objFromQuery.WorkGroup, objFromQuery.WorkGroupResponseArea);
isChanged = true;
}
int responseAreaCode = GetResponseAreaCodeFromStr(objFromQuery.ResponseArea) ?? 0;
if (responseAreaCode == 0) {
logger.LogWarning($"Ошибка при получении ЗО хоста: {objFromQuery.EK}, ЗО: {objFromQuery.ResponseArea}");
return;
}
if (host.ResponseAreaCode != ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea)))
//if (host.ResponseAreaCode != ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea)))
if (host.ResponseAreaCode != responseAreaCode)
{//TODO Возможно проще выгружать с помощью INCLUDE зону ответственности и сравнивать string
host.ResponseAreaCode = ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea));
//host.ResponseAreaCode = ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea));
host.ResponseAreaCode = responseAreaCode;
isChanged = true;
}
if (isChanged)
@@ -389,6 +423,23 @@ namespace PARR.AIHITSyncer.Services
return result;
}
private int? GetResponseAreaCodeFromStr(string responseAreaStr)
{
if (string.IsNullOrEmpty(responseAreaStr) || string.IsNullOrWhiteSpace(responseAreaStr))
return null;
if (responseAreaStr.ToUpper().Trim() == "ОБЩЕЕ")
return (int)ResponseAreaEnum.general;
if (responseAreaStr.ToUpper().Trim() == "00-ГВЦ")
return (int)ResponseAreaEnum.gvc;
return ResolveCode(responseAreaStr);
}
private async Task GetAppTypesAsync()
{
if (AppTypes == null || AppTypes.Count == 0)