diff --git a/frontend/src/components/CrawlInfo.vue b/frontend/src/components/CrawlInfo.vue index af9df8e..f9a73d3 100644 --- a/frontend/src/components/CrawlInfo.vue +++ b/frontend/src/components/CrawlInfo.vue @@ -24,9 +24,20 @@ {{ formatDateTime(row.latestPublishDate) }} - + diff --git a/src/crawler/crawler.controller.ts b/src/crawler/crawler.controller.ts index 2fb8dbc..ebcafb4 100644 --- a/src/crawler/crawler.controller.ts +++ b/src/crawler/crawler.controller.ts @@ -49,7 +49,17 @@ export class CrawlerController { this.crawlingSources.add(sourceName); try { + // 设置状态为正在更新(count = -1) + await this.crawlerService.updateCrawlStatus(sourceName, -1); + const result = await this.crawlerService.crawlSingleSource(sourceName); + + // 更新状态为实际数量 + await this.crawlerService.updateCrawlStatus( + sourceName, + result.success ? result.count : 0, + ); + return result; } finally { this.crawlingSources.delete(sourceName); diff --git a/src/crawler/services/bid-crawler.service.ts b/src/crawler/services/bid-crawler.service.ts index 7e6526e..1267332 100644 --- a/src/crawler/services/bid-crawler.service.ts +++ b/src/crawler/services/bid-crawler.service.ts @@ -430,4 +430,38 @@ export class BidCrawlerService { ); } } + + // 更新爬虫状态,count = -1 表示正在更新 + async updateCrawlStatus(source: string, count: number) { + try { + // 使用原生查询实现 upsert 逻辑 + await this.crawlInfoRepository.manager.transaction( + async (manager) => { + // 检查记录是否存在 + const existing = await manager.findOne(CrawlInfoAdd, { + where: { source }, + }); + + if (existing) { + // 更新现有记录 + await manager.update(CrawlInfoAdd, { source }, { count }); + } else { + // 插入新记录 + await manager.save(CrawlInfoAdd, { + source, + count, + latestPublishDate: null, + error: null, + }); + } + }, + ); + this.logger.log(`Updated crawl status for ${source}: ${count}`); + } catch (err) { + const errorMessage = err instanceof Error ? err.message : String(err); + this.logger.error( + `Failed to update crawl status for ${source}: ${errorMessage}`, + ); + } + } }