Skip to content

注單與結算

最後更新:2026-04-09


功能說明

注單(投注記錄)Tab 讓已登入使用者查看所有體育投注記錄,包含「未結算」(待定)、「已結算」(確定)、「提前結算」(CashOut)三種狀態,同時支援遊戲注單(BBGame)。使用者可在未結算注單中申請提前結算換取保底金額。

使用者流程

  1. 點擊「注單」Tab → 若未登入彈出登入提示,登入後進入
  2. 頁面頂部有「體育」/「遊戲」切換
  3. 體育注單:
    • 頂部時間篩選(今天/昨天/7天/30天)
    • 三個子 Tab:「未結算」/ 「已結算」/ 「提前結算」
    • 每筆注單顯示:賽事、玩法、賠率、投注額、結算狀態
  4. 遊戲注單(BBNoteViewController):各遊戲渠道的投注記錄
  5. 未結算注單操作:
    • 點擊「提前結算」→ 取得可結算金額
    • 彈出確認視窗(STCashOutSettlementAlert
    • 確認後呼叫結算 API

頁面跳轉

  • 點擊「注單」Tab → 注單首頁(需登入)
  • 注單 → 遊戲注單詳情 → BBNoteDetailViewController
  • 點擊注單中的賽事 → STEventDetailViewController(賽事詳情)

技術視角(開發看這裡)

相關檔案

類型檔案路徑
Base Content VC/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/ContainControllers/Base/BetSettleContentController.swift
FB 未結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/UnSettle/FBUnSettleViewController.swift
FB 已結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/FBSettledViewController.swift
FB 提前結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/ABSettle/FBABSettleViewController.swift
UP 未結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/UnSettle/UPUnSettleViewController.swift
UP 已結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/UPSettledViewController.swift
UP 提前結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/ABSettle/UPABSettleViewController.swift
DB 未結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/UnSettle/DBUnSettleViewController.swift
DB 已結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/DBSettledViewController.swift
DB 已結算 Content/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/DBSettledContentViewController.swift
DB Contain/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/ContainControllers/ContainController/DBSettleContentViewController.swift
LiveGame 未結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/UnSettle/LiveGameUnSettleViewController.swift
LiveGame 已結算/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/LiveGameSettledViewController.swift
LiveGame 已結算 Content/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/LiveGameSettledContentViewController.swift
LiveGame Contain/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/ContainControllers/ContainController/LiveGameSettleContentViewController.swift
遊戲注單 VC/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/C/BBNoteViewController.swift
遊戲注單詳情/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/C/BBNoteDetailViewController.swift
TableView Adapter/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/TableViewAdapter/SettleTableViewAdapter.swift
提前結算警告框/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STCashOutSettlementAlert.swift
Model(FB 結算)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/ST/FBSettleModel.swift
Service(快取)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/Service/BetSettleDataCacheManager.swift
Service(日誌)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/Service/BetSettleLogManager.swift
ViewController(側邊欄)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/ContainControllers/Base/BetSettleSideViewController.swift
ViewController(FB Contain)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/ContainControllers/ContainController/FBSettleContentViewController.swift
ViewController(UP Contain)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/ContainControllers/ContainController/UPSettleContentViewController.swift
ViewController(FB 提前結算 Content)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/ABSettle/FBABSettledContentViewController.swift
ViewController(UP 提前結算 Content)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/ABSettle/UPABSettledContentViewController.swift
ViewController(FB 已結算 Content)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/FBSettledContentViewController.swift
ViewController(UP 已結算 Content)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Settle Controllers/Settled/UPSettledContentViewController.swift
Model(注單狀態)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/BetSettleStatus.swift
Model(DB 結算)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/DB/DBSettleModel.swift
Model(FB 提前結算狀態)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/ST/FBABSettleStatus.swift
Model(FB CashOut 狀態)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/ST/FBCashOutStatus.swift
Model(FB CashOut 設定)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/ST/FBCashoutConfig.swift
Model(FB CashOut 列表)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/ST/FBSettleCashOutListModel.swift
Model(結算統計)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/Model/ST/SettleTotalModel.swift
View(提前結算操作)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/BetSettleEarlyActionView.swift
View(注單 Header)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/BetSettleHeaderView.swift
View(預約中操作)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/BetSettleReservingActionView.swift
View(容器 Header 內容)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/ContainerHeader/HomeSettledContentView.swift
View(容器 Header 標題樣式)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/ContainerHeader/HomeSettledTitleStyle.swift
View(容器 Header 標題)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/ContainerHeader/HomeSettledTitleView.swift
View(雙層按鈕)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/DoubleLayerButton.swift
View(DB 提前結算彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/DB/DBEarlySettlementAlert.swift
View(結算鍵盤)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STBetSettleKeyboardView.swift
View(CashOut 確認彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STCashOutSettlementConfrimAlert.swift
ViewController(提前結算彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STEarlySettlementAlertCtrl.swift
ViewController(提前結算確認彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STEarlySettlementConfirmAlertCtrl.swift
View(提前結算詳情彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STEarlySettlementDetailAlert.swift
View(串關 CashOut 結算彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STSeriesCashOutSettlementAlert.swift
View(滑桿)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/STSliderView.swift
View(結算金額輸入框)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/EarlySettlementAlert/ST/SettleAmoutTextField.swift
View(Header 選單)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/HeaderView/BetHeaderMenuView.swift
View(日期篩選)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/HeaderView/BetSettleSportDateView.swift
Cell(串關注單)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/SeriesBetCell/SettleComboBetCell.swift
View(串關 Header)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/SeriesBetCell/SettleSeriesPassHeaderView.swift
View(分享)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/ShareView.swift
View(單關 Footer)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/SingleBetCell/SettleFooterView.swift
View(單關 Header)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/SingleBetCell/SettleHeaderView.swift
Cell(單關注單)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/SingleBetCell/SettleSingleBetCell.swift
Adapter Extension(DB)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/TableViewAdapter/SettleTableViewAdapter+DB.swift
Adapter Extension(FB)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/TableViewAdapter/SettleTableViewAdapter+FB.swift
Adapter Extension(LiveGame)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/TableViewAdapter/SettleTableViewAdapter+LiveGame.swift
Adapter Extension(UP)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/General/View/TableViewAdapter/SettleTableViewAdapter+UP.swift
View(注單通知列表)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/Notice/View/BetSettleNoticeListView.swift
ViewModel(注單通知)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/Sport/Notice/ViewModel/BetNoticeViewModel.swift
Model(遊戲渠道投注)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/M/BBBetByChannelModel.swift
Model(遊戲投注列表)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/M/BBBetGameListModel.swift
Model(遊戲項目資訊)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/M/BBGameItemInformation.swift
View(日期選擇)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/V/BBDataSelectView.swift
View(遊戲注單內容)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/V/BBGameNoteContentView.swift
Cell(遊戲注單)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/V/BBNoteCell.swift
Cell(遊戲注單詳情)/Users/user/Work/bbsport-new/BBSport/Tab/注单/BetHistory/BBGame/V/BBNoteDetailCell.swift
API(FB 提前結算詢價)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/Settle/FBSportAPI+AskAmountDataRequest.swift
API(FB 取消預約提前結算)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/Settle/FBSportAPI+CancelReserveCashOutRequest.swift
API(FB 提前結算狀態列表)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/Settle/FBSportAPI+EarlySettlementStutasListRequest.swift
API(FB 預約投注列表)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/Settle/FBSportAPI+ReserveBetListRequest.swift
API(FB 預約提前結算)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/Settle/FBSportAPI+ReserveCashOutRequest.swift
API(FB 注單列表)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/Settle/FBSportAPI+SettleListRequest.swift
API(FB 提交提前結算)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/Settle/FBSportAPI+SubmitCashOutRequest.swift
API(UP 提前結算詢價)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/Settle/UPSportAPI+AskAmountDataRequest.swift
API(UP 取消預約提前結算)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/Settle/UPSportAPI+CancelReserveCashOutRequest.swift
API(UP 提前結算狀態列表)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/Settle/UPSportAPI+EarlySettlementStutasListRequest.swift
API(UP 預約投注列表)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/Settle/UPSportAPI+ReserveBetListRequest.swift
API(UP 預約提前結算)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/Settle/UPSportAPI+ReserveCashOutRequest.swift
API(UP 注單列表)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/Settle/UPSportAPI+SettleListRequest.swift
API(UP 提交提前結算)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/Settle/UPSportAPI+SubmitCashOutRequest.swift
API(DB 提前結算詳情)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Settlement/DBSportAPI+EarlySettleDetailRequest.swift
API(DB 提前結算狀態列表)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Settlement/DBSportAPI+EarlySettlementStutasListRequest.swift
API(DB 提前結算)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Settlement/DBSportAPI+PreSettleRequest.swift
API(DB 注單列表)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Settlement/DBSportAPI+SettlementListRequest.swift
Manager(體育資料中心)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SportDataManager.swift
Manager Extension(DB)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SportDataManager+DB.swift
Model(注單日期樣式)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/BetSettleDateStyle.swift
Model(冠軍列表)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/Champion/ChampionListModel.swift
Model(DB 提前結算詳情)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/DBEarlySettleDetailModel.swift
Service Extension(DB 結算請求)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/DBSettleService+request.swift
Service(DB 結算)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/DBSettleService.swift
Model(OB 分類)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBCategoryModel.swift
Decoder(OB 資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBDataDecoder.swift
Manager Extension(OB 詳情)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBDataManager+Detail.swift
Manager Extension(OB 比分)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBDataManager+ScoreHandler.swift
Manager Extension(OB 使用者)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBDataManager+User.swift
Manager(OB 資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBDataManager.swift
Manager Extension(OB 列表)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBDataManger+List.swift
Model(OB Domain)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBDomainModel.swift
Enum(OB 列舉)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBEnum.swift
Model(OB 賽事)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBEventModel.swift
Model(OB 聯賽日期回應)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBLeagueResponsDateModel.swift
Model(OB 賠率資訊)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBOddInfoModel.swift
Model(OB 回應)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/DB/OBResponseModel.swift
Model(賽事詳情 Models)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/EventDetailModels.swift
Service Extension(FB 結算請求)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/FBSettleService+request.swift
Service(FB 結算)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/FBSettleService.swift
Manager Extension(ST 詳情)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/STDataManager+Detail.swift
Manager Extension(ST 列表)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/STDataManager+List.swift
Manager(ST 資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/STDataManager.swift
Model(ST 賽事詳情)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/STEventDetailModel.swift
Model(ST 賽事)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/STEventModel.swift
Manager(ST 語言)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/STLanguageManager.swift
Enum(ST 體育列舉)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/FB/STSportEnum.swift
Manager(LS 雷速資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/LS/LSDataManager.swift
Model(LS 球類技術統計)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/LS/M/LSBallTechniqueModel.swift
Model(LS 情報設定)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/LS/M/LSIntelligenceConfigModel.swift
Model(LS 陣容資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/LS/M/LSLineupDataModel.swift
Model(LS 即時資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/LS/M/LSRealTimeDataModel.swift
Service(LiveGame 結算)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/LiveGameSettle/LiveGameSettleService.swift
Model(專家方案投注區塊)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/Node/ExpertPlanBetSectionModel.swift
Model(金幣商城餘額)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/Node/GlodmallBalanceModel.swift
Manager(Node 資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/Node/NodeDataManager.swift
Model(推送訂單)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/Node/PushOrdersModel.swift
Manager(PXDD 資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/PXDD/PXDDDataManager.swift
Model(注單結算)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SettleModel/BetSettleModel.swift
Model(注單結算選項)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SettleModel/BetSettleSelectionsModel.swift
Model(注單結算類型)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SettleModel/BetSettleType.swift
Model(注單已結算狀態)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SettleModel/BetSettledStatus.swift
Model(注單結算進度狀態)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SettleModel/BetSettlementStatus.swift
Model(體育選單)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/SportMenuModel.swift
Manager Extension(UP 詳情)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/UP/UPDataManager+Detail.swift
Manager Extension(UP 列表)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/UP/UPDataManager+List.swift
Manager(UP 資料)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/UP/UPDataManager.swift
Service Extension(UP 結算請求)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/UP/UPSettleService+request.swift
Service(UP 結算)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportDataManager/UP/UPSettleService.swift
Manager Extension(網路-詳情)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportNetworkManager/SportNetworkManager+Detail.swift
Manager Extension(網路-Host)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportNetworkManager/SportNetworkManager+Host.swift
Manager(體育網路)/Users/user/Work/bbsport-new/BBSport/STUIKit/STSportCoreDataCenter/SportNetworkManager/SportNetworkManager.swift

路徑前綴皆為 /Users/user/Work/bbsport-new/BBSport

API

FB 極速體育(FBSportAPI)

功能說明EndpointMethod
注單列表(未結算/已結算)v1/order/new/bet/listPOST
提前結算詢價v1/order/cashOut/pricePOST
提交提前結算v1/order/cashOut/betPOST
提前結算狀態查詢v1/order/getCashOutsByIdsPOST
預約提前結算v1/order/cashOutReserve/betPOST
取消預約提前結算v1/order/cashOutReserve/cancelPOST
預約投注列表v1/order/new/reserve/betListPOST

UP 雷速體育(UPSportAPI)

功能說明EndpointMethod
注單列表(未結算/已結算)v1/order/new/bet/listPOST
提前結算詢價v1/order/cashOut/pricePOST
提交提前結算v1/order/cashOut/betPOST
提前結算狀態查詢v1/order/getCashOutsByIdsPOST
預約提前結算v1/order/cashOutReserve/betPOST
取消預約提前結算v1/order/cashOutReserve/cancelPOST
預約投注列表v1/order/new/reserve/betListPOST

FB 與 UP 的 API path 完全相同,差別在於 base URL 不同(分別走 FBSportAPIRequestUPSportAPIRequest)。

DB OB體育(DBSportAPI)

功能說明EndpointMethod
注單列表yewu13/v1/betOrder/client/getOrderListV3POST
提前結算(預結算)yewu13/v1/betOrder/orderPreSettlePOST
提前結算狀態查詢yewu13/v1/betOrder/queryOrderPreSettleConfirmGET
提前結算詳情yewu13/v1/betOrder/client/getPreSettleOrderDetailGET

DB 平台無預約提前結算相關 API(無 ReserveCashOut / ReserveBetList)。

LiveGame 骰寶

LiveGame 無獨立 API 目錄,注單資料複用 FB 或 DB 的 API 介面。

資料模型

FBSettleModel(注單記錄)

欄位型別說明
idString訂單 ID
sertInt投注類型(0=單投, 1=串關)
btString投注類型描述(例: 3x1*3)
bnInt總 bet 數
alInt總關數
svInt串幾關
satDecimal投注本金
saDecimal結算金額
copsDecimal提前結算返還金額
mwaDecimal最大可贏額(不含本金)
lwaDecimal剩餘可贏額
mlaDecimal未結算可贏額(含本金)
stInt注單狀態(0:建立 1:確認中 2:已確認 3:已拒絕 4:取消 5:已結算)
rstSTSettleReserveType預約狀態(0:預約中 1:成功 2:失敗 3:取消)
abBool是否為預約投注
stmDouble結算時間
cteDouble接單時間
cocInt已提前結算次數
isCanCashoutBool是否可提前結算(依商戶設定計算)
isCanAppointmentCashoutBool是否可預約提前結算(依商戶設定計算)
isHasEarlySettleHistoryBool是否有提前結算歷史
earlySettleReturnDecimal部分提前結算返還額
earlySettleTotalStakeDecimal部分提前結算本金
ops[OPS]投注選項集合
crl[Crl]提前結算歷史記錄
rcool[Rcool]預約提前結算歷史記錄

OPS(投注選項)

欄位型別說明
te[TE]球隊資訊(TE.na=名稱, TE.id=ID)
sidInt運動 ID
midInt比賽 ID
mnString比賽名稱
lnString聯賽名稱
btDouble開賽時間
rsString賽果比分
odDecimal歐盤賠率
boString下注時賠率
ofOddsType賠率類型(1:歐盤 2:香港盤 3:馬來盤 4:印尼盤)
srInt注單狀態
mtyInt盤口類型
mgnString玩法名稱
onmString投注玩法
onString選項類型名稱
liString玩法對應的具體值
ipBool是否滾球(0=非滾球, 1=滾球)
crString取消原因
reString備註
tyInt下注類型
mridIntMarket ID
mtpIntMarket type
bscString比分(經 finalScoreText 解析)

Crl(提前結算記錄)

欄位型別說明
idString提前結算 ID
oidString訂單 ID
ctDouble提前結算時間
cstDecimal提前結算本金
copsDecimal提前結算派獎金額
stInt狀態(0:建立 1:確認中 2:已確認 3:已拒絕 4:取消 5:已結算)

Rcool(預約 CashOut 記錄)

欄位型別說明
idString預約 ID
ctDouble時間
cstDecimalCashOut 本金
copsDecimalCashOut 結算返還
unpsDecimal單筆提前結算返還
stInt狀態(同 Crl.st)

Sts(多幣種統計)

欄位型別說明
cidInt幣種 ID
ctInt訂單數
saDecimal投注金額
paDecimal返還額
cwlDecimal輸贏

各平台子 Tab 組成

平台未結算 VC已結算 VC提前結算 VC
FB 極速體育FBUnSettleViewControllerFBSettledViewControllerFBABSettleViewController
DB OB體育DBUnSettleViewControllerDBSettledViewController-
UP 雷速體育UPUnSettleViewControllerUPSettledViewControllerUPABSettleViewController
LiveGame 骰寶LiveGameUnSettleViewControllerLiveGameSettledViewController-

各平台功能差異對照表

功能FB 極速體育UP 雷速體育DB OB體育LiveGame 骰寶
未結算注單
已結算注單
提前結算(CashOut)✓(PreSettle)-
提前結算 Tab(ABSettle)--
預約提前結算--
預約投注列表--
取消預約提前結算--
獨立 API 體系✓(v1/order/...)✓(v1/order/...)✓(yewu13/v1/betOrder/...)-(複用其他平台)

備註:FB 與 UP 的 API 路徑完全一致,僅 base URL 不同。DB 使用完全不同的 API 路徑體系(yewu13 前綴),且不支援預約提前結算。LiveGame 無獨立結算 API,也無提前結算功能。

實作重點

  1. 分頁載入FBSettledViewController 使用 MJRefresh 下拉刷新 + 上拉載入更多;currentPage 刷新時重置為 1

  2. 注單重新載入觸發:監聽 STNotify.fbRefreshSettlementBetListreloadTableView()viewDidAppear 時也會自動重新請求

  3. 提前結算流程:點擊「提前結算」→ 先詢價(AskAmountDataRequest)→ 顯示可結算金額 → 使用者確認 → 呼叫結算 API → 成功後刷新列表

  4. TableView Adapter 模式SettleTableViewAdapter 作為基底,各平台透過 Extension 擴展(+FB, +DB, +UP, +LiveGame

  5. 快取管理(BetSettleDataCacheManager):快取上次請求的注單資料,切換平台 Tab 時優先顯示快取,背景更新

  6. 提前結算可用性判斷FBSettleModel.init(from:) 中根據商戶設定(merchantDetailModel)動態計算 isCanCashoutisCanAppointmentCashout,區分單投/串關各有不同開關(co/boc vs pco/pbc),並檢查已結算次數 coc 是否達上限


API 呼叫流程

未結算頁面 (FBUnSettleViewController / UPUnSettleViewController)

viewDidAppear → reloadTableView()
  └─ fetchSettleList(type: .unSettlement)
     ├─ [並行 1] POST v1/order/new/bet/list
     │  {isSettled: false, size: 200, languageType: "CMN"}

     └─ [並行 2] POST v1/order/cashOut/price
        {orderIds: [上一步的訂單ID]}
        → 回傳 pr[]{oid, amt, st} + mxc (最大兌現次數)
     
     └─ 兩者完成後合併 → fbUnSettlements.accept() / upUnSettlements.accept()

未結算頁面 (DBUnSettleViewController)

viewDidAppear → reloadTableView()
  └─ POST yewu13/v1/betOrder/client/getOrderListV3
     {orderStatus: 0, page: 1, size: 200, timeType: 4}
     → dbUnSettlements.accept()
     (DB 不額外請求兌現價格)

已結算頁面 (FBSettledViewController / UPSettledViewController)

viewDidAppear → reloadTableView()
  └─ POST v1/order/new/bet/list
     {isSettled: true, startTime: "...", endTime: "...", current: 1, size: 50}
     → 依日期篩選: today / yesterday / week

已結算頁面 (DBSettledViewController)

viewDidAppear → reloadTableView()
  └─ POST yewu13/v1/betOrder/client/getOrderListV3
     {orderStatus: 1, page: 1, size: 200, timeType: 1}
     timeType: 1=今天, 2=昨天, 3=本週
     (失敗 code "0401038"/"503" → 最多重試 2 次,間隔 0.5s)

提前兌現 (Cash Out)

用戶點擊「提前結算」
  ├─ FB/UP 即時兌現:
  │  └─ [API 1] POST v1/order/cashOut/bet
  │     {orderId, cashOutTime, cashOutStake, unitCashOutPayoutStake, parlay}
  │     └─ 成功 → 每 5 秒輪詢結果
  │        └─ [API 2] POST v1/order/getCashOutsByIds {ids: [...]}
  │           └─ orderStatus=settled → 成功 toast
  │           └─ orderStatus=cancelled/failed → 失敗 toast

  ├─ FB/UP 預約兌現:
  │  └─ [API] POST v1/order/cashOutReserve/bet
  │     {orderId, cashOutStake, cashOutPayoutStake, parlay}

  └─ DB 即時兌現:
     └─ [API 1] POST yewu13/v1/betOrder/orderPreSettle
        {orderNo, settleAmount, deviceType:4, frontSettleAmount}
        └─ 每 5 秒輪詢
           └─ [API 2] GET yewu13/v1/betOrder/queryOrderPreSettleConfirm

DB 注單詳情 (提前結算記錄)

用戶查看提前結算歷史
  └─ GET yewu13/v1/betOrder/client/getPreSettleOrderDetail
     {orderNo: "..."}
     → 計算各筆 settleAmount 總和