2023-11-17 16:03:36 +10:00
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
|
using PARR.BLL.Domain.Mq;
|
2023-10-24 11:29:55 +10:00
|
|
|
|
using PARR.BLL.Services.Interfaces;
|
2023-11-17 16:03:36 +10:00
|
|
|
|
using PARR.DAL.Models;
|
|
|
|
|
|
using PARR.DAL.Services.Interfaces;
|
2023-10-24 11:29:55 +10:00
|
|
|
|
using PARR.EsppOrderManager.Settings;
|
|
|
|
|
|
|
|
|
|
|
|
namespace PARR.EsppOrderManager
|
|
|
|
|
|
{
|
|
|
|
|
|
internal class EsppOrderManager : IEsppOrderManager
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly MqSettings mqSettings;
|
|
|
|
|
|
private readonly IMqService mqService;
|
|
|
|
|
|
private readonly ILogger<EsppOrderManager> logger;
|
2023-11-17 16:03:36 +10:00
|
|
|
|
private readonly ITransformService transformService;
|
|
|
|
|
|
private readonly IOrderService orderService;
|
2023-10-24 11:29:55 +10:00
|
|
|
|
|
|
|
|
|
|
public EsppOrderManager(
|
|
|
|
|
|
MqSettings mqSettings,
|
|
|
|
|
|
IMqService mqService,
|
2023-11-17 16:03:36 +10:00
|
|
|
|
ILogger<EsppOrderManager> logger,
|
|
|
|
|
|
ITransformService transformService,
|
|
|
|
|
|
IOrderService orderService
|
2023-10-24 11:29:55 +10:00
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.mqSettings = mqSettings;
|
|
|
|
|
|
this.mqService = mqService;
|
|
|
|
|
|
this.logger = logger;
|
2023-11-17 16:03:36 +10:00
|
|
|
|
this.transformService = transformService;
|
|
|
|
|
|
this.orderService = orderService;
|
2023-10-24 11:29:55 +10:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-17 16:03:36 +10:00
|
|
|
|
public async void Start()
|
2023-10-24 11:29:55 +10:00
|
|
|
|
{
|
2023-11-17 16:03:36 +10:00
|
|
|
|
// логика работы описана в документации
|
2023-10-24 11:29:55 +10:00
|
|
|
|
|
2023-11-17 16:03:36 +10:00
|
|
|
|
//var isConnected = mqService.InitConsumer(mqSettings, ManageOrder);
|
|
|
|
|
|
|
|
|
|
|
|
//if (!isConnected)
|
|
|
|
|
|
// throw new Exception("Ошибка при подключении к RabbitMq");
|
|
|
|
|
|
|
|
|
|
|
|
//test, and remove async in method name
|
|
|
|
|
|
await ManageOrder("{\"OrderId\":\"77eeccfb-4ca0-443e-8cc7-f6aa9dc774b7\"}");
|
2023-10-24 11:29:55 +10:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Stop()
|
|
|
|
|
|
{
|
|
|
|
|
|
mqService.Dispose();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private async Task ManageOrder(string msg)
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.LogDebug($"Получили сообщение: {msg}");
|
|
|
|
|
|
|
2023-11-17 16:03:36 +10:00
|
|
|
|
var obj = transformService.GetModelFromJson<OrderManageMq>(msg);
|
|
|
|
|
|
if (obj == null)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
var order = await orderService.Get()
|
|
|
|
|
|
.Include(t => t.AgentHistories).ThenInclude(t => t.AgentHistoryLevel)
|
|
|
|
|
|
.Include(t => t.OrderStatus)
|
|
|
|
|
|
.Include(t => t.NextStatus)
|
|
|
|
|
|
.FirstOrDefaultAsync(t => t.Id == obj.OrderId);
|
|
|
|
|
|
|
|
|
|
|
|
if (order == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.LogError($"Не найден наряд с OrderId: {obj.OrderId}");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (order.StatusCode == order.NextStatusCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
logger.LogInformation($"У наряда {order.Id}, {order.Number} статусы равны, ничего не делаем. Статус: {order.OrderStatus!.Description}");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var resultMsg = GenerateResultMsg(order);
|
|
|
|
|
|
|
|
|
|
|
|
//todo:!!!
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Генерирует текс поля Решение, в зависимости от статуса наряда и от истории Агента
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="order"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
private string GenerateResultMsg(Order order)
|
|
|
|
|
|
{
|
|
|
|
|
|
var agentHistory = order.AgentHistories
|
|
|
|
|
|
.OrderBy(t => t.DateCreated)
|
|
|
|
|
|
.Select(t => $"{t.DateCreated} :: {t.AgentHistoryLevel?.Name} :: {t.Message}");
|
2023-10-24 11:29:55 +10:00
|
|
|
|
|
2023-11-17 16:03:36 +10:00
|
|
|
|
string msgAgent = "Работы выполнены средствами автоматизации. \r\n" +
|
|
|
|
|
|
"Журнал работы: \r\n" +
|
|
|
|
|
|
$"{string.Join("\r\n", agentHistory)}";
|
|
|
|
|
|
|
|
|
|
|
|
string msgAgentEmpty = "Работы должны были выполниться средствами автоматизации. " +
|
|
|
|
|
|
"Но от средств автоматизации не поступило сообщений. " +
|
|
|
|
|
|
"Работы не выполнены.";
|
|
|
|
|
|
|
|
|
|
|
|
return agentHistory.Any() ? msgAgent : msgAgentEmpty;
|
2023-10-24 11:29:55 +10:00
|
|
|
|
}
|
2023-11-17 16:03:36 +10:00
|
|
|
|
|
2023-10-24 11:29:55 +10:00
|
|
|
|
}
|
|
|
|
|
|
}
|