feat: 新增月底/月初数据调整和Confluence月份页面映射功能

- 新增月底最后一天自动剔除12点后数据功能
- 实现月底剔除数据自动转移到次月1号
- 新增Confluence月份页面ID映射功能,解决每月页面ID变化问题
- 修复1月份页面解析问题,支持'2026.1.1'日期格式
- 优化GUI界面,增加页面ID配置管理
- 精简README文档,增加详细功能说明
- 修复月度统计计算包含调整数据的问题
This commit is contained in:
2026-01-02 01:29:03 +08:00
parent 1b688c1603
commit 53eef800b4
6 changed files with 634 additions and 332 deletions

View File

@@ -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__':