v2.2更新
This commit is contained in:
@@ -20,16 +20,15 @@ from middleware.permission import (
|
||||
)
|
||||
from services.admin_service import AdminService
|
||||
from services.conduct_service import ConductService
|
||||
from services.homework_service import HomeworkService
|
||||
from services.attendance_service import AttendanceService
|
||||
from services.log_service import LogService
|
||||
from utils.redis_client import RedisClient
|
||||
from schemas.admin import (
|
||||
AddPointsRequest, RevokeRequest, AddAdminRequest,
|
||||
AddStudentRequest, UpdateStudentRequest,
|
||||
UpdateHomeworkStatusRequest, AddAttendanceRequest,
|
||||
AddAttendanceRequest,
|
||||
UpdateAdminRequest, DeleteAdminRequest, ResetPasswordRequest,
|
||||
CreateAssignmentRequest, UnlockUserRequest
|
||||
UnlockUserRequest
|
||||
)
|
||||
from utils.response import success_response, error_response
|
||||
from utils.logger import get_logger
|
||||
@@ -41,18 +40,31 @@ logger = get_logger(__name__)
|
||||
|
||||
# ========== 学生管理 ==========
|
||||
|
||||
@router.get("/students/dormitories")
|
||||
async def get_dormitory_list(request: Request):
|
||||
"""获取宿舍号列表"""
|
||||
user = await get_current_user(request)
|
||||
if user["user_type"] != "admin":
|
||||
return error_response(message="仅管理员可查看", code=403)
|
||||
|
||||
from models.student import StudentModel
|
||||
dormitories = await StudentModel.get_dormitory_list()
|
||||
return success_response(data={"dormitories": dormitories})
|
||||
|
||||
|
||||
@router.get("/students")
|
||||
async def get_students(
|
||||
request: Request,
|
||||
page: int = Query(1, ge=1),
|
||||
page_size: int = Query(20, ge=1, le=1000),
|
||||
search: Optional[str] = None
|
||||
search: Optional[str] = None,
|
||||
dormitory_number: Optional[str] = None
|
||||
):
|
||||
"""获取所有学生列表(单班级)"""
|
||||
user = await get_current_user(request)
|
||||
if user["user_type"] != "admin":
|
||||
return error_response(message="仅管理员可查看学生列表", code=403)
|
||||
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, dormitory_number=dormitory_number)
|
||||
return success_response(data=result)
|
||||
|
||||
|
||||
@@ -139,7 +151,8 @@ async def update_student(request: Request, student_id: int, req: UpdateStudentRe
|
||||
result = await AdminService.update_student(
|
||||
student_id=student_id,
|
||||
name=req.name,
|
||||
parent_phone=req.parent_phone
|
||||
parent_phone=req.parent_phone,
|
||||
dormitory_number=req.dormitory_number
|
||||
)
|
||||
if result["success"]:
|
||||
await LogService.write_operation_log(
|
||||
@@ -207,6 +220,9 @@ async def reset_student_password(request: Request, student_id: int, req: ResetPa
|
||||
async def add_conduct_points(request: Request, req: AddPointsRequest):
|
||||
"""批量加减分"""
|
||||
user = await get_current_user(request)
|
||||
# 仅管理员(班主任/班干部)可操作
|
||||
if user["user_type"] != "admin":
|
||||
return error_response(message="无权进行此操作", code=403)
|
||||
result = await ConductService.add_points(
|
||||
student_ids=req.student_ids,
|
||||
points_change=req.points_change,
|
||||
@@ -236,6 +252,9 @@ async def add_conduct_points(request: Request, req: AddPointsRequest):
|
||||
async def revoke_conduct_record(request: Request, req: RevokeRequest):
|
||||
"""撤销扣分记录"""
|
||||
user = await get_current_user(request)
|
||||
# 仅管理员(班主任/班干部)可操作
|
||||
if user["user_type"] != "admin":
|
||||
return error_response(message="无权进行此操作", code=403)
|
||||
result = await ConductService.revoke_record(
|
||||
record_id=req.record_id,
|
||||
revoker_id=user["user_id"]
|
||||
@@ -264,6 +283,9 @@ async def revoke_conduct_record(request: Request, req: RevokeRequest):
|
||||
async def restore_conduct_record(request: Request, req: RevokeRequest):
|
||||
"""反撤销(恢复)已撤销的记录"""
|
||||
user = await get_current_user(request)
|
||||
# 仅管理员(班主任/班干部)可操作
|
||||
if user["user_type"] != "admin":
|
||||
return error_response(message="无权进行此操作", code=403)
|
||||
result = await ConductService.restore_record(
|
||||
record_id=req.record_id,
|
||||
restorer_id=user["user_id"]
|
||||
@@ -319,86 +341,6 @@ async def get_conduct_history(
|
||||
return error_response(message=f"获取历史记录失败: {str(e)}")
|
||||
|
||||
|
||||
# ========== 作业管理 ==========
|
||||
|
||||
@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)
|
||||
|
||||
|
||||
@router.post("/homework/assignment")
|
||||
async def create_assignment(request: Request, req: CreateAssignmentRequest):
|
||||
"""发布作业(班主任)"""
|
||||
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=req.subject_id,
|
||||
title=req.title,
|
||||
description=req.description,
|
||||
deadline=req.deadline,
|
||||
created_by=user["user_id"]
|
||||
)
|
||||
if result["success"]:
|
||||
await LogService.write_operation_log(
|
||||
operator_id=user["user_id"], operator_name=user["real_name"],
|
||||
operator_role="班主任", operation_type="create_assignment",
|
||||
target_type="homework",
|
||||
details=f"发布作业: {title}",
|
||||
ip=request.client.host
|
||||
)
|
||||
return success_response(data=result, message="作业发布成功")
|
||||
else:
|
||||
return error_response(message=result["message"])
|
||||
|
||||
|
||||
@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,
|
||||
comments=req.comments,
|
||||
apply_deduction=req.apply_deduction,
|
||||
operator_id=user["user_id"]
|
||||
)
|
||||
if result["success"]:
|
||||
await LogService.write_operation_log(
|
||||
operator_id=user["user_id"], operator_name=user["real_name"],
|
||||
operator_role=role, operation_type="update_submission",
|
||||
target_type="homework", target_id=req.submission_id,
|
||||
details=f"状态: {req.status}",
|
||||
ip=request.client.host
|
||||
)
|
||||
return success_response(message="状态更新成功")
|
||||
else:
|
||||
return error_response(message=result["message"])
|
||||
|
||||
|
||||
# ========== 考勤管理 ==========
|
||||
|
||||
|
||||
Reference in New Issue
Block a user