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 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) if conf_data: 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") uptime = item.pop("uptime") item = dict(sorted(item.items(), key=lambda e:int(e[0].split("e")[1]))) item["uptime"] = uptime result["items"].append(item) return Response(result)