v2.6更新

This commit is contained in:
2026-05-29 21:07:27 +08:00
parent b2c36cab2c
commit 69adb30fa0
12 changed files with 117 additions and 29 deletions

View File

@@ -152,6 +152,7 @@ class ConductModel:
params.extend([limit, offset])
return await execute_query(sql, tuple(params))
@staticmethod
@staticmethod
async def get_all_records(
limit: int = 100,
@@ -162,7 +163,8 @@ class ConductModel:
include_revoked: bool = True,
related_type: str = None,
reason_prefix: str = None,
is_revoked: int = None
is_revoked: int = None,
reason_search: str = None
) -> List[Dict[str, Any]]:
"""获取所有记录(班主任/班长专用)"""
# 空字符串转为None
@@ -174,6 +176,8 @@ class ConductModel:
related_type = None
if reason_prefix == "":
reason_prefix = None
if reason_search == "":
reason_search = None
sql = """
SELECT cr.*, s.name as student_name, s.student_no, u.real_name as recorder_name,
ru.real_name as revoker_name
@@ -207,6 +211,10 @@ class ConductModel:
sql += " AND cr.reason LIKE %s"
params.append(f"{reason_prefix}%")
if reason_search:
sql += " AND cr.reason LIKE %s"
params.append(f"%{reason_search}%")
if is_revoked is not None:
sql += " AND cr.is_revoked = %s"
params.append(1 if is_revoked else 0)
@@ -215,7 +223,7 @@ class ConductModel:
params.extend([limit, offset])
return await execute_query(sql, tuple(params))
@staticmethod
async def get_grouped_records(
student_id: int = None,
@@ -225,7 +233,8 @@ class ConductModel:
reason_prefix: str = None,
page: int = 1,
page_size: int = 20,
is_revoked: int = None
is_revoked: int = None,
reason_search: str = None
) -> Dict[str, Any]:
"""获取分组后的操行分记录(同批次合并)"""
if start_date == "":
@@ -236,6 +245,8 @@ class ConductModel:
related_type = None
if reason_prefix == "":
reason_prefix = None
if reason_search == "":
reason_search = None
conditions = ["1=1"]
params = []
@@ -261,6 +272,9 @@ class ConductModel:
if reason_prefix:
conditions.append("cr.reason LIKE %s")
params.append(f"{reason_prefix}%")
if reason_search:
conditions.append("cr.reason LIKE %s")
params.append(f"%{reason_search}%")
where_clause = " AND ".join(conditions)

View File

@@ -320,7 +320,8 @@ async def get_conduct_history(
grouped: bool = Query(False),
related_type: Optional[str] = None,
reason_prefix: Optional[str] = None,
is_revoked: Optional[int] = None
is_revoked: Optional[int] = None,
reason_search: Optional[str] = None
):
"""获取操行分历史记录"""
try:
@@ -337,7 +338,8 @@ async def get_conduct_history(
grouped=grouped,
related_type=related_type,
reason_prefix=reason_prefix,
is_revoked=is_revoked
is_revoked=is_revoked,
reason_search=reason_search
)
return success_response(data=result)
except Exception as e:

View File

@@ -18,6 +18,7 @@ import re
logger = setup_logger()
router = APIRouter()
# 版本列表(按顺序)
# 版本列表(按顺序)
ALL_VERSIONS = {
'1.0': 'v1.0.sql',
@@ -34,12 +35,11 @@ ALL_VERSIONS = {
'2.1': 'v2.1.sql',
'2.2': 'v2.2.sql',
'2.3': 'v2.3.sql',
'2.3': 'v2.3.sql',
'2.4': 'v2.4.sql',
'2.5': 'v2.5.sql',
'2.5.1': 'v2.5.1.sql',
'2.6': 'v2.6.sql',
}
# 版本特征标记(按优先级从高到低)
VERSION_MARKERS = [
('2.0', 'students', 'dormitory_number'),

View File

@@ -230,7 +230,8 @@ class ConductService:
grouped: bool = False,
related_type: Optional[str] = None,
reason_prefix: Optional[str] = None,
is_revoked: Optional[int] = None
is_revoked: Optional[int] = None,
reason_search: Optional[str] = None
) -> Dict[str, Any]:
"""获取历史记录"""
# 空字符串转为None
@@ -242,6 +243,8 @@ class ConductService:
related_type = None
if reason_prefix == "":
reason_prefix = None
if reason_search == "":
reason_search = None
if related_type and related_type not in ('manual', 'homework', 'attendance'):
return {"records": [], "page": page, "page_size": page_size, "total": 0, "total_pages": 0}
@@ -259,7 +262,8 @@ class ConductService:
reason_prefix=reason_prefix,
page=page,
page_size=page_size,
is_revoked=is_revoked
is_revoked=is_revoked,
reason_search=reason_search
)
records = await ConductModel.get_all_records(
@@ -270,7 +274,8 @@ class ConductService:
student_id=student_id,
related_type=related_type,
reason_prefix=reason_prefix,
is_revoked=is_revoked
is_revoked=is_revoked,
reason_search=reason_search
)
# 获取总数
@@ -292,6 +297,9 @@ class ConductService:
if reason_prefix:
count_conditions.append("cr.reason LIKE %s")
count_params.append(f"{reason_prefix}%")
if reason_search:
count_conditions.append("cr.reason LIKE %s")
count_params.append(f"%{reason_search}%")
if is_revoked is not None:
count_conditions.append("cr.is_revoked = %s")
count_params.append(1 if is_revoked else 0)