Procházet zdrojové kódy

权限管理-批量授权接口

baoyubo před 9 měsíci
rodič
revize
db8b66644f
1 změnil soubory, kde provedl 118 přidání a 4 odebrání
  1. 118 4
      routers/prod_api/system/role/__init__.py

+ 118 - 4
routers/prod_api/system/role/__init__.py

@@ -4,6 +4,7 @@
 from fastapi import APIRouter, Request, Depends,Query,HTTPException
 from database import get_db
 from sqlalchemy.orm import Session
+from sqlalchemy import not_
 from fastapi.responses import JSONResponse
 from models import *
 from utils import *
@@ -209,7 +210,10 @@ async def getmunutreeselect(request: Request,roleId:int,db: Session = Depends(ge
     }
 
 @router.get('/authUser/allocatedList')
-async def userlist( roleId: int = Query(None ,description='部门id'),
+async def userlist(
+                    userName:str = Query(None,description='用户名称'),
+                    phonenumber:str= Query(None,description='用户手机号'),
+                    roleId: int = Query(None ,description='部门id'),
                     page: int = Query(1, gt=0, description='页码'),
                     pageSize: int = Query(10, gt=0, description='每页条目数量'),
                     db: Session = Depends(get_db),
@@ -219,14 +223,99 @@ async def userlist( roleId: int = Query(None ,description='部门id'),
         # query = query.filter(SysUserRole.del_flag != '2')
         query = query.filter(SysUserRole.role_id == roleId)
         resutl = query.all()
-        users =  [i.dept_id for i in resutl]
+        users =  [i.user_id for i in resutl]
         # 构建查询
         query = db.query(SysUser)
         query = query.filter(SysUser.del_flag != '2')
         # 应用查询条件
         query = query.filter(SysUser.user_id.in_(users))
 
+        if userName is not None:
+            query = query.filter(SysUser.user_name.like(f'%{userName}%'))
+        if phonenumber is not None:
+            query = query.filter(SysUser.phonenumber.like(f'%{phonenumber}%'))
+        #
+        # print(query)
+        # 计算总条目数
+        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)
+            user_roles = []#role_id_list_get_user_role(db,roleIds)
 
+            user_info = {
+                "userId": user.user_id,
+                "tenantId": user.tenant_id,
+                "deptId": user.dept_id,
+                "userName": user.user_name,
+                "nickName": user.nick_name,
+                "userType": user.user_type,
+                "email": user.email,
+                "phonenumber": user.phonenumber,
+                "sex": user.sex,
+                "avatar": user.avatar,
+                "status": user.status,
+                "loginIp": user.login_ip,
+                "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
+                "remark": user.remark,
+                "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
+                "deptName": user.dept_name,
+                "roles": user_roles,
+                "roleIds": roleIds,
+                "postIds": None,
+                "roleId": None
+            }
+            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('/authUser/unallocatedList')
+async def userlist(
+                    userName:str = Query(None,description='用户名称'),
+                    phonenumber:str= Query(None,description='用户手机号'),
+                    roleId: int = Query(None ,description='部门id'),
+                    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:
+        query = db.query(SysUserRole)
+        # query = query.filter(SysUserRole.del_flag != '2')
+        query = query.filter(SysUserRole.role_id == roleId)
+        resutl = query.all()
+        users =  [i.user_id for i in resutl]
+        # 构建查询
+        query = db.query(SysUser)
+        query = query.filter(SysUser.del_flag != '2')
+        # 应用查询条件
+        query = query.filter(not_(SysUser.user_id.in_(users)))
+
+        if userName is not None:
+            query = query.filter(SysUser.user_name.like(f'%{userName}%'))
+        if phonenumber is not None:
+            query = query.filter(SysUser.phonenumber.like(f'%{phonenumber}%'))
+        #
+        # print(query)
         # 计算总条目数
         total_items = query.count()
 
@@ -281,6 +370,31 @@ async def userlist( roleId: int = Query(None ,description='部门id'),
         raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
 
 
+@router.put('/authUser/selectAll')
+async def cancel_user_role(
+                    roleId: str = Query(None),
+                    userIds:str=Query(None),
+                    db: Session = Depends(get_db),
+                    user_id: int = Depends(valid_access_token),
+                    body = Depends(remove_xss_json)
+):
+    try:
+
+        userIdList=userIds.split(',')
+
+        new_roles = [SysUserRole(user_id=user_id, role_id=roleId) for user_id in userIdList]
+        db.add_all(new_roles)
+
+        db.commit()
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": None}
+
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
 @router.put('/authUser/cancel')
 async def cancel_user_role(
                     db: Session = Depends(get_db),
@@ -306,8 +420,8 @@ async def cancel_user_role(
 
 @router.put('/authUser/cancelAll')
 async def cancel_user_role(
-                    roleId: str = Query(),
-                    userIds:str=Query(),
+                    roleId: str = Query(None),
+                    userIds:str=Query(None),
                     db: Session = Depends(get_db),
                     user_id: int = Depends(valid_access_token),
                     body = Depends(remove_xss_json)