yf_yzl 2 лет назад
Родитель
Сommit
2c372e9f56
1 измененных файлов с 22 добавлено и 14 удалено
  1. 22 14
      smartfarming/views/device.py

+ 22 - 14
smartfarming/views/device.py

@@ -2,10 +2,12 @@ from rest_framework.views import APIView
 from rest_framework.response import Response
 from django.conf import settings
 from django.core.paginator import Paginator
+from django.forms.models import model_to_dict
 import time
 import os
 import datetime
 import uuid
+import json
 import logging
 import requests
 from smartfarming.utils import get_addr_by_lag_lng
@@ -183,7 +185,8 @@ class QxzDeviceAddAPIViw(APIView):
     def post(self, request):
         # 气象站上传数据
         try:
-            request_data = request.data 
+            request_data = request.body 
+            request_data = json.loads(request_data)
             logger.error(f"气象站数据入库原数据: {request_data}")
             device_id = request_data.get("StationID")
             uptime = request_data.get("MonitorTime")
@@ -193,7 +196,11 @@ class QxzDeviceAddAPIViw(APIView):
             # 获取该设备的预警配置数据
             alarm = MongoQXZ_Alarm.objects.filter(device_id=device_id)
             qxz_e_conf = MongoQXZ_Conf.objects.filter(device_id=device_id)
+            qxz_e_conf = qxz_e_conf.first() if qxz_e_conf else None 
+            if not qxz_e_conf:
+                return Response({"code": 2, "msg": "failer"})
             if data:
+                qxz_e_conf = model_to_dict(qxz_e_conf)
                 qx_ek = {}
                 result_tp_fin = ""
                 for i in data:
@@ -202,23 +209,23 @@ class QxzDeviceAddAPIViw(APIView):
                         ek = i.get("eKey")
                         qx_ek[ek] = tp_value
                         if alarm:
-                            # 先查看配置文件中是否有配置  -- "0#6" 表示大于6则报警  "1#5" 表示小于5报警  "0#" 表示不配置
-                            alarm = alarm.first()
-                            alarm_config = eval(alarm.conf)
+                            # 存在预警配置文件, 先查看预警配置文件中是否有配置  -- "0#6" 表示大于6则报警  "1#5" 表示小于5报警  "0#" 表示不配置
+                            alarms = alarm.first()
+                            alarm_config = eval(alarms.conf)
                             dat = alarm_config.get("dat")
-                            for m, n in dat:
+                            for m, n in dat.items():
                                 n_sp = n.split("#")
                                 if n_sp[1]:
                                     if ek == m:
                                         # 查询具体含义
-                                        zh = qxz_e_conf.m 
+                                        zh = qxz_e_conf.get(m)
                                         zh_k = zh.split("#")
                                         result = ""
-                                        if n_sp == "0":
+                                        if n_sp[0] == "0":
                                             if float(tp_value) > float(n_sp[1]):
                                                 # 组织预警信息
                                                 result = f"为{tp_value},大于{n_sp[1]}"
-                                        elif n_sp == "1":
+                                        elif n_sp[0] == "1":
                                             if float(tp_value) < float(n_sp[1]):
                                                 result = f"为{tp_value},小于{n_sp[1]}"
                                         if result:
@@ -229,12 +236,13 @@ class QxzDeviceAddAPIViw(APIView):
                     alarm_new.warning_content = result_tp_fin
                     alarm_new.save()
                     logger.info(f"{device_id}  产生预警")
-                if data:
-                    # 30分钟上报一次的数据
-                    qx_ek["device_id"] = device_id
-                    qx_ek["uptime"] = uptime
-                    qxz_data = QXZdata_New(**qx_ek)
-                    qxz_data.save()
+                # 30分钟上报一次的数据
+                uptime_tp = int((datetime.datetime.strptime(uptime, "%Y-%m-%d %H: %M: %S")).timestamp())
+                qx_ek["device_id"] = device_id
+                qx_ek["uptime"] = uptime_tp
+                qxz_data = QXZdata_New(**qx_ek)
+                qxz_data.save()
+                MongoDevice.objects.filter(device_id=device_id).update(uptime=uptime_tp, device_status=1)
                 return Response({"code": 0, "msg": "success"})
             if terminalStatus:
                 base_info_obj, is_created = MongoQXZ_Base_Info.objects.update_or_create(