views.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from rest_framework.views import APIView
  2. from rest_framework.generics import GenericAPIView
  3. from rest_framework.response import Response
  4. import time
  5. from .serializers import SearchEquipSerializer,DeviceListSerializer,DeviceDetailSerializer
  6. from utils.utils import get_equip_list
  7. from utils.JWTAuthentication_diy import MyJWTAuthentication
  8. from utils.permissions import ModulePermission, DeviceDetailPermission
  9. from utils.MyRateThrottle import DeviceListRateThrottle,DeviceDetailRateThrottle
  10. from .models import Device, QXZData
  11. # Create your views here.
  12. class SearchEquip(APIView):
  13. def post(self, request):
  14. serializer = SearchEquipSerializer(data=request.data)
  15. serializer.is_valid(raise_exception=True)
  16. request_data = serializer.validated_data
  17. data = get_equip_list(
  18. d_id=request_data.get("device_id"),
  19. isfullId=request_data.get("isfullId")
  20. )
  21. return Response(data)
  22. class ReceiveQXZ(APIView):
  23. def post(self,request):
  24. data = request.data
  25. if data.get("cmd") == "offline":
  26. imei = data["ext"]["imei"]
  27. try:
  28. device = Device.objects.get(device_id=imei)
  29. device.upl_time = int(time.time())
  30. device.is_online = 0
  31. device.save()
  32. except Exception as e:
  33. print("离线数据保存异常",e)
  34. elif "terminalStatus" in data:
  35. imei = data["StationID"]
  36. status_data = data["terminalStatus"]
  37. if Device.objects.filter(device_id=imei).exists():
  38. device = Device.objects.get(device_id=imei)
  39. else:
  40. device = Device.objects.create(
  41. device_id=imei,
  42. device_type=1
  43. )
  44. if status_data.get("VOLT"):
  45. device.volt = status_data.get("VOLT")
  46. if status_data.get("RSSI"):
  47. device.rssi = status_data.get("RSSI")
  48. if status_data.get("ICCID"):
  49. device.iccid = status_data.get("ICCID")
  50. if status_data.get("longitude"):
  51. device.lng = status_data.get("longitude")
  52. if status_data.get("latitude"):
  53. device.lat = status_data.get("latitude")
  54. if status_data.get("Version"):
  55. device.version = status_data.get("Version")
  56. device.is_online = 1
  57. device.upl_time = int(time.time())
  58. device.save()
  59. elif 'data' in data:
  60. imei = data["StationID"]
  61. save_data = data["data"]
  62. if Device.objects.filter(device_id=imei).exists():
  63. device = Device.objects.get(device_id=imei)
  64. else:
  65. device = Device.objects.create(
  66. device_id=imei,
  67. device_type=1
  68. )
  69. device.is_online = 1
  70. device.upl_time = int(time.time())
  71. device.save()
  72. QXZData.objects.create(
  73. device_id=device,
  74. device_data=save_data,
  75. add_time=int(time.time())
  76. )
  77. return Response("已接收保存")
  78. class DeviceList(GenericAPIView):
  79. authentication_classes = [MyJWTAuthentication]
  80. permission_classes = [ModulePermission]
  81. throttle_classes = [DeviceListRateThrottle]
  82. serializer_class = DeviceListSerializer
  83. queryset = Device.objects.all()
  84. def post(self,request):
  85. uid = int(request.user.get("uid"))
  86. device_queryset = self.get_queryset().filter(owner=uid)
  87. serializer = self.get_serializer(instance=device_queryset, many=True)
  88. return Response(serializer.data)
  89. class DeviceDetail(GenericAPIView):
  90. authentication_classes = [MyJWTAuthentication]
  91. permission_classes = [DeviceDetailPermission]
  92. throttle_classes = [DeviceDetailRateThrottle]
  93. serializer_class = DeviceDetailSerializer
  94. queryset = QXZData.objects.all().order_by("-id")
  95. def post(self, request):
  96. deviceId = request.data.get("deviceId")
  97. start_time = int(request.data.get("start_time"))
  98. device_queryset = self.get_queryset().filter(device_id_id=deviceId,add_time__gt=start_time)
  99. serializer = self.get_serializer(instance=device_queryset, many=True)
  100. return Response(serializer.data)