add hangfire for sending order to sap
This commit is contained in:
parent
23f07386ba
commit
4f89ed32a7
|
|
@ -754,4 +754,11 @@ namespace OnlineSalesAutoCrop.CoreAPI.Models
|
||||||
[Description("Sent To SAP")]
|
[Description("Sent To SAP")]
|
||||||
SentToSAP = 7
|
SentToSAP = 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum SAPOrderStatusEnum : short
|
||||||
|
{
|
||||||
|
Pending = 0,
|
||||||
|
Sent = 1,
|
||||||
|
Error = 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -130,19 +130,20 @@ namespace OnlineSalesAutoCrop.CoreAPI.Models.Global
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Database connection Hangfire
|
/// Database connection Hangfire
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private string _hangfireDb;
|
public string HangfireDb { get; set; }
|
||||||
public string HangfireDb
|
//private string _hangfireDb;
|
||||||
{
|
//public string HangfireDb
|
||||||
get
|
//{
|
||||||
{
|
// get
|
||||||
if (string.IsNullOrEmpty(_hangfireDb) || string.IsNullOrEmpty(PwdSecretKey))
|
// {
|
||||||
return string.Empty;
|
// if (string.IsNullOrEmpty(_hangfireDb) || string.IsNullOrEmpty(PwdSecretKey))
|
||||||
|
// return string.Empty;
|
||||||
|
|
||||||
string secretKey = GlobalFunctions.ConvertFromBase64String(PwdSecretKey);
|
// string secretKey = GlobalFunctions.ConvertFromBase64String(PwdSecretKey);
|
||||||
return Ease.NetCore.Utility.Global.CipherFunctions.DecryptByAES(privateKey: secretKey, publicKey: secretKey, data: _hangfireDb, input: 2);
|
// return Ease.NetCore.Utility.Global.CipherFunctions.DecryptByAES(privateKey: secretKey, publicKey: secretKey, data: _hangfireDb, input: 2);
|
||||||
}
|
// }
|
||||||
set { _hangfireDb = value; }
|
// set { _hangfireDb = value; }
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,3 +78,13 @@ public class GetOrderSummaryRequest : PagedRequest
|
||||||
public DateTime? EndDate { get; set; }
|
public DateTime? EndDate { get; set; }
|
||||||
public OrderStatusEnum? OrderStatus { get; set; }
|
public OrderStatusEnum? OrderStatus { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class UpdateSapDetailsRequest
|
||||||
|
{
|
||||||
|
public int OrderId { get; set; }
|
||||||
|
public SAPOrderStatusEnum Status { get; set; }
|
||||||
|
public DateTime SentAt { get; set; }
|
||||||
|
public int RetryCount { get; set; }
|
||||||
|
public string LastError { get; set; }
|
||||||
|
public string ReturnMessage { get; set; }
|
||||||
|
}
|
||||||
|
|
@ -120,3 +120,30 @@ public sealed class FreeGoodsRuleDto
|
||||||
public string UnitOfMeasure { get; set; } = string.Empty;
|
public string UnitOfMeasure { get; set; } = string.Empty;
|
||||||
public string FocUnitOfMeasure { get; set; } = string.Empty;
|
public string FocUnitOfMeasure { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class GetOrderForSAPResponse
|
||||||
|
{
|
||||||
|
public GetOrderForSAPResponse()
|
||||||
|
{
|
||||||
|
to_Item = new List<GetOrderItemForSAPResponse>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SalesOrderType { get; set; }
|
||||||
|
public string SalesOrganization { get; set; }
|
||||||
|
public string DistributionChannel { get; set; }
|
||||||
|
public string OrganizationDivision { get; set; }
|
||||||
|
public string SoldToParty { get; set; }
|
||||||
|
public string PurchaseOrderByCustomer { get; set; }
|
||||||
|
public string CustomerPurchaseOrderDate { get; set; }
|
||||||
|
public string PurchaseOrderByShipToParty { get; set; }
|
||||||
|
public string CustomerPaymentTerms { get; set; }
|
||||||
|
public string? CustomerGroup { get; set; }
|
||||||
|
public string? CustomerPriceGroup { get; set; }
|
||||||
|
public IList<GetOrderItemForSAPResponse> to_Item { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetOrderItemForSAPResponse
|
||||||
|
{
|
||||||
|
public string Material { get; set; }
|
||||||
|
public string RequestedQuantity { get; set; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
using Hangfire;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace OnlineSalesAutoCrop.CoreAPI.Services.Contracts.BackgroupJobs;
|
||||||
|
|
||||||
|
public interface IBackgroundJobService
|
||||||
|
{
|
||||||
|
[Queue("sap_order_send")]
|
||||||
|
[DisableConcurrentExecution(timeoutInSeconds: 40 * 60)]
|
||||||
|
Task ExecuteSendingOrderAsync(CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Integrations;
|
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Integrations;
|
||||||
|
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.MobileApp;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
@ -14,5 +15,7 @@ public interface IIntegrationHttpService
|
||||||
Task<IList<IntegrationMaterialStockHttpResponse>> GetMaterialStockAsync(string plantCode,
|
Task<IList<IntegrationMaterialStockHttpResponse>> GetMaterialStockAsync(string plantCode,
|
||||||
CancellationToken cancellationToken = default);
|
CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
|
Task<string> SendSAPOrdersAsync(GetOrderForSAPResponse request,
|
||||||
|
CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
|
using OnlineSalesAutoCrop.CoreAPI.Models;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Requests;
|
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.MobileApp;
|
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.MobileApp;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
|
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.MobileApp;
|
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.MobileApp;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace OnlineSalesAutoCrop.CoreAPI.Services.Contracts.MobileApp;
|
namespace OnlineSalesAutoCrop.CoreAPI.Services.Contracts.MobileApp;
|
||||||
|
|
@ -11,4 +12,8 @@ public interface IOrderService
|
||||||
{
|
{
|
||||||
Task<SaveOrderResponse> SaveOrderAsync(SaveOrderRequest request, int userId);
|
Task<SaveOrderResponse> SaveOrderAsync(SaveOrderRequest request, int userId);
|
||||||
Task<PagedResult<GetSalesOrderResponse>> GetSalesOrdersSummary(GetOrderSummaryRequest request, int userId);
|
Task<PagedResult<GetSalesOrderResponse>> GetSalesOrdersSummary(GetOrderSummaryRequest request, int userId);
|
||||||
|
Task<IList<int>> GetAvailableOrderIdsForSAPAsync(SAPOrderStatusEnum orderStaus, CancellationToken cancellationToken = default);
|
||||||
|
Task<GetOrderForSAPResponse?> GetOrderDetailsForSapByIdAsync(int orderId, CancellationToken cancellationToken = default);
|
||||||
|
Task<bool> UpdateSendingSapDetailsAsync(UpdateSapDetailsRequest request, CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Ease.NetCore" Version="2.1.4" />
|
<PackageReference Include="Ease.NetCore" Version="2.1.4" />
|
||||||
|
<PackageReference Include="Hangfire.Core" Version="1.8.24" />
|
||||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.1" />
|
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.8" />
|
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.8" />
|
||||||
<PackageReference Include="System.Data.SqlClient" Version="4.9.1" />
|
<PackageReference Include="System.Data.SqlClient" Version="4.9.1" />
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
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);
|
||||||
|
|
||||||
|
string httpResponse = await _httpService.SendSAPOrdersAsync(orderDetails);
|
||||||
|
await _orderService.UpdateSendingSapDetailsAsync(new UpdateSapDetailsRequest
|
||||||
|
{
|
||||||
|
OrderId = item,
|
||||||
|
SentAt = DateTime.Now,
|
||||||
|
RetryCount =1,
|
||||||
|
ReturnMessage = httpResponse
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError("Exception Occur in ExecuteSendingOrder "+ ex.Message);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("SendingOrder Job successfully finished at: " + DateTime.Now.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Integrations;
|
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Integrations;
|
||||||
|
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.MobileApp;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Integrations;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Integrations;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
@ -71,4 +72,30 @@ public class IntegrationHttpService : IIntegrationHttpService
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<string> SendSAPOrdersAsync(GetOrderForSAPResponse request, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var requestUri = "http/sales_order";
|
||||||
|
|
||||||
|
var response = await _httpClient.PostAsJsonAsync(requestUri,request,cancellationToken);
|
||||||
|
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var body = await response.Content.ReadAsStringAsync(cancellationToken);
|
||||||
|
_logger.LogError("Save Orders call failed: {StatusCode} — {Body}", response.StatusCode, body);
|
||||||
|
response.EnsureSuccessStatusCode();
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
var payload = await response.Content.ReadFromJsonAsync<SapODataResponse<IntegrationMaterialStockHttpResponse>>(cancellationToken: cancellationToken);
|
||||||
|
|
||||||
|
return string.Empty ;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
using Ease.NetCore.DataAccess;
|
using Ease.NetCore.DataAccess;
|
||||||
using Ease.NetCore.DataAccess.SQL;
|
using Ease.NetCore.DataAccess.SQL;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.Data.SqlClient;
|
using Microsoft.Data.SqlClient;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models;
|
using OnlineSalesAutoCrop.CoreAPI.Models;
|
||||||
|
|
@ -14,7 +13,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Security.Claims;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace OnlineSalesAutoCrop.CoreAPI.Services.Services.MobileApp;
|
namespace OnlineSalesAutoCrop.CoreAPI.Services.Services.MobileApp;
|
||||||
|
|
@ -808,4 +807,156 @@ public class OrderService : IOrderService
|
||||||
return response;
|
return response;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<IList<int>> GetAvailableOrderIdsForSAPAsync(SAPOrderStatusEnum orderStaus, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
List<int> response = new List<int>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SqlParameter[] p =
|
||||||
|
[
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@OrderStatus", pType: SqlDbType.Int, pValue: (int?)orderStaus ),
|
||||||
|
];
|
||||||
|
|
||||||
|
using (IDataReader dr = await tc.ExecuteReaderSpAsync("dbo.GetAvailableOrderIdsByStatus", parameterValues: p))
|
||||||
|
{
|
||||||
|
while (dr.Read())
|
||||||
|
{
|
||||||
|
response.Add(dr.GetInt32(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
dr.Close();
|
||||||
|
}
|
||||||
|
tc.End();
|
||||||
|
}
|
||||||
|
catch (Exception ie)
|
||||||
|
{
|
||||||
|
tc?.HandleError();
|
||||||
|
|
||||||
|
throw DBCustomError.GenerateCustomError(ie);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<GetOrderForSAPResponse?> GetOrderDetailsForSapByIdAsync(int orderId, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
GetOrderForSAPResponse response = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SqlParameter[] p =
|
||||||
|
[
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@OrderId", pType: SqlDbType.Int, pValue: orderId ),
|
||||||
|
];
|
||||||
|
|
||||||
|
using (IDataReader dr = await tc.ExecuteReaderSpAsync("dbo.GetOrderDetailsById", parameterValues: p))
|
||||||
|
{
|
||||||
|
while (dr.Read())
|
||||||
|
{
|
||||||
|
response = new GetOrderForSAPResponse()
|
||||||
|
{
|
||||||
|
SalesOrderType = dr.GetString(0),
|
||||||
|
SalesOrganization = dr.GetString(1),
|
||||||
|
DistributionChannel = dr.GetString(2),
|
||||||
|
OrganizationDivision = dr.GetString(3),
|
||||||
|
SoldToParty = dr.GetString(4),
|
||||||
|
PurchaseOrderByCustomer = dr.GetString(5),
|
||||||
|
CustomerPurchaseOrderDate = ConvertOrderDateIntoMilisec( dr.GetDateTime(6)),
|
||||||
|
PurchaseOrderByShipToParty =dr.IsDBNull(7) ? null : dr.GetString(7),
|
||||||
|
CustomerPaymentTerms = dr.IsDBNull(8) ? null : dr.GetString(8),
|
||||||
|
CustomerGroup = dr.GetString(9),
|
||||||
|
CustomerPriceGroup = dr.GetString(10)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response is not null && dr.NextResult())
|
||||||
|
{
|
||||||
|
while (dr.Read())
|
||||||
|
{
|
||||||
|
response.to_Item.Add(new GetOrderItemForSAPResponse
|
||||||
|
{
|
||||||
|
Material = dr.GetString(0),
|
||||||
|
RequestedQuantity =Convert.ToString( dr.IsDBNull(1)? 0 : dr.GetDecimal(1))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dr.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
tc.End();
|
||||||
|
}
|
||||||
|
catch (Exception ie)
|
||||||
|
{
|
||||||
|
tc?.HandleError();
|
||||||
|
|
||||||
|
throw DBCustomError.GenerateCustomError(ie);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ConvertOrderDateIntoMilisec(DateTime orderDate)
|
||||||
|
{
|
||||||
|
long milliseconds = new DateTimeOffset(orderDate).ToUnixTimeMilliseconds();
|
||||||
|
string sapDate = $"/Date({milliseconds})/";
|
||||||
|
return sapDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> UpdateSendingSapDetailsAsync(UpdateSapDetailsRequest request, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
bool response = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode, true);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SqlParameter[] p =
|
||||||
|
[
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@OrderId", pType: SqlDbType.Int, pValue: request.OrderId ),
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@Status", pType: SqlDbType.Int, pValue: request.Status ),
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@SentAt", pType: SqlDbType.DateTime, pValue: DateTime.Now ),
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@RetryCount", pType: SqlDbType.Int, pValue: request.RetryCount ),
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@LastError", pType: SqlDbType.Int, pValue: request.LastError ),
|
||||||
|
SqlHelperExtension.CreateInParam(pName: "@ReturnMessage", pType: SqlDbType.Int, pValue: request.ReturnMessage ),
|
||||||
|
];
|
||||||
|
|
||||||
|
await tc.ExecuteNonQuerySpAsync("dbo.UpdateSendingSapDetails", parameterValues: p);
|
||||||
|
|
||||||
|
tc.End();
|
||||||
|
}
|
||||||
|
catch (Exception ie)
|
||||||
|
{
|
||||||
|
tc?.HandleError();
|
||||||
|
|
||||||
|
throw DBCustomError.GenerateCustomError(ie);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Hangfire;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Auth;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Auth;
|
||||||
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.BackgroupJobs;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Integrations;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Integrations;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.MobileApp;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.MobileApp;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Setups;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Setups;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Systems;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Auth;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Auth;
|
||||||
|
using OnlineSalesAutoCrop.CoreAPI.Services.Services.BackgroupJobs;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Integrations;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Integrations;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Services.MobileApp;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Services.MobileApp;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Setups;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Setups;
|
||||||
|
|
@ -33,6 +36,7 @@ namespace OnlineSalesAutoCrop.CoreAPI.Configuration.DI
|
||||||
services.AddTransient<IRefreshTokenService, RefreshTokenService>();
|
services.AddTransient<IRefreshTokenService, RefreshTokenService>();
|
||||||
services.AddScoped<IIntegrationService, IntegrationService>();
|
services.AddScoped<IIntegrationService, IntegrationService>();
|
||||||
services.AddScoped<IMobileMasterDataService, MobileMasterDataService>();
|
services.AddScoped<IMobileMasterDataService, MobileMasterDataService>();
|
||||||
|
services.AddScoped<IBackgroundJobService, BackgroundJobService>();
|
||||||
services.AddScoped<IOrderService, OrderService>();
|
services.AddScoped<IOrderService, OrderService>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,8 @@
|
||||||
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="10.0.0" />
|
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="10.0.0" />
|
||||||
<PackageReference Include="Ease.NetCore" Version="2.1.4" />
|
<PackageReference Include="Ease.NetCore" Version="2.1.4" />
|
||||||
<PackageReference Include="Google.Cloud.Speech.V1" Version="3.9.0" />
|
<PackageReference Include="Google.Cloud.Speech.V1" Version="3.9.0" />
|
||||||
<PackageReference Include="Hangfire" Version="1.8.23" />
|
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.24" />
|
||||||
|
<PackageReference Include="Hangfire.SqlServer" Version="1.8.24" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.8" />
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.8" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="10.0.8" />
|
<PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="10.0.8" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.8" />
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.8" />
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ using Microsoft.AspNetCore.CookiePolicy;
|
||||||
using Microsoft.AspNetCore.Diagnostics;
|
using Microsoft.AspNetCore.Diagnostics;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.AspNetCore.HttpOverrides;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
@ -22,6 +23,7 @@ using OnlineSalesAutoCrop.CoreAPI.Configurations;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models;
|
using OnlineSalesAutoCrop.CoreAPI.Models;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
|
using OnlineSalesAutoCrop.CoreAPI.Models.Global;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
|
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
|
||||||
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.BackgroupJobs;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Integrations;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Contracts.Integrations;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Integrations;
|
using OnlineSalesAutoCrop.CoreAPI.Services.Services.Integrations;
|
||||||
using OnlineSalesAutoCrop.CoreAPI.SignalRHub;
|
using OnlineSalesAutoCrop.CoreAPI.SignalRHub;
|
||||||
|
|
@ -30,14 +32,14 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.RateLimiting;
|
using System.Threading.RateLimiting;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.HttpOverrides;
|
|
||||||
using System.Net.Http.Headers;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Net;
|
|
||||||
|
|
||||||
namespace OnlineSalesAutoCrop.CoreAPI
|
namespace OnlineSalesAutoCrop.CoreAPI
|
||||||
{
|
{
|
||||||
|
|
@ -312,6 +314,10 @@ namespace OnlineSalesAutoCrop.CoreAPI
|
||||||
services.AddHangfire(config =>
|
services.AddHangfire(config =>
|
||||||
{
|
{
|
||||||
config.UseFilter(new TimeRestrictionServerFilter(startHour: 1, endHour: 7));
|
config.UseFilter(new TimeRestrictionServerFilter(startHour: 1, endHour: 7));
|
||||||
|
config.SetDataCompatibilityLevel(CompatibilityLevel.Version_180);
|
||||||
|
config.UseSimpleAssemblyNameTypeSerializer();
|
||||||
|
config.UseRecommendedSerializerSettings();
|
||||||
|
|
||||||
config.UseSqlServerStorage(_appSettings.HangfireDb, new SqlServerStorageOptions
|
config.UseSqlServerStorage(_appSettings.HangfireDb, new SqlServerStorageOptions
|
||||||
{
|
{
|
||||||
DisableGlobalLocks = true,
|
DisableGlobalLocks = true,
|
||||||
|
|
@ -321,9 +327,13 @@ namespace OnlineSalesAutoCrop.CoreAPI
|
||||||
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5)
|
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
services.AddHangfireServer();
|
services.AddHangfireServer(options =>
|
||||||
|
{
|
||||||
|
options.Queues = new[] { "sap_order_send", "default" }; // merge with any queues you already have
|
||||||
|
}); ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region SWAGGER
|
#region SWAGGER
|
||||||
|
|
@ -529,6 +539,11 @@ namespace OnlineSalesAutoCrop.CoreAPI
|
||||||
app.UseHangfireDashboard();
|
app.UseHangfireDashboard();
|
||||||
|
|
||||||
RecurringJobOptions options = new() { TimeZone = TimeZoneInfo.Local, MisfireHandling = MisfireHandlingMode.Relaxed };
|
RecurringJobOptions options = new() { TimeZone = TimeZoneInfo.Local, MisfireHandling = MisfireHandlingMode.Relaxed };
|
||||||
|
|
||||||
|
RecurringJob.AddOrUpdate<IBackgroundJobService>(
|
||||||
|
"send-sap-orders",
|
||||||
|
service => service.ExecuteSendingOrderAsync(CancellationToken.None),
|
||||||
|
"*/1 * * * *");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
"EmailUseDefaultCredentials": false,
|
"EmailUseDefaultCredentials": false,
|
||||||
"EPMaxLevel": 2,
|
"EPMaxLevel": 2,
|
||||||
"FileProcessFolder": "D:\\Local\\EaseBilling\\Api\\OnlineSalesAutoCrop.CoreAPI\\FileProcessFolder",
|
"FileProcessFolder": "D:\\Local\\EaseBilling\\Api\\OnlineSalesAutoCrop.CoreAPI\\FileProcessFolder",
|
||||||
"HangfireDb": "9oXGnVl0H8yqF5I2MjHeXGNp5367ljjQjnsatcKsW/KFPlA8iwEVdaY7ZMBnU+AtKZIaKjwWoHZvDLmNn0K8Ke96pS3Sj4tD+mJejgSfJLhaB+UERm6M+xqVC30kk25TsVBQezB7AsmS8PXLfgWAboe4YmyQ3pXMrDx7WCfiuJA=",
|
"HangfireDb": "Data Source=210.4.65.222,3341;Initial Catalog=AutoCropDB;User ID=dmsuser;Password=dMsu@er;Encrypt=false",
|
||||||
"JwtAudience": "www.celdevbd.com",
|
"JwtAudience": "www.celdevbd.com",
|
||||||
"JwtCryptoKey": "Computer ease limited, dhaka, bangladesh BDComputer ease limited",
|
"JwtCryptoKey": "Computer ease limited, dhaka, bangladesh BDComputer ease limited",
|
||||||
"JwtIssuer": "https://www.celdevbd.com",
|
"JwtIssuer": "https://www.celdevbd.com",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user