feat(all): в таблицу Order добавлено поле ExpirationDate, обновлены сервисы для записи этого поля. Начало логики закрытия нарядов в ЕСПП.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user