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