|
|
@@ -9,7 +9,7 @@ from app.core.config import settings
|
|
|
from app.core.logger import get_logger
|
|
|
from app.core.database_loader import get_db_connection
|
|
|
from app.utils.scheme import (
|
|
|
- CardDetailResponse, CardListDetailResponse, CardType, SortBy,
|
|
|
+ CardDetailResponse, CardListDetailResponse, CardType, SortBy, CardNoList,
|
|
|
SortOrder, CardListResponseWrapper, CardListWithTotal, ReviewUpdate
|
|
|
)
|
|
|
from app.crud import crud_card
|
|
|
@@ -265,3 +265,53 @@ def update_review_state(
|
|
|
if isinstance(e, HTTPException):
|
|
|
raise e
|
|
|
raise HTTPException(status_code=500, detail="修改审核状态失败,数据库操作错误。")
|
|
|
+
|
|
|
+
|
|
|
+@router.post("/batch_query/id_score", status_code=200, summary="批量查询id和分数")
|
|
|
+def batch_query_id_score(
|
|
|
+ data: CardNoList,
|
|
|
+ db_conn: PooledMySQLConnection = db_dependency
|
|
|
+):
|
|
|
+ """
|
|
|
+ 根据给定的 cardNo 列表批量查询卡牌对应的卡牌ID (id) 和最终分数 (score)。
|
|
|
+ 分数返回逻辑:优先返回 modified_score,如果没有 modified_score 则返回 detection_score。
|
|
|
+ """
|
|
|
+ card_nos = data.cardNoList
|
|
|
+
|
|
|
+ # 如果输入的列表为空,直接返回空结果
|
|
|
+ if not card_nos:
|
|
|
+ return {"cardNoList": []}
|
|
|
+
|
|
|
+ try:
|
|
|
+ with db_conn.cursor(dictionary=True) as cursor:
|
|
|
+ # 构造 SQL 的 IN 子句
|
|
|
+ format_strings = ','.join(['%s'] * len(card_nos))
|
|
|
+ query = f"""
|
|
|
+ SELECT id, cardNo, detection_score, modified_score
|
|
|
+ FROM {settings.DB_CARD_TABLE_NAME}
|
|
|
+ WHERE cardNo IN ({format_strings})
|
|
|
+ """
|
|
|
+
|
|
|
+ # 执行查询
|
|
|
+ cursor.execute(query, tuple(card_nos))
|
|
|
+ results = cursor.fetchall()
|
|
|
+
|
|
|
+ # 组装返回数据
|
|
|
+ response_list = []
|
|
|
+ for row in results:
|
|
|
+ # 判断分数:优先取 modified_score,如果为 None 则取 detection_score
|
|
|
+ score = row.get('modified_score')
|
|
|
+ if score is None:
|
|
|
+ score = row.get('detection_score')
|
|
|
+
|
|
|
+ response_list.append({
|
|
|
+ "cardNo": row['cardNo'],
|
|
|
+ "evaluateNo": row['id'],
|
|
|
+ "score": score
|
|
|
+ })
|
|
|
+
|
|
|
+ return {"cardNoList": response_list}
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f"批量查询卡牌ID和分数失败: {e}")
|
|
|
+ raise HTTPException(status_code=500, detail="批量查询失败,数据库操作错误。")
|