mirror of
https://devops.liangqichi.top/qichi.liang/Orbitin.git
synced 2026-02-10 07:41:29 +08:00
feat: 添加飞书表格模块支持排班人员信息获取
- 新增 src/feishu_v2.py: 飞书表格API客户端,支持数据库存储和2026年全年排班表 - 新增 src/schedule_database.py: 排班信息数据库模块,用于缓存排班数据 - 新增 docs/feishu_data_flow.md: 飞书数据流文档 - 新增 plans/feishu_scheduling_plan.md: 飞书排班表模块设计文档 - 更新 src/report.py: 使用新的飞书模块获取排班人员信息 - 更新 src/gui.py: 启动时自动获取新数据,添加auto_fetch_data方法 - 更新 .env.example: 添加飞书配置示例 - 更新 AGENTS.md: 更新项目文档 - 更新 main.py: 集成飞书模块 功能特性: 1. 支持从飞书表格获取排班人员信息 2. 支持2025年月度表格和2026年全年排班表 3. 使用SQLite数据库缓存,减少API调用 4. 自动检测表格更新 5. GUI启动时自动获取最新数据 6. 日报中正确显示次日班次人员信息
This commit is contained in:
@@ -6,11 +6,15 @@ from datetime import datetime, timedelta
|
||||
from typing import Dict, List, Optional
|
||||
import sys
|
||||
import os
|
||||
import logging
|
||||
|
||||
# 添加项目根目录到 Python 路径
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from src.database import DailyLogsDatabase
|
||||
from src.feishu_v2 import FeishuScheduleManagerV2 as FeishuScheduleManager
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DailyReportGenerator:
|
||||
@@ -96,14 +100,49 @@ class DailyReportGenerator:
|
||||
}
|
||||
|
||||
def get_shift_personnel(self, date: str) -> Dict:
|
||||
"""获取班次人员(从日志文本中解析,需要配合 parser 使用)"""
|
||||
# 目前数据库中没有人员信息,返回空
|
||||
# 可以后续扩展添加人员追踪功能
|
||||
return {
|
||||
'day_shift': '',
|
||||
'night_shift': '',
|
||||
'duty_phone': '13107662315'
|
||||
}
|
||||
"""
|
||||
获取班次人员(从飞书排班表获取)
|
||||
|
||||
注意:日报中显示的是次日的班次人员,所以需要获取 date+1 的排班
|
||||
例如:生成 12/29 的日报,显示的是 12/30 的人员
|
||||
"""
|
||||
try:
|
||||
# 初始化飞书排班管理器
|
||||
manager = FeishuScheduleManager()
|
||||
|
||||
# 计算次日日期(日报中显示的是次日班次)
|
||||
parsed_date = datetime.strptime(date, '%Y-%m-%d')
|
||||
tomorrow = (parsed_date + timedelta(days=1)).strftime('%Y-%m-%d')
|
||||
|
||||
logger.info(f"获取 {date} 日报的班次人员,对应排班表日期: {tomorrow}")
|
||||
|
||||
# 获取次日的排班信息(使用缓存)
|
||||
schedule = manager.get_schedule_for_date(tomorrow)
|
||||
|
||||
# 如果从飞书获取到数据,使用飞书数据
|
||||
if schedule.get('day_shift') or schedule.get('night_shift'):
|
||||
return {
|
||||
'day_shift': schedule.get('day_shift', ''),
|
||||
'night_shift': schedule.get('night_shift', ''),
|
||||
'duty_phone': '13107662315'
|
||||
}
|
||||
|
||||
# 如果飞书数据为空,返回空值
|
||||
logger.warning(f"无法从飞书获取 {tomorrow} 的排班信息")
|
||||
return {
|
||||
'day_shift': '',
|
||||
'night_shift': '',
|
||||
'duty_phone': '13107662315'
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取排班信息失败: {e}")
|
||||
# 降级处理:返回空值
|
||||
return {
|
||||
'day_shift': '',
|
||||
'night_shift': '',
|
||||
'duty_phone': '13107662315'
|
||||
}
|
||||
|
||||
def generate_report(self, date: str = None) -> str:
|
||||
"""生成日报"""
|
||||
|
||||
Reference in New Issue
Block a user