|
|
|
@ -177,7 +177,53 @@ async def get_user_by_login_name(mysql_pool, login_name: str) -> Optional[Dict]:
|
|
|
|
|
return dict(zip(columns, row))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def get_chat_logs_by_risk_flag(mysql_pool, risk_flag: int, offset: int, page_size: int) -> (List[Dict], int):
|
|
|
|
|
# 显示统计分析页面
|
|
|
|
|
async def get_chat_logs_summary(mysql_pool, risk_flag: int, offset: int, page_size: int) -> (List[Dict], int):
|
|
|
|
|
"""
|
|
|
|
|
获取聊天记录的统计分析结果
|
|
|
|
|
:param mysql_pool: MySQL 连接池
|
|
|
|
|
:param risk_flag: 风险标志
|
|
|
|
|
:param offset: 偏移量
|
|
|
|
|
:param page_size: 每页记录数
|
|
|
|
|
:return: 日志列表和总记录数
|
|
|
|
|
"""
|
|
|
|
|
async with mysql_pool.acquire() as conn:
|
|
|
|
|
await conn.ping() # 重置连接
|
|
|
|
|
async with conn.cursor() as cursor:
|
|
|
|
|
# 查询符合条件的记录
|
|
|
|
|
sql = """
|
|
|
|
|
SELECT tbp.*, COUNT(*) AS cnt
|
|
|
|
|
FROM t_chat_log AS tcl
|
|
|
|
|
INNER JOIN t_base_person AS tbp ON tcl.person_id = tbp.person_id
|
|
|
|
|
WHERE tcl.risk_flag = %s
|
|
|
|
|
GROUP BY tcl.person_id
|
|
|
|
|
ORDER BY COUNT(*) DESC
|
|
|
|
|
LIMIT %s OFFSET %s
|
|
|
|
|
"""
|
|
|
|
|
await cursor.execute(sql, (risk_flag, page_size, offset))
|
|
|
|
|
rows = await cursor.fetchall()
|
|
|
|
|
|
|
|
|
|
# 获取列名
|
|
|
|
|
columns = [column[0] for column in cursor.description]
|
|
|
|
|
|
|
|
|
|
# 查询总记录数
|
|
|
|
|
count_sql = """
|
|
|
|
|
SELECT COUNT(DISTINCT tcl.person_id)
|
|
|
|
|
FROM t_chat_log AS tcl
|
|
|
|
|
INNER JOIN t_base_person AS tbp ON tcl.person_id = tbp.person_id
|
|
|
|
|
WHERE tcl.risk_flag = %s
|
|
|
|
|
"""
|
|
|
|
|
await cursor.execute(count_sql, (risk_flag,))
|
|
|
|
|
total = (await cursor.fetchone())[0]
|
|
|
|
|
|
|
|
|
|
# 将元组转换为字典
|
|
|
|
|
logs = [dict(zip(columns, row)) for row in rows] if rows else []
|
|
|
|
|
|
|
|
|
|
return logs, total
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def get_chat_logs_by_risk_flag(mysql_pool, risk_flag: int, person_id: str, offset: int, page_size: int) -> (
|
|
|
|
|
List[Dict], int):
|
|
|
|
|
"""
|
|
|
|
|
根据风险标志查询聊天记录
|
|
|
|
|
:param mysql_pool: MySQL 连接池
|
|
|
|
@ -196,10 +242,10 @@ async def get_chat_logs_by_risk_flag(mysql_pool, risk_flag: int, offset: int, pa
|
|
|
|
|
tbp.person_id, tbp.login_name, tbp.person_name
|
|
|
|
|
FROM t_chat_log AS tcl
|
|
|
|
|
INNER JOIN t_base_person AS tbp ON tcl.person_id = tbp.person_id
|
|
|
|
|
WHERE tcl.risk_flag = %s ORDER BY TCL.ID DESC
|
|
|
|
|
WHERE tcl.risk_flag = %s and tcl.person_id=%s ORDER BY TCL.ID DESC
|
|
|
|
|
LIMIT %s OFFSET %s
|
|
|
|
|
"""
|
|
|
|
|
await cursor.execute(sql, (risk_flag, page_size, offset))
|
|
|
|
|
await cursor.execute(sql, (risk_flag, person_id, page_size, offset))
|
|
|
|
|
rows = await cursor.fetchall()
|
|
|
|
|
|
|
|
|
|
# 在 count_sql 执行前获取列名
|
|
|
|
@ -210,9 +256,9 @@ async def get_chat_logs_by_risk_flag(mysql_pool, risk_flag: int, offset: int, pa
|
|
|
|
|
SELECT COUNT(*)
|
|
|
|
|
FROM t_chat_log AS tcl
|
|
|
|
|
INNER JOIN t_base_person AS tbp ON tcl.person_id = tbp.person_id
|
|
|
|
|
WHERE tcl.risk_flag = %s
|
|
|
|
|
WHERE tcl.risk_flag = %s and tcl.person_id=%s
|
|
|
|
|
"""
|
|
|
|
|
await cursor.execute(count_sql, (risk_flag,))
|
|
|
|
|
await cursor.execute(count_sql, (risk_flag,person_id))
|
|
|
|
|
total = (await cursor.fetchone())[0]
|
|
|
|
|
|
|
|
|
|
# 将元组转换为字典,并格式化 create_time
|
|
|
|
@ -225,4 +271,4 @@ async def get_chat_logs_by_risk_flag(mysql_pool, risk_flag: int, offset: int, pa
|
|
|
|
|
log["create_time"] = log["create_time"].strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
|
logs.append(log)
|
|
|
|
|
return logs, total
|
|
|
|
|
return [], 0
|
|
|
|
|
return [], 0
|
|
|
|
|