Files
parr_api/PARR.EsppOrderManager/Services/EsppOrderService.cs

89 lines
3.2 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.Extensions.Logging;
using PARR.DAL.Models;
using PARR.EsppApi.Models.Query;
using PARR.EsppApi;
using PARR.Constants;
namespace PARR.EsppOrderManager.Services
{
internal class EsppOrderService : IEsppOrderService
{
private readonly ILogger<EsppOrderService> logger;
private readonly IEsppApiService esppApiService;
public EsppOrderService(
ILogger<EsppOrderService> logger,
IEsppApiService esppApiService
)
{
this.logger = logger;
this.esppApiService = esppApiService;
}
public async Task<bool> ChangeOrderToEsppAsync(Order order, string resultMsg, TimeSpan duration)
{
// Наряд нужно провести по всем статусам
// Найти наряд, посмотреть его текущий статус (вдруг статус в ЕСПП был изменен, а в бд нет)
// Сначала взять в работу
// Списать ТНК
// Выполнить
var esppOrderResult = await esppApiService.FindOrderByRecordIdAsync(order.Number);
if (!esppOrderResult.IsSuccess || esppOrderResult.Data == null)
{
logger.LogError($"Не найден наряд в ЕСПП: {order.Number}");
return false;
}
// проверяем, совпадает ли NextStatus со статусом в ЕСПП
// Если совпадают, значит в еспп поменяли, и не изменили в БД раньше (может ошибка была, может руками кто сделал)
// так что говорим, как будто бы все ок
if (IsEquelEsppStatusAndNextStatus(order.NextStatusCode!.Value, esppOrderResult.Data.StatusEnum))
{
logger.LogInformation($"Для наряда {order.Number}, статус в ЕСПП совпадает с {nameof(order.NextStatusCode)} = {order.NextStatus!.Description}. " +
$"Статус в ЕСПП менять не нужно.");
return true;
}
//todo:
//var resultInWork = await esppApiService.SetStatusInWorkAsync(order.Number, resultMsg);
//if (!resultInWork.IsSuccess)
//{
// return false;
//}
//var tnk = new AddMtnkQuery
//{
// JobOperation = order!.Template!.ApplicationsInWork!.Work!.Tnk!.Name,
// RecordId = order.Number,
// Time = duration.ToString()
//};
//var resultTnk = await esppApiService.AddMTnkAsync(tnk);
//var resultIsDone = await esppApiService.SetStatusIsDoneAsync(order.Number, resultMsg);
return false;
}
/// <summary>
/// Совпадает ли NextStatus и Еспп статусом
/// </summary>
/// <returns></returns>
private bool IsEquelEsppStatusAndNextStatus(int nextStatusCode, OrderStatusEnum esppStatus)
{
return nextStatusCode == (int)esppStatus;
}
}
}