|
|
@@ -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(
|