mirror of
https://devops.liangqichi.top/qichi.liang/Orbitin.git
synced 2026-02-10 15:41:31 +08:00
feat: 新增月底/月初数据调整和Confluence月份页面映射功能
- 新增月底最后一天自动剔除12点后数据功能 - 实现月底剔除数据自动转移到次月1号 - 新增Confluence月份页面ID映射功能,解决每月页面ID变化问题 - 修复1月份页面解析问题,支持'2026.1.1'日期格式 - 优化GUI界面,增加页面ID配置管理 - 精简README文档,增加详细功能说明 - 修复月度统计计算包含调整数据的问题
This commit is contained in:
@@ -119,6 +119,21 @@ class DailyLogsDatabase(DatabaseBase):
|
||||
cursor.execute('CREATE INDEX IF NOT EXISTS idx_manual_date ON manual_adjustments(date)')
|
||||
cursor.execute('CREATE INDEX IF NOT EXISTS idx_manual_type ON manual_adjustments(adjustment_type)')
|
||||
|
||||
# 创建Confluence页面ID映射表
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS confluence_pages (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
month_key TEXT NOT NULL UNIQUE, -- 月份键,格式:'2025-12', '2026-01'
|
||||
page_id TEXT NOT NULL, -- Confluence页面ID
|
||||
page_title TEXT, -- 页面标题(可选)
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
''')
|
||||
|
||||
# 创建索引
|
||||
cursor.execute('CREATE INDEX IF NOT EXISTS idx_confluence_month ON confluence_pages(month_key)')
|
||||
|
||||
conn.commit()
|
||||
logger.debug("数据库表结构初始化完成")
|
||||
|
||||
@@ -581,6 +596,124 @@ class DailyLogsDatabase(DatabaseBase):
|
||||
'adjustments': [],
|
||||
'total_adjustment_teu': 0
|
||||
}
|
||||
|
||||
def insert_confluence_page(self, month_key: str, page_id: str, page_title: str = '') -> bool:
|
||||
"""
|
||||
插入或更新Confluence页面ID映射
|
||||
|
||||
参数:
|
||||
month_key: 月份键,格式:'2025-12', '2026-01'
|
||||
page_id: Confluence页面ID
|
||||
page_title: 页面标题(可选)
|
||||
|
||||
返回:
|
||||
是否成功
|
||||
"""
|
||||
try:
|
||||
query = '''
|
||||
INSERT OR REPLACE INTO confluence_pages
|
||||
(month_key, page_id, page_title, updated_at)
|
||||
VALUES (?, ?, ?, CURRENT_TIMESTAMP)
|
||||
'''
|
||||
params = (month_key, page_id, page_title)
|
||||
self.execute_update(query, params)
|
||||
logger.info(f"插入Confluence页面映射: {month_key} -> {page_id}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"插入Confluence页面映射失败: {e}")
|
||||
return False
|
||||
|
||||
def get_confluence_page(self, month_key: str) -> Optional[Dict[str, Any]]:
|
||||
"""
|
||||
获取指定月份的Confluence页面ID映射
|
||||
|
||||
参数:
|
||||
month_key: 月份键,格式:'2025-12', '2026-01'
|
||||
|
||||
返回:
|
||||
页面映射字典,如果不存在则返回None
|
||||
"""
|
||||
query = 'SELECT * FROM confluence_pages WHERE month_key = ?'
|
||||
result = self.execute_query(query, (month_key,))
|
||||
return result[0] if result else None
|
||||
|
||||
def get_all_confluence_pages(self) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
获取所有Confluence页面ID映射
|
||||
|
||||
返回:
|
||||
页面映射列表
|
||||
"""
|
||||
query = 'SELECT * FROM confluence_pages ORDER BY month_key DESC'
|
||||
return self.execute_query(query)
|
||||
|
||||
def delete_confluence_page(self, month_key: str) -> bool:
|
||||
"""
|
||||
删除指定月份的Confluence页面ID映射
|
||||
|
||||
参数:
|
||||
month_key: 月份键,格式:'2025-12', '2026-01'
|
||||
|
||||
返回:
|
||||
是否成功删除
|
||||
"""
|
||||
try:
|
||||
query = 'DELETE FROM confluence_pages WHERE month_key = ?'
|
||||
result = self.execute_update(query, (month_key,))
|
||||
if result > 0:
|
||||
logger.info(f"删除Confluence页面映射: {month_key}")
|
||||
return True
|
||||
else:
|
||||
logger.warning(f"未找到Confluence页面映射: {month_key}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"删除Confluence页面映射失败: {e}")
|
||||
return False
|
||||
|
||||
def get_confluence_page_for_date(self, date: str) -> Optional[str]:
|
||||
"""
|
||||
根据日期获取对应的Confluence页面ID
|
||||
|
||||
参数:
|
||||
date: 日期字符串,格式:'2025-12-31'
|
||||
|
||||
返回:
|
||||
Confluence页面ID,如果不存在则返回None
|
||||
"""
|
||||
try:
|
||||
# 从日期中提取年月
|
||||
year_month = date[:7] # '2025-12-31' -> '2025-12'
|
||||
|
||||
# 查询数据库
|
||||
page_info = self.get_confluence_page(year_month)
|
||||
if page_info:
|
||||
return page_info['page_id']
|
||||
|
||||
# 如果没有找到,尝试从环境变量中获取
|
||||
import os
|
||||
from src.config import config
|
||||
|
||||
# 检查环境变量中的配置
|
||||
env_key = f"CONFLUENCE_PAGE_{year_month.replace('-', '_')}"
|
||||
page_id = os.getenv(env_key)
|
||||
if page_id:
|
||||
# 保存到数据库以便下次使用
|
||||
self.insert_confluence_page(year_month, page_id, f"从环境变量获取: {env_key}")
|
||||
return page_id
|
||||
|
||||
# 使用默认配置
|
||||
default_page_id = config.CONFLUENCE_CONTENT_ID
|
||||
if default_page_id:
|
||||
logger.warning(f"未找到 {year_month} 的Confluence页面映射,使用默认页面ID: {default_page_id}")
|
||||
return default_page_id
|
||||
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取Confluence页面ID失败: {date}, 错误: {e}")
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user