Skip to main content
#P1408

POST /api/v2/trade/refund/update

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/trade/refund/deleteupdate V2TradeController@deleteRefundTradeV2TradeController@updateRefundTrade authWithJwt حذفبه‌روزرسانی یا ایجاد آیتم بازپرداخت از(refund) برای یک فاکتور و پاک‌سازی کش مرتبط

منطق عملکرد

  • بابه‌ازای دریافتهر آیتم موجود در $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 بله شناسه فاکتور مرجع جهت بروزرسانی کش Redis(reference)
dataarrayبلهلیست آیتم‌های استرداد جهت بروزرسانی/ایجاد
data[].refund_idintegerخیردر صورت وجود، آیتم بازپرداخت موجود بروزرسانی می‌شود
data[].item_id integer بله شناسه ردیفآیتم بازپرداختمرجع جهت(آیتم حذفاصلی فاکتور)
data[].providerintegerبلهشناسه تأمین‌کننده (supplier)
data[].passengerintegerبلهشناسه مسافر مربوطه
data[].penalty_buy_pricestringخیرمبلغ جریمه خرید (کاهش از buy)
data[].penalty_sell_pricestringخیرمبلغ جریمه فروش (کاهش از sell)
data[].extradition_datestring (datetime)بلهتاریخ استرداد
data[].reasonstringخیریادداشت توضیحی برای علت استرداد

خروجی‌هاخروجی

{
  "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() با نوع DeleteRefundItemAddRefund یا UpdateRefundصف snailJob (تأخیر ۱۰ دقیقه).
  • UpdateRedis::dispatch() برایجهت بروزرسانیبازسازی کش مالی → صف fastJob.

تغییرات داده‌ای

  • DB Table: factor_items
  • Action:Fields DELETEupdated/inserted: wheredetails, id=[refund_id]supplier_id, andbuy, product='refund'sale, deadline
  • JSON Structure: {"item_id": ##, "note": "cause text"}

مدیریت خطا

  • محصورعدم شکست try/catch داخلی؛ خطاهای غیرقابل پیش‌بینی در try/catchسطح DB بازگرداندنبه ساختارException JSONعمومی استانداردمنجر خطا.می‌شوند.
  • خطای ورود ناقص 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 درون‌سازمانی را فراهم می‌سازد.است.