factory/apps/third/views_d.py

117 lines
3.5 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
from apps.third.tapis import xxapis, dhapis
from rest_framework.response import Response
from rest_framework.serializers import Serializer
from rest_framework.decorators import action
from apps.am.models import Area
# class BlgViewSet(ListModelMixin, CustomGenericViewSet):
# """
# 定位基站接口
# """
# perms_map = {'get': '*'} # 权限标识
# serializer_class = Serializer
# def list(self, request, *args, **kwargs):
# """
# 定位基站列表
# 定位基站列表
# """
# data = request.data
# _, res = xxClient.request(**xxapis['blg_list'], json=data)
# return Response(res)
# class IbeaconViewSet(CustomGenericViewSet):
# """
# 信标接口
# """
# perms_map = {'get': '*'} # 权限标识
# serializer_class = Serializer
# def list(self, request, *args, **kwargs):
# """
# 信标列表
# 定位基站列表
# """
# data = request.data
# _, res = xxClient.request(**xxapis['blg_list'], json=data)
# return Response(res)
class DChannelViewSet(CustomGenericViewSet):
"""
闸机接口
"""
pass
class VChannelViewSet(CustomGenericViewSet):
"""
视频接口
"""
@action(methods=['post'], detail=False, perms_map={'post': '*'},
serializer_class=Serializer)
def page(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': 'dchannel:label_location'},
serializer_class=LabelLocationSerializer)
def label_location(self, request):
"""
标注坐标位置
标注坐标位置
"""
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
vdata = serializer.vdata
td = TDevice.objects.filter(code=vdata['code']).first()
if td:
td.location = vdata['location']
td.update_by = request.user
td.save()
else:
td = TDevice()
td.type = TDevice.DEVICE_VCHANNEL
td.code = vdata['code']
td.location = vdata['location']
td.create_by = request.user
td.save()
return Response()
@action(methods=['post'], detail=False, perms_map={'post': 'dchannel: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()