v0.1测试
This commit is contained in:
64
backend/routes/admin.py
Normal file
64
backend/routes/admin.py
Normal file
@@ -0,0 +1,64 @@
|
||||
# ===========================================
|
||||
# 班级操行分管理系统 - 管理端路由
|
||||
#
|
||||
# 开发者: Canglan
|
||||
# 联系方式: admin@sea-studio.top
|
||||
# 版权归属: Sea Network Technology Studio
|
||||
# 许可证: MIT License
|
||||
#
|
||||
# 版权所有 © Sea Network Technology Studio
|
||||
# ===========================================
|
||||
|
||||
# 在 admin.py 中修改导入接口
|
||||
|
||||
@router.post("/students/import")
|
||||
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)
|
||||
|
||||
# 检查文件大小
|
||||
file_size = 0
|
||||
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:
|
||||
import json
|
||||
data = json.loads(content.decode('utf-8'))
|
||||
students = data.get("students", [])
|
||||
except json.JSONDecodeError as e:
|
||||
return error_response(message=f"JSON格式错误: {str(e)}")
|
||||
except UnicodeDecodeError:
|
||||
return error_response(message="文件编码错误,请使用UTF-8编码")
|
||||
|
||||
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']}人")
|
||||
Reference in New Issue
Block a user