views.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from rest_framework.views import APIView
  2. from rest_framework.response import Response
  3. from django.core.cache import cache as default_cache
  4. from .serializers import SearchEquipSerializer, QxzDeviceDetailSerializer
  5. from utils.JWTAuthentication_diy import APIAuthentication
  6. from utils.permissions import QXZDeviceDetailPermission
  7. from utils.MyRateThrottle import QxzDeviceListRateThrottle, QxzDeviceDetailRateThrottle
  8. from utils.utils import get_equip_list
  9. from utils.db_utils import MongoDBTools
  10. # Create your views here.
  11. class SearchEquip(APIView):
  12. def post(self, request):
  13. serializer = SearchEquipSerializer(data=request.data)
  14. serializer.is_valid(raise_exception=True)
  15. request_data = serializer.validated_data
  16. data = get_equip_list(
  17. d_id=request_data.get("device_id"),
  18. isfullId=request_data.get("isfullId")
  19. )
  20. return Response(data)
  21. class QxzDeviceListView(APIView):
  22. authentication_classes = [APIAuthentication]
  23. throttle_classes = [QxzDeviceListRateThrottle]
  24. def get(self, request, *args, **kwargs):
  25. """获取气象站设备列表接口"""
  26. uid = request.user
  27. # uid = 896
  28. wheres = {
  29. "device_type_id":5,
  30. '$or': [
  31. {'owner_uid': uid},
  32. {'user_dealer': uid}
  33. ]
  34. }
  35. project = {
  36. 'device_id': '$device_id',
  37. 'uptime': '$uptime',
  38. 'device_status': '$device_status',
  39. 'lng': '$lng',
  40. 'lat': '$lat'
  41. }
  42. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  43. data = m.find_many(wheres=wheres, options=project)
  44. if data:
  45. total_counts = data.count()
  46. else:
  47. total_counts = 0
  48. result = {"total_counts":total_counts,"items":[]}
  49. qxz_list_cache = []
  50. for item in data:
  51. result["items"].append(item)
  52. qxz_list_cache.append(item["device_id"])
  53. default_cache.set(str(uid)+"_qxz_list", qxz_list_cache,60*5)
  54. return Response(result)
  55. class QxzDeviceDetailView(APIView):
  56. authentication_classes = [APIAuthentication]
  57. permission_classes = [QXZDeviceDetailPermission]
  58. throttle_classes = [QxzDeviceDetailRateThrottle]
  59. def get(self, request, *args, **kwargs):
  60. serializer = QxzDeviceDetailSerializer(data=request.query_params)
  61. serializer.is_valid(raise_exception=True)
  62. request_data = serializer.validated_data
  63. start_time, device_id = request_data["start_timestamp"], request_data["device_id"]
  64. conf_wheres = {
  65. "device_id":device_id,
  66. }
  67. conf_m = MongoDBTools(db_name='smartfarming', table_name='sa_qxz_conf')
  68. conf_data = conf_m.find_one(wheres=conf_wheres)
  69. if conf_data:
  70. conf_data.pop("id")
  71. conf_data.pop("device_id")
  72. conf_data.pop("uptime")
  73. conf_data = dict(sorted(conf_data.items(), key=lambda e:int(e[0].split("e")[1])))
  74. result = {"conf":conf_data,"items":[]}
  75. data_m = MongoDBTools(db_name='smartfarming', table_name='sa_qxz_data')
  76. data_wheres = {
  77. "device_id": device_id,
  78. "uptime": {"$gt":start_time}
  79. }
  80. data = data_m.find_many(wheres=data_wheres)
  81. for item in data:
  82. item.pop("id")
  83. item.pop("device_id")
  84. uptime = item.pop("uptime")
  85. item = dict(sorted(item.items(), key=lambda e:int(e[0].split("e")[1])))
  86. item["uptime"] = uptime
  87. result["items"].append(item)
  88. return Response(result)