增加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()
create_serializer_class = AccessCreateSerializer
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)
always_on = models.BooleanField("始终开启", default=True)
class Meta:
unique_together = ('algo', 'vchannel')
class NotifySetting(CommonAModel):
"""

View File

@ -1,5 +1,7 @@
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 rest_framework import serializers
from apps.system.serializers import UserSimpleSerializer
@ -61,4 +63,27 @@ class RemindSerializer(CustomModelSerializer):
class Meta:
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 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('notify_setting', NotifySettingViewSet, basename='notify_setting')
router.register('remind', RemindViewSet, basename='remind')
router.register('algo_vchannel', AlgoChannelViewSet, basename='algo_vchannel')
urlpatterns = [
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.serializers import (EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer,
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.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 rest_framework.decorators import action
from rest_framework import serializers
@ -13,7 +13,7 @@ from rest_framework.response import Response
# Create your views here.
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()
list_serializer_class = EventCateListSerializer
create_serializer_class = EventCateCreateUpdateSerializer
@ -22,6 +22,30 @@ class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, Custo
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):
queryset = NotifySetting.objects.all()
serializer_class = NotifySettingsSerializer
@ -70,4 +94,3 @@ class RemindViewSet(ListModelMixin, CustomGenericViewSet):
serializer = self.get_serializer(queryset, many=True)
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)
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,
null=False, blank=True)
area = models.ForeignKey(Area, on_delete=models.CASCADE,

View File

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

View File

@ -11,10 +11,15 @@ from apps.am.models import Area
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': '*'},
serializer_class=Serializer)
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)
codes = []
if res.get('pageData', None):