From 24756192281779a3006fd66115424d74760d15d9 Mon Sep 17 00:00:00 2001 From: dmy Date: Thu, 22 Jan 2026 14:15:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=88=AC=E8=99=AB?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0=E4=B8=AD=E7=9A=84=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在爬虫状态列中增加"正在更新"状态显示,并在爬虫过程中更新状态 --- frontend/src/components/CrawlInfo.vue | 15 +++++++-- src/crawler/crawler.controller.ts | 10 ++++++ src/crawler/services/bid-crawler.service.ts | 34 +++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) 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}`, + ); + } + } }