| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- from rest_framework.views import APIView
- from rest_framework.response import Response
- from django.core.cache import cache as default_cache
- from .serializers import SearchEquipSerializer, QxzDeviceDetailSerializer
- from utils.JWTAuthentication_diy import APIAuthentication
- from utils.permissions import QXZDeviceDetailPermission
- from utils.MyRateThrottle import QxzDeviceListRateThrottle, QxzDeviceDetailRateThrottle
- from utils.utils import get_equip_list
- from utils.db_utils import MongoDBTools
- # 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 QxzDeviceListView(APIView):
- authentication_classes = APIAuthentication
- throttle_classes = [QxzDeviceListRateThrottle]
- def get(self, request, *args, **kwargs):
- """获取气象站设备列表接口"""
- uid = request.user
- # uid = 896
-
- wheres = {
- "device_type_id":5,
- '$or': [
- {'owner_uid': uid},
- {'user_dealer': uid}
- ]
- }
- project = {
- 'device_id': '$device_id',
- 'uptime': '$uptime',
- 'device_status': '$device_status',
- 'lng': '$lng',
- 'lat': '$lat'
- }
- m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
- data = m.find_many(wheres=wheres, options=project)
- if data:
- total_counts = data.count()
- else:
- total_counts = 0
- result = {"total_counts":total_counts,"items":[]}
- qxz_list_cache = []
- for item in data:
- result["items"].append(item)
- qxz_list_cache.append(item["device_id"])
- default_cache.set(str(uid)+"_qxz_list", qxz_list_cache,60*5)
- return Response(result)
- class QxzDeviceDetailView(APIView):
- authentication_classes = [APIAuthentication]
- permission_classes = [QXZDeviceDetailPermission]
- throttle_classes = [QxzDeviceDetailRateThrottle]
-
- def get(self, request, *args, **kwargs):
- serializer = QxzDeviceDetailSerializer(data=request.query_params)
- serializer.is_valid(raise_exception=True)
- request_data = serializer.validated_data
- start_time, device_id = request_data["start_timestamp"], request_data["device_id"]
-
- conf_wheres = {
- "device_id":device_id,
- }
- conf_m = MongoDBTools(db_name='smartfarming', table_name='sa_qxz_conf')
- conf_data = conf_m.find_one(wheres=conf_wheres)
- conf_data.pop("id")
- conf_data.pop("device_id")
- conf_data.pop("uptime")
- conf_data = dict(sorted(conf_data.items(), key=lambda e:int(e[0].split("e")[1])))
- result = {"conf":conf_data,"items":[]}
- data_m = MongoDBTools(db_name='smartfarming', table_name='sa_qxz_data')
- data_wheres = {
- "device_id": device_id,
- "uptime": {"$gt":start_time}
- }
- data = data_m.find_many(wheres=data_wheres)
- for item in data:
- item.pop("id")
- item.pop("device_id")
- result["items"].append(item)
- return Response(result)
|