import json import random import re from io import BytesIO import hashlib import requests import xlwt from django.contrib.auth.hashers import check_password, make_password # Create your views here. from django.http import HttpResponse, JsonResponse, StreamingHttpResponse from django.shortcuts import redirect, render from django.views.generic import ListView from django.views.generic.base import View from apps.AppInfoManage.models import * from apps.EquipManage.views import CJSONEncoder from apps.Pestapp.views import verification_code from django.db.models import Q import os import time import datetime from PIL import Image #判断当前登录用户类型 class Judge_User(ListView): def get(self, request): name = request.session.get("username") # name = "admin" user_name = MyUser.objects.get(username=name) if user_name.is_superuser == True and user_name.is_staff == True and user_name.is_active == True: data = 1 print("管理员") else: consumer = Purchase.objects.filter(userid=user_name) if consumer.exists(): data = 2 print("用户已购买") else: data = 3 return HttpResponse(data) #筛选未购买的用户 def post(self, request): page = int(request.POST.get("page")) ret = request.POST.get("ret") user_list = MyUser.objects.all() data = [] #未分配 date = [] #已分配 for i in user_list: buy_user = Purchase.objects.filter(userid=i.id) if buy_user.exists(): date.append({ "username":i.username,"email":i.email,"time":i.date_joined.strftime("%Y-%m-%d %H:%M:%S"), "phone":i.user_phone,"ret":"2" }) else: data.append({ "username":i.username,"email":i.email,"time":i.date_joined.strftime("%Y-%m-%d %H:%M:%S"), "phone":i.user_phone,"ret":"1" }) if ret == "now": # 以购买用户 num = len(date) dat = date[(10*(page-1)):(page*10)] elif ret == "off": #未购买用户 num = len(data) dat = data[(10*(page-1)):(page*10)] elif ret == "all": # 全部用户 dats = date + data num = len(dats) dat = dats[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) return HttpResponse(data) #分配账号页面 class Allocation(ListView): def get(self, request): return render(request, "pestDiagnosis/insect_allocation.html", context={}) #取消分配: class Cancel_Branch(ListView): def post(self, request): name = request.POST.get("name") ret = request.POST.get("ret") data = [] names = MyUser.objects.get(username=name) if ret == "del": #取消分配 p_user = Purchase.objects.filter(userid=names) if p_user.exists(): Purchase.objects.get(userid__username=name).delete() data = 1 else: data = 3 elif ret == "screen": # 按用户名字进行筛选 user_list = MyUser.objects.filter(username=name) for i in user_list: data.append({ "username":i.username,"email":i.email,"time":i.date_joined.strftime("%Y-%m-%d %H:%M:%S"), "phone":i.user_phone }) elif ret == "dist": #分配账号 p_user = Purchase.objects.filter(userid=names) if p_user.exists(): data = 2 else: Purchase.objects.create(userid=names) data = 0 print("分配账号") data = json.dumps(data) return HttpResponse(data) #查看采集数据详情和当前账号下所有测报员信息 class Look_User(ListView): def get(self, request): return render(request, "pestDiagnosis/pestDiagnosisList.html", context={}) def post(self, request): name = request.session.get("username") user_name = MyUser.objects.get(username=name) page = int(request.POST.get("page")) data = [] if user_name.is_superuser == True and user_name.is_staff == True and user_name.is_active == True: print("管理员") account = User_Reporter.objects.all() else: print("普通用户") account = User_Reporter.objects.filter(user_id=user_name) num = account.count() for i in account: data.append({ "name": i.name, "phone": i.phone, "time": i.time.strftime("%Y-%m-%d %H:%M:%S"), "addr": i.addr, "id": i.id, "user_id": i.user_id.username }) dat = data[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) return HttpResponse(data) #新增数据省市县三级联动 class Cate_Insect(ListView): def get(self, request): name = request.session.get("username") print("name", name) user_name = MyUser.objects.get(username=name) addr = Address_Province.objects.filter(id__lt=35) insect = Insect_Plant.objects.filter(ids=user_name) return render(request, "pestDiagnosis/newPestDiagnosis.html", context={"addr": addr, "insect": insect}) def post(self, request): code = request.POST.get("code") if code: city = Address_Province.objects.filter(parent_code=code) citys = [] for i in city: citys.append( {"name": i.name, "parent_code": i.parent_code, "code": i.code}) new_s = [] for x in citys: if x not in new_s: new_s.append(x) data = json.dumps(new_s) else: data = 0 return HttpResponse(data) #分配子账号秘钥 class New_Code(ListView): def get(self, request): word = verification_code().encode("utf-8") password = hashlib.sha1(word).hexdigest() pass_word = password[8:] data = {"dat": pass_word} data = json.dumps(data) return HttpResponse(data) #分配测报员账号接口 class New_Reporter(ListView): def post(self, request): names = request.POST.get("username") password = request.POST.get("password") phone = request.POST.get("phone") addr = request.POST.get("addr") user_por = request.POST.get("user_por") user_city = request.POST.get("user_city") user_area = request.POST.get("user_area") code = request.POST.get("code") name = request.session.get("username") user_name = MyUser.objects.get(username=name) if not all([names,password,user_area,user_city,user_por,code,name,user_name]): data = 0 return HttpResponse(data) prov = Address_Province.objects.get(code=user_por) # 省 prov = str(prov) citys = Address_Province.objects.get(code=user_city) # 市 citys = str(citys) areaes = Address_Province.objects.get(code=user_area) # 区 areaes = str(areaes) addrs = prov + citys + areaes + addr reporter = User_Reporter.objects.filter(user_id=user_name) num = reporter.count() if num == 3: data = 2 return HttpResponse(data) else: if reporter: for i in reporter: if i.name == names: data = 0 print("该{}账号下已存在{}".format(i.name, names)) return HttpResponse(data) else: password = make_password(password) User_Reporter.objects.create( user_id=user_name, name=names, password=password, phone=phone, addr=addrs) Encryption.objects.create(cipher=code) data = 1 return HttpResponse(data) else: password = make_password(password) User_Reporter.objects.create( user_id=user_name, name=names, password=password, phone=phone, addr=addrs) Encryption.objects.create(cipher=code) data = 1 return HttpResponse(data) #生成激活码主账号激活码 class Activation_Code(ListView): def get(self, request): name = request.session.get("username") print("name:", name) uid = MyUser.objects.get(username=name) if uid.is_superuser == True and uid.is_staff == True and uid.is_active == True: print("管理员") word = verification_code().encode("utf-8") password = hashlib.sha1(word).hexdigest() pass_word = password[8:] print(pass_word) Encryption.objects.create(cipher=pass_word) data = pass_word else: print("普通用户") data = 0 return HttpResponse(data) #查看主账号下测报员信息 class User_Account(ListView): def get(self, request): name = request.session.get("username") uid = MyUser.objects.get(username=name) data = [] account = User_Account.objects.filter(user_id=uid) for i in account: data.append({ "name": i.name, "phone": i.phone, "time": i.time.strftime("%Y-%m-%d %H:%M:%S"), "addr": i.addr, "id": i.id, "user_id": i.user_id.username }) data = json.dumps(data) return HttpResponse(data) #重置测报员密码 def post(self, request): password = request.POST.get("password") password1 = request.POST.get("password1") cbyid = request.POST.get("id") if not all([password,password1,cbyid]): data = 0 return HttpResponse(data) user_list = User_Reporter.objects.get(id=cbyid) if password == password1: password = make_password(password) user_list.password = password user_list.save() data = 1 else: data = 0 return HttpResponse(data) #查看主用户下所有的测报员的信息,所有的识别记录 、已录信息 class Check_Account(ListView): def get(self, request): ret = request.GET.get("ret") req = request.GET.get("req") page = int(request.GET.get("page")) name = request.session.get("username") # name = "admin" print("name", name) user_name = MyUser.objects.get(username=name) if not all([ret,req,page,name,user_name]): data = 0 return HttpResponse(data) data = [] gly = '' if user_name.is_superuser == True and user_name.is_staff == True and user_name.is_active == True: print("管理员") if ret == "2": insects = App_Insect.objects.filter(~Q(name=None)) elif ret == "1": insects = App_Plant.objects.filter(~Q(name=None)) gly = 1 else: print("普通用户") if ret == "2": insects = App_Insect.objects.filter(~Q(name=None), userid=user_name) elif ret == "1": insects = App_Plant.objects.filter(~Q(name=None), userid=user_name) if gly == 1: #指明是登录身份是管理员 insect = User_Data_Table_New.objects.filter(harm_id__pest_sort=ret) else: insect = User_Data_Table_New.objects.filter(user_id__user_id=user_name,harm_id__pest_sort=ret) if req == "cord": # 已录信息 for i in insect: data.append({"user_name":i.user_id.name,"growth_stages":i.growth_stages,"area":i.area,"pest_name":i.harm_id.pest_name,"month":i.harm_id.month_id.month, "pest":i.harm_id.pest,"crop_sort":i.harm_id.crop_sort,"cens_method":i.cens_method,"city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S') ,"city_id":i.harm_id.month_id.addr_id.id,"harm_id":i.harm_id.id,"pest_sort":i.harm_id.pest_sort,"username":i.user_id.user_id.username, }) num = insect.count() elif req == "disc": #识别信息 for x in insects: data.append({"username": x.userid.username, "reporter": x.reporter_id.name, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "course": x.course, "name": x.name, "addr": x.addr, "id": x.id, "ret": ret, "req": req}) num = insects.count() dat = data[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) return HttpResponse(data) #查看已录和识别数据详情信息 def post(self, request): account_id = request.POST.get("id") ret = request.POST.get("ret") req = request.POST.get("req") dats = [] #病虫害照片列表 date = [] # 病虫害值 data = [] #数据列表 if ret == "2": insect = App_Insect.objects.filter(id=account_id) elif ret == "1": insect = App_Plant.objects.filter(id=account_id) if req == "cord": user_list = User_Data_Table_New.objects.filter(id=account_id) for i in user_list: #病害级别转换成list pestname = eval(i.pestname) key = list(pestname) valu = list(pestname.values()) for x in range(len(key)): date.append({key[x]: valu[x]}) # da.append(i.pestname) #判断用户上传的图片是多张还是一张进行切割 if i.addr_photo.find(",") != -1: prc_list = i.addr_photo.split(",") for y in prc_list: dats.append(y) else: dats.append(i.addr_photo) data.append({"user_name":i.user_id.name,"growth_stages":i.growth_stages,"addr_photo":dats,"pestname":date,"area":i.area,"pest_name":i.harm_id.pest_name,"month":i.harm_id.month_id.month, "pest":i.harm_id.pest,"crop_sort":i.harm_id.crop_sort,"cens_method":i.cens_method,"city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S') ,"city_id":i.harm_id.month_id.addr_id.id,"harm_id":i.harm_id.id,"pest_sort":i.harm_id.pest_sort,"username":i.user_id.user_id.username, }) elif req == "disc": for x in insect: data.append({"username": x.userid.username, "reporter": x.reporter_id.name, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "course": x.course, "name": x.name, "addr": x.addr, "img": x.img.name, "img_urls": x.img_urls, "prevention": x.prevention, "id": x.id, "ret": ret, "req": req,"lat": x.lat, "lng": x.lng, }) data = json.dumps(data) return HttpResponse(data) #删除测报员账号 class Del_Account(ListView): def post(self, request): cbyid = request.POST.get("id") if not all([cbyid]): data = 0 return HttpResponse(data) try: user_list = User_Reporter.objects.get(id=cbyid).delete() data = 1 except Exception as e: print(e) data = 0 return HttpResponse(data) #删除指定数据 只删除数据,但是图片保留 class Del_Mation(ListView): def post(self,request): ids = request.POST.get("id") ret = request.POST.get("ret") data = [] try: if ret == "2": insects = App_Insect.objects.get(id=ids) if os.path.exists(insects.img): os.remove(insects.img) elif ret == "1": insects = App_Plant.objects.get(id=ids) if os.path.exists(insects.img): os.remove(insects.img) else: insects = User_Data_Table_New.objects.get(id=ids) if insects.addr_photo.find(",") != -1: pic_list = insects.addr_photo.split(",") for x in pic_list: if os.path.exists(x): os.remove(x) else: print(insects.addr_photo) if os.path.exists(insects.addr_photo): os.remove(insects.addr_photo) insects.delete() data = 1 except Exception as e: data = 0 print(e) return HttpResponse(data) #测报员数据页面 class See_Account(ListView): def get(self, request): return render(request, "pestDiagnosis/dataList.html", context={}) #测报员数据详情页面 class See_Mation(ListView): def get(self, request): return render(request, "pestDiagnosis/details.html", context={}) #查看指定测报员下的数据, class Look_Account(ListView): def post(self, request): ret = request.POST.get("ret") print("ret",ret) req = request.POST.get("req") print("req",req) reporter_id = request.POST.get("id") print(reporter_id) page = int(request.POST.get("page")) dat = [] da = [] data = [] if ret == "2": insect = App_Insect.objects.filter(~Q(name=None),reporter_id=reporter_id) elif ret == "1": insect = App_Plant.objects.filter(~Q(name=None),reporter_id=reporter_id) if req == "cord": # 已录信息 insect = User_Data_Table_New.objects.filter(harm_id__pest_sort=ret, user_id=reporter_id) for i in insect: data.append({"user_name":i.user_id.name,"growth_stages":i.growth_stages,"area":i.area,"pest_name":i.harm_id.pest_name,"month":i.harm_id.month_id.month, "pest":i.harm_id.pest,"crop_sort":i.harm_id.crop_sort,"cens_method":i.cens_method,"city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S') ,"city_id":i.harm_id.month_id.addr_id.id,"harm_id":i.harm_id.id,"pest_sort":i.harm_id.pest_sort,"username":i.user_id.user_id.username, }) elif req == "disc": #识别记录 for x in insect: data.append({"username": x.userid.username, "reporter": x.reporter_id.name, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "course": x.course, "name": x.name, "addr": x.addr, "id": x.id, "ret": ret, "req": req }) num = insect.count() dat = data[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) print("data",data) return HttpResponse(data) #按病虫害名字进行筛选和筛选某一测报员下病虫害名字数据 class Screen_Name(ListView): def post(self, request): ret = request.POST.get("ret") req = request.POST.get("req") plant_name = request.POST.get("name") page = int(request.POST.get("page")) name = request.session.get("username") repor_id = request.POST.get("id") print("name", name) # name = "admin" user_name = MyUser.objects.get(username=name) print(user_name) data = [] #__contains 模糊查询 if ret == "2": insects = App_Insect.objects.filter(Q(name__contains=plant_name,userid=user_name) | Q(name__contains=plant_name,reporter_id=repor_id) ) elif ret == "1": insects = App_Plant.objects.filter(Q(name__contains=plant_name,userid=user_name) | Q(name__contains=plant_name,reporter_id=repor_id)) if req == "cord": #已录数据 insects = User_Data_Table_New.objects.filter(Q(harm_id__pest_name__contains=plant_name,harm_id__pest_sort=ret,user_id__user_id__username=user_name) | Q (harm_id__pest_name__contains=plant_name,harm_id__pest_sort=ret,user_id=repor_id)) for i in insects: data.append({"user_name":i.user_id.name,"growth_stages":i.growth_stages,"area":i.area,"pest_name":i.harm_id.pest_name,"month":i.harm_id.month_id.month, "pest":i.harm_id.pest,"crop_sort":i.harm_id.crop_sort,"cens_method":i.cens_method,"city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S') ,"city_id":i.harm_id.month_id.addr_id.id,"harm_id":i.harm_id.id,"pest_sort":i.harm_id.pest_sort,"username":i.user_id.user_id.username, }) elif req == "disc": #识别信息 for x in insects: data.append({"username": x.userid.username, "reporter": x.reporter_id.name, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "course": x.course, "name": x.name, "addr": x.addr, "id": x.id, "ret": ret, "req": req}) num = insects.count() dat = data[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) return HttpResponse(data) #按时间段筛选 class Screen_Hour(ListView): def post(self, request): ret = request.POST.get("ret") req = request.POST.get("req") start_time = request.POST.get("stat_time") end_time = request.POST.get("end_time") page = int(request.POST.get("page")) data = [] name = request.session.get("username") print("name", name) # name = "admin" user_name = MyUser.objects.get(username=name) if ret == "2": insects = App_Insect.objects.filter(~Q(name=None),userid=user_name,time__range=(start_time,end_time)) elif ret == "1": insects = App_Plant.objects.filter(~Q(name=None),userid=user_name,time__range=(start_time,end_time)) if req == "cord": inseects = User_Data_Table_New.objects.filter(user_id__user_id__username=user_name,upl_time__range=(start_time,end_time)) for i in insects: data.append({"user_name":i.user_id.name,"growth_stages":i.growth_stages,"area":i.area,"pest_name":i.harm_id.pest_name,"month":i.harm_id.month_id.month, "pest":i.harm_id.pest,"crop_sort":i.harm_id.crop_sort,"cens_method":i.cens_method,"city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S') ,"city_id":i.harm_id.month_id.addr_id.id,"harm_id":i.harm_id.id,"pest_sort":i.harm_id.pest_sort,"username":i.user_id.user_id.username, }) elif req == "disc": for x in insects: data.append({"username": x.userid.username, "reporter": x.reporter_id.name, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "course": x.course, "name": x.name, "addr": x.addr, "id": x.id, "ret": ret, "req": req}) num = insects.count() dat = data[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) return HttpResponse(data) # #测报员下病虫害名字筛选 # class Screen_Pests_Name(ListView): # def post(self, request): # ret = request.POST.get("ret") # req = request.POST.get("req") # bch_name = request.POST.get("name") # page = int(request.POST.get("page")) # cby_id = request.POST.get("id") # data = [] # if not all ([ret,bch_name,cby_id,req,page]): # data = 0 # return HttpResponse(data) # #__contains 模糊查询 # if ret == "insect": # types = "2" # genre = "虫害" # insects = App_Insect.objects.filter(name__contains=bch_name,reporter_id=cby_id) # elif ret == "plant": # types = "1" # genre = "病害" # insects = App_Plant.objects.filter(name__contains=bch_name,reporter_id=cby_id) # if req == "cord": # insects = User_Data_Table.objects.filter(names__contains=bch_name,statistical=types,reporter_id=cby_id) # for i in insects: # data.append({"user_id": i.user_id.username, "reporter_id": i.reporter_id.name, "time": i.time.strftime("%Y-%m-%d %H:%M:%S"), # "user_city": i.user_city, "insect_sort": i.insect_sort, "area": i.area, "names": i.names, "genre": genre, "statistical_method": i.statistical_method, # "id": i.id, "ret": ret, "req": req}) # elif req == "disc": # for x in insects: # data.append({"username": x.userid.username, "reporter": x.reporter_id.name, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "course": x.course, # "name": x.name, "addr": x.addr, "id": x.id, "ret": ret, "req": req,"genre":genre}) # num = insects.count() # dat = data[(10*(page-1)):(page*10)] # data = {"dat": dat, "num": num} # data = json.dumps(data) # return HttpResponse(data) #测报员下时间段筛选 class Screen_Extent_Time(ListView): def post(self, request): ret = request.POST.get("ret") req = request.POST.get("req") start_time = request.POST.get("stat_time") end_time = request.POST.get("end_time") page = int(request.POST.get("page")) reporter_id = request.POST.get("id") data = [] if ret == "2": insects = App_Insect.objects.filter(~Q(name=None),reporter_id=reporter_id,time__range=(start_time,end_time)) elif ret == "1": insects = App_Plant.objects.filter(~Q(name=None),reporter_id=reporter_id,time__range=(start_time,end_time)) if req == "cord": inseects = User_Data_Table_New.objects.filter(user_id=reporter_id,upl_time__range=(start_time,end_time)) for i in insects: data.append({"user_name":i.user_id.name,"growth_stages":i.growth_stages,"area":i.area,"pest_name":i.harm_id.pest_name,"month":i.harm_id.month_id.month, "pest":i.harm_id.pest,"crop_sort":i.harm_id.crop_sort,"cens_method":i.cens_method,"city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S') ,"city_id":i.harm_id.month_id.addr_id.id,"harm_id":i.harm_id.id,"pest_sort":i.harm_id.pest_sort,"username":i.user_id.user_id.username, }) elif req == "disc": for x in insects: data.append({"username": x.userid.username, "reporter": x.reporter_id.name, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "course": x.course, "name": x.name, "addr": x.addr, "id": x.id, "ret": ret, "req": req}) num = insects.count() dat = data[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) return HttpResponse(data) # 导出excel文件指定测报员下虫害、病害、指定数据 class Export_Excel(ListView): def get(self, request): reporter_id = request.GET.get("id") ret = request.GET.get("ret") name = request.session.get("username") print("name", name) # name = "admin" user_name = MyUser.objects.get(username=name) # 创建一个文件对象 wb = xlwt.Workbook(encoding="utf8") # 创建一个sheet对象 sheet = wb.add_sheet("sheet1",cell_overwrite_ok=True) # 设置文件头的样式,这个不是必须的可以根据自己的需求进行更改 style_heading = xlwt.easyxf(""" font: name Arial, colour_index white, bold on, height 0xA0; align: wrap off, vert center, horiz center; pattern: pattern solid, fore-colour 0x19; borders: left THIN, right THIN, top THIN, bottom THIN; """) # 写入文件标题 sheet.write(0, 0, "测报员", style_heading) sheet.write(0, 1, "创建时间", style_heading) sheet.write(0, 2, "详细地址", style_heading) sheet.write(0, 3, "所属分类", style_heading) sheet.write(0, 4, "统计面积", style_heading) sheet.write(0, 5, "病害虫害名称", style_heading) sheet.write(0, 6, "病害值", style_heading) sheet.write(0, 7, "统计种类", style_heading) sheet.write(0, 8, "统计方法", style_heading) sheet.write(0, 9, "生育期", style_heading) sheet.write(0, 10, "月份", style_heading) data_row = 1 date = [] # if ret == "insect": #虫害 # types = "2" # user_list = User_Data_Table.objects.filter(reporter_id=cbyid,statistical=types) # elif ret == "plant": # 病害 # types = "1" # user_list = User_Data_Table.objects.filter(reporter_id=cbyid, statistical=types) if ret == "addr": #单条 user_list = User_Data_Table_New.objects.filter(id=reporter_id) elif ret == "whole": #该测报员下所有已录数据 user_list = User_Data_Table_New.objects.filter(user_id=reporter_id) else: user_list = User_Data_Table_New.objects.filter(user_id=reporter_id,harm_id__pest_sort=ret) # else: # data = 0 # return HttpResponse(data) for i in user_list: if i.harm_id.pest_sort == "1": pest_sort = "病害" elif i.harm_id.pest_sort == "2": pest_sort = "虫害" pestname = eval(i.pestname) key = list(pestname) valu = list(pestname.values()) for x in range(len(key)): date.append(key[x] + ":" + valu[x]) # date.append(i.pestname) pri_time = i.upl_time.strftime("%Y-%m-%d") sheet.write(data_row, 0, i.user_id.name) sheet.write(data_row, 1, pri_time) sheet.write(data_row, 2, i.harm_id.month_id.addr_id.name) sheet.write(data_row, 3, i.harm_id.pest) sheet.write(data_row, 4, i.area) sheet.write(data_row, 5, i.harm_id.pest_name) sheet.write(data_row, 6, date) sheet.write(data_row, 7, i.harm_id.pest_sort) sheet.write(data_row, 8, i.cens_method) sheet.write(data_row, 9, i.growth_stages) sheet.write(data_row, 10, i.harm_id.month_id.month) data_row = data_row + 1 output = BytesIO() wb.save(output) output.seek(0) # 后端进行保存,前端进行下载 # 设置HTTPResponse的类型 response = HttpResponse(content_type="application/vnd.ms-excel") response["Content-Disposition"] = "attachment;filename={}.xls".format(user_name) response.write(output.getvalue()) return response #导出主账号下所有已录信息 class Export_Mation(ListView): def get(self, request): ret = request.GET.get("ret") name = request.session.get("username") print("name", name) # name = "admin" user_name = MyUser.objects.get(username=name) # 创建一个文件对象 wb = xlwt.Workbook(encoding="utf8") # 创建一个sheet对象 sheet = wb.add_sheet("sheet1",cell_overwrite_ok=True) # 设置文件头的样式,这个不是必须的可以根据自己的需求进行更改 style_heading = xlwt.easyxf(""" font: name Arial, colour_index white, bold on, height 0xA0; align: wrap off, vert center, horiz center; pattern: pattern solid, fore-colour 0x19; borders: left THIN, right THIN, top THIN, bottom THIN; """) # 写入文件标题 sheet.write(0, 0, "测报员", style_heading) sheet.write(0, 1, "创建时间", style_heading) sheet.write(0, 2, "详细地址", style_heading) sheet.write(0, 3, "所属分类", style_heading) sheet.write(0, 4, "统计面积", style_heading) sheet.write(0, 5, "病害虫害名称", style_heading) sheet.write(0, 6, "病害值", style_heading) sheet.write(0, 7, "统计种类", style_heading) sheet.write(0, 8, "统计方法", style_heading) sheet.write(0, 9, "生育期", style_heading) sheet.write(0, 10, "月份", style_heading) data_row = 1 date = [] if ret == "user": #全部 user_list = User_Data_Table_New.objects.filter(user_id__user_id=user_name) else: user_list = User_Data_Table_New.objects.filter(user_id__user_id=user_name, harm_id__pest_sort=ret) for i in user_list: if i.harm_id.pest_sort == "1": pest_sort = "病害" elif i.harm_id.pest_sort == "2": pest_sort = "虫害" pestname = eval(i.pestname) key = list(pestname) valu = list(pestname.values()) for x in range(len(key)): date.append(key[x] + ":" + valu[x]) # date.append(i.pestname) pri_time = i.upl_time.strftime("%Y-%m-%d") sheet.write(data_row, 0, i.user_id.name) sheet.write(data_row, 1, pri_time) sheet.write(data_row, 2, i.harm_id.month_id.addr_id.name) sheet.write(data_row, 3, i.harm_id.pest) sheet.write(data_row, 4, i.area) sheet.write(data_row, 5, i.harm_id.pest_name) sheet.write(data_row, 6, date) sheet.write(data_row, 7, i.harm_id.pest_sort) sheet.write(data_row, 8, i.cens_method) sheet.write(data_row, 9, i.growth_stages) sheet.write(data_row, 10, i.harm_id.month_id.month) data_row = data_row + 1 output = BytesIO() wb.save(output) output.seek(0) # 后端进行保存,前端进行下载 # 设置HTTPResponse的类型 response = HttpResponse(content_type="application/vnd.ms-excel") response["Content-Disposition"] = "attachment;filename={}.xls".format(user_name) response.write(output.getvalue()) return response #扫码下载 class App_Upder(ListView): def get(self, request): return render(request, "home/appDownload.html") #扫码下载(针对赵珍统计器) class App_Upder2(ListView): def get(self, request): return render(request, "home/appDownload2.html") # 赵珍天意、惠普森扫码下载 #天意 class App_Upder3(ListView): def get(self, request): return render(request, "home/appDownload_ty.html") #惠普森 class App_Upder4(ListView): def get(self, request): return render(request, "home/appDownload_lpc.html") #知虫app 下载 class App_Load(ListView): def get(self, request): return render(request, "home/appDownload_zc.html") #统计器中性 下载 class App_Neutral_Load(ListView): def get(self, request): return render(request, "home/appDownload_zc.html") #已录信息饼状图统计页面 class Pie_Chart(ListView): def get(self, request): return render(request,"pestDiagnosis/insectStatistics.html", context={}) #已录信息饼状图数据展示 class Show_Pie_Chart(ListView): def get(self, request): ret = request.GET.get("ret") name = request.session.get("username") print("name", name) # name = "admin" user_name = MyUser.objects.get(username=name) data = [] date = [] user_list = User_Data_Table_New.objects.filter(user_id__user_id=user_name,harm_id__pest_sort=ret) if user_list: for i in user_list: num = user_list.objects.filter(harm_id__pest_name=i.names).count() date.append({"name":i.names,"value":num}) for x in date: if x not in data: data.append(x) data = json.dumps(data) return HttpResponse(data) #已录信息柱状图 class Line_Chart(ListView): def get(self,request): name = request.session.get("username") # name = "admin" user_name = MyUser.objects.get(username=name) data = [] user_list = User_Reporter.objects.filter(user_id=user_name) for i in user_list: plant = str(User_Data_Table_New.objects.filter(user_id=i.id,harm_id__pest_sort="1").count()) insect = str(User_Data_Table_New.objects.filter(user_id=i.id,harm_id__pest_sort="2").count()) data.append({"name":i.name,"cby_plant":plant,"cby_insect":insect}) data = json.dumps(data) return HttpResponse(data) #已录信息害虫统计报表 class Reporting(ListView): def get(self, request): name = request.session.get("username") user_name = MyUser.objects.get(username=name) data = [] user_list = User_Reporter.objects.filter(user_id=user_name) for i in user_list: data.append({"id":i.id,"name":i.name}) data = json.dumps(data) return HttpResponse(data) def post(self, request): ret = request.POST.get("ret") reporter_id = request.POST.get("id") page = int(request.POST.get("page")) data = [] user_list = User_Data_Table_New.objects.filter(user_id=reporter_id,harm_id__pest_sort=ret) for i in user_list: data.append({"name":i.harm_id.pest_name,"cby_name":i.user_id.name,"time":i.upl_time.strftime("%Y-%m-%d %H:%M:%S")}) num = user_list.count() dat = data[(10*(page-1)):(page*10)] data = {"dat": dat, "num": num} data = json.dumps(data) return HttpResponse(data) #数据重传 class again_data(View): def post(self,request): username = request.POST.get("username") start_time = request.POST.get('start_time') end_time = request.POST.get('end_time') imei = request.POST.get("imei") data_url = request.POST.get("data_url") img_url = request.POST.get("img_url") ret = int(request.POST.get("ret")) need_result= request.POST.get("need") #时间切割 begindate = re.findall(r"\d+\.?\d*", start_time) enddate = re.findall(r"\d+\.?\d*", end_time) 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])) if username == "admin": if ret == 2: scd_sta = SCDstatus_all.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) scd_dat = SCDdata.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) for i in scd_sta: #状态数据 data = eval(i.scd_status) data = json.dumps(data) res = requests.post(data_url,data=data,timeout=(50,100)) print(res.status_code) for x in scd_dat: #全部数据 data = eval(x.scd_data) data = json.dumps(data) res = requests.post(data_url,data=data,timeout=(50,100)) print(res.status_code) elif ret == 3: cbd_sta = CBDstatus_all.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) cbd_dat = CBDdata.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) requests.adapters.DEFAULT_RETRIES = 5 # 增加重连次数 s = requests.session() s.keep_alive = False # 关闭多余连接 if data_url: for i in cbd_sta: #状态数据 data = eval(i.cbd_status) datt = {"topic": "/yfkj/cbd/pub/868956044831620", "payload":{"cmd":"status", "ext":data}} data = json.dumps(datt) time.sleep(0.1) res = requests.post(data_url,data=data,timeout=(50,100)) print(res.status_code) for x in cbd_dat: #全部数据 data = eval(x.cbd_data) datt = {"topic": "/yfkj/cbd/pub/868956044831620", "payload":{"cmd":"data", "ext":data}} data = json.dumps(datt) time.sleep(0.2) res = requests.post(data_url,data=data,timeout=(50,100)) print(res.status_code) else: cbd_img_list = CBDphoto.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) # equip = Equip.objects.get(equip_id=imei) # if equip.ftp_addr: # # http://120.27.222.26/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": #带识别 for i in cbd_img_list: # print("1111111111111111111",i.indentify_photo) img_addr_1 = "http://www.yfzhwlw.com/" + i.addr if i.indentify_photo: indentify_photo_1 = "http://www.yfzhwlw.com/" + i.indentify_photo else: indentify_photo_1 = 0 if i.indentify_result: indentify_result = i.indentify_result else: indentify_result = 0 data = { "Image":img_addr_1, "Result_image":indentify_photo_1, "Result":indentify_result, "imei":imei } data = json.dumps(data, cls=CJSONEncoder) print("data:",data) time.sleep(0.1) res_1 = requests.post(img_url,data=data,timeout=(50,100)) print("res_1:",res_1) print("------------------识别结果发送成功!!!") else: #不带识别 for i in cbd_img_list: img_addr_1 = "http://www.yfzhwlw.com/" + i.addr print("img_addr_1:",img_addr_1) data = { "Image":img_addr_1, "imei":imei } data = json.dumps(data, cls=CJSONEncoder) print("data:",data) time.sleep(0.1) res_1 = requests.post(img_url,data=data,timeout=(50,100)) print("res_1:",res_1.text) elif ret == 7: bzy_dat = BZYdata.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) if data_url: for x in bzy_dat: #全部数据 data = eval(x.bzy_data) data = json.dumps(data) headers = {"Content-Type": "application/json; charset=UTF-8", 'Connection': 'close'} res = requests.post(data_url,data=data,timeout=3,headers=headers) print(res.status_code) else: bzy_img_list = BZYphoto.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) for i in bzy_img_list: img_addr_1 = "http://www.yfzhwlw.com/bzy/" + i.addr data = { "Image":img_addr_1, "imei":imei } data = json.dumps(data, cls=CJSONEncoder) print("data:",data) res_1 = requests.post(img_url,data=data,timeout=2) print("res_1:",res_1.text) elif ret == 5: qxz_list = QXZdata_New.objects.filter(equip_id__equip_id=imei,upl_time__range=(start_date,end_date)) for i in qxz_list: data = [i.e1,qxz_list.e2,i.e3,i.e4,i.e5,i.e6,i.e7,i.e8,i.e9,i.e10,i.e11,i.e12,i.e13,i.e14, i.e15,i.e16,i.e17,i.e18, i.e19,i.e20,i.e21,i.e22, i.e23,i.e24,i.e25,i.e26, i.e27,i.e28,i.e29,i.e30] test = [i for i in data if i != ''] return HttpResponse("0") import random #韩英磊曹县测报灯图片上传 class down_img(View): def post(self,request): imgs = request.FILES.get("img") print(imgs) imei = request.POST.get("imei") harm_photo_dir = "cbd_img/"+imei+"/2020/06/" if os.path.exists(harm_photo_dir) == False: os.makedirs(harm_photo_dir) img = Image.open(imgs) end_name = imgs.name.split('.')[-1] now_time = time.strftime( '%Y%m%d%H%M%S', time.localtime(time.time())) pic_name = now_time + '.' + end_name print("pic_name:", pic_name) img.save(harm_photo_dir + pic_name) harm_photos = harm_photo_dir + pic_name ah = random.randint(100,700) at = random.randint(100,400) try: equip_id = Equip.objects.get(equip_id=imei) CBDphoto.objects.create(equip_id=equip_id,addr=harm_photos,at=at,ah=ah) data = {"code":200,"img_path":harm_photos} except Exception as e: data = {"code":400,"img_path":harm_photos} print(e) data = json.dumps(data) return HttpResponse(data) # import qrcode # # from apps.SystemManage.forms import AddUserForm # # ''' # # qrcode.make(str):str为二维码包含的文字信息,也可以是网页链接,返回二维码对象 # # qrcode.save(str):将二维码以str为名保存到本地目录(注意文件的扩展名) # # qrcode.show():运行时展示二维码图案 # # ''' # # #创建包含信息的二维码对象 # # img = qrcode.make("http://baidu.com?id=1") # # #二维码保存 # # img.save('hello.png') # # #展示二维码 # # img.show() # #生成二维码,请求登录接口 # class qr_code(View): # def get(self,request): # img = qrcode.make("http://192.168.1.4:8000/test_log?username=admin&password=yf654321") # path = "qr_code/" # qr_name = "123.jpg" # if os.path.exists(path) == False: # os.makedirs(path) # print() # img.save(path + qr_name) # data = {"qr_code":path+qr_name} # data = json.dumps(data) # return HttpResponse(data) # #登录接口 # class test_log(View): # def get(self,request): # user_name = request.GET.get("username") # pass_word = request.GET.get("password") # print("user_name",user_name) # print("pass_word",pass_word) # HTTP_HOST=request.META['HTTP_HOST'] # print('HTTP_HOST:',HTTP_HOST) # dat = 0 # try: # current_user = MyUser.objects.get(username=user_name) # dat = 1 # except Exception as e: # print(e) # if dat: # if check_password(pass_word, current_user.password) != True: # data = {"code":1001,"nums":"密码错误"} # else: # print('登陆成功') # # 将当前登录的用户名写入session # if current_user.is_superuser: # role = "superuser" # elif current_user.is_staff: # role = "staff" # elif current_user.is_agency: # role = "agency" # else: # role = "user" # request.session['username'] = user_name # data = {"code":1000,"nums":"登录成功","auth":role} # else: # data = {"code":1001,"nums":"当前用户不存在"} # data = json.dumps(data,ensure_ascii=False) # return HttpResponse(data) # # num = 1 # if current_user.is_superuser: # role = "superuser" # elif current_user.is_staff: # role = "staff" # elif current_user.is_agency: # role = "agency" # if Purchase.objects.filter(userid=current_user).exists(): # pass # else: # print(current_user.user_agency) # if current_user.user_agency: # purchase_list = Purchase.objects.filter(userid__user_agency=current_user.user_agency).count() # if purchase_list: # pass # else: # num = 0 # else: # num = 0 # else: # role = "user" # num = Purchase.objects.filter(userid=current_user).count() # # 获取用户所有组: # groups = Group.objects.filter(user=current_user) # print("groups:", groups) # for i in groups: # print("##############:",i.name) # print("当前用户类型:是否为超级管理员", current_user.is_superuser) # # 获取用户的logo组 # logos = Logo.objects.filter(myuser=current_user) # print("logos:",logos) # for i in groups: # print("##############:",i.name) # print("当前用户类型:是否为超级管理员", current_user.is_superuser) # print("---------len:",len(logos)) # if len(logos) == "0": # logos == "" # else: # pass # # 超级管理员没有到期时间 提取不到参数时会报错 # try: # # remaining_days=账户还剩多少天 # remaining_days = (current_user.expire_date - datetime.datetime.now()).days # # 账户的具体到期时间 # user_date = current_user.expire_date # # 将账户的具体到期时间转字符串,取年-月-日 # user_date = datetime.date.strftime(user_date,"%Y-%m-%d %H:%M:%S")[0:10] # except: # return render(request, 'home/home.html', context={'current_user': current_user, 'role': role, 'groups': groups, 'logos':logos,'have':num}) # return render(request, 'home/home.html', context={'current_user': current_user, 'role': role, 'groups': groups, # 'remaining_days':remaining_days, 'user_date':user_date, 'logos':logos,'have':num}) # # return render(request, 'home/home.html', context={'user_name': user_name, 'role': role, 'groups': groups}) # else: # form = AddUserForm() # # # 读取cookie: # # try: # # user_name = request.COOKIES.get('uname') # # # 从cookie中读出的upwd p1为str: # # p1 = request.COOKIES.get('upwd') # # # print("type(p1):", type(p1)) # # # 将str类型的p1转为bytes:p2 # # p2 = bytes(p1, encoding='utf-8') # # # 将p2解密,得到bytes的p3: # # p3 = base64.decodestring(p2) # # # 将p3转为str: # # p4 = str(p3, encoding="utf8") # # pass_word = p4 # # print("读取cookie:用户名:", user_name) # # print("读取cookie:用户密码:", pass_word) # # except: # # user_name = pass_word = None # if HTTP_HOST == "www.yfzhwlw.com" or HTTP_HOST == "yfzhwlw.com" or HTTP_HOST == "120.27.222.26": # return render(request, 'home/login.html', context={'form': form}) # # return render(request, 'home/common_login.html', context={'form': form}) # elif HTTP_HOST == "www.zgzhwlw.com" or HTTP_HOST == "zgzhwlw.com": # return render(request, 'home/common_login.html', context={'form': form}) # elif HTTP_HOST == "127.0.0.1:8000": # return render(request, 'home/login.html', context={'form': form}) # # return render(request, 'home/common_login.html', context={'form': form}) # elif HTTP_HOST == "localhost:8000": # # return render(request, 'home/common_login.html', context={'form': form}) # return render(request, 'home/common_login.html', context={'form': form}) # else: # return render(request, 'home/login.html', context={'form': form})