狀態欄位總覽

快速表

欄位主要意義常見來源
quote_request_id所屬案件search_add 建 bid 時帶入
quote_service_id對應專家服務provider match 結果
provider_user_id接案專家 user idquote_services.user_id
is_auto_quote是否為自動報價 / 自動配對產生search_add / auto quote flow
is_contact_charge是否為保證回覆類型category / fee rule
is_want_to_contact_providerconsumer 是否已正式聯絡 providerwant_to_contact_provider / direct contact flow
contact_provider_onconsumer 正式聯絡 provider 時間is_want_to_contact_provider 變 1 時寫入
quote_status_idconsumer 視角的 bid 狀態quote bid 狀態機
provider_status_idprovider 視角的 bid 狀態quote bid 狀態機
narrow_status_idnarrow match 狀態narrow match flow
quote_user_subscription_log_id聯絡 provider 時綁定的扣款 / 使用紀錄 idcontact / charge flow
total_site_fee本次 bid 需要收取的平台費fee preview / contact flow
reason聯絡或狀態變更原因API input
price_note / quote_amount / pricing_unitprovider 報價內容與顯示價格provider 送出報價
flat_rate_at / hourly_rate_at / hourly_rate_for固定總價或小時計價欄位rating_type request 參數轉換後寫入
is_on_site_visit_required_for_quoteprovider 表示需現場估價rating_type=quote
is_more_information_requiredprovider 表示需要更多資訊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_on
  • quote_requests.auto_quote_contact_count
  • transactions
  • quote_activities
  • task_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_provideris_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

完整說明見 欄位/報價內容欄位

排查順序

  1. 先看 quote_bids 本身狀態。
  2. quote_bids.quote_request_idquote_requests
  3. quote_bids.idtransactions.foreign_idclass = 'QuoteBid'
  4. quote_bids.idmessages.quote_bid_id
  5. quote_bids.idquote_activities.secondary_foreign_id.
  6. quote_bids.id 查 queue / queue log payload。
  7. 若 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>;