Compare commits
No commits in common. "faedbb8edfb1a22bd3beb4b566ce69bb5fa26842" and "f2b432df51adf44a931408c41da8a55ff34e04c5" have entirely different histories.
faedbb8edf
...
f2b432df51
@ -1,90 +0,0 @@
|
|||||||
def _parse_page(ns, default_page=1, default_size=20, max_size=200):
|
|
||||||
try:
|
|
||||||
current_page = int(ns.get('current_page') or ns.get('page') or default_page)
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
current_page = default_page
|
|
||||||
try:
|
|
||||||
page_size = int(ns.get('page_size') or default_size)
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
page_size = default_size
|
|
||||||
current_page = max(1, current_page)
|
|
||||||
page_size = max(1, min(page_size, max_size))
|
|
||||||
return current_page, page_size, (current_page - 1) * page_size
|
|
||||||
|
|
||||||
|
|
||||||
async def get_user_and_role(ns={}):
|
|
||||||
"""获取机构下所有用户及用户对应的所有角色"""
|
|
||||||
orgid = ns.get('orgid')
|
|
||||||
if not orgid:
|
|
||||||
return {'status': False, 'msg': '缺少 orgid'}
|
|
||||||
|
|
||||||
current_page, page_size, offset = _parse_page(ns)
|
|
||||||
db = DBPools()
|
|
||||||
async with db.sqlorContext('kboss') as sor:
|
|
||||||
try:
|
|
||||||
where_sql = """
|
|
||||||
u.del_flg='0'
|
|
||||||
AND (
|
|
||||||
u.orgid=${orgid}$
|
|
||||||
OR o.parentid=${orgid}$
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
if ns.get('username'):
|
|
||||||
where_sql += " AND u.username LIKE '%%%%%s%%%%'" % ns.get('username')
|
|
||||||
if ns.get('mobile'):
|
|
||||||
where_sql += " AND u.mobile LIKE '%%%%%s%%%%'" % ns.get('mobile')
|
|
||||||
count_rows = await sor.sqlExe(
|
|
||||||
"""
|
|
||||||
SELECT COUNT(*) AS total_count
|
|
||||||
FROM users u
|
|
||||||
LEFT JOIN organization o ON u.orgid = o.id AND o.del_flg='0'
|
|
||||||
WHERE %s
|
|
||||||
""" % where_sql,
|
|
||||||
{'orgid': orgid},
|
|
||||||
)
|
|
||||||
total_count = count_rows[0]['total_count'] if count_rows else 0
|
|
||||||
sql = """
|
|
||||||
SELECT u.*
|
|
||||||
FROM users u
|
|
||||||
LEFT JOIN organization o ON u.orgid = o.id AND o.del_flg='0'
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT userid, MAX(create_at) AS userrole_create_at
|
|
||||||
FROM userrole
|
|
||||||
WHERE del_flg='0'
|
|
||||||
GROUP BY userid
|
|
||||||
) ur_sort ON u.id = ur_sort.userid
|
|
||||||
WHERE %s
|
|
||||||
ORDER BY ur_sort.userrole_create_at DESC, u.create_at DESC
|
|
||||||
LIMIT %d OFFSET %d
|
|
||||||
""" % (where_sql, page_size, offset)
|
|
||||||
users = await sor.sqlExe(sql, {'orgid': orgid})
|
|
||||||
for user in users:
|
|
||||||
user['roles'] = []
|
|
||||||
userroles = await sor.R('userrole', {'userid': user['id']})
|
|
||||||
userroles = sorted(userroles, key=lambda item: item.get('create_at') or '', reverse=True)
|
|
||||||
for userrole in userroles:
|
|
||||||
if userrole.get('del_flg') == '1' or not userrole.get('roleid'):
|
|
||||||
continue
|
|
||||||
roles = await sor.R('role', {'id': userrole['roleid']})
|
|
||||||
if len(roles) >= 1 and roles[0].get('del_flg') != '1':
|
|
||||||
user['roles'].append({
|
|
||||||
'id': roles[0].get('id'),
|
|
||||||
'name': roles[0].get('role'),
|
|
||||||
})
|
|
||||||
|
|
||||||
return {
|
|
||||||
'status': True,
|
|
||||||
'msg': 'ok',
|
|
||||||
'data': {
|
|
||||||
'total_count': total_count,
|
|
||||||
'current_page': current_page,
|
|
||||||
'page_size': page_size,
|
|
||||||
'rows': users,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
except Exception as e:
|
|
||||||
return {'status': False, 'msg': '获取用户角色失败, %s' % str(e)}
|
|
||||||
|
|
||||||
|
|
||||||
ret = await get_user_and_role(params_kw)
|
|
||||||
return ret
|
|
||||||
Loading…
x
Reference in New Issue
Block a user