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 logger; private readonly IEsppApiService esppApiService; public EsppOrderService( ILogger logger, IEsppApiService esppApiService ) { this.logger = logger; this.esppApiService = esppApiService; } public async Task 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; } /// /// Совпадает ли NextStatus и Еспп статусом /// /// private bool IsEquelEsppStatusAndNextStatus(int nextStatusCode, OrderStatusEnum esppStatus) { return nextStatusCode == (int)esppStatus; } } }