#!/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 from . import user from . import task from routers.api.riskManagement import risk_router from . import rescue_resources router = APIRouter() router.include_router(user.router, prefix="/inspection/user", tags=["巡查人员"]) router.include_router(task.router, prefix="/inspection/task", tags=["巡查任务"]) router.include_router(risk_router.router, prefix="/risk", tags=["风险防控"]) router.include_router(rescue_resources.router, prefix="/rescue/resources", tags=["风险防控"]) ####巡查人员--用户查询#### @router.get('/system/user/list') async def userlist( userId: int = Query(None ,description='用户id'), nickName: str = Query(None, description='姓名'), page: int = Query(1, gt=0, description='页码'), pageSize: int = Query(10, gt=0, description='每页条目数量'), db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)): try: def dept_id_get_dept_info( dept_id): query = db.query(SysDept) query = query.filter(SysDept.del_flag != '2') query = query.filter(SysDept.dept_id == dept_id) return query.first() def dept_id_get_ancestors_names(dept,ancestors_name=''): ancestors_name = '/' + dept.dept_name + ancestors_name if dept.parent_id==0: return ancestors_name else: return dept_id_get_ancestors_names(dept_id_get_dept_info(dept.parent_id),ancestors_name) # 构建查询 query = db.query(SysUser) query = query.filter(SysUser.del_flag != '2') # 应用查询条件 if nickName: query =query.filter(SysUser.nick_name.like(f'%{nickName}%')) if userId: query = query.filter(SysUser.user_id == userId) # 计算总条目数 total_items = query.count() # 排序 query = query.order_by(SysUser.create_time.desc()) # 执行分页查询 users = query.offset((page - 1) * pageSize).limit(pageSize).all() # 将查询结果转换为列表形式的字典 user_list = [] for user in users: # roleIds = user_id_get_user_roleIds(db, user.user_id) dept = dept_id_get_dept_info(user.dept_id) ancestors_names = dept_id_get_ancestors_names(dept) user_info = { "user_id": user.user_id, "dept_id": user.dept_id, "dept_name":dept.dept_name, "ancestors_names":ancestors_names, "user_name": user.user_name, "nick_name": user.nick_name, "phonenumber": user.phonenumber } user_list.append(user_info) # 返回结果 return { "code": 200, "msg": "成功用户列表", "rows": user_list, "total": total_items, "page": page, "pageSize": pageSize, "totalPages": (total_items + pageSize - 1) // pageSize } except Exception as e: traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal server error: {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) filename = '/home/python3/xh_twapi01/routers/api/riskManagement/area_tree.json' # 打开文件并读取内容 with open(filename, 'r', encoding='utf-8') as file: # 加载JSON内容到一个字典 data = json.load(file) return { "code": 200, "msg": "成功", "data": data }