Compare commits
5 Commits
def3b94d89
...
be80136ae8
| Author | SHA1 | Date | |
|---|---|---|---|
| be80136ae8 | |||
| 5e9984f0e5 | |||
| 1d07ae4f71 | |||
| 775a9bd75d | |||
| 2620a24597 |
+3
-3
@@ -494,6 +494,6 @@ fabric.properties
|
||||
/src/.idea
|
||||
|
||||
# Environment-specific configuration files with sensitive data
|
||||
# **/appsettings.Staging.json
|
||||
# **/appsettings.Production.json
|
||||
# **/appsettings.*.local.json
|
||||
**/appsettings.Staging.json
|
||||
**/appsettings.Production.json
|
||||
**/appsettings.*.local.json
|
||||
|
||||
@@ -23,8 +23,8 @@ stringData:
|
||||
"MerchantId": "4225d555-5fa9-4df0-9b61-1ce152cbbba8",
|
||||
"UseSandbox": false
|
||||
},
|
||||
"CmsBaseUrl": "https://cms.kbs1.ir",
|
||||
"FrontOfficeBaseUrl": "https://kbs1.ir",
|
||||
"CmsBaseUrl": "https://cms.kbs2.ir",
|
||||
"FrontOfficeBaseUrl": "https://kbs2.ir",
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=mssql-svc;Database=KBS;User Id=sa;Password=YourStrong@Passw0rd;TrustServerCertificate=True;"
|
||||
},
|
||||
|
||||
+15
-1
@@ -62,9 +62,23 @@ public class CompleteOrderPaymentCommandHandler : IRequestHandler<CompleteOrderP
|
||||
var userWallet = await _context.UserWallets
|
||||
.FirstOrDefaultAsync(w => w.UserId == order.UserId, cancellationToken);
|
||||
|
||||
if (userWallet != null)
|
||||
if (userWallet != null && order.DiscountBalanceUsed > 0)
|
||||
{
|
||||
userWallet.DiscountBalance -= order.DiscountBalanceUsed;
|
||||
|
||||
// ثبت لاگ تغییرات کیف پول
|
||||
_context.UserWalletChangeLogs.Add(new Domain.Entities.UserWalletChangeLog
|
||||
{
|
||||
WalletId = userWallet.Id,
|
||||
CurrentBalance = userWallet.Balance,
|
||||
ChangeValue = 0,
|
||||
CurrentNetworkBalance = userWallet.NetworkBalance,
|
||||
ChangeNerworkValue = 0,
|
||||
CurrentDiscountBalance = userWallet.DiscountBalance,
|
||||
ChangeDiscountValue = -order.DiscountBalanceUsed,
|
||||
IsIncrease = false,
|
||||
RefrenceId = transaction.Id
|
||||
});
|
||||
}
|
||||
|
||||
// تایید فروش و کسر موجودی از طریق InventoryService
|
||||
|
||||
+29
-2
@@ -111,7 +111,18 @@ public class PlaceOrderCommandHandler : IRequestHandler<PlaceOrderCommand, Place
|
||||
|
||||
// Always apply maximum possible discount (100%) — user cannot choose less
|
||||
var maxDiscountBalanceUsable = totalDiscountAmount;
|
||||
var actualDiscountBalanceUsed = Math.Min(maxDiscountBalanceUsable, userWallet.DiscountBalance);
|
||||
|
||||
// بررسی کافی بودن موجودی کیف پول اعتباری (تخفیفی)
|
||||
if (userWallet.DiscountBalance < maxDiscountBalanceUsable)
|
||||
{
|
||||
return new PlaceOrderResponseDto
|
||||
{
|
||||
Success = false,
|
||||
Message = $"موجودی کیف پول اعتباری کافی نیست. مبلغ مورد نیاز: {maxDiscountBalanceUsable:N0} ریال، موجودی شما: {userWallet.DiscountBalance:N0} ریال"
|
||||
};
|
||||
}
|
||||
|
||||
var actualDiscountBalanceUsed = maxDiscountBalanceUsable;
|
||||
|
||||
_logger.LogInformation(
|
||||
"Discount auto-applied: max allowed={MaxAllowed}, wallet balance={WalletBalance}, used={Used}",
|
||||
@@ -263,9 +274,25 @@ public class PlaceOrderCommandHandler : IRequestHandler<PlaceOrderCommand, Place
|
||||
|
||||
var walletForDeduct = await _context.UserWallets
|
||||
.FirstOrDefaultAsync(w => w.UserId == request.UserId, cancellationToken);
|
||||
if (walletForDeduct != null)
|
||||
if (walletForDeduct != null && actualDiscountBalanceUsed > 0)
|
||||
{
|
||||
walletForDeduct.DiscountBalance -= actualDiscountBalanceUsed;
|
||||
|
||||
// ثبت لاگ تغییرات کیف پول
|
||||
_context.UserWalletChangeLogs.Add(new Domain.Entities.UserWalletChangeLog
|
||||
{
|
||||
WalletId = walletForDeduct.Id,
|
||||
CurrentBalance = walletForDeduct.Balance,
|
||||
ChangeValue = 0,
|
||||
CurrentNetworkBalance = walletForDeduct.NetworkBalance,
|
||||
ChangeNerworkValue = 0,
|
||||
CurrentDiscountBalance = walletForDeduct.DiscountBalance,
|
||||
ChangeDiscountValue = -actualDiscountBalanceUsed,
|
||||
IsIncrease = false,
|
||||
RefrenceId = transaction.Id
|
||||
});
|
||||
}
|
||||
|
||||
foreach (var cartItem in cartItems)
|
||||
{
|
||||
await _inventoryService.ConfirmSaleAsync(
|
||||
|
||||
+15
@@ -114,6 +114,21 @@ public class VerifyDiscountWalletChargeCommandHandler
|
||||
_context.Transactions.Add(transaction);
|
||||
await _context.SaveChangesAsync(cancellationToken);
|
||||
|
||||
// ثبت لاگ تغییرات کیف پول (بعد از ایجاد Transaction برای داشتن TransactionId)
|
||||
_context.UserWalletChangeLogs.Add(new Domain.Entities.UserWalletChangeLog
|
||||
{
|
||||
WalletId = wallet.Id,
|
||||
CurrentBalance = wallet.Balance,
|
||||
ChangeValue = 0,
|
||||
CurrentNetworkBalance = wallet.NetworkBalance,
|
||||
ChangeNerworkValue = 0,
|
||||
CurrentDiscountBalance = wallet.DiscountBalance,
|
||||
ChangeDiscountValue = request.Amount,
|
||||
IsIncrease = true,
|
||||
RefrenceId = transaction.Id
|
||||
});
|
||||
await _context.SaveChangesAsync(cancellationToken);
|
||||
|
||||
// لینک PaymentTransaction به Transaction داخلی
|
||||
if (paymentTx != null)
|
||||
{
|
||||
|
||||
@@ -17,9 +17,9 @@ public class ExpirePendingOrdersService : BackgroundService
|
||||
private readonly ILogger<ExpirePendingOrdersService> _logger;
|
||||
|
||||
/// <summary>
|
||||
/// مدت زمان انقضا (۳۰ دقیقه)
|
||||
/// مدت زمان انقضا (۱۵ دقیقه)
|
||||
/// </summary>
|
||||
private static readonly TimeSpan ExpirationTime = TimeSpan.FromMinutes(30);
|
||||
private static readonly TimeSpan ExpirationTime = TimeSpan.FromMinutes(15);
|
||||
|
||||
/// <summary>
|
||||
/// هر ۵ دقیقه چک میشود
|
||||
|
||||
Reference in New Issue
Block a user