fix: 修复排班表读取时缓存优先的问题

- 移除了缓存优先逻辑,改为每次从飞书获取最新数据
- 每次都覆盖保存到数据库,确保人员变动能及时更新
- 移除了 check_sheet_update 检查(因为飞书表格即使人员变动,版本号也可能不变)
This commit is contained in:
2026-01-07 20:06:56 +08:00
parent 84e907b93e
commit 486313044c

View File

@@ -114,6 +114,8 @@ class FeishuScheduleManager:
""" """
获取指定日期的排班信息 获取指定日期的排班信息
修复:每次都从飞书获取最新数据并覆盖数据库,确保日报中显示最新排班信息
参数: 参数:
date_str: 日期字符串,格式 "2025-12-30" date_str: 日期字符串,格式 "2025-12-30"
@@ -135,22 +137,13 @@ class FeishuScheduleManager:
logger.info(f"获取 {date_str} 的排班信息 (格式: {target_date_mm_dd}/{target_date_chinese})") logger.info(f"获取 {date_str} 的排班信息 (格式: {target_date_mm_dd}/{target_date_chinese})")
# 1. 首先尝试从数据库获取 # 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} 的排班信息,从飞书获取")
# 获取表格信息
sheets = self.client.get_sheets_info() sheets = self.client.get_sheets_info()
if not sheets: if not sheets:
logger.error("未获取到表格信息") logger.error("未获取到表格信息")
return self._empty_result() return self._empty_result()
# 选择最合适的表格 # 2. 选择最合适的表格
selected_sheet = self._select_sheet_for_date(sheets, target_year_month) selected_sheet = self._select_sheet_for_date(sheets, target_year_month)
if not selected_sheet: if not selected_sheet:
logger.error("未找到合适的表格") logger.error("未找到合适的表格")
@@ -166,23 +159,12 @@ class FeishuScheduleManager:
return self._empty_result() return self._empty_result()
values = sheet_data.get('valueRange', {}).get('values', []) values = sheet_data.get('valueRange', {}).get('values', [])
revision = sheet_data.get('revision', 0)
if not values: if not values:
logger.error("表格数据为空") logger.error("表格数据为空")
return self._empty_result() return self._empty_result()
# 4. 检查表格是否有更新 # 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. 解析数据 - 根据表格类型选择合适的日期格式
# 如果是年度表格使用中文日期格式否则使用mm/dd格式 # 如果是年度表格使用中文日期格式否则使用mm/dd格式
if '' in sheet_title and '排班表' in sheet_title: if '' in sheet_title and '排班表' in sheet_title:
target_date = target_date_chinese # "1月1日" target_date = target_date_chinese # "1月1日"
@@ -192,10 +174,12 @@ class FeishuScheduleManager:
logger.info(f"使用日期格式: {target_date} 解析表格: {sheet_title}") logger.info(f"使用日期格式: {target_date} 解析表格: {sheet_title}")
result = self.parser.parse(values, target_date, sheet_title) result = self.parser.parse(values, target_date, sheet_title)
# 6. 保存到数据库 # 5. 每次都保存到数据库,覆盖旧数据,确保人员变动能及时更新
if result['day_shift'] or result['night_shift']: if result['day_shift'] or result['night_shift']:
self.db.save_schedule(date_str, result, sheet_id, sheet_title) 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 return result