增加access筛选条件

This commit is contained in:
曹前明 2022-07-01 14:28:46 +08:00
parent 46bde26f48
commit 90d42d4ad5
10 changed files with 111 additions and 11 deletions

View File

@ -48,3 +48,4 @@ class AccessViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomG
queryset = Access.objects.all() queryset = Access.objects.all()
create_serializer_class = AccessCreateSerializer create_serializer_class = AccessCreateSerializer
serializer_class = AccessSerializer serializer_class = AccessSerializer
filterset_fields = ['area', 'type', 'obj_cate', 'post', 'dept']

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-07-01 06:19
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('third', '0002_alter_tdevice_name'),
('ecm', '0002_initial'),
]
operations = [
migrations.AlterUniqueTogether(
name='algochannel',
unique_together={('algo', 'vchannel')},
),
]

View File

@ -38,6 +38,9 @@ class AlgoChannel(BaseModel):
vchannel = models.ForeignKey(TDevice, verbose_name='视频通道', on_delete=models.CASCADE) vchannel = models.ForeignKey(TDevice, verbose_name='视频通道', on_delete=models.CASCADE)
always_on = models.BooleanField("始终开启", default=True) always_on = models.BooleanField("始终开启", default=True)
class Meta:
unique_together = ('algo', 'vchannel')
class NotifySetting(CommonAModel): class NotifySetting(CommonAModel):
""" """

View File

@ -1,5 +1,7 @@
from apps.am.serializers import AreaSimpleSerializer from apps.am.serializers import AreaSimpleSerializer
from apps.ecm.models import EventCate, Remind, NotifySetting, Event from apps.ecm.models import AlgoChannel, EventCate, Remind, NotifySetting, Event
from apps.third.serializers import TDeviceSimpleSerializer
from apps.third.models import TDevice
from apps.utils.serializers import CustomModelSerializer from apps.utils.serializers import CustomModelSerializer
from rest_framework import serializers from rest_framework import serializers
from apps.system.serializers import UserSimpleSerializer from apps.system.serializers import UserSimpleSerializer
@ -61,4 +63,27 @@ class RemindSerializer(CustomModelSerializer):
class Meta: class Meta:
model = Remind model = Remind
fields = '__all__' fields = '__all__'
class AlgoChannelCreateSerializer(CustomModelSerializer):
class Meta:
model = AlgoChannel
fields = ['algo', 'vchannel', 'always_on']
class AlgoChannelCreatesSerializer(CustomModelSerializer):
vchannels = serializers.PrimaryKeyRelatedField(queryset=TDevice.objects.all(), many=True, label="视频通道列表")
class Meta:
model = AlgoChannel
fields = ['algo', 'vchannels']
class AlgoChannelSerializer(CustomModelSerializer):
algo_ = EventCateSimpleSerializer(source='algo', read_only=True)
vchannel_ = TDeviceSimpleSerializer(source='vchannel', read_only=True)
class Meta:
model = AlgoChannel
fields = '__all__'

View File

@ -1,5 +1,5 @@
from apps.ecm.views import EventCateViewSet, NotifySettingViewSet, EventViewSet, RemindViewSet from apps.ecm.views import AlgoChannelViewSet, EventCateViewSet, NotifySettingViewSet, EventViewSet, RemindViewSet
from django.urls import path, include from django.urls import path, include
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
@ -11,6 +11,7 @@ router.register('event_cate', EventCateViewSet, basename='event_cate')
router.register('event', EventViewSet, basename='event') router.register('event', EventViewSet, basename='event')
router.register('notify_setting', NotifySettingViewSet, basename='notify_setting') router.register('notify_setting', NotifySettingViewSet, basename='notify_setting')
router.register('remind', RemindViewSet, basename='remind') router.register('remind', RemindViewSet, basename='remind')
router.register('algo_vchannel', AlgoChannelViewSet, basename='algo_vchannel')
urlpatterns = [ urlpatterns = [
path(API_BASE_URL, include(router.urls)), path(API_BASE_URL, include(router.urls)),
] ]

View File

@ -1,9 +1,9 @@
from apps.ecm.models import Event, EventCate, Remind, NotifySetting from apps.ecm.models import AlgoChannel, Event, EventCate, Remind, NotifySetting
from apps.ecm.serializers import (EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer, from apps.ecm.serializers import (AlgoChannelCreateSerializer, AlgoChannelCreatesSerializer, AlgoChannelSerializer, EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer,
EventSerializer, RemindSerializer, NotifySettingsSerializer) EventSerializer, RemindSerializer, NotifySettingsSerializer)
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from rest_framework.mixins import UpdateModelMixin, ListModelMixin, RetrieveModelMixin, CreateModelMixin from rest_framework.mixins import UpdateModelMixin, ListModelMixin, RetrieveModelMixin, CreateModelMixin, DestroyModelMixin
from django.db import transaction from django.db import transaction
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework import serializers from rest_framework import serializers
@ -13,7 +13,7 @@ from rest_framework.response import Response
# Create your views here. # Create your views here.
class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, CustomGenericViewSet): class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, CustomGenericViewSet):
perms_map = {'put': 'event_cate:update', 'post': 'event_cate:create'} perms_map = {'get': '*', 'put': 'event_cate:update', 'post': 'event_cate:create'}
queryset = EventCate.objects.all() queryset = EventCate.objects.all()
list_serializer_class = EventCateListSerializer list_serializer_class = EventCateListSerializer
create_serializer_class = EventCateCreateUpdateSerializer create_serializer_class = EventCateCreateUpdateSerializer
@ -22,6 +22,30 @@ class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, Custo
filterset_fields = ['self_algo'] filterset_fields = ['self_algo']
class AlgoChannelViewSet(CreateModelMixin, DestroyModelMixin, ListModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'post': 'event_cate:update', 'delete': 'event_cate:create'}
queryset = AlgoChannel.objects.all()
create_serializer_class = AlgoChannelCreateSerializer
serializer_class = AlgoChannelSerializer
@transaction.atomic
@action(methods=['post'], detail=False, perms_map={'post': 'event_cate:update'},
serializer_class=AlgoChannelCreatesSerializer)
def creates(self, request, pk=None):
"""批量添加摄像头
批量添加摄像头
"""
serializer = AlgoChannelCreatesSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
vdata = serializer.validated_data
acs = []
for i in vdata['vchannels']:
acs.append(AlgoChannel(algo=vdata['algo'], vchannel=i))
AlgoChannel.objects.bulk_create(objs=acs, ignore_conflicts=False)
return Response()
class NotifySettingViewSet(CustomModelViewSet): class NotifySettingViewSet(CustomModelViewSet):
queryset = NotifySetting.objects.all() queryset = NotifySetting.objects.all()
serializer_class = NotifySettingsSerializer serializer_class = NotifySettingsSerializer
@ -70,4 +94,3 @@ class RemindViewSet(ListModelMixin, CustomGenericViewSet):
serializer = self.get_serializer(queryset, many=True) serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data) return Response(serializer.data)

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-07-01 05:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('third', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='tdevice',
name='name',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='名称'),
),
]

View File

@ -32,7 +32,7 @@ class TDevice(BaseModel):
) )
type = models.PositiveSmallIntegerField('设备类型', choices=DEVICE_CHOICE) type = models.PositiveSmallIntegerField('设备类型', choices=DEVICE_CHOICE)
code = models.CharField('设备唯一标识', max_length=50, db_index=True) code = models.CharField('设备唯一标识', max_length=50, db_index=True)
name = models.CharField('设备名称', max_length=50) name = models.CharField('名称', max_length=50, null=True, blank=True)
location = models.JSONField('位置信息', default=dict, location = models.JSONField('位置信息', default=dict,
null=False, blank=True) null=False, blank=True)
area = models.ForeignKey(Area, on_delete=models.CASCADE, area = models.ForeignKey(Area, on_delete=models.CASCADE,

View File

@ -15,6 +15,12 @@ class TDeviceSerializer(CustomModelSerializer):
fields = '__all__' fields = '__all__'
class TDeviceSimpleSerializer(CustomModelSerializer):
class Meta:
model = TDevice
fields = ['id', 'name', 'code']
class RequestCommonSerializer(serializers.Serializer): class RequestCommonSerializer(serializers.Serializer):
method_choice = ( method_choice = (
('post', 'post'), ('post', 'post'),

View File

@ -11,10 +11,15 @@ from apps.am.models import Area
from rest_framework.views import APIView from rest_framework.views import APIView
class TDeviceViewSet(CustomGenericViewSet): class TDeviceViewSet(ListModelMixin, CustomGenericViewSet):
""" """
三方设备接口 三方设备接口
""" """
queryset = TDevice.objects.all()
serializer_class = TDeviceSerializer
ordering = ['code', '-create_time']
filterset_fields = ['type']
@action(methods=['post'], detail=False, perms_map={'post': '*'}, @action(methods=['post'], detail=False, perms_map={'post': '*'},
serializer_class=Serializer) serializer_class=Serializer)
def vchannel(self, request): def vchannel(self, request):
@ -23,7 +28,7 @@ class TDeviceViewSet(CustomGenericViewSet):
视频通道列表 视频通道列表
""" """
request.data.update({'channelTypeList': ["1", "2", "3"]}) request.data.update({'channelTypeList': ["1"]})
_, res = dhClient.request(**dhapis['channel_list'], json=request.data) _, res = dhClient.request(**dhapis['channel_list'], json=request.data)
codes = [] codes = []
if res.get('pageData', None): if res.get('pageData', None):