fix: 修改跟单状态时统一使用 restartMonitoring 确保状态同步

- 创建跟单时:如果启用了,调用 restartMonitoring
- 更新跟单状态时:调用 restartMonitoring(而不是 addLeaderMonitoring/removeLeaderMonitoring)
- 删除跟单时:调用 restartMonitoring(而不是 removeLeaderMonitoring)
- 确保所有跟单状态变更后,轮询监听都能完全同步最新状态
This commit is contained in:
WrBug
2025-12-03 06:41:42 +08:00
parent ea8df61c59
commit 13c5a64dc3
@@ -62,13 +62,13 @@ class CopyTradingService(
val saved = copyTradingRepository.save(copyTrading)
// 如果跟单已启用,启动Leader监听
// 如果跟单已启用,重新启动监听(确保状态完全同步)
if (saved.enabled) {
kotlinx.coroutines.runBlocking {
try {
monitorService.addLeaderMonitoring(saved.leaderId)
monitorService.restartMonitoring()
} catch (e: Exception) {
logger.error("启动Leader监听失败: leaderId=${saved.leaderId}", e)
logger.error("重新启动跟单监听失败", e)
}
}
}
@@ -195,15 +195,14 @@ class CopyTradingService(
val copyTrading = copyTradingRepository.findById(copyTradingId).orElse(null)
?: return Result.failure(IllegalArgumentException("跟单关系不存在"))
val leaderId = copyTrading.leaderId
copyTradingRepository.delete(copyTrading)
// 移除监听(如果该Leader没有其他启用的跟单关系
// 重新启动监听(确保状态完全同步
kotlinx.coroutines.runBlocking {
try {
monitorService.removeLeaderMonitoring(leaderId)
monitorService.restartMonitoring()
} catch (e: Exception) {
logger.error("移除Leader监听失败: leaderId=$leaderId", e)
logger.error("重新启动跟单监听失败", e)
}
}