diff --git a/b/user/get_user_and_role.dspy b/b/user/get_user_and_role.dspy new file mode 100644 index 0000000..6c555a2 --- /dev/null +++ b/b/user/get_user_and_role.dspy @@ -0,0 +1,83 @@ +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' + WHERE %s + ORDER BY 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']}) + 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