fix: 存库前先标记 keyword_matched,修复历史数据全为 false 的问题
pipeline 原来先存库再过滤,导致 keyword_matched 永远是 False。 改为先标记再存库,最新公告查询才能正确区分两个来源。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -20,24 +20,28 @@ class PostCrawlPipeline:
|
|||||||
if config.dedup_enabled:
|
if config.dedup_enabled:
|
||||||
announcements = dedup_by_hash(announcements)
|
announcements = dedup_by_hash(announcements)
|
||||||
|
|
||||||
# 2. Store to database
|
# 2. 先标记 keyword_matched,再存库
|
||||||
|
if config.filter_enabled and config.keywords:
|
||||||
|
for a in announcements:
|
||||||
|
a["keyword_matched"] = self._match_keywords(a, config.keywords)
|
||||||
|
|
||||||
|
# 3. Store to database
|
||||||
stored = await self._save_to_db(announcements)
|
stored = await self._save_to_db(announcements)
|
||||||
result.stored = stored
|
result.stored = stored
|
||||||
|
|
||||||
to_notify = announcements
|
to_notify = announcements
|
||||||
|
|
||||||
# 3. Filter
|
# 4. Filter
|
||||||
if config.filter_enabled and config.keywords:
|
if config.filter_enabled and config.keywords:
|
||||||
before = len(to_notify)
|
before = len(to_notify)
|
||||||
to_notify = [a for a in to_notify
|
to_notify = [a for a in to_notify if a.get("keyword_matched")]
|
||||||
if self._match_keywords(a, config.keywords)]
|
|
||||||
result.filtered = before - len(to_notify)
|
result.filtered = before - len(to_notify)
|
||||||
|
|
||||||
# 4. Skip already-notified
|
# 5. Skip already-notified
|
||||||
if to_notify:
|
if to_notify:
|
||||||
to_notify = await self._exclude_sent(to_notify)
|
to_notify = await self._exclude_sent(to_notify)
|
||||||
|
|
||||||
# 5. Notify
|
# 6. Notify
|
||||||
if config.notify_mode == "all":
|
if config.notify_mode == "all":
|
||||||
result.notified = await self._send_notifications(to_notify)
|
result.notified = await self._send_notifications(to_notify)
|
||||||
elif config.notify_mode == "filtered":
|
elif config.notify_mode == "filtered":
|
||||||
@@ -46,7 +50,7 @@ class PostCrawlPipeline:
|
|||||||
elif not config.filter_enabled:
|
elif not config.filter_enabled:
|
||||||
result.notified = await self._send_notifications(to_notify)
|
result.notified = await self._send_notifications(to_notify)
|
||||||
|
|
||||||
# 6. Mark sent
|
# 7. Mark sent
|
||||||
if config.mark_sent and result.notified > 0:
|
if config.mark_sent and result.notified > 0:
|
||||||
await self._mark_sent(to_notify)
|
await self._mark_sent(to_notify)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user