| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- # -*- coding:utf-8 -*-
- # @Time : 2020/5/22 2:22 下午
- # @Author : Creat by Han
- import json
- import copy
- import datetime
- import time
- import os
- import requests
- from django.forms.models import model_to_dict
- from django.db.models import Q
- from django.conf import settings
- from kedong.decoration import kedong_deco, PortError
- from smartfarming.models.device import MongoDevice
- from smartfarming.models.weather import MongoQXZ_Base_Info, QXZdata_New, MongoQXZ_Conf, QXZstatus_New
- from smartfarming.api.views.weather.all_dict import qxz_dict
- config_dict = settings.CONFIG
- @kedong_deco(login_required=True)
- def qxz_page(request):
- """
- 气象设备列表接口 :
- 参数:
- page 非必传(num) 页码,默认为1
- device_id 非必传(str) 设备号
- device_status 非必传(str) 在线状态 1在线 0离线
- device_name 非必传(str) 设备名称
- device_type 非必传(str) 5气象站 8墒情站
- 返回值:
- {
- "data": {
- "ids": [
- {
- "d_id":"", 设备数据库ID
- "equip_name":"", 设备名称
- "equip_id":12313456, 设备ID
- "is_online":1, 在线状态 1在线 0离线
- "rssi":10, 信号强度
- "volt":22, 电压
- "lng":113, 经度
- "lat":113, 纬度
- "off_time":"" 离线时间
- "address":"" 设备地址
- "device_expire_time": 1234444 设备到期时间
- "device_expire": # 设备状态 0未到期,1已到期,2即将到期
- "device_expire_days": 到期天数
- }
- ],
- "nums": 0 设备总数
- },
- "formError": {},
- "errorCode": 0,
-
- "message": "",
- "params": {}
- }
- """
- device_id = request.POST.get("device_id")
- device_status = request.POST.get("device_status")
- device_name = request.POST.get("device_name")
- page = request.POST.get("page","")
- page_size = request.POST.get("page_size","")
- device_type = request.POST.get("device_type","5")
- if not page and not page_size:
- page = 1
- page_size = 8
- else:
- if not page.isdigit() and not page_size.isdigit():
- raise PortError("","字段类型有误")
- else:
- page = int(page)
- page_size = int(page_size)
-
- if device_type not in ("5","8"):
- raise PortError("","参数超出范围")
- devices = MongoDevice.objects.filter(device_type_id=device_type).order_by('-device_status', '-uptime')
- #设备状态查询
- if device_status:
- devices = devices.filter(device_status=int(device_status))
- #设备号查询
- if device_id:
- devices = devices.filter(Q(device_id__icontains=device_id) | Q(device_name__icontains=device_id))
- #设备名称查询
- if device_name:
- devices = devices.filter(device_name__icontains=device_name)
- date = []
- nums = devices.count()
- result = devices[(page_size*(page-1)):(page*page_size)]
- result_device_id_list = [item.device_id for item in result]
- qxz_base_dict = {item.device_id: item for item in MongoQXZ_Base_Info.objects.filter(device_id__in=result_device_id_list)}
- for i in result:
- try:
- qxz_base = qxz_base_dict[i.device_id]
- rssi = qxz_base.rssi
- volt = qxz_base.volt
- except:
- rssi = ""
- volt = ""
-
- lng = i.lng
- lat = i.lat
- address = i.province+i.city+i.district
- is_online = i.device_status
- uptime = i.uptime
- date.append({
- "d_id":i.id,
- "equip_name":i.device_name,
- "equip_id":i.device_id,
- "volt":volt,
- "rssi":rssi,
- "lng":lng,
- "lat":lat,
- "address":address,
- "is_online":is_online,
- "uptime":uptime,
- })
-
- data = {'ids':date, 'nums': nums}
- return data
- @kedong_deco(login_required=True)
- def qxz_detail(request):
- """
- 气象历史数据接口 :
- 参数:
- device_id 必传(string)
- page 非必传(num) 页码,默认为1
- start_time 非必传(string 时间戳) 开始时间 (用于时间搜索)
- end_time 非必传(string 时间戳) 结束时间 (用于时间搜索)
- 返回值:
- {
- "data": {
- "conf": {
- "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
- "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
- "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
- "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
- "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
- "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
- "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
- },
- "nums": 0,
- "rainFall": 1 气象设备是否具有日雨量累计因子,有返回1,无返回0
- "data": [
- {
- "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
- "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
- "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
- "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
- "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
- "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
- "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
- "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
- },
- {
- "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
- "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
- "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
- "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
- "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
- "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
- "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
- "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
- },...
- ]
- }
- "params": {},
- "formError": {},
- "errorCode": 0,
- "message": "",
-
- }
- """
- f_tbegin = request.POST.get('start_time')
- f_tend = request.POST.get('end_time')
- device_id = request.POST.get("device_id")
-
- try:
- device = MongoDevice.objects.get(device_id=device_id)
- device_expire = device.device_expire
- device_expire_time = device.device_expire_time
- except:
- raise PortError('device_id',"暂无此设备")
-
- qxz_list = QXZdata_New.objects.filter(device_id=device_id)
-
- myuser_type = request.user_type
- if not myuser_type == 1 and not myuser_type == 5:
- if f_tbegin and int(f_tend) > int(device_expire_time):
- f_tend = device_expire_time
- if f_tbegin and f_tend:
- qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
- page = int(request.POST.get('page',1))
- data = []
- nums = qxz_list.count()
- conf = {}
- if nums:
- for i in qxz_list[(10*(page-1)):(page*10)]:
- dat = {}
- for e in range(1, 31):
- k = f'e{e}'
- v = getattr(i, k)
- dat[k] = v or ""
- data.append({"dat": dat, "time": i.uptime})
- try:
- x = MongoQXZ_Conf.objects.get(device_id=device_id)
- conf = {}
- for e in range(1, 31):
- k = f'e{e}'
- v = getattr(x, k)
- conf[k] = v or ""
- except Exception as e:
- conf = {}
- rainFall = 0
- for factor in conf.values():
- if factor == "降雨量累计#mm":
- rainFall = 1
- break
- data1 = {"data":data,"nums":nums,"conf":conf,"rainFall":rainFall}
- return data1
- @kedong_deco(login_required=True)
- def qxz_status(request):
- """
- 气象详情接口 :
- 参数:
- device_id 必传(string)
- 返回值:
- {
- "data": {
- 'dat':{
- "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
- "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
- "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
- "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
- "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
- "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
- "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
- "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
- },
- 'conf':{
- "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
- "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
- "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
- "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
- "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
- "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
- "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
- },
- "led":0, 0 无led点阵屏功能 1 有led点阵屏功能
- "ledinfo":"点阵屏内容"
- },
- "errorCode": 0,
- "message": "",
- "formError": {}
- }
- """
- e_id = request.POST.get("device_id")
- if not e_id:
- raise PortError("","参数缺失")
- qxz_list = QXZstatus_New.objects.filter(device_id=e_id).first()
- if not qxz_list:
- raise PortError("","未找到此设备")
- data = []
- dat = {"e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
- "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
- "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
- "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
- "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
- "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
- "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30, "uptime":qxz_list.uptime}
- try:
- x = MongoQXZ_Conf.objects.get(device_id=e_id)
- conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
- "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
- "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
- "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
- "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
- "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
- "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
- except:
- conf = {}
- try:
- led = MongoQXZ_Base_Info.objects.get(device_id=e_id).led
- except:
- led = "0"
- try:
- ledinfo = MongoQXZ_Base_Info.objects.get(device_id=e_id).ledinfo
- except:
- ledinfo = ""
- data = {'dat':dat,'conf':conf, "led":led,"ledinfo":ledinfo}
- return data
- @kedong_deco(login_required=True)
- def qxz_data_chart(request):
- """
- 气象折线图接口 :
- 参数:
- device_id 必传(string)
- begin 必传(string 时间戳) 开始时间 (用于时间搜索) 默认近一个月
- end 非必传(string 时间戳) 结束时间 (用于时间搜索)
- 返回值:
- {
- "data": {
- "conf": {
- "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
- "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
- "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
- "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
- "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
- "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
- "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
- },
- "nums": 0,
- "data": [
- {
- "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
- "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
- "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
- "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
- "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
- "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
- "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
- "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
- },
- {
- "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
- "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
- "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
- "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
- "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
- "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
- "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
- "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
- },...
- ]
- }
- "params": {},
- "formError": {},
- "errorCode": 0,
- "message": "",
-
- }
- """
-
- device_id = request.POST.get("device_id")
- data = []
- f_tbegin = request.POST.get('begin')
- f_tend = request.POST.get('end')
- try:
- device = MongoDevice.objects.get(device_id=device_id)
- device_expire = device.device_expire
- device_expire_time = device.device_expire_time
- except:
- raise PortError('device_id',"暂无此设备")
-
- qxz_list = QXZdata_New.objects.filter(device_id=device_id)
-
- myuser_type = request.user_type
- if not myuser_type == 1 and not myuser_type == 5:
- if f_tbegin and int(f_tend) > int(device_expire_time):
- f_tend = device_expire_time
- if f_tbegin and f_tend:
- qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
- conf = {}
- for i in qxz_list:
- data.append({"dat":{"e1":i.e1,"e2":i.e2,"e3":i.e3,"e4":i.e4,"e5":i.e5,
- "e6":i.e6,"e7":i.e7,"e8":i.e8,"e9":i.e9,"e10":i.e10,
- "e11":i.e11,"e12":i.e12,"e13":i.e13,"e14":i.e14,
- "e15":i.e15,"e16":i.e16,"e17":i.e17,"e18":i.e18,
- "e19":i.e19,"e20":i.e20,"e21":i.e21,"e22":i.e22,
- "e23":i.e23,"e24":i.e24,"e25":i.e25,"e26":i.e26,
- "e27":i.e27,"e28":i.e28,"e29":i.e29,"e30":i.e30},
- "time":i.uptime})
- try:
- x = MongoQXZ_Conf.objects.get(device_id=device_id)
- conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
- "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
- "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
- "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
- "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
- "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
- "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
- except:
- conf = {}
- data1 = {"data":data,"conf":conf}
- return data1
|