68 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| from apps.am.models import Access, Area
 | |
| from apps.am.serializers import AccessCreateSerializer, AccessSerializer, AreaCreateUpdateSerializer, AreaSerializer
 | |
| from apps.am.tasks import cache_areas_info
 | |
| from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
 | |
| from django.db import transaction
 | |
| from rest_framework.decorators import action
 | |
| from rest_framework import serializers
 | |
| from apps.third.xunxi import xxClient
 | |
| from apps.third.tapis import xxapis
 | |
| from rest_framework.response import Response
 | |
| from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin
 | |
| 
 | |
| 
 | |
| # Create your views here.
 | |
| class AreaViewSet(CustomModelViewSet):
 | |
|     queryset = Area.objects.all().order_by('number')
 | |
|     create_serializer_class = AreaCreateUpdateSerializer
 | |
|     update_serializer_class = AreaCreateUpdateSerializer
 | |
|     serializer_class = AreaSerializer
 | |
|     ordering = ['number']
 | |
|     search_fields = ['number', 'name']
 | |
| 
 | |
|     def create(self, request, *args, **kwargs):
 | |
|         ret = super().create(request, *args, **kwargs)
 | |
|         cache_areas_info.delay()
 | |
|         return ret
 | |
| 
 | |
|     def update(self, request, *args, **kwargs):
 | |
|         ret = super().update(request, *args, **kwargs)
 | |
|         cache_areas_info.delay()
 | |
|         return ret
 | |
| 
 | |
|     @transaction.atomic
 | |
|     @action(methods=['post'], detail=True, perms_map={'post': 'area.bind_rail'},
 | |
|             serializer_class=serializers.Serializer)
 | |
|     def bind_rail(self, request, pk=None):
 | |
|         """
 | |
|         绑定围栏
 | |
| 
 | |
|         绑定围栏
 | |
|         """
 | |
|         data = request.data
 | |
|         obj = self.get_object()
 | |
|         third_info = obj.third_info
 | |
|         if 'xx_rail' in third_info:
 | |
|             data['uuid'] = third_info['xx_rail']['id']
 | |
|             _, res = xxClient.request(**xxapis['rail_update'], json={'rail': data})
 | |
|             third_info['xx_rail']['detail'] = data
 | |
|             obj.third_info = third_info
 | |
|             obj.save()
 | |
|         else:
 | |
|             _, res = xxClient.request(**xxapis['rail_create'], json={'rail': data})
 | |
|             rail_info = {'id': res, 'detail': data}
 | |
|             third_info['xx_rail'] = rail_info
 | |
|             obj.third_info = third_info
 | |
|             obj.save()
 | |
|         cache_areas_info.delay()
 | |
|         return Response()
 | |
| 
 | |
| 
 | |
| class AccessViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet):
 | |
|     perms_map = {'get': '*', 'post': 'access.create', 'delete': 'access.delete'}
 | |
|     queryset = Access.objects.all()
 | |
|     create_serializer_class = AccessCreateSerializer
 | |
|     serializer_class = AccessSerializer
 | |
|     filterset_fields = ['area', 'type', 'obj_cate', 'post', 'dept', 'employee']
 | |
|     select_related_fields = ['area', 'post', 'dept', 'employee']
 |