更新学期功能
This commit is contained in:
@@ -137,6 +137,73 @@ class SemesterModel:
|
||||
GROUP BY hs.student_id, hs.status
|
||||
"""
|
||||
return await execute_query(sql, (start_date, end_date))
|
||||
|
||||
@staticmethod
|
||||
async def update(
|
||||
semester_id: int,
|
||||
semester_name: str = None,
|
||||
start_date: str = None,
|
||||
end_date: str = None
|
||||
) -> bool:
|
||||
"""编辑学期信息(仅未归档)"""
|
||||
sets = []
|
||||
params = []
|
||||
if semester_name is not None:
|
||||
sets.append("semester_name = %s")
|
||||
params.append(semester_name)
|
||||
if start_date is not None:
|
||||
sets.append("start_date = %s")
|
||||
params.append(start_date)
|
||||
if end_date is not None:
|
||||
sets.append("end_date = %s")
|
||||
params.append(end_date)
|
||||
if not sets:
|
||||
return False
|
||||
params.append(semester_id)
|
||||
sql = f"UPDATE semesters SET {', '.join(sets)} WHERE semester_id = %s AND is_archived = 0"
|
||||
result = await execute_update(sql, tuple(params))
|
||||
return result > 0
|
||||
|
||||
@staticmethod
|
||||
async def delete(semester_id: int) -> bool:
|
||||
"""删除学期"""
|
||||
sql = "DELETE FROM semesters WHERE semester_id = %s"
|
||||
result = await execute_update(sql, (semester_id,))
|
||||
return result > 0
|
||||
|
||||
@staticmethod
|
||||
async def count_archives(semester_id: int) -> int:
|
||||
"""统计学期的归档数据数量"""
|
||||
sql = "SELECT COUNT(*) as cnt FROM semester_archives WHERE semester_id = %s"
|
||||
result = await execute_one(sql, (semester_id,))
|
||||
return result['cnt'] if result else 0
|
||||
|
||||
@staticmethod
|
||||
async def associate_records_by_date_range(
|
||||
semester_id: int,
|
||||
start_date: str,
|
||||
end_date: str
|
||||
) -> Dict[str, int]:
|
||||
"""按日期范围关联记录到学期"""
|
||||
# 关联操行分记录(created_at 为 TIMESTAMP,需包含 end_date 当天)
|
||||
conduct_sql = """
|
||||
UPDATE conduct_records
|
||||
SET semester_id = %s
|
||||
WHERE semester_id IS NULL
|
||||
AND created_at BETWEEN %s AND CONCAT(%s, ' 23:59:59')
|
||||
"""
|
||||
conduct_count = await execute_update(conduct_sql, (semester_id, start_date, end_date))
|
||||
|
||||
# 关联考勤记录
|
||||
attendance_sql = """
|
||||
UPDATE attendance_records
|
||||
SET semester_id = %s
|
||||
WHERE semester_id IS NULL
|
||||
AND `date` BETWEEN %s AND %s
|
||||
"""
|
||||
attendance_count = await execute_update(attendance_sql, (semester_id, start_date, end_date))
|
||||
|
||||
return {"conduct": conduct_count, "attendance": attendance_count}
|
||||
|
||||
|
||||
class SemesterArchiveModel:
|
||||
|
||||
Reference in New Issue
Block a user