Merge branch 'main' into zhangyi

# Conflicts:
#	models/class_teacher.py
#	models/teacher.py
This commit is contained in:
2026-09-21 19:23:33 +08:00
24 changed files with 558 additions and 19 deletions
+29
View File
@@ -0,0 +1,29 @@
from models.class_model import Classes
def post_classes_dao( c , db ):
try :
cc = Classes( **c )
db.add( cc )
except :
db.rollback()
return False
else :
db.commit()
return True
def update_classes_dao( class_id , db , updates ):
try :
db.query( Classes ).filter( Classes.id==class_id , Classes.is_deleted==0 ) .update( updates )
except :
db.rollback()
return False
else :
db.commit()
return True
# def get_classes_dao( class_id , class_name , db ):
# try :
# r = db.query( Classes ).filter( Classes.id==class_id , Classes.is_deleted==0 ) .all()
# except :
# db.rollback()
+82
View File
@@ -0,0 +1,82 @@
from models.consultant import Consultant
from schemas.consultant import ConsultantCreate, ConsultantUpdate
from sqlalchemy.orm import Session
def create_consultant(db:Session, obj_in: ConsultantCreate):
try:
db_obj = Consultant(**obj_in.model_dump())
db.add(db_obj)
except:
db.rollback()
return False
else:
db.commit()
return db_obj
# 查询全部可分页(过滤已删除)
def get_consultant_list(
db: Session,
page: int = 1,
page_size: int = 20,
name: str | None = None,
phone: str | None = None
):
page_size = max(1, min(page_size, 100))
skip = (page - 1) * page_size
query = db.query(Consultant).filter(Consultant.is_deleted == 0)
# 有传参数才追加过滤条件
if name:
query = query.filter(Consultant.consultant_name.like(f"%{name}%"))
if phone:
query = query.filter(Consultant.phone.like(f"%{phone}%"))
total = query.count()
items = query.offset(skip).limit(page_size).all()
return {
"items": items,
"total": total,
"page": page,
"page_size": page_size
}
# 根据id查单条
def get_consultant_by_id(db:Session, cid: int):
return db.query(Consultant).filter(Consultant.id == cid, Consultant.is_deleted == 0 ).first()
# 修改
def update_consultant(db: Session, cid: int, update_data: dict):
try:
db_obj = db.query(Consultant).filter(
Consultant.id == cid,
Consultant.is_deleted == 0
).first()
if not db_obj:
return None
# 循环赋值
for k, v in update_data.items():
setattr(db_obj, k, v)
db.commit()
db.refresh(db_obj) # 刷新从数据库拿最新数据(updated_at)
return db_obj
except Exception:
db.rollback()
return None
# 逻辑删除(只改is_deleted=1)
def delete_consultant(db:Session, cid: int):
try:
db_obj = get_consultant_by_id(db, cid)
if not db_obj:
return None
db_obj.is_deleted = 1
except:
db.rollback()
return None
else:
db.commit()
return db_obj
+30
View File
@@ -0,0 +1,30 @@
from DoubaoTeam.schemas.statistics import NoExist
from sqlalchemy import func
#`GET /statistics/students/age-over-30`
#查询所有超过 30 岁的学员信息
def age_over_thirty(Student,db):
student_list=db.query(Student).filter(Student.age>=30).all()
if not student_list :
raise NoExist('无目标年龄大于30岁')
return student_list
def gender_count(Student,db):
result=db.query(Student.class_id,Student.gender,func.count(Student.id)).group_by(Student.class_id,Student.gender).all()
if not result :
raise NoExist('班里招点人吧,要倒闭了')
dict1 = {}
for i,j,k in result:
if i not in dict1 :
dict1[i]={'男':0,'女':0}
dict[i][j]+=k
return dict1
#查询每次考试成绩都在 80 分以上的学生编号、姓名和成绩
def score_over_eighty(Score,Student,db):
student_list=db.query(Student.id, Student.student_name)\
.join(Student,Score.student_id==Student.id).group_by(Student.student_no,Student.student_name)\
.having(func.min(Score.score)>80).all()
for i in student_list:
student_list2 = db.query(Student.student_no, Student.student_name,Score.score).join(Student,Score.student_id==Student.id).filter(i.id==Student.id).all()
+16
View File
@@ -0,0 +1,16 @@
from schemas.student import *
from core.database import get_db
from models.student import *
from utils.code_generator import generate_no
def create_students(d,db):
stu = Student(**d)
try:
db.add(stu)
generate_no("student_no", "STU", stu, db)
db.commit()
except:return False
else:
return True