123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- from fastapi import APIRouter, Request, Depends, HTTPException, Query, Response
- from sqlalchemy.exc import IntegrityError
- from fastapi.responses import JSONResponse
- from database import get_db
- from sqlalchemy.orm import Session
- from models import *
- import json
- import random
- from sqlalchemy import create_engine, select, or_
- from typing import Optional
- import uuid
- from utils import *
- from common.security import valid_access_token
- import traceback
- from sqlalchemy import text, exists
- router = APIRouter()
- def get_next_yjbh_id(db: Session):
- while True:
- random_10_digit_number = random.randint(1000000000, 9999999999)
- yjbhId = 'YHBZ' + str(random_10_digit_number)
- it_exists = db.query(
- exists().where(TaskRegistration.task_id == yjbhId)
- ).scalar()
- if it_exists == False:
- return yjbhId
- @router.post('/create')
- async def create_task(
- request: Request,
- db: Session = Depends(get_db),
- body=Depends(remove_xss_json),
- user_id=Depends(valid_access_token)):
- try:
- # 验证必需的字段
- required_fields = ['standard_type', 'file_title']
- missing_fields = [field for field in required_fields if field not in body]
- if missing_fields:
- raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
- fileList = []
- if 'fileList' in body:
- fileList = body['fileList']
- del body['fileList']
- standard_type = body['standard_type']
- file_title = body['file_title']
- for file in fileList:
- print(file)
- create_time = file["create_time"]
- file_name = file['url']
- file_name_desc = file['name']
- status = file['status']
- new_file = HazardStandardsFile(
- file_id=new_guid(),
- # foreign_key=task_base.id,
- file_number=get_next_yjbh_id(db),
- from_scenario='task_file',
- file_name=file_name,
- standard_type=standard_type,
- file_title=file_title,
- file_name_desc=file_name_desc,
- status=status,
- create_time =create_time
- )
- db.add(new_file)
- db.commit()
- print(new_file)
- return {
- "code": 200,
- "msg": "succeed",
- "data": file_title
- }
- except Exception as e:
- db.rollback()
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
- # 删除文件接口
- @router.delete('/delete')
- async def delete_file( body=Depends(remove_xss_json),
- user_id=Depends(valid_access_token),
- db: Session = Depends(get_db) ):
- try:
- # 查询要删除的文件
- file_id = body.get("file_id")
- hazard_file = db.query(HazardStandardsFile).filter(HazardStandardsFile.file_id == file_id).first()
- # 如果文件不存在,返回404错误
- if hazard_file is None:
- raise HTTPException(status_code=404, detail="File not found")
- # 如果文件已经被删除,返回错误信息
- if hazard_file.del_flag == '2':
- raise HTTPException(status_code=400, detail="File already deleted")
- # 更新删除标识
- hazard_file.del_flag = '2'
- hazard_file.update_time = datetime.now()
- # 提交更改到数据库
- db.commit()
- return {
- "code": 200,
- "msg": "File marked as deleted",
- "data": file_id
- }
- except Exception as e:
- db.rollback()
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
- # 查询文件接口
- @router.post('/select')
- @router.get('/select')
- async def select_files(
- db: Session = Depends(get_db),
- file_title: str = Query(None, description="文件标题"),
- standard_type: str = Query(None, description="标准类型"),
- # sortBy: str = Query(None, description="排序字段"),
- # sortOrder: str = Query(None, description="排序顺序"),
- pageNum: int = Query(1, gt=0, description="页码"),
- pageSize: int = Query(10, gt=0, le=100, description="每页大小")):
- try:
- data_query = db.query(HazardStandardsFile).filter(HazardStandardsFile.del_flag != '2')
- # 应用过滤条件
- # if file_title:
- # data_query = data_query.filter(HazardStandardsFile.file_title == file_title)
- if file_title:
- data_query = data_query.filter(HazardStandardsFile.file_title.like(f'%{file_title}%'))
- if standard_type:
- data_query = data_query.filter(HazardStandardsFile.standard_type == standard_type)
- # # 应用排序条件
- # if sortBy:
- # if hasattr(HazardStandardsFile, sortBy):
- # sort_attr = getattr(HazardStandardsFile, sortBy)
- # data_query = data_query.order_by(sort_attr.asc() if sortOrder == 'asc' else sort_attr.desc())
- total_count = data_query.count()
- offset = (pageNum - 1) * pageSize
- data_query = data_query.offset(offset).limit(pageSize)
- rows = data_query.all()
- data = []
- for row in rows:
- info = {
- "file_id": row.file_id,
- "file_number": row.file_number,
- "file_name": row.file_name,
- "standard_type": row.standard_type,
- "file_name_desc": row.file_name_desc,
- "file_title": row.file_title,
- "create_time": row.create_time.strftime("%Y-%m-%d %H:%M:%S") # 格式化日期时间
- }
- data.append(info)
- return {
- "code": 200,
- "msg": "文件查询成功",
- "data": data,
- "total": total_count,
- "pages": (total_count + pageSize - 1) // pageSize,
- "current_page": pageNum,
- "page_size": pageSize
- }
- except Exception as e:
- db.rollback()
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|