修复Dashboard消息存储查询接口兼容问题

This commit is contained in:
liuwei
2026-04-27 12:03:22 +08:00
parent f0e3e5ae97
commit d09ccb788c

View File

@@ -11,7 +11,7 @@ import aiohttp
import re
from threading import Lock
from typing import Dict, Optional
from typing import Dict, List, Optional
from db.connection import DBConnectionManager
from db.contacts_db import ContactsDBOperator
@@ -689,6 +689,84 @@ class MessageStorage:
"emoji_count": 0,
}
# ==================== Dashboard 兼容查询代理 ====================
# 说明:
# 1. DashboardServer 现在持有的通常是当前 MessageStorage 包装层对象;
# 2. 但后台蓝图历史上直接依赖的是 MessageStorageDB 上的查询方法;
# 3. 为了兼容两套调用习惯,这里把后台会用到的查询接口显式代理到 message_db
# 4. 这样既保留包装层上的异步归档、表情资产等能力,也避免 Dashboard 再次出现属性缺失。
def get_recent_group_chat_messages(self, group_id: str, limit: int = 20) -> List[Dict]:
"""代理获取群聊最近消息,供后台聊天面板直接使用。"""
return self.message_db.get_recent_group_chat_messages(group_id, limit=limit)
def get_recent_personal_messages(self, wxid: str, limit: int = 20) -> List[Dict]:
"""代理获取私聊最近消息,兼容后台联系人会话预览。"""
return self.message_db.get_recent_personal_messages(wxid, limit=limit)
def get_messages_by_filter(self, group_id=None, start_date=None, end_date=None,
search_text=None, page: int = 1, page_size: int = 20) -> Dict:
"""代理后台消息筛选分页查询,保持原有调用签名稳定。"""
return self.message_db.get_messages_by_filter(
group_id=group_id,
start_date=start_date,
end_date=end_date,
search_text=search_text,
page=page,
page_size=page_size,
)
def get_message_by_message_id(self, message_id):
"""代理按 message_id 反查消息,用于引用消息预览和追踪。"""
return self.message_db.get_message_by_message_id(message_id)
def get_image_message_by_md5(self, md5: str):
"""代理按 md5 反查图片消息,兼容引用图片的缩略图补全逻辑。"""
return self.message_db.get_image_message_by_md5(md5)
def get_hourly_message_trend(self, group_id: str = None, days: int = 1) -> List[Dict]:
"""代理按小时消息趋势查询,供 Dashboard 趋势图接口调用。"""
return self.message_db.get_hourly_message_trend(group_id=group_id, days=days)
def get_message_trend(self, group_id: str, days: int = 7) -> List[Dict]:
"""代理按天消息趋势查询,兼容群详情页与群管理页。"""
return self.message_db.get_message_trend(group_id, days)
def get_group_member_message_ranking(self, group_id: str, start_time: datetime,
end_time: datetime, limit: int = 10) -> List[Dict]:
"""代理群成员发言排行查询,供群详情聚合接口直接使用。"""
return self.message_db.get_group_member_message_ranking(
group_id,
start_time,
end_time,
limit=limit,
)
def get_group_last_message(self, group_id: str):
"""代理查询群最后一条消息,避免后台绕过包装层直接访问 DB。"""
return self.message_db.get_group_last_message(group_id)
def get_group_hourly_distribution(self, group_id: str, days: int = 30) -> List[Dict]:
"""代理查询群消息小时分布,用于识别高峰发言时段。"""
return self.message_db.get_group_hourly_distribution(group_id, days)
def get_recent_emoji_assets(self, limit: int = 200) -> List[Dict]:
"""代理读取最近表情消息记录,兼容仍走 message_storage 的老逻辑。"""
return self.message_db.get_recent_emoji_assets(limit=limit)
def get_emoji_asset_by_md5(self, md5: str):
"""代理按 md5 查找表情记录,给表情发送补参数时兜底。"""
return self.message_db.get_emoji_asset_by_md5(md5)
def get_pending_media_messages(self, minutes_ago: int = 10, limit: int = 50,
group_ids: Optional[List[str]] = None) -> List[Dict]:
"""代理待处理媒体消息查询,统一包装层与底层 DB 的访问入口。"""
return self.message_db.get_pending_media_messages(
minutes_ago=minutes_ago,
limit=limit,
group_ids=group_ids,
)
def _format_messages_optimized(self, messages: list, all_contacts: dict) -> str:
"""优化的消息格式化方法,减少冗余