From 486313044cf90762e7d7b26e79035385130774f5 Mon Sep 17 00:00:00 2001 From: "qichi.liang" Date: Wed, 7 Jan 2026 20:06:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8E=92=E7=8F=AD?= =?UTF-8?q?=E8=A1=A8=E8=AF=BB=E5=8F=96=E6=97=B6=E7=BC=93=E5=AD=98=E4=BC=98?= =?UTF-8?q?=E5=85=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了缓存优先逻辑,改为每次从飞书获取最新数据 - 每次都覆盖保存到数据库,确保人员变动能及时更新 - 移除了 check_sheet_update 检查(因为飞书表格即使人员变动,版本号也可能不变) --- src/feishu/manager.py | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/src/feishu/manager.py b/src/feishu/manager.py index 2e078d4..09c9cac 100644 --- a/src/feishu/manager.py +++ b/src/feishu/manager.py @@ -114,6 +114,8 @@ class FeishuScheduleManager: """ 获取指定日期的排班信息 + 修复:每次都从飞书获取最新数据并覆盖数据库,确保日报中显示最新排班信息 + 参数: date_str: 日期字符串,格式 "2025-12-30" @@ -135,22 +137,13 @@ class FeishuScheduleManager: logger.info(f"获取 {date_str} 的排班信息 (格式: {target_date_mm_dd}/{target_date_chinese})") - # 1. 首先尝试从数据库获取 - cached_schedule = self.db.get_schedule(date_str) - if cached_schedule: - logger.info(f"从数据库获取 {date_str} 的排班信息") - return self._format_db_result(cached_schedule) - - # 2. 数据库中没有,需要从飞书获取 - logger.info(f"数据库中没有 {date_str} 的排班信息,从飞书获取") - - # 获取表格信息 + # 1. 获取表格信息 sheets = self.client.get_sheets_info() if not sheets: logger.error("未获取到表格信息") return self._empty_result() - # 选择最合适的表格 + # 2. 选择最合适的表格 selected_sheet = self._select_sheet_for_date(sheets, target_year_month) if not selected_sheet: logger.error("未找到合适的表格") @@ -166,23 +159,12 @@ class FeishuScheduleManager: return self._empty_result() values = sheet_data.get('valueRange', {}).get('values', []) - revision = sheet_data.get('revision', 0) if not values: logger.error("表格数据为空") return self._empty_result() - # 4. 检查表格是否有更新 - need_update = self.db.check_sheet_update( - sheet_id, sheet_title, revision, {'values': values} - ) - - if not need_update and cached_schedule: - # 表格无更新,且数据库中有缓存,直接返回 - logger.info(f"表格无更新,使用数据库缓存") - return self._format_db_result(cached_schedule) - - # 5. 解析数据 - 根据表格类型选择合适的日期格式 + # 4. 解析数据 - 根据表格类型选择合适的日期格式 # 如果是年度表格,使用中文日期格式;否则使用mm/dd格式 if '年' in sheet_title and '排班表' in sheet_title: target_date = target_date_chinese # "1月1日" @@ -192,10 +174,12 @@ class FeishuScheduleManager: logger.info(f"使用日期格式: {target_date} 解析表格: {sheet_title}") result = self.parser.parse(values, target_date, sheet_title) - # 6. 保存到数据库 + # 5. 每次都保存到数据库,覆盖旧数据,确保人员变动能及时更新 if result['day_shift'] or result['night_shift']: self.db.save_schedule(date_str, result, sheet_id, sheet_title) - logger.info(f"已保存 {date_str} 的排班信息到数据库") + logger.info(f"已更新 {date_str} 的排班信息到数据库: 白班={result['day_shift']}, 夜班={result['night_shift']}") + else: + logger.warning(f"解析结果为空,{date_str} 未保存到数据库") return result