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