diff --git a/PARR.AIHITSyncer/Services/SyncerService.cs b/PARR.AIHITSyncer/Services/SyncerService.cs index 0ce4c408..502c0d4d 100644 --- a/PARR.AIHITSyncer/Services/SyncerService.cs +++ b/PARR.AIHITSyncer/Services/SyncerService.cs @@ -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 AppTypes { get; private set; } = new List(); @@ -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 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 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(); } diff --git a/PARR.DAL/Migrations/DataContextModelSnapshot.cs b/PARR.DAL/Migrations/DataContextModelSnapshot.cs index c3670475..bbeff7e8 100644 --- a/PARR.DAL/Migrations/DataContextModelSnapshot.cs +++ b/PARR.DAL/Migrations/DataContextModelSnapshot.cs @@ -51,7 +51,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TemplateId"); - b.ToTable("AgentHistories"); + b.ToTable("AgentHistories", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.AgentHistoryLevel", b => @@ -72,7 +72,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("AgentHistoryLevels"); + b.ToTable("AgentHistoryLevels", (string)null); b.HasData( new @@ -101,7 +101,7 @@ namespace PARR.DAL.Migrations b.HasIndex("WorkGroupId"); - b.ToTable("AppInWorkInWorkGroups"); + b.ToTable("AppInWorkInWorkGroups", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Application", b => @@ -130,7 +130,7 @@ namespace PARR.DAL.Migrations b.HasIndex("Name", "ApplicationTypeId") .IsUnique(); - b.ToTable("Applications"); + b.ToTable("Applications", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b => @@ -157,7 +157,7 @@ namespace PARR.DAL.Migrations b.HasIndex("HostId"); - b.ToTable("ApplicationsInHost"); + b.ToTable("ApplicationsInHost", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b => @@ -181,7 +181,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("ApplicationTypes"); + b.ToTable("ApplicationTypes", (string)null); b.HasData( new @@ -294,7 +294,7 @@ namespace PARR.DAL.Migrations b.HasIndex("WorkId", "ApplicationId") .IsUnique(); - b.ToTable("ApplicationsInWorks"); + b.ToTable("ApplicationsInWorks", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.EkStatus", b => @@ -311,7 +311,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("EkStatuses"); + b.ToTable("EkStatuses", (string)null); b.HasData( new @@ -374,7 +374,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("EsppSchTypes"); + b.ToTable("EsppSchTypes", (string)null); b.HasData( new @@ -443,7 +443,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TypeScheduleId", "TypeId") .IsUnique(); - b.ToTable("EsppSchTypeConfigs"); + b.ToTable("EsppSchTypeConfigs", (string)null); b.HasData( new @@ -546,7 +546,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("EsppSchTypeSchedules"); + b.ToTable("EsppSchTypeSchedules", (string)null); b.HasData( new @@ -614,7 +614,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TypeId"); - b.ToTable("EsppSchTypeValues"); + b.ToTable("EsppSchTypeValues", (string)null); b.HasData( new @@ -1383,7 +1383,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TypeValueId"); - b.ToTable("EsppSchValues"); + b.ToTable("EsppSchValues", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Host", b => @@ -1430,7 +1430,7 @@ namespace PARR.DAL.Migrations b.HasIndex("Ek", "IP"); - b.ToTable("Hosts"); + b.ToTable("Hosts", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Order", b => @@ -1482,7 +1482,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TemplateId"); - b.ToTable("Orders"); + b.ToTable("Orders", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.OrderStatus", b => @@ -1503,7 +1503,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("OrderStatuses"); + b.ToTable("OrderStatuses", (string)null); b.HasData( new @@ -1562,7 +1562,7 @@ namespace PARR.DAL.Migrations b.HasIndex("EsppId") .IsUnique(); - b.ToTable("Processes"); + b.ToTable("Processes", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b => @@ -1579,7 +1579,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("ResponseAreas"); + b.ToTable("ResponseAreas", (string)null); b.HasData( new @@ -1690,7 +1690,7 @@ namespace PARR.DAL.Migrations b.HasIndex("Name") .IsUnique(); - b.ToTable("Robots"); + b.ToTable("Robots", (string)null); b.HasData( new @@ -1745,7 +1745,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TemplateId", "RobotCode") .IsUnique(); - b.ToTable("RobotConfigurations"); + b.ToTable("RobotConfigurations", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.RobotHistory", b => @@ -1780,7 +1780,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TaskStatusCode"); - b.ToTable("RobotHistories"); + b.ToTable("RobotHistories", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b => @@ -1801,7 +1801,7 @@ namespace PARR.DAL.Migrations b.HasKey("Level"); - b.ToTable("RobotHistoryLevels"); + b.ToTable("RobotHistoryLevels", (string)null); b.HasData( new @@ -1848,7 +1848,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("RobotStatuses"); + b.ToTable("RobotStatuses", (string)null); b.HasData( new @@ -1896,7 +1896,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("Roles"); + b.ToTable("Roles", (string)null); b.HasData( new @@ -1930,7 +1930,7 @@ namespace PARR.DAL.Migrations b.HasKey("Name"); - b.ToTable("Settings"); + b.ToTable("Settings", (string)null); b.HasData( new @@ -2024,7 +2024,7 @@ namespace PARR.DAL.Migrations b.HasIndex("ProcessId"); - b.ToTable("Subprocesses"); + b.ToTable("Subprocesses", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.TaskStatus", b => @@ -2045,7 +2045,7 @@ namespace PARR.DAL.Migrations b.HasKey("Code"); - b.ToTable("TaskStatuses"); + b.ToTable("TaskStatuses", (string)null); b.HasData( new @@ -2108,7 +2108,7 @@ namespace PARR.DAL.Migrations b.HasIndex("Name") .IsUnique(); - b.ToTable("Templates"); + b.ToTable("Templates", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Tnk", b => @@ -2140,7 +2140,7 @@ namespace PARR.DAL.Migrations b.HasIndex("SubprocessId"); - b.ToTable("Tnks"); + b.ToTable("Tnks", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.User", b => @@ -2171,7 +2171,7 @@ namespace PARR.DAL.Migrations b.HasIndex("Ip") .IsUnique(); - b.ToTable("Users"); + b.ToTable("Users", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.UsersInRole", b => @@ -2186,7 +2186,7 @@ namespace PARR.DAL.Migrations b.HasIndex("UserId"); - b.ToTable("UsersInRoles"); + b.ToTable("UsersInRoles", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.Work", b => @@ -2218,7 +2218,7 @@ namespace PARR.DAL.Migrations b.HasIndex("TnkId"); - b.ToTable("Works"); + b.ToTable("Works", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.WorkGroup", b => @@ -2236,7 +2236,7 @@ namespace PARR.DAL.Migrations b.HasKey("Id"); - b.ToTable("WorkGroups"); + b.ToTable("WorkGroups", (string)null); }); modelBuilder.Entity("PARR.DAL.Models.AgentHistory", b => diff --git a/PARR.DAL/Models/Host.cs b/PARR.DAL/Models/Host.cs index 8660840c..cc6a6b6b 100644 --- a/PARR.DAL/Models/Host.cs +++ b/PARR.DAL/Models/Host.cs @@ -16,7 +16,7 @@ namespace PARR.DAL.Models public DateTimeOffset? DateModified { get; set; } - public string Ek { get; set; } + public required string Ek { get; set; } public int EkStatusCode { get; set; }