feat: add PackageId to CalculateWeeklyCommissionPoolCommand and related logic for package-specific calculations
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 8m43s
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 8m43s
This commit is contained in:
@@ -159,14 +159,16 @@ public class WeeklyCommissionJob
|
||||
long weekDefinitionId,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
// Check idempotency: Skip if already calculated
|
||||
var existingPool = await _context.WeeklyCommissionPools
|
||||
.FirstOrDefaultAsync(x => x.WeekDefinitionId == weekDefinitionId, cancellationToken);
|
||||
// Skip only when all pools for the week are already calculated.
|
||||
var hasAnyPool = await _context.WeeklyCommissionPools
|
||||
.AnyAsync(x => x.WeekDefinitionId == weekDefinitionId, cancellationToken);
|
||||
var hasPendingPool = await _context.WeeklyCommissionPools
|
||||
.AnyAsync(x => x.WeekDefinitionId == weekDefinitionId && !x.IsCalculated, cancellationToken);
|
||||
|
||||
if (existingPool != null && existingPool.IsCalculated)
|
||||
if (hasAnyPool && !hasPendingPool)
|
||||
{
|
||||
_logger.LogWarning(
|
||||
"⚠️ [{ExecutionId}] WeekDefinitionId={WeekDefinitionId} already calculated. Skipping.",
|
||||
"⚠️ [{ExecutionId}] WeekDefinitionId={WeekDefinitionId} already fully calculated. Skipping.",
|
||||
executionId, weekDefinitionId);
|
||||
return;
|
||||
}
|
||||
|
||||
+12
-4
@@ -69,17 +69,25 @@ BEGIN
|
||||
-- =============================================
|
||||
-- 2. بررسی محاسبه قبلی
|
||||
-- =============================================
|
||||
IF EXISTS (SELECT 1 FROM CMS.NetworkWeeklyBalances WHERE WeekDefinitionId = @WeekDefinitionId)
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM CMS.NetworkWeeklyBalances
|
||||
WHERE WeekDefinitionId = @WeekDefinitionId
|
||||
AND PackageId = @PackageId
|
||||
)
|
||||
BEGIN
|
||||
IF @ForceRecalculate = 0
|
||||
BEGIN
|
||||
SET @ErrorMessage = N'تعادلهای هفته ' + CAST(@WeekDefinitionId AS NVARCHAR(20)) + N' قبلاً محاسبه شده است. برای محاسبه مجدد از ForceRecalculate استفاده کنید';
|
||||
SET @ErrorMessage = N'تعادلهای هفته ' + CAST(@WeekDefinitionId AS NVARCHAR(20))
|
||||
+ N' (پکیج ' + CAST(@PackageId AS NVARCHAR(20)) + N') قبلاً محاسبه شده است. برای محاسبه مجدد از ForceRecalculate استفاده کنید';
|
||||
RAISERROR(@ErrorMessage, 16, 1);
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- حذف محاسبات قبلی
|
||||
DELETE FROM CMS.NetworkWeeklyBalances WHERE WeekDefinitionId = @WeekDefinitionId;
|
||||
-- حذف محاسبات قبلی فقط برای همین پکیج
|
||||
DELETE FROM CMS.NetworkWeeklyBalances
|
||||
WHERE WeekDefinitionId = @WeekDefinitionId
|
||||
AND PackageId = @PackageId;
|
||||
END
|
||||
|
||||
-- =============================================
|
||||
|
||||
+29
-8
@@ -222,8 +222,17 @@ public class OrmCommissionCalculationStrategy : ICommissionCalculationStrategy
|
||||
}
|
||||
|
||||
// بررسی وجود استخر
|
||||
var existingPool = await _context.WeeklyCommissionPools
|
||||
.FirstOrDefaultAsync(x => x.WeekDefinitionId == weekDefinitionId, cancellationToken);
|
||||
var existingPoolQuery = _context.WeeklyCommissionPools
|
||||
.Where(x => x.WeekDefinitionId == weekDefinitionId);
|
||||
|
||||
if (packageId.HasValue)
|
||||
{
|
||||
existingPoolQuery = existingPoolQuery.Where(x => x.PackageId == packageId.Value);
|
||||
}
|
||||
|
||||
var existingPool = await existingPoolQuery
|
||||
.OrderBy(x => x.Id)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
|
||||
if (existingPool == null)
|
||||
{
|
||||
@@ -239,9 +248,15 @@ public class OrmCommissionCalculationStrategy : ICommissionCalculationStrategy
|
||||
}
|
||||
|
||||
// بررسی وجود تعادلهای هفتگی
|
||||
var weeklyBalances = await _context.NetworkWeeklyBalances
|
||||
.Where(x => x.WeekDefinitionId == weekDefinitionId)
|
||||
.ToListAsync(cancellationToken);
|
||||
var weeklyBalancesQuery = _context.NetworkWeeklyBalances
|
||||
.Where(x => x.WeekDefinitionId == weekDefinitionId);
|
||||
|
||||
if (packageId.HasValue)
|
||||
{
|
||||
weeklyBalancesQuery = weeklyBalancesQuery.Where(x => x.PackageId == packageId.Value);
|
||||
}
|
||||
|
||||
var weeklyBalances = await weeklyBalancesQuery.ToListAsync(cancellationToken);
|
||||
|
||||
if (!weeklyBalances.Any())
|
||||
{
|
||||
@@ -269,9 +284,15 @@ public class OrmCommissionCalculationStrategy : ICommissionCalculationStrategy
|
||||
// حذف پرداختهای قبلی در صورت ForceRecalculate
|
||||
if (forceRecalculate)
|
||||
{
|
||||
var oldPayouts = await _context.UserCommissionPayouts
|
||||
.Where(p => p.WeekDefinitionId == weekDefinitionId)
|
||||
.ToListAsync(cancellationToken);
|
||||
var oldPayoutsQuery = _context.UserCommissionPayouts
|
||||
.Where(p => p.WeekDefinitionId == weekDefinitionId);
|
||||
|
||||
if (packageId.HasValue)
|
||||
{
|
||||
oldPayoutsQuery = oldPayoutsQuery.Where(p => p.PackageId == packageId.Value);
|
||||
}
|
||||
|
||||
var oldPayouts = await oldPayoutsQuery.ToListAsync(cancellationToken);
|
||||
|
||||
if (oldPayouts.Any())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user