1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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", "<br/>")
- return data
|