Manager. Mapping Template, изменен метод сравнения и обновления
This commit is contained in:
@@ -24,7 +24,7 @@ namespace PARR.DAL.Services.Implementations
|
|||||||
|
|
||||||
public async Task<Template?> GetTemplateByNameAsync(string name)
|
public async Task<Template?> GetTemplateByNameAsync(string name)
|
||||||
{
|
{
|
||||||
return await EntitySet.FirstOrDefaultAsync(t => t.Name == name);
|
return await GetWithIncludes().FirstOrDefaultAsync(t => t.Name == name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<Template> GetWithIncludes()
|
public IQueryable<Template> GetWithIncludes()
|
||||||
|
|||||||
28
PARR.EsppTemplateSync/Domain/EsppTemplate.cs
Normal file
28
PARR.EsppTemplateSync/Domain/EsppTemplate.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PARR.EsppTemplateSync.Domain
|
||||||
|
{
|
||||||
|
internal class EsppTemplate
|
||||||
|
{
|
||||||
|
public required string Name { get; set; }
|
||||||
|
public bool IsActive { get; set; }
|
||||||
|
public required string WorkGroup { get; set; }
|
||||||
|
public required string ShortDescription { get; set; }
|
||||||
|
public required string ResponseArea { get; set; }
|
||||||
|
public required string Duration { get; set; }
|
||||||
|
public required string EK { get; set; }
|
||||||
|
//public required string Initiator { get; set; }
|
||||||
|
public required string FullDescription { get; set; }
|
||||||
|
//public required string ClosingCode { get; set; }
|
||||||
|
public required string Solution { get; set; }
|
||||||
|
public required string Process { get; set; }
|
||||||
|
public required string SubProcess { get; set; }
|
||||||
|
public required string TNK { get; set; }
|
||||||
|
public required string Work { get; set; }
|
||||||
|
//public required string Worker { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ namespace PARR.EsppTemplateSync
|
|||||||
configuration.GetSection(nameof(GlobalSettings)).Bind(globalSettings);
|
configuration.GetSection(nameof(GlobalSettings)).Bind(globalSettings);
|
||||||
services.AddSingleton(globalSettings);
|
services.AddSingleton(globalSettings);
|
||||||
|
|
||||||
|
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
|
||||||
//services.AddTransient<ITemplateSyncer, TemplateFileSyncer>();
|
//services.AddTransient<ITemplateSyncer, TemplateFileSyncer>();
|
||||||
services.AddTransient<ITemplateSyncer, TemplateMQSyncer>();
|
services.AddTransient<ITemplateSyncer, TemplateMQSyncer>();
|
||||||
services.AddTransient<IParserService, ParserService>();
|
services.AddTransient<IParserService, ParserService>();
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using PARR.DAL.Models;
|
||||||
|
using PARR.EsppTemplateSync.Domain;
|
||||||
|
|
||||||
|
namespace PARR.EsppTemplateSync.MappingProfiles
|
||||||
|
{
|
||||||
|
public class DomainToDomainProfile : Profile
|
||||||
|
{
|
||||||
|
public DomainToDomainProfile()
|
||||||
|
{
|
||||||
|
|
||||||
|
CreateMap<Template, EsppTemplate>()
|
||||||
|
.ForMember(d => d.Name, o => o.MapFrom(s => s.Name))
|
||||||
|
.ForMember(d => d.IsActive, o => o.MapFrom(s => s.IsActive))
|
||||||
|
.ForMember(d => d.WorkGroup, o => o.MapFrom(s => s.Host!.WorkGroup))
|
||||||
|
.ForMember(d => d.ShortDescription, o => o.MapFrom(s => s.ApplicationsInWork!.ShortDescription))
|
||||||
|
.ForMember(d => d.ResponseArea, o => o.MapFrom(s => s.ApplicationsInWork!.ShortDescription))
|
||||||
|
.ForMember(d => d.Duration, o => o.MapFrom(s => s.ApplicationsInWork!.TemplateDuration))
|
||||||
|
.ForMember(d => d.EK, o => o.MapFrom(s => s.Host!.Ek))
|
||||||
|
//.ForMember(d => d.Initiator, o => o.MapFrom(s => )) TODO откуда то нужно брать инициатора
|
||||||
|
.ForMember(d => d.FullDescription, o => o.MapFrom(s => s.ApplicationsInWork!.FullDescription))
|
||||||
|
//.ForMember(d => d.ClosingCode, o => o.MapFrom(s => s.)) TODO toоda же к инициатору
|
||||||
|
.ForMember(d => d.Solution, o => o.MapFrom(s => s.ApplicationsInWork!.Solution))
|
||||||
|
.ForMember(d => d.Process, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Tnk!.Subprocess!.Process!.Name))
|
||||||
|
.ForMember(d => d.SubProcess, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Tnk!.Subprocess!.Name))
|
||||||
|
.ForMember(d => d.TNK, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Tnk!.Name))
|
||||||
|
.ForMember(d => d.Work, o => o.MapFrom(s => s.ApplicationsInWork!.Work!.Name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
||||||
<PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
|
<PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
using PARR.DAL.Models;
|
using PARR.EsppTemplateSync.Domain;
|
||||||
|
|
||||||
namespace PARR.EsppTemplateSync.Services
|
namespace PARR.EsppTemplateSync.Services
|
||||||
{
|
{
|
||||||
internal interface IParserService
|
internal interface IParserService
|
||||||
{
|
{
|
||||||
Template? ParseString(string str);
|
EsppTemplate? ParseString(string str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using AutoMapper;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using PARR.DAL.Contracts;
|
using PARR.DAL.Contracts;
|
||||||
using PARR.DAL.Models;
|
using PARR.DAL.Models;
|
||||||
using PARR.DAL.Services.Interfaces;
|
using PARR.DAL.Services.Interfaces;
|
||||||
|
using PARR.EsppTemplateSync.Domain;
|
||||||
using PARR.EsppTemplateSync.Settings;
|
using PARR.EsppTemplateSync.Settings;
|
||||||
|
|
||||||
namespace PARR.EsppTemplateSync.Services
|
namespace PARR.EsppTemplateSync.Services
|
||||||
@@ -13,18 +15,21 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
private readonly IServiceProvider serviceProvider;
|
private readonly IServiceProvider serviceProvider;
|
||||||
private readonly IParserService parserService;
|
private readonly IParserService parserService;
|
||||||
private readonly GlobalSettings globalSettings;
|
private readonly GlobalSettings globalSettings;
|
||||||
|
private readonly IMapper mapper;
|
||||||
|
|
||||||
public Manager(
|
public Manager(
|
||||||
ILogger<Manager> logger,
|
ILogger<Manager> logger,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IParserService parserService,
|
IParserService parserService,
|
||||||
GlobalSettings globalSettings
|
GlobalSettings globalSettings,
|
||||||
|
IMapper mapper
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.serviceProvider = serviceProvider;
|
this.serviceProvider = serviceProvider;
|
||||||
this.parserService = parserService;
|
this.parserService = parserService;
|
||||||
this.globalSettings = globalSettings;
|
this.globalSettings = globalSettings;
|
||||||
|
this.mapper = mapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<bool> ManageFileAsync(string path)
|
public Task<bool> ManageFileAsync(string path)
|
||||||
@@ -50,10 +55,10 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//если шаблон не аквтивен, пропускаем
|
//если шаблон не аквтивен, пропускаем
|
||||||
if (!esppTemplate.IsActive)
|
//if (!esppTemplate.IsActive)
|
||||||
{
|
//{
|
||||||
return isSuccess;
|
// return isSuccess;
|
||||||
}
|
//}
|
||||||
|
|
||||||
await SyncTemplateAsync(esppTemplate);
|
await SyncTemplateAsync(esppTemplate);
|
||||||
// var template = await GetTemplateAsync(esppTemplate);
|
// var template = await GetTemplateAsync(esppTemplate);
|
||||||
@@ -110,7 +115,25 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
return isSuccess;
|
return isSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Template?> GetTemplateAsync(Template esppTemplate)
|
//private async Task<Template?> GetTemplateAsync(Template esppTemplate)
|
||||||
|
//{
|
||||||
|
// using (var scope = serviceProvider.CreateScope())
|
||||||
|
// {
|
||||||
|
// var services = scope.ServiceProvider;
|
||||||
|
|
||||||
|
// var templateService = services.GetService<ITemplateService>();
|
||||||
|
|
||||||
|
// if (templateService == null)
|
||||||
|
// {
|
||||||
|
// throw new Exception($"Не найден сервис: {nameof(ITemplateService)}");
|
||||||
|
// // return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return await templateService.GetTemplateByNameAsync(esppTemplate.Name);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
private async Task SyncTemplateAsync(EsppTemplate esppTemplate)
|
||||||
{
|
{
|
||||||
using (var scope = serviceProvider.CreateScope())
|
using (var scope = serviceProvider.CreateScope())
|
||||||
{
|
{
|
||||||
@@ -124,25 +147,7 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
// return;
|
// return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return await templateService.GetTemplateByNameAsync(esppTemplate.Name);
|
Template? template = await templateService.GetTemplateByNameAsync(esppTemplate.Name);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task SyncTemplateAsync(Template esppTemplate)
|
|
||||||
{
|
|
||||||
using (var scope = serviceProvider.CreateScope())
|
|
||||||
{
|
|
||||||
var services = scope.ServiceProvider;
|
|
||||||
|
|
||||||
var templateService = services.GetService<ITemplateService>();
|
|
||||||
|
|
||||||
if (templateService == null)
|
|
||||||
{
|
|
||||||
throw new Exception($"Не найден сервис: {nameof(ITemplateService)}");
|
|
||||||
// return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var template = await templateService.GetTemplateByNameAsync(esppTemplate.Name);
|
|
||||||
//существует в ЕСПП но отсутствует в ПАРР.
|
//существует в ЕСПП но отсутствует в ПАРР.
|
||||||
//TODO деактивируем и видимо ещё что-то нужно
|
//TODO деактивируем и видимо ещё что-то нужно
|
||||||
if (template == null)
|
if (template == null)
|
||||||
@@ -159,12 +164,15 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
//else
|
//else
|
||||||
// logger.LogInformation($"----- Создана запись Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
|
// logger.LogInformation($"----- Создана запись Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
|
||||||
//---
|
//---
|
||||||
logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ApplicationsInWork?.ShortDescription}) -----");
|
logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var isChanged = IsChanged(template,esppTemplate);
|
var mappedTemplate = mapper.Map<EsppTemplate>(template);
|
||||||
|
if (mappedTemplate == null)
|
||||||
|
return;
|
||||||
|
var isChanged = IsChanged(mappedTemplate, esppTemplate);
|
||||||
|
|
||||||
if (isChanged)
|
if (isChanged)
|
||||||
{
|
{
|
||||||
@@ -188,7 +196,7 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
template.StatusCode = (int)StatusTemplateEnum.Updating;
|
template.StatusCode = (int)StatusTemplateEnum.Updating;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsChanged(Template template, Template esppTemplate)
|
private bool IsChanged(EsppTemplate template, EsppTemplate esppTemplate)
|
||||||
{
|
{
|
||||||
foreach (var prop in template.GetType().GetProperties())
|
foreach (var prop in template.GetType().GetProperties())
|
||||||
{
|
{
|
||||||
@@ -202,8 +210,8 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
if (parrValue == null || esppValue == null)
|
if (parrValue == null || esppValue == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//if (parrValue!.ToString()!.ToLower() != esppValue!.ToString()!.ToLower())
|
if (parrValue!.ToString()!.ToLower() != esppValue!.ToString()!.ToLower())
|
||||||
//return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using PARR.DAL.Contracts;
|
using PARR.EsppTemplateSync.Domain;
|
||||||
using PARR.DAL.Models;
|
|
||||||
using PARR.DAL.Services.Interfaces;
|
|
||||||
using PARR.EsppTemplateSync.Settings;
|
using PARR.EsppTemplateSync.Settings;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
|
||||||
@@ -30,7 +28,7 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
return isSuccess;
|
return isSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Template? ParseString(string str)
|
public EsppTemplate? ParseString(string str)
|
||||||
{
|
{
|
||||||
//TODO: а если формат нет тот? Все будет ок?
|
//TODO: а если формат нет тот? Все будет ок?
|
||||||
|
|
||||||
@@ -60,13 +58,26 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
var work = splittedContent[15].Trim();
|
var work = splittedContent[15].Trim();
|
||||||
var worker = splittedContent[16].Trim();
|
var worker = splittedContent[16].Trim();
|
||||||
|
|
||||||
var template = new Template
|
var template = new EsppTemplate
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid(),
|
|
||||||
DateCreated = DateTime.UtcNow,
|
|
||||||
Name = name,
|
Name = name,
|
||||||
IsActive = bool.Parse(isActive),
|
IsActive = bool.Parse(isActive),
|
||||||
StatusCode = (int)StatusTemplateEnum.Ok
|
WorkGroup = workGroup,
|
||||||
|
ShortDescription = shortDescription,
|
||||||
|
//Category = category,
|
||||||
|
ResponseArea = responseArea,
|
||||||
|
Duration = duration,
|
||||||
|
EK = ek,
|
||||||
|
//Initiator = initiator,
|
||||||
|
FullDescription = fullDescription,
|
||||||
|
//ClosingCode = closingCode,
|
||||||
|
Solution = solution,
|
||||||
|
Process = process,
|
||||||
|
SubProcess = subProcess,
|
||||||
|
TNK = tnk,
|
||||||
|
Work = work,
|
||||||
|
//Worker = worker
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return template;
|
return template;
|
||||||
|
|||||||
Reference in New Issue
Block a user