Kaynağa Gözat

250506-1代码。

baoyubo 1 hafta önce
ebeveyn
işleme
954b8b5c62

+ 28 - 1
models/sharedb.py

@@ -1,5 +1,5 @@
 # -*- 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.sql import func
 from database import Base
@@ -101,3 +101,30 @@ class BuildingProjectInfo(Base):
     sign = Column(String, server_default='', default='', comment='HMACSM3数值')
     class Config:
         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 auth
 from . import qrcode
-
+from . import expert
 router = APIRouter()
 
 @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(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(expert.router, prefix="/expert", tags=["应急专家"], dependencies=[Depends(valid_access_token_role)])
 
 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)
     query = text("""
         SELECT 
-            A.`name`,A.`id`,A.dataType,A.longitude,A.latitude
+            A.`name`,A.`id`,A.dataType,A.longitude,A.latitude,A.infoType
         FROM (
             SELECT 
                 *,