feat(backtest): 结算显示市场名称,列表非终态任务 3s 轮询进度
- 结算记录: WIN/LOSE/UNKNOWN/CLOSED 通过 marketService.getMarket 写入 marketTitle - 回测列表: 存在 PENDING/RUNNING 时每 3 秒静默刷新列表更新进度,全部终态后停止轮询 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+4
-2
@@ -554,11 +554,12 @@ class BacktestExecutionService(
|
|||||||
|
|
||||||
balance += settlementValue
|
balance += settlementValue
|
||||||
|
|
||||||
|
val marketTitle = marketService.getMarket(position.marketId)?.title ?: ""
|
||||||
val settlementTrade = BacktestTrade(
|
val settlementTrade = BacktestTrade(
|
||||||
backtestTaskId = task.id!!,
|
backtestTaskId = task.id!!,
|
||||||
tradeTime = currentTime,
|
tradeTime = currentTime,
|
||||||
marketId = position.marketId,
|
marketId = position.marketId,
|
||||||
marketTitle = "",
|
marketTitle = marketTitle,
|
||||||
side = "SETTLEMENT",
|
side = "SETTLEMENT",
|
||||||
outcome = when {
|
outcome = when {
|
||||||
settlementPrice == BigDecimal.ONE -> "WIN"
|
settlementPrice == BigDecimal.ONE -> "WIN"
|
||||||
@@ -611,11 +612,12 @@ class BacktestExecutionService(
|
|||||||
|
|
||||||
balance += settlementValue
|
balance += settlementValue
|
||||||
|
|
||||||
|
val marketTitle = marketService.getMarket(position.marketId)?.title ?: ""
|
||||||
val closedTrade = BacktestTrade(
|
val closedTrade = BacktestTrade(
|
||||||
backtestTaskId = task.id!!,
|
backtestTaskId = task.id!!,
|
||||||
tradeTime = currentTime,
|
tradeTime = currentTime,
|
||||||
marketId = position.marketId,
|
marketId = position.marketId,
|
||||||
marketTitle = "",
|
marketTitle = marketTitle,
|
||||||
side = "SETTLEMENT",
|
side = "SETTLEMENT",
|
||||||
outcome = "CLOSED",
|
outcome = "CLOSED",
|
||||||
outcomeIndex = position.outcomeIndex,
|
outcomeIndex = position.outcomeIndex,
|
||||||
|
|||||||
@@ -53,9 +53,9 @@ const BacktestList: React.FC = () => {
|
|||||||
const [detailTradesPage, setDetailTradesPage] = useState(1)
|
const [detailTradesPage, setDetailTradesPage] = useState(1)
|
||||||
const [detailTradesSize] = useState(20)
|
const [detailTradesSize] = useState(20)
|
||||||
|
|
||||||
// 获取回测任务列表
|
// 获取回测任务列表(silent 为 true 时不显示 loading,用于轮询刷新)
|
||||||
const fetchTasks = async () => {
|
const fetchTasks = async (silent = false) => {
|
||||||
setLoading(true)
|
if (!silent) setLoading(true)
|
||||||
try {
|
try {
|
||||||
const request: BacktestListRequest = {
|
const request: BacktestListRequest = {
|
||||||
leaderId: leaderIdFilter,
|
leaderId: leaderIdFilter,
|
||||||
@@ -69,14 +69,14 @@ const BacktestList: React.FC = () => {
|
|||||||
if (response.data.code === 0 && response.data.data) {
|
if (response.data.code === 0 && response.data.data) {
|
||||||
setTasks(response.data.data.list)
|
setTasks(response.data.data.list)
|
||||||
setTotal(response.data.data.total)
|
setTotal(response.data.data.total)
|
||||||
} else {
|
} else if (!silent) {
|
||||||
message.error(response.data.msg || t('backtest.fetchTasksFailed'))
|
message.error(response.data.msg || t('backtest.fetchTasksFailed'))
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to fetch backtest tasks:', error)
|
console.error('Failed to fetch backtest tasks:', error)
|
||||||
message.error(t('backtest.fetchTasksFailed'))
|
if (!silent) message.error(t('backtest.fetchTasksFailed'))
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false)
|
if (!silent) setLoading(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,6 +84,16 @@ const BacktestList: React.FC = () => {
|
|||||||
fetchTasks()
|
fetchTasks()
|
||||||
}, [page, statusFilter, leaderIdFilter, sortBy, sortOrder])
|
}, [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 = () => {
|
const handleRefresh = () => {
|
||||||
fetchTasks()
|
fetchTasks()
|
||||||
|
|||||||
Reference in New Issue
Block a user