diff --git a/apps/ecm/service.py b/apps/ecm/service.py index faa7865d..f4ba9c93 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -26,6 +26,12 @@ from apps.vm.models import Visit requests.packages.urllib3.disable_warnings() +def update_remind_read(event: Event, user: User): + qs = Remind.objects.filter(event=event, recipient=user, is_read=False) + if qs.exists(): + qs.update(is_read=True) + + def get_area_info_from_cache(target: str, cache: list): """从区域信息缓存里匹配到所在区域 @@ -46,7 +52,7 @@ def save_dahua_pic(pic_url: str): """保存大华报警图片到本地 返回本地路径 """ - file_name = pic_url.split('/')[-1].split('?')[-1] + file_name = pic_url.split('/')[-1].split('?')[0] res = requests.get(url=pic_url, verify=False) path = '/media/' + timezone.now().strftime('%Y/%m/%d/') full_path = settings.BASE_DIR + path diff --git a/apps/ecm/views.py b/apps/ecm/views.py index 1927a13b..66ed6a32 100644 --- a/apps/ecm/views.py +++ b/apps/ecm/views.py @@ -1,7 +1,9 @@ +from threading import Thread from apps.ecm.models import AlgoChannel, Event, EventCate, Remind, NotifySetting from apps.ecm.serializers import (AlgoChannelCreateSerializer, AlgoChannelCreatesSerializer, AlgoChannelSerializer, EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer, EventSerializer, RemindSerializer, NotifySettingsSerializer) +from apps.ecm.service import update_remind_read from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from rest_framework.mixins import UpdateModelMixin, ListModelMixin, RetrieveModelMixin, CreateModelMixin, DestroyModelMixin from django.db import transaction @@ -9,6 +11,7 @@ from rest_framework.decorators import action from rest_framework import serializers from django.utils import timezone from rest_framework.response import Response +from rest_framework.exceptions import PermissionDenied from apps.utils.snowflake import idWorker @@ -70,6 +73,9 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): 处理事件 """ obj = self.get_object() + # 判断当前用户有无处理权限 + if (not Remind.objects.filter(event=obj, recipient=request.user, can_handle=True).exists()) and (not request.user.is_superuser): + raise PermissionDenied('您无权处理该事件') data = request.data obj.mark = data.get('mark') obj.handle_desc = data.get('handle_desc', '') @@ -78,6 +84,11 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): obj.save() return Response() + def retrieve(self, request, *args, **kwargs): + obj = self.get_object() + Thread(target=update_remind_read, args=(obj, request.user), daemon=True).start() + return super().retrieve(request, *args, **kwargs) + class RemindViewSet(ListModelMixin, CustomGenericViewSet): perms_map = {'get': 'envent:view'} @@ -102,3 +113,20 @@ class RemindViewSet(ListModelMixin, CustomGenericViewSet): serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) + + +# class MyRemindViewSet(ListModelMixin, CustomGenericViewSet): +# perms_map = {'get': '*'} +# serializer_class = RemindSerializer +# select_related_fields = ['recipient', 'event'] +# prefetch_related_fields = ['event__cates'] + +# def get_queryset(self): +# return Remind.objects.filter(recipient=self.request.user) + +# @action(methods=['post'], detail=True, perms_map={'post': '*'}) +# def label_read(self, request, *args, **kwargs): +# """标记已读 + +# 标记已读 +# """