第四版_完整

This commit is contained in:
jianqi
2026-09-14 15:23:26 +08:00
parent 06c329fdd1
commit c2909191d2
14 changed files with 84 additions and 64 deletions
+5 -4
View File
@@ -1,6 +1,6 @@
# dao/cls_mgmt_dao.py
# 本文件封装对 ClsMgmt 表的所有数据库操作(增、删、改、查)
from fastapi import HTTPException
from sqlalchemy.orm import Session
from model.cls_mgmt_model import ClsMgmt
@@ -19,7 +19,7 @@ class ClsMgmtDAO:
:param limit: 最大返回条数
:return: 用户对象列表
"""
return db.query(ClsMgmt).offset(skip).limit(limit).all()
return db.query(ClsMgmt).filter(ClsMgmt.is_deleted == 0).offset(skip).limit(limit).all()
# -> Optional[ClsMgmt]
# @staticmethod
@@ -36,7 +36,7 @@ class ClsMgmtDAO:
根据主键 ID 获取单个班级
:return: 班级对象或 None
"""
return db.query(ClsMgmt).filter(ClsMgmt.id == class_id).first()
return db.query(ClsMgmt).filter(ClsMgmt.id == class_id,ClsMgmt.is_deleted == 0).first()
@@ -115,7 +115,8 @@ class ClsMgmtDAO:
update_cls.lecturer_id=cls_data.lecturer_id
db.commit()
return update_cls
return f"班级{class_id}不存在"
raise HTTPException(status_code=404, detail=f"班级{class_id}不存在")
+5 -6
View File
@@ -7,8 +7,7 @@ from sqlalchemy.orm import Session
from model.employ_model import StudentEmployManage as ETable
from scheme.employ_scheme import EmployStatusCreate as EModel, EmployStatusQuery as QModel,EmployStatusDelete as DModel
from model.stu_model import StuInfo
from typing import Optional, List
from typing import List
class StudentEmployManageDAO:
"""
封装stu_emp_mgmt 表的所有数据库操作(增、删、改、查)
@@ -197,13 +196,13 @@ class StudentEmployManageDAO:
:return: 返回查询到的 所有 学生就业信息
"""
e_all = db.query(ETable)
if emp_sta_query.stu_id: # 根据 学生编号 筛选出 学生就业信息
if emp_sta_query.stu_id is not None: # 根据 学生编号 筛选出 学生就业信息
e_all = e_all.filter(ETable.stu_id == emp_sta_query.stu_id)
if emp_sta_query.emp_company: # 根据 就业公司名称 模糊筛选出 学生就业信息
if emp_sta_query.emp_company is not None: # 根据 就业公司名称 模糊筛选出 学生就业信息
e_all = e_all.filter(ETable.emp_company.like(f"%{emp_sta_query.emp_company}%"))
if emp_sta_query.min_salary: # 根据 最小薪资范围 筛选出 大于 最小薪资范围的 学生就业信息
if emp_sta_query.min_salary is not None: # 根据 最小薪资范围 筛选出 大于 最小薪资范围的 学生就业信息
e_all = e_all.filter(ETable.salary >= emp_sta_query.min_salary)
if emp_sta_query.max_salary: # 根据 最大薪资范围 筛选出 小于 最大薪资范围的 学生就业信息
if emp_sta_query.max_salary is not None: # 根据 最大薪资范围 筛选出 小于 最大薪资范围的 学生就业信息
e_all = e_all.filter(ETable.salary <= emp_sta_query.max_salary)
total = e_all.count()
+9 -3
View File
@@ -2,6 +2,8 @@
# 本文件封装对 所有相关表的 所有数据库操作(统计查询)
from collections import defaultdict
from fastapi.openapi.utils import status_code_ranges
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session, joinedload
from sqlalchemy import func, case, and_, join, asc, desc
@@ -9,7 +11,7 @@ from model import StudentEmployManage
from model.stu_model import StuInfo
from model.stu_score_model import StuScore
from typing import Optional, List, Dict
from scheme.statistics_scheme import StatsResponse, ExamScoreItem, StuInfoAllExamAboveScore, FailingStudentItem, \
from scheme.statistics_scheme import ClassGenderDistributionItem, ExamScoreItem, StuInfoAllExamAboveScore, FailingStudentItem, \
ClassExamAvgScoreItem, TopSalaryStudentItem, StudentEmpDurationItem, ClassAvgEmpDurationItem, StudentAgeDetailItem
@@ -17,7 +19,7 @@ class StatisticsDao:
"""用户数据访问对象,所有方法均为静态方法,方便调用"""
@staticmethod
def get_cls_stats(db: Session) -> List[StatsResponse]:
def get_class_gender_distribution(db: Session) -> List[ClassGenderDistributionItem]:
all_cls_gender_stats = (
db.query(
@@ -31,7 +33,7 @@ class StatisticsDao:
)
return [
StatsResponse(
ClassGenderDistributionItem(
cls_id=i.cls_id,
total_cnt=i.total_cnt,
man_cnt=i.man_cnt,
@@ -96,6 +98,10 @@ class StatisticsDao:
@staticmethod
def find_students_fail_count(db: Session, fail_cnt: int) -> List[FailingStudentItem]:
test_max_cnt = len(db.query(StuScore.exam_attempt).group_by(StuScore.exam_attempt).all())
if fail_cnt > test_max_cnt:
raise HTTPException(status_code = 400, detail = f'最大次数为{test_max_cnt}')
stu_fail_dict = StatisticsDao.get_stu_dict_who_fail(db)
ans = []
+2 -2
View File
@@ -61,9 +61,9 @@ class TeacherDao:
:return: 创建后的 teacher 对象(含id )
"""
# 教师id自动生成 格式:T+随机四位数 并进行重复验证
# 教师id自动生成 格式:t+随机三位数 并进行重复验证
while True:
new_id = f"T{random.randint(100, 999)}" # 确保是4位数,不会出现 0012 这种情况
new_id = f"t{random.randint(100, 999)}" # 确保是3位数,不会出现 002 这种情况
# 查询数据库是否已存在这个 id
exists = db.query(Teacher).filter(Teacher.id == new_id).first()