89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
from apps.third.models import TDevice
|
|
from apps.third.serializers import BindAreaSerializer, LabelLocationSerializer
|
|
from apps.utils.viewsets import CustomGenericViewSet
|
|
from rest_framework.mixins import ListModelMixin
|
|
from apps.third.clients import xxClient, dhClient, spClient
|
|
from apps.third.tapis import xxapis, dhapis, spapis
|
|
from rest_framework.response import Response
|
|
from rest_framework.serializers import Serializer
|
|
from rest_framework.decorators import action
|
|
from apps.am.models import Area
|
|
from rest_framework.views import APIView
|
|
|
|
|
|
class TDeviceViewSet(CustomGenericViewSet):
|
|
"""
|
|
三方设备接口
|
|
"""
|
|
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
|
serializer_class=Serializer)
|
|
def vchannel(self, request):
|
|
"""
|
|
视频通道列表
|
|
|
|
视频通道列表
|
|
"""
|
|
request.data.update({'channelTypeList': ["1"]})
|
|
_, res = dhClient.request(**dhapis['channel_list'], json=request.data)
|
|
return Response(res)
|
|
|
|
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
|
serializer_class=Serializer)
|
|
def speaker(self, request):
|
|
"""
|
|
喇叭列表
|
|
|
|
喇叭列表
|
|
"""
|
|
_, res = spClient.request(**spapis['device_list'], params=request.data)
|
|
return Response(res)
|
|
|
|
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
|
serializer_class=Serializer)
|
|
def dchannel(self, request):
|
|
"""
|
|
闸机通道列表
|
|
|
|
闸机通道列表
|
|
"""
|
|
request.data.update({'channelTypeList': ["7"]})
|
|
_, res = dhClient.request(**dhapis['channel_list'], json=request.data)
|
|
return Response(res)
|
|
|
|
@action(methods=['post'], detail=True, perms_map={'post': 'tdevice:label_location'},
|
|
serializer_class=LabelLocationSerializer, lookup_field='code')
|
|
def label_location(self, request):
|
|
"""
|
|
标注坐标位置
|
|
|
|
标注坐标位置
|
|
"""
|
|
return Response()
|
|
|
|
@action(methods=['post'], detail=False, perms_map={'post': 'tdevice:bind_area'},
|
|
serializer_class=BindAreaSerializer)
|
|
def bind_area(self, request):
|
|
"""
|
|
绑定所在区域
|
|
|
|
绑定所在区域
|
|
"""
|
|
serializer = self.get_serializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
vdata = serializer.vdata
|
|
area = Area.objects.get(id=vdata['area'])
|
|
for i in vdata['codes']:
|
|
td = TDevice.objects.filter(code=i['code']).first()
|
|
if td:
|
|
td.area = area
|
|
td.update_by = request.user
|
|
td.save()
|
|
else:
|
|
td = TDevice()
|
|
td.type = TDevice.DEVICE_VCHANNEL
|
|
td.code = i['code']
|
|
td.area = area
|
|
td.create_by = request.user
|
|
td.save()
|
|
return Response()
|