feat(esppOrderManager): отладка

This commit is contained in:
Mikhail Trubnikov
2023-11-20 16:59:58 +10:00
parent 113a801060
commit 7f3a2441c9
6 changed files with 168 additions and 62 deletions

View File

@@ -1,12 +1,11 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.DAL.Contracts;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
using PARR.EsppApi;
using PARR.EsppApi.Models.Query;
using PARR.EsppOrderManager.Services;
using PARR.EsppOrderManager.Settings;
@@ -18,37 +17,37 @@ namespace PARR.EsppOrderManager
private readonly IMqService mqService;
private readonly ILogger<EsppOrderManager> logger;
private readonly ITransformService transformService;
private readonly IOrderService orderService;
private readonly IEsppOrderService esppOrderService;
private readonly IServiceProvider serviceProvider;
public EsppOrderManager(
MqSettings mqSettings,
IMqService mqService,
ILogger<EsppOrderManager> logger,
ITransformService transformService,
IOrderService orderService,
IEsppOrderService esppOrderService
IEsppOrderService esppOrderService,
IServiceProvider serviceProvider
)
{
this.mqSettings = mqSettings;
this.mqService = mqService;
this.logger = logger;
this.transformService = transformService;
this.orderService = orderService;
this.esppOrderService = esppOrderService;
this.serviceProvider = serviceProvider;
}
public async void Start()
{
// логика работы описана в документации
//var isConnected = mqService.InitConsumer(mqSettings, ManageOrder);
//var isConnected = mqService.InitConsumer(mqSettings, ManageOrderAsync);
//if (!isConnected)
// throw new Exception("Ошибка при подключении к RabbitMq");
//test, and remove async in method name
await ManageOrder("{\"OrderId\":\"77eeccfb-4ca0-443e-8cc7-f6aa9dc774b7\"}");
await ManageOrderAsync("{\"OrderId\":\"77eeccfb-4ca0-443e-8cc7-f6aa9dc774b7\"}");
}
public void Stop()
@@ -57,51 +56,53 @@ namespace PARR.EsppOrderManager
}
private async Task ManageOrder(string msg)
private async Task ManageOrderAsync(string msg)
{
logger.LogDebug($"Получили сообщение: {msg}");
var obj = transformService.GetModelFromJson<OrderManageMq>(msg);
if (obj == null)
var objFromQuery = transformService.GetModelFromJson<OrderManageMq>(msg);
if (objFromQuery == null)
return;
using (var scope = serviceProvider.CreateScope())
{
var orderService = scope.ServiceProvider.GetService<IOrderService>();
if (orderService == null)
throw new Exception("Не смог получить серивс IOrderService, scope.ServiceProvider.GetService<IOrderService>()");
await ManageOrderToScopeAsync(orderService, objFromQuery);
}
logger.LogDebug($"Закончил работу с сообщением: {msg}");
}
private async Task ManageOrderToScopeAsync(IOrderService orderService, OrderManageMq objFromQuery)
{
var order = await orderService.Get()
.Include(t => t.AgentHistories).ThenInclude(t => t.AgentHistoryLevel)
.Include(t => t.OrderStatus)
.Include(t => t.NextStatus)
.Include(t => t.Template).ThenInclude(t => t!.ApplicationsInWork).ThenInclude(t => t!.Work).ThenInclude(t => t!.Tnk)
.FirstOrDefaultAsync(t => t.Id == obj.OrderId);
.Include(t => t.AgentHistories).ThenInclude(t => t.AgentHistoryLevel)
.Include(t => t.OrderStatus)
.Include(t => t.NextStatus)
.Include(t => t.Template).ThenInclude(t => t!.ApplicationsInWork).ThenInclude(t => t!.Work).ThenInclude(t => t!.Tnk)
.FirstOrDefaultAsync(t => t.Id == objFromQuery.OrderId);
if (order == null)
{
logger.LogError($"Не найден наряд с OrderId: {obj.OrderId}");
if (!IsValidOrder(ref order, ref objFromQuery))
return;
}
if (order.StatusCode == order.NextStatusCode)
{
logger.LogInformation($"У наряда {order.Id}, {order.Number} статусы равны, ничего не делаем. Статус: {order.OrderStatus!.Description}");
return;
}
logger.LogDebug($"Найден наряд в БД: {order!.Number}");
if (!order.NextStatusCode.HasValue)
{
logger.LogWarning($"У наряда {order.Id}, {order.Number} не установлено поле {nameof(order.NextStatusCode)}");
return;
}
var resultMsg = GenerateResultMsg(order);
var workDuration = CalcWorkDuration(order);
var resultMsg = GenerateResultMsg(order!);
var workDuration = CalcWorkDuration(order!);
// Изменям статус наряда в ЕСПП
var result = await esppOrderService.ChangeOrderToEsppAsync(order, resultMsg, workDuration);
var result = await esppOrderService.ChangeOrderToEsppAsync(order!, resultMsg, workDuration);
if (result)
{
logger.LogInformation($"Статусы наряда {order.Number} в ЕСПП обновлены. Установлен статус: {order.NextStatus!.Description}");
logger.LogInformation($"Статусы наряда {order!.Number} в ЕСПП обновлены. Установлен статус: {order.NextStatus!.Description}");
//обновляем статусы в БД
order.StatusCode = order.NextStatusCode.Value;
order.StatusCode = order.NextStatusCode!.Value;
if (!await orderService.CommitAsync())
{
logger.LogError($"Ошибка при обновлении статуса в БД у наряда: {order.Number}. Не установлен статус {order.NextStatus!.Description}");
@@ -109,9 +110,31 @@ namespace PARR.EsppOrderManager
}
else
logger.LogError($"Ошибка при обновлении статуса наряда {order.Number}. Статус не изменен.");
logger.LogError($"Ошибка при обновлении статуса наряда {order!.Number}. Статус не изменен.");
}
logger.LogDebug($"Закончил работу с сообщением: {msg}");
private bool IsValidOrder(ref Order? order, ref OrderManageMq query)
{
if (order == null)
{
logger.LogError($"Не найден наряд с OrderId: {query.OrderId}");
return false;
}
if (order.StatusCode == order.NextStatusCode)
{
logger.LogInformation($"У наряда {order.Id}, {order.Number} статусы равны, ничего не делаем. Статус: {order.OrderStatus!.Description}");
return false;
}
if (!order.NextStatusCode.HasValue)
{
logger.LogWarning($"У наряда {order.Id}, {order.Number} не установлено поле {nameof(order.NextStatusCode)}");
return false;
}
return true;
}