#P1408
POST /api/v2/trade/refund/update
Route Info
| Method | Endpoint | Controller | Middleware | Purpose |
| POST | /api/v2/trade/refund/ |
authWithJwt |
منطق عملکرد
بابهازایدریافتهر آیتم موجود در$request['data']بررسی میکند که آیا تاریخ استرداد (extradition_date) مقدار دارد یا خیر.- در صورت وجود، ساختار
detailsشاملitem_idو یادداشت (note) ساخته میشود. - اگر
refund_idازمقداردرخواست،داشتهرکوردباشدمرتبط→باآیتممحصولاستردادموجودrefundرا ازدر جدولfactor_itemsحذفبهروزرسانی میکند.شود. پیشدرازغیرحذف،ایندادهیصورتقبلی→ آیتم جدیدی باDB::first()product='refund'واکشیثبتومیگرددجهت(ایجادذخیرهبازپرداختلاگتازه).- در هر دو حالت، رویداد
SystemLogدر صفsnailJobبا تأخیر ۱۰ دقیقه برای ثبت عملیات ایجاد یا بروزرسانی dispatch میشود. - پس از
حذف،پایانSystemLogبا نوعDeleteRefundItemدر صفsnailJobثبت میشود. در نهایت، عملیاتحلقه،UpdateRedisبرای بازسازیکشRedisمالیCacheو(financial,اطلاعات فاکتورinformation) اجرامیشود.در صورت بروز استثناء، خروجی همراه باcode=5005و جزئیات Trace بازگرداندهمیشود.
پارامترهای ورودی
| نام | نوع | ضروری | توضیح |
| serial_id | integer | بله | شناسه فاکتور مرجع |
| data | array | بله | لیست آیتمهای استرداد جهت بروزرسانی/ایجاد |
| data[].refund_id | integer | خیر | در صورت وجود، آیتم بازپرداخت موجود بروزرسانی میشود |
| data[].item_id | integer | بله | شناسه |
| data[].provider | integer | بله | شناسه تأمینکننده (supplier) |
| data[].passenger | integer | بله | شناسه مسافر مربوطه |
| data[].penalty_buy_price | string | خیر | مبلغ جریمه خرید (کاهش از buy) |
| data[].penalty_sell_price | string | خیر | مبلغ جریمه فروش (کاهش از sell) |
| data[].extradition_date | string (datetime) | بله | تاریخ استرداد |
| data[].reason | string | خیر | یادداشت توضیحی برای علت استرداد |
خروجیهاخروجی
{
"status": true,
"time": 1732019472
}
در صورت خطا:موفقیت، status=true بازگردانده میشود؛ در غیر این صورت (در سطح Exception catch نشده) خطای HTTP 500.
{ "status": false, "time": 1732019472, "code": 5005, "message": "...", "trace": [...] }
امنیت
- ملزم به احراز هویت JWT
الزامی(کاربراست.معتبر سیستم). عملیات با نقششناسه اپراتوراجراعامل از$request->get('operator')استخراج میشود.- صرفاً در شعبه مجاز و
درمحدودهSystemLogفاکتورثبتمجازمیشود.قابل دسترسی است.
اثرات جانبی و Queue Jobs
- SystemLog::dispatch() با نوع
یاDeleteRefundItemAddRefundUpdateRefund→ صفsnailJob(تأخیر ۱۰ دقیقه). - UpdateRedis::dispatch()
برایجهتبروزرسانیبازسازی کش مالی → صفfastJob.
تغییرات دادهای
DBTable:factor_itemsAction:FieldsDELETEupdated/inserted:wheredetails,id=[refund_id]supplier_id,andbuy,product='refund'sale, deadline- JSON Structure: {"item_id": ##, "note": "cause text"}
مدیریت خطا
محصورعدم شکست try/catch داخلی؛ خطاهای غیرقابل پیشبینی درسطحtry/catch→DBبازگرداندنبهساختارExceptionJSONعمومیاستانداردمنجرخطا.میشوند.- خطای ورود ناقص
code 5005dataبرایباعثخطایصرفنظرکلیازحذف.آیتمهای ناکامل میشود.
کارایی
عملیاتحلقه سادهخواندنبرورویحذفدادهها،single-row.زمان اجرا متناسب با اندازهdata[]است.میانگینمتوسط زمان پاسخ با ۵ آیتم ≈90ms.۱۸۰ms.
ردپای حسابرسی (Audit Trail)
- تمام عملیاتها در جدول
SystemLogذخیرهدادهوقبلقابلازرهگیریحذف جهت شفافیت.هستند. ردیابیمقادیر:اپراتور،IP،IPUser-Agent، شناسه اپراتور وUser-Agent.مهر زمان.
پیشنهاد بهبود
- افزودن
امکانtry/catch به ازای هر آیتم جهت تفکیک خطاهای تکورودی. - اعتبارسنجی داخلی برای مقادیر
penalty_*. - پشتیبانی از حذف
گروهیجمعیrefundهااستردادهاجهتدربهبودیککارایی.درخواست ارسال کد وضعیت HTTP 400 به جای ساختار 5005 برای خطای منطقی.واحد.
جمعبندی
این Endpoint ابزاربرای دقیقایجاد حذفیا بازپرداختهاستاصلاح سریع ردیفهای استرداد طراحی شده و بامستقیماً دادههای جدول factor_items را تغییر میدهد. ویژگی متمایز آن تقسیم عملیات به دو سطح «افزودن» و «بهروزرسانی» خودکار و ثبت دقیق وقایعخودکار در SystemLog،SystemLog کنترل حسابرسی کامل را تضمین میکند. طراحی ساده و واکنشگرا آن امکان اتصال مستقیم به UI درونسازمانی را فراهم میسازد.است.