加入图片下载逻辑。
This commit is contained in:
@@ -11,10 +11,10 @@ from db.connection import DBConnectionManager
|
||||
|
||||
class MessageStorageDB(BaseDBOperator):
|
||||
"""消息存储相关数据库操作"""
|
||||
|
||||
|
||||
def __init__(self, db_manager: DBConnectionManager):
|
||||
super().__init__(db_manager)
|
||||
|
||||
|
||||
def archive_message(self, msg: WxMsg) -> bool:
|
||||
"""存档消息"""
|
||||
now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
@@ -25,7 +25,7 @@ class MessageStorageDB(BaseDBOperator):
|
||||
params = (msg.roomid, now_time, msg.sender, msg.content, msg.type, msg.extra, msg.id, msg.xml, msg.thumb)
|
||||
result = self.execute_update(sql, params)
|
||||
return result
|
||||
|
||||
|
||||
def get_recent_messages(self, group_id: str, hours_ago: int = 8, min_content_length: int = 6) -> List[Dict]:
|
||||
"""获取最近的消息"""
|
||||
sql = """
|
||||
@@ -40,7 +40,7 @@ class MessageStorageDB(BaseDBOperator):
|
||||
"""
|
||||
params = (hours_ago, group_id, min_content_length)
|
||||
return self.execute_query(sql, params) or []
|
||||
|
||||
|
||||
def get_message_count_by_date(self, date: str) -> List[Dict]:
|
||||
"""获取指定日期的消息统计"""
|
||||
sql = """
|
||||
@@ -50,8 +50,8 @@ class MessageStorageDB(BaseDBOperator):
|
||||
GROUP BY group_id, sender
|
||||
"""
|
||||
return self.execute_query(sql, (date,)) or []
|
||||
|
||||
|
||||
|
||||
|
||||
def get_speech_ranking(self, date: str, group_id: str, limit: int = 20) -> List[Dict]:
|
||||
"""获取指定日期和群组的发言排名"""
|
||||
sql = """
|
||||
@@ -66,7 +66,7 @@ class MessageStorageDB(BaseDBOperator):
|
||||
params = (date, group_id, limit)
|
||||
results = self.execute_query(sql, params)
|
||||
return results or []
|
||||
|
||||
|
||||
def insert_speech_count(self, group_id: str, wx_id: str, date: str, count: int) -> bool:
|
||||
"""插入发言统计数据
|
||||
|
||||
@@ -86,8 +86,8 @@ class MessageStorageDB(BaseDBOperator):
|
||||
"""
|
||||
params = (group_id, wx_id, date, count)
|
||||
return self.execute_update(sql, params)
|
||||
|
||||
|
||||
|
||||
|
||||
def get_message_trend(self, group_id: str, days: int = 7) -> List[Dict]:
|
||||
"""获取指定群组的消息趋势数据
|
||||
|
||||
@@ -109,8 +109,8 @@ class MessageStorageDB(BaseDBOperator):
|
||||
ORDER BY date
|
||||
"""
|
||||
return self.execute_query(sql, (group_id, days)) or []
|
||||
|
||||
def get_messages_by_filter(self, group_id=None, start_date=None, end_date=None,
|
||||
|
||||
def get_messages_by_filter(self, group_id=None, start_date=None, end_date=None,
|
||||
search_text=None, page=1, page_size=20) -> Dict:
|
||||
"""按条件筛选消息并支持分页和模糊搜索
|
||||
|
||||
@@ -133,50 +133,78 @@ class MessageStorageDB(BaseDBOperator):
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
def update_message_image_path(self, message_id, image_path):
|
||||
"""
|
||||
更新消息的图片路径
|
||||
|
||||
Args:
|
||||
message_id: 消息ID
|
||||
image_path: 图片路径
|
||||
|
||||
Returns:
|
||||
bool: 更新成功返回True,否则返回False
|
||||
"""
|
||||
try:
|
||||
# 构建SQL语句
|
||||
sql = """
|
||||
UPDATE messages
|
||||
SET image_path = %s
|
||||
WHERE message_id = %s
|
||||
"""
|
||||
params = (image_path, message_id)
|
||||
|
||||
# 执行更新操作
|
||||
result = self.execute_update(sql, params)
|
||||
return result
|
||||
except Exception as e:
|
||||
# 使用已有的日志记录方式
|
||||
print(f"更新消息图片路径出错: {e}")
|
||||
return False
|
||||
Reference in New Issue
Block a user