狀態欄位總覽
快速表
| 欄位 | 主要意義 | 常見來源 |
|---|---|---|
quote_request_id | 所屬案件 | search_add 建 bid 時帶入 |
quote_service_id | 對應專家服務 | provider match 結果 |
provider_user_id | 接案專家 user id | quote_services.user_id |
is_auto_quote | 是否為自動報價 / 自動配對產生 | search_add / auto quote flow |
is_contact_charge | 是否為保證回覆類型 | category / fee rule |
is_want_to_contact_provider | consumer 是否已正式聯絡 provider | want_to_contact_provider / direct contact flow |
contact_provider_on | consumer 正式聯絡 provider 時間 | is_want_to_contact_provider 變 1 時寫入 |
quote_status_id | consumer 視角的 bid 狀態 | quote bid 狀態機 |
provider_status_id | provider 視角的 bid 狀態 | quote bid 狀態機 |
narrow_status_id | narrow match 狀態 | narrow match flow |
quote_user_subscription_log_id | 聯絡 provider 時綁定的扣款 / 使用紀錄 id | contact / charge flow |
total_site_fee | 本次 bid 需要收取的平台費 | fee preview / contact flow |
reason | 聯絡或狀態變更原因 | API input |
price_note / quote_amount / pricing_unit | provider 報價內容與顯示價格 | provider 送出報價 |
flat_rate_at / hourly_rate_at / hourly_rate_for | 固定總價或小時計價欄位 | rating_type request 參數轉換後寫入 |
is_on_site_visit_required_for_quote | provider 表示需現場估價 | rating_type=quote |
is_more_information_required | provider 表示需要更多資訊 | rating_type=required |
新手先看這三個
is_auto_quote
判斷這筆 bid 是不是系統自動產生的 quote card。
常見值:
0 = manual quote / 手動報價相關
1 = auto quote / 系統自動配對報價is_want_to_contact_provider
判斷 consumer 是否已正式聯絡 provider。
常見值:
0 = 尚未正式聯絡 provider
1 = 已正式聯絡 provider這個欄位通常會牽動:
contact_provider_onquote_requests.auto_quote_contact_counttransactionsquote_activitiestask_event_queue
quote_user_subscription_log_id
雖然名字有 subscription,但在 want_to_contact_provider 主線中,目前會寫入本次聯絡產生的 transactions.id。
常見對應:
transactions.id但要注意不同 fee / refund / existing transaction 情境下,不一定每次 contact 都會新增一筆新的 transaction。欄位沒值時,也要回查 transactions 是否已經有 QuotePaymentForSubmissionAutoQuote。
narrow_status_id
判斷 narrow match invitation 的狀態。
常見值:
0 = NOT_SEND,尚未送出邀請
1 = WAITING,已送出邀請,等待 provider 回覆
2 = ACCEPTED,provider 接受
3 = REJECTED,provider 拒絕consumer_want_provider_quote 成功時,主狀態是:
narrow_status_id = WAITING這和 want_to_contact_provider 的 is_want_to_contact_provider = 1 是不同流程,不要混在一起判斷。
報價內容欄位
quote_bids 不會儲存 rating_type 欄位。rating_type 是 API request 參數,用來決定要寫哪一組報價內容欄位。
常見對應:
rating_type=flat
-> flat_rate_at, quote_amount, pricing_unit=單次
rating_type=hourly
-> hourly_rate_at, hourly_rate_for, quote_amount, pricing_unit=小時
rating_type=quote
-> is_on_site_visit_required_for_quote = 1
rating_type=required
-> is_more_information_required = 1完整說明見 欄位/報價內容欄位。
排查順序
- 先看
quote_bids本身狀態。 - 用
quote_bids.quote_request_id查quote_requests。 - 用
quote_bids.id查transactions.foreign_id且class = 'QuoteBid'。 - 用
quote_bids.id查messages.quote_bid_id。 - 用
quote_bids.id查quote_activities.secondary_foreign_id. - 用
quote_bids.id查 queue / queue log payload。 - 若 response 是錯誤,只看 response 不夠,要查 monolog。
常用 SQL
SELECT
qb.id,
qb.quote_request_id,
qr.user_id AS requestor_user_id,
qb.provider_user_id,
qb.quote_service_id,
qb.is_auto_quote,
qb.is_contact_charge,
qb.is_want_to_contact_provider,
qb.contact_provider_on,
qb.quote_status_id,
qb.provider_status_id,
qb.narrow_status_id,
qb.total_site_fee,
qb.quote_user_subscription_log_id,
qb.reason,
qr.auto_quote_contact_count,
qr.is_closed,
qr.is_archived,
qr.is_expired
FROM quote_bids qb
INNER JOIN quote_requests qr ON qr.id = qb.quote_request_id
WHERE qb.id = <quote_bid_id>;