parent
69e8e833e6
commit
674d27e936
@ -1,13 +1,132 @@
|
||||
# routes/LoginController.py
|
||||
import os
|
||||
|
||||
from fastapi import APIRouter, Request, Response, Depends
|
||||
from fastapi import APIRouter, Request, Response, Depends, UploadFile, File
|
||||
|
||||
from auth.dependencies import get_current_user
|
||||
from utils.PageUtil import *
|
||||
from utils.ParseRequest import *
|
||||
|
||||
# 创建一个路由实例,需要依赖get_current_user,登录后才能访问
|
||||
router = APIRouter(dependencies=[Depends(get_current_user)])
|
||||
|
||||
# 创建上传文件的目录
|
||||
UPLOAD_DIR = "upload_file"
|
||||
if not os.path.exists(UPLOAD_DIR):
|
||||
os.makedirs(UPLOAD_DIR)
|
||||
|
||||
@router.get("/")
|
||||
async def test(request: Request, response: Response):
|
||||
return {"success": True, "message": "成功!"}
|
||||
# 合法文件扩展名
|
||||
supported_suffix_types = ['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx']
|
||||
|
||||
# 【Document-1】文档管理列表
|
||||
@router.get("/list")
|
||||
async def list(request: Request):
|
||||
# 获取参数
|
||||
person_id = await get_request_str_param(request, "person_id", True, True)
|
||||
stage_id = await get_request_num_param(request, "stage_id", False, True, -1)
|
||||
subject_id = await get_request_num_param(request, "subject_id", False, True, -1)
|
||||
document_suffix = await get_request_str_param(request, "document_suffix", False, True)
|
||||
document_name = await get_request_str_param(request, "document_name", False, True)
|
||||
page_number = await get_request_num_param(request, "page_number", False, True, 1)
|
||||
page_size = await get_request_num_param(request, "page_size", False, True, 10)
|
||||
|
||||
print(person_id, stage_id, subject_id, document_suffix, document_name, page_number, page_size)
|
||||
|
||||
# 拼接查询SQL语句
|
||||
|
||||
select_document_sql: str = " SELECT * FROM t_ai_teaching_model_document WHERE is_deleted = 0 and person_id = '" + person_id + "'"
|
||||
if stage_id != -1:
|
||||
select_document_sql += " AND stage_id = " + str(stage_id)
|
||||
if subject_id != -1:
|
||||
select_document_sql += " AND subject_id = " + str(subject_id)
|
||||
if document_suffix != "":
|
||||
select_document_sql += " AND document_suffix = '" + document_suffix + "'"
|
||||
if document_name != "":
|
||||
select_document_sql += " AND document_name = '" + document_name + "'"
|
||||
select_document_sql += " ORDER BY create_time DESC "
|
||||
|
||||
# 查询文档列表
|
||||
page = await get_page_data_by_sql(select_document_sql, page_number, page_size)
|
||||
for item in page["list"]:
|
||||
theme_info = await find_by_id("t_ai_teaching_model_theme", "id", item["theme_id"])
|
||||
item["theme_info"] = theme_info
|
||||
|
||||
return {"success": True, "message": "查询成功!", "data": page}
|
||||
|
||||
|
||||
# 【Document-2】保存文档管理
|
||||
@router.post("/save")
|
||||
async def save(request: Request, file: UploadFile = File(...)):
|
||||
# 获取参数
|
||||
id = await get_request_num_param(request, "id", False, True, 0)
|
||||
stage_id = await get_request_num_param(request, "stage_id", False, True, -1)
|
||||
subject_id = await get_request_num_param(request, "subject_id", False, True, -1)
|
||||
theme_id = await get_request_num_param(request, "theme_id", True, True, None)
|
||||
person_id = await get_request_str_param(request, "person_id", True, True)
|
||||
bureau_id = await get_request_str_param(request, "bureau_id", True, True)
|
||||
# 先获取theme主题信息
|
||||
theme_object = await find_by_id("t_ai_teaching_model_theme", "id", theme_id)
|
||||
if theme_object is None:
|
||||
return {"success": False, "message": "主题不存在!"}
|
||||
# 获取文件名
|
||||
document_name = file.filename
|
||||
# 检查文件名在该主题下是否重复
|
||||
select_theme_document_sql: str = "SELECT * FROM t_ai_teaching_model_document WHERE is_deleted = 0 and document_name = '" + document_name + "'"
|
||||
if id != 0:
|
||||
select_theme_document_sql += " AND id <> " + id
|
||||
theme_document = await find_by_sql(select_theme_document_sql, ())
|
||||
if theme_document is not None:
|
||||
return {"success": False, "message": "该主题下文档名称重复!"}
|
||||
# 获取文件扩展名
|
||||
document_suffix = file.filename.split(".")[-1]
|
||||
# 检查文件扩展名
|
||||
if document_suffix not in supported_suffix_types:
|
||||
return {"success": False, "message": "不支持的文件类型!"}
|
||||
# 构造文件保存路径
|
||||
document_dir = UPLOAD_DIR + os.sep + str(theme_object["short_name"]) + "_" + str(theme_object["id"]) + os.sep
|
||||
if not os.path.exists(document_dir):
|
||||
os.makedirs(document_dir)
|
||||
document_path = os.path.join(document_dir, file.filename)
|
||||
# 保存文件
|
||||
try:
|
||||
with open(document_path, "wb") as buffer:
|
||||
buffer.write(await file.read())
|
||||
except Exception as e:
|
||||
return {"success": False, "message": f"文件保存失败!{e}"}
|
||||
|
||||
# 构造保存文档SQL语句
|
||||
param = {"stage_id": stage_id, "subject_id": subject_id, "document_name": document_name, "theme_id": theme_id, "document_path": document_path, "document_suffix": document_suffix, "person_id": person_id, "bureau_id": bureau_id}
|
||||
|
||||
# 保存数据
|
||||
if id == 0:
|
||||
param["train_flag"] = 0
|
||||
# 插入数据
|
||||
id = await insert("t_ai_teaching_model_document", param, False)
|
||||
return {"success": True, "message": "保存成功!", "data": {"insert_id" : id}}
|
||||
else:
|
||||
# 更新数据
|
||||
await update("t_ai_teaching_model_document", param, "id", id)
|
||||
return {"success": True, "message": "更新成功!", "data": {"update_id" : id}}
|
||||
|
||||
# 【Document-3】获取文档信息
|
||||
@router.get("/get")
|
||||
async def get(request: Request):
|
||||
# 获取参数
|
||||
id = await get_request_num_param(request, "id", True, True, None)
|
||||
# 查询数据
|
||||
document_object = await find_by_id("t_ai_teaching_model_document", "id", id)
|
||||
if document_object is None:
|
||||
return {"success": False, "message": "未查询到该文档信息!"}
|
||||
theme_info = await find_by_id("t_ai_teaching_model_theme", "id", document_object["theme_id"])
|
||||
document_object["theme_info"] = theme_info
|
||||
return {"success": True, "message": "查询成功!", "data": {"document": document_object}}
|
||||
|
||||
|
||||
@router.post("/delete")
|
||||
async def delete(request: Request):
|
||||
# 获取参数
|
||||
id = await get_request_num_param(request, "id", True, True, None)
|
||||
result = await delete_by_id("t_ai_teaching_model_document", "id", id)
|
||||
if not result:
|
||||
return {"success": False, "message": "删除失败!"}
|
||||
return {"success": True, "message": "删除成功!"}
|
@ -0,0 +1,48 @@
|
||||
import math
|
||||
from utils.Database import *
|
||||
|
||||
|
||||
# 查询数据条数
|
||||
async def get_total_data_count(total_data_sql):
|
||||
total_data_count = 0
|
||||
total_data_count_sql = "select count(*) as num from (" + total_data_sql + ") as temp_table"
|
||||
result = await find_by_sql(total_data_count_sql,())
|
||||
row = result[0] if result else None
|
||||
if row:
|
||||
total_data_count = row.get("num")
|
||||
return total_data_count
|
||||
|
||||
|
||||
def get_page_by_total_row(total_data_count, page_number, page_size):
|
||||
total_page = (page_size != 0) and math.floor((total_data_count + page_size - 1) / page_size) or 0
|
||||
if page_number <= 0:
|
||||
page_number = 1
|
||||
if 0 < total_page < page_number:
|
||||
page_number = total_page
|
||||
offset = page_size * page_number - page_size
|
||||
limit = page_size
|
||||
return total_data_count, total_page, offset, limit
|
||||
|
||||
|
||||
async def get_page_data_by_sql(total_data_sql: str, page_number: int, page_size: int):
|
||||
total_row: int = 0
|
||||
total_page: int = 0
|
||||
total_data_sql = total_data_sql.replace(";", "")
|
||||
total_data_sql = total_data_sql.replace(" FROM ", " from ")
|
||||
|
||||
# 查询总数
|
||||
total_data_count = await get_total_data_count(total_data_sql)
|
||||
if total_data_count == 0:
|
||||
return {"page_number": page_number, "page_size": page_size, "total_row": 0, "total_page": 0, "list": []}
|
||||
else:
|
||||
total_row, total_page, offset, limit = get_page_by_total_row(total_data_count, page_number, page_size)
|
||||
|
||||
# 构造执行分页查询的sql语句
|
||||
page_data_sql = total_data_sql + " LIMIT %d offset %d " % (limit, offset)
|
||||
print(page_data_sql)
|
||||
# 执行分页查询
|
||||
page_data = await find_by_sql(page_data_sql, ())
|
||||
if page_data:
|
||||
return {"page_number": page_number, "page_size": page_size, "total_row": total_row, "total_page": total_page, "list": page_data}
|
||||
else:
|
||||
return {"page_number": page_number, "page_size": page_size, "total_row": 0, "total_page": 0, "list": []}
|
Loading…
Reference in new issue