baoyubo 1 неделя назад
Родитель
Сommit
954b8b5c62
4 измененных файлов с 146 добавлено и 3 удалено
  1. 28 1
      models/sharedb.py
  2. 2 1
      routers/api/__init__.py
  3. 115 0
      routers/api/expert/__init__.py
  4. 1 1
      routers/api/spatialAnalysis/point.py

+ 28 - 1
models/sharedb.py

@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
-from sqlalchemy import String, Column, Integer, DateTime,Text,BigInteger,Float
+from sqlalchemy import String, Column, Integer, DateTime,Text,BigInteger,Float,Date
 from sqlalchemy.dialects.mysql import TINYINT
 from sqlalchemy.dialects.mysql import TINYINT
 from sqlalchemy.sql import func
 from sqlalchemy.sql import func
 from database import Base
 from database import Base
@@ -101,3 +101,30 @@ class BuildingProjectInfo(Base):
     sign = Column(String, server_default='', default='', comment='HMACSM3数值')
     sign = Column(String, server_default='', default='', comment='HMACSM3数值')
     class Config:
     class Config:
         orm_mode = True
         orm_mode = True
+
+
+class EmergencyExpertInfo(Base):
+    __tablename__ = 'emergency_expert_info'
+
+    id = Column(Integer, primary_key=True, autoincrement=True, comment='序号')
+    name = Column(String(255), nullable=False, comment='姓名')
+    county = Column(String(255), comment='所属区县')
+    expert_type = Column(String(255), comment='专家类型')
+    honorary_title = Column(String(255), comment='荣誉称号')
+    unit = Column(String(255), comment='单位')
+    position = Column(String(255), comment='职位')
+    professional_title = Column(String(255), comment='职称')
+    specialty = Column(String(255), comment='擅长事故类型')
+    rescue_experience = Column(Text, comment='救援经历')
+    birth_date = Column(Date, comment='出生日期')
+    work_start_date = Column(Date, comment='工作时间')
+    certificate_issue_date = Column(Date, comment='发证日期')
+    professional_group = Column(String(255), comment='专业分组')
+    professional_field = Column(String(255), comment='专业领域')
+    work_phone = Column(String(20), comment='工作电话')
+    home_phone = Column(String(20), comment='住宅电话')
+    mobile_phone = Column(String(20), comment='移动电话')
+    email = Column(String(255), comment='电子邮箱')
+    contact_address = Column(String(255), comment='联系地址')
+    longitude = Column(Float, comment='经度')
+    latitude = Column(Float, comment='纬度')

+ 2 - 1
routers/api/__init__.py

@@ -38,7 +38,7 @@ from extensions import logger
 from routers.prod_api import system
 from routers.prod_api import system
 from routers.prod_api import auth
 from routers.prod_api import auth
 from . import qrcode
 from . import qrcode
-
+from . import expert
 router = APIRouter()
 router = APIRouter()
 
 
 @router.get("/yzy/callback.html")
 @router.get("/yzy/callback.html")
@@ -90,5 +90,6 @@ router.include_router(companyManagement.router, prefix="/companyManagement", tag
 router.include_router(comprehensive_search.router, prefix="/comprehensive/search", tags=["全局搜索"], dependencies=[Depends(valid_access_token_role)])
 router.include_router(comprehensive_search.router, prefix="/comprehensive/search", tags=["全局搜索"], dependencies=[Depends(valid_access_token_role)])
 router.include_router(ThreeProofingResponsible.router, prefix="/ThreeProofingResponsible", tags=["三防责任人管理"], dependencies=[Depends(valid_access_token_role)])
 router.include_router(ThreeProofingResponsible.router, prefix="/ThreeProofingResponsible", tags=["三防责任人管理"], dependencies=[Depends(valid_access_token_role)])
 router.include_router(city.router, prefix="/city", tags=["区划"], dependencies=[Depends(valid_access_token_role)])
 router.include_router(city.router, prefix="/city", tags=["区划"], dependencies=[Depends(valid_access_token_role)])
+router.include_router(expert.router, prefix="/expert", tags=["应急专家"], dependencies=[Depends(valid_access_token_role)])
 
 
 router.include_router(yst.router, prefix="/yst", tags=["粤商通"]) # 粤商通不需要,单独的验证逻辑
 router.include_router(yst.router, prefix="/yst", tags=["粤商通"]) # 粤商通不需要,单独的验证逻辑

+ 115 - 0
routers/api/expert/__init__.py

@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
+from common.security import valid_access_token
+from fastapi.responses import JSONResponse
+from sqlalchemy.orm import Session
+from sqlalchemy import and_, or_,text,literal
+from sqlalchemy.sql import func
+from sqlalchemy.future import select
+from common.auth_user import *
+from pydantic import BaseModel
+from database import get_db,get_share_db
+from typing import List
+from models import *
+from utils import *
+from utils.ry_system_util import *
+from utils.video_util import *
+from collections import defaultdict
+import traceback
+from concurrent.futures import ThreadPoolExecutor, as_completed
+from multiprocessing import Pool, cpu_count
+import json
+import time
+import math
+
+
+router = APIRouter()
+
+@router.put("/update/{id}")
+async def update_info(
+    id :str ,
+    user_id=Depends(valid_access_token),
+    body=Depends(remove_xss_json),
+    db: Session = Depends(get_share_db)
+):
+    try:
+        query = db.query(EmergencyExpertInfo)
+        query = query.filter(EmergencyExpertInfo.id == id)
+        update_info = query.first()
+        if not update_info:
+            return JSONResponse(status_code=404, content={'msg':'信息不存在','code':404})
+
+        update_info.county = body['county']
+        update_info.expert_type = body['expert_type']
+        update_info.honorary_title = body['honorary_title']
+        update_info.unit = body['unit']
+        update_info.position = body['position']
+        update_info.professional_title = body['professional_title']
+        update_info.specialty = body['specialty']
+        update_info.rescue_experience = body['rescue_experience']
+        update_info.birth_date = body['birth_date']
+        update_info.work_start_date = body['work_start_date']
+        update_info.certificate_issue_date = body['certificate_issue_date']
+        update_info.professional_group = body['professional_group']
+        update_info.professional_field = body['professional_field']
+        update_info.work_phone = body['work_phone']
+        update_info.home_phone = body['home_phone']
+        update_info.mobile_phone = body['mobile_phone']
+        update_info.email = body['email']
+        update_info.contact_address = body['contact_address']
+        update_info.longitude = body['longitude']
+        update_info.latitude = body['latitude']
+        db.commit()
+        return {"code": 200, "msg": "更新成功"}
+    except Exception as e:
+        traceback.print_exc()
+        return JSONResponse(status_code=500, content={'msg': f"Internal server error: {str(e)}", 'code': 500})
+
+@router.get("/info/{id}")
+async def get_info(
+    id: str,
+    db: Session = Depends(get_share_db)
+):
+    try:
+        query = db.query(EmergencyExpertInfo)
+        query = query.filter(EmergencyExpertInfo.id == id)
+        info = query.first()
+        # pattern = db.query(TpPatternList).filter(TpPatternList.id == pattern_id).first()
+        if not info:
+            return JSONResponse(status_code=404, content={'msg':'信息不存在','code':404})
+
+        return {"code": 200, "msg": "获取成功", "data": dict(info)}
+    except Exception as e:
+        traceback.print_exc()
+        return JSONResponse(status_code=500, content={'msg': f"Internal server error: {str(e)}", 'code': 500})
+
+
+@router.get("/list")
+async def get_list_info(
+        keyword : str = Query(None),
+        page: int = Query(1, gt=0, description='页码'),
+        pageSize: int = Query(5, gt=0, description='每页条目数量'),
+        db: Session = Depends(get_share_db)
+):
+    try:
+        query = db.query(EmergencyExpertInfo)
+        if keyword:
+            query = db.query(or_(EmergencyExpertInfo.name.like(f'%keyword%'),
+                                 EmergencyExpertInfo.unit.like(f'%keyword%'),
+                                 EmergencyExpertInfo.professional_title.like(f'%keyword%'),
+                                 EmergencyExpertInfo.professional_group.like(f'%keyword%'),
+                                 EmergencyExpertInfo.professional_field.like(f'%keyword%')))
+        total_items = query.count()
+        query = query.offset((page - 1) * pageSize).limit(pageSize)
+        data = query.all()
+
+        return {"code": 200, "msg": "获取成功", "data": [dict(info) for info in data],
+                "total": total_items,
+                "page": page,
+                "pageSize": pageSize,
+                "totalPages": (total_items + pageSize - 1) // pageSize}
+    except Exception as e:
+        traceback.print_exc()
+        return JSONResponse(status_code=500, content={'msg': f"Internal server error: {str(e)}", 'code': 500})

+ 1 - 1
routers/api/spatialAnalysis/point.py

@@ -248,7 +248,7 @@ def get_points(db:Session,option,latitude_min,latitude_max,longitude_min,longitu
         option = tuple(option)
         option = tuple(option)
     query = text("""
     query = text("""
         SELECT 
         SELECT 
-            A.`name`,A.`id`,A.dataType,A.longitude,A.latitude
+            A.`name`,A.`id`,A.dataType,A.longitude,A.latitude,A.infoType
         FROM (
         FROM (
             SELECT 
             SELECT 
                 *,
                 *,