Przeglądaj źródła

风险防控-巡查人员。

baoyubo 8 miesięcy temu
rodzic
commit
a64378c584

+ 2 - 1
models/__init__.py

@@ -16,4 +16,5 @@ from .pattern_base import *
 from .rain_base import *
 from .geojson_base import *
 from .xxfb_base import *
-from .addressbook_base import *
+from .addressbook_base import *
+from .risk_management import *

+ 39 - 0
models/risk_management.py

@@ -0,0 +1,39 @@
+from sqlalchemy import create_engine, Column, BigInteger, String, Text, DateTime, CHAR,Integer
+
+from database import Base
+from datetime import datetime
+
+
+class RiskManagementInspectionUser(Base):
+    __tablename__ = 'risk_management_inspection_user'
+
+    id = Column(BigInteger, primary_key=True, autoincrement=True, comment='ID')
+    user_id = Column(BigInteger, nullable=False, comment='用户ID')
+    dept_id = Column(BigInteger, nullable=True, comment='部门ID')
+    dept_name = Column(String(30),  nullable=True, comment='部门名称')
+    ancestors_names = Column(Text,  nullable=True, comment='部门路径')
+    user_name = Column(String(30),  nullable=False, comment='用户账号')
+    nick_name = Column(String(30), nullable=False, comment='用户昵称')
+    phonenumber = Column(String(11),  default='', comment='手机号码')
+    area_code = Column(String(11),  default='', comment='责任区划编码')
+    area = Column(String(11),  default='', comment='责任区划')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_dept = Column(BigInteger, default=None, comment='创建部门')
+    create_by = Column(BigInteger, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_by = Column(BigInteger, default=None, comment='更新者')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
+    remark = Column(String(500), default=None, comment='备注')
+    yzy_account = Column(String(50), default=None, comment='粤政易账号')
+
+
+class GovdataArea(Base):
+    __tablename__ = 'govdata_area'
+
+    id = Column(Integer, primary_key=True, comment='ID')
+    area_code = Column(String(20),  nullable=True, comment='区划编码')
+    area_name = Column(String(50),  nullable=True, comment='区划名称')
+    parent_code = Column(String(20),  nullable=True, comment='父级区划编码')
+    parent_id = Column(Integer, nullable=True, comment='父级ID')
+    status = Column(String(2),  nullable=True, comment='状态')
+    create_time = Column(String(255),  nullable=True, comment='创建时间')

+ 4 - 2
routers/api/__init__.py

@@ -21,7 +21,7 @@ from . import temperaturePrecipitation
 from . import pattern
 from . import rainfall
 from . import infoPublish
-
+from . import riskManagement
 from routers.prod_api import system
 from routers.prod_api import auth
 
@@ -52,4 +52,6 @@ router.include_router(pattern.router, prefix="/pattern", tags=["实时测绘"])
 
 router.include_router(rainfall.router, prefix="/rainfall", tags=["雨情分析"])
 
-router.include_router(infoPublish.router, prefix="/info_publish")
+router.include_router(infoPublish.router, prefix="/info_publish")
+
+router.include_router(riskManagement.router, prefix="/riskManagement", tags=["风险防控"])

+ 336 - 0
routers/api/riskManagement/__init__.py

@@ -0,0 +1,336 @@
+#!/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_
+from pydantic import BaseModel
+from datetime import datetime
+from database import get_db
+from typing import List
+from models import *
+from utils import *
+import json
+import traceback
+
+
+router = APIRouter()
+
+
+@router.get('/inspection/user/list')
+async def get_inspection_user_list(
+    nickName: str = Query(None, description='姓名'),
+    deptId :str = Query(None, description='部门id'),
+    page: int = Query(1, gt=0, description='页码'),
+    pageSize: int = Query(5, gt=0, description='每页条目数量'),
+    db: Session = Depends(get_db),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        # 构建查询
+        query = db.query(RiskManagementInspectionUser)
+        query = query.filter(RiskManagementInspectionUser.del_flag != '2')
+        # 应用查询条件
+        if nickName:
+            query = query.filter(RiskManagementInspectionUser.nick_name.like(f'%{nickName}%'))
+        if deptId:
+            query = query.filter(RiskManagementInspectionUser.dept_id == deptId)
+
+        # 计算总条目数
+        total_items = query.count()
+
+        # 排序
+
+        query = query.order_by(RiskManagementInspectionUser.create_time.desc())
+        # 执行分页查询
+        InspectionUsers = query.offset((page - 1) * pageSize).limit(pageSize).all()
+
+        # 将查询结果转换为列表形式的字典
+        InspectionUsers_list = [
+            {
+                "id": user.id,
+                "user_id": user.user_id,
+                "dept_id": user.dept_id,
+                "dept_name": user.dept_name,
+                "ancestors_names": user.ancestors_names,
+                "user_name": user.user_name,
+                "create_time": user.create_time.strftime('%Y-%m-%d'),
+                "phonenumber": user.phonenumber,
+                "nick_name": user.nick_name,
+                "area_code": user.area_code,
+                "area": user.area,
+                "yzy_account":user.yzy_account
+            }
+            for user in InspectionUsers
+        ]
+
+        # 返回结果
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": InspectionUsers_list,
+            "total": total_items,
+            "page": page,
+            "pageSize": pageSize,
+            "totalPages": (total_items + pageSize - 1) // pageSize
+        }
+    except Exception as e:
+        # 处理异常
+        raise HTTPException(status_code=500, detail=str(e))
+
+
+@router.get('/inspection/user/{id}')
+async def get_inspection_user(
+    id: str ,
+    db: Session = Depends(get_db),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        # 构建查询
+        query = db.query(RiskManagementInspectionUser)
+        query = query.filter(RiskManagementInspectionUser.del_flag != '2')
+        # 应用查询条件
+        if id:
+            query = query.filter(RiskManagementInspectionUser.id == id)
+
+        # 执行查询
+        user = query.first()
+        if not user:
+            detail = "用户不存在"
+            raise HTTPException(status_code=404, detail="用户不存在")
+        # 将查询结果转换为列表形式的字典
+        inspection_user_result = {
+                "id": user.id,
+                "user_id": user.user_id,
+                "dept_id": user.dept_id,
+                "dept_name": user.dept_name,
+                "ancestors_names": user.ancestors_names,
+                "user_name": user.user_name,
+                "create_time": user.create_time.strftime('%Y-%m-%d'),
+                "phonenumber": user.phonenumber,
+                "nick_name": user.nick_name,
+                "area_code": user.area_code,
+                "area": user.area,
+                "yzy_account":user.yzy_account
+            }
+
+        # 返回结果
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": inspection_user_result
+        }
+    except Exception as e:
+        # 处理异常
+        if str(e)=='':
+            e = detail
+        raise HTTPException(status_code=500, detail=str(e))
+
+
+
+
+@router.post('/inspection/user/create')
+async def create_emergency_plan(
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    try:
+
+        # 创建新的预案记录
+        new_user = RiskManagementInspectionUser(
+            user_id=body['user_id'],
+            dept_id = body['dept_id'],
+            dept_name = body['dept_name'],
+            ancestors_names = body['ancestors_names'],
+            user_name = body['user_name'],
+            nick_name = body['nick_name'],
+            phonenumber = body['phonenumber'],
+            area_code = body['area_code'],
+            area = body['area'],
+            yzy_account = body['yzy_account'],
+            create_by = user_id
+        )
+        # 添加到数据库会话并提交
+        db.add(new_user)
+        db.commit()
+        db.refresh(new_user)  # 可选,如果需要刷新实例状态
+        # 返回创建成功的响应
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": None
+        }
+    except Exception as e:
+        # 处理异常
+        raise HTTPException(status_code=500, detail=str(e))
+
+
+@router.put('/inspection/user/update')
+async def update_emergency_plan(
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        # 提取请求数据
+        query = db.query(RiskManagementInspectionUser)
+        query = query.filter(RiskManagementInspectionUser.id == body['id'])
+        query = query.filter(RiskManagementInspectionUser.del_flag != '2')
+        user = query.first()
+
+        if not user:
+            detail = "预案不存在"
+            raise HTTPException(status_code=404, detail="预案不存在")
+
+        if 'user_id' in body:
+            user.user_id = body['user_id']
+        if 'dept_id' in body:
+            user.dept_id = body['dept_id']
+        if 'dept_name' in body:
+            user.dept_name = body['dept_name']
+        if 'ancestors_names' in body:
+            user.ancestors_names = body['ancestors_names']
+        if 'user_name' in body:
+            user.user_name = body['user_name']
+        if 'nick_name' in body:
+            user.nick_name = body['nick_name']
+        if 'phonenumber' in body:
+            user.phonenumber = body['phonenumber']
+        if 'area_code' in body:
+            user.area_code = body['area_code']
+        if 'area' in body:
+            user.area = body['area']
+
+        if user_id:
+            user.update_by = user_id
+
+        # 更新到数据库会话并提交
+        db.commit()
+        db.refresh(user)  # 可选,如果需要刷新实例状态
+
+        # 返回创建成功的响应
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": None
+        }
+    except Exception as e:
+        # 处理异常
+        if str(e)=='':
+            e = detail
+        raise HTTPException(status_code=500, detail=str(e))
+
+@router.delete('/inspection/user/delete')
+async def delete_emergency_plans(
+        userIds: list,
+        db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        # 提取请求数据
+        query = db.query(RiskManagementInspectionUser)
+        query = query.filter(RiskManagementInspectionUser.del_flag != '2')
+        query = query.filter(RiskManagementInspectionUser.id.in_(userIds))
+        users = query.all()
+        if not users:
+            detail = "用户不存在"
+            raise HTTPException(status_code=404, detail="用户不存在")
+        for user in users:
+            user.del_flag = '2'
+            user.update_by=user_id
+        # 更新到数据库会话并提交
+        db.commit()
+
+        # 返回创建成功的响应
+        return {
+            "code": 200,
+            "msg": "删除成功",
+            "data": None
+        }
+    except Exception as e:
+        # 处理异常
+        if str(e) == '':
+            e = detail
+        raise HTTPException(status_code=500, detail=str(e))
+
+@router.delete('/inspection/user/delete/{userId}')
+async def delete_emergency_plan(
+        userId: str,
+        db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        # 提取请求数据
+        query = db.query(RiskManagementInspectionUser)
+        query = query.filter(RiskManagementInspectionUser.del_flag != '2')
+        query = query.filter(RiskManagementInspectionUser.id==userId)
+        user = query.first()
+        if not user:
+            detail = "用户不存在"
+            raise HTTPException(status_code=404, detail="用户不存在")
+
+        user.del_flag = '2'
+        user.update_by = user_id
+        # 更新到数据库会话并提交
+        db.commit()
+        db.refresh(user)  # 可选,如果需要刷新实例状态
+
+        # 返回创建成功的响应
+        return {
+            "code": 200,
+            "msg": "删除成功",
+            "data": None
+        }
+    except Exception as e:
+        # 处理异常
+        if str(e) == '':
+            e = detail
+        raise HTTPException(status_code=500, detail=str(e))
+
+@router.get("/allAreas")
+def read_all_areas(db: Session = Depends(get_db)):
+    def parent_id_get_area_info(parent_id):
+        query = db.query(GovdataArea)
+        query = query.filter(GovdataArea.parent_id == parent_id)
+        return query.all()
+    def build_area_tree(areas, parent_area):
+        # 收集祖先部门名称
+
+
+        area_tree = []
+        for area_info in areas:
+            # current_area = db.query(GovdataArea).filter(GovdataArea.id == area_info.id).first()
+            # ancestors_names = []
+            # while current_area:
+            #     ancestors_names.append(current_area.area_name)
+            #     current_area = db.query(GovdataArea).filter(GovdataArea.id == current_area.parent_id).first()
+            # ancestors_names.reverse()
+
+            area = {
+                "id": area_info.id,
+                "code": area_info.area_code,
+                "label": area_info.area_name,
+                "parentId": area_info.parent_id,
+                # "ancestors": '/'.join(ancestors_names)
+            }
+            # print(dept_info.dept_id)
+            children = parent_id_get_area_info(area_info.id)
+            if len(children) > 0:
+                children_areas = build_area_tree(children, area)
+                area["children"] = children_areas
+            area_tree.append(area)
+        return area_tree
+
+    data = build_area_tree(parent_id_get_area_info(0),None)
+    return {
+        "code": 200,
+        "msg": "成功",
+        "data": data
+}
+
+