Просмотр исходного кода

增加管式墒情设备列表以及设备数据接口

yf_sjk 2 лет назад
Родитель
Сommit
6af02bb077
4 измененных файлов с 167 добавлено и 4 удалено
  1. 5 2
      apps/Equipment/urls.py
  2. 116 2
      apps/Equipment/views.py
  3. 8 0
      utils/MyRateThrottle.py
  4. 38 0
      utils/permissions.py

+ 5 - 2
apps/Equipment/urls.py

@@ -19,11 +19,14 @@ urlpatterns = [
     url(r'^bzy/detail/$', views.BzyDeviceDetailView.as_view(), name='bzy_detail'),
     url(r'^bzy/photo/$', views.BzyDevicePhotoView.as_view(), name='bzy_photo'),
 
-    url(r'^xycb/list/$', views.XycbDeviceListView.as_view(), name='scd_list'),
-    url(r'^xycb/detail/$', views.XycbDeviceDetailView.as_view(), name='scd_detail'),
+    url(r'^xycb/list/$', views.XycbDeviceListView.as_view(), name='xycb_list'),
+    url(r'^xycb/detail/$', views.XycbDeviceDetailView.as_view(), name='xycb_detail'),
 
     url(r'^xct/list/$', views.XctDeviceListView.as_view(), name='xct_list'),
     url(r'^xct/detail/$', views.XctDeviceDetailView.as_view(), name='xct_detail'),
     url(r'^xct/photo/$', views.XctDevicePhotoView.as_view(), name='xct_photo'),
+
+    url(r'^gssq/list/$', views.GssqDeviceListView.as_view(), name='gssq_list'),
+    url(r'^gssq/detail/$', views.GssqDeviceDetailView.as_view(), name='gssq_detail'),
     
 ]

+ 116 - 2
apps/Equipment/views.py

@@ -8,8 +8,8 @@ import ast
 from django.conf import settings
 from .serializers import SearchEquipSerializer, DeviceDetailSerializer
 from utils.JWTAuthentication_diy import APIAuthentication
-from utils.permissions import QXZDeviceDetailPermission, ScdDeviceDetailPermission, CbdDeviceDetailPermission, BzyDeviceDetailPermission, XycbDeviceDetailPermission, XctDeviceDetailPermission
-from utils.MyRateThrottle import DeviceDetailRateThrottle, DevicePhotoRateThrottle, QxzDeviceListRateThrottle, ScdDeviceListRateThrottle, CbdDeviceListRateThrottle, BzyDeviceListRateThrottle, XycbDeviceListRateThrottle, XctDeviceListRateThrottle
+from utils.permissions import QXZDeviceDetailPermission, ScdDeviceDetailPermission, CbdDeviceDetailPermission, BzyDeviceDetailPermission, XycbDeviceDetailPermission, XctDeviceDetailPermission, GssqDeviceDetailPermission
+from utils.MyRateThrottle import DeviceDetailRateThrottle, DevicePhotoRateThrottle, QxzDeviceListRateThrottle, ScdDeviceListRateThrottle, CbdDeviceListRateThrottle, BzyDeviceListRateThrottle, XycbDeviceListRateThrottle, XctDeviceListRateThrottle, GssqDeviceListRateThrottle
 from utils.utils import DeviceInfoUtils
 from utils.db_utils import MongoDBTools
 
@@ -898,4 +898,118 @@ class XctDevicePhotoView(APIView):
             else:
                 Result_image = "0"
             result["itmes"].append({"uptime":item["addtime"],"Image":Image,"Result_image":Result_image,"Result":Result})
+        return Response(result)
+
+
+class GssqDeviceListView(APIView):
+    authentication_classes = [APIAuthentication]
+    throttle_classes = [GssqDeviceListRateThrottle]
+
+    def get(self, request, *args, **kwargs):
+        """获取管式墒情列表接口"""
+        uid = request.user
+        
+        wheres = {
+            "device_type_id":15,
+            '$or': [
+                {'owner_uid': uid},
+                {'user_dealer': uid}
+            ]
+        }
+        project = {
+            'id': '$id',
+            '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":[]}
+        gssq_dict_cache = {}
+        for item in data:
+            d_id = item.pop("id")
+            result["items"].append(item)
+            gssq_dict_cache[item["device_id"]] = d_id
+        default_cache.set(str(uid)+"_gssq_list", gssq_dict_cache,60*5)
+        return Response(result)
+
+
+class GssqDeviceDetailView(APIView):
+    authentication_classes = [APIAuthentication]
+    permission_classes = [GssqDeviceDetailPermission]
+    throttle_classes = [DeviceDetailRateThrottle]
+    
+    def get(self, request, *args, **kwargs):
+        serializer = DeviceDetailSerializer(data=request.query_params)
+        serializer.is_valid(raise_exception=True)
+        request_data = serializer.validated_data
+
+        uid = request.user
+        gssq_dict_cache = default_cache.get(str(uid)+"_gssq_list")
+        if gssq_dict_cache:
+            d_id = gssq_dict_cache[request_data["device_id"]]
+        else:
+            """避免缓存失效"""
+            wheres = {
+                'device_type_id':15,
+                '$or': [
+                    {'owner_uid': uid},
+                    {'user_dealer': uid}
+                ]
+            }
+            project = {
+                'id': '$id',
+                'device_id': '$device_id'
+            }
+            m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
+            data = m.find_many(wheres=wheres, options=project)
+            gssq_dict_cache = []
+            for item in data:
+                gssq_dict_cache[item["device_id"]]=item["id"]
+            default_cache.set(str(uid)+"_gssq_list", gssq_dict_cache,60*5)
+            d_id = gssq_dict_cache[request_data["device_id"]]
+
+        result = {"total_counts":0,"items":[]}
+
+        data_m = MongoDBTools(db_name='smartfarming', table_name='sa_nd_qxz_data')
+        data_project = {
+            "upl_time": "$upl_time",
+            "id" : "$id",
+            "at" : "$at",
+            "atm" : "$atm",
+            "ats" : "$ats",
+            "csq" : "$csq",
+            "device_id" : "$device_id",
+            "swc" : "$swc",
+            "temp" : "$temp"
+        }
+
+        if request_data.get("start_timestamp") == 0:
+            data_wheres = {
+                "device_id": request_data["device_id"]
+            }
+        else:
+            data_wheres = {
+                "device_id": request_data["device_id"],
+                "upl_time": {
+                    "$gt": request_data["start_timestamp"],
+                    "$lte": request_data["end_timestamp"]
+                }
+            }
+        data = data_m.find_many(wheres=data_wheres,options=data_project,skip=request_data["page_start"],limit=request_data["page_size"])
+        total_counts = data.count()
+        result["total_counts"] = total_counts
+        for item in data:
+            try:
+                device_data = item
+            except:
+                device_data = ast.literal_eval(item)
+            
+            result["items"].append({"uptime":item["upl_time"],"item_data":device_data})
         return Response(result)

+ 8 - 0
utils/MyRateThrottle.py

@@ -71,4 +71,12 @@ class XctDeviceListRateThrottle(SimpleRateThrottle):
     def get_cache_key(self, request, view):
         uid = request.user
         key = str(uid) + "_xctlist_rate"
+        return key
+
+class GssqDeviceListRateThrottle(SimpleRateThrottle):
+    scope = "devicelist"
+
+    def get_cache_key(self, request, view):
+        uid = request.user
+        key = str(uid) + "_gssqlist_rate"
         return key

+ 38 - 0
utils/permissions.py

@@ -273,4 +273,42 @@ class XctDeviceDetailPermission(BasePermission):
             if device_id in xct_dict_cache:
                 return True
             else:
+                return False
+
+
+class GssqDeviceDetailPermission(BasePermission):
+    message = "非此账户下设备"
+    
+    def has_permission(self, request, view):
+        uid = request.user
+        device_id = request.query_params.get("device_id")
+        if device_id is None:
+            return True
+        gssq_dict_cache = default_cache.get(str(uid)+"_gssq_list")
+        if gssq_dict_cache:
+            if device_id in gssq_dict_cache:
+                return True
+            else:
+                return False
+        else:
+            wheres = {
+                'device_type_id':15,
+                '$or': [
+                    {'owner_uid': uid},
+                    {'user_dealer': uid}
+                ]
+            }
+            project = {
+                'id': '$id',
+                'device_id': '$device_id'
+            }
+            m = MongoDBTools(db_name='smartfarming', table_name='sa_device')
+            data = m.find_many(wheres=wheres, options=project)
+            gssq_dict_cache = {}
+            for item in data:
+                gssq_dict_cache[item["device_id"]]=item["id"]
+            default_cache.set(str(uid)+"_gssq_list", gssq_dict_cache,60*5)
+            if device_id in gssq_dict_cache:
+                return True
+            else:
                 return False