From 5a1c14a080a3baeae514f3e878d3d5ea0af0490a Mon Sep 17 00:00:00 2001 From: Qyir <13521889462@163.com> Date: Thu, 13 Nov 2025 10:00:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=8D=E7=AB=AF=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/Timer_worker.py | 84 ++++++++++-------------------------- frontend/src/DramaDetail.vue | 4 +- 2 files changed, 25 insertions(+), 63 deletions(-) diff --git a/backend/Timer_worker.py b/backend/Timer_worker.py index dd4235c..f2c947c 100644 --- a/backend/Timer_worker.py +++ b/backend/Timer_worker.py @@ -368,42 +368,19 @@ class DouyinAutoScheduler: yesterday_rank = item["yesterday_data"].get("rank", 0) rank_change = yesterday_rank - rank # 使用当前排名计数器 - # 🔍 从Rankings_management获取详细信息(按日期和mix_name查询) - today_str = datetime.now().strftime('%Y-%m-%d') - management_data = rankings_management_collection.find_one({ - "mix_name": mix_name, - "$or": [ - {"created_at": {"$gte": datetime.strptime(today_str, '%Y-%m-%d'), - "$lt": datetime.strptime(today_str, '%Y-%m-%d') + timedelta(days=1)}}, - {"last_updated": {"$gte": datetime.strptime(today_str, '%Y-%m-%d'), - "$lt": datetime.strptime(today_str, '%Y-%m-%d') + timedelta(days=1)}} - ] - }) - - # 🔑 如果今天没有数据,查询昨天的 Rankings_management(仅用于获取分类字段和锁定状态) - classification_data = None - if not management_data: - # 查询昨天的 Rankings_management - yesterday_start = datetime.strptime(yesterday_str, '%Y-%m-%d') - yesterday_end = yesterday_start + timedelta(days=1) - classification_data = rankings_management_collection.find_one({ - "mix_name": mix_name, - "$or": [ - {"created_at": {"$gte": yesterday_start, "$lt": yesterday_end}}, - {"last_updated": {"$gte": yesterday_start, "$lt": yesterday_end}} - ] - }) - if classification_data: - novel_ids = classification_data.get('Novel_IDs', []) - anime_ids = classification_data.get('Anime_IDs', []) - drama_ids = classification_data.get('Drama_IDs', []) - logging.info(f"📋 今天没有数据,从昨天的 Rankings_management 获取分类: {mix_name}") - logging.info(f" - Novel_IDs: {novel_ids}") - logging.info(f" - Anime_IDs: {anime_ids}") - logging.info(f" - Drama_IDs: {drama_ids}") - logging.info(f" - last_updated: {classification_data.get('last_updated')}") + # 🔍 从Rankings_management获取详细信息(按mix_id查询,因为管理数据库每个短剧只有一条记录) + mix_id = video.get("mix_id", "").strip() + management_data = None + + if mix_id: + # 直接按mix_id查询,不需要按日期查询 + management_data = rankings_management_collection.find_one({"mix_id": mix_id}) + if management_data: + logging.info(f"📋 从 Rankings_management 获取数据: {mix_name} (mix_id: {mix_id})") else: - logging.warning(f"⚠️ 今天和昨天都没有数据: {mix_name}") + logging.warning(f"⚠️ 未找到管理数据: {mix_name} (mix_id: {mix_id})") + else: + logging.warning(f"⚠️ mix_id 为空: {mix_name}") ranking_item = { # 🎯 核心榜单字段 @@ -435,35 +412,20 @@ class DouyinAutoScheduler: "realtime_saved": management_data.get("realtime_saved", True) if management_data else True, "created_at": management_data.get("created_at") if management_data else None, "last_updated": management_data.get("last_updated") if management_data else None, - # 🎬 评论总结字段 + # 🎬 评论总结字段:直接从管理数据库获取(按mix_id查询) "comments_summary": management_data.get("comments_summary", "") if management_data else "", - # 🔑 分类字段:区分今天数据和历史数据 - # - 如果今天有数据:从今天的数据获取所有字段 - # - 如果今天没有数据:只从历史记录获取分类字段和锁定状态,其他字段为空 - # 注意:使用 .get() 的第二个参数确保即使字段不存在也会返回空字符串 - "Manufacturing_Field": (management_data.get("Manufacturing_Field", "") if management_data else "") or "", - "Copyright_field": (management_data.get("Copyright_field", "") if management_data else "") or "", - "classification_type": (management_data.get("classification_type", "") if management_data else "") or "", # 新增:类型/元素(确保字段存在) - "release_date": (management_data.get("release_date", "") if management_data else "") or "", # 新增:上线日期(确保字段存在) - "Novel_IDs": ( - management_data.get("Novel_IDs", []) if management_data - else (classification_data.get("Novel_IDs", []) if classification_data else []) - ), - "Anime_IDs": ( - management_data.get("Anime_IDs", []) if management_data - else (classification_data.get("Anime_IDs", []) if classification_data else []) - ), - "Drama_IDs": ( - management_data.get("Drama_IDs", []) if management_data - else (classification_data.get("Drama_IDs", []) if classification_data else []) - ), + # 🔑 分类字段:直接从管理数据库获取(按mix_id查询,每个短剧只有一条记录) + "Manufacturing_Field": management_data.get("Manufacturing_Field", "") if management_data else "", + "Copyright_field": management_data.get("Copyright_field", "") if management_data else "", + "classification_type": management_data.get("classification_type", "") if management_data else "", + "release_date": management_data.get("release_date", "") if management_data else "", + "Novel_IDs": management_data.get("Novel_IDs", []) if management_data else [], + "Anime_IDs": management_data.get("Anime_IDs", []) if management_data else [], + "Drama_IDs": management_data.get("Drama_IDs", []) if management_data else [], - # 🔒 锁定状态:同样区分今天数据和历史数据 - "field_lock_status": ( - management_data.get("field_lock_status", {}) if management_data - else (classification_data.get("field_lock_status", {}) if classification_data else {}) - ), + # 🔒 锁定状态:直接从管理数据库获取 + "field_lock_status": management_data.get("field_lock_status", {}) if management_data else {}, # 📊 时间轴对比数据(重要:包含播放量差值) "timeline_data": { diff --git a/frontend/src/DramaDetail.vue b/frontend/src/DramaDetail.vue index 7fffb14..1fc0a68 100644 --- a/frontend/src/DramaDetail.vue +++ b/frontend/src/DramaDetail.vue @@ -253,12 +253,12 @@ onMounted(() => { .card { display: flex; flex-direction: column; - border-radius: 16px; + border-radius: 0; overflow: hidden; background: #f3f4f6; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); width: 100%; - max-width: 448px; + max-width: 428px; } .header {