Java 24 / Spring Boot 3.5
前台 API、後台 API、報價任務、訂單任務、成交入庫和模擬支付,都是獨立的 Spring Boot 服務。
StockOffice 把客戶看到的交易平台,和公司內部的結算後台拆開。客戶在前台管理自己的交易賬戶;後台審批客戶、看報表、設定平台利率與存倉費。支付通知由模擬渠道發出,用來走完存款和取款,而不連接真實銀行。
每位客戶有一個客戶號碼,格式是 CU84 加 6 位數字。開戶時會同時開立所有已啟用的交易平台。投資平台用於買賣,儲蓄平台預設只計息、不可買賣。交易賬號是客戶號碼加上平台縮寫,例如 CU84000001_INV。
資金分可用餘額和信用額。電匯存款進入開單時選定的賬戶;信用幣(USDT)在到賬時,存入客戶當前設定的信用幣平台。同一客戶可以在自己的平台賬戶之間即時轉賬。
映像在本機先建好程式再複製進去,容器內不執行 Maven。資料庫遷移只由後台服務在啟動時套用。
開發整套系統所需時間 9 小時,運用了 Claude Opus 5.5 及 Cursor Grok 4.7。
前台 API、後台 API、報價任務、訂單任務、成交入庫和模擬支付,都是獨立的 Spring Boot 服務。
客戶、賬戶、流水、持倉和平台設定存在 MySQL。結構變更用 Flyway,由後台服務負責。
報價和訂單指令走 Kafka。最新報價放在 Redis,報表和頁面讀得到即時買入價、賣出價。
前台、後台和模擬支付都是 Vite 建置的 React 頁面。撮合在記憶體引擎完成,成交再寫回資料庫。
建議先註冊一個新客戶,或使用已生成的模擬客戶。新註冊的客戶要等後台審批,才可以開戶、存款和交易。
打開前台註冊頁。可按「代填測試」填入姓名、電郵和電話,密碼要自己輸入。提交後畫面上會顯示客戶號碼。
後台登入 admin / admin1234,在客戶報表把狀態改為可交易。已生成的模擬客戶 sim01 至 sim30@stockoffice.test 也可登入,密碼同為 admin1234。
前台一次開立全部平台賬戶。電匯或 USDT 由模擬支付頁確認或拒絕。USDT 存入客戶設定的信用幣平台。
只有可交易的平台能買賣。黃金、白銀按實時賣出價計算浮動盈虧。同一客戶的資金可在投資與儲蓄之間轉賬。
每個顯示時區的日曆日結算一次。先按平台每日利率計息,再按存倉費從餘額扣除。餘額不足時會先取消掛單,再按收市買入價平倉。
後台首頁的盈虧是公司角度,客戶賺錢計為公司虧損。其餘報表,包括持倉和客戶明細,都是客戶角度的毛盈虧。
報價優先用人工價,其次抓公開金銀報價,抓不到才用模擬波動。新聞和歷史成交則是另一套來源,不會互相冒充。
報價任務先讀產品上的人工價。沒有人工價時,依序讀取 goldprice.org 的黃金、白銀美元報價,以及 api.gold-api.com。兩者都失敗時,沿上一口中間價做小幅模擬。賣出價是中間價減點差,買入價是中間價加點差。系統只保留最近 7 日的報價,前台走勢圖用的是每小時最後一口。
前台首頁的金銀新聞是整理過的公開報道,每則都連回原文,不是即時爬蟲。模擬客戶和一年成交在 testSql 的 SQL 裡。存款、取款的第三方回調由模擬支付以簽名通知前台,再轉給後台入賬。
前台、後台和模擬支付各自使用獨立網址。主頁負責介紹這三個系統,並連到對應的域名。