from rest_framework.views import APIView from rest_framework.generics import GenericAPIView from rest_framework.response import Response import time from .serializers import SearchEquipSerializer, DeviceListSerializer, DeviceDetailSerializer from utils.utils import get_equip_list from utils.JWTAuthentication_diy import MyJWTAuthentication from utils.permissions import ModulePermission, DeviceDetailPermission from utils.MyRateThrottle import DeviceListRateThrottle, DeviceDetailRateThrottle from .models import Device, QXZData # Create your views here. class SearchEquip(APIView): def post(self, request): serializer = SearchEquipSerializer(data=request.data) serializer.is_valid(raise_exception=True) request_data = serializer.validated_data data = get_equip_list( d_id=request_data.get("device_id"), isfullId=request_data.get("isfullId") ) return Response(data) class ReceiveQXZ(APIView): def post(self, request): data = request.data if data.get("cmd") == "offline": imei = data["ext"]["imei"] try: device = Device.objects.get(device_id=imei) device.upl_time = int(time.time()) device.is_online = 0 device.save() except Exception as e: print("离线数据保存异常", e) elif "terminalStatus" in data: imei = data["StationID"] status_data = data["terminalStatus"] if Device.objects.filter(device_id=imei).exists(): device = Device.objects.get(device_id=imei) else: device = Device.objects.create( device_id=imei, device_type=1 ) if status_data.get("VOLT"): device.volt = status_data.get("VOLT") if status_data.get("RSSI"): device.rssi = status_data.get("RSSI") if status_data.get("ICCID"): device.iccid = status_data.get("ICCID") if status_data.get("longitude"): device.lng = status_data.get("longitude") if status_data.get("latitude"): device.lat = status_data.get("latitude") if status_data.get("Version"): device.version = status_data.get("Version") device.is_online = 1 device.upl_time = int(time.time()) device.save() elif 'data' in data: imei = data["StationID"] save_data = data["data"] if Device.objects.filter(device_id=imei).exists(): device = Device.objects.get(device_id=imei) else: device = Device.objects.create( device_id=imei, device_type=1 ) device.is_online = 1 device.upl_time = int(time.time()) device.save() QXZData.objects.create( device_id=device, device_data=save_data, add_time=int(time.time()) ) return Response("已接收保存") class DeviceList(GenericAPIView): authentication_classes = [MyJWTAuthentication] permission_classes = [ModulePermission] throttle_classes = [DeviceListRateThrottle] serializer_class = DeviceListSerializer queryset = Device.objects.all() def post(self, request): uid = int(request.user.get("uid")) device_queryset = self.get_queryset().filter(owner=uid) serializer = self.get_serializer(instance=device_queryset, many=True) return Response(serializer.data) class DeviceDetail(GenericAPIView): authentication_classes = [MyJWTAuthentication] permission_classes = [DeviceDetailPermission] throttle_classes = [DeviceDetailRateThrottle] serializer_class = DeviceDetailSerializer queryset = QXZData.objects.all().order_by("-id") def post(self, request): deviceId = request.data.get("device_id") start_time = int(request.data.get("start_time")) device_queryset = self.get_queryset().filter(device_id_id=deviceId, add_time__gt=start_time) serializer = self.get_serializer(instance=device_queryset, many=True) return Response(serializer.data)