提交消息列表功能
This commit is contained in:
+73
-1
@@ -1,4 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
@@ -107,4 +108,75 @@ class MessageStorageDB(BaseDBOperator):
|
||||
GROUP BY DATE(timestamp)
|
||||
ORDER BY date
|
||||
"""
|
||||
return self.execute_query(sql, (group_id, days)) or []
|
||||
return self.execute_query(sql, (group_id, days)) or []
|
||||
|
||||
def get_messages_by_filter(self, group_id=None, start_date=None, end_date=None,
|
||||
search_text=None, page=1, page_size=20) -> Dict:
|
||||
"""按条件筛选消息并支持分页和模糊搜索
|
||||
|
||||
Args:
|
||||
group_id: 群组ID,可选
|
||||
start_date: 开始日期,格式为YYYY-MM-DD,可选
|
||||
end_date: 结束日期,格式为YYYY-MM-DD,可选
|
||||
search_text: 搜索文本,可选,用于模糊搜索消息内容
|
||||
page: 页码,从1开始
|
||||
page_size: 每页记录数
|
||||
|
||||
Returns:
|
||||
包含消息列表和总记录数的字典
|
||||
"""
|
||||
# 构建基础SQL查询
|
||||
sql_count = "SELECT COUNT(*) as total FROM messages WHERE 1=1 "
|
||||
sql_data = """
|
||||
SELECT id, group_id, timestamp, sender, content, message_type,
|
||||
attachment_url, message_id, message_xml, message_thumb
|
||||
FROM messages
|
||||
WHERE 1=1
|
||||
"""
|
||||
|
||||
# 构建参数列表
|
||||
params = []
|
||||
|
||||
# 添加筛选条件
|
||||
if group_id:
|
||||
sql_count += " AND group_id = %s "
|
||||
sql_data += " AND group_id = %s "
|
||||
params.append(group_id)
|
||||
|
||||
if start_date:
|
||||
sql_count += " AND DATE(timestamp) >= %s "
|
||||
sql_data += " AND DATE(timestamp) >= %s "
|
||||
params.append(start_date)
|
||||
|
||||
if end_date:
|
||||
sql_count += " AND DATE(timestamp) <= %s "
|
||||
sql_data += " AND DATE(timestamp) <= %s "
|
||||
params.append(end_date)
|
||||
|
||||
if search_text:
|
||||
sql_count += " AND content LIKE %s "
|
||||
sql_data += " AND content LIKE %s "
|
||||
params.append(f"%{search_text}%")
|
||||
|
||||
# 添加排序和分页
|
||||
sql_data += " ORDER BY timestamp DESC "
|
||||
sql_data += " LIMIT %s OFFSET %s "
|
||||
|
||||
# 计算分页参数
|
||||
offset = (page - 1) * page_size
|
||||
data_params = params.copy()
|
||||
data_params.extend([page_size, offset])
|
||||
|
||||
# 执行查询
|
||||
count_result = self.execute_query(sql_count, params)
|
||||
total = count_result[0]['total'] if count_result else 0
|
||||
|
||||
messages = self.execute_query(sql_data, data_params) or []
|
||||
|
||||
return {
|
||||
'total': total,
|
||||
'page': page,
|
||||
'page_size': page_size,
|
||||
'total_pages': (total + page_size - 1) // page_size,
|
||||
'messages': messages
|
||||
}
|
||||
Reference in New Issue
Block a user