using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using PARR.DAL.Models; using PARR.DAL.Services.Interfaces; using PARR.EsppApi.Models; namespace PARR.EsppOrderLoader.Services { internal class OrderItemService : IOrderItemService { private readonly ILogger logger; private readonly IOrderService orderService; private readonly ITemplateService templateService; private readonly IOrderStatusService orderStatusService; public OrderItemService( ILogger logger, IOrderService orderService, ITemplateService templateService, IOrderStatusService orderStatusService ) { this.orderService = orderService; this.templateService = templateService; this.orderStatusService = orderStatusService; this.logger = logger; } public async Task WriteOrderAsync(EsppOrder esppOrder) { var existOrder = await orderService.Get().FirstOrDefaultAsync(t => t.Number.ToLower() == esppOrder.Number.ToLower()); if (existOrder != null) { logger.LogInformation($"Наряд {esppOrder.Number} уже есть в БД. Пропускаю."); return; } var template = await templateService.Get().FirstOrDefaultAsync(t => t.Name.ToLower() == esppOrder.TemplateName.ToLower()); if (template == null) logger.LogWarning($"Не найден шаблон для наряда {esppOrder.Number}, краткое описание наряда: {esppOrder.ShortName}. {esppOrder.WorkGroup}"); var newOrder = new Order { Id = Guid.NewGuid(), Number = esppOrder.Number, WorkGroup = esppOrder.WorkGroup, ShortName = esppOrder.ShortName, TemplateId = template?.Id, StatusCode = (int)orderStatusService.GetOrderStatusByName(esppOrder.Status) }; if (!await orderService.CreateAsync(newOrder) || !await orderService.CommitAsync()) logger.LogError($"Ошибка при добавлении новой записи наряда в БД. {esppOrder.Number}, {esppOrder.WorkGroup}, {esppOrder.ShortName}"); else logger.LogInformation($"Добавлен наряд в БД: {esppOrder.Number}, {esppOrder.ShortName}"); } } }