Manager. Mapping Template, изменен метод сравнения и обновления
This commit is contained in:
@@ -24,7 +24,7 @@ namespace PARR.DAL.Services.Implementations
|
||||
|
||||
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()
|
||||
|
||||
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);
|
||||
services.AddSingleton(globalSettings);
|
||||
|
||||
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
|
||||
//services.AddTransient<ITemplateSyncer, TemplateFileSyncer>();
|
||||
services.AddTransient<ITemplateSyncer, TemplateMQSyncer>();
|
||||
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>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
||||
<PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using PARR.DAL.Models;
|
||||
using PARR.EsppTemplateSync.Domain;
|
||||
|
||||
namespace PARR.EsppTemplateSync.Services
|
||||
{
|
||||
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 PARR.DAL.Contracts;
|
||||
using PARR.DAL.Models;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
using PARR.EsppTemplateSync.Domain;
|
||||
using PARR.EsppTemplateSync.Settings;
|
||||
|
||||
namespace PARR.EsppTemplateSync.Services
|
||||
@@ -13,18 +15,21 @@ namespace PARR.EsppTemplateSync.Services
|
||||
private readonly IServiceProvider serviceProvider;
|
||||
private readonly IParserService parserService;
|
||||
private readonly GlobalSettings globalSettings;
|
||||
private readonly IMapper mapper;
|
||||
|
||||
public Manager(
|
||||
ILogger<Manager> logger,
|
||||
IServiceProvider serviceProvider,
|
||||
IParserService parserService,
|
||||
GlobalSettings globalSettings
|
||||
GlobalSettings globalSettings,
|
||||
IMapper mapper
|
||||
)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.serviceProvider = serviceProvider;
|
||||
this.parserService = parserService;
|
||||
this.globalSettings = globalSettings;
|
||||
this.mapper = mapper;
|
||||
}
|
||||
|
||||
public Task<bool> ManageFileAsync(string path)
|
||||
@@ -50,10 +55,10 @@ namespace PARR.EsppTemplateSync.Services
|
||||
else
|
||||
{
|
||||
//если шаблон не аквтивен, пропускаем
|
||||
if (!esppTemplate.IsActive)
|
||||
{
|
||||
return isSuccess;
|
||||
}
|
||||
//if (!esppTemplate.IsActive)
|
||||
//{
|
||||
// return isSuccess;
|
||||
//}
|
||||
|
||||
await SyncTemplateAsync(esppTemplate);
|
||||
// var template = await GetTemplateAsync(esppTemplate);
|
||||
@@ -110,7 +115,25 @@ namespace PARR.EsppTemplateSync.Services
|
||||
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())
|
||||
{
|
||||
@@ -124,25 +147,7 @@ namespace PARR.EsppTemplateSync.Services
|
||||
// return;
|
||||
}
|
||||
|
||||
return 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);
|
||||
Template? template = await templateService.GetTemplateByNameAsync(esppTemplate.Name);
|
||||
//существует в ЕСПП но отсутствует в ПАРР.
|
||||
//TODO деактивируем и видимо ещё что-то нужно
|
||||
if (template == null)
|
||||
@@ -159,12 +164,15 @@ namespace PARR.EsppTemplateSync.Services
|
||||
//else
|
||||
// logger.LogInformation($"----- Создана запись Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
|
||||
//---
|
||||
logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ApplicationsInWork?.ShortDescription}) -----");
|
||||
logger.LogWarning($"----- Найден шаблон ЕСПП незарегистрированный в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
var isChanged = IsChanged(template,esppTemplate);
|
||||
var mappedTemplate = mapper.Map<EsppTemplate>(template);
|
||||
if (mappedTemplate == null)
|
||||
return;
|
||||
var isChanged = IsChanged(mappedTemplate, esppTemplate);
|
||||
|
||||
if (isChanged)
|
||||
{
|
||||
@@ -188,7 +196,7 @@ namespace PARR.EsppTemplateSync.Services
|
||||
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())
|
||||
{
|
||||
@@ -202,8 +210,8 @@ namespace PARR.EsppTemplateSync.Services
|
||||
if (parrValue == null || esppValue == null)
|
||||
continue;
|
||||
|
||||
//if (parrValue!.ToString()!.ToLower() != esppValue!.ToString()!.ToLower())
|
||||
//return true;
|
||||
if (parrValue!.ToString()!.ToLower() != esppValue!.ToString()!.ToLower())
|
||||
return true;
|
||||
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.DAL.Contracts;
|
||||
using PARR.DAL.Models;
|
||||
using PARR.DAL.Services.Interfaces;
|
||||
using PARR.EsppTemplateSync.Domain;
|
||||
using PARR.EsppTemplateSync.Settings;
|
||||
using System.Globalization;
|
||||
|
||||
@@ -30,7 +28,7 @@ namespace PARR.EsppTemplateSync.Services
|
||||
return isSuccess;
|
||||
}
|
||||
|
||||
public Template? ParseString(string str)
|
||||
public EsppTemplate? ParseString(string str)
|
||||
{
|
||||
//TODO: а если формат нет тот? Все будет ок?
|
||||
|
||||
@@ -60,13 +58,26 @@ namespace PARR.EsppTemplateSync.Services
|
||||
var work = splittedContent[15].Trim();
|
||||
var worker = splittedContent[16].Trim();
|
||||
|
||||
var template = new Template
|
||||
var template = new EsppTemplate
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
DateCreated = DateTime.UtcNow,
|
||||
Name = name,
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user