sales-assistant-py-new/app/repository/archive_messages_repository.py

72 lines
2.8 KiB
Python

from typing import List
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.mysql import ArchiveMessages
class ArchiveMessagesRepository:
def __init__(self, session: AsyncSession):
self.session = session
async def get_message_statistics_by_date(self, start_date: str = None, end_date: str = None) -> List[ArchiveMessages]:
"""
根据日期范围获取消息记录
Args:
start_date: 开始日期 (格式: YYYY-MM-DD)
end_date: 结束日期 (格式: YYYY-MM-DD)
Returns:
ArchiveMessages 对象列表
"""
base_query = """
SELECT DATE(created_at) AS created_at, from_user
FROM archive_messages
"""
conditions = []
params = {}
if start_date:
conditions.append(" and DATE(created_at) >= :start_date")
params["start_date"] = start_date
if end_date:
conditions.append("DATE(created_at) <= :end_date")
params["end_date"] = end_date
base_query += " WHERE 1=1 and roomid='' and msgtype='text' "
#base_query += " WHERE (from_user='wmI1AkDQAA3h0jxrRpeaHZhMKeHExA4w' )or( from_user='LiHeYi' and to_user='[\"wmI1AkDQAA3h0jxrRpeaHZhMKeHExA4w\"]') and roomid='' and msgtype='text' "
if conditions:
base_query += " AND ".join(conditions)+" "
base_query += " GROUP BY DATE(created_at), from_user ORDER BY created_at DESC, from_user;"
query = text(base_query)
result = await self.session.execute(query, params)
return [ArchiveMessages(**dict(row)) for row in result.mappings().fetchall()]
async def get_message_statistics_by_date_user(self, day: str = None, from_user: str = None, to_user: str = None) -> List[ArchiveMessages]:
"""
根据日期+发送人+接收人查询记录
Returns:
ArchiveMessages 对象列表
"""
if to_user:
sql = """
SELECT * FROM archive_messages
WHERE DATE(created_at) = :day
AND from_user = :from_user
AND to_user = :to_user and msgtype='text'
ORDER BY created_at DESC
"""
result = await self.session.execute(text(sql), {"day": day, "from_user": from_user, "to_user": to_user})
else :
sql = """
SELECT from_user,to_user FROM archive_messages
WHERE DATE(created_at) = :day
AND from_user = :from_user and msgtype='text'
group by to_user
"""
result = await self.session.execute(text(sql), {"day": day, "from_user": from_user})
return [ArchiveMessages(**dict(row)) for row in result.mappings().fetchall()]