feat(aihitSyncer): добавлена синхронизация объекта WorkGroup

This commit is contained in:
Mikhail Kuznetsov
2024-06-04 11:00:14 +10:00
parent 90948108c1
commit 18dbca988a
3 changed files with 78 additions and 41 deletions

View File

@@ -18,6 +18,7 @@ namespace PARR.AIHITSyncer.Services
private readonly IApplicationInHostService appInHostService;
private readonly IApplicationTypeService appTypeService;
private readonly ITransformService transformService;
private readonly IWorkGroupService workGroupService;
public List<ApplicationType> AppTypes { get; private set; } = new List<ApplicationType>();
@@ -27,7 +28,8 @@ namespace PARR.AIHITSyncer.Services
IApplicationService appService,
IApplicationInHostService appInHostService,
IApplicationTypeService appTypeService,
ITransformService transformService
ITransformService transformService,
IWorkGroupService workGroupService
)
{
this.logger = logger;
@@ -36,6 +38,7 @@ namespace PARR.AIHITSyncer.Services
this.appInHostService = appInHostService;
this.appTypeService = appTypeService;
this.transformService = transformService;
this.workGroupService = workGroupService;
}
@@ -80,14 +83,17 @@ namespace PARR.AIHITSyncer.Services
private async Task<Host?> CreateHostAsync(AihitDataMq objFromQuery)
{
var id = Guid.NewGuid();
var host = new Host
{
Id = id,
Ek = objFromQuery.EK,
IP = objFromQuery.IP,
EkStatusCode = ResolveCode(objFromQuery.Status),
WorkGroup = objFromQuery.WorkGroup,
ResponseAreaCode = ResolveCode(objFromQuery.ResponseArea)
//WorkGroup = objFromQuery.WorkGroup,
WorkGroupItem = await CreateWorkGroupIfNotExistAsync(objFromQuery.WorkGroup),
ResponseAreaCode = ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea))
};
if (!await hostService.CreateAsync(host) || !await hostService.CommitAsync())
@@ -100,6 +106,28 @@ namespace PARR.AIHITSyncer.Services
return await hostService.GetHostWithAppsByEkAsync(host.Ek);
}
private async Task<WorkGroup?> CreateWorkGroupIfNotExistAsync(string? workGroupName)
{
if (string.IsNullOrEmpty(workGroupName) || string.IsNullOrWhiteSpace(workGroupName)) return null;
var existWorkGroup = await workGroupService.GetByNameAsync(workGroupName);
if (existWorkGroup != null)
return existWorkGroup;
var workGroup = new WorkGroup
{
Id = Guid.NewGuid(),
Name = workGroupName.Trim(),
};
if (!await workGroupService.CreateAsync(workGroup) || !await workGroupService.CommitAsync())
logger.LogError($"Не удалось создать запись в таблице WorkGroups: {workGroupName}, {workGroup.ToJson()}");
else
logger.LogInformation($"Создана запись а таблице WorkGroups: {workGroupName}, {workGroup.ToJson()}");
return await workGroupService.GetAsync(workGroup.Id); ;
}
private async Task SyncHostFieldsAsync(Host host, AihitDataMq objFromQuery)
{
@@ -114,11 +142,20 @@ namespace PARR.AIHITSyncer.Services
host.EkStatusCode = ResolveCode(objFromQuery.Status);
isChanged = true;
}
if (objFromQuery.WorkGroup != null && (host.WorkGroup == null || !host.WorkGroup!.Equals(objFromQuery.WorkGroup)))
//TODO Удалить после перехода на самостоятельный объект WorkGroup
//if (objFromQuery.WorkGroup != null && (host.WorkGroup == null || !host.WorkGroup!.Equals(objFromQuery.WorkGroup)))
//{
// host.WorkGroup = objFromQuery.WorkGroup;
// isChanged = true;
//}
if (objFromQuery.WorkGroup != null && (host.WorkGroupItem == null || !host.WorkGroupItem!.Name.Equals(objFromQuery.WorkGroup)))
{
host.WorkGroup = objFromQuery.WorkGroup;
host.WorkGroupItem = await CreateWorkGroupIfNotExistAsync(objFromQuery.WorkGroup);
isChanged = true;
}
if (host.ResponseAreaCode != ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea)))
{//TODO Возможно проще выгружать с помощью INCLUDE зону ответственности и сравнивать string
host.ResponseAreaCode = ((ResolveCode(objFromQuery.ResponseArea) == 0) ? 99 : ResolveCode(objFromQuery.ResponseArea));
@@ -217,7 +254,7 @@ namespace PARR.AIHITSyncer.Services
{
var regex = new Regex("\\([^)]*\\)");
if (regex.IsMatch(appStr))
if (regex.IsMatch(appStr))
foreach (var parenthesis in regex.Matches(appStr))
{
if (!string.IsNullOrEmpty(parenthesis.ToString()))
@@ -226,7 +263,7 @@ namespace PARR.AIHITSyncer.Services
appStr = appStr.Replace(parenthesis!.ToString()!, newParenthesis);
}
}
return appStr.Split(new char[] { ',', ';' }).Select(a => a.Replace("<|>", ",")).Distinct().ToList();
}