#P1710
POST /v2/trade/tickets
Trade: Tickets & Vouchers Data
این اندپوینت وظیفه استخراج اطلاعات کامل بلیتها، واچرها و فاکتورها را برای نمایش یا چاپ بر عهده دارد.
این سرویس منطق پیچیدهای برای گردآوری اطلاعات مسافران، تامینکنندگان، وضعیت آیتمها (عادی یا استردادی) و تنظیمات نمایش قیمت دارد.
Request Overview
URL:
/v2/trade/ticketsMethod: POST
Controller: V2TradeController@ticketsTrade
Access Control
- دسترسی عمومی (Public) یا محدود شده (در کد میدلوری مشخص نشده اما احتمالا نیاز به توکن دارد).
- نیاز به ارسال `branch` معتبر.
Body Parameters
| Field | Type | Description |
|---|---|---|
| branch | integer | (الزامی) شناسه شعبه برای فیلتر کردن فاکتورها. |
| id | mixed | (الزامی) شناسه سند مورد نظر. رفتار این فیلد دوگانه است:
|
| lang[id] | string | (اختیاری) کد زبان (پیشفرض: `fa`). |
Logic Details
منطق پردازش این سرویس شامل مراحل زیر است:
- واکشی رفرنس (Factor): اطلاعات پایه فاکتور با Join به جداول `operators` و `customers` دریافت میشود.
- بررسی قابلیت چاپ:
- اگر
print == 0باشد، خطای "عدم قابلیت چاپ" برمیگرداند. - اگر
status == 5باشد، خطای وضعیت همراه با توضیحات فاکتور برمیگرداند.
- اگر
- تعیین حالت نمایش (Print Mode):
1: مشاهده بدون قیمت.2: مشاهده با قیمت.3: عدم مشاهده بلیت و واچر (مسدود).
- پردازش آیتمها (Factor Items):
- بررسی وضعیت آیتم: آیتمهای `refund` همیشه بررسی میشوند، اما آیتمهای `online` بر اساس فیلد JSON `Status` بررسی میشوند.
- استخراج مسافران:
- اگر سرویس هتل (`accommodation`) باشد، لیست `roommate` از JSON استخراج میشود.
- اطلاعات کامل مسافر از `customers` واکشی میشود.
- کشینگ (Redis): اطلاعات کشور (`countries`) برای هر مسافر در Redis کش میشود تا فشار بر دیتابیس کاهش یابد.
- استخراج تامینکننده: اطلاعات `colleagues` با استفاده از Redis کش و بازیابی میشود.
- ساختاردهی خروجی: آیتمها بر اساس نوع (`product`/`byproduct`) و شناسه مسافر گروهبندی میشوند. آیتمهای استردادی (`refund`) به صورت تو در تو داخل آیتم اصلی قرار میگیرند.
- اطلاعات تماس (Branding): اگر فیلد `colleague_auth` مقدار داشته باشد، اطلاعات آژانس همکار (لوگو، آدرس، تلفن) جایگزین اطلاعات پیشفرض میشود.
Response Structure
نکته مهم: در کد فعلی، حتی در صورت موفقیتآمیز بودن عملیات و بازگشت دیتا، مقدار status برابر با false و کد 5008 برگردانده میشود (احتمالاً یک استاندارد داخلی یا لگاسی کد).
{
"status": false, // ! توجه: طبق کد موجود فالس برمیگرداند
"code": 5008,
"data": [
{
"confirmation": 1,
"serial_id": 100500,
"track_code": "09-1200", // فرمت: ماه-سریال
"print": {
"id": 1,
"title": { "fa": "مشاهده بدون قیمت", "en": "view without price" }
},
"internal": true,
"contact_information": {
"logo": "url...",
"address": "Tehran...",
"phone": "021..."
},
"operator": {
"first_name": "Admin",
"last_name": "User",
"mobile": "0912..."
},
"leader": {
"firstname_fa": "علی",
"lastname_fa": "علوی",
"mobile": "0912..."
},
"data": {
// آرایهای از آیتمها گروهبندی شده بر اساس شناسه آیتم/مسافر
"route_123": [
{
"serial_id": 50,
"action": "route",
"passenger": { ... }, // آبجکت کامل مسافر
"sell": false, // یا مبلغ اگر print=2 باشد
"route": { ... } // جزئیات پرواز
}
]
},
"created": "2024-05-10 10:00:00"
}
// ممکن است شامل آبجکتهای خطا هم باشد اگر یکی از فاکتورها مشکل داشته باشد
// { "status": false, "code": 5006, "message": "..." }
]
}
Flowchart
Start
↓
Input ID Type?
Array
WhereIn('id', list)
Single
Where('serial', input - Extension)
↓
Fetch Factors with Joins
↓
Loop Factors
↓
Printable?
No
Return Error 5006/5001
↓ (Yes)
Determine Print Mode (1, 2, 3)
↓
Process Items
- Check Item Status
- Extract Passengers (Redis Cache)
- Extract Suppliers (Redis Cache)
- Handle Refunds
- Check Item Status
- Extract Passengers (Redis Cache)
- Extract Suppliers (Redis Cache)
- Handle Refunds
↓
Format Output & Contact Info
↓
Return JSON (Code 5008)