| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847 |
- # -*- 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 CBDstatus, CBDdata, CBDphoto, CBDpest, CBDphoto_desc, YBQphoto, BZYstatus, BZYdata, BZYphoto, Spore_Exist, QXZswitchstatus, QXZswitchdata,\
- RecentCBDdata, QXZTimingswitch, QXZAutoswitch, Msg_Conf, YBQphoto, QXZstatus_New
- 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
- return render(request, 'reportmanage/cbd_manual_pest_data.html', context={"e_id": e_id, "disc": disc})
- 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
- 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)
- 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]))
- 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))
- print("sta1:", sta1)
- sta2 = [{"equip_name": x.equip_id.equip_name,
- "qxz_data": eval(x.qxz_data)["data"],
- "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
- # 查询全部
- else:
- sta1 = QXZdata.objects.filter(equip_id=equip_id)
- print("sta1:",sta1)
- sta2 = [{"equip_name": x.equip_id.equip_name,
- "qxz_data": eval(x.qxz_data)["data"],
- "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
- # print(sta2)
- try:
- # 遍历标题
- title = []
- for aaa in sta2[0]['qxz_data']:
- # print(qxz_dict[aaa['eNum']][1])
- title.append(qxz_dict[aaa['eNum']][1]+aaa['eKey'])
- title.append("上报时间")
- print(title)
- # print(sta2[0]['qxz_data'])
- except:
- book = xlwt.Workbook() # 创建一个excel对象
- sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
- 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
- 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)): # 遍历列表
- # print("行",x)
- for xx in range(len(title)):
- print("行",x+1,"列",xx)
- # print(sta2[x]["qxz_data"][xx-1])
- if xx+1 == len(title):
- # print(x+1,xx,sta2[x]["upl_time"])
- sheet.write(x+1,xx,sta2[x]["upl_time"])
- break
- # print(x+1,xx,sta2[x]["qxz_data"][xx]["eValue"]+" "+qxz_dict[sta2[x]["qxz_data"][xx]["eNum"]][2])
- sheet.write(x+1,xx,sta2[x]["qxz_data"][xx]["eValue"]+" "+qxz_dict[sta2[x]["qxz_data"][xx]["eNum"]][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
-
-
- 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"))
- 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 = []
- 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)
|