# =========================================== # 班级操行分管理系统 - 后端服务 # # 开发者: Canglan # 联系方式: admin@sea-studio.top # 版权归属: Sea Network Technology Studio # 许可证: MIT License # # 版权所有 © Sea Network Technology Studio # =========================================== from typing import Dict, Any, Optional from models.user import UserModel from models.student import StudentModel from models.conduct import ConductModel from models.homework import HomeworkModel from models.attendance import AttendanceModel from utils.logger import get_logger logger = get_logger(__name__) class ParentService: """家长服务""" @staticmethod async def get_child_conduct(parent_id: int) -> Dict[str, Any]: """获取子女操行分(仅总分,家长端不显示详细记录)""" # 获取家长关联的学生 user = await UserModel.get_by_user_id(parent_id) if not user or not user["student_id"]: return {"error": "未关联学生"} student = await StudentModel.get_by_id(user["student_id"]) if not student: return {"error": "学生不存在"} return { "student_id": student["student_id"], "student_name": student["name"], "student_no": student["student_no"], "total_points": student["total_points"] } @staticmethod async def get_child_homework(parent_id: int) -> Dict[str, Any]: """获取子女作业情况""" user = await UserModel.get_by_user_id(parent_id) if not user or not user["student_id"]: return {"error": "未关联学生"} student = await StudentModel.get_by_id(user["student_id"]) if not student: return {"error": "学生不存在"} homework = await HomeworkModel.get_student_homework(user["student_id"]) return { "student_id": student["student_id"], "student_name": student["name"], "homework": homework } @staticmethod async def get_child_attendance(parent_id: int) -> Dict[str, Any]: """获取子女考勤记录""" user = await UserModel.get_by_user_id(parent_id) if not user or not user["student_id"]: return {"error": "未关联学生"} student = await StudentModel.get_by_id(user["student_id"]) if not student: return {"error": "学生不存在"} records = await AttendanceModel.get_student_records(user["student_id"]) return { "student_id": student["student_id"], "student_name": student["name"], "records": records }