Conversation
- 添加 lastActivityTime 变量记录最后一次收到 activity 消息的时间 - 实现 startActivityTimeoutCheck() 方法,每30秒检查一次消息接收情况 - 如果超过30秒未收到 activity 消息,自动触发 WebSocket 重连 - 在订阅成功后自动启动超时检测任务 - 在 stop() 方法中正确清理检测任务资源
- 创建 PolymarketConstants 常量类,集中管理所有 Polymarket API URL - 更新所有服务类,将配置注入改为使用常量: * ApiHealthCheckService: 移除配置注入,使用常量 * RetrofitFactory: 移除 CLOB 和 Gamma API URL 配置注入 * RelayClientService: 移除 Builder Relayer URL 配置注入 * BlockchainService: 移除 Data API URL 配置注入 * PolymarketApiKeyService: 移除 CLOB API URL 配置注入 * RetrofitConfig: 移除 CLOB API URL 配置注入 * OrderPushService: 移除 RTDS WebSocket URL 配置注入 * PolymarketActivityWsService: 移除 Activity WebSocket URL 配置注入 * CopyTradingWebSocketService: 移除 User WebSocket URL 配置注入 * PolymarketWebSocketHandler: 移除 RTDS WebSocket URL 配置注入 * UnifiedOnChainWsService: 添加连接状态查询方法 - 从 application.properties 移除相关配置项,添加说明注释 - 完善 API 健康检查,添加缺失的检测项: * Polymarket Activity WebSocket * 链上 WebSocket - 更新相关文档说明
1. 修复 CopyTradingFilterService 中最大仓位金额(maxPositionValue)未生效的问题
- 当只配置了最大仓位金额但未配置 maxSpread 或 minOrderDepth 时,
仓位检查被跳过导致过滤失效
- 将仓位检查移到 needOrderbook 判断之前,确保始终执行仓位检查
2. 修复 OnChainWsService 中交易 receipt 为 JsonNull 时的空指针问题
- 添加 JsonNull 检查,防止解析失败时出现异常
- 增加 receiptRpcResponse.result.isJsonNull 检查 - 防止在链上查询返回 JsonNull 时调用 asJsonObject() 抛出 IllegalStateException - 优化空值处理逻辑,确保程序安全退出
1. 订单详情为 null 且已部分卖出的订单超时清理 - 新增 PARTIAL_SOLD_CLEANUP_WINDOW_MS 常量(1小时) - 超过1小时无法获取详情的已部分卖出订单自动清理 - 避免无效订单长期占用数据库空间 2. 优化买入订单分组排序逻辑 - 按最近买入订单时间排序,提升用户体验 - 修复日志中的错误描述(卖出订单列表) 3. 代码格式化优化
- 订阅消息同时包含 trades 和 orders_matched 两种类型 - 添加 processedTxHashes Cache (LRU 100 条,10 分钟过期) - 防止同一交易被重复处理 - 新增 duplicateTxHashMessages 统计指标 - 更新日志信息,明确标注监听范围
- 创建 ProcessedTradeCleanupService 定时清理过期的去重记录 - 保留时间设置为10分钟(重复订单通常10秒后就不会出现) - 清理间隔为10分钟,避免数据库空间浪费 - 记录清理日志,便于监控和调试
- 在 cleanupExpiredProcessedTrades 方法上添加 @transactional 注解 - 修复 TransactionRequiredException 异常 - 删除操作必须在事务中执行
- 在 CopyOrderTracking 实体添加 source 字段,记录订单来源 - 支持 activity-ws(Polymarket WebSocket)和 onchain-ws(OnChain WebSocket)两种来源 - 更新 processBuyTrade 方法,接收并保存 source 参数 - 更新 OrderStatusUpdateService,保留原始 source 信息 - 添加数据库迁移脚本 V25 - 统一 CopyTradingWebSocketService 使用 activity-ws 作为来源
- 移除多余的空行 - 移除调试日志
将 OrderStatusUpdateService 中 4 个使用 @transactional 的方法从 private 改为 public, 确保 Spring 能够正确代理这些方法。 修改的方法: - cleanupDeletedAccountOrders() - checkAndDeleteUnfilledOrders() - updatePendingSellOrderPrices() - updatePendingBuyOrders() 参考 UserService.kt 的实现模式,@transactional 方法必须是 public 的。
1. 解决 @transactional 自调用问题 - 实现 ApplicationContextAware 接口 - 通过代理对象调用 @transactional 方法,确保事务生效 2. 防止定时任务并发执行 - 添加 updateJob 跟踪上一次任务状态 - 如果上一次任务还在执行,跳过本次执行 - 避免多个更新任务同时运行导致的数据竞争 修改的方法: - updateOrderStatus(): 添加并发控制 - cleanupDeletedAccountOrders(): 通过代理对象调用 - checkAndDeleteUnfilledOrders(): 通过代理对象调用 - updatePendingSellOrderPrices(): 通过代理对象调用 - updatePendingBuyOrders(): 通过代理对象调用
- 添加完整的分页功能,支持移动端和桌面端 - 移动端:自定义分页控件,支持切换每页 10/20/50 条 - 桌面端:使用 Ant Design Table 分页,支持切换每页 10/20/50 条 - 优化仓位统计逻辑,区分当前仓位和历史仓位 - 当前仓位:显示浮动盈亏和已实现盈亏 - 历史仓位:移除盈亏统计显示 - 筛选条件变化时自动重置到第一页
…自调用问题 1. CopyOrderTrackingService 修复 - 实现 ApplicationContextAware 接口 - 添加 getSelf() 方法获取代理对象 - 在 processTrade() 中通过代理调用 processBuyTrade() 和 processSellTrade() - 确保两个子方法的 @transactional 生效 2. CopyTradingService 修复 - 实现 ApplicationContextAware 接口 - 添加 getSelf() 方法获取代理对象 - 在 updateCopyTradingStatus() 中通过代理调用 updateCopyTrading() - 确保内部调用的 @transactional 生效 修改的文件: - CopyOrderTrackingService.kt - CopyTradingService.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
版本信息
变更内容
Bug 修复
1. 修复最大仓位金额未生效的问题⚠️ 重要
maxPositionValue(最大仓位金额)但未配置maxSpread或minOrderDepth时,仓位检查被跳过导致过滤失效needOrderbook判断之前,确保无论是否需要订单簿,都会执行仓位检查backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/configs/CopyTradingFilterService.kt2. 修复交易 receipt 解析问题
JsonNull时,未进行空值检查导致空指针异常JsonNull检查,防止解析失败时出现异常backend/src/main/kotlin/com/wrbug/polymarketbot/service/copytrading/monitor/OnChainWsService.kt优化
新功能
提交记录
测试建议
升级建议
强烈建议合并此版本到 main 分支,特别是使用了最大仓位金额限制功能的用户。
升级后,请重启后端服务以应用修复。