import datetime import hashlib # Create your views here. import json import os import random import re import subprocess import time import urllib import urllib.parse from datetime import date, datetime from io import BytesIO import requests import xlwt from django.contrib import auth from django.contrib.auth import authenticate from django.contrib.auth import login as auth_login from django.contrib.auth import logout from django.contrib.auth.decorators import login_required from django.contrib.auth.hashers import check_password, make_password from django.core import serializers from django.db.models import Q from django.http import HttpResponse, JsonResponse, StreamingHttpResponse from django.shortcuts import redirect, render from django.utils import timezone from django.views.generic import ListView from django.views.generic.base import View from PIL import Image from _io import StringIO from apps.AppInfoManage.models import * from apps.EquipManage.views import CJSONEncoder from yfwlw_pro import settings from yfwlw_pro.settings import get_client_ip from apps.ReportManage.all_dict import transpont_equip_scd,transpont_equip_cbd,transpont_equip_qxz,transpont_equip_ybq,transpont_equip_bzy # app登陆 class app_log(View): def post(self, request): user_name = request.POST.get("username") pass_word = request.POST.get("password") #校验用户和密码 if User_Reporter.objects.filter(name=user_name).exists(): account = User_Reporter.objects.get(name=user_name) if Purchase.objects.filter(userid__username=account.user_id.username).exists(): ret = check_password(pass_word, account.password) if ret: data = [{ "name": account.name, "photo": account.photo.name, "phone": account.phone, "username": account.user_id.username, "addr": account.addr, "time": account.time.strftime("%Y-%m-%d %H:%M:%S"), "is_active":account.user_id.is_active, 'is_staff':account.user_id.is_staff, 'is_superuser':account.user_id.is_superuser, }] #将当前登录的用户名写入session request.session['username'] = user_name data = json.dumps(data) return HttpResponse(data) else: data = 2 else: data = 2 else: data = 1 data = json.dumps(data) return HttpResponse(data) # 退出APP登录: @login_required def app_out(request): username = request.POST.get('username') print("用户退出") del request.session['username'] auth.logout(request) data = "0" return HttpResponse(data) # 个人信息: class app_user_in(View): def get(self, request): user_name = request.session["username"] if user_name: user = User_Reporter.objects.filter(name=user_name) user_list = [] for x in user: data = {"name": x.name, "name": x.name, "photo": x.photo.name, "phone": x.phone, "username": x.user_id.username, "addr": x.addr, "time": x.time.strftime("%Y-%m-%d %H:%M:%S"), "is_active":x.user_id.is_active, 'is_staff':x.user_id.is_staff, 'is_superuser':x.user_id.is_superuser, } data = json.dumps(data) else: data = 0 print("用户未登陆") return HttpResponse(data) # 修改头像 未完成 class app_user_head(View): def post(self, request): name = request.session['username'] print("name", name) user_name = MyUser.objects.get(username=name) user_name = str(user_name) user_photo = request.FILES.get('file') print("APP修改用户头像:", user_photo) user_photo_dir = 'user_photo/' # 判断如果路径不存在,即创建路径 if os.path.exists(user_photo_dir) == False: os.makedirs(user_photo_dir) img = Image.open(user_photo) img.save(user_photo_dir + user_name+".png") new_photo = user_photo_dir + user_name+".png" # 数据库关联设备,并在照片的表中存入路径: user.user_picture = new_photo user_name.save() data = "0" return HttpResponse(data) # 省市区 class Citys(View): def get(self, request): city = [] ret = Address_Province.objects.filter(parent_code__in=[1,2,3,4,5,6,7]) for i in ret: city.append({"name": i.name, 'code': i.code,"id":i.id, "parent_code": i.parent_code}) data = json.dumps(city) return HttpResponse(data) def post(self, request): name = request.session['username'] user_name = User_Reporter.objects.get(name=name) ret = request.POST.get("ret") print("ret",ret) data = [] if ret == "city": #月份查询 city_id = request.POST.get("id") print("city_id",city_id) month_list = User_Month.objects.filter(addr_id=city_id) if month_list: for i in month_list: data.append({"month":i.month,"id":i.id}) else: data = {"code":None} elif ret == "harm": #分类查询 month_id = request.POST.get("month_id") pest_sort =request.POST.get("pest_sort") print("month_id",month_id) print("pest_sort",pest_sort) user_name = User_Reporter.objects.get(name=name) harm_list = Pest_Harm_New.objects.filter(Q(month_id=month_id, pest_sort=pest_sort) | Q(month_id=month_id, user_id=user_name,pest_sort=pest_sort)) date = [] if harm_list: for i in harm_list: date.append({"pest":i.pest,"crop_sort":i.crop_sort}) for i in date: #去重 if i not in data: data.append(i) else: data = {"code":None} elif ret == "details": #种类详情 harm_name = request.POST.get("harm_name") print(harm_name) pest_sort = request.POST.get("pest_sort") print(pest_sort) month_id = request.POST.get("month_id") print(month_id) pest_harm = Pest_Harm_New.objects.filter(Q(pest=harm_name,pest_sort=pest_sort,month_id=month_id)| Q(pest=harm_name,pest_sort=pest_sort,user_id=user_name,month_id=month_id)) if pest_harm: for i in pest_harm: data.append({"label":i.pest_name,"value":i.id}) else: data = {"code":None} elif ret == "crea": #添加种类 month_id = request.POST.get("month_id") pest = request.POST.get("pest") crop_sort = request.POST.get("crop_sort") pest_sort = request.POST.get("pest_sort") month = User_Month.objects.get(id=month_id) harm_list = Pest_Harm_New.objects.filter(user_id=user_name,month_id=month,pest=pest,pest_sort=pest_sort) if harm_list.exists(): data = {"code":None} else: Pest_Harm_New.objects.create(pest=pest,month_id=month,user_id=user_name,crop_sort=crop_sort,pest_sort=pest_sort) data = {"code":200} elif ret == "add_harm": #添加病害 month_id = request.POST.get("month_id") print("month_id",month_id) harm = request.POST.get("harm") print("harm",harm) pest_sort = request.POST.get("pest_sort") print("pest_sort",pest_sort) pest_name = request.POST.get("pest_name") print("pest_name",pest_name) month = User_Month.objects.get(id=month_id) try: pest_list = Pest_Harm_New.objects.filter(pest=harm,month_id=month_id,pest_sort=pest_sort) print(pest_list) for i in pest_list: if i.pest_name: if Pest_Harm_New.objects.filter(pest=i.pest,month_id=month_id,pest_sort=pest_sort,pest_name=pest_name,user_id=user_name).exists(): data = {"code":201} data = json.dumps(data) return HttpResponse(data) else: Pest_Harm_New.objects.create(pest=i.pest,pest_sort=pest_sort,pest_name=pest_name,month_id=month,user_id=user_name,crop_sort=i.crop_sort) data = {"code":200} data = json.dumps(data) return HttpResponse(data) else: harm_list = Pest_Harm_New.objects.get(id=i.id) harm_list.pest_name = pest_name harm_list.save() data = {"code":200} data = json.dumps(data) return HttpResponse(data) except Exception as e: print(e) data = {"code":None} elif ret == "del_harm": month_id = request.POST.get("month_id") print("month_id",month_id) harm = request.POST.get("harm") print("harm",harm) pest_sort = request.POST.get("pest_sort") print("pest_sort",pest_sort) pest_name = request.POST.get("pest_name") print("pest_name",pest_name) month = User_Month.objects.get(id=month_id) try: pest_list = Pest_Harm_New.objects.filter(pest=harm,month_id=month_id,pest_sort=pest_sort,pest_name=pest_name,user_id=user_name).delete() pest_list.pest_name = "" pest_list.save() data = {"code":200} except Exception as e: print("error message:",e) data = {"code":400} data = json.dumps(data) return HttpResponse(data) else: data = {"code":ret,"test":"ret值不对"} data = json.dumps(data, ensure_ascii=False) print(data) return HttpResponse(data) #新建数据信息 class Cate_Collector_User(View): '''保存地址数据''' def get(self,request): pest_sort = request.GET.get("pest_sort") print("pest_sort",pest_sort) name = request.session['username'] # name = "demo" print("name", name) user_name = User_Reporter.objects.get(name=name) date = [] data = [] city_list = [] city = [] user_list = User_Data_Table_New.objects.filter(user_id=user_name,harm_id__pest_sort=pest_sort) if user_list: for i in user_list: months = i.harm_id.month_id.month + "月份" date.append({"value":months}) city.append({"value":i.harm_id.month_id.addr_id.name}) for i in date: if i not in data: data.append(i) for i in city: if i not in city_list: city_list.append(i) data = {"month":data,"city":city_list} else: data = {"code":200} data = json.dumps(data) return HttpResponse(data) def post(self, request): name = request.session['username'] print("name", name) user_name = User_Reporter.objects.get(name=name) harm_id = request.POST.get("harm_id") growth_stages = request.POST.get("growth_stages") addr_photo = request.POST.get("addr_photo") area = request.POST.get("area") pestname = request.POST.get("pestname") cens_method = request.POST.get("cens_method") user_id = request.POST.get("user_id") data = [] date = [] pestname = json.loads(pestname) for x in pestname: keys = x.split(':')[:1] keys = " ".join(keys) data.append(keys) values = x.split(':')[1:] values = " ".join(values) date.append(values) pestname = dict(zip(data, date)) print("user_id",user_id) print("harm_id",harm_id) print("growth_stages",growth_stages) print("addr_photo",addr_photo) print("area",area) print("pestname",pestname) print("cens_method",cens_method) harm_id = Pest_Harm_New.objects.get(id=harm_id) print("harm_id_list",harm_id.pest_sort) if user_id: print("修改") user_list = User_Data_Table_New.objects.get(id=user_id) user_list.harm_id=harm_id user_list.growth_stages=growth_stages user_list.addr_photo=addr_photo user_list.area = area user_list.pestname = pestname user_list.cens_method= cens_method user_list.save() data = {"code":200} else: print("新建") try: User_Data_Table_New.objects.create( harm_id=harm_id,growth_stages=growth_stages,addr_photo=addr_photo, area=area,pestname=pestname,cens_method=cens_method,user_id=user_name) data = {"code":200} except Exception as e: print(e) data = {"code":None} data = json.dumps(data) return HttpResponse(data) #添加用户上传的图片 class Account_Photo(ListView): def post(self, request): harm_photos = request.FILES.get('file') print(harm_photos) if harm_photos: print("病虫害图片:", harm_photos) harm_photo_dir = 'harm_photos/' end_name = harm_photos.name.split('.')[-1] # 判断如果路径不存在,即创建路径 if os.path.exists(harm_photo_dir) == False: os.makedirs(harm_photo_dir) img = Image.open(harm_photos) 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) #转换图片类型 因为用户的进行上传识别的图片格式不定,需要进行转换格式,mode=P 全部改成 mode=RGB这种格式进行保存 img = img.convert('RGB') img.save(harm_photo_dir + pic_name) harm_photos = harm_photo_dir + pic_name print("harm_photos:", harm_photos) data = {"src": harm_photos} else: harm_photos = "0" data = {"src": harm_photos} data = json.dumps(data) return HttpResponse(data) #删除用户上传的图片 class Del_Account_Photo(ListView): def post(self, request): pic_list = request.POST.get("pic_list") pest_id = request.POST.get("id") date = [] if pest_id: user_list = User_Data_Table_New.objects.get(id=pest_id) user_list.addr_photo = pic_list if pic_list.find(",") != -1: pic_list = pic_list.split(",") for i in pic_list: date.append(i) else: date.append(pic_list) for i in date: if os.path.exists(i) == True: # 删除图片文件 if pest_id: os.remove(i) user_list.addr_photo = '' user_list.save() else: os.remove(i) data = {"code":200} else: data = {"code":None} data = json.dumps(data) return HttpResponse(data) # 用户详情信息和植物病级查看 # id 采集人的名id class SeeUser(View): def get(self, request): page = int(request.GET.get("page")) name = request.session.get("username") pest_sort = request.GET.get("pest_sort") print(pest_sort) name = User_Reporter.objects.get(name=name) data = [] print("name",name) user_list = User_Data_Table_New.objects.filter(user_id=name,harm_id__pest_sort=pest_sort) if user_list.exists(): for i in user_list: data.append({"user_name":i.user_id.name,"defa":i.defa,"pest":i.harm_id.pest,"month":i.harm_id.month_id.month, "city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S'),"harm_id":i.harm_id.id, }) num = len(user_list) print("num",num) dat = data[(6*(page-1)):(page*6)] data = {'dat': dat, 'num': num} data = json.dumps(data) return HttpResponse(data) def post(self, request): ret = request.POST.get("ret") print("ret",ret) name = request.session["username"] user_name = User_Reporter.objects.get(name=name) print(user_name) if ret == "see": #详情 user_id = request.POST.get("user_id") print('user_id',user_id) user_list = User_Data_Table_New.objects.get(id=user_id) data = [] date = [] dats = [] pestname = eval(user_list.pestname) key = list(pestname) valu = list(pestname.values()) for x in range(len(key)): date.append(key[x] + ":" + valu[x]) if user_list.addr_photo: #判断用户上传的图片是多张还是一张进行切割 if user_list.addr_photo.find(",") != -1: prc_list = user_list.addr_photo.split(",") for y in prc_list: dats.append(y) else: dats.append(user_list.addr_photo) else: dats = "null" data.append({"user_name":user_name.name,"growth_stages":user_list.growth_stages,"addr_photo":dats,"pestname":date,"area":user_list.area,"pest_name":user_list.harm_id.pest_name,"month":user_list.harm_id.month_id.month,"defa":user_list.defa, "pest":user_list.harm_id.pest,"crop_sort":user_list.harm_id.crop_sort,"cens_method":user_list.cens_method,"city":user_list.harm_id.month_id.addr_id.name,"id":user_list.id,"upl_time":user_list.upl_time.strftime('%Y-%m-%d %H:%M:%S') ,"city_id":user_list.harm_id.month_id.addr_id.id,"harm_id":user_list.harm_id.id,"pest_sort":user_list.harm_id.pest_sort, }) elif ret == "all_del": #删除 date = [] user_id = request.POST.get("user_id") userid_list = json.loads(user_id) for i in userid_list: user_list = User_Data_Table_New.objects.get(id=i) print(user_list.addr_photo) if user_list.addr_photo.find(",") != -1: pic_list = user_list.addr_photo.split(",") for x in pic_list: if os.path.exists(x): os.remove(x) else: print(user_list.addr_photo) if os.path.exists(user_list.addr_photo): os.remove(user_list.addr_photo) data = {"code":200} user_list.delete() elif ret == "screen": # data = [] city = request.POST.get("city") month = request.POST.get("month") pest_sort = request.POST.get("pest_sort") print(user_name.id) if month: user_list = User_Data_Table_New.objects.filter(user_id=user_name.id,harm_id__month_id__month=month,harm_id__pest_sort=pest_sort) else: user_list = User_Data_Table_New.objects.filter(user_id=user_name.id,harm_id__month_id__addr_id__name=city,harm_id__pest_sort=pest_sort) nums = len(user_list) if user_list: for i in user_list: data.append({ "user_name":i.user_id.name, "city":i.harm_id.month_id.addr_id.name,"id":i.id,"upl_time":i.upl_time.strftime('%Y-%m-%d %H:%M:%S') }) data = {"date":data,"nums":nums} else: data = {"code":None,"nums":nums} elif ret == "def": #设置默认 user_id = request.POST.get("user_id") name = request.session.get("username") print("user_id",user_id) user_li = User_Data_Table_New.objects.get(id=user_id) print("user_li",user_li) userid = User_Reporter.objects.get(name=name) user_list = User_Data_Table_New.objects.filter(user_id=userid,defa=1) if len(user_list): for i in user_list: i.defa = 0 i.save() user_li.defa = 1 user_li.save() else: user_li.defa = 1 user_li.save() data = {"code":200} elif ret == "del": #取消默认 user_id = request.POST.get("user_id") user_li = User_Data_Table_New.objects.get(id=user_id) user_li.defa = 0 user_li.save() data = {"code":200} data = json.dumps(data) print(data) return HttpResponse(data) #饼状图病害展示 class Count_Plant(ListView): def post(self, request): pest_sort = request.POST.get("pest_sort") name = request.session.get("username") user_name = User_Reporter.objects.get(name=name) user_list = User_Data_Table_New.objects.filter(user_id=user_name) date = [] dats = [] data = [] userid_list = user_list.filter(harm_id__pest_sort=pest_sort) # print(len(userid_list)) if userid_list: for i in userid_list: date.append({"pest":i.harm_id.pest,"crop_sort":i.harm_id.crop_sort,"dat":""}) for i in date: if i not in dats: dats.append(i) for x in dats: data_list = [] userid_lists = user_list.filter(harm_id__pest_sort=pest_sort,harm_id__pest=x["pest"]) for harmid in userid_lists:#当前大分类下所有的小分类 data_list.append(harmid.harm_id.pest_name) date_list = [] for y in set(data_list): #统计小分类数量 date_list.append({"pest_name":y,"num":data_list.count(y)}) x["dat"] = date_list data.append({"data":x,}) else: data = {"code":None} data = json.dumps(data) return HttpResponse(data) # 害虫识别接口 class app_insect(View): def post(self, request): time_start = time.time() print("害虫识别") imageFile = request.FILES.get('img_addr') imageFile = {"imageFile": imageFile} username = 'yunfei' uniqueKey = '84e6eb40f3a616dd14b1fefc75425006' time1 = time.time() print('识别前', time1-time_start) url = 'http://47.99.110.100:8080/recognizationSys/api/recognization' data = {'imageType': '1', 'gis': '118.279643#31.221456', 'username': username, 'uniqueKey': uniqueKey} print("data", data) res = requests.post(url, data=data, files=imageFile) time_end = time.time() print('识别后', time_end-time_start) return HttpResponse(res.text) # 病害识别接口 class app_plant(View): def post(self, request): print("病害识别") imageFile = request.FILES.get('img_addr') imageFile = {"imageFile": imageFile} username = 'yunfei' uniqueKey = '84e6eb40f3a616dd14b1fefc75425006' url = 'http://47.99.110.100:8080/recognizationSys/api/recognization' data = {'imageType': '2', 'gis': '118.279643#31.221456', 'username': username, 'uniqueKey': uniqueKey} res = requests.post(url, data=data, files=imageFile) return HttpResponse(res.text) # 害虫识别接口丨新 (测试用) class app_insect_plant(ListView): def post(self, request): img_addr = request.FILES.get('img_addr') print("img_addr", img_addr) imageFile = {"imageFile": img_addr} # url = 'http://60.166.14.184:9143/upload' url = 'http://60.166.14.184:9143/upload' # imageFile = {'imageFile':('pic.jpg',open("d:/dog.jpg",'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"]} if data["result"] == "": print("识别失败") data = "2" else: data = json.dumps(data, cls=CJSONEncoder) return HttpResponse(data) # 数据导出指定单条数据和多条数据或者病害、虫害全部数据 class Exportes(ListView): def post(self, request): id_list = request.POST.get("user_id") name = request.POST.get("username") id_list = json.loads(id_list) print(id_list) print("name", name) # name = "admin" user_name = User_Reporter.objects.get(name=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 = [] dats = [] for x in id_list: user_list = User_Data_Table_New.objects.filter(id=x) 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 # 写入数据 保存到本地 user_export = "sexport_file/" if os.path.exists(user_export) == False: os.makedirs(user_export) wb.save(user_export + user_name.name + ".xls") dat = [] user_data = user_export + user_name.name + ".xls" dat.append({"file": user_data}) data = json.dumps(dat) return HttpResponse(data) #app在线升级 class App_Upgrade(ListView): def get(self, request): edition_obj = Insect_Edition.objects.all() edit = edition_obj.first() data = {"app_num": edit.app_num, "app_desc": edit.app_desc, "upl_time": edit.upl_time.strftime( "%Y-%m-%d %H:%M:%S"), "app_name": edit.app_name} data = json.dumps(data) return HttpResponse(data) # 版本更新历史 class App_All(ListView): def get(self, request): page = int(request.GET.get('page')) app_list = Insect_Edition.objects.all() data = [] for i in app_list: data.append({"app_name": i.app_name,"id":i.id,"app_num":i.app_num, "upl_time": i.upl_time.strftime("%Y-%m-%d %H:%M:%S")}) num = app_list.count() dat = data[(10*(page-1)):(page*10)] data = {'dat': dat, "num": num} data = json.dumps(data) return HttpResponse(data) def post(self, request): datas = json.loads(request.body.decode()) ids = datas["id"] app_list = Insect_Edition.objects.get(id=ids) data = [] data.append({"app_desc": app_list.app_desc, "upl_time": app_list.upl_time.strftime("%Y-%m-%d %H:%M:%S")}) data = json.dumps(data) return HttpResponse(data) #昆虫识别记录 class Insect_Record(ListView): def post(self, request): imgs = request.FILES.get('filte') if not all([imgs]): return HttpResponse("没有传图片") names = request.POST.get("name") print("names:", names) prevention = request.POST.get("prevention") img_urls = request.POST.get("img_urls") course = request.POST.get("course") addr = request.POST.get("addr") lng = request.POST.get("lng") lat = request.POST.get("lat") name = request.session.get("username") uid = User_Reporter.objects.get(name=name) time_now = timezone.now().strftime('%Y-%m-%d %H:%M:%S') #有名字说明识别成功 if names == "": news_photo_dir = 'insect_photos_fail/' data = "1" else: news_photo_dir = 'insect_photos/' data = "2" print("news_photo_dir:", news_photo_dir) end_name = imgs.name.split('.')[-1] # 判断如果路径不存在,即创建路径 if os.path.exists(news_photo_dir) == False: os.makedirs(news_photo_dir) img = Image.open(imgs) now_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) pic_name = now_time + '.' + end_name #保存图片,拼接路径 #转换图片类型 因为用户的进行上传识别的图片格式不定,需要进行转换格式,mode=P 全部改成 mode=RGB这种格式进行保存 img = img.convert('RGB') img.save(news_photo_dir + pic_name) news_photo = news_photo_dir + pic_name if data == "2": #如果两次识别出来的昆虫名字一样只保留最新的记 if App_Insect.objects.filter(name=names, reporter_id=uid).exists(): insect = App_Insect.objects.get(name=names, reporter_id=uid) insect.time = time_now insect.course = course insect.img_urls = img_urls insect.prevention = prevention insect.img = news_photo insect.addr = addr insect.lng = lng insect.lat = lat insect.userid = uid.user_id insect.save() data = 1 else: #保存识别结果 App_Insect.objects.create(addr=addr, lng=lng, lat=lat, userid=uid.user_id, name=names, course=course, img_urls=img_urls, prevention=prevention, reporter_id=uid, img=news_photo) data = 1 #把识别成功的记录数据保存到知识库(虫害) if Diseases.objects.filter(name=names).exists(): data = 1 else: Diseases.objects.create( name=names, img_urls=img_urls, prevention=prevention, course=course, ret="insect") data = 1 else: #保存识别失败的数据 App_Insect.objects.create( reporter_id=uid, img=news_photo, userid=uid.user_id) data = 1 return HttpResponse(data) #保存植物识别记录 class Plant_Record(ListView): def post(self, request): imgs = request.FILES.get('filte') if not all([imgs]): return HttpResponse("没有传图片") names = request.POST.get("name") print("names:", names) prevention = request.POST.get("prevention") img_urls = request.POST.get("img_urls") course = request.POST.get("course") addr = request.POST.get("addr") lng = request.POST.get("lng") lat = request.POST.get("lat") name = request.session.get("username") uid = User_Reporter.objects.get(name=name) time_now = timezone.now().strftime('%Y-%m-%d %H:%M:%S') #有名字说明识别成功 if names == "": news_photo_dir = 'plant_photos_fail/' data = "1" else: news_photo_dir = 'plant_photos/' data = "2" print("news_photo_dir:", news_photo_dir) end_name = imgs.name.split('.')[-1] # 判断如果路径不存在,即创建路径 if os.path.exists(news_photo_dir) == False: os.makedirs(news_photo_dir) img = Image.open(imgs) now_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) pic_name = now_time + '.' + end_name #保存图片,拼接路径 #转换图片类型 因为用户的进行上传识别的图片格式不定,需要进行转换格式,mode=P 全部改成 mode=RGB这种格式进行保存 img = img.convert('RGB') img.save(news_photo_dir + pic_name) news_photo = news_photo_dir + pic_name if data == "2": if App_Plant.objects.filter(name=names, reporter_id=uid).exists(): plant = App_Plant.objects.get(name=names, reporter_id=uid) plant.time = time_now plant.course = course plant.img_urls = img_urls plant.prevention = prevention plant.img = news_photo plant.addr = addr plant.lng = lng plant.lat = lat plant.userid = uid.user_id #如果两次识别结果一样只保留最新的记录 plant.save() data = 1 else: #保存识别结果 App_Plant.objects.create(addr=addr, lng=lng, lat=lat, userid=uid.user_id, name=names, course=course, img_urls=img_urls, prevention=prevention, reporter_id=uid, img=news_photo) data = 1 # 把识别成功的记录数据保存到知识库(植物)如果知识库中有不做操作 if Diseases.objects.filter(name=names).exists(): data = 1 else: # 把识别成功的记录数据保存到知识库(植物) Diseases.objects.create( name=names, img_urls=img_urls, prevention=prevention, course=course, ret="plant") data = 1 else: #保存识别失败的数据 App_Plant.objects.create( reporter_id=uid, img=news_photo, userid=uid.user_id) data = 1 return HttpResponse(data) #虫害列表和详情查看 class Insect_Details(ListView): def get(self, request): page = int(request.GET.get("page")) name = request.session.get("username") uid = User_Reporter.objects.get(name=name) dat = [] insect = App_Insect.objects.filter(reporter_id=uid) num = insect.count() for i in insect: dat.append( { "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "coures": i.course, "name": i.name, "img": i.img.name, "img_urls": i.img_urls, "prevention": i.prevention, "id": i.id, "ret": "insect", "addr": i.addr, } ) dat = dat[(6*(page-1)):(page*6)] data = {'dat': dat, 'pag': page, 'num': num} data = json.dumps(data) return HttpResponse(data) def post(self, request): datas = json.loads(request.body.decode()) reporter_id = datas["id"] dat = [] insect = App_Insect.objects.filter(id=reporter_id) for i in insect: dat.append( { "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "coures": i.course, "name": i.name, "img": i.img.name, "img_urls": i.img_urls, "prevention": i.prevention, "addr": i.addr, } ) data = json.dumps(dat) return HttpResponse(data) #植物病害列表和详情查看 class Plant_Details(ListView): def get(self, request): page = int(request.GET.get("page")) name = request.session.get("username") uid = User_Reporter.objects.get(name=name) dat = [] plant = App_Plant.objects.filter(reporter_id=uid) num = plant.count() for i in plant: dat.append( { "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "coures": i.course, "name": i.name, "img": i.img.name, "img_urls": i.img_urls, "prevention": i.prevention, "id": i.id, "ret": "plant", "addr": i.addr, } ) dat = dat[(6*(page-1)):(page*6)] data = {'dat': dat, 'pag': page, 'num': num} data = json.dumps(data) return HttpResponse(data) def post(self, request): datas = json.loads(request.body.decode()) reporter_id = datas["id"] dat = [] plant = App_Plant.objects.filter(id=reporter_id) for i in plant: dat.append( { "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "coures": i.course, "name": i.name, "img": i.img.name, "img_urls": i.img_urls, "prevention": i.prevention, "addr": i.addr } ) data = json.dumps(dat) return HttpResponse(data) #识别失败用户自行补充数据 class Make_Data(ListView): def post(self, request): datas = json.loads(request.body.decode()) img_urls = datas["photo"] names = datas["name"] prevention = datas["prevention"] course = datas["course"] ids = datas["id"] ret = datas["ret"] addr = datas["addr"] lat = datas["lat"] lng = datas["lng"] name = request.session.get("username") uid = User_Reporter.objects.get(name=name) try: if ret == "insect": insect_plant = App_Insect.objects.get(id=ids, reporter_id=uid) elif ret == "plant": insect_plant = App_Plant.objects.get(id=ids, reporter_id=uid) img_urls = "http://120.27.222.26/" + img_urls # img_urls = "http://39.104.94.153/" + img_urls insect_plant.name = names insect_plant.course = course insect_plant.img_urls = img_urls insect_plant.prevention = prevention insect_plant.addr = addr insect_plant.lat = lat insect_plant.lng = lng insect_plant.save() data = 1 except Exception as e: print(e) data = 0 return HttpResponse(data) #保存识别失败用户上传的照片 class Upload_Photos(ListView): def post(self, request): imgs = request.FILES.get('filter') print("imgs", imgs) ret = request.POST.get("ret") if ret == "insect": news_photo_dir = 'insect_photos/' elif ret == "plant": news_photo_dir = 'plant_photos/' if os.path.exists(news_photo_dir) == False: os.makedirs(news_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 img = img.convert('RGB') img.save(news_photo_dir + pic_name) news_photo = news_photo_dir + pic_name data = {"news_photo": news_photo, "ret": ret} data = json.dumps(data) print("data", data) return HttpResponse(data) #删除识别记录用户上传的图片 class Del_Insect_Photo(ListView): def post(self, request): datas = json.loads(request.body.decode()) photos = datas["photos"] ret = datas["ret"] if os.path.exists(photos) == True: # 删除图片文件 os.remove(photos) data = 1 else: data = 0 return HttpResponse(data) #识别记录删除 class Del_Record(ListView): def post(self, request): datas = json.loads(request.body.decode()) reporter_id = datas["id"] ret = datas["ret"] if not all([reporter_id, ret]): return HttpResponse("参数不正确") name = request.session.get("username") uid = User_Reporter.objects.get(name=name) if ret == "insect": insect = App_Insect.objects.get(id=reporter_id, reporter_id=uid) elif ret == "plant": insect = App_Plant.objects.get(id=reporter_id, reporter_id=uid) if os.path.exists(str(insect.img)) == True: # 删除图片文件 os.remove(str(insect.img)) insect.delete() data = 1 else: data = 0 return HttpResponse(data) #知识库 class Insect_Base(ListView): def get(self, request): page = int(request.GET.get("page")) dat = [] req = Diseases.objects.filter(ret="insect") num = req.count() for i in req: dat.append({ "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "course": i.course, "name": i.name, "img_urls": i.img_urls, "prevention": i.prevention, "id": i.id, "ret": i.ret }) dat = dat[(6*(page-1)):(page*6)] data = {'dat': dat, 'pag': page, 'num': num} data = json.dumps(data) return HttpResponse(data) def post(self, request): datas = json.loads(request.body.decode()) reporter_id = datas["id"] dat = [] req = Diseases.objects.filter(id=reporter_id) for i in req: dat.append({ "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "course": i.course, "name": i.name, "img_urls": i.img_urls, "prevention": i.prevention, }) data = json.dumps(dat) return HttpResponse(data) #知识库(作物) class Plant_Base(ListView): def get(self, request): page = int(request.GET.get("page")) dat = [] req = Diseases.objects.filter(ret="plant") num = req.count() if num: for i in req: dat.append({ "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "course": i.course, "name": i.name, "img_urls": i.img_urls, "prevention": i.prevention, "id": i.id, "ret": i.ret }) dat = dat[(6*(page-1)):(page*6)] data = {'dat': dat, 'pag': page, 'num': num} data = json.dumps(data) else: data = 0 return HttpResponse(data) #知识库搜索 class Search(ListView): def post(self, request): datas = json.loads(request.body.decode()) name = datas["name"] ret = datas["ret"] page = int(datas["page"]) dat = [] if ret != "insect" and ret != "plant": data = 0 return HttpResponse(data) #包涵查询 name__contains req = Diseases.objects.filter(name__contains=name, ret=ret) num = req.count() for i in req: dat.append({ "time": i.time.strftime('%Y-%m-%d %H:%M:%S'), "course": i.course, "name": i.name, "img_urls": i.img_urls, "prevention": i.prevention, "id": i.id, "req": ret }) dat = dat[(6*(page-1)):(page*6)] data = {'dat': dat, 'pag': page, 'num': num} data = json.dumps(data) return HttpResponse(data) #用户反馈 class User_Pro(ListView): def post(self, request): datas = json.loads(request.body.decode()) name = datas["name"] phone = datas["phone"] proposal = datas["proposal"] count = datas["count"] store = datas["store"] if store == "1": mobile = re.compile('^(13\d|14[5|7]|15\d|166|17\d|18\d)\d{8}$') res = re.search(mobile, phone) if res: Feedback.objects.create( name=name, phone=phone, proposal=proposal, count=count, store=store) data = 1 else: data = 0 elif store == "2": Feedback.objects.create( name=name, phone=phone, proposal=proposal, count=count, store=store) data = 1 return HttpResponse(data) #返回用户反馈(管理员可见) class Check_Leaving(ListView): def get(self, request): name = request.session.get("username") print("name:", name) # name = "demo" page = int(request.GET.get("page")) uid = User_Reporter.objects.get(name=name) dat = [] if uid.user_id.is_superuser == True and uid.user_id.is_staff == True and uid.user_id.is_active == True: print("管理员") ret = Feedback.objects.all() num = ret.count() for i in ret: dat.append({ "time": time.strftime("%Y-%m-%d %H:%M:%S"), "phone": i.phone, "count": i.count, "id": i.id, "store": i.store, "name": i.name, "proposal": i.proposal, "ret": "del" }) dat = dat[(7*(page-1)):(page*7)] data = {'dat': dat, 'page': page, 'num': num} data = json.dumps(data) else: # print("普通用户") data = 1 return HttpResponse(data) def post(self, request): datas = json.loads(request.body.decode()) reporter_id = datas["id"] ret = datas["ret"] dat = [] if ret == "del": Feedback.objects.get(id=reporter_id).delete() data = 1 else: ret = Feedback.objects.filter(id=reporter_id) for i in ret: dat.append({ "time": i.time.strftime("%Y-%m-%d %H:%M:%S"), "phone": i.phone, "count": i.count, "store": i.store, "name": i.name, "proposal": i.proposal, }) data = json.dumps(dat) return HttpResponse(data) #获取随机6位数字进行加密 def verification_code(): num = '' for x in range(6): num += str(random.randint(0, 9)) return num #生成32位激活验证码 class Census(ListView): def get(self, request): # word = verification_code().encode("utf-8") word = request.GET.get("word").encode("utf-8") password = hashlib.sha1(word).hexdigest() print(password) # pass_word = password[8:] # print(pass_word) # Encryption.objects.create(cipher=password) data = 1 return HttpResponse(data) def post(self, request): datas = json.loads(request.body.decode()) num = datas["num"] imei = datas["imei"] print("原始imei", imei) if not all([num, imei]): data = 0 return HttpResponse(data) imei = json.loads(imei) imeid = imei["uuid"] if imeid.find(",") != -1: imeid = imeid.split(",")[0] print("imeid", imeid) #校验是否登录过 if Encryption.objects.filter(cipher=num, meid=imeid).exists(): data = 5 else: #校验秘钥是否正确 if Encryption.objects.filter(cipher=num).exists(): #在秘钥正确的情况下校验手机imei是否正确 if Encryption.objects.filter(meid=imeid).exists(): data = 1 else: #在imei没有进行绑定的情况下 cip = Encryption.objects.get(cipher=num) if cip.meid: data = 3 else: cip.meid = imeid cip.save() data = 4 else: data = 2 data = json.dumps(data) return HttpResponse(data) #判定是否已注册 class Decide(ListView): def post(self, request): datas = json.loads(request.body.decode()) imei = datas["imei"] print("原始imei", imei) data = [] if not all([imei]): data = 0 return HttpResponse(data) imei = json.loads(imei) imeid = imei["uuid"] if imeid.find(",") != -1: imeid = imeid.split(",")[0] print("imeid", imeid) print("转换后的imei", imei) if Encryption.objects.filter(meid=imeid).exists(): imei = Encryption.objects.get(meid=imeid) data.append({ "cipher": imei.cipher }) else: data = 2 data = json.dumps(data) return HttpResponse(data) #往数据库中添加病虫害值接口 class Plus_Insect(ListView): def post(self, request): datas = json.loads(request.body.decode()) ret = datas["ret"] course = datas["course"] name = datas["name"] img_urls = datas["img_urls"] prevention = datas["prevention"] try: Diseases.objects.create(ret=ret, course=course, name=name, img_urls=img_urls, prevention=prevention ) data = 1 except Exception as e: print(e) data = 0 return HttpResponse(data) #爬取数据的 class scrapy_insect(View): def get(self,request): # start_date = datetime.datetime.now() - datetime.timedelta(days=2) # end_date = datetime.datetime.now() page = int(request.GET.get("page")) start_time = request.GET.get('start_time') end_time = request.GET.get('end_time') now_time = datetime.datetime.now() print("当前日期为:",now_time) print("当前月为:",now_time.month) 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])) sta1 = RecentCBDdata.objects.all().values()[(20*(page-1)):(page*20)] data = [] # upl_time__range=(start_date, end_date) for x in sta1: cbd_list = CBDphoto.objects.filter(equip_id_id=x['equip_id_id'],upl_time__range=(start_date,end_date)) if cbd_list.exists(): da = [] imei_list = [] for i in cbd_list: if i.equip_id.equip_id not in imei_list: imei_list.append({i.equip_id.equip_id:i.addr}) else: imei_list = [] data.append(imei_list) data = json.dumps(data) return HttpResponse(data) #数据导入接口 # class daoru(View): # def post(self,request): # # ret = request.POST.get("ret") # # if ret == "scd": # # equip_list = transpont_equip_scd # # elif ret == "cbd": # # equip_list = transpont_equip_cbd # # elif ret == "qxz": # # equip_list = transpont_equip_qxz # # elif ret == "bzy": # # equip_list = transpont_equip_bzy # # elif ret == "ybq": # # equip_list = transpont_equip_ybq # # # print(equip_list.keys()) # # for i in equip_list.keys(): # # zhi = equip_list[i] # # print(zhi) # # Equip_Forward.objects.create(equip_id=i,equip_data_url=zhi,equip_data_between=1) # # data = 0 # # return HttpResponse(data) # ret = request.POST.get("ret") # equip_list = Equip.objects.filter(~Q(ftp_addr=None),equip_type__type_id=ret) # print(len(equip_list)) # for i in equip_list: # if i.ftp_addr: # try: # equips = Equip_Forward.objects.get(equip_id=i.equip_id) # equips.equip_img_url = i.ftp_addr # equips.equip_img_between = 1 # equips.save() # except: # Equip_Forward.objects.create(equip_id=i.equip_id,equip_img_url=i.ftp_addr,equip_img_between=1) # data = 0 # return HttpResponse(data)