libushang 9 місяців тому
батько
коміт
3cd95c8998

+ 14 - 1
models/yjya_base.py

@@ -148,4 +148,17 @@ class EmergencyUnit(Base):
     dept_order = Column(Integer, comment='排序')
 
     class Config:
-        orm_mode = True
+        orm_mode = True
+
+
+class EmergencyDoc(Base):
+    __tablename__ = 'emergency_doc'
+
+    id = Column(Integer, autoincrement=True, primary_key=True)
+    title = Column(String, nullable=False,comment='标题')
+    value = Column(String, nullable=False,comment='内容')
+    pid = Column(Integer, comment='父级ID')
+    plan_id = Column(String, nullable=False,comment='预案id')
+    
+    class Config:
+        orm_mode = True

+ 2 - 1
routers/api/emergencyPlans/__init__.py

@@ -15,13 +15,14 @@ from utils import *
 import json
 import traceback
 
-from . import event, response, unit
+from . import event, response, unit, doc
 
 router = APIRouter()
 
 router.include_router(event.router, prefix="/event", tags=["事件相关"])
 router.include_router(response.router, prefix="/response", tags=["响应相关"])
 router.include_router(unit.router, prefix="/unit", tags=["单位职责相关"])
+router.include_router(doc.router, prefix="/doc", tags=["结构化文档相关"])
 
 
 class File(BaseModel):

+ 65 - 0
routers/api/emergencyPlans/doc.py

@@ -0,0 +1,65 @@
+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