event cate agg
This commit is contained in:
parent
32b541bda4
commit
afe0c171cf
|
@ -103,7 +103,7 @@ class Event(CommonBModel):
|
|||
|
||||
class Eventdo(BaseModel):
|
||||
cate = models.ForeignKey(EventCate, verbose_name='关联事件种类',
|
||||
on_delete=models.CASCADE)
|
||||
on_delete=models.CASCADE, related_name='do_cate')
|
||||
event = models.ForeignKey(Event, verbose_name='关联事件',
|
||||
on_delete=models.CASCADE)
|
||||
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
||||
|
|
|
@ -128,3 +128,10 @@ class AlgoChannelSerializer(CustomModelSerializer):
|
|||
class Meta:
|
||||
model = AlgoChannel
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class EventAggSerializer(serializers.Serializer):
|
||||
start_create = serializers.DateField(required=False, allow_null=True)
|
||||
end_create = serializers.DateField(required=False, allow_null=True)
|
||||
is_handled = serializers.BooleanField(required=False)
|
||||
completed = serializers.BooleanField(default=False)
|
||||
|
|
|
@ -118,7 +118,7 @@ def save_voice_and_speak(event: Event):
|
|||
Args:
|
||||
event (Event): _description_
|
||||
"""
|
||||
main_cate = event.cates.all().order_by('priority', 'create_time').first()
|
||||
main_cate = event.cates.all().order_by('-priority', 'create_time').first()
|
||||
v_p, v_num = main_cate.voice_person, main_cate.voice_num
|
||||
_, event.voice, _ = generate_voice(event.voice_msg, v_p)
|
||||
event.save()
|
||||
|
@ -224,7 +224,7 @@ def dispatch_dahua_event(data: dict):
|
|||
if alarm_type in [1001003, 1001000] and vchannel: # 内部人员/或陌生人报警
|
||||
# 查看加载的算法
|
||||
algo_codes = list(AlgoChannel.objects.filter(vchannel=vchannel).exclude(
|
||||
algo__code=None).order_by('algo__priority', 'algo__create_time').values_list('algo__code', flat=True))
|
||||
algo__code=None).order_by('-algo__priority', 'algo__create_time').values_list('algo__code', flat=True))
|
||||
area = vchannel.area # 视频所在区域
|
||||
if algo_codes and area: # 如果加载了算法且视频通道绑定区域才继续
|
||||
face_img_o = dhClient.get_full_pic(data['info']['alarmPicture'])
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
|
||||
from threading import Thread
|
||||
from apps.ecm.filters import EventFilterSet
|
||||
from apps.ecm.models import AlgoChannel, Event, EventCate, Remind, NotifySetting
|
||||
from apps.ecm.serializers import (AlgoChannelCreateSerializer, AlgoChannelCreatesSerializer, AlgoChannelSerializer, EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer,
|
||||
from apps.ecm.models import AlgoChannel, Event, EventCate, Eventdo, Remind, NotifySetting
|
||||
from apps.ecm.serializers import (AlgoChannelCreateSerializer, AlgoChannelCreatesSerializer, AlgoChannelSerializer, EventAggSerializer, EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer,
|
||||
EventSerializer, RemindSerializer, NotifySettingsSerializer)
|
||||
from apps.ecm.service import update_remind_read
|
||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||
|
@ -14,6 +14,7 @@ from django.utils import timezone
|
|||
from rest_framework.response import Response
|
||||
from rest_framework.exceptions import PermissionDenied
|
||||
from apps.utils.snowflake import idWorker
|
||||
from django.db.models import Count, F
|
||||
|
||||
|
||||
# Create your views here.
|
||||
|
@ -25,6 +26,7 @@ class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, Custo
|
|||
update_serializer_class = EventCateCreateUpdateSerializer
|
||||
serializer_class = EventCateListSerializer
|
||||
filterset_fields = ['self_algo']
|
||||
ordering = ['-priority', 'create_time']
|
||||
|
||||
|
||||
class AlgoChannelViewSet(CreateModelMixin, DestroyModelMixin, ListModelMixin, CustomGenericViewSet):
|
||||
|
@ -94,6 +96,38 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
|
|||
Thread(target=update_remind_read, args=(obj, request.user), daemon=True).start()
|
||||
return super().retrieve(request, *args, **kwargs)
|
||||
|
||||
@transaction.atomic
|
||||
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
||||
serializer_class=EventAggSerializer)
|
||||
def cate_agg(self, request, pk=None):
|
||||
"""按事件分类聚合
|
||||
|
||||
按事件分类聚合
|
||||
"""
|
||||
slr = EventAggSerializer(data=request.data)
|
||||
slr.is_valid(raise_exception=True)
|
||||
vdata = slr.validated_data
|
||||
ret = {}
|
||||
queryset = Eventdo.objects.all()
|
||||
if vdata.get('start_create', None):
|
||||
queryset = queryset.filter(event__create_time__gte=vdata['start_create'])
|
||||
if vdata.get('end_create', None):
|
||||
queryset = queryset.filter(event__create_time__lte=vdata['end_create'])
|
||||
if vdata.get('is_handled', None):
|
||||
if vdata['is_handled']:
|
||||
queryset = queryset.exclude(event__handle_user=None)
|
||||
else:
|
||||
queryset = queryset.filter(event__handle_user=None)
|
||||
ret['total_count'] = queryset.count()
|
||||
if vdata.get('completed', True):
|
||||
ret['details'] = list(EventCate.objects.order_by('-priority', 'create_time').annotate(cate=F('id'), cate__name=F('name')).values('cate', 'cate__name'))
|
||||
for i in ret['details']:
|
||||
i['count'] = queryset.filter(cate__id=i['cate']).count()
|
||||
else:
|
||||
ret['details'] = list(queryset.order_by('-cate__priority', 'cate__create_time').values(
|
||||
'cate', 'cate__name').annotate(count=Count('cate')))
|
||||
return Response(ret)
|
||||
|
||||
|
||||
class RemindViewSet(ListModelMixin, CustomGenericViewSet):
|
||||
perms_map = {'get': '*'}
|
||||
|
|
Loading…
Reference in New Issue