From c53fcde5d75891fe30394936be510aab0993f25e Mon Sep 17 00:00:00 2001 From: WrBug Date: Thu, 15 Jan 2026 04:17:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=B7=B2=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BA=A4=E6=98=93=E8=AE=B0=E5=BD=95=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E6=B8=85=E7=90=86=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 ProcessedTradeCleanupService 定时清理过期的去重记录 - 保留时间设置为10分钟(重复订单通常10秒后就不会出现) - 清理间隔为10分钟,避免数据库空间浪费 - 记录清理日志,便于监控和调试 --- .../system/ProcessedTradeCleanupService.kt | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 backend/src/main/kotlin/com/wrbug/polymarketbot/service/system/ProcessedTradeCleanupService.kt diff --git a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/system/ProcessedTradeCleanupService.kt b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/system/ProcessedTradeCleanupService.kt new file mode 100644 index 0000000..ea52491 --- /dev/null +++ b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/system/ProcessedTradeCleanupService.kt @@ -0,0 +1,46 @@ +package com.wrbug.polymarketbot.service.system + +import com.wrbug.polymarketbot.repository.ProcessedTradeRepository +import org.slf4j.LoggerFactory +import org.springframework.scheduling.annotation.Scheduled +import org.springframework.stereotype.Service + +/** + * 已处理交易清理服务 + * 定期清理过期的去重记录 + */ +@Service +class ProcessedTradeCleanupService( + private val processedTradeRepository: ProcessedTradeRepository +) { + + companion object { + private val logger = LoggerFactory.getLogger(ProcessedTradeCleanupService::class.java) + + // 保留时间:1小时(3600000毫秒) + // 说明:重复订单通常10秒后就不会再出现,保留10分钟是为了安全起见 + private const val RETENTION_MS = 600_000L + + // 定时清理间隔:10分钟(600000毫秒) + private const val CLEANUP_INTERVAL_MS = 600_000L + } + + /** + * 定时清理过期记录 + * 每10分钟执行一次 + */ + @Scheduled(fixedDelay = CLEANUP_INTERVAL_MS) + fun cleanupExpiredProcessedTrades() { + try { + val expireTime = System.currentTimeMillis() - RETENTION_MS + val deletedCount = processedTradeRepository.deleteByProcessedAtBefore(expireTime) + + if (deletedCount > 0) { + logger.info("清理过期已处理交易记录: deletedCount=$deletedCount, expireTime=$expireTime") + } + } catch (e: Exception) { + logger.error("清理过期已处理交易记录失败", e) + } + } +} +