fix: 修复排班表读取时缓存优先的问题
- 移除了缓存优先逻辑,改为每次从飞书获取最新数据 - 每次都覆盖保存到数据库,确保人员变动能及时更新 - 移除了 check_sheet_update 检查(因为飞书表格即使人员变动,版本号也可能不变)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user