# -*- coding: utf-8 -*- from django.shortcuts import render from apps.AppInfoManage.models import Equip, User_Log, MyUser from apps.AppInfoManage.models import SCDdata, SCDstatus, RecentSCDdata, YBQdata, YBQstatus, QXZstatus, QXZdata, Trapstatus, Trapdata, Trapphoto, Equip_SimInfo from apps.AppInfoManage.models import BZYdata, BZYphoto, BZYstatus, CBDdata, CBDpest, CBDphoto, CBDphoto_desc, CBDstatus, Msg_Conf, QXZAutoswitch, QXZTimingswitch, QXZ_Conf, QXZdata_New, QXZstatus_New, QXZswitchdata, QXZswitchstatus, RecentCBDdata, Spore_Exist, YBQphoto, YBQphoto from itertools import chain from django.views.generic import ListView import json # from apps.AppInfoManage.common import CJSONEncoder from apps.EquipManage.views import CJSONEncoder from django.http.response import HttpResponse from django.core import serializers import random # from io import BytesIO, StringIO import os from imutils import paths import stat import time import datetime import re import copy from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt # import xlrd from apps.SimInfo.views import get_siminfo import requests from io import BytesIO import sys from PIL import Image import argparse import cv2 import shutil import glob from .tasks import test from apps.ReportManage.all_dict import qxz_dict, insect_dict, insect_dict_new # 杀虫灯报表管理:多设备,每个设备的最新记录 def SCD_Report(request): if request.method == 'GET': # current_user = request.session.get('username') current_user = request.user.username print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # if current_user.is_superuser != True and current_user.is_staff != True: # print("---不是管理员") # equip_list = Equip.objects.filter( # equip_type=2, equip_user=current_user) # else: # print("---管理员") # equip_list = Equip.objects.filter(equip_type=2) # data = [] # for i in equip_list: # # 关键步骤:从杀虫灯数据列表模型中,筛选出当前用户所拥有的设备的设备id的数据记录,然后进行倒叙排列,最后切片操作,只取第一条数据,即为最新; # # sta1 = SCDdata.objects.filter( # # equip_id=i.equip_id).order_by('-upl_time')[:1] # # 11月22日修改,添加新的杀虫灯数据表RecentSCDdata,此表只保存最新一条数据 # sta1 = RecentSCDdata.objects.filter( # equip_id=i.equip_id) # for x in sta1: # sta2 = {"scd_data": x.scd_data, "ds": x.ds, "upl_time": x.upl_time, # "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id} # # print("sta2:",sta2) # data.append(sta2) # # print("data:",data) data = [] if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user).values() elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values() # 此句查询省级代理商下省份等于省级代理商,且市字段不为空的下属用户 # aabbcc = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, # equip_id__equip_user__user_pro=current_user.user_pro).exclude(equip_id__equip_user__user_city="") # for i in aabbcc: # print("sadsadasdasdasdasdsadas",i.equip_id) # print("46464646798981321313265465747",aabbcc) else: print("---管理员") # sta1 = RecentSCDdata.objects.filter(equip_id__equip_type=2) sta1 = RecentSCDdata.objects.all().values() print("sta1",sta1) for x in sta1: sta2 = {"scd_data": x['scd_data'], "ds": x['ds'], "upl_time": x['upl_time'], "equip_name": x['equip_name'],"equip_id": x['equip_id_id']} # sta2 = {"scd_data": x["scd_data"], "ds": x["ds"], "upl_time": x["upl_time"], # "equip_name": "无","equip_id": x["equip_id_id"]} # print("sta2:",sta2) data.append(sta2) # print("data:",data) if request.is_ajax(): req = request.GET.get('req') print("req:", req) if req == "reqdat": print("---post 请求数据!") page = int(request.GET.get('page')) print("page:", page) data = data[(10*(page-1)):(page*10)] data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) else: nums = len(data) User_Log.objects.create(log_user=current_user, log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-杀虫灯') return render(request, 'reportmanage/scd_report.html', context={"nums": nums}) if request.method == 'POST': req = request.POST.get('req') print("req:", req) if req == "filter": print("---筛选!") page = int(request.POST.get('page')) print("page:", page) ename = request.POST.get('ename') print("ename:", ename) f_id = request.POST.get('f_id') print("f_id:", f_id) current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: # print("---不是管理员") # if ename == "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user) # elif ename == "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_id__contains=f_id) # elif ename != "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename) # elif ename != "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id) # elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: # print("---代理商") # if ename == "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user) # elif ename == "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_id__contains=f_id) # elif ename != "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename) # elif ename != "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id) # else: # print("---管理员") # if ename == "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=2) # elif ename == "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=2,equip_id__contains=f_id) # elif ename != "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=2, equip_name__contains=ename) # elif ename != "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=2, equip_name__contains=ename,equip_id__contains=f_id) # dat = [] # for i in equip_list: # # 关键步骤:从杀虫灯数据列表模型中,筛选出当前用户所拥有的设备的设备id的数据记录,然后进行倒叙排列,最后切片操作,只取第一条数据,即为最新; # # sta1 = SCDdata.objects.filter( # # equip_id=i.equip_id).order_by('-upl_time')[:1] # # 11月22日修改 添加新的杀虫灯数据表RecentSCDdata,此表只保存最新一条数据 # sta1 = RecentSCDdata.objects.filter( # equip_id=i.equip_id) # for x in sta1: # sta2 = {"scd_data": x.scd_data, "ds": x.ds, "upl_time": x.upl_time, # "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id} # dat.append(sta2) dat = [] if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") if ename == "" and f_id == "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user).values() elif ename == "" and f_id != "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id).values() elif ename != "" and f_id == "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename).values() elif ename != "" and f_id != "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values() elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") if ename == "" and f_id == "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values() elif ename == "" and f_id != "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id).values() elif ename != "" and f_id == "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=ename).values() elif ename != "" and f_id != "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values() else: print("---管理员") if ename == "" and f_id == "": sta1 = RecentSCDdata.objects.all().values() elif ename == "" and f_id != "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_id__contains=f_id).values() elif ename != "" and f_id == "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_name__contains=ename).values() elif ename != "" and f_id != "": sta1 = RecentSCDdata.objects.filter(equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values() for x in sta1: sta2 = {"scd_data": x['scd_data'], "ds": x['ds'], "upl_time": x['upl_time'], "equip_name": x['equip_name'],"equip_id": x['equip_id_id']} dat.append(sta2) nums = len(dat) dat = dat[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 杀虫灯单个设备的表格数据筛选、分页接口: class SCD_Report_Detail(ListView): def get(self, request): equip_id = request.GET.get('id') print("请求数据,设备id:", equip_id) User_Log.objects.create(log_user=request.user.username, log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-杀虫灯报表详情') # 数据总条数: nums = SCDdata.objects.filter(equip_id=equip_id).count() print("nums:", nums) ename = Equip.objects.get(equip_id=equip_id).equip_name if ename == "": ename = "无" lat = SCDstatus.objects.get(equip_id=equip_id).lat lng = SCDstatus.objects.get(equip_id=equip_id).lng return render(request, 'reportmanage/scd_report_detail.html', context={"equip_id": equip_id, "nums": nums,"ename":ename,"lat":lat,"lng":lng}) def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("equip_id:", equip_id) print("page:", page) print("请求数据的设备id:", equip_id) sta1 = SCDdata.objects.filter(equip_id=equip_id).values()[(10*(page-1)):(page*10)] print("sta1:", sta1) sta2 = [{"equip_name": "", "scd_data": x['scd_data'], "upl_time": x['upl_time']} for x in sta1] # print("sta2:",sta2) data = json.dumps(sta2, cls=CJSONEncoder) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("equip_id:", equip_id) print("page:", page) print("请求数据的设备id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = SCDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)).values() print("sta1:", sta1) sta2 = [{"scd_data": x['scd_data'], "upl_time": x['upl_time']} for x in sta1] nums = len(sta2) dat = sta2[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # elif req == "export": # equip_id = request.POST.get('id') # print("请求数据的设备id:",equip_id) # f_tbegin = request.POST.get('begin') # f_tend = request.POST.get('end') # print("f_tbegin:", f_tbegin) # print("f_tend:", f_tend) # print("f_tbegin:", type(f_tbegin)) # print("f_tend:", type(f_tend)) # # 查询时间段 # if f_tbegin: # begindate = re.findall(r"\d+\.?\d*", f_tbegin) # enddate = re.findall(r"\d+\.?\d*", f_tend) # start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) # end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) # print("start_date:", start_date) # print("end_date:", end_date) # sta1 = SCDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) # print("sta1:", sta1) # sta2 = [{"equip_name": x.equip_id.equip_name, # "scd_data": x.scd_data, # "upl_time": x.upl_time} for x in sta1] # data = json.dumps(sta2, cls=CJSONEncoder) # # 查询全部 # else: # sta1 = SCDdata.objects.filter(equip_id=equip_id) # print("sta1:",sta1) # sta2 = [{"equip_name": x.equip_id.equip_name, # "scd_data": x.scd_data, # "upl_time": x.upl_time} for x in sta1] # data = json.dumps(sta2, cls=CJSONEncoder) # return HttpResponse(data) # 杀虫灯报表详情折线图: class SCD_Report_Detail_Chart(ListView): def get(self, request): pass def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') print("equip_id:", equip_id) # 获取当前日期: now_time = datetime.datetime.now() print("当前日期为:",now_time) print("当前月为:",now_time.month) sta1 = SCDdata.objects.filter(equip_id=equip_id,upl_time__month=now_time.month).values() sta2 = [{"at": eval(x['scd_data'])['at'], "ah": eval(x['scd_data'])['ah'], "cv": eval(x['scd_data'])['cv'], "bv": eval(x['scd_data'])['bv'], "ct": eval(x['scd_data'])['ct'], "tim": x['upl_time']} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:", data) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') print("equip_id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = SCDdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)).values() sta2 = [{"at": eval(x['scd_data'])['at'], "ah": eval(x['scd_data'])['ah'], "cv": eval(x['scd_data'])['cv'], "bv": eval(x['scd_data'])['bv'], "ct": eval(x['scd_data'])['ct'], "tim": x['upl_time']} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) # 杀虫灯报表详情柱状图: class SCD_Report_Detail_Bar(ListView): def get(self, request): pass def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') print("equip_id:", equip_id) # 获取当前日期: now_time = datetime.datetime.now() print("now_time:", now_time) # # 测试: # now_time = datetime.datetime(2018, 1, 1,17,38) # 获取前一天日期: # 此方法bug:如果为1月1号,1减1 1减1 日减1 月减1 年再减1,太过麻烦; # last_day_now = now_time.replace(day = now_time.day-1) # 往前推一天: last_day_now = now_time + datetime.timedelta(days=-1) print("last_day_now:", last_day_now) # 格式化输出: last_day_now = json.dumps(last_day_now, cls=CJSONEncoder) print("格式化为json的last_day_now:", last_day_now) # 注意,当前日期这一天也要算上:所以天数加1 # 此方法不可取,每个月最后一天不同: # now_time = json.dumps(now_time.replace(day = now_time.day+1), cls=CJSONEncoder) # 往后推迟一天: now_time = json.dumps( now_time + datetime.timedelta(days=+1), cls=CJSONEncoder) print("格式化为json的now_time:", now_time) begindate = re.findall(r"\d+\.?\d*", last_day_now) enddate = re.findall(r"\d+\.?\d*", now_time) print("begindate:", begindate) print("enddate:", enddate) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = SCDdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)) sta2 = [{"at": eval(x.scd_data)['at'], "ah": eval(x.scd_data)['ah'], "cv": eval(x.scd_data)['cv'], "bv": eval(x.scd_data)['bv'], "ct": eval(x.scd_data)['ct'], "tim": x.upl_time} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:", data) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') print("equip_id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = SCDdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)) sta2 = [{ # "ct": eval(x.scd_data)['ct'], "tim": x.upl_time} for x in sta1] nums = len(sta2) # dat = sta2[(10*(page-1)):(page*10)] dat = sta2 data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) ##---------------------------诱捕器接口--------------------------- # 诱捕器报表管理:多设备,每个设备的最新记录 def YBQ_Report(request): if request.method == 'GET': # current_user = request.session.get('username') current_user = request.user.username print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) data = [] if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: # print("---不是管理员") # sta1 = YBQdata.objects.filter(equip_id__equip_user=current_user) equip_list = Equip.objects.filter( equip_type=4, equip_user=current_user) elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: # print("---代理商") # sta1 = YBQdata.objects.filter(equip_id__equip_agency=current_user.user_agency) equip_list = Equip.objects.filter( equip_type=4, equip_agency=current_user.user_agency) else: # print("---管理员") # sta1 = YBQdata.objects.all() equip_list = Equip.objects.filter( equip_type=4) for i in equip_list: sta1 = YBQdata.objects.filter( equip_id=i.equip_id).order_by('-upl_time')[:1] for x in sta1: sta2 = {"ybq_data": x.ybq_data, "ds": x.ds, "upl_time": x.upl_time, "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id} # print("sta2:",sta2) data.append(sta2) # print("data:",data) if request.is_ajax(): req = request.GET.get('req') print("req:", req) if req == "reqdat": print("---post 请求数据!") page = int(request.GET.get('page')) print("page:", page) data = data[(10*(page-1)):(page*10)] data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) else: nums = len(data) User_Log.objects.create(log_user=current_user, log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-诱捕器') return render(request, 'reportmanage/ybq_report.html', context={"nums": nums}) if request.method == 'POST': req = request.POST.get('req') print("req:", req) if req == "filter": print("---筛选!") page = int(request.POST.get('page')) print("page:", page) ename = request.POST.get('ename') print("ename:", ename) f_id = request.POST.get('f_id') print("f_id:", f_id) current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") if ename == "" and f_id == "": equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user) elif ename == "" and f_id != "": equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user, equip_id__contains=f_id) elif ename != "" and f_id == "": equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user, equip_name__contains=ename) elif ename != "" and f_id != "": equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id) elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") if ename == "" and f_id == "": equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency) elif ename == "" and f_id != "": equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency, equip_id__contains=f_id) elif ename != "" and f_id == "": equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency, equip_name__contains=ename) elif ename != "" and f_id != "": equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency, equip_name__contains=ename,equip_id__contains=f_id) else: print("---管理员") if ename == "" and f_id == "": equip_list = Equip.objects.filter(equip_type=4) elif ename == "" and f_id != "": equip_list = Equip.objects.filter(equip_type=4, equip_id__contains=f_id) elif ename != "" and f_id == "": equip_list = Equip.objects.filter(equip_type=4, equip_name__contains=ename) elif ename != "" and f_id != "": equip_list = Equip.objects.filter(equip_type=4, equip_name__contains=ename, equip_id__contains=f_id) dat = [] for i in equip_list: # 关键步骤:从诱捕器数据列表模型中,筛选出当前用户所拥有的设备的设备id的数据记录,然后进行倒叙排列,最后切片操作,只取第一条数据,即为最新; sta1 = YBQdata.objects.filter( equip_id=i.equip_id).order_by('-upl_time')[:1] for x in sta1: sta2 = {"ybq_data": x.ybq_data, "ds": x.ds, "upl_time": x.upl_time, "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id} dat.append(sta2) nums = len(dat) dat = dat[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 诱捕器单个设备的表格数据筛选、分页接口: class YBQ_Report_Detail(ListView): def get(self, request): equip_id = request.GET.get('id') print("请求数据,设备id:", equip_id) User_Log.objects.create(log_user=request.user.username, log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-诱捕器报表详情') # 数据总条数: nums = YBQdata.objects.filter(equip_id=equip_id).count() print("nums:", nums) ename = Equip.objects.get(equip_id=equip_id).equip_name if ename == "": ename = "无" lat = YBQstatus.objects.get(equip_id=equip_id).lat lng = YBQstatus.objects.get(equip_id=equip_id).lng return render(request, 'reportmanage/ybq_report_detail.html', context={"equip_id": equip_id, "nums": nums, "ename":ename, "lat":lat, "lng":lng}) def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("equip_id:", equip_id) print("page:", page) print("请求数据的设备id:", equip_id) sta1 = YBQdata.objects.filter(equip_id=equip_id)[ (10*(page-1)):(page*10)] print("sta1:", sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "ybq_data": x.ybq_data, "upl_time": x.upl_time} for x in sta1] # print("sta2:",sta2) data = json.dumps(sta2, cls=CJSONEncoder) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("equip_id:", equip_id) print("page:", page) print("请求数据的设备id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = YBQdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) print("sta1:", sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "ybq_data": x.ybq_data, "upl_time": x.upl_time} for x in sta1] nums = len(sta2) dat = sta2[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) elif req == "export": equip_id = request.POST.get('id') print("请求数据的设备id:",equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) print("f_tbegin:", type(f_tbegin)) print("f_tend:", type(f_tend)) # 查询时间段 if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = YBQdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) print("sta1:", sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "ybq_data": x.ybq_data, "upl_time": x.upl_time} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # 查询全部 else: sta1 = YBQdata.objects.filter(equip_id=equip_id) print("sta1:",sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "ybq_data": x.ybq_data, "upl_time": x.upl_time} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) return HttpResponse(data) # 诱捕器报表详情折线图: class YBQ_Report_Detail_Chart(ListView): def get(self, request): pass def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') print("equip_id:", equip_id) # 获取当前日期: now_time = datetime.datetime.now() print("当前日期为:",now_time) print("当前月为:",now_time.month) sta1 = YBQdata.objects.filter(equip_id=equip_id,upl_time__month=now_time.month) sta2 = [{"at": eval(x.ybq_data)['at'], "ah": eval(x.ybq_data)['ah'], "cv": eval(x.ybq_data)['cv'], "bv": eval(x.ybq_data)['bv'], "ct": eval(x.ybq_data)['ct'], "tim": x.upl_time} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:", data) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') print("equip_id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = YBQdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)) sta2 = [{"at": eval(x.ybq_data)['at'], "ah": eval(x.ybq_data)['ah'], "cv": eval(x.ybq_data)['cv'], "bv": eval(x.ybq_data)['bv'], "ct": eval(x.ybq_data)['ct'], "tim": x.upl_time} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) # 诱捕器报表详情柱状图: class YBQ_Report_Detail_Bar(ListView): def get(self, request): pass def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') print("equip_id:", equip_id) # 获取当前日期: now_time = datetime.datetime.now() print("now_time:", now_time) # # 测试: # now_time = datetime.datetime(2018, 1, 1,17,38) # 获取前一天日期: # 此方法bug:如果为1月1号,1减1 1减1 日减1 月减1 年再减1,太过麻烦; # last_day_now = now_time.replace(day = now_time.day-1) # 往前推一天: last_day_now = now_time + datetime.timedelta(days=-1) print("last_day_now:", last_day_now) # 格式化输出: last_day_now = json.dumps(last_day_now, cls=CJSONEncoder) print("格式化为json的last_day_now:", last_day_now) # 注意,当前日期这一天也要算上:所以天数加1 # 此方法不可取,每个月最后一天不同: # now_time = json.dumps(now_time.replace(day = now_time.day+1), cls=CJSONEncoder) # 往后推迟一天: now_time = json.dumps( now_time + datetime.timedelta(days=+1), cls=CJSONEncoder) print("格式化为json的now_time:", now_time) begindate = re.findall(r"\d+\.?\d*", last_day_now) enddate = re.findall(r"\d+\.?\d*", now_time) print("begindate:", begindate) print("enddate:", enddate) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = YBQdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)) sta2 = [{"at": eval(x.ybq_data)['at'], "ah": eval(x.ybq_data)['ah'], "cv": eval(x.ybq_data)['cv'], "bv": eval(x.ybq_data)['bv'], "ct": eval(x.ybq_data)['ct'], "tim": x.upl_time} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:", data) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') print("equip_id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = YBQdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)) sta2 = [{ # "ct": eval(x.scd_data)['ct'], "tim": x.upl_time} for x in sta1] nums = len(sta2) # dat = sta2[(10*(page-1)):(page*10)] dat = sta2 data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 诱捕器上传图片测试页面: @method_decorator(csrf_exempt, name='dispatch') def ybq_imageview(request): if request.method == 'GET': print("-----image preview!-----") imei = request.GET.get('imei') print("imei:", imei) nums = YBQphoto.objects.filter(equip_id=imei).count() print("nums:", nums) return render(request, 'reportmanage/ybq_image.html', context={"nums": nums, "imei": imei}) if request.method == 'POST': print("-----image upload request!-----") imei = request.GET.get('imei') print("imei:", imei) # 判断设备是否存在: if Equip.objects.filter(equip_id=imei).exists(): length = request.META['CONTENT_LENGTH'] print("length:", length) # 以当前时间命名图片 pic_name = time.strftime( '%Y%m%d%H%M%S', time.localtime(time.time())) + '.jpg' print("pic_name:", pic_name) pic_dir = 'ybq_img/' + imei + '/' + \ pic_name[0:4] + '/' + pic_name[4:6] + '/' if os.path.exists(pic_dir) == False: # 文件夹加权限 os.makedirs(pic_dir) # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO) print("图片路径:", pic_dir + pic_name) # img.save(pic_dir+pic_name) with open(pic_dir + pic_name, "wb") as file: file.write(request.body) # print("request.body:", request.body) # 数据库关联设备,并在照片的表中存入路径: equip = Equip.objects.get(equip_id=imei) YBQphoto.objects.create(equip_id=equip, addr=pic_dir + pic_name) return HttpResponse("-----image upload success!-----") else: return HttpResponse("-----image upload failed because this imei is not exists!-----") # 诱捕器图片列表视图: @csrf_exempt def ybq_imagelistview(request): if request.method == 'GET': print("-----image list view!-----") imei = request.GET.get('imei') print("imei:", imei) # 获得当前页: page = int(request.GET.get('page')) print("page:", page) equip_name = Equip.objects.get(equip_id=imei).equip_name # 当前用户:返回用户,前端判断是否显示删除图片按钮 current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # 从数据库中取出照片在服务器存放路径: img = YBQphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)] equip_name = Equip.objects.get(equip_id=imei).equip_name return render(request, 'reportmanage/ybq_imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei}) # 删除图片接口: class YBQ_Image_Delete(ListView): def get(self, request): pass def post(self, request): print("-----image delete!-----") imei = request.POST.get('imei') img_name = request.POST.get('addr') allpic = request.POST.get('allpic') print("img_name:",img_name) if allpic == "1": all_photo = YBQphoto.objects.filter(equip_id=imei) print("-----image delete ok!-----") for i in all_photo: if os.path.exists(i.addr) == True: # 删除图片文件 os.remove(i.addr) # 删除数据库照片列表中,照片路径: try: YBQphoto.objects.filter(equip_id=imei, addr=i.addr).delete() print("-----image delete ok!-----") except: print("-----image delete failed!-----") else: # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉 # 因此不管何时都删除数据库路径 try: YBQphoto.objects.filter(equip_id=imei, addr=i.addr).delete() except Exception as e: print("========>>",e) print("-----image not exist!-----") return HttpResponse("0") if os.path.exists(img_name) == True: # 删除图片文件 os.remove(img_name) # 删除数据库照片列表中,照片路径: try: YBQphoto.objects.filter(equip_id=imei, addr=img_name).delete() print("-----image delete ok!-----") data = "0" return HttpResponse(data) except: print("-----image delete failed!-----") data = "1" return HttpResponse(data) else: # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉 # 因此不管何时都删除数据库路径 try: YBQphoto.objects.filter(equip_id=imei, addr=img_name).delete() except: pass print("-----image not exist!-----") data = "0" return HttpResponse(data) ##---------------------------测报灯接口--------------------------- # 测报灯报表管理视图: @csrf_exempt def CBD_Report(request): # current_user = request.session.get('username') # print("current_user:", current_user) # current_user = MyUser.objects.get(username=current_user) current_user = request.user.username print("current_user:", current_user) # current_user = MyUser.objects.get(username=current_user) try: current_user = MyUser.objects.get(username=current_user) except: current_user = MyUser.objects.get(username="public") data = [] if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") role = "user" sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user).values() elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") role = "agency" sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values() else: role = "superuser" print("---管理员") sta1 = RecentCBDdata.objects.all().values() for x in sta1: if CBDphoto.objects.filter(equip_id_id=x['equip_id_id']).exists(): have_photo = "1" else: have_photo = "0" sta2 = {"equip_name": x['equip_name'],"etype":x['etype'], "cbd_data": x['cbd_data'], "upl_time": x['upl_time'],"equip_id":x['equip_id_id'],"scene": x['scene'],"disc":x['disc'],"have_photo":have_photo} data.append(sta2) # if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: # print("---不是管理员") # equip_list = Equip.objects.filter( # equip_type=3, equip_user=current_user).values() # elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: # print("---代理商") # equip_list = Equip.objects.filter( # equip_type=3, equip_agency=current_user.user_agency).values() # else: # print("---管理员") # equip_list = Equip.objects.filter(equip_type=3).values() # data = [] # for i in equip_list: # sta1 = RecentCBDdata.objects.filter( # equip_id=i['equip_id']) # for x in sta1: # sta2 = {"equip_name": x.equip_id.equip_name, # "cbd_data": x.cbd_data, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id} # # sta1 = RecentCBDdata.objects.filter( # # equip_id=i['equip_id']).values() # # for x in sta1: # # sta2 = {"equip_name":"", # # "cbd_data": x['cbd_data'], "upl_time": x['upl_time'],"equip_id":x['equip_id_id']} # data.append(sta2) if request.method == 'GET': if request.is_ajax(): req = request.GET.get('req') print("req:", req) if req == "reqdat": print("---post 请求数据!") page = int(request.GET.get('page')) print("page:", page) data = data[(10*(page-1)):(page*10)] # data = serializers.serialize("json", equip_list) # print("data:", data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) else: nums = len(data) User_Log.objects.create(log_user=current_user, log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-测报灯') return render(request, 'reportmanage/cbd_report.html', context={"nums": nums,"role":role}) if request.method == 'POST': req = request.POST.get('req') print("req:", req) if req == "filter": print("---筛选!") page = int(request.POST.get('page')) print("page:", page) ename = request.POST.get('ename') print("ename:", ename) f_id = request.POST.get('f_id') print("f_id:", f_id) etype = request.POST.get('etype') print("etype:", etype) current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: # print("---不是管理员") # if ename == "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user) # elif ename == "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user, equip_id__contains=f_id) # elif ename != "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user, equip_name__contains=ename) # elif ename != "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id) # elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: # print("---代理商") # if ename == "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency) # elif ename == "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency, equip_id__contains=f_id) # elif ename != "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency, equip_name__contains=ename) # elif ename != "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency, equip_name__contains=ename,equip_id__contains=f_id) # else: # print("---管理员") # if ename == "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=3) # elif ename == "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=3,equip_id__contains=f_id) # elif ename != "" and f_id == "": # equip_list = Equip.objects.filter(equip_type=3, equip_name__contains=ename) # elif ename != "" and f_id != "": # equip_list = Equip.objects.filter(equip_type=3, equip_name__contains=ename,equip_id__contains=f_id) # dat = [] # for i in equip_list: # sta1 = CBDdata.objects.filter( # equip_id=i.equip_id).order_by('-upl_time')[:1] # for x in sta1: # sta2 = {"equip_name": x.equip_id.equip_name, # "cbd_data": x.cbd_data, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id} # dat.append(sta2) dat = [] if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") if ename == "" and f_id == "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user).values() elif ename == "" and f_id != "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id).values() elif ename != "" and f_id == "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename).values() elif ename != "" and f_id != "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values() elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") if ename == "" and f_id == "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values() elif ename == "" and f_id != "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id).values() elif ename != "" and f_id == "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=ename).values() elif ename != "" and f_id != "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values() else: print("---管理员") if ename == "" and f_id == "": sta1 = RecentCBDdata.objects.all().values() elif ename == "" and f_id != "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_id__contains=f_id).values() elif ename != "" and f_id == "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_name__contains=ename).values() elif ename != "" and f_id != "": sta1 = RecentCBDdata.objects.filter(equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values() photoday = request.POST.get('photoday') dish = request.POST.get('dish') # 设备类型筛选设备 if etype != "": if etype == "全部" or etype == "" or etype == None: pass elif etype == "其他": sta1 = sta1.filter(etype=None) else: sta1 = sta1.filter(etype=etype) if dish == "square": pass elif dish == "circle": pass # print("photoday================>>",photoday) # if photoday == "": # print("全部") if photoday: now_time = datetime.datetime.now() start_time = now_time - datetime.timedelta(days=int(photoday)) for x in sta1: if CBDphoto.objects.filter(equip_id_id=x['equip_id_id'],upl_time__range=(start_time, now_time)).exists(): sta2 = {"cbd_data": x['cbd_data'],"upl_time": x['upl_time'],"scene":x['scene'],"etype":x['etype'], "equip_name": x['equip_name'],"equip_id": x['equip_id_id'],"disc":x['disc'],"have_photo":"1"} dat.append(sta2) else: for x in sta1: if CBDphoto.objects.filter(equip_id_id=x['equip_id_id']).exists(): have_photo = "1" else: have_photo = "0" sta2 = {"cbd_data": x['cbd_data'],"upl_time": x['upl_time'],"scene":x['scene'],"etype":x['etype'], "equip_name": x['equip_name'],"equip_id": x['equip_id_id'],"disc":x['disc'],"have_photo":have_photo} dat.append(sta2) # print('-----------------------',x.equip_id.equip_id) nums = len(dat) print("nums:", nums) dat = dat[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 报表详情视图: @method_decorator(csrf_exempt, name='dispatch') class CBD_Report_Detail(ListView): def get(self, request): equip_id = request.GET.get('id') print("请求数据,设备id:", equip_id) nums = CBDdata.objects.filter(equip_id=equip_id).count() print("nums:", nums) return render(request, 'reportmanage/cbd_report_detail.html', context={"equip_id": equip_id, "nums": nums}) def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("page:", page) print("请求数据的设备id:", equip_id) # data = {'dat':"",'pages':""} sta1 = CBDdata.objects.filter(equip_id=equip_id).values()[(10*(page-1)):(page*10)] sta2 = [{"equip_name": "", "cbd_data": x['cbd_data'], "upl_time": x['upl_time']} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # data['dat'] = sta2 # data['pages'] = pages # data = json.dumps(data, cls=CJSONEncoder) # print(data) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("equip_id:", equip_id) print("page:", page) print("请求数据的设备id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)).values() print("sta1:", sta1) sta2 = [{"equip_name":"", "cbd_data": x['cbd_data'], "upl_time": x['upl_time']} for x in sta1] nums = len(sta2) dat = sta2[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # elif req == "export": # equip_id = request.POST.get('id') # print("请求数据的设备id:",equip_id) # f_tbegin = request.POST.get('begin') # f_tend = request.POST.get('end') # print("f_tbegin:", f_tbegin) # print("f_tend:", f_tend) # print("f_tbegin:", type(f_tbegin)) # print("f_tend:", type(f_tend)) # # 查询时间段 # if f_tbegin: # begindate = re.findall(r"\d+\.?\d*", f_tbegin) # enddate = re.findall(r"\d+\.?\d*", f_tend) # start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) # end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) # print("start_date:", start_date) # print("end_date:", end_date) # sta1 = CBDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) # print("sta1:", sta1) # sta2 = [{"equip_name": x.equip_id.equip_name, # "cbd_data": x.cbd_data, # "upl_time": x.upl_time} for x in sta1] # data = json.dumps(sta2, cls=CJSONEncoder) # # 查询全部 # else: # sta1 = CBDdata.objects.filter(equip_id=equip_id) # print("sta1:",sta1) # sta2 = [{"equip_name": x.equip_id.equip_name, # "cbd_data": x.cbd_data, # "upl_time": x.upl_time} for x in sta1] # data = json.dumps(sta2, cls=CJSONEncoder) # return HttpResponse(data) # 测报灯报表详情图表视图: @method_decorator(csrf_exempt, name='dispatch') class CBD_Report_Detail_Chart(ListView): def get(self, request): pass def post(self, request): req = request.POST.get('req') print("req:", req) equip_id = request.POST.get('id') print("equip_id:", equip_id) if req == "data": # 获取当天日期: # today = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) # print("today:",today) now_time = datetime.datetime.now() # print("type now_time:",type(now_time)) # # 测试: # now_time = datetime.datetime(2018, 2, 28,17,38) # print("now_time:",now_time) # print("type now_time:",type(now_time)) # now_time2 = now_time + datetime.timedelta(days=+1) #后一天 # print("now_time2:",now_time2) # print("type now_time2:",type(now_time2)) # 上月的这一天日期: if now_time.month == 1: last_month_now = now_time.replace(year=now_time.year-1, month=12) else: try: last_month_now = now_time.replace(month=now_time.month-1) except ValueError: last_month_now = now_time.replace(month=now_time.month-1,day=now_time.day-3) print("last_month_now:", last_month_now) # 格式化输出: # last_month_now = last_month_now.strftime('%Y%m%d') last_month_now = json.dumps(last_month_now, cls=CJSONEncoder) print("格式化为json的last_month_now:", last_month_now) now_time = json.dumps( now_time + datetime.timedelta(days=+1), cls=CJSONEncoder) print("格式化为json的now_time:", now_time) begindate = re.findall(r"\d+\.?\d*", last_month_now) enddate = re.findall(r"\d+\.?\d*", now_time) print("begindate:", begindate) print("enddate:", enddate) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)).values() sta2 = [{"at": eval(x['cbd_data'])['at'], "ah": eval(x['cbd_data'])['ah'], "tim": x['upl_time']} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) elif req == "filter": f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)).values() sta2 = [{"at": eval(x['cbd_data'])['at'], "ah": eval(x['cbd_data'])['ah'], "tim": x['upl_time']} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) else: sta1 = CBDdata.objects.filter( equip_id=equip_id).values() sta2 = [{"at": eval(x['cbd_data'])['at'], "ah": eval(x['cbd_data'])['ah'], "tim": x['upl_time']} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) # 测报灯上传图片测试页面: @method_decorator(csrf_exempt, name='dispatch') def imageview(request): if request.method == 'GET': print("-----image preview!-----") imei = request.GET.get('imei') print("imei:", imei) disc = request.GET.get('disc') nums = CBDphoto.objects.filter(equip_id=imei).count() print("nums:", nums) simid = CBDstatus.objects.get(equip_id=imei).simid dver = eval(CBDstatus.objects.get(equip_id=imei).cbd_status)["dver"] user_name = request.user.username print('user_name=', user_name) current_user = MyUser.objects.get(username=user_name) if current_user.is_superuser: role = "superuser" elif current_user.is_staff: role = "staff" elif current_user.is_agency: role = "agency" else: role = "user" end_t = datetime.datetime.now() start_t = end_t + datetime.timedelta(days=-2) # 865650044618094 rain = "0" datalist = CBDdata.objects.filter(equip_id=imei,upl_time__range=(start_t, end_t)) for i in datalist: if eval(i.cbd_data)['rps'] == 1: rain = "1" break return render(request, 'reportmanage/image.html', context={"nums": nums, "imei": imei, "disc":disc, "simid":simid, "dver":dver, "role":role,"rain":rain}) if request.method == 'POST': print("-----image upload request!-----") imei = request.GET.get('imei') print("imei:", imei) # 判断设备是否存在: if Equip.objects.filter(equip_id=imei).exists(): length = request.META['CONTENT_LENGTH'] print("length:", length) # 以当前时间命名图片 now_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) pic_name = now_time + '.jpg' print("pic_name:", pic_name) pic_dir = 'cbd_img/' + imei + '/' + \ pic_name[0:4] + '/' + pic_name[4:6] + '/' if os.path.exists(pic_dir) == False: # 文件夹加权限 os.makedirs(pic_dir) # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO) print("图片路径:", pic_dir + pic_name) # img.save(pic_dir+pic_name) with open(pic_dir + pic_name, "wb") as file: file.write(request.body) # print("request.body:", request.body) # 数据库关联设备,并在照片的表中存入路径: equip = Equip.objects.get(equip_id=imei) CBDphoto.objects.create(equip_id=equip, addr=pic_dir + pic_name) try: print("------------------------------------") time.sleep(3) # insect_indentify 昆虫识别 # # 保存图片之后调用害虫识别接口 img_addr = pic_dir + pic_name # img_addr = "cbd_img/862991419825259/2018/05/20180511201853.jpg" # pic_name = "862991419825259" # 正则切割文件名 去掉.jpg后缀 pattern = r'[.]' res = img_addr result = re.split(pattern, res) insect_pic_name = result[0] + 'result' + '.jpg' # 调用识别接口并获取识别结果 # url = 'http://60.166.14.184:9143/upload' url = 'http://60.166.14.184:9143/upload' # imageFile = {'imageFile':('pic.jpg',open("/home/web/yfwlw/" + img_addr,'rb'),'image/jpeg')} imageFile = {'imageFile':('pic.jpg',open("/data/yfwlw/" + img_addr,'rb'),'image/jpeg')} data = {'longitude':'118.279643','latitude':'31.221456'} print('data:',data) res = requests.post(url,data=data,files=imageFile) print("res:",res.text) resp = json.loads(res.text) print("insect_pic_name:", insect_pic_name) print("-------------------------识别成功") except Exception as e: print(e) print("---------------------识别失败") try: # 将识别结果中的链接中的图片存入本地 # pic_dir_1 = "/home/web/yfwlw/result_cbd_img/" + imei + '/' + pic_name[0:4] + '/' + pic_name[4:6] + '/' pic_dir_1 = "/data/yfwlw/result_cbd_img/" + imei + '/' + pic_name[0:4] + '/' + pic_name[4:6] + '/' print("pic_dir_1:",pic_dir_1) if os.path.exists(pic_dir_1) == False: os.makedirs(pic_dir_1) img_src = resp["returnResult"]["returnImageUrl"] response = requests.get(img_src) image = Image.open(BytesIO(response.content)) insect_image_addr = pic_dir_1 + insect_pic_name image.save(insect_image_addr) print("------------------图片保存成功") try: # 将识别结果存入数据库 pic_dir = "result_pyftp/" + os.path.join(event.path, insect_pic_name) photo_obj = CBDphoto.objects.get(addr=img_addr) photo_obj.indentify_photo = pic_dir photo_obj.indentify_result = resp["returnResult"]["returnString"] photo_obj.save() print("图片路径:", pic_dir) print("---------------数据库保存识别结果成功") except Exception as ex: print(ex) print("---------------数据库保存识别结果失败") except Exception as exc: print(exc) print("----------------识别结果图片保存失败") try: # equip = Equip.objects.get(equip_id=imei) if equip.ftp_addr: # http://www.yfzhwlw.com/cbd/pyftp/ftp_file/ykm_cbd/868575028845867/20190305/20:56:15.jpg ftp_addr = equip.ftp_addr pattern = r'[#]' split_result = re.split(pattern, ftp_addr) print("split_result:",split_result) try: need_result = split_result[1] except: print("对接设备的地址填写有误!请检查!") need_result = "0" if need_result == "1": try: r_photo = CBDphoto.objects.get(addr=img_addr).indentify_photo indentify_result_1 = CBDphoto.objects.get(addr=img_addr).indentify_result img_addr_1 = "http://120.27.222.26/" + img_addr indentify_photo_1 = "http://120.27.222.26/" + r_photo print("img_addr_1:",img_addr_1) print("indentify_photo_1:",indentify_photo_1) print("indentify_result_1:",indentify_result_1) data = { "Image":img_addr_1, "Result_image":indentify_photo_1, "Result":indentify_result_1, "imei":imei } data = json.dumps(data, cls=CJSONEncoder) print("data:",data) res_1 = requests.post(split_result[0],data=data,timeout=2) print("res_1:",res_1) print("------------------识别结果发送成功!!!") except Exception as aex: print(aex) try: img_addr_1 = "http://120.27.222.26/" + img_addr print("img_addr_1:",img_addr_1) data = { "Image":img_addr_1, "imei":imei } data = json.dumps(data, cls=CJSONEncoder) print("data:",data) print("url:",split_result[0]) res_1 = requests.post(split_result[0],data=data) except: pass print("------------------识别结果发送失败!!!") else: try: # img_addr_1 = "http://www.yfznscd.com/" + img_addr img_addr_1 = "http://120.27.222.26/" + img_addr print("img_addr_1:",img_addr_1) data = { "Image":img_addr_1, "imei":imei } data = json.dumps(data, cls=CJSONEncoder) # 14:00设备会上传一张未开启闪光灯的照片 # 照片为黑色,所以在此做处理,判断时间 为 14:00的 不往对接用户发送 # pic_time = photo_obj.upl_time # pic_time = pic_time.strftime("%Y-%m-%d %H:%M:%S") # print("图片时间为:",pic_time,type(pic_time)) # if "14:00:" in pic_time: # print("图片上传时间为14:00,所以不对外发送") # else: # data = json.dumps(data, cls=CJSONEncoder) print("data:",data) print("url:",split_result[0]) res_1 = requests.post(split_result[0],data=data) print("res_1:",res_1.text) # 判断文件大小的方法 # path = 'F:\YFWLW\yfwlw\\16_19_21.jpg' # size = os.path.getsize(path)/1024 得到结果的单位为k print("------------------对接设备图片发送成功!!!") except Exception as aexc: print(aexc) print("------------------对接设备图片发送失败!!!") except Exception as exce: print(exce) print("!!!") return HttpResponse("-----image upload success!-----") else: return HttpResponse("-----image upload failed because this imei is not exists!-----") # 测报灯上传图片测试页面2: @method_decorator(csrf_exempt, name='dispatch') def imageview2(request): if request.method == 'POST': print("-----image upload request!-----") imei = request.GET.get('imei') print("imei:", imei) if Equip.objects.filter(equip_id=imei).exists(): length = request.META['CONTENT_LENGTH'] print("length:", length) # 以当前时间命名图片 pic_name = time.strftime( '%Y%m%d%H%M%S', time.localtime(time.time())) + '.jpg' print("pic_name:", pic_name) pic_dir = 'cbd_img/' + imei + '/' + \ pic_name[0:4] + '/' + pic_name[4:6] + '/' if os.path.exists(pic_dir) == False: # 文件夹加权限 os.makedirs(pic_dir) # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO) print("图片路径:", pic_dir + pic_name) pic = request.FILES['img'] print("pic:",pic) img = Image.open(pic).convert('RGB') img.save('cbd_img/test.jpg') return HttpResponse("-----image upload success!-----") else: return HttpResponse("-----image upload failed because this imei is not exists!-----") # 测报灯图片列表视图: @csrf_exempt def imagelistview(request): if request.method == 'GET': print("-----image list view!-----") imei = request.GET.get('imei') print("imei:", imei) user_name = request.user.username print('user_name=', user_name) disc = request.GET.get('disc') current_user = MyUser.objects.get(username=user_name) f_begin = request.GET.get('begin') f_end = request.GET.get('end') if current_user.is_superuser: role = "superuser" elif current_user.is_staff: role = "staff" elif current_user.is_agency: role = "agency" else: role = "user" # 获得当前页: page = int(request.GET.get('page')) print("page:", page) equip_name = Equip.objects.get(equip_id=imei).equip_name # 当前用户:返回用户,前端判断是否显示删除图片按钮 current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) img = CBDphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)] equip_name = Equip.objects.get(equip_id=imei).equip_name nums = "" if f_begin: img = CBDphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)] begindate = re.findall(r"\d+\.?\d*", f_begin) enddate = re.findall(r"\d+\.?\d*", f_end) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) img = CBDphoto.objects.filter(equip_id=imei, upl_time__range=(start_date, end_date)) nums = img.count() img = img[(8*(page-1)):(page*8)] end_t = datetime.datetime.now() start_t = end_t + datetime.timedelta(days=-2) # 865650044618094 rain = "0" datalist = CBDdata.objects.filter(equip_id=imei,upl_time__range=(start_t, end_t)) for i in datalist: if eval(i.cbd_data)['rps'] == 1: rain = "1" break return render(request, 'reportmanage/imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei,'role':role, 'disc':disc,'nums':nums,'rain':rain}) # 删除图片接口: class Image_Delete(ListView): def get(self, request): pass def post(self, request): print("-----image delete!-----") imei = request.POST.get('imei') img_name = request.POST.get('addr') img_list = request.POST.get('addrlist') allpic = request.POST.get('allpic') print("img_name:",img_name) if allpic == "1": all_photo = CBDphoto.objects.filter(equip_id=imei) print("-----image delete ok!-----") for i in all_photo: if os.path.exists(i.addr) == True: # 删除图片文件 os.remove(i.addr) # 删除数据库照片列表中,照片路径: try: CBDphoto.objects.filter(equip_id=imei, addr=i.addr).delete() print("-----image delete ok!-----") except: print("-----image delete failed!-----") else: # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉 # 因此不管何时都删除数据库路径 try: CBDphoto.objects.filter(equip_id=imei, addr=i.addr).delete() except Exception as e: print("========>>",e) print("-----image not exist!-----") return HttpResponse("0") if img_list: print("img_list:",type(eval(img_list))) print("img_list:",eval(img_list)) for i in eval(img_list): if os.path.exists(i) == True: # 删除图片文件 os.remove(i) # 删除数据库照片列表中,照片路径: try: CBDphoto.objects.filter(equip_id=imei, addr=i).delete() print("-----image delete ok!-----") except: print("-----image delete failed!-----") else: # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉 # 因此不管何时都删除数据库路径 try: CBDphoto.objects.filter(equip_id=imei, addr=i).delete() except Exception as e: print("========>>",e) print("-----image not exist!-----") data = "0" return HttpResponse(data) if os.path.exists(img_name) == True: # 删除图片文件 os.remove(img_name) # 删除数据库照片列表中,照片路径: try: CBDphoto.objects.filter(equip_id=imei, addr=img_name).delete() print("-----image delete ok!-----") data = "1" return HttpResponse(data) except: print("-----image delete failed!-----") data = "0" return HttpResponse(data) else: # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉 # 因此不管何时都删除数据库路径 try: CBDphoto.objects.filter(equip_id=imei, addr=img_name).delete() except: pass print("-----image not exist!-----") data = "0" return HttpResponse(data) # 图片描述接口: @method_decorator(csrf_exempt, name='dispatch') class Image_Desc(ListView): def get(self, request): req = request.GET.get('req') print('req:',req) current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # 请求害虫种类列表: if req == "pest_kind": print("-----get req:pestkind !-----") pest_kinds = CBDpest.objects.filter(user=current_user) data = [{"pest_name": x.pest_name,} for x in pest_kinds] data = json.dumps(data) print('data:',data) return HttpResponse(data) # 请求图片描述: elif req == "desc": print("-----get req:desc !-----") img_name = request.GET.get('addr') print("img_name:",img_name) print("type img_name:",type(img_name)) descs = CBDphoto_desc.objects.filter(photo_id=CBDphoto.objects.get(addr=img_name),desc_user=current_user) data = [{"crop_name": x.crop_name, "pest_case": x.pest_case, "pest_name": x.pest_name.pest_name, "pest_num":x.pest_num} for x in descs] print("data:",data) data = json.dumps(data) return HttpResponse(data) # 增加害虫种类: elif req == "add_pest": print("-----get req:add_pest !-----") pest = request.GET.get('pest') print("pest:",pest) # 如果该用户下的该害虫名称已经存在! if CBDpest.objects.filter(user=current_user,pest_name=pest).exists(): data = '1' return HttpResponse(data) try: CBDpest.objects.create(user=current_user,pest_name=pest) pest_kinds = CBDpest.objects.filter(user=current_user) data = [{"pest_name": x.pest_name,} for x in pest_kinds] data = json.dumps(data) print('data:',data) return HttpResponse(data) except: data = '2' return HttpResponse(data) # 删除害虫种类: elif req == "del_pest": print("-----get req:del_pest !-----") pests = request.GET.get('pest') pests = json.loads(pests) for i in pests: CBDpest.objects.filter(user=current_user,pest_name=i).delete() pest_kinds = CBDpest.objects.filter(user=current_user) data = [{"pest_name": x.pest_name,} for x in pest_kinds] data = json.dumps(data) print('data:',data) return HttpResponse(data) def post(self, request): req = request.POST.get('req') print('req:',req) current_user = request.session.get('username') current_user = MyUser.objects.get(username=current_user) img_name = request.POST.get('addr') print('img_name:',img_name) photo_time = request.POST.get('photo_time') desc = request.POST.get('describe') # print("json的desc:",desc) desc = json.loads(desc) # print("转为dict的desc:",desc) # 增加描述: if req == "add_save": print("-----add image describe --post!-----") print("desc['pest_name']:",desc['pest_name']) print("desc['pest_num']:",desc['pest_num']) print("desc['crop_name']:",desc['crop_name']) print("desc['pest_case']:",desc['pest_case']) if CBDphoto_desc.objects.filter(desc_user=current_user, photo_id = CBDphoto.objects.get(addr=img_name), pest_name=CBDpest.objects.get(user=current_user, pest_name=desc['pest_name'])).exists(): data = '2' return HttpResponse(data) try: CBDphoto_desc.objects.create( desc_user = current_user, photo_id = CBDphoto.objects.get(addr=img_name), pest_name = CBDpest.objects.get(user=current_user,pest_name=desc['pest_name']), pest_num = desc['pest_num'], crop_name = desc['crop_name'], pest_case = desc['pest_case'], pest_name2 = desc['pest_name'], photo_time = photo_time, photo_time1 = CBDphoto.objects.get(addr=img_name).upl_time, equip_id = CBDphoto.objects.get(addr=img_name).equip_id_id ) print("-----image add describe ok!-----") data = "0" return HttpResponse(data) except: print("-----image add describe failed!-----") data = "1" return HttpResponse(data) # 修改描述: elif req == "change_save": print("-----change image describe --post!-----") print("desc['pest_name']:",desc['pest_name']) print("desc['pest_num']:",desc['pest_num']) print("desc['crop_name']:",desc['crop_name']) print("desc['pest_case']:",desc['pest_case']) try: CBDphoto_desc.objects.filter(desc_user = current_user ,photo_id = CBDphoto.objects.get(addr=img_name) # ,pest_name = CBDpest.objects.get(pest_name=desc['pest_name']) ,pest_name = CBDpest.objects.get(user=current_user,pest_name=desc['pest_name']) ).update(pest_num = desc['pest_num'] ,crop_name = desc['crop_name'] ,pest_case = desc['pest_case'] ,pest_name2 = desc['pest_name']) print("-----change image describe ok!-----") data = "0" return HttpResponse(data) except: print("-----change image describe failed!-----") data = "1" return HttpResponse(data) # 删除描述: elif req == "del_desc": print("-----del image describe --post!-----") print("desc['pest_name']:",desc['pest_name']) try: CBDphoto_desc.objects.filter(desc_user = current_user ,photo_id = CBDphoto.objects.get(addr=img_name) # ,pest_name = CBDpest.objects.get(pest_name=desc['pest_name']) ,pest_name = CBDpest.objects.get(user=current_user,pest_name=desc['pest_name']) ).delete() print("-----delete image describe ok!-----") data = "0" return HttpResponse(data) except: print("-----delete image describe failed!-----") data = "1" return HttpResponse(data) # 图片害虫数据统计接口: @method_decorator(csrf_exempt, name='dispatch') class Pest_Data(ListView): def get(self, request): return render(request, 'reportmanage/cbd_pest_data.html', context={}) def post(self, request): current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # 先通过imei:查到时间段的照片: # imei = '012345' imei = request.POST.get('imei') print("============>>",imei) tbegin = request.POST.get('tbegin') tend = request.POST.get('tend') # 首次查看统计,默认为最近一个月的照片描述: if tbegin: begindate = re.findall(r"\d+\.?\d*", tbegin) enddate = re.findall(r"\d+\.?\d*", tend) print("begindate:", begindate) print("enddate:", enddate) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) # photos = CBDphoto.objects.filter(equip_id=Equip.objects.get(equip_id=imei),upl_time__range=(start_date, end_date)) des = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user,photo_time1__range=(start_date, end_date)).values() else: # 获取当前日期: now_time = datetime.datetime.now() # 往前推一个月: if now_time.month == 1: last_month_now = now_time.replace(year=now_time.year-1, month=12) else: try: last_month_now = now_time.replace(month=now_time.month-1) except ValueError: last_month_now = now_time.replace(month=now_time.month-1,day=now_time.day-3) tbegin = last_month_now tend = now_time + datetime.timedelta(days=+1) # photos = CBDphoto.objects.filter(equip_id=Equip.objects.get(equip_id=imei),upl_time__range=(tbegin, tend)) des = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user,photo_time1__range=(tbegin, tend)).values() data = [] des = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user).values() for ii in des: # 遍历一条描述,获取描述的信息: desc = { "pest_num":ii['pest_num'], "pest_name":ii['pest_name2'], "crop_name":ii['crop_name'], "pest_case":ii['pest_case'], "add_time":ii['photo_time1'] } data.append(desc) print('data:',data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 害虫统计的表格数据: @method_decorator(csrf_exempt, name='dispatch') class Pest_TableData(ListView): def get(self, request): pass def post(self, request): current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # 得到imei imei = request.POST.get('imei') print("imei:", imei) pest_name = request.POST.get("pest_name") tbegin = request.POST.get("tbegin") tend = request.POST.get("tend") # photos = CBDphoto.objects.filter(equip_id_id=imei).values() # if tbegin: # photos = CBDphoto.objects.filter(equip_id=Equip.objects.get(equip_id=imei),upl_time__range=(tbegin, tend)).values() # descs=[] # for i in photos: # print("i.addr:",i['addr']) # # 查描述列表: # desc = CBDphoto_desc.objects.filter(desc_user=current_user,photo_id = CBDphoto.objects.get(addr=i['addr'])).values() # descs.append(desc) # print("descs:",descs) dat = [] # for i in descs: # for ii in i: # dat.append({ # "pest_num":ii['pest_num'], # "pest_name":ii['pest_name2'], # "crop_name":ii['crop_name'], # "pest_case":ii['pest_case'], # "add_time":ii['photo_time'] # }) if tbegin: begindate = re.findall(r"\d+\.?\d*", tbegin) enddate = re.findall(r"\d+\.?\d*", tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) desc = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user,photo_time1__range=(start_date, end_date)).values() desc = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user).values() for ii in desc: # if ii['photo_time1']: dat.append({ "pest_num":ii['pest_num'], "pest_name":ii['pest_name2'], "crop_name":ii['crop_name'], "pest_case":ii['pest_case'], "add_time":ii['photo_time1'] }) if pest_name: dat = [] for ii in desc: if pest_name == ii['pest_name2']: dat.append({ "pest_num":ii['pest_num'], "pest_name":ii['pest_name2'], "crop_name":ii['crop_name'], "pest_case":ii['pest_case'], "add_time":ii['photo_time1'] }) page = int(request.POST.get('page')) print("当前页为:",page) nums = len(dat) print('nums:',nums) dat = dat[(10*(page-1)):(page*10)] data = {"nums":nums,"dat":dat} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 识别统计页面 class Manual_Pest_Data(ListView): def get(self,request): e_id = request.GET.get("e_id") disc = RecentCBDdata.objects.get(equip_id=e_id).disc current_user = request.user.username print("current_user:", current_user) # current_user = MyUser.objects.get(username=current_user) try: current_user = MyUser.objects.get(username=current_user) except: current_user = MyUser.objects.get(username="public") if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") role = "user" elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") role = "agency" else: role = "superuser" print("---管理员") return render(request, 'reportmanage/cbd_manual_pest_data.html', context={"e_id": e_id, "disc": disc,"role":role}) def post(self,request): pass import xlwt # 杀虫灯数据导出接口 class SCD_Data_Export(ListView): def get(self,request): equip_id = request.GET.get('id') print("请求数据的设备id:",equip_id) f_tbegin = request.GET.get('begin') f_tend = request.GET.get('end') filename = request.GET.get('filename') print("filename:", filename) print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) print("f_tbegin:", type(f_tbegin)) print("f_tend:", type(f_tend)) # 查询时间段 if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = SCDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) print("sta1:", sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "scd_data": eval(x.scd_data), "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1] # 查询全部 else: sta1 = SCDdata.objects.filter(equip_id=equip_id) print("sta1:",sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "scd_data": eval(x.scd_data), "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1] title = ["设备ID","设备名称","设备开关","工作状态","灯管状态","雨控状态", "温控状态","倾倒状态","定时(h)","电击次数","温度(℃)","湿度(%)","充电电压(V)","电池电压(V)","经度","纬度","上报时间"] book = xlwt.Workbook() # 创建一个excel对象 sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 # -------------------------------------- # pattern_top = xlwt.Pattern() # pattern_top.pattern = xlwt.Pattern.SOLID_PATTERN # pattern_top.pattern_fore_colour = 14 # style = xlwt.XFStyle() # style.pattern = pattern_top # --------------------------------------- for i in range(len(title)): # 遍历列 # sheet.write(0,i,title[i],style) # 将title数组中的字段写入到0行i列中 sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中 print(sta2) for x in range(len(sta2)): # 遍历列表 if sta2[x]["equip_name"] == "": equip_name = "无" elif sta2[x]["equip_name"] != "": equip_name = sta2[x]["equip_name"] if sta2[x]["scd_data"]["ds"] == 0: ds = "关" elif sta2[x]["scd_data"]["ds"] != 0: ds = "开" if sta2[x]["scd_data"]["ws"] == 0: ws = "待机" elif sta2[x]["scd_data"]["ws"] == 1: ws = "工作" elif sta2[x]["scd_data"]["ws"] == 2: ws = "充电" if sta2[x]["scd_data"]["tbs"] == 0: tbs = "正常" elif sta2[x]["scd_data"]["tbs"] != 0: tbs = "保护" if sta2[x]["scd_data"]["rps"] == 0: rps = "正常" elif sta2[x]["scd_data"]["rps"] != 0: rps = "保护" if sta2[x]["scd_data"]["tps"] == 0: tps = "正常" elif sta2[x]["scd_data"]["tps"] != 0: tps = "保护" if sta2[x]["scd_data"]["dps"] == 0: dps = "正常" elif sta2[x]["scd_data"]["dps"] != 0: dps = "保护" if sta2[x]["scd_data"]["tt"] == 0: tt = "常亮" elif sta2[x]["scd_data"]["tt"] != 0: tt = sta2[x]["scd_data"]["tt"] sheet.write(x+1,0,equip_id) # 将equip_id写入到第x+1行,第0列中 sheet.write(x+1,1,equip_name) sheet.write(x+1,2,ds) # 设备开关 sheet.write(x+1,3,ws) # 工作状态 sheet.write(x+1,4,tbs) # 灯管状态 sheet.write(x+1,5,rps) # 雨控状态 sheet.write(x+1,6,tps) # 温控状态 sheet.write(x+1,7,dps) # 倾倒状态 sheet.write(x+1,8,tt) # 定时 sheet.write(x+1,9,sta2[x]["scd_data"]["ct"]) # 电击次数 sheet.write(x+1,10,sta2[x]["scd_data"]["at"]) # 温度 sheet.write(x+1,11,sta2[x]["scd_data"]["ah"]) # 湿度 sheet.write(x+1,12,"%.2f"%(sta2[x]["scd_data"]["cv"]/1000)) # 充电电压 sheet.write(x+1,13,"%.2f"%(sta2[x]["scd_data"]["bv"]/1000)) # 电池电压 sheet.write(x+1,14,sta2[x]["scd_data"]["lng"]) # 经度 sheet.write(x+1,15,sta2[x]["scd_data"]["lat"]) # 纬度 sheet.write(x+1,16,sta2[x]["upl_time"]) # 上报时间 sheet.col(0).width = 256 * 18 sheet.col(12).width = 256 * 11 sheet.col(13).width = 256 * 11 sheet.col(16).width = 256 * 20 # 写出到IO output = BytesIO() book.save(output) # 重新定位到开始 output.seek(0) response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename response.write(output.getvalue()) return response # book.save('demo.xls') # return HttpResponse(book) def post(self,request): pass # 测报灯数据导出接口 class CBD_Data_Export(ListView): def get(self,request): equip_id = request.GET.get('id') print("请求数据的设备id:",equip_id) f_tbegin = request.GET.get('begin') f_tend = request.GET.get('end') filename = request.GET.get('filename') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) print("f_tbegin:", type(f_tbegin)) print("f_tend:", type(f_tend)) # 查询时间段 if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) print("sta1:", sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "cbd_data": eval(x.cbd_data), "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1] # 查询全部 else: sta1 = CBDdata.objects.filter(equip_id=equip_id) print("sta1:",sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "cbd_data": eval(x.cbd_data), "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1] title = ["设备ID","设备名称","环境温度(℃)","环境湿度(%)","加热仓温度(℃)","雨控状态", "温控状态","光控状态","经度","纬度","上报时间"] book = xlwt.Workbook() # 创建一个excel对象 sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 for i in range(len(title)): # 遍历列 sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中 print(sta2) for x in range(len(sta2)): # 遍历列表 if sta2[x]["equip_name"] == "": equip_name = "无" elif sta2[x]["equip_name"] != "": equip_name = sta2[x]["equip_name"] if sta2[x]["cbd_data"]["rps"] == 0: rps = "正常" elif sta2[x]["cbd_data"]["rps"] != 0: rps = "雨控" if sta2[x]["cbd_data"]["tps"] == 0: tps = "正常" elif sta2[x]["cbd_data"]["tps"] != 0: tps = "温控" if sta2[x]["cbd_data"]["lps"] == 0: lps = "正常" elif sta2[x]["cbd_data"]["lps"] != 0: lps = "光控" sheet.write(x+1,0,equip_id) # 将equip_id写入到第x+1行,第0列中 sheet.write(x+1,1,equip_name) sheet.write(x+1,2,"%.1f"%(int(sta2[x]["cbd_data"]["at"])/10)) # 环境温度 sheet.write(x+1,3,"%.1f"%(int(sta2[x]["cbd_data"]["ah"])/10)) # 环境湿度 sheet.write(x+1,4,sta2[x]["cbd_data"]["hrt"]) # 加热仓温度 sheet.write(x+1,5,rps) # 雨控状态 sheet.write(x+1,6,tps) # 温控状态 sheet.write(x+1,7,lps) # 光控状态 sheet.write(x+1,8,sta2[x]["cbd_data"]["lng"]) # 经度 sheet.write(x+1,9,sta2[x]["cbd_data"]["lat"]) # 纬度 sheet.write(x+1,10,sta2[x]["upl_time"]) # 上报时间 sheet.col(0).width = 256 * 18 sheet.col(2).width = 256 * 11 sheet.col(3).width = 256 * 11 sheet.col(4).width = 256 * 13 sheet.col(8).width = 256 * 11 sheet.col(9).width = 256 * 11 sheet.col(10).width = 256 * 20 # 写出到IO output = BytesIO() book.save(output) # 重新定位到开始 output.seek(0) response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename response.write(output.getvalue()) return response # book.save('demo.xls') # return HttpResponse(book) def post(self,request): pass # 害虫识别接口 class Pests_Identification(ListView): def get(self,request): pass def post(self,request): # img_addr = request.POST.get('img_addr') # photo_obj = CBDphoto.objects.get(addr=img_addr) # try: # data = {"result":photo_obj.indentify_result, # "image_addr":photo_obj.indentify_photo} # except: # data = {"result":"", # "image_addr":""} # data = json.dumps(data, cls=CJSONEncoder) # return HttpResponse(data) img_addr = request.POST.get('img_addr') photo_obj = CBDphoto.objects.get(addr=img_addr) url = 'http://60.166.14.184:9146/upload' # 2019-3-18测试用接口 # url = 'http://60.166.14.184:9143/upload' imageFile = {'imageFile':('pic.jpg',open(img_addr,'rb'),'image/jpeg')} data = {'longitude':'118.279643','latitude':'31.221456'} print('data:',data) res = requests.post(url,data=data,files=imageFile) print("res:",res.text) try: resp = json.loads(res.text) except Exception as e: print(e) print("识别失败") data = "1" return HttpResponse(data) print(resp["returnResult"]["returnString"]) data = {"image":resp["returnResult"]["returnImageUrl"], "result":resp["returnResult"]["returnString"]} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 害虫识别接口丨新 class Pests_Identification_New(ListView): def get(self,request): pass # C:\线上\yfwlw\cbd_img\868575027787516\2020\06\20200611095458.jpg def post(self,request): # img_addr = request.POST.get('img_addr') # photo_obj = CBDphoto.objects.get(addr=img_addr) # try: # data = {"result":photo_obj.indentify_result, # "image_addr":photo_obj.indentify_photo} # except: # data = {"result":"", # "image_addr":""} # data = json.dumps(data, cls=CJSONEncoder) # return HttpResponse(data) img_addr = request.POST.get('img_addr') photo_obj = CBDphoto.objects.get(addr=img_addr) # url = 'http://60.166.14.184:9143/upload' url = 'http://60.166.14.184:9143/upload' imageFile = {'imageFile':('pic.jpg',open(img_addr,'rb'),'image/jpeg')} data = {'longitude':'118.279643','latitude':'31.221456'} print('data:',data) res = requests.post(url,data=data,files=imageFile) print("res:",res.text) try: resp = json.loads(res.text) print("pest",resp["returnResult"]["returnString"]) photo_obj.indentify_result = resp["returnResult"]["returnString"] photo_obj.save() except Exception as e: print(e) print("识别失败") data = "1" return HttpResponse(data) print(resp["returnResult"]["returnString"]) data = {"image":resp["returnResult"]["returnImageUrl"], "result":resp["returnResult"]["returnString"]} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 气象站报表管理类视图: class QXZreport_View(ListView): def get(self, request): current_user = request.session.get('username') current_user = MyUser.objects.get(username=current_user) if current_user.is_superuser == True: role = "superuser" else: role = "user" return render(request, 'reportmanage/qxz_report.html', context={"role":role}) # 气象站分页接口 class QXZ_Page(ListView): def get(self,request): current_user = request.user.username print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) page = request.GET.get('page') page = int(page) f_id = request.GET.get('f_id') print("f_id:", f_id) is_online = request.GET.get('is_online') etype = request.GET.get('etype') print("is_online------>>",is_online) print("etype------>>",etype) if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: # 用户 if f_id != "" and is_online != "": # equip_list = Equip.objects.filter(equip_type=5,equip_user=current_user, equip_id__contains=f_id).values() equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id, is_online=is_online) elif f_id == "" and is_online != "": equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user, is_online=is_online) elif f_id != "" and is_online == "": equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id) elif f_id == "" and is_online == "": # equip_list = Equip.objects.filter(equip_type=5,equip_user=current_user).values() equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user) elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: # 代理商 if f_id != "" and is_online != "": # equip_list = Equip.objects.filter(equip_type=5,equip_agency=current_user.user_agency, equip_id__contains=f_id).values() equip_list = QXZstatus_New.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id, is_online=is_online) elif f_id == "" and is_online != "": equip_list = QXZstatus_New.objects.filter(equip_id__equip_agency=current_user.user_agency, is_online=is_online) elif f_id != "" and is_online == "": equip_list = QXZstatus_New.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id) elif f_id == "" and is_online == "": # equip_list = Equip.objects.filter(equip_type=5,equip_agency=current_user.user_agency).values() equip_list = QXZstatus_New.objects.filter(equip_id__equip_agency=current_user.user_agency) else: # 管理员 if f_id != "" and is_online != "": # equip_list = Equip.objects.filter(equip_type=5,equip_agency=current_user.user_agency, equip_id__contains=f_id).values() equip_list = QXZstatus_New.objects.filter(equip_id__equip_id__contains=f_id, is_online=is_online) elif f_id == "" and is_online != "": print("触发!!!") equip_list = QXZstatus_New.objects.filter(is_online=is_online) elif f_id != "" and is_online == "": equip_list = QXZstatus_New.objects.filter(equip_id__equip_id__contains=f_id) elif f_id == "" and is_online == "": equip_list = QXZstatus_New.objects.all() e_ids = [] for x in equip_list: if etype != "": if len(x.equip_id_id) == int(etype): n_d = {"equip_name":x.equip_id.equip_name, "equip_id":x.equip_id_id, "is_online":x.is_online,"off_time":x.off_time} e_ids.append(n_d) else: n_d = {"equip_name":x.equip_id.equip_name, "equip_id":x.equip_id_id, "is_online":x.is_online,"off_time":x.off_time} e_ids.append(n_d) nums = len(e_ids) # print(nums) ids = e_ids[(10*(page-1)):(page*10)] data = {'ids': ids, 'nums': nums} print("!!!",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) def post(self,request): pass # 气象站修改图片接口 class QXZ_Photo(ListView): def get(self,request): pass def post(self,request): e_id = request.POST.get('id') qxz_sta = QXZstatus.objects.get(equip_id=e_id) qxz_photo = request.FILES['upicture'] print("气象站图片:", qxz_photo) qxz_photo_dir = 'qxz_photo/' # 判断如果路径不存在,即创建路径 if os.path.exists(qxz_photo_dir) == False: os.makedirs(qxz_photo_dir) img = Image.open(qxz_photo) img.save(qxz_photo_dir + e_id+".png") new_photo = qxz_photo_dir + e_id +".png" print("new_photo:",new_photo) # 数据库关联设备,并在照片的表中存入路径: qxz_sta.qxz_picture = new_photo qxz_sta.save() data = "0" return HttpResponse(data) # 气象站详情接口 class QXZ_Detail(ListView): def get(self,request): qxz_dict_1 = copy.deepcopy(qxz_dict) # 如果不拷贝 后面折线图修改字典会导致字典内容变化 从而造成数据错误 current_user = request.user.username print("current_user:", current_user) try: current_user = MyUser.objects.get(username=current_user) except: current_user = MyUser.objects.get(username="public") start_date = datetime.datetime.now() - datetime.timedelta(days=1) end_date = datetime.datetime.now() print("start_date:", start_date) print("end_date:", end_date) e_id = request.GET.get('id') sta1 = QXZdata.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date)).values() # print(len(eval(sta1[0]['qxz_data'])['data'])) p_data = {"values":[], "times":[]} all_data = [] # 所有数据 try: # 先遍历有几种类型的数据 for a in range(len(eval(sta1[0]["qxz_data"])["data"])): # 再遍历24小时内的每条数据 for x in sta1: # sta = {"qxz_data": x['qxz_data'], "upl_time": x['upl_time'], # "equip_id": x['equip_id_id']} qxzdata = eval(x["qxz_data"]) # print(qxzdata['data'][a]['eValue']) p_data["name"]=qxzdata["data"][a]["eName"] p_data["values"].append(eval(qxzdata["data"][a]["eValue"])) # print(type(eval(qxzdata['data'][a]['eValue']))) p_data["ekey"]=qxzdata['data'][a]["eKey"] p_data["unit"] = qxz_dict_1[qxzdata["data"][a]["eNum"]] # print('p_data["unit"]',p_data["unit"]) tt = json.dumps(x['upl_time'], cls=CJSONEncoder) p_data["times"].append(tt) p_data["min"] = min(p_data["values"]) p_data["max"] = max(p_data["values"]) p_data["min_time"] = p_data["times"][p_data["values"].index(min(p_data["values"]))] p_data["max_time"] = p_data["times"][p_data["values"].index(max(p_data["values"]))] all_data.append(p_data) p_data = {"values":[], "times":[]} except Exception as e: print(e) # print('-------------------',all_data) # print(sta2) dat1 = [] try: sta2 = QXZstatus.objects.get(equip_id=e_id) for i in range(len((eval(sta2.qxz_status)["data"]))): if eval(sta2.qxz_status)['data'][i]["eNum"] == "163": continue dat1.append({"unit": qxz_dict_1[eval(sta2.qxz_status)['data'][i]["eNum"]],"equip_name": sta2.equip_id.equip_name, "upl_time": sta2.upl_time, "equip_id": sta2.equip_id_id, "eValue": eval(sta2.qxz_status)["data"][i]["eValue"], "eKey": eval(sta2.qxz_status)["data"][i]["eKey"], "qxz_picture": "%s"%(sta2.qxz_picture)}) # print(eval(sta2.qxz_status)['data'][i]['eNum']) # print("dat1:",dat1) except Exception as exc: # dat1 = {"unit": "","equip_name": "", # "upl_time": "", "equip_id": "", "eValue": "", # "eKey": ""} # dat1 = [] print(exc) print("dat1:",dat1) # imei = request.POST.get('imei') try: switch_obj = QXZswitchstatus.objects.get(equip_id=e_id) qxz_switch = switch_obj.qxz_switch except: qxz_switch = "" try: switch_name_obj = QXZswitchdata.objects.get(equip_id=e_id) switch_name = switch_name_obj.qxz_switch_data except: switch_name = "" try: timing_list = QXZTimingswitch.objects.get(equip_id=e_id).qxz_timing except: timing_list = "" try: auto_list = QXZAutoswitch.objects.get(equip_id_id=e_id).qxz_auto except: auto_list = "" data = {'new_data': dat1, 'all_data':all_data, 'qxz_switch':qxz_switch, 'switch_name':switch_name, 'timing_list':timing_list, 'auto_list':auto_list} data = json.dumps(data, cls=CJSONEncoder) User_Log.objects.create(log_user=current_user, log_ip=request.META['REMOTE_ADDR'], log_desc='设备管理-气象站') return HttpResponse(data) def post(self,request): pass # 气象站报表详情折线图: class QXZ_Report_Detail_Chart(ListView): def get(self, request): pass def post(self, request): qxz_dict_2 = copy.deepcopy(qxz_dict) equip_id = request.POST.get('id') print("equip_id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) current_equip = Equip.objects.get(equip_id=equip_id) dat = [] if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = QXZdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)).values() for x in sta1: sta = {"upl_time": x["upl_time"],"e_len": len((eval(x["qxz_data"])["data"])), "unit": [], "equip_id": x["equip_id_id"]} for i in eval(x["qxz_data"])["data"]: if i["eNum"] == "163": continue qxz_dict_2[i["eNum"]][0] = i["eValue"] # 将气象站字典列表里的索引值替换为 数据的eValue d = copy.deepcopy(qxz_dict_2[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉 ek = i["eKey"] d.append(ek) d.append(i["eNum"]) sta["unit"].append(d) # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]] # print(sta["unit"]) dat.append(sta) # print(dat) data = {"e_name": current_equip.equip_name, "dat": dat} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 获取当前日期: now_time = datetime.datetime.now() print("当前日期为:",now_time) print("当前月为:",now_time.month) sta1 = QXZdata.objects.filter(equip_id=equip_id, upl_time__month=now_time.month).values() for x in sta1: sta = {"upl_time": x["upl_time"],"e_len": len((eval(x["qxz_data"])["data"])), "unit": [], "equip_id": x["equip_id_id"]} for i in eval(x["qxz_data"])["data"]: if i["eNum"] == "163": continue qxz_dict_2[i["eNum"]][0] = i["eValue"] d = copy.deepcopy(qxz_dict_2[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉 ek = i["eKey"] d.append(ek) d.append(i["eNum"]) sta["unit"].append(d) # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]] dat.append(sta) # print(dat) data = {"e_name": current_equip.equip_name, "dat": dat} # print("------",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 气象站列表详情 class QXZ_Report_Detail(ListView): def get(self, request): qxz_dict_3 = copy.deepcopy(qxz_dict) page = int(request.GET.get('page')) print("page:", page) equip_id = request.GET.get('id') print("equip_id:", equip_id) f_tbegin = request.GET.get('begin') f_tend = request.GET.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) current_equip = Equip.objects.get(equip_id=equip_id) dat = [] if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = QXZdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)).values() for x in sta1: sta = {"upl_time": x["upl_time"], "unit": [], "equip_id": x["equip_id_id"]} for i in eval(x["qxz_data"])["data"]: if i["eNum"] == "163": continue qxz_dict_3[i["eNum"]][0] = i["eValue"] d = copy.deepcopy(qxz_dict_3[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉 ek = i["eKey"] d.append(ek) sta["unit"].append(d) # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]] dat.append(sta) nums = len(dat) dat = dat[(10*(page-1)):(page*10)] data = {"dat": dat, "nums":nums} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) sta1 = QXZdata.objects.filter(equip_id=equip_id).values() for x in sta1: sta = {"upl_time": x["upl_time"], "unit": [], "equip_id": x["equip_id_id"]} for i in eval(x["qxz_data"])["data"]: if i["eNum"] == "163": continue qxz_dict_3[i["eNum"]][0] = i["eValue"] d = copy.deepcopy(qxz_dict_3[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉 ek = i["eKey"] d.append(ek) sta["unit"].append(d) # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]] dat.append(sta) nums = len(dat) dat = dat[(10*(page-1)):(page*10)] data = {"dat": dat, "nums":nums} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 孢子仪报表管理视图: @csrf_exempt def BZY_Report(request): # current_user = request.session.get('username') # print("current_user:", current_user) # current_user = MyUser.objects.get(username=current_user) current_user = request.user.username print("current_user:", current_user) # current_user = MyUser.objects.get(username=current_user) try: current_user = MyUser.objects.get(username=current_user) except: current_user = MyUser.objects.get(username="public") if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") equip_list = Equip.objects.filter( equip_type=7, equip_user=current_user) elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") equip_list = Equip.objects.filter( equip_type=7, equip_agency=current_user.user_agency) else: print("---管理员") equip_list = Equip.objects.filter(equip_type=7) data = [] for i in equip_list: sta1 = BZYstatus.objects.filter( equip_id=i.equip_id) for x in sta1: sta2 = {"equip_name": x.equip_id.equip_name, "bzy_status": x.bzy_status, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id} data.append(sta2) if request.method == 'GET': if request.is_ajax(): req = request.GET.get('req') print("req:", req) if req == "reqdat": print("---post 请求数据!") page = int(request.GET.get('page')) print("page:", page) data = data[(10*(page-1)):(page*10)] # data = serializers.serialize("json", equip_list) # print("data:", data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) else: nums = len(data) User_Log.objects.create(log_user=current_user, log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-孢子仪') return render(request, 'reportmanage/bzy_report.html', context={"nums": nums}) elif request.method == 'POST': req = request.POST.get('req') print("req:", req) if req == "filter": print("---筛选!") page = int(request.POST.get('page')) print("page:", page) ename = request.POST.get('ename') print("ename:", ename) f_id = request.POST.get('f_id') print("f_id:", f_id) current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") if ename == "" and f_id == "": equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user) elif ename == "" and f_id != "": equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user, equip_id__contains=f_id) elif ename != "" and f_id == "": equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user, equip_name__contains=ename) elif ename != "" and f_id != "": equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id) elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") if ename == "" and f_id == "": equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency) elif ename == "" and f_id != "": equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency, equip_id__contains=f_id) elif ename != "" and f_id == "": equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency, equip_name__contains=ename) elif ename != "" and f_id != "": equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency, equip_name__contains=ename,equip_id__contains=f_id) else: print("---管理员") if ename == "" and f_id == "": equip_list = Equip.objects.filter(equip_type=7) elif ename == "" and f_id != "": equip_list = Equip.objects.filter(equip_type=7, equip_id__contains=f_id) elif ename != "" and f_id == "": equip_list = Equip.objects.filter(equip_type=7, equip_name__contains=ename) elif ename != "" and f_id != "": equip_list = Equip.objects.filter(equip_type=7, equip_name__contains=ename,equip_id__contains=f_id) dat = [] for i in equip_list: sta1 = BZYstatus.objects.filter( equip_id=i.equip_id) for x in sta1: sta2 = {"equip_name": x.equip_id.equip_name, "bzy_status": x.bzy_status, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id} dat.append(sta2) # print('-----------------------',x.equip_id.equip_id) nums = len(dat) print("nums:", nums) dat = dat[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 孢子仪上传图片测试页面: @method_decorator(csrf_exempt, name='dispatch') def bzy_photoview(request): if request.method == 'GET': print("-----image preview!-----") imei = request.GET.get('imei') print("imei:", imei) nums = BZYphoto.objects.filter(equip_id=imei).count() print("nums:", nums) iccid = BZYstatus.objects.get(equip_id=imei).simid dver = eval(BZYstatus.objects.get(equip_id=imei).bzy_status)["dver"] return render(request, 'reportmanage/bzy_image.html', context={"nums": nums, "imei": imei, "iccid":iccid, "dver":dver}) if request.method == 'POST': print("-----image upload request!-----") imei = request.GET.get('imei') print("imei:", imei) # 判断设备是否存在: if Equip.objects.filter(equip_id=imei).exists(): length = request.META['CONTENT_LENGTH'] print("length:", length) # 以当前时间命名图片 now_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) pic_name = now_time + '.jpg' print("pic_name:", pic_name) pic_dir = 'bzy_img/' + imei + '/' + \ pic_name[0:4] + '/' + pic_name[4:6] + '/' if os.path.exists(pic_dir) == False: # 文件夹加权限 os.makedirs(pic_dir) # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO) print("图片路径:", pic_dir + pic_name) # img.save(pic_dir+pic_name) with open(pic_dir + pic_name, "wb") as file: file.write(request.body) # print("request.body:", request.body) # 数据库关联设备,并在照片的表中存入路径: equip = Equip.objects.get(equip_id=imei) BZYphoto.objects.create(equip_id=equip, addr=pic_dir + pic_name) return HttpResponse("-----image upload success!-----") else: return HttpResponse("-----image upload failed because this imei is not exists!-----") # 孢子仪报表详视图: @method_decorator(csrf_exempt, name='dispatch') class BZY_Report_Detail(ListView): def get(self, request): equip_id = request.GET.get('id') print("请求数据,设备id:", equip_id) nums = BZYdata.objects.filter(equip_id=equip_id).count() print("nums:", nums) lng = eval(BZYstatus.objects.get(equip_id=equip_id).bzy_status)["lng"] lat = eval(BZYstatus.objects.get(equip_id=equip_id).bzy_status)["lat"] return render(request, 'reportmanage/bzy_report_detail.html', context={"equip_id": equip_id, "nums": nums, "lng":lng, "lat":lat}) def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("page:", page) print("请求数据的设备id:", equip_id) # data = {'dat':"",'pages':""} sta1 = BZYdata.objects.filter(equip_id=equip_id)[ (10*(page-1)):(page*10)] sta2 = [{"equip_name": x.equip_id.equip_name, "bzy_data": x.bzy_data, "upl_time": x.upl_time} for x in sta1] data = json.dumps(sta2, cls=CJSONEncoder) # data['dat'] = sta2 # data['pages'] = pages # data = json.dumps(data, cls=CJSONEncoder) # print(data) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') page = int(request.POST.get('page')) print("equip_id:", equip_id) print("page:", page) print("请求数据的设备id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = BZYdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) print("sta1:", sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "bzy_data": x.bzy_data, "upl_time": x.upl_time} for x in sta1] nums = len(sta2) dat = sta2[(10*(page-1)):(page*10)] data = {'dat': dat, 'nums': nums} # print("data:",data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) #孢子仪孢子统计页面 class BZY_Report_Statistics(ListView): def get(self, request): equip_id = request.GET.get('id') return render(request, 'reportmanage/bzy_report_statistics.html', context={"equip_id": equip_id}) # 孢子仪报表详情折线图: class BZY_Report_Detail_Chart(ListView): def get(self, request): pass def post(self, request): req = request.POST.get('req') if req == "data": equip_id = request.POST.get('id') print("equip_id:", equip_id) # 获取当前日期: now_time = datetime.datetime.now() print("当前日期为:",now_time) print("当前月为:",now_time.month) sta1 = BZYdata.objects.filter(equip_id=equip_id,upl_time__month=now_time.month) sta2 = [] for x in sta1: # if eval(x.bzy_data)['pre_temp'] > 100 or eval(x.bzy_data)['pre_temp'] < 0: # pre_temp = 20 # else: pre_temp = eval(x.bzy_data)['pre_temp'] sta2.append({"pre_temp": pre_temp, "ah": eval(x.bzy_data)['ah'], "at": eval(x.bzy_data)['at'], "tim": x.upl_time}) data = json.dumps(sta2, cls=CJSONEncoder) # print("data:", data) return HttpResponse(data) elif req == "filter": equip_id = request.POST.get('id') print("equip_id:", equip_id) f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = BZYdata.objects.filter( equip_id=equip_id, upl_time__range=(start_date, end_date)) sta2 = [] for x in sta1: pre_temp = eval(x.bzy_data)['pre_temp'] sta2.append({"pre_temp": pre_temp, "ah": eval(x.bzy_data)['ah'], "at": eval(x.bzy_data)['at'], "tim": x.upl_time}) data = json.dumps(sta2, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) # 孢子仪图片列表视图: @csrf_exempt def bzy_imagelistview(request): if request.method == 'GET': print("-----image list view!-----") imei = request.GET.get('imei') print("imei:", imei) # 获得当前页: page = int(request.GET.get('page')) print("page:", page) equip_name = Equip.objects.get(equip_id=imei).equip_name # 当前用户:返回用户,前端判断是否显示删除图片按钮 current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) img = BZYphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)] equip_name = Equip.objects.get(equip_id=imei).equip_name return render(request, 'reportmanage/bzy_imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei}) # 孢子仪删除图片接口: class BZY_Image_Delete(ListView): def get(self, request): pass def post(self, request): print("-----image delete!-----") imei = request.POST.get('imei') img_name = request.POST.get('addr') img_name = img_name.replace('bzy/', '') print("img_name:",img_name) print("imei:",imei) if os.path.exists(img_name) == True: # 删除图片文件 os.remove(img_name) # 删除数据库照片列表中,照片路径: try: BZYphoto.objects.filter(equip_id=imei, addr=img_name).delete() print("-----image delete ok!-----") data = "1" return HttpResponse(data) except: print("-----image delete failed!-----") data = "0" return HttpResponse(data) else: # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉 # 因此不管何时都删除数据库路径 try: BZYphoto.objects.filter(equip_id=imei, addr=img_name).delete() print("-----image delete ok!-----") except: pass print("-----image not exist!-----") data = "0" return HttpResponse(data) # 孢子仪图片描述接口: @method_decorator(csrf_exempt, name='dispatch') class BZY_Image_Desc(ListView): def get(self, request): img_name = request.POST.get('addr') print('img_name:',img_name) try: obj = BZYphoto.objects.get(addr=img_name) data = obj.describe except Exception as e: print(e) data = "" data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) def post(self, request): img_name = request.POST.get('addr') print('img_name:',img_name) desc = request.POST.get('describe') print("desc:",desc) try: obj = BZYphoto.objects.get(addr=img_name) obj.describe = desc obj.save() print("-----image add describe ok!-----") data = "0" return HttpResponse(data) except Exception as e: print("-----image add describe failed!-----") print("=========",e) data = "1" return HttpResponse(data) # 孢子仪数据导出接口 class BZY_Data_Export(ListView): def get(self,request): equip_id = request.GET.get('id') print("请求数据的设备id:",equip_id) f_tbegin = request.GET.get('begin') f_tend = request.GET.get('end') filename = request.GET.get('filename') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) print("f_tbegin:", type(f_tbegin)) print("f_tend:", type(f_tend)) # 查询时间段 if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = BZYdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) print("sta1:", sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "bzy_data": eval(x.bzy_data), "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1] # 查询全部 else: sta1 = BZYdata.objects.filter(equip_id=equip_id) print("sta1:",sta1) sta2 = [{"equip_name": x.equip_id.equip_name, "bzy_data": eval(x.bzy_data), "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1] title = ["环境温度(℃)","环境湿度(%)","保温仓设定温度(℃)","保温仓当前温度(℃)","设备开关","电池状态","摄像头状态", "电压(V)","海拔高度","信号强度","设备版本","上报时间"] book = xlwt.Workbook() # 创建一个excel对象 sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 sheet.write_merge(0, 0, 0, 11, '%s设备数据'%equip_id) for i in range(len(title)): # 遍历列 sheet.write(1,i,title[i]) # 将title数组中的字段写入到0行i列中 print(sta2) for x in range(len(sta2)): # 遍历列表 if sta2[x]["equip_name"] == "": equip_name = "无" elif sta2[x]["equip_name"] != "": equip_name = sta2[x]["equip_name"] if sta2[x]["bzy_data"]["on_off"] == 0: on_off = "关闭" elif sta2[x]["bzy_data"]["on_off"] != 0: on_off = "开启" if sta2[x]["bzy_data"]["bat_sta"] == 0: bat_sta = "正常" elif sta2[x]["bzy_data"]["bat_sta"] != 0: bat_sta = "电量过低" if sta2[x]["bzy_data"]["usb_sta"] == 0: usb_sta = "正常" elif sta2[x]["bzy_data"]["usb_sta"] != 0: usb_sta = "异常" if sta2[x]["bzy_data"]["alti"] != "": alti = sta2[x]["bzy_data"]["alti"] elif sta2[x]["bzy_data"]["alti"] == "": alti = "暂无" sheet.write(x+2,0,sta2[x]["bzy_data"]["at"]) # 将环境温度写入到第x+1行,第0列中 sheet.write(x+2,1,sta2[x]["bzy_data"]["ah"]) sheet.write(x+2,2,sta2[x]["bzy_data"]["set_temp"]) # 保温仓设定温度 sheet.write(x+2,3,sta2[x]["bzy_data"]["pre_temp"]) # 保温仓当前温度 sheet.write(x+2,4,on_off) # 设备开关 sheet.write(x+2,5,bat_sta) # 电池状态 sheet.write(x+2,6,usb_sta) # 摄像头状态 sheet.write(x+2,7,sta2[x]["bzy_data"]["v_bat"]) # 电压 sheet.write(x+2,8,alti) # 海拔高度 sheet.write(x+2,9,sta2[x]["bzy_data"]["csq"]) # 信号强度 sheet.write(x+2,10,sta2[x]["bzy_data"]["dver"]) # 设备版本 sheet.write(x+2,11,sta2[x]["upl_time"]) # 上报时间 sheet.col(2).width = 256 * 18 sheet.col(3).width = 256 * 18 sheet.col(6).width = 256 * 11 sheet.col(11).width = 256 * 18 # 写出到IO output = BytesIO() book.save(output) # 重新定位到开始 output.seek(0) response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename response.write(output.getvalue()) return response def post(self,request): pass # 自动识别后的害虫统计接口: @method_decorator(csrf_exempt, name='dispatch') class Pest_Statis(ListView): def get(self,request): equip_id = request.GET.get('id') nums = CBDphoto.objects.filter(equip_id=equip_id).count() print("nums:", nums) current_user = request.session.get('username') return render(request, 'reportmanage/cbd_pest_data.html', context={"equip_id":equip_id,"nums":nums,"username":current_user}) def post(self,request): e_id = request.POST.get('e_id') tbegin = request.POST.get('tbegin') tend = request.POST.get('tend') req = request.POST.get('req') print('e_id:',e_id) print("---折线图") one_month = datetime.timedelta(days=30) one_month_later = datetime.datetime.now() - one_month now_time = datetime.datetime.now() print("当前日期为:",now_time) sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time)) sta3 = CBDdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time)) if req == "filter": if tbegin: print("-------按日期筛选!") print("tbegin:", tbegin) print("tend:", tend) # page = request.POST.get('page') begindate = re.findall(r"\d+\.?\d*", tbegin) enddate = re.findall(r"\d+\.?\d*", tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date)) print("!!!!!",sta1.count()) dat = [] tim = [] cbd_data = [] pest_kind = [] for x in sta1: # print(x.indentify_result) if x.indentify_result != None and x.indentify_result != "": pest_reslut = x.indentify_result.split('#') for i in pest_reslut: i_result = i.split(',') # print(i_result) if i_result[0] not in pest_kind: # print(i[0]) pest_kind.append(i_result[0]) sta2 = {"time":x.upl_time,"result":x.indentify_result} tim.append(x.upl_time.strftime("%Y-%m-%d %H:%M:%S")) # if x.indentify_result: dat.append(sta2) # for i in sta3: for i in sta1: # sta4 = {"at":eval(i.cbd_data)["at"],"ah":eval(i.cbd_data)["ah"],"upl_time":i.upl_time} sta4 = {"at":i.at,"ah":i.ah,"upl_time":i.upl_time} tim.append(i.upl_time.strftime("%Y-%m-%d %H:%M:%S")) cbd_data.append(sta4) tim = sorted(tim) data = {"dat":dat,"kind":pest_kind,"cbd_data":cbd_data,"tim":tim} # print("!!!!!!!!!!!!!!!",pest_kind) data = json.dumps(data, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) # 自动识别后的害虫统计接口: @method_decorator(csrf_exempt, name='dispatch') class Pest_Statis_Form(ListView): def get(self,request): pass def post(self,request): e_id = request.POST.get('e_id') tbegin = request.POST.get('tbegin') tend = request.POST.get('tend') req = request.POST.get('req') pest = request.POST.get('pestCategory') print('e_id:',e_id) print('-=-=-=-=-=-=-=-') # 统计图 print("---统计图") page = request.POST.get('page') page = int(request.POST.get('page')) print("page:", page) sta1 = CBDphoto.objects.filter(equip_id=e_id) if req == "filter": page = int(request.POST.get('page')) if tbegin: print("-------按日期筛选!") print("tbegin:", tbegin) print("tend:", tend) begindate = re.findall(r"\d+\.?\d*", tbegin) enddate = re.findall(r"\d+\.?\d*", tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date)) print("!!!!!",sta1.count()) dat = [] pest_kind = [] for x in sta1: # print(x.indentify_result) if x.indentify_result != None and x.indentify_result != "": pest_reslut = x.indentify_result.split('#') for i in pest_reslut: i_result = i.split(',') # print(i_result) if i_result[0] not in pest_kind: # print(i[0]) pest_kind.append(i_result[0]) sta2 = {"time":x.upl_time,"pest":i_result[0],"pestnum":i_result[1]} dat.append(sta2) if pest: dat = [] print("-------------pest",pest) for x in sta1: if x.indentify_result != None and x.indentify_result != "": pest_reslut = x.indentify_result.split('#') for i in pest_reslut: i_result = i.split(',') if i_result[0] == pest: sta2 = {"time":x.upl_time,"pest":i_result[0],"pestnum":i_result[1]} dat.append(sta2) nums = len(dat) print("-------------------------",type(page)) dat = dat[(10*(page-1)):(page*10)] data = {"dat":dat,"kind":pest_kind,"nums":nums} data = json.dumps(data, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) # 害虫统计数据导出接口 class Pest_Export(ListView): def get(self,request): equip_id = request.GET.get('id') print("请求数据的设备id:",equip_id) f_tbegin = request.GET.get('begin') f_tend = request.GET.get('end') filename = request.GET.get('filename') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) print("f_tbegin:", type(f_tbegin)) print("f_tend:", type(f_tend)) # 查询时间段 if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDphoto.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)) print("sta1:", sta1) # 查询全部 else: sta1 = CBDphoto.objects.filter(equip_id=equip_id) print("sta1:",sta1) sta2 = {} for x in sta1: if x.indentify_result != None and x.indentify_result != "": pest_reslut = x.indentify_result.split('#') for i in pest_reslut: i_result = i.split(',') if insect_dict_new[i_result[0]] not in sta2: sta2[insect_dict_new[i_result[0]]] = int(i_result[1]) else: sta2[insect_dict_new[i_result[0]]] = sta2[insect_dict_new[i_result[0]]] + int(i_result[1]) # sta2.append({"pest":insect_dict_new[i_result[0]],"pest_num":i_result[1],"time":x.upl_time.strftime('%Y-%m-%d %H:%M:%S')}) title = ["害虫名称","害虫数量"] book = xlwt.Workbook() # 创建一个excel对象 sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 sheet.write_merge(0, 0, 0, 3, '%s设备数据'%equip_id) if f_tbegin: sheet.write_merge(1, 1, 0, 3, "%s-%s"%(start_date,end_date)) else: sheet.write_merge(1, 1, 0, 3, "该设备全部数据") for i in range(len(title)): # 遍历列 sheet.write(2,i,title[i]) # 将title数组中的字段写入到0行i列中 # print(sta2) a = 0 for x in sta2: # 遍历列表 sheet.write(a+3,0,x) sheet.write(a+3,1,sta2[x]) a += 1 sheet.col(0).width = 256 * 18 # 写出到IO output = BytesIO() book.save(output) # 重新定位到开始 output.seek(0) response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename response.write(output.getvalue()) return response def post(self,request): pass # 害虫统计和温湿度对应折线图 class Pest_At_Ah(ListView): def get(self,request): pass def post(self,request): e_id = request.POST.get("e_id") tbegin = request.POST.get('tbegin') tend = request.POST.get('tend') sta1 = CBDphoto.objects.filter(equip_id=e_id) if tbegin: print("-------按日期筛选!") print("tbegin:", tbegin) print("tend:", tend) begindate = re.findall(r"\d+\.?\d*", tbegin) enddate = re.findall(r"\d+\.?\d*", tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date)) print("!!!!!",sta1.count()) dat = [] pest_kind = [] for x in sta1: # print(x.indentify_result) if x.indentify_result != None and x.indentify_result != "": pest_reslut = x.indentify_result.split('#') for i in pest_reslut: i_result = i.split(',') # print(i_result) if i_result[0] not in pest_kind: # print(i[0]) pest_kind.append(i_result[0]) sta2 = {"time":x.upl_time,"result":x.indentify_result,"at":x.at,"ah":x.ah} # if x.indentify_result: dat.append(sta2) try: msg_conf = Msg_Conf.objects.get(equip_id=e_id).conf except: msg_conf = "" nums = len(dat) data = {"dat":dat,"kind":pest_kind,"nums":nums,"msg_conf":msg_conf} # print("!!!!!!!!!!!!!!!",pest_kind) data = json.dumps(data, cls=CJSONEncoder) # print("data:",data) return HttpResponse(data) # 害虫统计和温湿度对应折线图 class Pest_At_Ah_1(ListView): def get(self,request): pass def post(self,request): e_id = request.POST.get("e_id") tbegin = request.POST.get('tbegin') tend = request.POST.get('tend') one_month = datetime.timedelta(days=30) one_month_later = datetime.datetime.now() - one_month now_time = datetime.datetime.now() # xy_list = Trapdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time)) sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time)) sta3 = CBDdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time)) # sta1 = CBDphoto.objects.filter(equip_id=e_id) # sta3 = CBDdata.objects.filter(equip_id=e_id) if tbegin: print("-------按日期筛选!") print("tbegin:", tbegin) print("tend:", tend) begindate = re.findall(r"\d+\.?\d*", tbegin) enddate = re.findall(r"\d+\.?\d*", tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) print("start_date:", start_date) print("end_date:", end_date) sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date)) print("!!!!!",sta1.count()) sta3 = CBDdata.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date)) dat = [] pest_kind = [] for x in sta1: # print(x.indentify_result) if x.indentify_result != None and x.indentify_result != "": pest_reslut = x.indentify_result.split('#') for i in pest_reslut: i_result = i.split(',') # print(i_result) if i_result[0] not in pest_kind: # print(i[0]) pest_kind.append(i_result[0]) sta2 = {"time":x.upl_time,"result":x.indentify_result} # if x.indentify_result: dat.append(sta2) dat1 = [] for xx in sta1: # print("at",eval(xx.cbd_data)['at']) # print("ah",xx.cbd_data) sta4 = {"at":xx.at,"ah":xx.ah,"time":xx.upl_time} dat1.append(sta4) try: msg_conf = Msg_Conf.objects.get(equip_id=e_id).conf except Exception as e: print("报错信息为",e) msg_conf = "" nums = len(dat) data = {"dat":dat,"dat1":dat1,"kind":pest_kind,"nums":nums,"msg_conf":msg_conf} # print("!!!!!!!!!!!!!!!",pest_kind) data = json.dumps(data, cls=CJSONEncoder) print("data:",data) return HttpResponse(data) @method_decorator(csrf_exempt, name='dispatch') class Test(ListView): def get(self, request): pass def post(self, request): # e_type = request.POST.get("type") # # print("imei",imei) # print("s_time",s_time) # sta1 = CBDstatus.objects.all() # sta3 = [] # for i in sta1: # fir_v = eval(i.cbd_status)["dver"].split(".") # if fir_v[0] == e_type: # sta3.append(i.equip_id.equip_id) # print(sta3) # for imei in sta3: # file_dir = "pyftp/ftp_file/ykm_cbd/%s/%s"%(imei,s_time) # print("file_dir",file_dir) # for root, dirs, files in os.walk(file_dir): # print(root) #当前目录路径 # print(dirs) #当前路径下所有子目录 # print(files) #当前路径下所有非目录子文件 # for i in files: # file = file_dir + "/" + i # jpg_time = time.ctime(os.path.getctime(file)) # print("jpg_time",jpg_time) # st = s_time+jpg_time[11:19] # pic_time = datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S") # print("类型查看",type(pic_time)) # print("把字符串转成datetime: ", datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S")) # if CBDphoto.objects.filter(addr=file).exists(): # print("照片存在") # else: # print("照片不存在") # try: # imei_obj = Equip.objects.get(equip_id=imei) # CBDphoto.objects.create(equip_id=imei_obj,addr=file,upl_time=pic_time) # except Exception as e: # print("错误信息为",e) # -------------------------------------------------------------------------------- # sta1 = CBDstatus.objects.all() # sta3 = [] # for i in sta1: # fir_v = eval(i.cbd_status)["dver"].split(".") # if fir_v[0] == e_type: # sta3.append(i.equip_id.equip_id) # for imei in sta3: # path = "pyftp/ftp_file/ykm_cbd/%s"%imei # lsdir = os.listdir(path) #     dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))] #     if dirs: #         for i in dirs: #             print_files(os.path.join(path, i)) #     files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))] #     for f in files: #        print(os.path.join(path, f)) # -------------------------------------------------------------------------------- # imei = request.POST.get("imei") # s_time = request.POST.get("time") # file_dir = "pyftp/ftp_file/ykm_cbd/%s/%s"%(imei,s_time) # print("file_dir",file_dir) # for root, dirs, files in os.walk(file_dir): # print(root) #当前目录路径 # print(dirs) #当前路径下所有子目录 # print(files) #当前路径下所有非目录子文件 # for i in files: # file = file_dir + "/" + i # jpg_time = time.ctime(os.path.getctime(file)) # print("jpg_time",jpg_time) # st = s_time+jpg_time[11:19] # print("-------------------",i.split(".")[0]) # pic_time_1 = s_time+i.split(".")[0] # pic_time_1 = datetime.datetime.strptime(pic_time_1,"%Y%m%d%H-%M-%S") # print("-------------------->",pic_time_1) # print("-------------------->",type(pic_time_1)) # pic_time = datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S") # print("类型查看",type(pic_time)) # print("把字符串转成datetime: ", datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S")) # if CBDphoto.objects.filter(addr=file).exists(): # photoobj = CBDphoto.objects.get(addr=file) # photoobj.upl_time = pic_time_1 # photoobj.save() # print("照片存在") # else: # print("照片不存在") # try: # imei_obj = Equip.objects.get(equip_id=imei) # CBDphoto.objects.create(equip_id=imei_obj,addr=file,upl_time=pic_time) # except Exception as e: # print("错误信息为",e) # ---------------------------------------------------------------------------------- # data = { # "Image":"http://www.yfzhwlw.com/cbd_img/86123456789/2018/03/20180329135742.jpg", # "Result_image":"http://www.yfzhwlw.com/result_cbd_img/86123456789/2018/03/20180329135742result.jpg", # "Result":"22,15", # "imei":"868575028869313" # } # url = "http://tp.gw.airag.cn/yunfeikeji/insect/result/b2uanxyihkamjb5n5uydgdxvoi5chqhy" # data = json.dumps(data, cls=CJSONEncoder) # print("data:",data) # res_1 = requests.post(url=url,data=data) # url = "http://ip.360.cn/IPShare/info" # res = requests.post(url=url) # print(res.text) # data = res.text # aea = request.body # print(type(aea)) # print(aea) # dat = [] # equip_list = SCDstatus.objects.all() # for i in equip_list: # dat.append({"imei":i.equip_id_id,"lng":i.lng,"lat":i.lat}) # # print(dat) # dat = json.dumps(dat) # res = requests.post("http://127.0.0.1:8080/test",data=dat) # 清除气象站数据 # imeistr = request.body # print(type(imeistr)) # if imeistr: # imei = eval(imeistr)["imei"] # return HttpResponse(imei) # dat = [] # e_id = request.POST.get("imei") # qxz_list = QXZdata.objects.filter(equip_id_id=e_id) # for i in qxz_list: # qxz_time = i.upl_time # # str_p = datetime.datetime.strftime(qxz_time,'%Y-%m-%d') # time_int = qxz_time.minute # # print(str(time_int)) # if "7" not in str(time_int): # i.delete() # username = request.POST.get('username') # current_user = MyUser.objects.get(username="admin") # sta1 = CBDstatus.objects.filter(equip_id__equip_user=current_user) # sta1 = CBDstatus.objects.all() # print(len(sta1)) # # print("data:",data) # sta2 = [] # for a in sta1: # if a.is_online == "1": # sta2.append([a.equip_id_id,a.lng,a.lat]) # else: # pass # print(len(sta2)) # filename = "设备经纬度" # title = ["设备ID","经度","纬度"] # book = xlwt.Workbook() # 创建一个excel对象 # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 # for i in range(len(title)): # 遍历列 # sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中 # for x in range(len(sta2)): # 遍历列表 # sheet.write(x+1,0,sta2[x][0]) # sheet.write(x+1,1,sta2[x][1]) # sheet.write(x+1,2,sta2[x][2]) # # 写出到IO # output = BytesIO() # book.save(output) # # 重新定位到开始 # output.seek(0) # response = HttpResponse(content_type='application/vnd.ms-excel') # response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename # response.write(output.getvalue()) # return response # equip_list = Equip.objects.all() # bbb = 0 # for i in equip_list: # photo_list = CBDphoto.objects.filter(equip_id=i.equip_id) # status_list = CBDdata.objects.filter(equip_id=i.equip_id) # for x in photo_list: # for a in status_list: # if x.at == None: # if a.upl_time.year == x.upl_time.year and a.upl_time.month == x.upl_time.month and a.upl_time.day == x.upl_time.day and a.upl_time.hour == x.upl_time.hour: # # print("数据时间==================>",a.upl_time) # # print("设备温度==================>",eval(a.cbd_data)["at"]) # # print("设备湿度==================>",eval(a.cbd_data)["ah"]) # # print("照片时间==================>",x.upl_time) # x.at = eval(a.cbd_data)["at"] # x.ah = eval(a.cbd_data)["ah"] # x.save() # bbb = bbb + 1 # print(bbb) # print("========操作成功=======") # ----------------------------依科曼设备导出----------------------------------------- # sta1 = CBDstatus.objects.all() # sta3 = [] # for i in sta1: # fir_v = eval(i.cbd_status)["dver"].split(".") # if fir_v[0] == "2": # sta3.append(i.equip_id.equip_id) # print(sta3) # filename = "预销号" # title = ["设备ID","设备用户","卡号","sim卡状态","套餐","到期时间"] # book = xlwt.Workbook() # 创建一个excel对象 # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 # x = 0 # for i in range(len(title)): # 遍历列 # sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中 # for a in sta3: # 遍历列表 # x = x + 1 # try: # username = Equip.objects.get(equip_id=a).equip_user.username # except: # username = "" # try: # iccid = Equip_SimInfo.objects.get(equip_id=a).iccid # except: # iccid = "" # try: # data_plan = Equip_SimInfo.objects.get(equip_id=a).data_plan # except: # data_plan = "" # try: # expiry_date = Equip_SimInfo.objects.get(equip_id=a).expiry_date # except: # expiry_date = "" # try: # account_status = Equip_SimInfo.objects.get(equip_id=a).account_status # if account_status == "0": # account = "未知" # elif account_status == "1": # account = "测试期" # elif account_status == "2": # account = "沉默期" # elif account_status == "3": # account = "使用中" # elif account_status == "4": # account = "停机" # elif account_status == "5": # account = "停机保号" # elif account_status == "6": # account = "预销号" # elif account_status == "7": # account = "销号" # except: # account_status = "" # sheet.write(x,0,a) # sheet.write(x,1,username) # sheet.write(x,2,iccid) # sheet.write(x,3,account) # sheet.write(x,4,data_plan) # sheet.write(x,5,expiry_date) # ----------------------------依科曼设备导出----------------------------------------- # ------------------------------活跃设备的imei和iccid导出---------------------------- # sta1 = Equip_SimInfo.objects.filter(account_status=7) # dat = [] # for i in sta1: # dat.append(i.equip_id_id) # filename = "预销号" # title = ["设备ID","设备类型","设备用户","卡号","到期时间","sim卡状态","设备位置","最新的数据时间"] # book = xlwt.Workbook() # 创建一个excel对象 # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 # x = 0 # for i in range(len(title)): # 遍历列 # sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中 # for a in dat: # 遍历列表 # x = x + 1 # if Equip.objects.get(equip_id=a).equip_type_id == 2: # e_type = "杀虫灯" # equip_time = RecentSCDdata.objects.get(equip_id=a).upl_time # # equip_time = time.localtime(equip_time) # lat = SCDstatus.objects.get(equip_id=a).lat # lng = SCDstatus.objects.get(equip_id=a).lng # res = requests.post("http://api.map.baidu.com/geocoder?location=%s,%s&coord_type=gcj02&output=json"%(lat,lng)) # location = eval(res.text)["result"]["addressComponent"]["province"]+eval(res.text)["result"]["addressComponent"]["district"] # else: # e_type = "测报灯" # equip_time = RecentCBDdata.objects.get(equip_id=a).upl_time # # equip_time = time.localtime(equip_time) # # equip_time = time.strftime("%Y-%m-%d %H:%M:%S", equip_time) # lat = CBDstatus.objects.get(equip_id=a).lat # lng = CBDstatus.objects.get(equip_id=a).lng # res = requests.post("http://api.map.baidu.com/geocoder?location=%s,%s&coord_type=gcj02&output=json"%(lat,lng)) # location = eval(res.text)["result"]["addressComponent"]["province"]+eval(res.text)["result"]["addressComponent"]["district"] # try: # username = Equip.objects.get(equip_id=a).equip_user.username # except: # username = "" # if Equip_SimInfo.objects.get(equip_id=a).account_status == "6": # account_status = "预销号" # elif Equip_SimInfo.objects.get(equip_id=a).account_status == "7": # account_status = "销号" # equip_time = equip_time.strftime("%Y-%m-%d %H:%M:%S") # sheet.write(x,0,a) # sheet.write(x,1,e_type) # sheet.write(x,2,username) # sheet.write(x,3,Equip_SimInfo.objects.get(equip_id=a).iccid) # sheet.write(x,4,Equip_SimInfo.objects.get(equip_id=a).expiry_date) # sheet.write(x,5,account_status) # sheet.write(x,6,location) # sheet.write(x,7,equip_time) # # 写出到IO # output = BytesIO() # book.save(output) # # 重新定位到开始 # output.seek(0) # response = HttpResponse(content_type='application/vnd.ms-excel') # response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename # response.write(output.getvalue()) # return response # book=xlrd.open_workbook('F:\\12.2河南云飞恢复续费.xlsx') # sheet=book.sheet_by_index(0) #根据sheet编号来 # # sheet=book.sheet_by_name('sheet1') #根据 sheet名称来 # # print(sheet.nrows) #excel里面有多少行 # # print(sheet.ncols) #excel里面有多少列 # # print(sheet.cell(0,0).value) #获取第0行第0列的值 # # print(sheet.row_values(0)) #获取到整行的内容 # # print(sheet.col_values(1)) #获取到整列的内容 # iccid_list = sheet.col_values(1) # sim_list = [] # for i in range(len(iccid_list)): # if i == 0: # continue # sim_list.append(iccid_list[i]) # print(sim_list) # filename = "物联网卡充值验证" # title = ["卡号","到期时间","sim卡状态"] # book = xlwt.Workbook() # 创建一个excel对象 # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 # for xx in range(len(title)): # 遍历列 # sheet.write(0,xx,title[xx]) # 将title数组中的字段写入到0行i列中 # for x in range(len(sim_list)): # res = get_siminfo(sim_list[x]) # sim_res = res.text.encode('utf-8').decode('unicode_escape') # if eval(sim_res)["code"] == 0: # timeStamp = eval(sim_res)["data"]["expiry_date"] # dateArray = datetime.datetime.utcfromtimestamp(timeStamp) # otherStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S") # if eval(sim_res)["data"]["account_status"] == 6: # account_status = "预销号" # elif eval(sim_res)["data"]["account_status"] == 7: # account_status = "销号" # elif eval(sim_res)["data"]["account_status"] == 3: # account_status = "使用中" # else: # account_status = eval(sim_res)["data"]["account_status"] # print(type(account_status)) # print(otherStyleTime) # print(sim_list[x]) # sheet.write(x,0,sim_list[x]) # sheet.write(x,1,otherStyleTime) # sheet.write(x,2,account_status) # # 写出到IO # output = BytesIO() # book.save(output) # # 重新定位到开始 # output.seek(0) # response = HttpResponse(content_type='application/vnd.ms-excel') # response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename # response.write(output.getvalue()) # return response # ------------------------------4.re导出---------------------------- sta1 = CBDstatus.objects.all() dat = [] for i in sta1: print(type(eval(i.cbd_status)['dver'][0])) if eval(i.cbd_status)['dver'][0] == "4" and "re" in eval(i.cbd_status)['dver']: dat.append(i.equip_id_id) filename = "设备信息" title = ["设备ID","设备版本","在线状态","设备位置",] book = xlwt.Workbook() # 创建一个excel对象 sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 x = 0 for i in range(len(title)): # 遍历列 sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中 for a in dat: # 遍历列表 x = x + 1 # equip_time = time.localtime(equip_time) # equip_time = time.strftime("%Y-%m-%d %H:%M:%S", equip_time) lat = CBDstatus.objects.get(equip_id=a).lat lng = CBDstatus.objects.get(equip_id=a).lng res = requests.post("http://api.map.baidu.com/geocoder?location=%s,%s&coord_type=gcj02&output=json"%(lat,lng)) location = eval(res.text)["result"]["addressComponent"]["province"]+eval(res.text)["result"]["addressComponent"]["district"] # print("在线状态",type(CBDstatus.objects.get(equip_id=a).is_online)) if CBDstatus.objects.get(equip_id=a).is_online == "1": online = "在线" else: online = "离线" dver = eval(CBDstatus.objects.get(equip_id=a).cbd_status)['dver'] sheet.write(x,0,a) sheet.write(x,1,dver) sheet.write(x,2,online) sheet.write(x,3,location) # 写出到IO output = BytesIO() book.save(output) # 重新定位到开始 output.seek(0) response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename response.write(output.getvalue()) return response # return HttpResponse("1") # # 此接口用于测报灯更换板子时将旧imei的图片导入新imei中 # class Photo_Replace(ListView): # def get(self,request): # pass # def post(self,request): # old_imei = request.POST.get("old") # new_imei = request.POST.get("new") # old_obj = Equip.objects.get(equip_id=old_imei) # new_obj = Equip.objects.get(equip_id=new_imei) # old_photo = CBDphoto.objects.filter(equip_id=old_obj) # for i in old_photo: # CBDphoto.objects.create(equip_id=new_obj,upl_time=i.upl_time,addr=i.addr) # return HttpResponse("0") # 孢子统计 @method_decorator(csrf_exempt, name='dispatch') class Spore_Count(ListView): def get(self, request): pass def post(self, request): e_id = request.POST.get("e_id") page = int(request.POST.get("page")) spore_time = [] pic_time_list = [] sta1 = Spore_Exist.objects.filter(equip_id=e_id).values() sta = [] for x in sta1: # sta2 = {"e_id":x['equip_id'],"upl_time":x['upl_time'],"is_exist":x['is_exist']} # sta.append(sta2) spore_time.append(x['upl_time']) # print(spore_time) bzy_pic = BZYphoto.objects.filter(equip_id_id=e_id).values() # now_day = datetime.datetime.now().strftime('%Y-%m-%d') for i in bzy_pic: # print(i['upl_time'].strftime('%Y-%m-%d')) pic_time_list.append(i['upl_time']) # pic_time = i['upl_time'].strftime('%Y-%m-%d') # if pic_time == now_day and now_day not in spore_time: # Spore_Exist.objects.create(equip_id=e_id,upl_time=i['upl_time'],is_exist=random.choice([True, False, False])) # print("-----------孢子存在值生成成功--------------") for xxx in pic_time_list: if xxx not in spore_time: Spore_Exist.objects.create(equip_id=e_id,upl_time=xxx,is_exist=random.choice([True, False, False])) print("-----------孢子存在值生成成功old--------------") sta3 = Spore_Exist.objects.filter(equip_id=e_id).values() for xx in sta3: sta2 = {"e_id":xx['equip_id'],"upl_time":xx['upl_time'],"is_exist":xx['is_exist']} sta.append(sta2) # spore_time.append(x['upl_time'].strftime('%Y-%m-%d')) nums = len(sta) sta = sta[(10*(page-1)):(page*10)] data = {'data': sta, 'count': nums,"code":0} # print(data) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 气象站数据导出接口 class QXZ_Data_Export(ListView): def get(self,request): equip_id = request.GET.get('id') print("请求数据的设备id:",equip_id) f_tbegin = request.GET.get('begin') f_tend = request.GET.get('end') filename = request.GET.get('filename') print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) print("f_tbegin:", type(f_tbegin)) print("f_tend:", type(f_tend)) # 查询时间段 if f_tbegin: begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2])) sta1 = QXZdata_New.objects.filter(equip_id=equip_id,upl_time__range=(start_date, end_date)) else: sta1 = QXZdata_New.objects.filter(equip_id=equip_id) book = xlwt.Workbook() # 创建一个excel对象 sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页 tes = [] if sta1: try: for x in sta1: te = [] data = [x.e1,x.e2,x.e3,x.e4,x.e5, x.e6,x.e7,x.e8,x.e9,x.e10, x.e11,x.e12,x.e13,x.e14, x.e15,x.e16,x.e17,x.e18, x.e19,x.e20,x.e21,x.e22, x.e23,x.e24,x.e25,x.e26, x.e27,x.e28,x.e29,x.e30,x.upl_time.strftime("%Y-%m-%d %H:%M:%S")] conf_list = [i for i in data if i !='' ] for y in conf_list: num = str(y.split("#")[0]) te.append(num) tes.append(te) x = QXZ_Conf.objects.get(equip_id=equip_id) conf = [x.e1,x.e2,x.e3,x.e4,x.e5, x.e6,x.e7,x.e8,x.e9,x.e10, x.e11,x.e12,x.e13,x.e14, x.e15,x.e16,x.e17,x.e18, x.e19,x.e20,x.e21,x.e22, x.e23,x.e24,x.e25,x.e26, x.e27,x.e28,x.e29,x.e30] conf_list = [i for i in conf if i !='' ] tep = [] for x in conf_list: tite = x.replace('#', '') tep.append(tite) tep.append("采集时间") for i in range(len(tep)): # 遍历列 sheet.write(0,i,tep[i]) # 将title数组中的字段写入到0行i列中 for y in range(len(tes)): for i in range(len(tes[y])): sheet.write(y+1,i,tes[y][i]) except: sheet.write(0,0,"错误的时间段") else: sheet.write(0,0,"该时间段内没数据清重新设置时间段") # 将title数组中的字段写入到0行i列中 #写出到IO output = BytesIO() book.save(output) # 重新定位到开始 output.seek(0) response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename response.write(output.getvalue()) return response def post(self,request): pass # 性诱设备页面 class Trap_Report(ListView): def get(self,request): return render(request, 'reportmanage/xyq_report.html', context={}) def post(self,request): current_user = request.user.username print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) page = int(request.POST.get("page")) equip_id = request.POST.get("equip_id") if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True: print("---不是管理员") xy_list = Trapstatus.objects.filter(equip_id__equip_user=current_user) elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True: print("---代理商") xy_list = Trapstatus.objects.filter(equip_id__equip_agency=current_user.user_agency) else: print("---管理员") xy_list = Trapstatus.objects.all() dat = [] if equip_id: xy_list = xy_list.filter(equip_id__equip_id__contains=equip_id) for i in xy_list: dat.append({"equip_id":i.equip_id_id,"addr":i.addr,"tem":i.tem,"hum":i.hum,"pest":i.pest,"pestnum":i.pestnum,"upl_time":i.upl_time}) nums = len(dat) dat = dat[(10*(page-1)):(page*10)] data = {"nums":nums,"dat":dat} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 性诱设备详情 class Trap_Report_Detail(ListView): def get(self,request): e_id = request.GET.get("id") equip_obj = Equip.objects.get(equip_id=e_id) ename = equip_obj.equip_name nums = Trapdata.objects.filter(equip_id=e_id).count() return render(request, 'reportmanage/xyq_report_detail.html', context={"ename":ename,"equip_id":e_id,"nums":nums}) def post(self,request): e_id = request.POST.get("id") page = int(request.POST.get("page")) xy_list = Trapdata.objects.filter(equip_id=e_id) dat = [] for i in xy_list: dat.append({"equip_id":i.equip_id_id,"addr":i.addr,"tem":i.tem,"hum":i.hum,"pest":i.pest,"pestnum":i.pestnum,"upl_time":i.upl_time}) nums = len(dat) dat = dat[(10*(page-1)):(page*10)] data = {"dat":dat,"nums":nums} data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 性诱详情折线 class Trap_Report_Detail_Chart(ListView): def get(self,request): pass def post(self,request): e_id = request.POST.get("id") one_month = datetime.timedelta(days=30) one_month_later = datetime.datetime.now() - one_month now_time = datetime.datetime.now() xy_list = Trapdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time)) data = [] for i in xy_list: data.append({"pest":i.pest,"pestnum":i.pestnum,"upl_time":i.upl_time,"at":i.tem,"ah":i.hum}) data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 性诱设备图片页面 class Trap_Image(ListView): def get(self,request): print("-----image preview!-----") imei = request.GET.get('imei') print("imei:", imei) nums = Trapphoto.objects.filter(equip_id=imei).count() print("nums:", nums) return render(request, 'reportmanage/xyq_image.html', context={"imei":imei,"nums":nums}) def post(self,request): pass # 性诱设备图片列表 class Trap_Image_List(ListView): def get(self,request): print("-----image list view!-----") imei = request.GET.get('imei') print("imei:", imei) # 获得当前页: page = int(request.GET.get('page')) print("page:", page) equip_name = Equip.objects.get(equip_id=imei).equip_name # 当前用户:返回用户,前端判断是否显示删除图片按钮 current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) img = Trapphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)] equip_name = Equip.objects.get(equip_id=imei).equip_name return render(request, 'reportmanage/xyq_imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei}) def post(self,request): pass def mkdir(path): # 去除首位空格 path=path.strip() # 去除尾部 \ 符号 path=path.rstrip("\\") # 判断路径是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判断结果 if not isExists: # 如果不存在则创建目录 # 创建目录操作函数 os.makedirs(path) print(path+' 创建成功') return True else: # 如果目录存在则不创建,并提示目录已存在 print(path+' 目录已存在') return False def variance_of_laplacian(image): # 拉普拉斯的方差 return cv2.Laplacian(image, cv2.CV_64F).var() ##通过thread 实现django中 import threading def bzythread(imei): nowtime = datetime.datetime.now().strftime('%Y%m%d') # origin = sys.stdout # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a') # sys.stdout = f print('=================================================') print("<-----imei:\n" + imei + ';\n') print("Message:\n" + "http:bzyphoto" + "----->\n") print("%s"%datetime.datetime.now()) print('=================================================') pic_name = datetime.datetime.now().strftime('%Y%m') args = "pyftp/ftp_file/bzy_test/" + imei try: # 清晰度的list: cv_num_list = [] # # 文件名的列表 # file_list = list(paths.list_images(args)) # print("\n===========================") # print("file_list:",file_list) # print("type file_list:",type(file_list)) # ----------------------------------------------------------- file_list1 = list(paths.list_images(args)) print("\n===========================") # print("file_list1:",file_list1) print("type file_list1:",type(file_list1)) cv_num_list1 = [] for imagePath1 in file_list1[::]: # pass # load the image, convert it to grayscale, and compute the # focus measure of the image using the Variance of Laplacian # method # 加载图像,将其转换为灰度,然后计算 # 使用拉普拉斯方差对图像进行聚焦测量 #方法 # image = cv2.imread(imagePath) # gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # fm = variance_of_laplacian(gray) # fm = get_value(imagePath) # 孢子仪图片过小删除 if os.path.getsize(imagePath1) <= 10: file_list1.remove(imagePath1) img1 = cv2.imread(imagePath1) img1 = cv2.resize(img1, (800, 600)) gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # 创建SIFT对象 sift = cv2.xfeatures2d.SIFT_create() keypoints, descriptor = sift.detectAndCompute(gray, None) img1 = cv2.drawKeypoints(image=img1, outImage=img1, keypoints=keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0, 0, 255)) # 显示图片 # cv2.imshow('sift_keypoints', img1) # cv2.waitKey(2000) # cv2.destroyAllWindows() fm1 = len(keypoints) # im=Image.open(imagePath) # im1=im.convert("YCbCr") #转换图像的模式到视频模式 # y1,cb1,cr1=im1.getpixel((height*0.2,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y2,cb2,cr2=im1.getpixel((height*0.8,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y3,cb3,cr3=im1.getpixel((height*0.2,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y4,cb4,cr4=im1.getpixel((height*0.8,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # if y1 < 50 and y2 < 50 and y3 < 50 and y4 < 50: # file_list1.remove(imagePath) # else: # cv_num_list1.append(fm1) # # 打印清晰度值: # print("fm",fm) # # 打印文件路径 # print("imagePath",imagePath) cv_num_list1.append(fm1) # 打印清晰度值: print("fm1",fm1) # 打印文件路径 print("imagePath1",imagePath1) file_cv_tuple1 = tuple(zip(cv_num_list1,file_list1)) print("file_cv_tuple1:\n",file_cv_tuple1) print("=========================================/n") file_cv_tuple_list1 = list(file_cv_tuple1) print("file_cv_tuple_list1:\n",file_cv_tuple_list1) print("*****************************************/n") # 按照清晰度排序:, reverse=True降序 result1 = sorted(file_cv_tuple_list1, key=lambda s: s[0],reverse=True) print("result1:\n",result1) # 切片取清晰度最高的前五张图片: result1_5 = result1[0:3] # result5 = result[0:1] print("result1_5:\n",result1_5) # # ----------------------------------------------------------- # file_list = [] # for i in result1_5: # file_list.append(i[1]) # for imagePath in file_list[::]: # # 孢子仪图片过小删除 # if os.path.getsize(imagePath) <= 10: # file_list.remove(imagePath) # # 加载图像,将其转换为灰度,然后计算 # # 使用拉普拉斯方差对图像进行聚焦测量 # image = cv2.imread(imagePath) # gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # fm = variance_of_laplacian(gray) # # 加载图片 # img = Image.open(imagePath) # # 获取图像的 # height = img.size[0] # width = img.size[1] # im=Image.open(imagePath) # print(im.mode) #查看图像的模式 # im1=im.convert("YCbCr") #转换图像的模式到视频模式 # y1,cb1,cr1=im1.getpixel((height*0.2,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y2,cb2,cr2=im1.getpixel((height*0.8,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y3,cb3,cr3=im1.getpixel((height*0.2,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y4,cb4,cr4=im1.getpixel((height*0.8,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # if y1 < 50 and y2 < 50 and y3 < 50 and y4 < 50: # file_list.remove(imagePath) # else: # cv_num_list.append(fm) # # 打印清晰度值: # print("fm",fm) # # 打印文件路径 # print("imagePath",imagePath) # print("////////////////////////////////////////////////////////n") # print("cv_num_list:\n",cv_num_list) # # 清晰度列表和文件列表对应,生成dict # # file_cv_dict = dict(zip(cv_num_list,file_list)) # # 清晰度列表和文件列表对应,生成tuple # file_cv_tuple = tuple(zip(cv_num_list,file_list)) # print("file_cv_tuple:\n",file_cv_tuple) # print("=========================================/n") # file_cv_tuple_list = list(file_cv_tuple) # print("file_cv_tuple_list:\n",file_cv_tuple_list) # print("*****************************************/n") # # 按照清晰度排序:, reverse=True降序 # result = sorted(file_cv_tuple_list, key=lambda s: s[0],reverse=True) # print("result:\n",result) # # 切片取清晰度最高的前五张图片: # # result5 = result[0:5] # result5 = result[0:1] # print("result5:\n",result5) # --------------------------------------------------------------------------------------- pic_name = datetime.datetime.now().strftime('%Y%m') # 定义要创建的目录: mkpath="./pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name # 调用函数,创建目录: mkdir(mkpath) for i in result1_5: # for i in result5: #i值:(137.06453470539032, 'images\\192.168.2.64_01_20190802095315882_ALARM_INPUT.jpg') print("file path:",i[1]) #复制文件: shutil.copy(i[1],mkpath) # os.system("rm ./pyftp/ftp_file/bzy_test/%s/*.jpg -rf"%imei) os.system("mv ./pyftp/ftp_file/bzy_test/%s ./pyftp/ftp_file/bzy_test/%s_%s"%(imei,imei,datetime.datetime.now().strftime("%Y%m%d%H%M%S"))) print("-----------------image move success----------------------") # equip = Equip.objects.get(equip_id=imei) file_dir="pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name origin = sys.stdout f = open('logs/'+"bzyphoto" + nowtime +'.txt','a') sys.stdout = f print('=================================================') print("<-----imei:\n" + imei + ';\n') print("Message:\n" + "http:bzyphoto" + "----->\n") print("%s"%datetime.datetime.now()) print('=================================================') for root, dirs, files in os.walk(file_dir): print("当前目录为=========>>",root) #当前目录路径 print("当前子目录为=========>>",dirs) #当前路径下所有子目录 print("当前目录文件为=========>>",files) #当前路径下所有非目录子文件 for i in files: photo_addr = file_dir + "/" + i print("文件夹图片路径===========》》",photo_addr) # if BZYphoto.objects.filter(addr=photo_addr).exists(): # print("照片存在") # else: # BZYphoto.objects.create(equip_id=equip, addr=photo_addr) # print("照片不存在") sys.stdout = origin f.close() return except Exception as a: nowtime = datetime.datetime.now().strftime('%Y%m%d') origin = sys.stdout f = open('logs/'+"bzyphoto_exce" + nowtime +'.txt','a') sys.stdout = f print('=================================================') print("<-----imei:\n" + imei + ';\n') print("Message:\n" + "http:bzyphoto" + "----->\n") print("%s"%datetime.datetime.now()) print("==========%s========"%a) print("-----------------image move default----------------------") sys.stdout = origin f.close() return return def bzyphotothread(imei): # nowtime = datetime.datetime.now().strftime('%Y%m%d') # origin = sys.stdout # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a') # sys.stdout = f # print('=================================================') # print("<-----imei:\n" + imei + ';\n') # print("Message:\n" + "http:bzyphoto" + "----->\n") # print("%s"%datetime.datetime.now()) # print('=================================================') pic_name = datetime.datetime.now().strftime('%Y%m') try: pic_name = datetime.datetime.now().strftime('%Y%m') args = "pyftp/ftp_file/bzy_test/" + imei cv_num_list = [] file_list1 = list(paths.list_images(args)) print("\n===========================") print("file_list1:",file_list1) print("type file_list1:",type(file_list1)) cv_num_list1 = [] for imagePath1 in file_list1[::]: # fm = get_value(imagePath) # 孢子仪图片过小删除 if os.path.getsize(imagePath1) <= 10: file_list1.remove(imagePath1) img1 = cv2.imread(imagePath1) img1 = cv2.resize(img1, (800, 600)) gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # 创建SIFT对象 sift = cv2.xfeatures2d.SIFT_create() keypoints, descriptor = sift.detectAndCompute(gray, None) img1 = cv2.drawKeypoints(image=img1, outImage=img1, keypoints=keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0, 0, 255)) fm1 = len(keypoints) cv_num_list1.append(fm1) # 打印清晰度值: # print("fm1",fm1) # # 打印文件路径 # print("imagePath1",imagePath1) file_cv_tuple1 = tuple(zip(cv_num_list1,file_list1)) print("file_cv_tuple1:\n",file_cv_tuple1) print("=========================================/n") file_cv_tuple_list1 = list(file_cv_tuple1) print("file_cv_tuple_list1:\n",file_cv_tuple_list1) print("*****************************************/n") # 按照清晰度排序:, reverse=True降序 result1 = sorted(file_cv_tuple_list1, key=lambda s: s[0],reverse=True) print("result1:\n",result1) # 切片取清晰度最高的前五张图片: result1_5 = result1[0:3] # result5 = result[0:1] print("result1_5:\n",result1_5) pic_name = datetime.datetime.now().strftime('%Y%m') # 定义要创建的目录: mkpath="./pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name # 调用函数,创建目录: mkdir(mkpath) for i in result1_5: # for i in result5: #i值:(137.06453470539032, 'images\\192.168.2.64_01_20190802095315882_ALARM_INPUT.jpg') print("file path:",i[1]) #复制文件: shutil.copy(i[1],mkpath) # os.system("rm ./pyftp/ftp_file/bzy_test/%s/*.jpg -rf"%imei) os.system("mv ./pyftp/ftp_file/bzy_test/%s ./pyftp/ftp_file/bzy_test/%s_%s"%(imei,imei,datetime.datetime.now().strftime("%Y%m%d%H%M%S"))) print("-----------------image move success----------------------") # equip = Equip.objects.get(equip_id=imei) file_dir="pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name for root, dirs, files in os.walk(file_dir): print("当前目录为=========>>",root) #当前目录路径 print("当前子目录为=========>>",dirs) #当前路径下所有子目录 print("当前目录文件为=========>>",files) #当前路径下所有非目录子文件 for i in files: photo_addr = file_dir + "/" + i print("文件夹图片路径===========》》",photo_addr) # if BZYphoto.objects.filter(addr=photo_addr).exists(): # print("照片存在") # else: # BZYphoto.objects.create(equip_id=equip, addr=photo_addr) # print("照片不存在") except Exception as a: print('=================================================') print("<-----imei:\n" + imei + ';\n') print("Message:\n" + "http:bzyphoto" + "----->\n") print("%s"%datetime.datetime.now()) print("==========%s========"%a) print("-----------------image move default----------------------") # sys.stdout = origin # f.close() return # 孢子仪过滤图片接口 class BZY_Mqtt_Photo(ListView): def get(self,request): pass def post(self,request): imeistr = request.body datas = json.loads(request.body.decode()) print("---------",datas["imei"]) imei = datas["imei"] nowtime = datetime.datetime.now().strftime('%Y%m%d') # origin = sys.stdout # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a') # sys.stdout = f # print('=================================================') # print("<-----imei:\n" + imei + ';\n') # print("Message:\n" + "http:bzyphoto" + "----->\n") # print("%s"%datetime.datetime.now()) # print('=================================================') # sys.stdout = origin # f.close() # t = threading.Thread(target=bzyphotothread,args=(imei,)) # t.start() # r = test.delay(imei) # 返回的r不为Done,而是该任务的uniq_id return HttpResponse("0") # def post(self,request): # imeistr = request.body # datas = json.loads(request.body.decode()) # print("---------",datas["imei"]) # imei = datas["imei"] # nowtime = datetime.datetime.now().strftime('%Y%m%d') # origin = sys.stdout # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a') # sys.stdout = f # print('=================================================') # print("<-----imei:\n" + imei + ';\n') # print("Message:\n" + "http:bzyphoto" + "----->\n") # print("%s"%datetime.datetime.now()) # print('=================================================') # sys.stdout = origin # f.close() # pic_name = datetime.datetime.now().strftime('%Y%m') # try: # pic_name = datetime.datetime.now().strftime('%Y%m') # args = "pyftp/ftp_file/bzy_test/" + imei # # 清晰度的list: # cv_num_list = [] # # 文件名的列表 # file_list = list(paths.list_images(args)) # print("\n===========================") # print("file_list:",file_list) # print("type file_list:",type(file_list)) # for imagePath in file_list[::]: # # 孢子仪图片过小删除 # if os.path.getsize(imagePath) <= 10: # file_list.remove(imagePath) # # 加载图像,将其转换为灰度,然后计算 # # 使用拉普拉斯方差对图像进行聚焦测量 # image = cv2.imread(imagePath) # gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # fm = variance_of_laplacian(gray) # # 加载图片 # img = Image.open(imagePath) # # 获取图像的 # height = img.size[0] # width = img.size[1] # im=Image.open(imagePath) # print(im.mode) #查看图像的模式 # im1=im.convert("YCbCr") #转换图像的模式到视频模式 # y1,cb1,cr1=im1.getpixel((height*0.2,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y2,cb2,cr2=im1.getpixel((height*0.8,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y3,cb3,cr3=im1.getpixel((height*0.2,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # y4,cb4,cr4=im1.getpixel((height*0.8,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。 # if y1 < 50 and y2 < 50 and y3 < 50 and y4 < 50: # file_list.remove(imagePath) # else: # cv_num_list.append(fm) # # 打印清晰度值: # print("fm",fm) # # 打印文件路径 # print("imagePath",imagePath) # print("////////////////////////////////////////////////////////n") # print("cv_num_list:\n",cv_num_list) # # 清晰度列表和文件列表对应,生成dict # # file_cv_dict = dict(zip(cv_num_list,file_list)) # # 清晰度列表和文件列表对应,生成tuple # file_cv_tuple = tuple(zip(cv_num_list,file_list)) # print("file_cv_tuple:\n",file_cv_tuple) # print("=========================================/n") # file_cv_tuple_list = list(file_cv_tuple) # print("file_cv_tuple_list:\n",file_cv_tuple_list) # print("*****************************************/n") # # 按照清晰度排序:, reverse=True降序 # result = sorted(file_cv_tuple_list, key=lambda s: s[0],reverse=True) # print("result:\n",result) # # 切片取清晰度最高的前五张图片: # # result5 = result[0:5] # result5 = result[0:1] # print("result5:\n",result5) # pic_name = datetime.datetime.now().strftime('%Y%m') # # 定义要创建的目录: # mkpath="./pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name # # 调用函数,创建目录: # mkdir(mkpath) # for i in result5: # #i值:(137.06453470539032, 'images\\192.168.2.64_01_20190802095315882_ALARM_INPUT.jpg') # print("file path:",i[1]) # #复制文件: # shutil.copy(i[1],mkpath) # # os.system("rm ./pyftp/ftp_file/bzy_test/%s/*.jpg -rf"%imei) # os.system("mv ./pyftp/ftp_file/bzy_test/%s ./pyftp/ftp_file/bzy_test/%s_%s"%(imei,imei,datetime.datetime.now().strftime("%Y%m%d%H%M%S"))) # print("-----------------image move success----------------------") # equip = Equip.objects.get(equip_id=imei) # file_dir="pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name # for root, dirs, files in os.walk(file_dir): # print("当前目录为=========>>",root) #当前目录路径 # print("当前子目录为=========>>",dirs) #当前路径下所有子目录 # print("当前目录文件为=========>>",files) #当前路径下所有非目录子文件 # for i in files: # photo_addr = file_dir + "/" + i # print("文件��图片路径===========》》",photo_addr) # if BZYphoto.objects.filter(addr=photo_addr).exists(): # print("照片存在") # else: # BZYphoto.objects.create(equip_id=equip, addr=photo_addr) # print("照片不存在") # return HttpResponse("2") # except Exception as a: # nowtime = datetime.datetime.now().strftime('%Y%m%d') # origin = sys.stdout # f = open('logs/'+"bzyphoto_exce" + nowtime +'.txt','a') # sys.stdout = f # print('=================================================') # print("<-----imei:\n" + imei + ';\n') # print("Message:\n" + "http:bzyphoto" + "----->\n") # print("%s"%datetime.datetime.now()) # print("==========%s========"%a) # print("-----------------image move default----------------------") # sys.stdout = origin # f.close() # return HttpResponse("1") # return HttpResponse("0") def worker(number): for i in range(20): print(number) print(i) time.sleep(1) return class ThreadView(ListView): def get(self,request): pass def post(self,request): imei = request.POST.get("imei") # t = threading.Thread(target=worker,args=(imei,)) # t.start() # t.join() return HttpResponse("0") # 气象站测试接口 class QXZ_Test(ListView): def get(self,request): pass def post(self,request): data = request.POST.get("data") try: bodydata = request.body print("bodydata=====>>",bodydata) except: pass print("data=====>>",data) return HttpResponse("success") import base64 # 海康测报灯上传图片 class XYcb_Photo(ListView): def get(self,request): pass def post(self,request): auth = request.META.get('HTTP_AUTHORIZATION').split() if len(auth) == 2: if auth[0].lower() == "basic": print("type %r auth1: %r" % (type(auth[1]), auth[1])) uname, passwd = base64.b64decode(auth[1]).decode().split(':') print("uname",uname) print("passwd",passwd) print("验证信息为",auth) photo = request.FILES['upicture'] print("图片:", photo) photo_dir = 'pyftp/ftp_file/cbd_test/' # 判断如果路径不存在,即创建路径 if os.path.exists(photo_dir) == False: os.makedirs(photo_dir) nowtime = datetime.datetime.now().strftime('%Y%m%d') img = Image.open(photo) img.save(photo_dir + nowtime+".jpg") # 数据库关联设备,并在照片的表中存入路径: data = "0" return HttpResponse(data) class Collect_Photo(ListView): def get(self,request): pass def post(self,request): imei = request.POST.get("imei") equip_obj = Equip.objects.get(equip_id=imei) file_dir = "pyftp/ftp_file/ykm_cbd/%s"%imei for root, dirs, files in os.walk(file_dir): print(root) # print("当前目录------->>",root) for roots, dirss, file in os.walk(root): print("当前目录路径>>",roots) #当前目录路径 print("当前路径下所有子目录>>",dirs) #当前路径下所有子目录 print("当前路径下所有非目录子文件>>",file) #当前路径下所有非目录子文件 if file != []: for i in file: photo_addr = roots + "/" + i photo_addr = photo_addr.replace("../","") print(photo_addr) if CBDphoto.objects.filter(addr=photo_addr).exists(): print("照片存在") pass else: # addr = photo_addr addr = photo_addr.split("/")[-1] if "192.168" in addr: print("长addr",addr) _time = addr.split("_")[2][0:14] print("------->>",len(_time)) try: _time = datetime.datetime.strptime(_time,'%Y%m%d%H%M%S') except: continue print(_time) # if i.upl_time.hour != _time.hour: # i.upl_time = _time # i.save() elif len(addr) == 18: print("短addr",addr) _time = addr.split(".")[0][0:14] print("------->>",len(_time)) _time = _time.split("\r")[0] try: _time = datetime.datetime.strptime(_time,'%Y%m%d%H%M%S') except: continue print(_time) # if i.upl_time.hour != _time.hour: # i.upl_time = _time # i.save() try: print("图片时间为",_time) except: return HttpResponse("0") print("图片链接为",photo_addr) CBDphoto.objects.create(equip_id=equip_obj,addr=photo_addr,upl_time=_time) print('=================================================') return HttpResponse("1")