v0.2测试修复
This commit is contained in:
@@ -14,9 +14,8 @@ from typing import Optional, List
|
||||
import json
|
||||
|
||||
from middleware.permission import (
|
||||
get_current_user,
|
||||
require_teacher,
|
||||
require_monitor,
|
||||
get_current_user,
|
||||
require_teacher,
|
||||
PermissionChecker
|
||||
)
|
||||
from services.admin_service import AdminService
|
||||
@@ -27,7 +26,7 @@ from schemas.admin import (
|
||||
AddPointsRequest, RevokeRequest, AddAdminRequest,
|
||||
UpdateHomeworkStatusRequest, AddAttendanceRequest
|
||||
)
|
||||
from utils.response import success_response, error_response, paginated_response
|
||||
from utils.response import success_response, error_response
|
||||
from utils.logger import get_logger
|
||||
from config import settings
|
||||
|
||||
@@ -44,50 +43,30 @@ async def get_students(
|
||||
page_size: int = Query(20, ge=1, le=100),
|
||||
search: Optional[str] = None
|
||||
):
|
||||
"""
|
||||
获取所有学生列表(单班级)
|
||||
"""
|
||||
"""获取所有学生列表(单班级)"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
result = await AdminService.get_students(
|
||||
page=page,
|
||||
page_size=page_size,
|
||||
search=search
|
||||
)
|
||||
|
||||
result = await AdminService.get_students(page=page, page_size=page_size, search=search)
|
||||
return success_response(data=result)
|
||||
|
||||
|
||||
@router.post("/students/import")
|
||||
async def import_students(
|
||||
request: Request,
|
||||
file: UploadFile = File(...)
|
||||
):
|
||||
"""
|
||||
批量导入学生(JSON格式)
|
||||
初始操行分默认为60分
|
||||
"""
|
||||
async def import_students(request: Request, file: UploadFile = File(...)):
|
||||
"""批量导入学生(JSON格式),初始操行分默认为60分"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
# 检查权限(仅班主任)
|
||||
is_teacher = await PermissionChecker.check_is_teacher(user["user_id"])
|
||||
if not is_teacher:
|
||||
return error_response(message="仅班主任可导入学生", code=403)
|
||||
|
||||
# 检查文件大小
|
||||
content = await file.read()
|
||||
file_size = len(content)
|
||||
|
||||
if file_size > settings.MAX_UPLOAD_SIZE:
|
||||
return error_response(message=f"文件大小不能超过{settings.MAX_UPLOAD_SIZE // 1024 // 1024}MB")
|
||||
|
||||
# 检查文件扩展名
|
||||
filename = file.filename or ""
|
||||
extension = filename.split('.')[-1].lower() if '.' in filename else ''
|
||||
if extension not in settings.ALLOWED_EXTENSIONS:
|
||||
return error_response(message=f"不支持的文件类型,仅支持 {', '.join(settings.ALLOWED_EXTENSIONS)}")
|
||||
|
||||
# 解析JSON
|
||||
try:
|
||||
data = json.loads(content.decode('utf-8'))
|
||||
students = data.get("students", [])
|
||||
@@ -99,13 +78,11 @@ async def import_students(
|
||||
if not students:
|
||||
return error_response(message="文件中没有学生数据")
|
||||
|
||||
# 导入学生(初始操行分60分)
|
||||
result = await AdminService.import_students(
|
||||
students=students,
|
||||
operator_id=user["user_id"],
|
||||
initial_points=60
|
||||
)
|
||||
|
||||
return success_response(data=result, message=f"导入完成: 成功{result['success_count']}人,失败{result['failed_count']}人")
|
||||
|
||||
|
||||
@@ -116,11 +93,8 @@ async def add_student(
|
||||
name: str,
|
||||
parent_phone: Optional[str] = None
|
||||
):
|
||||
"""
|
||||
新增学生
|
||||
"""
|
||||
"""新增学生"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
is_teacher = await PermissionChecker.check_is_teacher(user["user_id"])
|
||||
if not is_teacher:
|
||||
return error_response(message="仅班主任可新增学生", code=403)
|
||||
@@ -132,7 +106,6 @@ async def add_student(
|
||||
operator_id=user["user_id"],
|
||||
initial_points=60
|
||||
)
|
||||
|
||||
if result["success"]:
|
||||
return success_response(data=result, message="学生添加成功")
|
||||
else:
|
||||
@@ -143,11 +116,8 @@ async def add_student(
|
||||
|
||||
@router.post("/conduct/add")
|
||||
async def add_conduct_points(request: Request, req: AddPointsRequest):
|
||||
"""
|
||||
批量加减分
|
||||
"""
|
||||
"""批量加减分"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
result = await ConductService.add_points(
|
||||
student_ids=req.student_ids,
|
||||
points_change=req.points_change,
|
||||
@@ -155,7 +125,6 @@ async def add_conduct_points(request: Request, req: AddPointsRequest):
|
||||
recorder_id=user["user_id"],
|
||||
recorder_name=user["username"]
|
||||
)
|
||||
|
||||
if result["success"]:
|
||||
return success_response(data=result, message="操作成功")
|
||||
else:
|
||||
@@ -164,16 +133,12 @@ async def add_conduct_points(request: Request, req: AddPointsRequest):
|
||||
|
||||
@router.post("/conduct/revoke")
|
||||
async def revoke_conduct_record(request: Request, req: RevokeRequest):
|
||||
"""
|
||||
撤销扣分记录
|
||||
"""
|
||||
"""撤销扣分记录"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
result = await ConductService.revoke_record(
|
||||
record_id=req.record_id,
|
||||
revoker_id=user["user_id"]
|
||||
)
|
||||
|
||||
if result["success"]:
|
||||
return success_response(message="撤销成功")
|
||||
else:
|
||||
@@ -189,11 +154,8 @@ async def get_conduct_history(
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None
|
||||
):
|
||||
"""
|
||||
获取操行分历史记录
|
||||
"""
|
||||
"""获取操行分历史记录"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
result = await ConductService.get_history(
|
||||
user_id=user["user_id"],
|
||||
student_id=student_id,
|
||||
@@ -202,7 +164,6 @@ async def get_conduct_history(
|
||||
start_date=start_date,
|
||||
end_date=end_date
|
||||
)
|
||||
|
||||
return success_response(data=result)
|
||||
|
||||
|
||||
@@ -210,31 +171,26 @@ async def get_conduct_history(
|
||||
|
||||
@router.get("/homework/assignments")
|
||||
async def get_assignments(request: Request):
|
||||
"""
|
||||
获取作业列表
|
||||
"""
|
||||
"""获取作业列表"""
|
||||
user = await get_current_user(request)
|
||||
role = await PermissionChecker.get_user_role(user["user_id"])
|
||||
if role not in ["班主任", "学习委员"]:
|
||||
return error_response(message="无权限", code=403)
|
||||
|
||||
result = await HomeworkService.get_assignments(user["user_id"])
|
||||
|
||||
return success_response(data=result)
|
||||
|
||||
|
||||
@router.get("/homework/submissions/{assignment_id}")
|
||||
async def get_submissions(request: Request, assignment_id: int):
|
||||
"""
|
||||
获取作业提交记录
|
||||
"""
|
||||
"""获取作业提交记录"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
role = await PermissionChecker.get_user_role(user["user_id"])
|
||||
if role not in ["班主任", "学习委员"]:
|
||||
return error_response(message="无权限", code=403)
|
||||
result = await HomeworkService.get_submissions(
|
||||
assignment_id=assignment_id,
|
||||
user_id=user["user_id"]
|
||||
)
|
||||
|
||||
return success_response(data=result)
|
||||
|
||||
|
||||
@@ -246,15 +202,11 @@ async def create_assignment(
|
||||
description: Optional[str] = None,
|
||||
deadline: str = None
|
||||
):
|
||||
"""
|
||||
发布作业(班主任)
|
||||
"""
|
||||
"""发布作业(班主任)"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
is_teacher = await PermissionChecker.check_is_teacher(user["user_id"])
|
||||
if not is_teacher:
|
||||
return error_response(message="仅班主任可发布作业", code=403)
|
||||
|
||||
result = await HomeworkService.create_assignment(
|
||||
subject_id=subject_id,
|
||||
title=title,
|
||||
@@ -262,7 +214,6 @@ async def create_assignment(
|
||||
deadline=deadline,
|
||||
created_by=user["user_id"]
|
||||
)
|
||||
|
||||
if result["success"]:
|
||||
return success_response(data=result, message="作业发布成功")
|
||||
else:
|
||||
@@ -271,11 +222,11 @@ async def create_assignment(
|
||||
|
||||
@router.put("/homework/submission")
|
||||
async def update_submission_status(request: Request, req: UpdateHomeworkStatusRequest):
|
||||
"""更新作业提交状态(班主任或学习委员)"""
|
||||
user = await get_current_user(request)
|
||||
role = await PermissionChecker.get_user_role(user["user_id"])
|
||||
if role not in ["班主任", "学习委员"]:
|
||||
return error_response(message="无权进行此操作", code=403)
|
||||
|
||||
result = await HomeworkService.update_submission_status(
|
||||
submission_id=req.submission_id,
|
||||
status=req.status,
|
||||
@@ -283,7 +234,6 @@ async def update_submission_status(request: Request, req: UpdateHomeworkStatusRe
|
||||
apply_deduction=req.apply_deduction,
|
||||
operator_id=user["user_id"]
|
||||
)
|
||||
|
||||
if result["success"]:
|
||||
return success_response(message="状态更新成功")
|
||||
else:
|
||||
@@ -294,11 +244,11 @@ async def update_submission_status(request: Request, req: UpdateHomeworkStatusRe
|
||||
|
||||
@router.post("/attendance")
|
||||
async def add_attendance(request: Request, req: AddAttendanceRequest):
|
||||
"""
|
||||
添加考勤记录(考勤委员)
|
||||
"""
|
||||
"""添加考勤记录(考勤委员)"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
role = await PermissionChecker.get_user_role(user["user_id"])
|
||||
if role not in ["班主任", "考勤委员"]:
|
||||
return error_response(message="无权进行此操作", code=403)
|
||||
result = await AttendanceService.add_attendance(
|
||||
student_id=req.student_id,
|
||||
date=str(req.date),
|
||||
@@ -307,7 +257,6 @@ async def add_attendance(request: Request, req: AddAttendanceRequest):
|
||||
apply_deduction=req.apply_deduction,
|
||||
recorder_id=user["user_id"]
|
||||
)
|
||||
|
||||
if result["success"]:
|
||||
return success_response(message="考勤记录添加成功")
|
||||
else:
|
||||
@@ -320,17 +269,13 @@ async def get_attendance_records(
|
||||
date: Optional[str] = None,
|
||||
student_id: Optional[int] = None
|
||||
):
|
||||
"""
|
||||
获取考勤记录
|
||||
"""
|
||||
"""获取考勤记录"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
result = await AttendanceService.get_records(
|
||||
user_id=user["user_id"],
|
||||
date=date,
|
||||
student_id=student_id
|
||||
)
|
||||
|
||||
return success_response(data=result)
|
||||
|
||||
|
||||
@@ -338,15 +283,11 @@ async def get_attendance_records(
|
||||
|
||||
@router.post("/admin/add")
|
||||
async def add_admin(request: Request, req: AddAdminRequest):
|
||||
"""
|
||||
添加管理员(班主任)
|
||||
"""
|
||||
"""添加管理员(班主任)"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
if not await PermissionChecker.check_is_teacher(user["user_id"]):
|
||||
is_teacher = await PermissionChecker.check_is_teacher(user["user_id"])
|
||||
if not is_teacher:
|
||||
return error_response(message="仅班主任可添加管理员", code=403)
|
||||
|
||||
# 验证角色类型是否合法
|
||||
if req.role_type not in ["班长", "学习委员", "考勤委员", "劳动委员"]:
|
||||
return error_response(message="无效的角色类型", code=400)
|
||||
result = await AdminService.add_admin(
|
||||
@@ -356,15 +297,6 @@ async def add_admin(request: Request, req: AddAdminRequest):
|
||||
role_type=req.role_type,
|
||||
operator_id=user["user_id"]
|
||||
)
|
||||
|
||||
result = await AdminService.add_admin(
|
||||
username=req.username,
|
||||
real_name=req.real_name,
|
||||
password=req.password,
|
||||
role_type=req.role_type,
|
||||
operator_id=user["user_id"]
|
||||
)
|
||||
|
||||
if result["success"]:
|
||||
return success_response(data=result, message="管理员添加成功")
|
||||
else:
|
||||
@@ -373,15 +305,10 @@ async def add_admin(request: Request, req: AddAdminRequest):
|
||||
|
||||
@router.get("/admin/list")
|
||||
async def get_admins(request: Request):
|
||||
"""
|
||||
获取管理员列表(班主任)
|
||||
"""
|
||||
"""获取管理员列表(班主任)"""
|
||||
user = await get_current_user(request)
|
||||
|
||||
is_teacher = await PermissionChecker.check_is_teacher(user["user_id"])
|
||||
if not is_teacher:
|
||||
return error_response(message="仅班主任可查看管理员列表", code=403)
|
||||
|
||||
result = await AdminService.get_admins()
|
||||
|
||||
return success_response(data=result)
|
||||
Reference in New Issue
Block a user