Skip to content

Commit

Permalink
refactor: cr调整
Browse files Browse the repository at this point in the history
  • Loading branch information
neronkl committed Dec 11, 2023
1 parent ef18658 commit e5eab08
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 42 deletions.
15 changes: 10 additions & 5 deletions src/bk-user/bkuser/apis/web/data_source_organization/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
from bkuser.apps.data_source.models import DataSource, DataSourceDepartment, DataSourceUser
from bkuser.apps.permission.constants import PermAction
from bkuser.apps.permission.permissions import perm_class
from bkuser.biz.data_source import DataSourceDepartmentHandler
from bkuser.biz.data_source import DataSourceDepartmentHandler, DataSourceDepartmentInfoWithChildren
from bkuser.biz.data_source_organization import (
DataSourceOrganizationHandler,
DataSourceUserBaseInfo,
Expand Down Expand Up @@ -68,7 +68,12 @@ def get_queryset(self):

return queryset

def _get_data_source_user_department_info_map(self, data_source_user_ids: List[int]) -> Dict[int, List]:
def _get_data_source_user_department_info_map(
self, data_source_user_ids: List[int]
) -> Dict[int, List[DataSourceDepartmentInfoWithChildren]]:
"""
获取用户所属部门数据,返回数据源用户ID-所属数据源部门数据列表 映射
"""
data_source_user_department_ids_map = DataSourceDepartmentHandler.get_user_department_ids_map(
user_ids=data_source_user_ids
)
Expand Down Expand Up @@ -104,7 +109,7 @@ def get(self, request, *args, **kwargs):
[user.id for user in data_source_users]
)
}
serializer = self.get_serializer(data_source_users, many=True, context=context)
serializer = UserSearchOutputSLZ(data_source_users, many=True, context=context)
return self.get_paginated_response(serializer.data)

@swagger_auto_schema(
Expand Down Expand Up @@ -231,9 +236,9 @@ def get_serializer_context(self):
user_ids=[self.kwargs["id"]]
)
user_departments_map = defaultdict(list)
for user_id, departments in data_source_user_department_ids_map.items():
for user_id, department_ids in data_source_user_department_ids_map.items():
# 获取用户的数据源部门基础信息
department_info_map = DataSourceDepartmentHandler.get_department_info_map_by_ids(departments)
department_info_map = DataSourceDepartmentHandler.get_department_info_map_by_ids(department_ids)
user_departments_map[user_id] = list(department_info_map.values())

user_leaders_map = DataSourceOrganizationHandler.get_user_leaders_map_by_user_id([self.kwargs["id"]])
Expand Down
2 changes: 1 addition & 1 deletion src/bk-user/bkuser/apis/web/organization/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def get_departments(self, instance: TenantUser) -> List[Dict]:

def to_representation(self, instance: TenantUser) -> Dict:
data = super().to_representation(instance)
user_info = self.context["tenant_users_info_map"].get(instance.id)
user_info = self.context["tenant_user_info_map"].get(instance.id)
if user_info is not None:
user = user_info.data_source_user
data.update(
Expand Down
53 changes: 21 additions & 32 deletions src/bk-user/bkuser/apis/web/organization/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
specific language governing permissions and limitations under the License.
"""
import logging
from typing import List

from django.db.models import Q
from drf_yasg.utils import swagger_auto_schema
Expand Down Expand Up @@ -61,33 +60,29 @@ def get(self, request, *args, **kwargs):
slz.is_valid(raise_exception=True)
data = slz.validated_data

tenant_id = self.get_current_tenant_id()
# 过滤出该租户部门的租户用户
tenant_user_ids = TenantUserHandler.get_tenant_user_ids_by_tenant_department(
tenant_id=self.get_current_tenant_id(), tenant_department_id=self.kwargs["id"], recursive=data["recursive"]
current_department_tenant_user_ids = TenantUserHandler.get_tenant_user_ids_by_tenant_department(
tenant_id=tenant_id, tenant_department_id=self.kwargs["id"], recursive=data["recursive"]
)

# build response
queryset = self.filter_queryset(self.get_queryset().filter(id__in=tenant_user_ids))
queryset = self.filter_queryset(self.get_queryset().filter(id__in=current_department_tenant_user_ids))
if keyword := data.get("keyword"):
queryset = queryset.select_related("data_source_user").filter(
Q(data_source_user__username__icontains=keyword) | Q(data_source_user__full_name__icontains=keyword)
)

slz_context = {
# 租户用户基础信息
"tenant_users_info_map": {i.id: i for i in TenantUserHandler.list_tenant_user_by_id(tenant_user_ids)},
# 租户用户所属租户组织
tenant_users = self.paginate_queryset(queryset)
tenant_user_ids = [user.id for user in tenant_users]
context = {
"tenant_user_info_map": TenantUserHandler.list_tenant_user_by_id(tenant_user_ids),
"tenant_user_departments_map": TenantUserHandler.get_tenant_user_departments_map_by_id(
self.get_current_tenant_id(), tenant_user_ids
tenant_id, tenant_user_ids
),
}
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True, context=slz_context)
return self.get_paginated_response(serializer.data)

serializer = self.get_serializer(queryset, many=True, context=slz_context)
return Response(serializer.data)
serializer = TenantUserListOutputSLZ(tenant_users, many=True, context=context)
return self.get_paginated_response(serializer.data)


class TenantUserRetrieveApi(generics.RetrieveAPIView):
Expand Down Expand Up @@ -225,19 +220,6 @@ def get_tenant_user_ids(self, tenant_id):

return TenantUserHandler.get_tenant_user_ids_by_tenant(tenant_id=current_tenant_id)

def _get_serializer_context(self, tenant_users: List[TenantUser]):
# 租户用户基础信息
tenant_user_ids = [user.id for user in tenant_users]
tenant_users_info_map = {i.id: i for i in TenantUserHandler.list_tenant_user_by_id(tenant_user_ids)}
# 租户用户所属租户组织
tenant_user_departments_map = TenantUserHandler.get_tenant_user_departments_map_by_id(
self.kwargs["id"], tenant_user_ids
)
return {
"tenant_users_info_map": tenant_users_info_map,
"tenant_user_departments_map": tenant_user_departments_map,
}

@swagger_auto_schema(
tags=["tenant-organization"],
operation_description="租户下用户列表",
Expand All @@ -250,15 +232,22 @@ def get(self, request, *args, **kwargs):
data = slz.validated_data

# 租户用户列表ids
tenant_user_ids = self.get_tenant_user_ids(self.kwargs["id"])
tenant_id = self.kwargs["id"]

# build response
queryset = self.filter_queryset(self.get_queryset().filter(id__in=tenant_user_ids))
queryset = self.filter_queryset(self.get_queryset().filter(id__in=self.get_tenant_user_ids(tenant_id)))
if keyword := data.get("keyword"):
queryset = queryset.select_related("data_source_user").filter(
Q(data_source_user__username__icontains=keyword) | Q(data_source_user__full_name__icontains=keyword)
)

tenant_users = self.paginate_queryset(queryset)
serializer = self.get_serializer(tenant_users, many=True, context=self._get_serializer_context(tenant_users))
tenant_user_ids = [user.id for user in tenant_users]
context = {
"tenant_user_info_map": TenantUserHandler.list_tenant_user_by_id(tenant_user_ids),
"tenant_user_departments_map": TenantUserHandler.get_tenant_user_departments_map_by_id(
tenant_id, tenant_user_ids
),
}
serializer = TenantUserListOutputSLZ(tenant_users, many=True, context=context)
return self.get_paginated_response(serializer.data)
7 changes: 4 additions & 3 deletions src/bk-user/bkuser/biz/data_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,14 @@ def get_department_info_map_by_ids(department_ids: List[int]) -> Dict[int, DataS
dept_relation = DataSourceDepartmentRelation.objects.get(department=dept)

# 部门路径构建
department_path = list(dept_relation.get_ancestors().values_list("department__name", flat=True))
department_path.append(dept.name)
dept_names = list(
dept_relation.get_ancestors(include_self=True).values_list("department__name", flat=True)
)

departments_map[dept.id] = DataSourceDepartmentInfoWithChildren(
id=dept.id,
name=dept.name,
department_path="/".join(department_path),
department_path="/".join(dept_names),
children_ids=list(dept_relation.get_children().values_list("department_id", flat=True)),
)

Expand Down
4 changes: 3 additions & 1 deletion src/bk-user/bkuser/biz/tenant.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,9 @@ def convert_data_source_department_to_tenant_department(
tenant_id: str, data_source_department_info_map: Dict[int, DataSourceDepartmentInfoWithChildren]
) -> Dict[int, TenantDepartmentBaseInfo]:
"""
转换为租户部门
转换为租户部门,返回数据源部门ID-租户部门数据 映射
tenant_id: 租户ID
data_source_department_info_map: 数据源部门ID-数据源部门数据 映射
"""
# tenant_id 租户下部门关系映射
tenant_departments = TenantDepartment.objects.filter(tenant_id=tenant_id)
Expand Down

0 comments on commit e5eab08

Please sign in to comment.