chore: merge kub-stage into production
Build and Deploy to Production / build-and-deploy (push) Successful in 8m11s

This commit is contained in:
masoodafar-web
2026-04-28 23:28:44 +03:30
16 changed files with 1552 additions and 44 deletions
@@ -30,6 +30,7 @@ public class OrmCommissionCalculationStrategy : ICommissionCalculationStrategy
public async Task<int> CalculateWeeklyBalancesAsync(
long weekDefinitionId,
bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default)
{
var regorianWeekNumber = _weekRepository.GetGregorianWeekNumber(weekDefinitionId);
@@ -211,6 +212,7 @@ public class OrmCommissionCalculationStrategy : ICommissionCalculationStrategy
public async Task<long> CalculateWeeklyCommissionPoolAsync(
long weekDefinitionId,
bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default)
{
var weekDefinition = _weekRepository.GetGregorianWeekNumber(weekDefinitionId);
@@ -21,6 +21,7 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
public async Task<int> CalculateWeeklyBalancesAsync(
long weekDefinitionId,
bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default)
{
var dbContext = _context as DbContext;
@@ -29,10 +30,11 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
throw new InvalidOperationException("DbContext برای اجرای Stored Procedure در دسترس نیست");
}
// بارگذاری پکیج‌های فعال
var activePackages = await _context.Packages
.Where(p => !p.IsDeleted && p.IsActive)
.ToListAsync(cancellationToken);
// بارگذاری پکیج‌های فعال — اگر packageId داده شده فقط همان پکیج
var packagesQuery = _context.Packages.Where(p => !p.IsDeleted && p.IsActive);
if (packageId.HasValue)
packagesQuery = packagesQuery.Where(p => p.Id == packageId.Value);
var activePackages = await packagesQuery.ToListAsync(cancellationToken);
if (!activePackages.Any())
{
@@ -109,6 +111,7 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
public async Task<long> CalculateWeeklyCommissionPoolAsync(
long weekDefinitionId,
bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default)
{
var dbContext = _context as DbContext;
@@ -117,38 +120,59 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
throw new InvalidOperationException("DbContext برای اجرای Stored Procedure در دسترس نیست");
}
// بارگذاری پکیج‌های فعال — اگر packageId داده شده فقط همان پکیج
var packagesQuery = _context.Packages.Where(p => !p.IsDeleted && p.IsActive);
if (packageId.HasValue)
packagesQuery = packagesQuery.Where(p => p.Id == packageId.Value);
var activePackages = await packagesQuery.ToListAsync(cancellationToken);
if (!activePackages.Any())
{
throw new InvalidOperationException("هیچ پکیج فعالی یافت نشد");
}
var connection = dbContext.Database.GetDbConnection();
await connection.OpenAsync(cancellationToken);
long lastPoolId = 0;
try
{
using var command = connection.CreateCommand();
command.CommandText = "CMS.sp_CalculateWeeklyCommissionPool";
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandTimeout = 300; // 5 دقیقه timeout
// حلقه روی پکیج‌ها — هر پکیج Pool مستقل دارد
foreach (var package in activePackages)
{
using var command = connection.CreateCommand();
command.CommandText = "CMS.sp_CalculateWeeklyCommissionPool";
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandTimeout = 300;
// پارامترها
var paramWeekDefinitionId = command.CreateParameter();
paramWeekDefinitionId.ParameterName = "@WeekDefinitionId";
paramWeekDefinitionId.Value = weekDefinitionId;
command.Parameters.Add(paramWeekDefinitionId);
var paramWeekDefinitionId = command.CreateParameter();
paramWeekDefinitionId.ParameterName = "@WeekDefinitionId";
paramWeekDefinitionId.Value = weekDefinitionId;
command.Parameters.Add(paramWeekDefinitionId);
var paramForceRecalculate = command.CreateParameter();
paramForceRecalculate.ParameterName = "@ForceRecalculate";
paramForceRecalculate.Value = forceRecalculate;
command.Parameters.Add(paramForceRecalculate);
var paramPackageId = command.CreateParameter();
paramPackageId.ParameterName = "@PackageId";
paramPackageId.Value = package.Id;
command.Parameters.Add(paramPackageId);
// پارامتر خروجی - شناسه Pool
var paramPoolId = command.CreateParameter();
paramPoolId.ParameterName = "@PoolId";
paramPoolId.Direction = System.Data.ParameterDirection.Output;
paramPoolId.DbType = System.Data.DbType.Int64;
command.Parameters.Add(paramPoolId);
var paramForceRecalculate = command.CreateParameter();
paramForceRecalculate.ParameterName = "@ForceRecalculate";
paramForceRecalculate.Value = forceRecalculate;
command.Parameters.Add(paramForceRecalculate);
await command.ExecuteNonQueryAsync(cancellationToken);
var paramPoolId = command.CreateParameter();
paramPoolId.ParameterName = "@PoolId";
paramPoolId.Direction = System.Data.ParameterDirection.Output;
paramPoolId.DbType = System.Data.DbType.Int64;
command.Parameters.Add(paramPoolId);
var poolId = (long)(paramPoolId.Value ?? 0L);
return poolId;
await command.ExecuteNonQueryAsync(cancellationToken);
lastPoolId = (long)(paramPoolId.Value ?? 0L);
}
return lastPoolId;
}
finally
{