145 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
| from apps.third.models import TDevice, Tlog
 | |
| from apps.third.serializers import BindAreaSerializer, LabelLocationSerializer, TDeviceSerializer, TlogSerializer
 | |
| from apps.utils.viewsets import CustomGenericViewSet
 | |
| from rest_framework.mixins import ListModelMixin, CreateModelMixin
 | |
| 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 BltViewSet(CreateModelMixin, CustomGenericViewSet):
 | |
|     """定位标签列表
 | |
| 
 | |
|     定位标签列表
 | |
|     """
 | |
|     queryset = TDevice.objects.filter(type=TDevice.DEVICE_BLT)
 | |
|     serializer_class = TDeviceSerializer
 | |
|     select_related_fields = ['employee']
 | |
|     ordering = ['-create_time']
 | |
| 
 | |
| 
 | |
| 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):
 | |
|         """
 | |
|         视频通道列表
 | |
| 
 | |
|         视频通道列表
 | |
|         """
 | |
|         request.data.update({'channelTypeList': ["1"]})
 | |
|         _, res = dhClient.request(**dhapis['channel_list'], json=request.data)
 | |
|         codes = []
 | |
|         if res.get('pageData', None):
 | |
|             for i in res['pageData']:
 | |
|                 codes.append(i['channelCode'])
 | |
|             tds_info = TDeviceSerializer(instance=TDevice.objects.filter(code__in=codes), many=True).data
 | |
|             for x in res['pageData']:
 | |
|                 for y in tds_info:
 | |
|                     if x['channelCode'] == y['code']:
 | |
|                         x['my_info'] = y
 | |
|         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.validated_data
 | |
|         td = TDevice.objects.filter(code=vdata['code']).first()
 | |
|         if td:
 | |
|             td.location = vdata['location']
 | |
|             td.type = vdata['type']
 | |
|             td.area = vdata['area']
 | |
|             td.name = vdata['name']
 | |
|             td.update_by = request.user
 | |
|             td.save()
 | |
|             td.areas.clear()
 | |
|             for i in vdata['areas']:
 | |
|                 td.areas.add(i)
 | |
|         else:
 | |
|             td = TDevice()
 | |
|             td.type = vdata['type']
 | |
|             td.code = vdata['code']
 | |
|             td.location = vdata['location']
 | |
|             td.area = vdata['area']
 | |
|             td.name = vdata['name']
 | |
|             td.create_by = request.user
 | |
|             td.save()
 | |
|             td.areas.clear()
 | |
|             for i in vdata['areas']:
 | |
|                 td.areas.add(i)
 | |
|         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()
 | |
| 
 | |
| 
 | |
| class TlogViewSet(ListModelMixin, CustomGenericViewSet):
 | |
|     queryset = Tlog.objects.all()
 | |
|     serializer_class = TlogSerializer
 |