libushang 2 hete
szülő
commit
7e201aa035

+ 23 - 1
models/city_base.py

@@ -76,4 +76,26 @@ class EmergencyExpert(Base):
 
     class Config:
         orm_mode = True
-    
+    
+
+class GovdataEmergencyResponse(Base):
+    __tablename__ = 'govdata_emergency_response'
+
+    id = Column(Integer, primary_key=True, autoincrement=True)
+    area_code = Column(String, nullable=False, comment='姓名')
+    created_time = Column(DateTime, default=datetime.now, comment='数据创建时间')
+    response_addr = Column(String, nullable=False, comment='应急响应地址')
+    response_level = Column(String, nullable=False, comment='应急响应级别')
+    response_status = Column(String, nullable=True, comment='应急响应状态 0 启动 1 结束 2 调整')
+    response_status_desc = Column(String,  comment='应急响应状态描述')
+    response_time = Column(String,  comment='应急响应时间')
+    response_type_old = Column(String,  comment='应急响应类型(旧数据)')
+    response_type = Column(String, comment='应急响应类型(1:防风2:防汛3:防旱4:防冻6:防暴雨)')
+    del_flag = Column(String,  comment='是否删除(0:否 1:是)')
+    created_by = Column(String,  comment='创建人ID')
+    created_user = Column(String,  comment='创建人姓名')
+    data_insert_time = Column(DateTime, default=datetime.now, comment='数据新増时间')
+    data_update_time = Column(DateTime, default=datetime.now, comment='数据更新时间')
+    data_update_flag = Column(String,  comment='数据操作标识')
+    class Config:
+        orm_mode = True

+ 3 - 0
routers/api/riskMonitor/__init__.py

@@ -2,6 +2,7 @@ from fastapi import APIRouter
 from . import rain_condition
 from . import forest_fire_condition
 from . import  hazardous_condition
+from . import emergency
 
 
 router = APIRouter()
@@ -9,3 +10,5 @@ router = APIRouter()
 router.include_router(rain_condition.router, prefix="/rain", tags=["雨情"])
 router.include_router(forest_fire_condition.router, prefix="/forest", tags=["森林"])
 router.include_router(hazardous_condition.router, prefix="/hazardous", tags=["危化品"])
+
+router.include_router(emergency.router, prefix="/emergency", tags=["应急响应"])

+ 112 - 0
routers/api/riskMonitor/emergency.py

@@ -0,0 +1,112 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
+from common.security import valid_access_token
+from sqlalchemy.orm import Session
+from sqlalchemy.sql import func
+from common.auth_user import *
+from sqlalchemy import  text
+from pydantic import BaseModel
+from common.BigDataCenterAPI import *
+from database import get_db
+from typing import List
+from utils import *
+from utils.risk import *
+from utils.StripTagsHTMLParser import *
+import json
+import traceback
+from sqlalchemy import text, exists, and_, or_, not_
+
+router = APIRouter()
+
+@router.post('/get_emergency_response_list')
+async def get_emergency_response_list(
+    request: Request,
+    body: dict = Depends(remove_xss_json),
+    db: Session = Depends(get_db)
+):
+    response_type = get_req_param(body, "response_type")
+    data = []
+    rows = db.query(GovdataEmergencyResponse).filter(and_(GovdataEmergencyResponse.response_type == response_type, GovdataEmergencyResponse.del_flag == '0', GovdataEmergencyResponse.response_status == '0')).all()
+    for row in rows:
+        data.append({
+            "area": row.response_addr,
+            "level": roman_to_int(row.response_level),
+            "time": row.response_time,
+            "maxLevel": "",
+            "maxLevelTime": ""
+        })
+
+    rows = db.query(GovdataEmergencyResponse).filter(and_(GovdataEmergencyResponse.response_type == response_type, GovdataEmergencyResponse.del_flag == '0', GovdataEmergencyResponse.response_status != '0')).all()
+    for row in rows:
+        for i in range(len(data)):
+            if row.response_addr == data[i]['area']:
+                if roman_to_int(row.response_level) > data[i]["level"]:
+                    data[i]['maxLevel'] = roman_to_int(row.response_level)
+                    data[i]['maxLevelTime'] = row.response_time
+                    break
+
+
+    return {
+        "code": 200,
+        "msg": "成功",
+        "data": data
+    }
+    
+def roman_to_int(val: str):
+    if val == 'Ⅰ':
+        return '1'
+    elif val == 'Ⅱ':
+        return '2'
+    elif val == 'Ⅲ':
+        return '3'
+    elif val == 'Ⅳ':
+        return '4'
+    else:
+        return '0'
+    
+@router.get('/get_mms_area_info')
+async def mine(request: Request,response_type: str = '0', body = Depends(remove_xss_json),db: Session = Depends(get_db)):
+    try:
+        with open('/home/python3/xh_twapi01/routers/api/spatialAnalysis/茂名市.json','r', encoding='utf-8') as f:
+            data = json.load(f)
+        features = data['features']
+        result = [{'name': 'Ⅳ级','color': '#ff2f3c',"points":[]},
+            {'name': 'Ⅲ级', 'color': '#ffaf00',"points":[]},
+            {'name': 'Ⅱ级', 'color': '#ffd800',"points":[]},
+            {'name': 'Ⅰ级', 'color': '#40c75f',"points":[]},]
+
+        # 格式
+        adcode_dit = {
+            "Ⅳ级":[],
+            "Ⅲ级":[],
+            "Ⅱ级":[],
+            "Ⅰ级":[]
+        }
+        rows = db.query(GovdataEmergencyResponse).filter(and_(GovdataEmergencyResponse.response_type == response_type, GovdataEmergencyResponse.del_flag == '0', GovdataEmergencyResponse.response_status == '0')).all()
+        for row in rows:
+            area_code = row.area_code
+            level = row.response_level + "级"
+            if area_code not in adcode_dit[level]:
+                adcode_dit[level].append(area_code)
+
+        area_data = {}
+        for feature in features:
+            properties = feature['properties']
+            area_code = properties['adcode']
+            geometry = feature['geometry']
+            coordinates = geometry['coordinates']
+            area_data[str(area_code)]=[]
+            for i in coordinates:
+                area_data[str(area_code)] += i
+        for i in result:
+            for x in adcode_dit[i['name']]:
+                i['points']+=area_data[x]
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": result}
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")