feat(all): в таблицу Order добавлено поле ExpirationDate, обновлены сервисы для записи этого поля. Начало логики закрытия нарядов в ЕСПП.

This commit is contained in:
Mikhail Trubnikov
2023-11-17 16:03:36 +10:00
parent e699788844
commit ea91eb6abc
14 changed files with 2791 additions and 29 deletions

View File

@@ -1,5 +1,9 @@
using Microsoft.Extensions.Logging;
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
@@ -9,24 +13,35 @@ namespace PARR.EsppOrderManager
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
ILogger<EsppOrderManager> logger,
ITransformService transformService,
IOrderService orderService
)
{
this.mqSettings = mqSettings;
this.mqService = mqService;
this.logger = logger;
this.transformService = transformService;
this.orderService = orderService;
}
public void Start()
public async void Start()
{
var isConnected = mqService.InitConsumer(mqSettings, ManageOrder);
// логика работы описана в документации
if (!isConnected)
throw new Exception("Ошибка при подключении к RabbitMq");
//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()
@@ -39,9 +54,55 @@ namespace PARR.EsppOrderManager
{
logger.LogDebug($"Получили сообщение: {msg}");
//тут по идее берет в работу / выполняет
var obj = transformService.GetModelFromJson<OrderManageMq>(msg);
if (obj == null)
return;
//todo:
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;
}
}
}