002e99f6bf
- Added PersianDateTimeService for converting Gregorian dates to Persian format in the BackOffice frontend. - Updated multiple frontend pages (Dashboard, UserPayouts, WorkerControl, UserNetworkInfo) to utilize the new Persian date service. - Enhanced GetUserNetworkPositionDto with 28+ new fields for comprehensive user network data. - Updated GetUserNetworkPositionQueryHandler to include new methods for calculating network statistics. - Modified Protobuf messages to accommodate the new fields, increasing from 14 to 42. - Refined week number calculation algorithm to ensure consistency across C# and SQL implementations. - Created new CSV and Excel files for binary plan calculations. - Ensured all changes are tested and validated for accuracy and performance.
7.0 KiB
7.0 KiB
📝 خلاصه تغییرات و بهروزرسانیهای 2025-12-09
تاریخ: 2025-12-09
موضوع: اصلاح محاسبات تعادل شبکه باینری
وضعیت: ✅ تکمیل شده و مستندسازی شده
🎯 تغییرات اعمال شده
1️⃣ اصلاح کد محاسبه تعادل
فایل: CMS/src/.../CalculateWeeklyBalancesCommandHandler.cs
تغییرات:
قبل (اشتباه):
// سقف رو زود اعمال میکرد
var cappedLeftTotal = Math.Min(leftTotal, maxBalancesPerLeg);
var cappedRightTotal = Math.Min(rightTotal, maxBalancesPerLeg);
var totalBalances = Math.Min(cappedLeftTotal, cappedRightTotal);
// باقیمانده رو اشتباه حساب میکرد
var leftRemainder = leftTotal - cappedLeftTotal;
var rightRemainder = rightTotal - cappedRightTotal;
مشکل:
- با چپ=500، راست=600 → تعادل=300 (اشتباه!)
- باقیمانده چپ=200 (باید 0 بود)
- باقیمانده راست=300 (باید 100 بود)
بعد (صحیح):
// مرحله 1: تعادل اولیه (بدون سقف)
var totalBalances = Math.Min(leftTotal, rightTotal);
// مرحله 2: باقیمانده (قبل از سقف)
var leftRemainder = leftTotal - totalBalances;
var rightRemainder = rightTotal - totalBalances;
// مرحله 3: اعمال سقف 300
var cappedBalances = Math.Min(totalBalances, maxBalancesPerLeg);
// مرحله 4: فلش از دو طرف
var flushedPerSide = totalBalances - cappedBalances;
var totalFlushed = flushedPerSide * 2;
نتیجه صحیح:
- چپ=500، راست=600 → تعادل=500 ✅
- باقیمانده چپ=0 ✅
- باقیمانده راست=100 ✅
- امتیاز=300 ✅
- فلش=400 (200 چپ + 200 راست) ✅
2️⃣ بهروزرسانی Documentation
فایلهای بهروز شده:
1. totalDoc/01-BUSINESS/balance-calculation-rules.md
- ✅ اضافه شدن بخش "آخرین بهروزرسانی 2025-12-09"
- ✅ توضیح 4 مرحله محاسبات
- ✅ مثالهای عددی صحیح
- ✅ اصلاح فرمولها
2. totalDoc/01-BUSINESS/balance-calculation-examples-5-levels.md (جدید)
- ✅ مثال کامل درخت 63 کاربره (6 لول)
- ✅ محاسبات دقیق هر کاربر
- ✅ جدول جمعبندی
- ✅ سناریوهای مختلف (متعادل، نامتعادل، سقف)
- ✅ محاسبه صندوق و توزیع کمیسیون
3. totalDoc/ANALYSIS-NEW-BUSINESS-REQUIREMENTS.md
- ✅ بهروزرسانی درصد سازگاری: 70% → 95%
- ✅ علامتگذاری Task #0 به عنوان Complete
- ✅ اضافه شدن بخش تغییرات اعمال شده
4. totalDoc/05-TASKS/NEW-BUSINESS-REQUIREMENTS-TASKS.md
- ✅ اضافه شدن Task #0 به عنوان Completed
- ✅ ثبت تاریخ اتمام و فایلهای تغییر یافته
📊 مقایسه قبل و بعد
مثال: چپ=500، راست=600
| مرحله | قبل (اشتباه) | بعد (صحیح) |
|---|---|---|
| تعادل اولیه | ❌ 300 | ✅ 500 |
| باقیمانده چپ | ❌ 200 | ✅ 0 |
| باقیمانده راست | ❌ 300 | ✅ 100 |
| امتیاز نهایی | ✅ 300 | ✅ 300 |
| فلش چپ | ❌ نامشخص | ✅ 200 |
| فلش راست | ❌ نامشخص | ✅ 200 |
| جمع فلش | ❌ 200 | ✅ 400 |
✅ تایید نهایی
منطق صحیح (4 مرحله):
1️⃣ تعادل اولیه = MIN(چپ، راست)
2️⃣ باقیمانده چپ = چپ - تعادل
باقیمانده راست = راست - تعادل
3️⃣ امتیاز نهایی = MIN(تعادل، 300)
4️⃣ فلش از هر طرف = تعادل - 300 (اگر > 0)
جمع فلش = فلش × 2
نکات کلیدی:
- ✅ باقیمانده جداگانه: چپ و راست مجزا ذخیره میشوند
- ✅ باقیمانده قبل از سقف: از تعادل اولیه محاسبه میشود
- ✅ سقف روی امتیاز: 300 روی امتیاز نهایی اعمال میشود
- ✅ فلش از دو طرف: هر دو طرف مقدار یکسان فلش میشوند
- ✅ محاسبه مستقل: هر کاربر جداگانه در حلقه
📁 فایلهای تغییر یافته
کد:
✅ CMS/src/CMSMicroservice.Application/CommissionCQ/Commands/
CalculateWeeklyBalances/CalculateWeeklyBalancesCommandHandler.cs
تغییرات:
- خطوط 84-110: منطق محاسبه تعادل
- خطوط 127: فیلد TotalBalances از totalBalances → cappedBalances
Documentation:
✅ totalDoc/01-BUSINESS/balance-calculation-rules.md
- بهروزرسانی کامل بخشها
- اضافه شدن مثالهای جدید
✅ totalDoc/01-BUSINESS/balance-calculation-examples-5-levels.md (جدید)
- 400+ خط
- 10 بخش کامل
- مثالهای عملی 5 لول
✅ totalDoc/ANALYSIS-NEW-BUSINESS-REQUIREMENTS.md
- بهروزرسانی درصد سازگاری
- اضافه شدن تغییرات اعمال شده
✅ totalDoc/05-TASKS/NEW-BUSINESS-REQUIREMENTS-TASKS.md
- Task #0 به عنوان Completed
🎯 نتیجهگیری
✅ موفقیتها:
- کد کاملاً مطابق با توضیحات بیزینس شد
- تمام مستندات بهروزرسانی شدند
- مثالهای جامع 5 لول اضافه شد
- درصد سازگاری از 70% به 95% رسید
⏳ کارهای باقیمانده:
- Task #1: پیادهسازی DeleteInactiveUsersWorker (6 ساعت)
- Task #2: الزامی کردن دیالوگ باشگاه (8 ساعت)
- Task #3: شرط نمایش لینک معرفی (4 ساعت)
- Task #4: Validation 2 فرزند فعال (4 ساعت)
- Task #5: پیغام کد معرف پر (3 ساعت)
- Task #6: Update Documentation (3 ساعت)
زمان تخمینی باقیمانده: 28 ساعت (~4 روز کاری)
📌 یادداشتهای مهم
برای Developer بعدی:
- کد محاسبه تعادل دست نزنید، کاملاً تست و تایید شده است
- ترتیب 4 مرحله حیاتی است، تغییر ندهید
- باقیمانده جداگانه (چپ و راست) ذخیره میشود
- فلش از هر دو طرف باید محاسبه شود
برای تست:
-- چک کردن باقیماندهها
SELECT UserId, WeekNumber,
LeftLegTotal, RightLegTotal, TotalBalances,
LeftLegRemainder, RightLegRemainder
FROM NetworkWeeklyBalances
WHERE WeekNumber = '2025-W50';
-- باید:
-- TotalBalances = MIN(LeftLegTotal, RightLegTotal) یا 300
-- LeftLegRemainder = LeftLegTotal - MIN(LeftLegTotal, RightLegTotal)
-- RightLegRemainder = RightLegTotal - MIN(LeftLegTotal, RightLegTotal)
تهیهکننده: AI Assistant
تاریخ: 2025-12-09
نسخه: 1.0 Final