优化考勤记录
This commit is contained in:
@@ -20,7 +20,7 @@ class AttendanceModel:
|
||||
@staticmethod
|
||||
async def get_student_records(student_id: int, month: str = None) -> List[Dict[str, Any]]:
|
||||
sql = """
|
||||
SELECT attendance_id, date, status, reason, deduction_applied, created_at
|
||||
SELECT attendance_id, date, slot, status, reason, deduction_applied, created_at
|
||||
FROM attendance_records
|
||||
WHERE student_id = %s
|
||||
"""
|
||||
@@ -37,7 +37,8 @@ class AttendanceModel:
|
||||
@staticmethod
|
||||
async def get_class_records(
|
||||
date: str = None,
|
||||
student_id: int = None
|
||||
student_id: int = None,
|
||||
slot: str = None
|
||||
) -> List[Dict[str, Any]]:
|
||||
sql = """
|
||||
SELECT ar.*, s.name as student_name, s.student_no
|
||||
@@ -55,6 +56,10 @@ class AttendanceModel:
|
||||
sql += " AND ar.student_id = %s"
|
||||
params.append(student_id)
|
||||
|
||||
if slot:
|
||||
sql += " AND ar.slot = %s"
|
||||
params.append(slot)
|
||||
|
||||
sql += " ORDER BY ar.date DESC, s.student_no"
|
||||
|
||||
return await execute_query(sql, tuple(params))
|
||||
@@ -65,30 +70,31 @@ class AttendanceModel:
|
||||
date: str,
|
||||
status: str,
|
||||
reason: str = None,
|
||||
recorder_id: int = None
|
||||
recorder_id: int = None,
|
||||
slot: str = 'morning'
|
||||
) -> int:
|
||||
# 检查是否已存在当天记录
|
||||
# 检查是否已存在当天同时段记录
|
||||
existing = await execute_one(
|
||||
"SELECT attendance_id FROM attendance_records WHERE student_id = %s AND date = %s",
|
||||
(student_id, date)
|
||||
"SELECT attendance_id FROM attendance_records WHERE student_id = %s AND date = %s AND slot = %s",
|
||||
(student_id, date, slot)
|
||||
)
|
||||
|
||||
if existing:
|
||||
# 更新已有记录
|
||||
sql = """
|
||||
UPDATE attendance_records
|
||||
UPDATE attendance_records
|
||||
SET status = %s, reason = %s, recorder_id = %s
|
||||
WHERE student_id = %s AND date = %s
|
||||
WHERE student_id = %s AND date = %s AND slot = %s
|
||||
"""
|
||||
await execute_update(sql, (status, reason, recorder_id, student_id, date))
|
||||
await execute_update(sql, (status, reason, recorder_id, student_id, date, slot))
|
||||
return existing["attendance_id"]
|
||||
else:
|
||||
# 插入新记录
|
||||
sql = """
|
||||
INSERT INTO attendance_records (student_id, date, status, reason, recorder_id)
|
||||
VALUES (%s, %s, %s, %s, %s)
|
||||
INSERT INTO attendance_records (student_id, date, slot, status, reason, recorder_id)
|
||||
VALUES (%s, %s, %s, %s, %s, %s)
|
||||
"""
|
||||
return await execute_insert(sql, (student_id, date, status, reason, recorder_id))
|
||||
return await execute_insert(sql, (student_id, date, slot, status, reason, recorder_id))
|
||||
|
||||
@staticmethod
|
||||
async def mark_deduction_applied(attendance_id: int) -> bool:
|
||||
|
||||
Reference in New Issue
Block a user