event cate agg
This commit is contained in:
parent
32b541bda4
commit
afe0c171cf
|
@ -103,7 +103,7 @@ class Event(CommonBModel):
|
||||||
|
|
||||||
class Eventdo(BaseModel):
|
class Eventdo(BaseModel):
|
||||||
cate = models.ForeignKey(EventCate, verbose_name='关联事件种类',
|
cate = models.ForeignKey(EventCate, verbose_name='关联事件种类',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE, related_name='do_cate')
|
||||||
event = models.ForeignKey(Event, verbose_name='关联事件',
|
event = models.ForeignKey(Event, verbose_name='关联事件',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
||||||
|
|
|
@ -128,3 +128,10 @@ class AlgoChannelSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = AlgoChannel
|
model = AlgoChannel
|
||||||
fields = '__all__'
|
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:
|
Args:
|
||||||
event (Event): _description_
|
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
|
v_p, v_num = main_cate.voice_person, main_cate.voice_num
|
||||||
_, event.voice, _ = generate_voice(event.voice_msg, v_p)
|
_, event.voice, _ = generate_voice(event.voice_msg, v_p)
|
||||||
event.save()
|
event.save()
|
||||||
|
@ -224,7 +224,7 @@ def dispatch_dahua_event(data: dict):
|
||||||
if alarm_type in [1001003, 1001000] and vchannel: # 内部人员/或陌生人报警
|
if alarm_type in [1001003, 1001000] and vchannel: # 内部人员/或陌生人报警
|
||||||
# 查看加载的算法
|
# 查看加载的算法
|
||||||
algo_codes = list(AlgoChannel.objects.filter(vchannel=vchannel).exclude(
|
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 # 视频所在区域
|
area = vchannel.area # 视频所在区域
|
||||||
if algo_codes and area: # 如果加载了算法且视频通道绑定区域才继续
|
if algo_codes and area: # 如果加载了算法且视频通道绑定区域才继续
|
||||||
face_img_o = dhClient.get_full_pic(data['info']['alarmPicture'])
|
face_img_o = dhClient.get_full_pic(data['info']['alarmPicture'])
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from apps.ecm.filters import EventFilterSet
|
from apps.ecm.filters import EventFilterSet
|
||||||
from apps.ecm.models import AlgoChannel, Event, EventCate, Remind, NotifySetting
|
from apps.ecm.models import AlgoChannel, Event, EventCate, Eventdo, Remind, NotifySetting
|
||||||
from apps.ecm.serializers import (AlgoChannelCreateSerializer, AlgoChannelCreatesSerializer, AlgoChannelSerializer, EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer,
|
from apps.ecm.serializers import (AlgoChannelCreateSerializer, AlgoChannelCreatesSerializer, AlgoChannelSerializer, EventAggSerializer, EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer,
|
||||||
EventSerializer, RemindSerializer, NotifySettingsSerializer)
|
EventSerializer, RemindSerializer, NotifySettingsSerializer)
|
||||||
from apps.ecm.service import update_remind_read
|
from apps.ecm.service import update_remind_read
|
||||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
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.response import Response
|
||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
from apps.utils.snowflake import idWorker
|
from apps.utils.snowflake import idWorker
|
||||||
|
from django.db.models import Count, F
|
||||||
|
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
@ -25,6 +26,7 @@ class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, Custo
|
||||||
update_serializer_class = EventCateCreateUpdateSerializer
|
update_serializer_class = EventCateCreateUpdateSerializer
|
||||||
serializer_class = EventCateListSerializer
|
serializer_class = EventCateListSerializer
|
||||||
filterset_fields = ['self_algo']
|
filterset_fields = ['self_algo']
|
||||||
|
ordering = ['-priority', 'create_time']
|
||||||
|
|
||||||
|
|
||||||
class AlgoChannelViewSet(CreateModelMixin, DestroyModelMixin, ListModelMixin, CustomGenericViewSet):
|
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()
|
Thread(target=update_remind_read, args=(obj, request.user), daemon=True).start()
|
||||||
return super().retrieve(request, *args, **kwargs)
|
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):
|
class RemindViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
perms_map = {'get': '*'}
|
perms_map = {'get': '*'}
|
||||||
|
|
Loading…
Reference in New Issue