1- from sqlalchemy import and_
1+ from sqlalchemy import and_ , desc
22from sqlalchemy .orm import Session
3- from entity .role_entity import SysRole
4- from utils .time_format_tool import list_format_datetime
3+ from entity .role_entity import SysRole , SysRoleMenu
4+ from entity .menu_entity import SysMenu
5+ from mapper .schema .role_schema import RoleModel , RoleMenuModel , RolePageObject , RolePageObjectResponse , CrudRoleResponse , RoleDetailModel
6+ from utils .time_format_tool import list_format_datetime , object_format_datetime
57from utils .page_tool import get_page_info
8+ from datetime import datetime , time
9+
10+
11+ def get_role_by_name (db : Session , role_name : str ):
12+ """
13+ 根据角色名获取角色信息
14+ :param db: orm对象
15+ :param role_name: 角色名
16+ :return: 当前角色名的角色信息对象
17+ """
18+ query_role_info = db .query (SysRole ) \
19+ .filter (SysRole .status == 0 , SysRole .del_flag == 0 , SysRole .role_name == role_name ) \
20+ .order_by (desc (SysRole .create_time )).distinct ().first ()
21+
22+ return query_role_info
623
724
825def get_role_by_id (db : Session , role_id : int ):
@@ -15,9 +32,156 @@ def get_role_by_id(db: Session, role_id: int):
1532 return role_info
1633
1734
35+ def get_role_detail_by_id (db : Session , role_id : int ):
36+ """
37+ 根据role_id获取角色详细信息
38+ :param db: orm对象
39+ :param role_id: 角色id
40+ :return: 当前role_id的角色信息对象
41+ """
42+ query_role_basic_info = db .query (SysRole ) \
43+ .filter (SysRole .del_flag == 0 , SysRole .role_id == role_id ) \
44+ .distinct ().first ()
45+ query_role_menu_info = db .query (SysMenu ).select_from (SysRole ) \
46+ .filter (SysRole .del_flag == 0 , SysRole .role_id == role_id ) \
47+ .outerjoin (SysRoleMenu , SysRole .role_id == SysRoleMenu .role_id ) \
48+ .outerjoin (SysMenu , and_ (SysRoleMenu .menu_id == SysMenu .menu_id , SysMenu .status == 0 )) \
49+ .distinct ().all ()
50+ results = dict (
51+ role = object_format_datetime (query_role_basic_info ),
52+ menu = list_format_datetime (query_role_menu_info ),
53+ )
54+
55+ return RoleDetailModel (** results )
56+
57+
1858def get_role_select_option_crud (db : Session ):
1959 role_info = db .query (SysRole ) \
2060 .filter (SysRole .status == 0 , SysRole .del_flag == 0 ) \
2161 .all ()
2262
2363 return role_info
64+
65+
66+ def get_role_list (db : Session , page_object : RolePageObject ):
67+ """
68+ 根据查询参数获取角色列表信息
69+ :param db: orm对象
70+ :param page_object: 分页查询参数对象
71+ :return: 角色列表信息对象
72+ """
73+ count = db .query (SysRole ) \
74+ .filter (SysRole .del_flag == 0 ,
75+ SysRole .role_name .like (f'%{ page_object .role_name } %' ) if page_object .role_name else True ,
76+ SysRole .role_key .like (f'%{ page_object .role_key } %' ) if page_object .role_key else True ,
77+ SysRole .status == page_object .status if page_object .status else True ,
78+ SysRole .create_time .between (
79+ datetime .combine (datetime .strptime (page_object .create_time_start , '%Y-%m-%d' ), time (00 , 00 , 00 )),
80+ datetime .combine (datetime .strptime (page_object .create_time_end , '%Y-%m-%d' ), time (23 , 59 , 59 )))
81+ if page_object .create_time_start and page_object .create_time_end else True
82+ )\
83+ .order_by (SysRole .role_sort )\
84+ .distinct ().count ()
85+ offset_com = (page_object .page_num - 1 ) * page_object .page_size
86+ page_info = get_page_info (offset_com , page_object .page_num , page_object .page_size , count )
87+ role_list = db .query (SysRole ) \
88+ .filter (SysRole .del_flag == 0 ,
89+ SysRole .role_name .like (f'%{ page_object .role_name } %' ) if page_object .role_name else True ,
90+ SysRole .role_key .like (f'%{ page_object .role_key } %' ) if page_object .role_key else True ,
91+ SysRole .status == page_object .status if page_object .status else True ,
92+ SysRole .create_time .between (
93+ datetime .combine (datetime .strptime (page_object .create_time_start , '%Y-%m-%d' ), time (00 , 00 , 00 )),
94+ datetime .combine (datetime .strptime (page_object .create_time_end , '%Y-%m-%d' ), time (23 , 59 , 59 )))
95+ if page_object .create_time_start and page_object .create_time_end else True
96+ ) \
97+ .order_by (SysRole .role_sort ) \
98+ .offset (page_info .offset ) \
99+ .limit (page_object .page_size ) \
100+ .distinct ().all ()
101+
102+ result = dict (
103+ rows = list_format_datetime (role_list ),
104+ page_num = page_info .page_num ,
105+ page_size = page_info .page_size ,
106+ total = page_info .total ,
107+ has_next = page_info .has_next
108+ )
109+
110+ return RolePageObjectResponse (** result )
111+
112+
113+ def add_role_crud (db : Session , role : RoleModel ):
114+ """
115+ 新增角色数据库操作
116+ :param db: orm对象
117+ :param role: 角色对象
118+ :return: 新增校验结果
119+ """
120+ db_role = SysRole (** role .dict ())
121+ db .add (db_role )
122+ db .commit () # 提交保存到数据库中
123+ db .refresh (db_role ) # 刷新
124+ result = dict (is_success = True , message = '新增成功' )
125+
126+ return CrudRoleResponse (** result )
127+
128+
129+ def edit_role_crud (db : Session , role : RoleModel ):
130+ """
131+ 编辑角色数据库操作
132+ :param db: orm对象
133+ :param role: 角色对象
134+ :return: 编辑校验结果
135+ """
136+ is_role_id = db .query (SysRole ).filter (SysRole .role_id == role .role_id ).all ()
137+ if not is_role_id :
138+ result = dict (is_success = False , message = '角色不存在' )
139+ else :
140+ # 筛选出属性值为不为None和''的
141+ filtered_dict = {k : v for k , v in role .dict ().items () if v is not None and v != '' }
142+ db .query (SysRole ) \
143+ .filter (SysRole .role_id == role .role_id ) \
144+ .update (filtered_dict )
145+ db .commit () # 提交保存到数据库中
146+ result = dict (is_success = True , message = '更新成功' )
147+
148+ return CrudRoleResponse (** result )
149+
150+
151+ def delete_role_crud (db : Session , role : RoleModel ):
152+ """
153+ 删除角色数据库操作
154+ :param db: orm对象
155+ :param user: 角色对象
156+ :return:
157+ """
158+ db .query (SysRole ) \
159+ .filter (SysRole .role_id == role .role_id ) \
160+ .update ({SysRole .del_flag : '2' , SysRole .update_by : role .update_by , SysRole .update_time : role .update_time })
161+ db .commit () # 提交保存到数据库中
162+
163+
164+ def add_role_menu_crud (db : Session , role_menu : RoleMenuModel ):
165+ """
166+ 新增角色菜单关联信息数据库操作
167+ :param db: orm对象
168+ :param role_menu: 用户角色菜单关联对象
169+ :return:
170+ """
171+ db_role_menu = SysRoleMenu (** role_menu .dict ())
172+ db .add (db_role_menu )
173+ db .commit () # 提交保存到数据库中
174+ db .refresh (db_role_menu ) # 刷新
175+
176+
177+ def delete_role_menu_crud (db : Session , role_menu : RoleMenuModel ):
178+ """
179+ 删除角色菜单关联信息数据库操作
180+ :param db: orm对象
181+ :param role_menu: 角色菜单关联对象
182+ :return:
183+ """
184+ db .query (SysRoleMenu ) \
185+ .filter (SysRoleMenu .role_id == role_menu .role_id ) \
186+ .delete ()
187+ db .commit () # 提交保存到数据库中
0 commit comments