蒋立建

This commit is contained in:
2026-09-23 15:29:41 +08:00
parent 0d7bfe5516
commit 40feb350af
3 changed files with 98 additions and 43 deletions
+13 -8
View File
@@ -2,26 +2,31 @@ from fastapi import APIRouter, Depends, Query
from typing import Annotated
from util.database import get_db
from schema.cla_schema import claRequest
from dao.cla_dao import add_class_dao,get_class_dao,update_class_dao,delete_class_dao
from dao.cla_dao import add_class_dao, get_class_dao, update_class_dao, delete_class_dao
claAPI = APIRouter(prefix="/class", tags=["班级管理模块"])
claAPI = APIRouter(prefix="/class", tags=["班级管理模块"]) #定义路由 统一前缀 归类显示
@claAPI.post("/", summary="新增班级信息")
def add_class(data: claRequest, Session = Depends(get_db)): #调用dao层方法 将请求数据和数据库传进去
return add_class_dao(data, Session) #依赖注入数据库会话 获取session
def add_class(data: claRequest, Session=Depends(get_db)):
return add_class_dao(data, Session)
@claAPI.get("/list", summary="查询班级信息")
def list_class(
n: Annotated[int, Query(ge=1, description="页码,从1开始")],
m: Annotated[int, Query(ge=1, description="每页条数")],Session = Depends(get_db)):
return get_class_dao(n,m,Session)
m: Annotated[int, Query(ge=1, description="每页条数")],
Session=Depends(get_db)):
return get_class_dao(n, m, Session)
@claAPI.put("/{class_id}", summary="更新班级信息")
def update_class(class_id: int, data: claRequest, Session = Depends(get_db)):
def update_class(class_id: int, data: claRequest, Session=Depends(get_db)):
return update_class_dao(class_id, data, Session)
@claAPI.delete("/{class_id}", summary="逻辑删除班级信息")
def delete_class(class_id: int, Session = Depends(get_db)):
def delete_class(class_id: int, Session=Depends(get_db)):
return delete_class_dao(class_id, Session)
+83 -17
View File
@@ -2,45 +2,111 @@ from model.all_model import ClassManagement
from fastapi import HTTPException
from schema.cla_schema import claRequest
from datetime import datetime
from sqlalchemy.exc import SQLAlchemyError
import logging
logger = logging.getLogger(__name__)
def add_class_dao(c: claRequest, session):
try:
# ---------- 校验:班级名称不能重复 ----------
# 只查未删除的记录,含义是:已逻辑删除的班级允许重建同名
exists = (
session.query(ClassManagement)
.filter(ClassManagement.class_name == c.class_name)
.filter(ClassManagement.delete_status == 0)
.first()
)
if exists:
raise HTTPException(400, f"班级 '{c.class_name}' 已存在,不能重复添加")
# 班主任和授课教师可以是同一个人,无需校验
data = c.model_dump()
d = ClassManagement(**data)
session.add(d)
session.commit()
session.refresh(d)
return d
except:
except HTTPException:
raise
except SQLAlchemyError as e:
session.rollback()
logger.error(f"新增班级失败: {e}")
raise HTTPException(400, "输入有误,请重新添加班级!")
def get_class_dao(n,m,session):
def get_class_dao(n: int, m: int, session):
try:
class_list=session.query(ClassManagement).filter(ClassManagement.delete_status==0).offset((n-1)*m).limit(m).all()
if n < 1 or m < 1:
return []
class_list = (
session.query(ClassManagement)
.filter(ClassManagement.delete_status == 0)
.offset((n - 1) * m)
.limit(m)
.all()
)
return class_list
except:
raise HTTPException(status_code=406,detail="输入查询信息有误,请重新输入!")
except SQLAlchemyError as e:
logger.error(f"查询班级列表失败: {e}")
raise HTTPException(status_code=400, detail="查询失败,请稍后重试!")
def update_class_dao(id:int,req:claRequest,session):
def update_class_dao(class_id: int, req: claRequest, session):
try:
session.query(ClassManagement).filter(ClassManagement.class_id==id)\
.filter(ClassManagement.delete_status==0).update(req.model_dump(exclude_unset=True)) #只更新用户传过来的数据
rows = (
session.query(ClassManagement)
.filter(ClassManagement.class_id == class_id)
.filter(ClassManagement.delete_status == 0)
.update(req.model_dump(exclude_unset=True), synchronize_session=False)
)
session.commit()
except:
raise HTTPException(status_code=400,detail="更新格式错误或参数缺失,请重新输入!")
return '更新成功,请核对信息!'
if rows == 0:
raise HTTPException(status_code=404, detail="该班级不存在或已被删除")
except HTTPException:
session.rollback()
raise
except SQLAlchemyError as e:
session.rollback()
logger.error(f"更新班级失败: {e}")
raise HTTPException(status_code=400, detail="更新失败,请检查参数")
return {"code": 200, "msg": "更新成功"}
def delete_class_dao(id:int,session):
def delete_class_dao(class_id: int, session):
try:
session.query(ClassManagement).filter(ClassManagement.class_id==id,ClassManagement.delete_status==0)\
.update({'delete_status': 1,'delete_time': datetime.now()})
# 先按 class_id 查记录,再判断状态,从而区分"不存在"和"已删除"
obj = (
session.query(ClassManagement)
.filter(ClassManagement.class_id == class_id)
.first()
)
# 情况 1:记录不存在
if obj is None:
raise HTTPException(status_code=404, detail="该班级不存在")
# 情况 2:记录存在但已删除 → 提示"已删除"
if obj.delete_status == 1:
raise HTTPException(status_code=400, detail="该班级已被删除,请勿重复操作")
# 情况 3:执行逻辑删除
obj.delete_status = 1
obj.delete_time = datetime.now()
session.commit()
except:
raise HTTPException(status_code=404, detail="删除异常,请重新核对之后删除!") #只置1,非真删除
return '删除成功,请核对信息!'
except HTTPException:
session.rollback()
raise
except SQLAlchemyError as e:
session.rollback()
logger.error(f"删除班级失败: {e}")
raise HTTPException(status_code=400, detail="删除异常,请核对后重试!")
return {"code": 200, "msg": "删除成功"}
+2 -18
View File
@@ -1,26 +1,10 @@
from datetime import date
from pydantic import BaseModel
class claRequest(BaseModel):
class_name : str|None = None
start_class_date :date
head_teacher_id : int|None = None
class_teacher_id : int|None = None
class claResponse(BaseModel):
code: int = 200
detail: str = 'ok'
class claRequest(BaseModel): #请求体,获取json格式数据给api层再给schema校验,校验后给dao层操作数据库
class_name: str | None = None
start_class_date: date
head_teacher_id: int | None = None
class_teacher_id: int | None = None