#P1557
GET /api/v2/tasks/categories/list
Route Info
| Method | Endpoint | Controller | |
| GET | /api/panel/v2/ |
منطق دقیقشرح عملکرد (Code Logic)Functionality)
این متد لیستوظیفه دستهبندیهایتولید تسکصورتحساب (گردش حساب) و محاسبه تراز برای یک سرفصل حسابداری مشخص را بر عهده دارد و مراحل زیر را طی میکند:
- تعیین بازه زمانی:
- اگر پارامترهای
advanced->fromوtoارسال نشوند، سیستم به طور پیشفرض بازه ۳ ماه اخیر را دردونظربخشمیگیرد.
مجزا(«دستههای من» و «دستههای دیگران») بازمیگرداند. منطق فیلتر کردن به شرح زیر است:بخشتشخیصاولسطح(My Categories):حساب:جستجوبردراساسجدولطول رشته پارامتر، سطح حساب تشخیص داده میشود: 2 رقم (گروه)، 4 رقم (کل)، 6 رقم (معین) و 9 رقم (تفضیل).tasks_categoriesidشرط:اطلاعاتپایهbranchبرابرحسابباوشعبهساختارجاریوuserبرابر باidاپراتور لاگین شدهآن (مالکیتمانندمستقیم).نوع درماهیت)حلقه: تعداد تسکهای فعال هر دسته شمرده میشود. اگر پارامترtasksارسال شده باشد، متد داخلیgetTasksاجراواکشی میشود.
بخشجمعآوریدوماسناد (Other Categories)Aggregation):جستجواسناددرمالیجدولازجداولtasks_categoriesکهمختلفبابراساسtasks_itemsجویننوع(Join)حسابشدهجمعآوریاست.میشوند:فیلترجدولJSON:Pays:ازشاملدستوردریافتها،پرداختها،whereRawاستفادهتنخواهمیکندوتاوامها.- Manual
کندDocuments:آیااسناددستیidاپراتور جاری در ستون JSON(بهنامجزoperatorsدر جدول آیتمها وجود دارد یا خیر (یعنی کاربر در تسکهای آن دسته مشارکت دارد)افتتاحیه/اختتامیه). ازCheckOperations:distinct()استفادهعملیاتهایمیشودچکتا(وصول،ازواگذاری،تکرارخرج،دستهبندیها جلوگیری شود.استرداد).درPOS/Online:حلقه:اگرمجدداًحسابتعدادبانکیتسکهاییباشد،کهتراکنشهایکاربرکارتخوان و آنلاین به صورت تجمیعی روزانه درآنهافیلدنقشsubsetداردنمایششمردهداده میشود.شوند.
چک
- اسناد افتتاحیه و اختتامیه:
- با فراخوانی متد داخلی
getFinancialPasts، ماندههای انتقالی از دورههای قبل (تحت عنوان سند افتتاحیه) و اسناد بستن حساب (اختتامیه) محاسبه و به لیست اضافه میشوند.
- محاسبه تراز نهایی:
- مجموع بدهکار و بستانکار محاسبه شده و وضعیت تراز (بدهکار/بستانکار/تراز) در فیلد
balanceخروجی قرار میگیرد.
پارامترهای ورودی (
QueryInputParams)Parameters)نام پارامتر نوع الزامی؟ توضیحات branch (الزامیInteger -بله معمولا در هدر یا بادی):شناسه شعبه جهتفعال.id String/Int بله کد حساب مورد نظر (مثلاً کد معین یا تفضیل). type String خیر نوع حساب (مثلاً account).json JSON String بله حاوی تنظیمات صفحهبندی و فیلتر کردن دادهها.tasksزمانی (اختیاری - Boolean): اگر مقدارآبجکتtrueیا1ارسال شود، علاوه بر اطلاعات دسته، لیست ریز تسکهای آن دسته نیز (توسط متد).getTasksadvancedواکشیودر آرایه خروجی قرار میگیرد. در غیر این صورت مقدارfalseبرمیگردد.
خروجیهاساختار
موفقپارامتر(200 OK)json:{ "status"start":true,0, "time"length":1732045000,50, "data"advanced": { "my"from":[ // دستهبندیهایی که کاربر سازنده آنهاست {"id": 10, "user": {...}1403-01-01", //آبجکت اطلاعات سازنده (از StaticController)اختیاری "title"to": "Project A", "color": "#FF0000", "icon": "fa-check", "status": 1, "created": "2023-01-01 12:00:00", "counter": 5,1403-12-29" //تعداد تسکهای فعال داخل این دسته "tasks": false // یا آرایهای از تسکها اگر درخواست شده باشد } ], "other": [ // دستهبندیهایی که کاربر در آنها مشارکت دارد (توسط JSON Check) { "id": 12, "title": "Team Work B", ... } ]اختیاری } }تحلیلنمونهریسکخروجی (Response)ساختار کلی پاسخ:
{ "details": { "title": "عنوان حساب (مثلاً بانک ملت)", "code": "101001" }, "filtered": { "from": "1403-01-01", "to": "1403-12-29" }, "account": { "id": 15, "type": "moeen", "title": "بانک ها", "nature": 1 }, "data": [ { "serial_id": 10550, "system_serial": 550, "datetime": "1403/08/01 10:30:00", "credit": 0, "debit": 5000000, "description": { "html": "...", "text": "..." }, "details": { "title": { "html": "شرح سند...", "text": "شرح سند..." }, "type": { "subject": "pay", // pay, check, pos, wage, etc. "title": "سندمالی" } }, "subset": [] // آرایه ریزتراکنشها (برای POS وپرفورمنسOnline)(Critical)}مشکل عملکردی (N+1 Query Problem):در هر دو حلقهforeach، به ازای هر دستهبندی پیدا شده، حداقل یک کوئریcountو یک کوئریStaticController::getOperatorsاجرا میشود. با افزایش تعداد دستهها، تعداد کوئریها به شدت زیاد شده و سرعت پاسخدهی افت میکند.تزریق متغیر در Raw SQL:در خطی کهdebit":whereRaw("JSON_CONTAINS(...],'\"$operatorId\balance": { "')credit": 250000000, ")استفاده180000000,شده،"balance":متغیر-70000000,"diagnosis":operatorId$مستقیماً"Creditor"داخل//رشتهCreditor,SQLDebtor,قرارNeutralگرفته}است.}اگرچه این متغیر از میدلور (Token) میآید و قابل اعتماد است، اما استاندارد این است که از Binding (علامت سوال?) استفاده شود تا از هرگونه خطر احتمالی و سربار روی دیتابیس جلوگیری شود.وابستگی داخلی نامشخص:متد$this->getTasks()فراخوانی میشود که کد آن در کنترلر موجود نیست. هرگونه باگ یا کندی در آن متد مستقیماً روی این اندپوینت تاثیر میگذارد.
- اگر پارامترهای