mirror of https://github.com/jumpserver/jumpserver
perf: 工单新增相关过滤
parent
43d61b5348
commit
8d1fb84aaf
|
@ -1,5 +1,6 @@
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
from django.db.models import Subquery, OuterRef
|
from django.db.models.functions import Concat
|
||||||
|
from django.db.models import Subquery, OuterRef, Value, F, Q
|
||||||
|
|
||||||
from common.drf.filters import BaseFilterSet
|
from common.drf.filters import BaseFilterSet
|
||||||
|
|
||||||
|
@ -11,6 +12,10 @@ from tickets.models import (
|
||||||
|
|
||||||
class TicketFilter(BaseFilterSet):
|
class TicketFilter(BaseFilterSet):
|
||||||
assignees__id = filters.UUIDFilter(method='filter_assignees_id')
|
assignees__id = filters.UUIDFilter(method='filter_assignees_id')
|
||||||
|
relevant_app = filters.CharFilter(method='filter_relevant_app')
|
||||||
|
relevant_asset = filters.CharFilter(method='filter_relevant_asset')
|
||||||
|
relevant_system_user = filters.CharFilter(method='filter_relevant_system_user')
|
||||||
|
relevant_command = filters.CharFilter(method='filter_relevant_command')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Ticket
|
model = Ticket
|
||||||
|
@ -27,6 +32,72 @@ class TicketFilter(BaseFilterSet):
|
||||||
ticket_steps__ticket_assignees__assignee__id=value
|
ticket_steps__ticket_assignees__assignee__id=value
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def filter_relevant_asset(self, queryset, name, value):
|
||||||
|
asset_ids = ApplyAssetTicket.objects.annotate(
|
||||||
|
asset_str=Concat(
|
||||||
|
F('apply_assets__hostname'), Value('('),
|
||||||
|
F('apply_assets__ip'), Value(')')
|
||||||
|
)
|
||||||
|
).filter(
|
||||||
|
asset_str__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
login_asset_ids = ApplyLoginAssetTicket.objects.annotate(
|
||||||
|
asset_str=Concat(
|
||||||
|
F('apply_login_asset__hostname'), Value('('),
|
||||||
|
F('apply_login_asset__ip'), Value(')')
|
||||||
|
)
|
||||||
|
).filter(
|
||||||
|
asset_str__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
command_ids = ApplyCommandTicket.objects.filter(
|
||||||
|
apply_run_asset__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
ticket_ids = list(set(list(asset_ids) + list(login_asset_ids) + list(command_ids)))
|
||||||
|
return queryset.filter(id__in=ticket_ids)
|
||||||
|
|
||||||
|
def filter_relevant_app(self, queryset, name, value):
|
||||||
|
app_ids = ApplyApplicationTicket.objects.filter(
|
||||||
|
apply_applications__name__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
command_ids = ApplyCommandTicket.objects.filter(
|
||||||
|
apply_run_asset__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
ticket_ids = list(set(list(app_ids) + list(command_ids)))
|
||||||
|
return queryset.filter(id__in=ticket_ids)
|
||||||
|
|
||||||
|
def filter_relevant_system_user(self, queryset, name, value):
|
||||||
|
system_user_query = Q(apply_system_users__name__icontains=value)
|
||||||
|
asset_ids = ApplyAssetTicket.objects.filter(
|
||||||
|
system_user_query
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
app_ids = ApplyApplicationTicket.objects.filter(
|
||||||
|
system_user_query
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
login_asset_ids = ApplyLoginAssetTicket.objects.filter(
|
||||||
|
apply_login_system_user__name__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
|
||||||
|
command_ids = ApplyCommandTicket.objects.filter(
|
||||||
|
apply_run_system_user__name__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
ticket_ids = list(
|
||||||
|
set(list(asset_ids) + list(app_ids) + list(login_asset_ids) + list(command_ids))
|
||||||
|
)
|
||||||
|
return queryset.filter(id__in=ticket_ids)
|
||||||
|
|
||||||
|
def filter_relevant_command(self, queryset, name, value):
|
||||||
|
command_ids = ApplyCommandTicket.objects.filter(
|
||||||
|
apply_run_command__icontains=value
|
||||||
|
).values_list('id', flat=True)
|
||||||
|
return queryset.filter(id__in=list(command_ids))
|
||||||
|
|
||||||
|
|
||||||
class ApplyAssetTicketFilter(BaseFilterSet):
|
class ApplyAssetTicketFilter(BaseFilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
Loading…
Reference in New Issue