Files
parr_api/PARR.EsppOrderManager/EsppOrderManager.cs

109 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
using PARR.EsppOrderManager.Settings;
namespace PARR.EsppOrderManager
{
internal class EsppOrderManager : IEsppOrderManager
{
private readonly MqSettings mqSettings;
private readonly IMqService mqService;
private readonly ILogger<EsppOrderManager> logger;
private readonly ITransformService transformService;
private readonly IOrderService orderService;
public EsppOrderManager(
MqSettings mqSettings,
IMqService mqService,
ILogger<EsppOrderManager> logger,
ITransformService transformService,
IOrderService orderService
)
{
this.mqSettings = mqSettings;
this.mqService = mqService;
this.logger = logger;
this.transformService = transformService;
this.orderService = orderService;
}
public async void Start()
{
// логика работы описана в документации
//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\"}");
}
public void Stop()
{
mqService.Dispose();
}
private async Task ManageOrder(string msg)
{
logger.LogDebug($"Получили сообщение: {msg}");
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}");
string msgAgent = "Работы выполнены средствами автоматизации. \r\n" +
"Журнал работы: \r\n" +
$"{string.Join("\r\n", agentHistory)}";
string msgAgentEmpty = "Работы должны были выполниться средствами автоматизации. " +
"Но от средств автоматизации не поступило сообщений. " +
"Работы не выполнены.";
return agentHistory.Any() ? msgAgent : msgAgentEmpty;
}
}
}