views.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. wheres = {
  28. "device_type_id":5,
  29. '$or': [
  30. {'owner_uid': uid},
  31. {'user_dealer': uid}
  32. ]
  33. }
  34. project = {
  35. 'device_id': '$device_id',
  36. 'uptime': '$uptime',
  37. 'device_status': '$device_status',
  38. 'lng': '$lng',
  39. 'lat': '$lat'
  40. }
  41. m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
  42. data = m.find_many(wheres=wheres, options=project)
  43. if data:
  44. total_counts = data.count()
  45. else:
  46. total_counts = 0
  47. result = {"total_counts":total_counts,"items":[]}
  48. qxz_list_cache = []
  49. for item in data:
  50. result["items"].append(item)
  51. qxz_list_cache.append(item["device_id"])
  52. default_cache.set(str(uid)+"_qxz_list", qxz_list_cache,60*5)
  53. return Response(result)
  54. class QxzDeviceDetailView(APIView):
  55. authentication_classes = [APIAuthentication]
  56. permission_classes = [QXZDeviceDetailPermission]
  57. throttle_classes = [QxzDeviceDetailRateThrottle]
  58. def get(self, request, *args, **kwargs):
  59. serializer = QxzDeviceDetailSerializer(data=request.query_params)
  60. serializer.is_valid(raise_exception=True)
  61. request_data = serializer.validated_data
  62. start_time, device_id = request_data["start_timestamp"], request_data["device_id"]
  63. conf_wheres = {
  64. "device_id":device_id,
  65. }
  66. conf_m = MongoDBTools(db_name='smartfarming', table_name='sa_qxz_conf')
  67. conf_data = conf_m.find_one(wheres=conf_wheres)
  68. if conf_data:
  69. conf_data.pop("id")
  70. conf_data.pop("device_id")
  71. conf_data.pop("uptime")
  72. conf_data = dict(sorted(conf_data.items(), key=lambda e:int(e[0].split("e")[1])))
  73. result = {"conf":conf_data,"items":[]}
  74. data_m = MongoDBTools(db_name='smartfarming', table_name='sa_qxz_data')
  75. data_wheres = {
  76. "device_id": device_id,
  77. "uptime": {"$gt":start_time}
  78. }
  79. data = data_m.find_many(wheres=data_wheres)
  80. for item in data:
  81. item.pop("id")
  82. item.pop("device_id")
  83. uptime = item.pop("uptime")
  84. item = dict(sorted(item.items(), key=lambda e:int(e[0].split("e")[1])))
  85. item["uptime"] = uptime
  86. result["items"].append(item)
  87. return Response(result)