|  |  |  | import io | 
					
						
							|  |  |  | import pandas as pd | 
					
						
							|  |  |  | import requests | 
					
						
							|  |  |  | from datetime import datetime | 
					
						
							|  |  |  | from fastapi import Request, UploadFile | 
					
						
							|  |  |  | from sqlalchemy.ext.asyncio import AsyncSession | 
					
						
							|  |  |  | from typing import List, Union | 
					
						
							|  |  |  | from config.constant import CommonConstant | 
					
						
							|  |  |  | from exceptions.exception import ServiceException | 
					
						
							|  |  |  | from module_admin.dao.user_dao import UserDao | 
					
						
							|  |  |  | from module_admin.entity.vo.common_vo import CrudResponseModel | 
					
						
							|  |  |  | from module_admin.entity.vo.post_vo import PostPageQueryModel | 
					
						
							|  |  |  | from module_admin.entity.vo.user_vo import ( | 
					
						
							|  |  |  |     AddUserModel, | 
					
						
							|  |  |  |     CrudUserRoleModel, | 
					
						
							|  |  |  |     CurrentUserModel, | 
					
						
							|  |  |  |     DeleteUserModel, | 
					
						
							|  |  |  |     EditUserModel, | 
					
						
							|  |  |  |     ResetUserModel, | 
					
						
							|  |  |  |     SelectedRoleModel, | 
					
						
							|  |  |  |     UserDetailModel, | 
					
						
							|  |  |  |     UserInfoModel, | 
					
						
							|  |  |  |     UserModel, | 
					
						
							|  |  |  |     UserPageQueryModel, | 
					
						
							|  |  |  |     UserPostModel, | 
					
						
							|  |  |  |     UserProfileModel, | 
					
						
							|  |  |  |     UserRoleModel, | 
					
						
							|  |  |  |     UserRoleQueryModel, | 
					
						
							|  |  |  |     UserRoleResponseModel, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from module_admin.service.config_service import ConfigService | 
					
						
							|  |  |  | from module_admin.service.dept_service import DeptService | 
					
						
							|  |  |  | from module_admin.service.post_service import PostService | 
					
						
							|  |  |  | from module_admin.service.role_service import RoleService | 
					
						
							|  |  |  | from utils.common_util import CamelCaseUtil, export_list2excel, get_excel_template | 
					
						
							|  |  |  | from utils.page_util import PageResponseModel | 
					
						
							|  |  |  | from utils.pwd_util import PwdUtil | 
					
						
							|  |  |  | from config.env import AppConfig | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class UserService: | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     用户管理模块服务层 | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def get_user_list_services( | 
					
						
							|  |  |  |         cls, query_db: AsyncSession, query_object: UserPageQueryModel, data_scope_sql: str, is_page: bool = False | 
					
						
							|  |  |  |     ): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         获取用户列表信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param query_object: 查询参数对象 | 
					
						
							|  |  |  |         :param data_scope_sql: 数据权限对应的查询sql语句 | 
					
						
							|  |  |  |         :param is_page: 是否开启分页 | 
					
						
							|  |  |  |         :return: 用户列表信息对象 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         query_result = await UserDao.get_user_list(query_db, query_object, data_scope_sql, is_page) | 
					
						
							|  |  |  |         if is_page: | 
					
						
							|  |  |  |             user_list_result = PageResponseModel( | 
					
						
							|  |  |  |                 **{ | 
					
						
							|  |  |  |                     **query_result.model_dump(by_alias=True), | 
					
						
							|  |  |  |                     'rows': [{**row[0], 'dept': row[1]} for row in query_result.rows], | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             user_list_result = [] | 
					
						
							|  |  |  |             if query_result: | 
					
						
							|  |  |  |                 user_list_result = [{**row[0], 'dept': row[1]} for row in query_result] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return user_list_result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def check_user_allowed_services(cls, check_user: UserModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         校验用户是否允许操作service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param check_user: 用户信息 | 
					
						
							|  |  |  |         :return: 校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if check_user.admin: | 
					
						
							|  |  |  |             raise ServiceException(message='不允许操作超级管理员用户') | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return CrudResponseModel(is_success=True, message='校验通过') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def check_user_data_scope_services(cls, query_db: AsyncSession, user_id: int, data_scope_sql: str): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         校验用户数据权限service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param user_id: 用户id | 
					
						
							|  |  |  |         :param data_scope_sql: 数据权限对应的查询sql语句 | 
					
						
							|  |  |  |         :return: 校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         users = await UserDao.get_user_list(query_db, UserPageQueryModel(userId=user_id), data_scope_sql, is_page=False) | 
					
						
							|  |  |  |         if users: | 
					
						
							|  |  |  |             return CrudResponseModel(is_success=True, message='校验通过') | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise ServiceException(message='没有权限访问用户数据') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def check_user_name_unique_services(cls, query_db: AsyncSession, page_object: UserModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         校验用户名是否唯一service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 用户对象 | 
					
						
							|  |  |  |         :return: 校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         user_id = -1 if page_object.user_id is None else page_object.user_id | 
					
						
							|  |  |  |         user = await UserDao.get_user_by_info(query_db, UserModel(userName=page_object.user_name)) | 
					
						
							|  |  |  |         if user and user.user_id != user_id: | 
					
						
							|  |  |  |             return CommonConstant.NOT_UNIQUE | 
					
						
							|  |  |  |         return CommonConstant.UNIQUE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def check_phonenumber_unique_services(cls, query_db: AsyncSession, page_object: UserModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         校验用户手机号是否唯一service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 用户对象 | 
					
						
							|  |  |  |         :return: 校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         user_id = -1 if page_object.user_id is None else page_object.user_id | 
					
						
							|  |  |  |         user = await UserDao.get_user_by_info(query_db, UserModel(phonenumber=page_object.phonenumber)) | 
					
						
							|  |  |  |         if user and user.user_id != user_id: | 
					
						
							|  |  |  |             return CommonConstant.NOT_UNIQUE | 
					
						
							|  |  |  |         return CommonConstant.UNIQUE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def check_email_unique_services(cls, query_db: AsyncSession, page_object: UserModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         校验用户邮箱是否唯一service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 用户对象 | 
					
						
							|  |  |  |         :return: 校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         user_id = -1 if page_object.user_id is None else page_object.user_id | 
					
						
							|  |  |  |         user = await UserDao.get_user_by_info(query_db, UserModel(email=page_object.email)) | 
					
						
							|  |  |  |         if user and user.user_id != user_id: | 
					
						
							|  |  |  |             return CommonConstant.NOT_UNIQUE | 
					
						
							|  |  |  |         return CommonConstant.UNIQUE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def add_user_services(cls, query_db: AsyncSession, page_object: AddUserModel, | 
					
						
							|  |  |  |                                 currentUserName: str, currentPassword: str): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         新增用户信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param currentPassword:  当前用户密码 | 
					
						
							|  |  |  |         :param currentUserName:  当前用户名 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 新增用户对象 | 
					
						
							|  |  |  |         :return: 新增用户校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         dsPassword = page_object.password | 
					
						
							|  |  |  |         page_object.password = PwdUtil.md5_hash(page_object.password) | 
					
						
							|  |  |  |         add_user = UserModel(**page_object.model_dump(by_alias=True)) | 
					
						
							|  |  |  |         if not await cls.check_user_name_unique_services(query_db, page_object): | 
					
						
							|  |  |  |             raise ServiceException(message=f'新增用户{page_object.user_name}失败,登录账号已存在') | 
					
						
							|  |  |  |         elif page_object.phonenumber and not await cls.check_phonenumber_unique_services(query_db, page_object): | 
					
						
							|  |  |  |             raise ServiceException(message=f'新增用户{page_object.user_name}失败,手机号码已存在') | 
					
						
							|  |  |  |         elif page_object.email and not await cls.check_email_unique_services(query_db, page_object): | 
					
						
							|  |  |  |             raise ServiceException(message=f'新增用户{page_object.user_name}失败,邮箱账号已存在') | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 payload = {'userName': page_object.user_name, | 
					
						
							|  |  |  |                            'userPassword': dsPassword, | 
					
						
							|  |  |  |                            'tenantId': 1, | 
					
						
							|  |  |  |                            'queue': '', | 
					
						
							|  |  |  |                            'email': page_object.email, | 
					
						
							|  |  |  |                            'phone': page_object.phonenumber, | 
					
						
							|  |  |  |                            'state': 1 if page_object.status == '0' else 0 | 
					
						
							|  |  |  |                            } | 
					
						
							|  |  |  |                 headers = {'dashUserName': currentUserName, 'dashPassword': currentPassword} | 
					
						
							|  |  |  |                 response_post = requests.post(url=AppConfig.ds_server_url+'/dolphinscheduler/users/create', | 
					
						
							|  |  |  |                                               params=payload, | 
					
						
							|  |  |  |                                               headers=headers, verify=False) | 
					
						
							|  |  |  |                 if response_post.status_code != 200: | 
					
						
							|  |  |  |                     if response_post.status_code != 201: | 
					
						
							|  |  |  |                         raise Exception("服务异常,请确保各节点是否在线") | 
					
						
							|  |  |  |                 if not response_post.json().get('success'): | 
					
						
							|  |  |  |                     raise Exception(response_post.json().get('msg')) | 
					
						
							|  |  |  |                 add_result = await UserDao.add_user_dao(query_db, add_user) | 
					
						
							|  |  |  |                 user_id = add_result.user_id | 
					
						
							|  |  |  |                 if page_object.role_ids: | 
					
						
							|  |  |  |                     for role in page_object.role_ids: | 
					
						
							|  |  |  |                         await UserDao.add_user_role_dao(query_db, UserRoleModel(userId=user_id, roleId=role)) | 
					
						
							|  |  |  |                 if page_object.post_ids: | 
					
						
							|  |  |  |                     for post in page_object.post_ids: | 
					
						
							|  |  |  |                         await UserDao.add_user_post_dao(query_db, UserPostModel(userId=user_id, postId=post)) | 
					
						
							|  |  |  |                 await query_db.commit() | 
					
						
							|  |  |  |                 return CrudResponseModel(is_success=True, message='新增成功') | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 await query_db.rollback() | 
					
						
							|  |  |  |                 raise e | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def edit_user_services(cls, query_db: AsyncSession, page_object: EditUserModel, | 
					
						
							|  |  |  |                                  currentUserName: str, currentPassword: str): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         编辑用户信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param currentPassword: 当前用户密码 | 
					
						
							|  |  |  |         :param currentUserName: 当前用户名称 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 编辑用户对象 | 
					
						
							|  |  |  |         :return: 编辑用户校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         edit_user = page_object.model_dump(exclude_unset=True, exclude={'admin'}) | 
					
						
							|  |  |  |         requestDs = True | 
					
						
							|  |  |  |         if page_object.type != 'status' and page_object.type != 'avatar' and page_object.type != 'pwd': | 
					
						
							|  |  |  |             del edit_user['role_ids'] | 
					
						
							|  |  |  |             del edit_user['post_ids'] | 
					
						
							|  |  |  |             del edit_user['role'] | 
					
						
							|  |  |  |         if page_object.type == 'status' or page_object.type == 'avatar' or page_object.type == 'pwd': | 
					
						
							|  |  |  |             if page_object.type == 'status' or page_object.type == 'avatar': | 
					
						
							|  |  |  |                 requestDs = False | 
					
						
							|  |  |  |             del edit_user['type'] | 
					
						
							|  |  |  |         user_info = await cls.user_detail_services(query_db, edit_user.get('user_id')) | 
					
						
							|  |  |  |         if user_info.data and user_info.data.user_id: | 
					
						
							|  |  |  |             if page_object.type != 'status' and page_object.type != 'avatar' and page_object.type != 'pwd': | 
					
						
							|  |  |  |                 if not await cls.check_user_name_unique_services(query_db, page_object): | 
					
						
							|  |  |  |                     raise ServiceException(message=f'修改用户{page_object.user_name}失败,登录账号已存在') | 
					
						
							|  |  |  |                 elif page_object.phonenumber and not await cls.check_phonenumber_unique_services(query_db, page_object): | 
					
						
							|  |  |  |                     raise ServiceException(message=f'修改用户{page_object.user_name}失败,手机号码已存在') | 
					
						
							|  |  |  |                 elif page_object.email and not await cls.check_email_unique_services(query_db, page_object): | 
					
						
							|  |  |  |                     raise ServiceException(message=f'修改用户{page_object.user_name}失败,邮箱账号已存在') | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 if requestDs: | 
					
						
							|  |  |  |                     payload = { | 
					
						
							|  |  |  |                         'id': -1, | 
					
						
							|  |  |  |                         'userName': user_info.data.user_name, | 
					
						
							|  |  |  |                         'userPassword': page_object.password if page_object.password else '', | 
					
						
							|  |  |  |                         'email': page_object.email if page_object.email else '', | 
					
						
							|  |  |  |                         'phone': page_object.phonenumber if page_object.phonenumber else '', | 
					
						
							|  |  |  |                         'tenantId': -1, | 
					
						
							|  |  |  |                         'state': 1 if (page_object.status is None or page_object.status == '0') else 0 | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     headers = {'dashUserName': currentUserName, 'dashPassword': currentPassword} | 
					
						
							|  |  |  |                     response_post = requests.post(url=AppConfig.ds_server_url+'/dolphinscheduler/users/update', | 
					
						
							|  |  |  |                                                   params=payload, | 
					
						
							|  |  |  |                                                   headers=headers, verify=False) | 
					
						
							|  |  |  |                     if response_post.status_code != 200: | 
					
						
							|  |  |  |                         if response_post.status_code != 201: | 
					
						
							|  |  |  |                             raise Exception("服务异常,请确保各节点是否在线") | 
					
						
							|  |  |  |                     if not response_post.json().get('success'): | 
					
						
							|  |  |  |                         raise Exception(response_post.json().get('msg')) | 
					
						
							|  |  |  |                 await UserDao.edit_user_dao(query_db, edit_user) | 
					
						
							|  |  |  |                 if page_object.type != 'status' and page_object.type != 'avatar' and page_object.type != 'pwd': | 
					
						
							|  |  |  |                     await UserDao.delete_user_role_dao(query_db, UserRoleModel(userId=page_object.user_id)) | 
					
						
							|  |  |  |                     await UserDao.delete_user_post_dao(query_db, UserPostModel(userId=page_object.user_id)) | 
					
						
							|  |  |  |                     if page_object.role_ids: | 
					
						
							|  |  |  |                         for role in page_object.role_ids: | 
					
						
							|  |  |  |                             await UserDao.add_user_role_dao( | 
					
						
							|  |  |  |                                 query_db, UserRoleModel(userId=page_object.user_id, roleId=role) | 
					
						
							|  |  |  |                             ) | 
					
						
							|  |  |  |                     if page_object.post_ids: | 
					
						
							|  |  |  |                         for post in page_object.post_ids: | 
					
						
							|  |  |  |                             await UserDao.add_user_post_dao( | 
					
						
							|  |  |  |                                 query_db, UserPostModel(userId=page_object.user_id, postId=post) | 
					
						
							|  |  |  |                             ) | 
					
						
							|  |  |  |                 await query_db.commit() | 
					
						
							|  |  |  |                 return CrudResponseModel(is_success=True, message='更新成功') | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 await query_db.rollback() | 
					
						
							|  |  |  |                 raise e | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise ServiceException(message='用户不存在') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def delete_user_services(cls, query_db: AsyncSession, page_object: DeleteUserModel, | 
					
						
							|  |  |  |                                    currentUserName: str, currentPassword: str): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         删除用户信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param currentPassword: 当前用户密码 | 
					
						
							|  |  |  |         :param currentUserName: 当前用户名称 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 删除用户对象 | 
					
						
							|  |  |  |         :return: 删除用户校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if page_object.user_ids: | 
					
						
							|  |  |  |             user_id_list = page_object.user_ids.split(',') | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 for user_id in user_id_list: | 
					
						
							|  |  |  |                     user_info = await cls.user_detail_services(query_db, user_id) | 
					
						
							|  |  |  |                     user_id_dict = dict( | 
					
						
							|  |  |  |                         userId=user_id, updateBy=page_object.update_by, updateTime=page_object.update_time | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                     payload = { | 
					
						
							|  |  |  |                         'id': -1, | 
					
						
							|  |  |  |                         'userName': user_info.user.user_name | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     headers = {'dashUserName': currentUserName, 'dashPassword': currentPassword} | 
					
						
							|  |  |  |                     response_post = requests.post(url=AppConfig.ds_server_url+'/dolphinscheduler/users/delete', | 
					
						
							|  |  |  |                                                   params=payload, | 
					
						
							|  |  |  |                                                   headers=headers, verify=False) | 
					
						
							|  |  |  |                     if response_post.status_code != 200: | 
					
						
							|  |  |  |                         if response_post.status_code != 201: | 
					
						
							|  |  |  |                             raise Exception("服务异常,请确保各节点是否在线") | 
					
						
							|  |  |  |                     if not response_post.json().get('success'): | 
					
						
							|  |  |  |                         raise Exception(response_post.json().get('msg')) | 
					
						
							|  |  |  |                     await UserDao.delete_user_role_dao(query_db, UserRoleModel(**user_id_dict)) | 
					
						
							|  |  |  |                     await UserDao.delete_user_post_dao(query_db, UserPostModel(**user_id_dict)) | 
					
						
							|  |  |  |                     await UserDao.delete_user_dao(query_db, UserModel(**user_id_dict)) | 
					
						
							|  |  |  |                 await query_db.commit() | 
					
						
							|  |  |  |                 return CrudResponseModel(is_success=True, message='删除成功') | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 await query_db.rollback() | 
					
						
							|  |  |  |                 raise e | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise ServiceException(message='传入用户id为空') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def user_detail_services(cls, query_db: AsyncSession, user_id: Union[int, str]): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         获取用户详细信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param user_id: 用户id | 
					
						
							|  |  |  |         :return: 用户id对应的信息 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         posts = await PostService.get_post_list_services(query_db, PostPageQueryModel(**{}), is_page=False) | 
					
						
							|  |  |  |         roles = await RoleService.get_role_select_option_services(query_db) | 
					
						
							|  |  |  |         if user_id != '': | 
					
						
							|  |  |  |             query_user = await UserDao.get_user_detail_by_id(query_db, user_id=user_id) | 
					
						
							|  |  |  |             post_ids = ','.join([str(row.post_id) for row in query_user.get('user_post_info')]) | 
					
						
							|  |  |  |             post_ids_list = [row.post_id for row in query_user.get('user_post_info')] | 
					
						
							|  |  |  |             role_ids = ','.join([str(row.role_id) for row in query_user.get('user_role_info')]) | 
					
						
							|  |  |  |             role_ids_list = [row.role_id for row in query_user.get('user_role_info')] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return UserDetailModel( | 
					
						
							|  |  |  |                 data=UserInfoModel( | 
					
						
							|  |  |  |                     **CamelCaseUtil.transform_result(query_user.get('user_basic_info')), | 
					
						
							|  |  |  |                     postIds=post_ids, | 
					
						
							|  |  |  |                     roleIds=role_ids, | 
					
						
							|  |  |  |                     dept=CamelCaseUtil.transform_result(query_user.get('user_dept_info')), | 
					
						
							|  |  |  |                     role=CamelCaseUtil.transform_result(query_user.get('user_role_info')), | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 postIds=post_ids_list, | 
					
						
							|  |  |  |                 posts=posts, | 
					
						
							|  |  |  |                 roleIds=role_ids_list, | 
					
						
							|  |  |  |                 roles=roles, | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return UserDetailModel(posts=posts, roles=roles) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def user_profile_services(cls, query_db: AsyncSession, user_id: int): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         获取用户个人详细信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param user_id: 用户id | 
					
						
							|  |  |  |         :return: 用户id对应的信息 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         query_user = await UserDao.get_user_detail_by_id(query_db, user_id=user_id) | 
					
						
							|  |  |  |         post_ids = ','.join([str(row.post_id) for row in query_user.get('user_post_info')]) | 
					
						
							|  |  |  |         post_group = ','.join([row.post_name for row in query_user.get('user_post_info')]) | 
					
						
							|  |  |  |         role_ids = ','.join([str(row.role_id) for row in query_user.get('user_role_info')]) | 
					
						
							|  |  |  |         role_group = ','.join([row.role_name for row in query_user.get('user_role_info')]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return UserProfileModel( | 
					
						
							|  |  |  |             data=UserInfoModel( | 
					
						
							|  |  |  |                 **CamelCaseUtil.transform_result(query_user.get('user_basic_info')), | 
					
						
							|  |  |  |                 postIds=post_ids, | 
					
						
							|  |  |  |                 roleIds=role_ids, | 
					
						
							|  |  |  |                 dept=CamelCaseUtil.transform_result(query_user.get('user_dept_info')), | 
					
						
							|  |  |  |                 role=CamelCaseUtil.transform_result(query_user.get('user_role_info')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             postGroup=post_group, | 
					
						
							|  |  |  |             roleGroup=role_group, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def reset_user_services(cls, query_db: AsyncSession, page_object: ResetUserModel, | 
					
						
							|  |  |  |                                   currentUserName: str, currentPassword: str): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         重置用户密码service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param currentPassword: 当前用户密码 | 
					
						
							|  |  |  |         :param currentUserName: 当前用户名 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 重置用户对象 | 
					
						
							|  |  |  |         :return: 重置用户校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         dsPassword = page_object.password | 
					
						
							|  |  |  |         page_object.password = PwdUtil.md5_hash(page_object.password) | 
					
						
							|  |  |  |         reset_user = page_object.model_dump(exclude_unset=True, exclude={'admin'}) | 
					
						
							|  |  |  |         user = (await UserDao.get_user_detail_by_id(query_db, user_id=page_object.user_id)).get('user_basic_info') | 
					
						
							|  |  |  |         if page_object.old_password: | 
					
						
							|  |  |  |             if not PwdUtil.md5_hash(page_object.old_password) == user.password: | 
					
						
							|  |  |  |                 raise ServiceException(message='修改密码失败,旧密码错误') | 
					
						
							|  |  |  |             elif page_object.password == user.password: | 
					
						
							|  |  |  |                 raise ServiceException(message='新密码不能与旧密码相同') | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 del reset_user['old_password'] | 
					
						
							|  |  |  |         if page_object.sms_code and page_object.session_id: | 
					
						
							|  |  |  |             del reset_user['sms_code'] | 
					
						
							|  |  |  |             del reset_user['session_id'] | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             payload = { | 
					
						
							|  |  |  |                 'id': -1, | 
					
						
							|  |  |  |                 'userName': user.user_name, | 
					
						
							|  |  |  |                 'userPassword': dsPassword, | 
					
						
							|  |  |  |                 'email': user.email, | 
					
						
							|  |  |  |                 'phone': user.phonenumber, | 
					
						
							|  |  |  |                 'tenantId': -1, | 
					
						
							|  |  |  |                 'state': 1 if user.status == '0' else 0 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             headers = {'dashUserName': currentUserName, 'dashPassword': currentPassword} | 
					
						
							|  |  |  |             response_post = requests.post(url=AppConfig.ds_server_url+'/dolphinscheduler/users/update', | 
					
						
							|  |  |  |                                           params=payload, | 
					
						
							|  |  |  |                                           headers=headers, verify=False) | 
					
						
							|  |  |  |             if response_post.status_code != 200: | 
					
						
							|  |  |  |                 if response_post.status_code != 201: | 
					
						
							|  |  |  |                     raise Exception("服务异常,请确保各节点是否在线") | 
					
						
							|  |  |  |             if not response_post.json().get('success'): | 
					
						
							|  |  |  |                 raise Exception(response_post.json().get('msg')) | 
					
						
							|  |  |  |             await UserDao.edit_user_dao(query_db, reset_user) | 
					
						
							|  |  |  |             await query_db.commit() | 
					
						
							|  |  |  |             return CrudResponseModel(is_success=True, message='重置成功') | 
					
						
							|  |  |  |         except Exception as e: | 
					
						
							|  |  |  |             await query_db.rollback() | 
					
						
							|  |  |  |             raise e | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def batch_import_user_services( | 
					
						
							|  |  |  |         cls, | 
					
						
							|  |  |  |         request: Request, | 
					
						
							|  |  |  |         query_db: AsyncSession, | 
					
						
							|  |  |  |         file: UploadFile, | 
					
						
							|  |  |  |         update_support: bool, | 
					
						
							|  |  |  |         current_user: CurrentUserModel, | 
					
						
							|  |  |  |         user_data_scope_sql: str, | 
					
						
							|  |  |  |         dept_data_scope_sql: str, | 
					
						
							|  |  |  |     ): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         批量导入用户service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param request: Request对象 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param file: 用户导入文件对象 | 
					
						
							|  |  |  |         :param update_support: 用户存在时是否更新 | 
					
						
							|  |  |  |         :param current_user: 当前用户对象 | 
					
						
							|  |  |  |         :param user_data_scope_sql: 用户数据权限sql | 
					
						
							|  |  |  |         :param dept_data_scope_sql: 部门数据权限sql | 
					
						
							|  |  |  |         :return: 批量导入用户结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         header_dict = { | 
					
						
							|  |  |  |             '部门编号': 'dept_id', | 
					
						
							|  |  |  |             '登录名称': 'user_name', | 
					
						
							|  |  |  |             '用户名称': 'nick_name', | 
					
						
							|  |  |  |             '用户邮箱': 'email', | 
					
						
							|  |  |  |             '手机号码': 'phonenumber', | 
					
						
							|  |  |  |             '用户性别': 'sex', | 
					
						
							|  |  |  |             '帐号状态': 'status', | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         contents = await file.read() | 
					
						
							|  |  |  |         df = pd.read_excel(io.BytesIO(contents)) | 
					
						
							|  |  |  |         await file.close() | 
					
						
							|  |  |  |         df.rename(columns=header_dict, inplace=True) | 
					
						
							|  |  |  |         add_error_result = [] | 
					
						
							|  |  |  |         count = 0 | 
					
						
							|  |  |  |         pwd = await ConfigService.query_config_list_from_cache_services( | 
					
						
							|  |  |  |             request.app.state.redis, 'sys.user.initPassword' | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             for index, row in df.iterrows(): | 
					
						
							|  |  |  |                 count = count + 1 | 
					
						
							|  |  |  |                 if row['sex'] == '男': | 
					
						
							|  |  |  |                     row['sex'] = '0' | 
					
						
							|  |  |  |                 if row['sex'] == '女': | 
					
						
							|  |  |  |                     row['sex'] = '1' | 
					
						
							|  |  |  |                 if row['sex'] == '未知': | 
					
						
							|  |  |  |                     row['sex'] = '2' | 
					
						
							|  |  |  |                 if row['status'] == '正常': | 
					
						
							|  |  |  |                     row['status'] = '0' | 
					
						
							|  |  |  |                 if row['status'] == '停用': | 
					
						
							|  |  |  |                     row['status'] = '1' | 
					
						
							|  |  |  |                 add_user = UserModel( | 
					
						
							|  |  |  |                     deptId=row['dept_id'], | 
					
						
							|  |  |  |                     userName=row['user_name'], | 
					
						
							|  |  |  |                     password=PwdUtil.md5_hash(pwd), | 
					
						
							|  |  |  |                     nickName=row['nick_name'], | 
					
						
							|  |  |  |                     email=row['email'], | 
					
						
							|  |  |  |                     phonenumber=str(row['phonenumber']), | 
					
						
							|  |  |  |                     sex=row['sex'], | 
					
						
							|  |  |  |                     status=row['status'], | 
					
						
							|  |  |  |                     createBy=current_user.user.user_name, | 
					
						
							|  |  |  |                     createTime=datetime.now(), | 
					
						
							|  |  |  |                     updateBy=current_user.user.user_name, | 
					
						
							|  |  |  |                     updateTime=datetime.now(), | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |                 user_info = await UserDao.get_user_by_info(query_db, UserModel(userName=row['user_name'])) | 
					
						
							|  |  |  |                 if user_info: | 
					
						
							|  |  |  |                     if update_support: | 
					
						
							|  |  |  |                         edit_user_model = UserModel( | 
					
						
							|  |  |  |                             userId=user_info.user_id, | 
					
						
							|  |  |  |                             deptId=row['dept_id'], | 
					
						
							|  |  |  |                             userName=row['user_name'], | 
					
						
							|  |  |  |                             nickName=row['nick_name'], | 
					
						
							|  |  |  |                             email=row['email'], | 
					
						
							|  |  |  |                             phonenumber=str(row['phonenumber']), | 
					
						
							|  |  |  |                             sex=row['sex'], | 
					
						
							|  |  |  |                             status=row['status'], | 
					
						
							|  |  |  |                             updateBy=current_user.user.user_name, | 
					
						
							|  |  |  |                             updateTime=datetime.now(), | 
					
						
							|  |  |  |                         ) | 
					
						
							|  |  |  |                         edit_user_model.validate_fields() | 
					
						
							|  |  |  |                         await cls.check_user_allowed_services(edit_user_model) | 
					
						
							|  |  |  |                         if not current_user.user.admin: | 
					
						
							|  |  |  |                             await cls.check_user_data_scope_services( | 
					
						
							|  |  |  |                                 query_db, edit_user_model.user_id, user_data_scope_sql | 
					
						
							|  |  |  |                             ) | 
					
						
							|  |  |  |                             await DeptService.check_dept_data_scope_services( | 
					
						
							|  |  |  |                                 query_db, edit_user_model.dept_id, dept_data_scope_sql | 
					
						
							|  |  |  |                             ) | 
					
						
							|  |  |  |                         edit_user = edit_user_model.model_dump(exclude_unset=True) | 
					
						
							|  |  |  |                         payload = { | 
					
						
							|  |  |  |                             'id': -1, | 
					
						
							|  |  |  |                             'userName': user_info.user.user_name, | 
					
						
							|  |  |  |                             'userPassword': '', | 
					
						
							|  |  |  |                             'email': edit_user.email if edit_user.email else '', | 
					
						
							|  |  |  |                             'phone': edit_user.phonenumber if edit_user.phonenumber else '', | 
					
						
							|  |  |  |                             'tenantId': -1, | 
					
						
							|  |  |  |                             'state': 1 if edit_user.status == '0' else 0 | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         headers = {'dashUserName': current_user.user.user_name, 'dashPassword': current_user.user.password} | 
					
						
							|  |  |  |                         response_post = requests.post(url=AppConfig.ds_server_url+'/dolphinscheduler/users/update', | 
					
						
							|  |  |  |                                                       params=payload, | 
					
						
							|  |  |  |                                                       headers=headers, verify=False) | 
					
						
							|  |  |  |                         if response_post.status_code != 200: | 
					
						
							|  |  |  |                             if response_post.status_code != 201: | 
					
						
							|  |  |  |                                 raise Exception("服务异常,请确保各节点是否在线") | 
					
						
							|  |  |  |                         if not response_post.json().get('success'): | 
					
						
							|  |  |  |                             raise Exception(response_post.json().get('msg')) | 
					
						
							|  |  |  |                         await UserDao.edit_user_dao(query_db, edit_user) | 
					
						
							|  |  |  |                     else: | 
					
						
							|  |  |  |                         add_error_result.append(f"{count}.用户账号{row['user_name']}已存在") | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     add_user.validate_fields() | 
					
						
							|  |  |  |                     if not current_user.user.admin: | 
					
						
							|  |  |  |                         await DeptService.check_dept_data_scope_services( | 
					
						
							|  |  |  |                             query_db, add_user.dept_id, dept_data_scope_sql | 
					
						
							|  |  |  |                         ) | 
					
						
							|  |  |  |                     payload = {'userName': add_user.user_name, | 
					
						
							|  |  |  |                                'userPassword': pwd, | 
					
						
							|  |  |  |                                'tenantId': 1, | 
					
						
							|  |  |  |                                'queue': '', | 
					
						
							|  |  |  |                                'email': add_user.email, | 
					
						
							|  |  |  |                                'phone': add_user.phonenumber, | 
					
						
							|  |  |  |                                'state': 1 if add_user.status == '0' else 0 | 
					
						
							|  |  |  |                                } | 
					
						
							|  |  |  |                     headers = {'dashUserName': current_user.user.user_name, 'dashPassword': current_user.user.password} | 
					
						
							|  |  |  |                     response_post = requests.post(url=AppConfig.ds_server_url+'/dolphinscheduler/users/create', | 
					
						
							|  |  |  |                                                   params=payload, | 
					
						
							|  |  |  |                                                   headers=headers, verify=False) | 
					
						
							|  |  |  |                     if response_post.status_code != 200: | 
					
						
							|  |  |  |                         if response_post.status_code != 201: | 
					
						
							|  |  |  |                             raise Exception("服务异常,请确保各节点是否在线") | 
					
						
							|  |  |  |                     if not response_post.json().get('success'): | 
					
						
							|  |  |  |                         raise Exception(response_post.json().get('msg')) | 
					
						
							|  |  |  |                     await UserDao.add_user_dao(query_db, add_user) | 
					
						
							|  |  |  |             await query_db.commit() | 
					
						
							|  |  |  |             return CrudResponseModel(is_success=True, message='\n'.join(add_error_result)) | 
					
						
							|  |  |  |         except Exception as e: | 
					
						
							|  |  |  |             await query_db.rollback() | 
					
						
							|  |  |  |             raise e | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     async def get_user_import_template_services(): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         获取用户导入模板service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :return: 用户导入模板excel的二进制数据 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         header_list = ['部门编号', '登录名称', '用户名称', '用户邮箱', '手机号码', '用户性别', '帐号状态'] | 
					
						
							|  |  |  |         selector_header_list = ['用户性别', '帐号状态'] | 
					
						
							|  |  |  |         option_list = [{'用户性别': ['男', '女', '未知']}, {'帐号状态': ['正常', '停用']}] | 
					
						
							|  |  |  |         binary_data = get_excel_template( | 
					
						
							|  |  |  |             header_list=header_list, selector_header_list=selector_header_list, option_list=option_list | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return binary_data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     async def export_user_list_services(user_list: List): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         导出用户信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param user_list: 用户信息列表 | 
					
						
							|  |  |  |         :return: 用户信息对应excel的二进制数据 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         # 创建一个映射字典,将英文键映射到中文键 | 
					
						
							|  |  |  |         mapping_dict = { | 
					
						
							|  |  |  |             'userId': '用户编号', | 
					
						
							|  |  |  |             'userName': '用户名称', | 
					
						
							|  |  |  |             'nickName': '用户昵称', | 
					
						
							|  |  |  |             'deptName': '部门', | 
					
						
							|  |  |  |             'email': '邮箱地址', | 
					
						
							|  |  |  |             'phonenumber': '手机号码', | 
					
						
							|  |  |  |             'sex': '性别', | 
					
						
							|  |  |  |             'status': '状态', | 
					
						
							|  |  |  |             'createBy': '创建者', | 
					
						
							|  |  |  |             'createTime': '创建时间', | 
					
						
							|  |  |  |             'updateBy': '更新者', | 
					
						
							|  |  |  |             'updateTime': '更新时间', | 
					
						
							|  |  |  |             'remark': '备注', | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         data = user_list | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for item in data: | 
					
						
							|  |  |  |             if item.get('status') == '0': | 
					
						
							|  |  |  |                 item['status'] = '正常' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 item['status'] = '停用' | 
					
						
							|  |  |  |             if item.get('sex') == '0': | 
					
						
							|  |  |  |                 item['sex'] = '男' | 
					
						
							|  |  |  |             elif item.get('sex') == '1': | 
					
						
							|  |  |  |                 item['sex'] = '女' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 item['sex'] = '未知' | 
					
						
							|  |  |  |         new_data = [ | 
					
						
							|  |  |  |             {mapping_dict.get(key): value for key, value in item.items() if mapping_dict.get(key)} for item in data | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         binary_data = export_list2excel(new_data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return binary_data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def get_user_role_allocated_list_services(cls, query_db: AsyncSession, page_object: UserRoleQueryModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         根据用户id获取已分配角色列表 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 用户关联角色对象 | 
					
						
							|  |  |  |         :return: 已分配角色列表 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         query_user = await UserDao.get_user_detail_by_id(query_db, page_object.user_id) | 
					
						
							|  |  |  |         post_ids = ','.join([str(row.post_id) for row in query_user.get('user_post_info')]) | 
					
						
							|  |  |  |         role_ids = ','.join([str(row.role_id) for row in query_user.get('user_role_info')]) | 
					
						
							|  |  |  |         user = UserInfoModel( | 
					
						
							|  |  |  |             **CamelCaseUtil.transform_result(query_user.get('user_basic_info')), | 
					
						
							|  |  |  |             postIds=post_ids, | 
					
						
							|  |  |  |             roleIds=role_ids, | 
					
						
							|  |  |  |             dept=CamelCaseUtil.transform_result(query_user.get('user_dept_info')), | 
					
						
							|  |  |  |             role=CamelCaseUtil.transform_result(query_user.get('user_role_info')), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         query_role_list = [ | 
					
						
							|  |  |  |             SelectedRoleModel(**row) for row in await RoleService.get_role_select_option_services(query_db) | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         for model_a in query_role_list: | 
					
						
							|  |  |  |             for model_b in user.role: | 
					
						
							|  |  |  |                 if model_a.role_id == model_b.role_id: | 
					
						
							|  |  |  |                     model_a.flag = True | 
					
						
							|  |  |  |         result = UserRoleResponseModel(roles=query_role_list, user=user) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def add_user_role_services(cls, query_db: AsyncSession, page_object: CrudUserRoleModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         新增用户关联角色信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 新增用户关联角色对象 | 
					
						
							|  |  |  |         :return: 新增用户关联角色校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if page_object.user_id and page_object.role_ids: | 
					
						
							|  |  |  |             role_id_list = page_object.role_ids.split(',') | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 await UserDao.delete_user_role_by_user_and_role_dao(query_db, UserRoleModel(userId=page_object.user_id)) | 
					
						
							|  |  |  |                 for role_id in role_id_list: | 
					
						
							|  |  |  |                     await UserDao.add_user_role_dao(query_db, UserRoleModel(userId=page_object.user_id, roleId=role_id)) | 
					
						
							|  |  |  |                 await query_db.commit() | 
					
						
							|  |  |  |                 return CrudResponseModel(is_success=True, message='分配成功') | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 await query_db.rollback() | 
					
						
							|  |  |  |                 raise e | 
					
						
							|  |  |  |         elif page_object.user_id and not page_object.role_ids: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 await UserDao.delete_user_role_by_user_and_role_dao(query_db, UserRoleModel(userId=page_object.user_id)) | 
					
						
							|  |  |  |                 await query_db.commit() | 
					
						
							|  |  |  |                 return CrudResponseModel(is_success=True, message='分配成功') | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 await query_db.rollback() | 
					
						
							|  |  |  |                 raise e | 
					
						
							|  |  |  |         elif page_object.user_ids and page_object.role_id: | 
					
						
							|  |  |  |             user_id_list = page_object.user_ids.split(',') | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 for user_id in user_id_list: | 
					
						
							|  |  |  |                     user_role = await cls.detail_user_role_services( | 
					
						
							|  |  |  |                         query_db, UserRoleModel(userId=user_id, roleId=page_object.role_id) | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                     if user_role: | 
					
						
							|  |  |  |                         continue | 
					
						
							|  |  |  |                     else: | 
					
						
							|  |  |  |                         await UserDao.add_user_role_dao( | 
					
						
							|  |  |  |                             query_db, UserRoleModel(userId=user_id, roleId=page_object.role_id) | 
					
						
							|  |  |  |                         ) | 
					
						
							|  |  |  |                 await query_db.commit() | 
					
						
							|  |  |  |                 return CrudResponseModel(is_success=True, message='新增成功') | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 await query_db.rollback() | 
					
						
							|  |  |  |                 raise e | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise ServiceException(message='不满足新增条件') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def delete_user_role_services(cls, query_db: AsyncSession, page_object: CrudUserRoleModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         删除用户关联角色信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 删除用户关联角色对象 | 
					
						
							|  |  |  |         :return: 删除用户关联角色校验结果 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if (page_object.user_id and page_object.role_id) or (page_object.user_ids and page_object.role_id): | 
					
						
							|  |  |  |             if page_object.user_id and page_object.role_id: | 
					
						
							|  |  |  |                 try: | 
					
						
							|  |  |  |                     await UserDao.delete_user_role_by_user_and_role_dao( | 
					
						
							|  |  |  |                         query_db, UserRoleModel(userId=page_object.user_id, roleId=page_object.role_id) | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                     await query_db.commit() | 
					
						
							|  |  |  |                     return CrudResponseModel(is_success=True, message='删除成功') | 
					
						
							|  |  |  |                 except Exception as e: | 
					
						
							|  |  |  |                     await query_db.rollback() | 
					
						
							|  |  |  |                     raise e | 
					
						
							|  |  |  |             elif page_object.user_ids and page_object.role_id: | 
					
						
							|  |  |  |                 user_id_list = page_object.user_ids.split(',') | 
					
						
							|  |  |  |                 try: | 
					
						
							|  |  |  |                     for user_id in user_id_list: | 
					
						
							|  |  |  |                         await UserDao.delete_user_role_by_user_and_role_dao( | 
					
						
							|  |  |  |                             query_db, UserRoleModel(userId=user_id, roleId=page_object.role_id) | 
					
						
							|  |  |  |                         ) | 
					
						
							|  |  |  |                     await query_db.commit() | 
					
						
							|  |  |  |                     return CrudResponseModel(is_success=True, message='删除成功') | 
					
						
							|  |  |  |                 except Exception as e: | 
					
						
							|  |  |  |                     await query_db.rollback() | 
					
						
							|  |  |  |                     raise e | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 raise ServiceException(message='不满足删除条件') | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise ServiceException(message='传入用户角色关联信息为空') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def detail_user_role_services(cls, query_db: AsyncSession, page_object: UserRoleModel): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         获取用户关联角色详细信息service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         :param query_db: orm对象 | 
					
						
							|  |  |  |         :param page_object: 用户关联角色对象 | 
					
						
							|  |  |  |         :return: 用户关联角色详细信息 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         user_role = await UserDao.get_user_role_detail(query_db, page_object) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return user_role |