feat: enhance sp_CalculateWeeklyCommissionPool to include IsDeleted filter and update commission calculations for package-specific pools
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 8m44s

This commit is contained in:
masoodafar-web
2026-05-04 18:44:28 +03:30
parent 41e7f29a0d
commit d09db638cc
2 changed files with 75 additions and 15 deletions
@@ -28,9 +28,9 @@ BEGIN
-- =============================================
-- 1. پیدا کردن Pool هفته (فیلتر بر اساس PackageId)
-- =============================================
SELECT @PoolId = Id, @TotalPoolAmount = TotalPoolAmount
SELECT @PoolId = MIN(Id), @TotalPoolAmount = ISNULL(SUM(TotalPoolAmount), 0)
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId;
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0;
-- اگر Pool وجود ندارد (هیچ فعال‌سازی در این هفته نبوده)، یک رکورد خالی ایجاد می‌کنیم
IF @PoolId IS NULL
@@ -50,7 +50,15 @@ BEGIN
-- =============================================
-- 2. بررسی محاسبات قبلی (بر اساس همین Pool نه کل هفته)
-- =============================================
IF EXISTS (SELECT 1 FROM CMS.UserCommissionPayouts WHERE WeeklyPoolId = @PoolId)
IF EXISTS (
SELECT 1
FROM CMS.UserCommissionPayouts
WHERE WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
)
)
BEGIN
IF @ForceRecalculate = 0
BEGIN
@@ -70,30 +78,67 @@ BEGIN
(SELECT SUM(wl.ChangeNerworkValue)
FROM CMS.UserWalletHistories wl
WHERE wl.WalletId = uw.Id
AND wl.RefrenceId IN (SELECT Id FROM CMS.UserCommissionPayouts WHERE WeeklyPoolId = @PoolId)
AND wl.RefrenceId IN (
SELECT Id
FROM CMS.UserCommissionPayouts
WHERE WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
)
)
), 0)
FROM CMS.UserWallets uw
WHERE uw.Id IN (
SELECT DISTINCT wl.WalletId
FROM CMS.UserWalletHistories wl
WHERE wl.RefrenceId IN (SELECT Id FROM CMS.UserCommissionPayouts WHERE WeeklyPoolId = @PoolId)
WHERE wl.RefrenceId IN (
SELECT Id
FROM CMS.UserCommissionPayouts
WHERE WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
)
)
);
-- حذف لاگ‌های تغییرات قبلی
DELETE FROM CMS.UserWalletHistories
WHERE RefrenceId IN (SELECT Id FROM CMS.UserCommissionPayouts WHERE WeeklyPoolId = @PoolId);
WHERE RefrenceId IN (
SELECT Id
FROM CMS.UserCommissionPayouts
WHERE WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
)
);
-- حذف تاریخچه پرداخت
DELETE FROM CMS.CommissionPayoutHistories
WHERE UserCommissionPayoutId IN (SELECT Id FROM CMS.UserCommissionPayouts WHERE WeeklyPoolId = @PoolId);
WHERE UserCommissionPayoutId IN (
SELECT Id
FROM CMS.UserCommissionPayouts
WHERE WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
)
);
-- حذف پرداخت‌های قبلی این Pool
DELETE FROM CMS.UserCommissionPayouts WHERE WeeklyPoolId = @PoolId;
DELETE FROM CMS.UserCommissionPayouts
WHERE WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
);
-- Reset وضعیت Pool
UPDATE CMS.WeeklyCommissionPools
SET IsCalculated = 0
WHERE Id = @PoolId;
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0;
END
-- =============================================
@@ -104,7 +149,7 @@ BEGIN
-- بالانسی محاسبه نشده — pool را به عنوان "محاسبه شده بدون پرداخت" علامت می‌زنیم
UPDATE CMS.WeeklyCommissionPools
SET IsCalculated = 1, CalculatedAt = @CalculatedAt
WHERE Id = @PoolId;
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0;
COMMIT TRANSACTION;
RETURN;
@@ -122,7 +167,7 @@ BEGIN
-- هیچ تعادلی برای توزیع وجود ندارد — pool محاسبه شده اما پرداختی ندارد
UPDATE CMS.WeeklyCommissionPools
SET IsCalculated = 1, CalculatedAt = @CalculatedAt
WHERE Id = @PoolId;
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0;
COMMIT TRANSACTION;
RETURN;
@@ -140,6 +185,7 @@ BEGIN
UserId,
WeekDefinitionId,
WeeklyPoolId,
PackageId,
BalancesEarned,
ValuePerBalance,
TotalAmount,
@@ -155,6 +201,7 @@ BEGIN
nb.UserId,
@WeekDefinitionId,
@PoolId,
@PackageId,
nb.TotalBalances,
@ValuePerBalance,
nb.TotalBalances * @ValuePerBalance,
@@ -205,7 +252,11 @@ BEGIN
@CalculatedAt,
'SP'
FROM CMS.UserCommissionPayouts cp
WHERE cp.WeeklyPoolId = @PoolId;
WHERE cp.WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
);
-- =============================================
-- 9. شارژ کیف پول کاربران
@@ -216,7 +267,11 @@ BEGIN
SET uw.NetworkBalance = uw.NetworkBalance + cp.TotalAmount
FROM CMS.UserWallets uw
INNER JOIN CMS.UserCommissionPayouts cp ON cp.UserId = uw.UserId
WHERE cp.WeeklyPoolId = @PoolId;
WHERE cp.WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
);
-- ثبت لاگ تغییرات کیف پول
INSERT INTO CMS.UserWalletHistories (
@@ -252,7 +307,11 @@ BEGIN
'SP'
FROM CMS.UserCommissionPayouts cp
INNER JOIN CMS.UserWallets uw ON uw.UserId = cp.UserId
WHERE cp.WeeklyPoolId = @PoolId;
WHERE cp.WeeklyPoolId IN (
SELECT Id
FROM CMS.WeeklyCommissionPools
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0
);
-- =============================================
-- 10. بروزرسانی Pool
@@ -265,7 +324,7 @@ BEGIN
ValuePerBalance = @ValuePerBalance,
LastModified = @CalculatedAt,
LastModifiedBy = 'SP'
WHERE Id = @PoolId;
WHERE WeekDefinitionId = @WeekDefinitionId AND PackageId = @PackageId AND IsDeleted = 0;
COMMIT TRANSACTION;
@@ -141,6 +141,7 @@ public class StoredProcedureCommissionCalculationStrategy : ICommissionCalculati
// حلقه روی پکیج‌ها — هر پکیج Pool مستقل دارد
foreach (var package in activePackages)
{
using var command = connection.CreateCommand();
command.CommandText = "CMS.sp_CalculateWeeklyCommissionPool";
command.CommandType = System.Data.CommandType.StoredProcedure;