from fastapi import APIRouter, Request, Depends, HTTPException, Query from sqlalchemy.exc import IntegrityError from fastapi.responses import HTMLResponse, FileResponse from fastapi.responses import JSONResponse from database import get_db from sqlalchemy import text, exists, and_, or_, not_ from sqlalchemy.orm import Session from models import * import json import random from sqlalchemy import create_engine, select from typing import Optional from utils.StripTagsHTMLParser import * from common.db import db_event_management, db_user, db_area, db_emergency_plan from common.security import valid_access_token import traceback from utils import * from datetime import datetime, timedelta router = APIRouter() # 获取预案结构化文档 @router.post('/detail') async def doc( request: Request, db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): plan_id = body['plan_id'] items = [] rows = db.query(EmergencyDoc).filter(and_(EmergencyDoc.pid == 0, EmergencyDoc.plan_id == plan_id)).all() for row in rows: items.append(get_item_data(db, row.id, 1)) return { 'code': 200, 'msg': '查询成功', 'data': items } def get_item_data(db: Session, id: int, level: int): data = [] row = db.query(EmergencyDoc).filter(EmergencyDoc.id == id).first() if row is not None: pid = row.id data = get_model_dict(row) data['level'] = level if data['value'] is None: data['value'] = '' data['items'] = [] rows = db.query(EmergencyDoc).filter(EmergencyDoc.pid == pid).all() for row in rows: item = get_item_data(db, row.id, level + 1) data['items'].append(item) if len(data['items']) == 0 and level == 2: del data['items'] data['id'] = data['plan_id']+str(data['id']) data['href'] = "#" + data['id'] data['containerRef'] = "containerRef" + data['id'] data['value'] = data['value'].replace("\r\n", "
") return data @router.post('/import') async def import_doc( request: Request, db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): print(body) time.sleep(3) return { 'code': 200, 'msg': '导入成功' }