104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.4 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=False, perms_map={'post': 'tdevice: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': '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()
 |