OnlineSalesAutoCrop/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/BackgroupJobs/BackgroundJobService.cs

76 lines
3.1 KiB
C#

using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using OnlineSalesAutoCrop.CoreAPI.Models;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.MobileApp;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.BackgroupJobs;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Integrations;
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.MobileApp;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineSalesAutoCrop.CoreAPI.Services.Services.BackgroupJobs;
public class BackgroundJobService : IBackgroundJobService
{
private readonly IIntegrationHttpService _httpService;
private readonly IOrderService _orderService;
private readonly ILogger<BackgroundJobService> _logger;
public BackgroundJobService(IIntegrationHttpService httpService, IOrderService orderService, ILogger<BackgroundJobService> logger)
{
_httpService = httpService;
_orderService = orderService;
_logger = logger;
}
public async Task ExecuteSendingOrderAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("SendingOrder Job successfully run at: " + DateTime.Now.ToString());
try
{
var pendingOrderIds = await _orderService.GetAvailableOrderIdsForSAPAsync(SAPOrderStatusEnum.Pending);
foreach (var item in pendingOrderIds)
{
var orderDetails = await _orderService.GetOrderDetailsForSapByIdAsync(item);
_logger.LogInformation("SendingOrder for Order No with: " + orderDetails.PurchaseOrderByCustomer);
var httpResponse = await _httpService.SendSAPOrdersAsync(orderDetails);
if(string.IsNullOrEmpty( httpResponse.Item2))
{
await _orderService.UpdateSendingSapDetailsAsync(new UpdateSapDetailsRequest
{
OrderId = item,
SapOrderNo = httpResponse.Item2,
SentAt = DateTime.Now,
Status = SAPOrderStatusEnum.Error,
RetryCount = 1,
LastError = httpResponse.Item1
});
}
else
{
await _orderService.UpdateSendingSapDetailsAsync(new UpdateSapDetailsRequest
{
OrderId = item,
SapOrderNo = httpResponse.Item2,
SentAt = DateTime.Now,
Status = SAPOrderStatusEnum.Sent,
RetryCount = 1,
ReturnMessage = httpResponse.Item1
});
}
_logger.LogInformation("Order Successfully sent to SAP,with Order No: " + orderDetails.PurchaseOrderByCustomer);
}
}
catch(Exception ex)
{
_logger.LogError("Exception Occur in ExecuteSendingOrder "+ ex.Message);
throw;
}
_logger.LogInformation("SendingOrder Job successfully finished at: " + DateTime.Now.ToString());
}
}