feat(esppOrderManager): отладка
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user