feat(aihitSyncer): добавлена синхронизация объекта WorkGroup
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user