From c1829fe21bd2d80f259cbf2a3481556d0dad09bc Mon Sep 17 00:00:00 2001 From: WrBug Date: Mon, 9 Feb 2026 01:12:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(backtest):=20=E7=BB=93=E7=AE=97=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=B8=82=E5=9C=BA=E5=90=8D=E7=A7=B0=EF=BC=8C=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=9D=9E=E7=BB=88=E6=80=81=E4=BB=BB=E5=8A=A1=203s=20?= =?UTF-8?q?=E8=BD=AE=E8=AF=A2=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 结算记录: WIN/LOSE/UNKNOWN/CLOSED 通过 marketService.getMarket 写入 marketTitle - 回测列表: 存在 PENDING/RUNNING 时每 3 秒静默刷新列表更新进度,全部终态后停止轮询 Co-authored-by: Cursor --- .../backtest/BacktestExecutionService.kt | 6 +++-- frontend/src/pages/BacktestList.tsx | 22 ++++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/backtest/BacktestExecutionService.kt b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/backtest/BacktestExecutionService.kt index 9bca058..81db5b9 100644 --- a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/backtest/BacktestExecutionService.kt +++ b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/backtest/BacktestExecutionService.kt @@ -554,11 +554,12 @@ class BacktestExecutionService( balance += settlementValue + val marketTitle = marketService.getMarket(position.marketId)?.title ?: "" val settlementTrade = BacktestTrade( backtestTaskId = task.id!!, tradeTime = currentTime, marketId = position.marketId, - marketTitle = "", + marketTitle = marketTitle, side = "SETTLEMENT", outcome = when { settlementPrice == BigDecimal.ONE -> "WIN" @@ -611,11 +612,12 @@ class BacktestExecutionService( balance += settlementValue + val marketTitle = marketService.getMarket(position.marketId)?.title ?: "" val closedTrade = BacktestTrade( backtestTaskId = task.id!!, tradeTime = currentTime, marketId = position.marketId, - marketTitle = "", + marketTitle = marketTitle, side = "SETTLEMENT", outcome = "CLOSED", outcomeIndex = position.outcomeIndex, diff --git a/frontend/src/pages/BacktestList.tsx b/frontend/src/pages/BacktestList.tsx index a9ed723..302765f 100644 --- a/frontend/src/pages/BacktestList.tsx +++ b/frontend/src/pages/BacktestList.tsx @@ -53,9 +53,9 @@ const BacktestList: React.FC = () => { const [detailTradesPage, setDetailTradesPage] = useState(1) const [detailTradesSize] = useState(20) - // 获取回测任务列表 - const fetchTasks = async () => { - setLoading(true) + // 获取回测任务列表(silent 为 true 时不显示 loading,用于轮询刷新) + const fetchTasks = async (silent = false) => { + if (!silent) setLoading(true) try { const request: BacktestListRequest = { leaderId: leaderIdFilter, @@ -69,14 +69,14 @@ const BacktestList: React.FC = () => { if (response.data.code === 0 && response.data.data) { setTasks(response.data.data.list) setTotal(response.data.data.total) - } else { + } else if (!silent) { message.error(response.data.msg || t('backtest.fetchTasksFailed')) } } catch (error) { console.error('Failed to fetch backtest tasks:', error) - message.error(t('backtest.fetchTasksFailed')) + if (!silent) message.error(t('backtest.fetchTasksFailed')) } finally { - setLoading(false) + if (!silent) setLoading(false) } } @@ -84,6 +84,16 @@ const BacktestList: React.FC = () => { fetchTasks() }, [page, statusFilter, leaderIdFilter, sortBy, sortOrder]) + // 存在非终态任务(PENDING/RUNNING)时每 3s 轮询刷新进度 + const hasNonTerminalTask = tasks.some( + (task) => task.status === 'PENDING' || task.status === 'RUNNING' + ) + useEffect(() => { + if (!hasNonTerminalTask) return + const timer = setInterval(() => fetchTasks(true), 3000) + return () => clearInterval(timer) + }, [hasNonTerminalTask, page, statusFilter, leaderIdFilter, sortBy, sortOrder]) + // 刷新 const handleRefresh = () => { fetchTasks()