views.py 213 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847
  1. # -*- coding: utf-8 -*-
  2. from django.shortcuts import render
  3. from apps.AppInfoManage.models import Equip, User_Log, MyUser
  4. from apps.AppInfoManage.models import SCDdata, SCDstatus, RecentSCDdata, YBQdata, YBQstatus, QXZstatus, QXZdata, Trapstatus, Trapdata, Trapphoto, Equip_SimInfo
  5. from apps.AppInfoManage.models import CBDstatus, CBDdata, CBDphoto, CBDpest, CBDphoto_desc, YBQphoto, BZYstatus, BZYdata, BZYphoto, Spore_Exist, QXZswitchstatus, QXZswitchdata,\
  6. RecentCBDdata, QXZTimingswitch, QXZAutoswitch, Msg_Conf, YBQphoto, QXZstatus_New
  7. from itertools import chain
  8. from django.views.generic import ListView
  9. import json
  10. # from apps.AppInfoManage.common import CJSONEncoder
  11. from apps.EquipManage.views import CJSONEncoder
  12. from django.http.response import HttpResponse
  13. from django.core import serializers
  14. import random
  15. # from io import BytesIO, StringIO
  16. import os
  17. from imutils import paths
  18. import stat
  19. import time
  20. import datetime
  21. import re
  22. import copy
  23. from django.utils.decorators import method_decorator
  24. from django.views.decorators.csrf import csrf_exempt
  25. # import xlrd
  26. from apps.SimInfo.views import get_siminfo
  27. import requests
  28. from io import BytesIO
  29. import sys
  30. from PIL import Image
  31. import argparse
  32. import cv2
  33. import shutil
  34. import glob
  35. from .tasks import test
  36. from apps.ReportManage.all_dict import qxz_dict, insect_dict, insect_dict_new
  37. # 杀虫灯报表管理:多设备,每个设备的最新记录
  38. def SCD_Report(request):
  39. if request.method == 'GET':
  40. # current_user = request.session.get('username')
  41. current_user = request.user.username
  42. print("current_user:", current_user)
  43. current_user = MyUser.objects.get(username=current_user)
  44. # if current_user.is_superuser != True and current_user.is_staff != True:
  45. # print("---不是管理员")
  46. # equip_list = Equip.objects.filter(
  47. # equip_type=2, equip_user=current_user)
  48. # else:
  49. # print("---管理员")
  50. # equip_list = Equip.objects.filter(equip_type=2)
  51. # data = []
  52. # for i in equip_list:
  53. # # 关键步骤:从杀虫灯数据列表模型中,筛选出当前用户所拥有的设备的设备id的数据记录,然后进行倒叙排列,最后切片操作,只取第一条数据,即为最新;
  54. # # sta1 = SCDdata.objects.filter(
  55. # # equip_id=i.equip_id).order_by('-upl_time')[:1]
  56. # # 11月22日修改,添加新的杀虫灯数据表RecentSCDdata,此表只保存最新一条数据
  57. # sta1 = RecentSCDdata.objects.filter(
  58. # equip_id=i.equip_id)
  59. # for x in sta1:
  60. # sta2 = {"scd_data": x.scd_data, "ds": x.ds, "upl_time": x.upl_time,
  61. # "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id}
  62. # # print("sta2:",sta2)
  63. # data.append(sta2)
  64. # # print("data:",data)
  65. data = []
  66. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  67. print("---不是管理员")
  68. sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user).values()
  69. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  70. print("---代理商")
  71. sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values()
  72. # 此句查询省级代理商下省份等于省级代理商,且市字段不为空的下属用户
  73. # aabbcc = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency,
  74. # equip_id__equip_user__user_pro=current_user.user_pro).exclude(equip_id__equip_user__user_city="")
  75. # for i in aabbcc:
  76. # print("sadsadasdasdasdasdsadas",i.equip_id)
  77. # print("46464646798981321313265465747",aabbcc)
  78. else:
  79. print("---管理员")
  80. # sta1 = RecentSCDdata.objects.filter(equip_id__equip_type=2)
  81. sta1 = RecentSCDdata.objects.all().values()
  82. print("sta1",sta1)
  83. for x in sta1:
  84. sta2 = {"scd_data": x['scd_data'], "ds": x['ds'], "upl_time": x['upl_time'],
  85. "equip_name": x['equip_name'],"equip_id": x['equip_id_id']}
  86. # sta2 = {"scd_data": x["scd_data"], "ds": x["ds"], "upl_time": x["upl_time"],
  87. # "equip_name": "无","equip_id": x["equip_id_id"]}
  88. # print("sta2:",sta2)
  89. data.append(sta2)
  90. # print("data:",data)
  91. if request.is_ajax():
  92. req = request.GET.get('req')
  93. print("req:", req)
  94. if req == "reqdat":
  95. print("---post 请求数据!")
  96. page = int(request.GET.get('page'))
  97. print("page:", page)
  98. data = data[(10*(page-1)):(page*10)]
  99. data = json.dumps(data, cls=CJSONEncoder)
  100. return HttpResponse(data)
  101. else:
  102. nums = len(data)
  103. User_Log.objects.create(log_user=current_user,
  104. log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-杀虫灯')
  105. return render(request, 'reportmanage/scd_report.html', context={"nums": nums})
  106. if request.method == 'POST':
  107. req = request.POST.get('req')
  108. print("req:", req)
  109. if req == "filter":
  110. print("---筛选!")
  111. page = int(request.POST.get('page'))
  112. print("page:", page)
  113. ename = request.POST.get('ename')
  114. print("ename:", ename)
  115. f_id = request.POST.get('f_id')
  116. print("f_id:", f_id)
  117. current_user = request.session.get('username')
  118. print("current_user:", current_user)
  119. current_user = MyUser.objects.get(username=current_user)
  120. # if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  121. # print("---不是管理员")
  122. # if ename == "" and f_id == "":
  123. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user)
  124. # elif ename == "" and f_id != "":
  125. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_id__contains=f_id)
  126. # elif ename != "" and f_id == "":
  127. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename)
  128. # elif ename != "" and f_id != "":
  129. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id)
  130. # elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  131. # print("---代理商")
  132. # if ename == "" and f_id == "":
  133. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user)
  134. # elif ename == "" and f_id != "":
  135. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_id__contains=f_id)
  136. # elif ename != "" and f_id == "":
  137. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename)
  138. # elif ename != "" and f_id != "":
  139. # equip_list = Equip.objects.filter(equip_type=2, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id)
  140. # else:
  141. # print("---管理员")
  142. # if ename == "" and f_id == "":
  143. # equip_list = Equip.objects.filter(equip_type=2)
  144. # elif ename == "" and f_id != "":
  145. # equip_list = Equip.objects.filter(equip_type=2,equip_id__contains=f_id)
  146. # elif ename != "" and f_id == "":
  147. # equip_list = Equip.objects.filter(equip_type=2, equip_name__contains=ename)
  148. # elif ename != "" and f_id != "":
  149. # equip_list = Equip.objects.filter(equip_type=2, equip_name__contains=ename,equip_id__contains=f_id)
  150. # dat = []
  151. # for i in equip_list:
  152. # # 关键步骤:从杀虫灯数据列表模型中,筛选出当前用户所拥有的设备的设备id的数据记录,然后进行倒叙排列,最后切片操作,只取第一条数据,即为最新;
  153. # # sta1 = SCDdata.objects.filter(
  154. # # equip_id=i.equip_id).order_by('-upl_time')[:1]
  155. # # 11月22日修改 添加新的杀虫灯数据表RecentSCDdata,此表只保存最新一条数据
  156. # sta1 = RecentSCDdata.objects.filter(
  157. # equip_id=i.equip_id)
  158. # for x in sta1:
  159. # sta2 = {"scd_data": x.scd_data, "ds": x.ds, "upl_time": x.upl_time,
  160. # "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id}
  161. # dat.append(sta2)
  162. dat = []
  163. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  164. print("---不是管理员")
  165. if ename == "" and f_id == "":
  166. sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user).values()
  167. elif ename == "" and f_id != "":
  168. sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id).values()
  169. elif ename != "" and f_id == "":
  170. sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename).values()
  171. elif ename != "" and f_id != "":
  172. sta1 = RecentSCDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values()
  173. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  174. print("---代理商")
  175. if ename == "" and f_id == "":
  176. sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values()
  177. elif ename == "" and f_id != "":
  178. sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id).values()
  179. elif ename != "" and f_id == "":
  180. sta1 = RecentSCDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=ename).values()
  181. elif ename != "" and f_id != "":
  182. 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()
  183. else:
  184. print("---管理员")
  185. if ename == "" and f_id == "":
  186. sta1 = RecentSCDdata.objects.all().values()
  187. elif ename == "" and f_id != "":
  188. sta1 = RecentSCDdata.objects.filter(equip_id__equip_id__contains=f_id).values()
  189. elif ename != "" and f_id == "":
  190. sta1 = RecentSCDdata.objects.filter(equip_id__equip_name__contains=ename).values()
  191. elif ename != "" and f_id != "":
  192. sta1 = RecentSCDdata.objects.filter(equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values()
  193. for x in sta1:
  194. sta2 = {"scd_data": x['scd_data'], "ds": x['ds'], "upl_time": x['upl_time'],
  195. "equip_name": x['equip_name'],"equip_id": x['equip_id_id']}
  196. dat.append(sta2)
  197. nums = len(dat)
  198. dat = dat[(10*(page-1)):(page*10)]
  199. data = {'dat': dat, 'nums': nums}
  200. # print("data:",data)
  201. data = json.dumps(data, cls=CJSONEncoder)
  202. return HttpResponse(data)
  203. # 杀虫灯单个设备的表格数据筛选、分页接口:
  204. class SCD_Report_Detail(ListView):
  205. def get(self, request):
  206. equip_id = request.GET.get('id')
  207. print("请求数据,设备id:", equip_id)
  208. User_Log.objects.create(log_user=request.user.username,
  209. log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-杀虫灯报表详情')
  210. # 数据总条数:
  211. nums = SCDdata.objects.filter(equip_id=equip_id).count()
  212. print("nums:", nums)
  213. ename = Equip.objects.get(equip_id=equip_id).equip_name
  214. if ename == "":
  215. ename = "无"
  216. lat = SCDstatus.objects.get(equip_id=equip_id).lat
  217. lng = SCDstatus.objects.get(equip_id=equip_id).lng
  218. return render(request, 'reportmanage/scd_report_detail.html', context={"equip_id": equip_id, "nums": nums,"ename":ename,"lat":lat,"lng":lng})
  219. def post(self, request):
  220. req = request.POST.get('req')
  221. if req == "data":
  222. equip_id = request.POST.get('id')
  223. page = int(request.POST.get('page'))
  224. print("equip_id:", equip_id)
  225. print("page:", page)
  226. print("请求数据的设备id:", equip_id)
  227. sta1 = SCDdata.objects.filter(equip_id=equip_id).values()[(10*(page-1)):(page*10)]
  228. print("sta1:", sta1)
  229. sta2 = [{"equip_name": "",
  230. "scd_data": x['scd_data'],
  231. "upl_time": x['upl_time']} for x in sta1]
  232. # print("sta2:",sta2)
  233. data = json.dumps(sta2, cls=CJSONEncoder)
  234. return HttpResponse(data)
  235. elif req == "filter":
  236. equip_id = request.POST.get('id')
  237. page = int(request.POST.get('page'))
  238. print("equip_id:", equip_id)
  239. print("page:", page)
  240. print("请求数据的设备id:", equip_id)
  241. f_tbegin = request.POST.get('begin')
  242. f_tend = request.POST.get('end')
  243. print("f_tbegin:", f_tbegin)
  244. print("f_tend:", f_tend)
  245. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  246. enddate = re.findall(r"\d+\.?\d*", f_tend)
  247. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  248. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  249. print("start_date:", start_date)
  250. print("end_date:", end_date)
  251. sta1 = SCDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)).values()
  252. print("sta1:", sta1)
  253. sta2 = [{"scd_data": x['scd_data'],
  254. "upl_time": x['upl_time']} for x in sta1]
  255. nums = len(sta2)
  256. dat = sta2[(10*(page-1)):(page*10)]
  257. data = {'dat': dat, 'nums': nums}
  258. # print("data:",data)
  259. data = json.dumps(data, cls=CJSONEncoder)
  260. return HttpResponse(data)
  261. # elif req == "export":
  262. # equip_id = request.POST.get('id')
  263. # print("请求数据的设备id:",equip_id)
  264. # f_tbegin = request.POST.get('begin')
  265. # f_tend = request.POST.get('end')
  266. # print("f_tbegin:", f_tbegin)
  267. # print("f_tend:", f_tend)
  268. # print("f_tbegin:", type(f_tbegin))
  269. # print("f_tend:", type(f_tend))
  270. # # 查询时间段
  271. # if f_tbegin:
  272. # begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  273. # enddate = re.findall(r"\d+\.?\d*", f_tend)
  274. # start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  275. # end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  276. # print("start_date:", start_date)
  277. # print("end_date:", end_date)
  278. # sta1 = SCDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  279. # print("sta1:", sta1)
  280. # sta2 = [{"equip_name": x.equip_id.equip_name,
  281. # "scd_data": x.scd_data,
  282. # "upl_time": x.upl_time} for x in sta1]
  283. # data = json.dumps(sta2, cls=CJSONEncoder)
  284. # # 查询全部
  285. # else:
  286. # sta1 = SCDdata.objects.filter(equip_id=equip_id)
  287. # print("sta1:",sta1)
  288. # sta2 = [{"equip_name": x.equip_id.equip_name,
  289. # "scd_data": x.scd_data,
  290. # "upl_time": x.upl_time} for x in sta1]
  291. # data = json.dumps(sta2, cls=CJSONEncoder)
  292. # return HttpResponse(data)
  293. # 杀虫灯报表详情折线图:
  294. class SCD_Report_Detail_Chart(ListView):
  295. def get(self, request):
  296. pass
  297. def post(self, request):
  298. req = request.POST.get('req')
  299. if req == "data":
  300. equip_id = request.POST.get('id')
  301. print("equip_id:", equip_id)
  302. # 获取当前日期:
  303. now_time = datetime.datetime.now()
  304. print("当前日期为:",now_time)
  305. print("当前月为:",now_time.month)
  306. sta1 = SCDdata.objects.filter(equip_id=equip_id,upl_time__month=now_time.month).values()
  307. sta2 = [{"at": eval(x['scd_data'])['at'],
  308. "ah": eval(x['scd_data'])['ah'],
  309. "cv": eval(x['scd_data'])['cv'],
  310. "bv": eval(x['scd_data'])['bv'],
  311. "ct": eval(x['scd_data'])['ct'],
  312. "tim": x['upl_time']} for x in sta1]
  313. data = json.dumps(sta2, cls=CJSONEncoder)
  314. # print("data:", data)
  315. return HttpResponse(data)
  316. elif req == "filter":
  317. equip_id = request.POST.get('id')
  318. print("equip_id:", equip_id)
  319. f_tbegin = request.POST.get('begin')
  320. f_tend = request.POST.get('end')
  321. print("f_tbegin:", f_tbegin)
  322. print("f_tend:", f_tend)
  323. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  324. enddate = re.findall(r"\d+\.?\d*", f_tend)
  325. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  326. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  327. print("start_date:", start_date)
  328. print("end_date:", end_date)
  329. sta1 = SCDdata.objects.filter(
  330. equip_id=equip_id, upl_time__range=(start_date, end_date)).values()
  331. sta2 = [{"at": eval(x['scd_data'])['at'],
  332. "ah": eval(x['scd_data'])['ah'],
  333. "cv": eval(x['scd_data'])['cv'],
  334. "bv": eval(x['scd_data'])['bv'],
  335. "ct": eval(x['scd_data'])['ct'],
  336. "tim": x['upl_time']} for x in sta1]
  337. data = json.dumps(sta2, cls=CJSONEncoder)
  338. # print("data:",data)
  339. return HttpResponse(data)
  340. # 杀虫灯报表详情柱状图:
  341. class SCD_Report_Detail_Bar(ListView):
  342. def get(self, request):
  343. pass
  344. def post(self, request):
  345. req = request.POST.get('req')
  346. if req == "data":
  347. equip_id = request.POST.get('id')
  348. print("equip_id:", equip_id)
  349. # 获取当前日期:
  350. now_time = datetime.datetime.now()
  351. print("now_time:", now_time)
  352. # # 测试:
  353. # now_time = datetime.datetime(2018, 1, 1,17,38)
  354. # 获取前一天日期:
  355. # 此方法bug:如果为1月1号,1减1 1减1 日减1 月减1 年再减1,太过麻烦;
  356. # last_day_now = now_time.replace(day = now_time.day-1)
  357. # 往前推一天:
  358. last_day_now = now_time + datetime.timedelta(days=-1)
  359. print("last_day_now:", last_day_now)
  360. # 格式化输出:
  361. last_day_now = json.dumps(last_day_now, cls=CJSONEncoder)
  362. print("格式化为json的last_day_now:", last_day_now)
  363. # 注意,当前日期这一天也要算上:所以天数加1
  364. # 此方法不可取,每个月最后一天不同:
  365. # now_time = json.dumps(now_time.replace(day = now_time.day+1), cls=CJSONEncoder)
  366. # 往后推迟一天:
  367. now_time = json.dumps(
  368. now_time + datetime.timedelta(days=+1), cls=CJSONEncoder)
  369. print("格式化为json的now_time:", now_time)
  370. begindate = re.findall(r"\d+\.?\d*", last_day_now)
  371. enddate = re.findall(r"\d+\.?\d*", now_time)
  372. print("begindate:", begindate)
  373. print("enddate:", enddate)
  374. start_date = datetime.date(
  375. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  376. end_date = datetime.date(
  377. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  378. print("start_date:", start_date)
  379. print("end_date:", end_date)
  380. sta1 = SCDdata.objects.filter(
  381. equip_id=equip_id, upl_time__range=(start_date, end_date))
  382. sta2 = [{"at": eval(x.scd_data)['at'],
  383. "ah": eval(x.scd_data)['ah'],
  384. "cv": eval(x.scd_data)['cv'],
  385. "bv": eval(x.scd_data)['bv'],
  386. "ct": eval(x.scd_data)['ct'],
  387. "tim": x.upl_time} for x in sta1]
  388. data = json.dumps(sta2, cls=CJSONEncoder)
  389. # print("data:", data)
  390. return HttpResponse(data)
  391. elif req == "filter":
  392. equip_id = request.POST.get('id')
  393. print("equip_id:", equip_id)
  394. f_tbegin = request.POST.get('begin')
  395. f_tend = request.POST.get('end')
  396. print("f_tbegin:", f_tbegin)
  397. print("f_tend:", f_tend)
  398. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  399. enddate = re.findall(r"\d+\.?\d*", f_tend)
  400. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  401. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  402. print("start_date:", start_date)
  403. print("end_date:", end_date)
  404. sta1 = SCDdata.objects.filter(
  405. equip_id=equip_id, upl_time__range=(start_date, end_date))
  406. sta2 = [{
  407. # "ct": eval(x.scd_data)['ct'],
  408. "tim": x.upl_time} for x in sta1]
  409. nums = len(sta2)
  410. # dat = sta2[(10*(page-1)):(page*10)]
  411. dat = sta2
  412. data = {'dat': dat, 'nums': nums}
  413. # print("data:",data)
  414. data = json.dumps(data, cls=CJSONEncoder)
  415. return HttpResponse(data)
  416. ##---------------------------诱捕器接口---------------------------
  417. # 诱捕器报表管理:多设备,每个设备的最新记录
  418. def YBQ_Report(request):
  419. if request.method == 'GET':
  420. # current_user = request.session.get('username')
  421. current_user = request.user.username
  422. print("current_user:", current_user)
  423. current_user = MyUser.objects.get(username=current_user)
  424. data = []
  425. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  426. # print("---不是管理员")
  427. # sta1 = YBQdata.objects.filter(equip_id__equip_user=current_user)
  428. equip_list = Equip.objects.filter(
  429. equip_type=4, equip_user=current_user)
  430. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  431. # print("---代理商")
  432. # sta1 = YBQdata.objects.filter(equip_id__equip_agency=current_user.user_agency)
  433. equip_list = Equip.objects.filter(
  434. equip_type=4, equip_agency=current_user.user_agency)
  435. else:
  436. # print("---管理员")
  437. # sta1 = YBQdata.objects.all()
  438. equip_list = Equip.objects.filter(
  439. equip_type=4)
  440. for i in equip_list:
  441. sta1 = YBQdata.objects.filter(
  442. equip_id=i.equip_id).order_by('-upl_time')[:1]
  443. for x in sta1:
  444. sta2 = {"ybq_data": x.ybq_data, "ds": x.ds, "upl_time": x.upl_time,
  445. "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id}
  446. # print("sta2:",sta2)
  447. data.append(sta2)
  448. # print("data:",data)
  449. if request.is_ajax():
  450. req = request.GET.get('req')
  451. print("req:", req)
  452. if req == "reqdat":
  453. print("---post 请求数据!")
  454. page = int(request.GET.get('page'))
  455. print("page:", page)
  456. data = data[(10*(page-1)):(page*10)]
  457. data = json.dumps(data, cls=CJSONEncoder)
  458. return HttpResponse(data)
  459. else:
  460. nums = len(data)
  461. User_Log.objects.create(log_user=current_user,
  462. log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-诱捕器')
  463. return render(request, 'reportmanage/ybq_report.html', context={"nums": nums})
  464. if request.method == 'POST':
  465. req = request.POST.get('req')
  466. print("req:", req)
  467. if req == "filter":
  468. print("---筛选!")
  469. page = int(request.POST.get('page'))
  470. print("page:", page)
  471. ename = request.POST.get('ename')
  472. print("ename:", ename)
  473. f_id = request.POST.get('f_id')
  474. print("f_id:", f_id)
  475. current_user = request.session.get('username')
  476. print("current_user:", current_user)
  477. current_user = MyUser.objects.get(username=current_user)
  478. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  479. print("---不是管理员")
  480. if ename == "" and f_id == "":
  481. equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user)
  482. elif ename == "" and f_id != "":
  483. equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user, equip_id__contains=f_id)
  484. elif ename != "" and f_id == "":
  485. equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user, equip_name__contains=ename)
  486. elif ename != "" and f_id != "":
  487. equip_list = Equip.objects.filter(equip_type=4, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id)
  488. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  489. print("---代理商")
  490. if ename == "" and f_id == "":
  491. equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency)
  492. elif ename == "" and f_id != "":
  493. equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency, equip_id__contains=f_id)
  494. elif ename != "" and f_id == "":
  495. equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency, equip_name__contains=ename)
  496. elif ename != "" and f_id != "":
  497. equip_list = Equip.objects.filter(equip_type=4, equip_agency=current_user.user_agency, equip_name__contains=ename,equip_id__contains=f_id)
  498. else:
  499. print("---管理员")
  500. if ename == "" and f_id == "":
  501. equip_list = Equip.objects.filter(equip_type=4)
  502. elif ename == "" and f_id != "":
  503. equip_list = Equip.objects.filter(equip_type=4, equip_id__contains=f_id)
  504. elif ename != "" and f_id == "":
  505. equip_list = Equip.objects.filter(equip_type=4, equip_name__contains=ename)
  506. elif ename != "" and f_id != "":
  507. equip_list = Equip.objects.filter(equip_type=4, equip_name__contains=ename, equip_id__contains=f_id)
  508. dat = []
  509. for i in equip_list:
  510. # 关键步骤:从诱捕器数据列表模型中,筛选出当前用户所拥有的设备的设备id的数据记录,然后进行倒叙排列,最后切片操作,只取第一条数据,即为最新;
  511. sta1 = YBQdata.objects.filter(
  512. equip_id=i.equip_id).order_by('-upl_time')[:1]
  513. for x in sta1:
  514. sta2 = {"ybq_data": x.ybq_data, "ds": x.ds, "upl_time": x.upl_time,
  515. "equip_name": x.equip_id.equip_name,"equip_id": x.equip_id.equip_id}
  516. dat.append(sta2)
  517. nums = len(dat)
  518. dat = dat[(10*(page-1)):(page*10)]
  519. data = {'dat': dat, 'nums': nums}
  520. # print("data:",data)
  521. data = json.dumps(data, cls=CJSONEncoder)
  522. return HttpResponse(data)
  523. # 诱捕器单个设备的表格数据筛选、分页接口:
  524. class YBQ_Report_Detail(ListView):
  525. def get(self, request):
  526. equip_id = request.GET.get('id')
  527. print("请求数据,设备id:", equip_id)
  528. User_Log.objects.create(log_user=request.user.username,
  529. log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-诱捕器报表详情')
  530. # 数据总条数:
  531. nums = YBQdata.objects.filter(equip_id=equip_id).count()
  532. print("nums:", nums)
  533. ename = Equip.objects.get(equip_id=equip_id).equip_name
  534. if ename == "":
  535. ename = "无"
  536. lat = YBQstatus.objects.get(equip_id=equip_id).lat
  537. lng = YBQstatus.objects.get(equip_id=equip_id).lng
  538. return render(request, 'reportmanage/ybq_report_detail.html', context={"equip_id": equip_id, "nums": nums, "ename":ename, "lat":lat, "lng":lng})
  539. def post(self, request):
  540. req = request.POST.get('req')
  541. if req == "data":
  542. equip_id = request.POST.get('id')
  543. page = int(request.POST.get('page'))
  544. print("equip_id:", equip_id)
  545. print("page:", page)
  546. print("请求数据的设备id:", equip_id)
  547. sta1 = YBQdata.objects.filter(equip_id=equip_id)[
  548. (10*(page-1)):(page*10)]
  549. print("sta1:", sta1)
  550. sta2 = [{"equip_name": x.equip_id.equip_name,
  551. "ybq_data": x.ybq_data,
  552. "upl_time": x.upl_time} for x in sta1]
  553. # print("sta2:",sta2)
  554. data = json.dumps(sta2, cls=CJSONEncoder)
  555. return HttpResponse(data)
  556. elif req == "filter":
  557. equip_id = request.POST.get('id')
  558. page = int(request.POST.get('page'))
  559. print("equip_id:", equip_id)
  560. print("page:", page)
  561. print("请求数据的设备id:", equip_id)
  562. f_tbegin = request.POST.get('begin')
  563. f_tend = request.POST.get('end')
  564. print("f_tbegin:", f_tbegin)
  565. print("f_tend:", f_tend)
  566. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  567. enddate = re.findall(r"\d+\.?\d*", f_tend)
  568. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  569. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  570. print("start_date:", start_date)
  571. print("end_date:", end_date)
  572. sta1 = YBQdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  573. print("sta1:", sta1)
  574. sta2 = [{"equip_name": x.equip_id.equip_name,
  575. "ybq_data": x.ybq_data,
  576. "upl_time": x.upl_time} for x in sta1]
  577. nums = len(sta2)
  578. dat = sta2[(10*(page-1)):(page*10)]
  579. data = {'dat': dat, 'nums': nums}
  580. # print("data:",data)
  581. data = json.dumps(data, cls=CJSONEncoder)
  582. return HttpResponse(data)
  583. elif req == "export":
  584. equip_id = request.POST.get('id')
  585. print("请求数据的设备id:",equip_id)
  586. f_tbegin = request.POST.get('begin')
  587. f_tend = request.POST.get('end')
  588. print("f_tbegin:", f_tbegin)
  589. print("f_tend:", f_tend)
  590. print("f_tbegin:", type(f_tbegin))
  591. print("f_tend:", type(f_tend))
  592. # 查询时间段
  593. if f_tbegin:
  594. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  595. enddate = re.findall(r"\d+\.?\d*", f_tend)
  596. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  597. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  598. print("start_date:", start_date)
  599. print("end_date:", end_date)
  600. sta1 = YBQdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  601. print("sta1:", sta1)
  602. sta2 = [{"equip_name": x.equip_id.equip_name,
  603. "ybq_data": x.ybq_data,
  604. "upl_time": x.upl_time} for x in sta1]
  605. data = json.dumps(sta2, cls=CJSONEncoder)
  606. # 查询全部
  607. else:
  608. sta1 = YBQdata.objects.filter(equip_id=equip_id)
  609. print("sta1:",sta1)
  610. sta2 = [{"equip_name": x.equip_id.equip_name,
  611. "ybq_data": x.ybq_data,
  612. "upl_time": x.upl_time} for x in sta1]
  613. data = json.dumps(sta2, cls=CJSONEncoder)
  614. return HttpResponse(data)
  615. # 诱捕器报表详情折线图:
  616. class YBQ_Report_Detail_Chart(ListView):
  617. def get(self, request):
  618. pass
  619. def post(self, request):
  620. req = request.POST.get('req')
  621. if req == "data":
  622. equip_id = request.POST.get('id')
  623. print("equip_id:", equip_id)
  624. # 获取当前日期:
  625. now_time = datetime.datetime.now()
  626. print("当前日期为:",now_time)
  627. print("当前月为:",now_time.month)
  628. sta1 = YBQdata.objects.filter(equip_id=equip_id,upl_time__month=now_time.month)
  629. sta2 = [{"at": eval(x.ybq_data)['at'],
  630. "ah": eval(x.ybq_data)['ah'],
  631. "cv": eval(x.ybq_data)['cv'],
  632. "bv": eval(x.ybq_data)['bv'],
  633. "ct": eval(x.ybq_data)['ct'],
  634. "tim": x.upl_time} for x in sta1]
  635. data = json.dumps(sta2, cls=CJSONEncoder)
  636. # print("data:", data)
  637. return HttpResponse(data)
  638. elif req == "filter":
  639. equip_id = request.POST.get('id')
  640. print("equip_id:", equip_id)
  641. f_tbegin = request.POST.get('begin')
  642. f_tend = request.POST.get('end')
  643. print("f_tbegin:", f_tbegin)
  644. print("f_tend:", f_tend)
  645. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  646. enddate = re.findall(r"\d+\.?\d*", f_tend)
  647. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  648. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  649. print("start_date:", start_date)
  650. print("end_date:", end_date)
  651. sta1 = YBQdata.objects.filter(
  652. equip_id=equip_id, upl_time__range=(start_date, end_date))
  653. sta2 = [{"at": eval(x.ybq_data)['at'],
  654. "ah": eval(x.ybq_data)['ah'],
  655. "cv": eval(x.ybq_data)['cv'],
  656. "bv": eval(x.ybq_data)['bv'],
  657. "ct": eval(x.ybq_data)['ct'],
  658. "tim": x.upl_time} for x in sta1]
  659. data = json.dumps(sta2, cls=CJSONEncoder)
  660. # print("data:",data)
  661. return HttpResponse(data)
  662. # 诱捕器报表详情柱状图:
  663. class YBQ_Report_Detail_Bar(ListView):
  664. def get(self, request):
  665. pass
  666. def post(self, request):
  667. req = request.POST.get('req')
  668. if req == "data":
  669. equip_id = request.POST.get('id')
  670. print("equip_id:", equip_id)
  671. # 获取当前日期:
  672. now_time = datetime.datetime.now()
  673. print("now_time:", now_time)
  674. # # 测试:
  675. # now_time = datetime.datetime(2018, 1, 1,17,38)
  676. # 获取前一天日期:
  677. # 此方法bug:如果为1月1号,1减1 1减1 日减1 月减1 年再减1,太过麻烦;
  678. # last_day_now = now_time.replace(day = now_time.day-1)
  679. # 往前推一天:
  680. last_day_now = now_time + datetime.timedelta(days=-1)
  681. print("last_day_now:", last_day_now)
  682. # 格式化输出:
  683. last_day_now = json.dumps(last_day_now, cls=CJSONEncoder)
  684. print("格式化为json的last_day_now:", last_day_now)
  685. # 注意,当前日期这一天也要算上:所以天数加1
  686. # 此方法不可取,每个月最后一天不同:
  687. # now_time = json.dumps(now_time.replace(day = now_time.day+1), cls=CJSONEncoder)
  688. # 往后推迟一天:
  689. now_time = json.dumps(
  690. now_time + datetime.timedelta(days=+1), cls=CJSONEncoder)
  691. print("格式化为json的now_time:", now_time)
  692. begindate = re.findall(r"\d+\.?\d*", last_day_now)
  693. enddate = re.findall(r"\d+\.?\d*", now_time)
  694. print("begindate:", begindate)
  695. print("enddate:", enddate)
  696. start_date = datetime.date(
  697. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  698. end_date = datetime.date(
  699. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  700. print("start_date:", start_date)
  701. print("end_date:", end_date)
  702. sta1 = YBQdata.objects.filter(
  703. equip_id=equip_id, upl_time__range=(start_date, end_date))
  704. sta2 = [{"at": eval(x.ybq_data)['at'],
  705. "ah": eval(x.ybq_data)['ah'],
  706. "cv": eval(x.ybq_data)['cv'],
  707. "bv": eval(x.ybq_data)['bv'],
  708. "ct": eval(x.ybq_data)['ct'],
  709. "tim": x.upl_time} for x in sta1]
  710. data = json.dumps(sta2, cls=CJSONEncoder)
  711. # print("data:", data)
  712. return HttpResponse(data)
  713. elif req == "filter":
  714. equip_id = request.POST.get('id')
  715. print("equip_id:", equip_id)
  716. f_tbegin = request.POST.get('begin')
  717. f_tend = request.POST.get('end')
  718. print("f_tbegin:", f_tbegin)
  719. print("f_tend:", f_tend)
  720. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  721. enddate = re.findall(r"\d+\.?\d*", f_tend)
  722. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  723. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  724. print("start_date:", start_date)
  725. print("end_date:", end_date)
  726. sta1 = YBQdata.objects.filter(
  727. equip_id=equip_id, upl_time__range=(start_date, end_date))
  728. sta2 = [{
  729. # "ct": eval(x.scd_data)['ct'],
  730. "tim": x.upl_time} for x in sta1]
  731. nums = len(sta2)
  732. # dat = sta2[(10*(page-1)):(page*10)]
  733. dat = sta2
  734. data = {'dat': dat, 'nums': nums}
  735. # print("data:",data)
  736. data = json.dumps(data, cls=CJSONEncoder)
  737. return HttpResponse(data)
  738. # 诱捕器上传图片测试页面:
  739. @method_decorator(csrf_exempt, name='dispatch')
  740. def ybq_imageview(request):
  741. if request.method == 'GET':
  742. print("-----image preview!-----")
  743. imei = request.GET.get('imei')
  744. print("imei:", imei)
  745. nums = YBQphoto.objects.filter(equip_id=imei).count()
  746. print("nums:", nums)
  747. return render(request, 'reportmanage/ybq_image.html', context={"nums": nums, "imei": imei})
  748. if request.method == 'POST':
  749. print("-----image upload request!-----")
  750. imei = request.GET.get('imei')
  751. print("imei:", imei)
  752. # 判断设备是否存在:
  753. if Equip.objects.filter(equip_id=imei).exists():
  754. length = request.META['CONTENT_LENGTH']
  755. print("length:", length)
  756. # 以当前时间命名图片
  757. pic_name = time.strftime(
  758. '%Y%m%d%H%M%S', time.localtime(time.time())) + '.jpg'
  759. print("pic_name:", pic_name)
  760. pic_dir = 'ybq_img/' + imei + '/' + \
  761. pic_name[0:4] + '/' + pic_name[4:6] + '/'
  762. if os.path.exists(pic_dir) == False:
  763. # 文件夹加权限
  764. os.makedirs(pic_dir)
  765. # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO)
  766. print("图片路径:", pic_dir + pic_name)
  767. # img.save(pic_dir+pic_name)
  768. with open(pic_dir + pic_name, "wb") as file:
  769. file.write(request.body)
  770. # print("request.body:", request.body)
  771. # 数据库关联设备,并在照片的表中存入路径:
  772. equip = Equip.objects.get(equip_id=imei)
  773. YBQphoto.objects.create(equip_id=equip, addr=pic_dir + pic_name)
  774. return HttpResponse("-----image upload success!-----")
  775. else:
  776. return HttpResponse("-----image upload failed because this imei is not exists!-----")
  777. # 诱捕器图片列表视图:
  778. @csrf_exempt
  779. def ybq_imagelistview(request):
  780. if request.method == 'GET':
  781. print("-----image list view!-----")
  782. imei = request.GET.get('imei')
  783. print("imei:", imei)
  784. # 获得当前页:
  785. page = int(request.GET.get('page'))
  786. print("page:", page)
  787. equip_name = Equip.objects.get(equip_id=imei).equip_name
  788. # 当前用户:返回用户,前端判断是否显示删除图片按钮
  789. current_user = request.session.get('username')
  790. print("current_user:", current_user)
  791. current_user = MyUser.objects.get(username=current_user)
  792. # 从数据库中取出照片在服务器存放路径:
  793. img = YBQphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)]
  794. equip_name = Equip.objects.get(equip_id=imei).equip_name
  795. return render(request, 'reportmanage/ybq_imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei})
  796. # 删除图片接口:
  797. class YBQ_Image_Delete(ListView):
  798. def get(self, request):
  799. pass
  800. def post(self, request):
  801. print("-----image delete!-----")
  802. imei = request.POST.get('imei')
  803. img_name = request.POST.get('addr')
  804. allpic = request.POST.get('allpic')
  805. print("img_name:",img_name)
  806. if allpic == "1":
  807. all_photo = YBQphoto.objects.filter(equip_id=imei)
  808. print("-----image delete ok!-----")
  809. for i in all_photo:
  810. if os.path.exists(i.addr) == True:
  811. # 删除图片文件
  812. os.remove(i.addr)
  813. # 删除数据库照片列表中,照片路径:
  814. try:
  815. YBQphoto.objects.filter(equip_id=imei, addr=i.addr).delete()
  816. print("-----image delete ok!-----")
  817. except:
  818. print("-----image delete failed!-----")
  819. else:
  820. # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉
  821. # 因此不管何时都删除数据库路径
  822. try:
  823. YBQphoto.objects.filter(equip_id=imei, addr=i.addr).delete()
  824. except Exception as e:
  825. print("========>>",e)
  826. print("-----image not exist!-----")
  827. return HttpResponse("0")
  828. if os.path.exists(img_name) == True:
  829. # 删除图片文件
  830. os.remove(img_name)
  831. # 删除数据库照片列表中,照片路径:
  832. try:
  833. YBQphoto.objects.filter(equip_id=imei, addr=img_name).delete()
  834. print("-----image delete ok!-----")
  835. data = "0"
  836. return HttpResponse(data)
  837. except:
  838. print("-----image delete failed!-----")
  839. data = "1"
  840. return HttpResponse(data)
  841. else:
  842. # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉
  843. # 因此不管何时都删除数据库路径
  844. try:
  845. YBQphoto.objects.filter(equip_id=imei, addr=img_name).delete()
  846. except:
  847. pass
  848. print("-----image not exist!-----")
  849. data = "0"
  850. return HttpResponse(data)
  851. ##---------------------------测报灯接口---------------------------
  852. # 测报灯报表管理视图:
  853. @csrf_exempt
  854. def CBD_Report(request):
  855. # current_user = request.session.get('username')
  856. # print("current_user:", current_user)
  857. # current_user = MyUser.objects.get(username=current_user)
  858. current_user = request.user.username
  859. print("current_user:", current_user)
  860. # current_user = MyUser.objects.get(username=current_user)
  861. try:
  862. current_user = MyUser.objects.get(username=current_user)
  863. except:
  864. current_user = MyUser.objects.get(username="public")
  865. data = []
  866. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  867. print("---不是管理员")
  868. role = "user"
  869. sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user).values()
  870. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  871. print("---代理商")
  872. role = "agency"
  873. sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values()
  874. else:
  875. role = "superuser"
  876. print("---管理员")
  877. sta1 = RecentCBDdata.objects.all().values()
  878. for x in sta1:
  879. if CBDphoto.objects.filter(equip_id_id=x['equip_id_id']).exists():
  880. have_photo = "1"
  881. else:
  882. have_photo = "0"
  883. sta2 = {"equip_name": x['equip_name'],"etype":x['etype'],
  884. "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}
  885. data.append(sta2)
  886. # if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  887. # print("---不是管理员")
  888. # equip_list = Equip.objects.filter(
  889. # equip_type=3, equip_user=current_user).values()
  890. # elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  891. # print("---代理商")
  892. # equip_list = Equip.objects.filter(
  893. # equip_type=3, equip_agency=current_user.user_agency).values()
  894. # else:
  895. # print("---管理员")
  896. # equip_list = Equip.objects.filter(equip_type=3).values()
  897. # data = []
  898. # for i in equip_list:
  899. # sta1 = RecentCBDdata.objects.filter(
  900. # equip_id=i['equip_id'])
  901. # for x in sta1:
  902. # sta2 = {"equip_name": x.equip_id.equip_name,
  903. # "cbd_data": x.cbd_data, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id}
  904. # # sta1 = RecentCBDdata.objects.filter(
  905. # # equip_id=i['equip_id']).values()
  906. # # for x in sta1:
  907. # # sta2 = {"equip_name":"",
  908. # # "cbd_data": x['cbd_data'], "upl_time": x['upl_time'],"equip_id":x['equip_id_id']}
  909. # data.append(sta2)
  910. if request.method == 'GET':
  911. if request.is_ajax():
  912. req = request.GET.get('req')
  913. print("req:", req)
  914. if req == "reqdat":
  915. print("---post 请求数据!")
  916. page = int(request.GET.get('page'))
  917. print("page:", page)
  918. data = data[(10*(page-1)):(page*10)]
  919. # data = serializers.serialize("json", equip_list)
  920. # print("data:", data)
  921. data = json.dumps(data, cls=CJSONEncoder)
  922. return HttpResponse(data)
  923. else:
  924. nums = len(data)
  925. User_Log.objects.create(log_user=current_user,
  926. log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-测报灯')
  927. return render(request, 'reportmanage/cbd_report.html', context={"nums": nums,"role":role})
  928. if request.method == 'POST':
  929. req = request.POST.get('req')
  930. print("req:", req)
  931. if req == "filter":
  932. print("---筛选!")
  933. page = int(request.POST.get('page'))
  934. print("page:", page)
  935. ename = request.POST.get('ename')
  936. print("ename:", ename)
  937. f_id = request.POST.get('f_id')
  938. print("f_id:", f_id)
  939. etype = request.POST.get('etype')
  940. print("etype:", etype)
  941. current_user = request.session.get('username')
  942. print("current_user:", current_user)
  943. current_user = MyUser.objects.get(username=current_user)
  944. # if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  945. # print("---不是管理员")
  946. # if ename == "" and f_id == "":
  947. # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user)
  948. # elif ename == "" and f_id != "":
  949. # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user, equip_id__contains=f_id)
  950. # elif ename != "" and f_id == "":
  951. # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user, equip_name__contains=ename)
  952. # elif ename != "" and f_id != "":
  953. # equip_list = Equip.objects.filter(equip_type=3, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id)
  954. # elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  955. # print("---代理商")
  956. # if ename == "" and f_id == "":
  957. # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency)
  958. # elif ename == "" and f_id != "":
  959. # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency, equip_id__contains=f_id)
  960. # elif ename != "" and f_id == "":
  961. # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency, equip_name__contains=ename)
  962. # elif ename != "" and f_id != "":
  963. # equip_list = Equip.objects.filter(equip_type=3, equip_agency=current_user.user_agency, equip_name__contains=ename,equip_id__contains=f_id)
  964. # else:
  965. # print("---管理员")
  966. # if ename == "" and f_id == "":
  967. # equip_list = Equip.objects.filter(equip_type=3)
  968. # elif ename == "" and f_id != "":
  969. # equip_list = Equip.objects.filter(equip_type=3,equip_id__contains=f_id)
  970. # elif ename != "" and f_id == "":
  971. # equip_list = Equip.objects.filter(equip_type=3, equip_name__contains=ename)
  972. # elif ename != "" and f_id != "":
  973. # equip_list = Equip.objects.filter(equip_type=3, equip_name__contains=ename,equip_id__contains=f_id)
  974. # dat = []
  975. # for i in equip_list:
  976. # sta1 = CBDdata.objects.filter(
  977. # equip_id=i.equip_id).order_by('-upl_time')[:1]
  978. # for x in sta1:
  979. # sta2 = {"equip_name": x.equip_id.equip_name,
  980. # "cbd_data": x.cbd_data, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id}
  981. # dat.append(sta2)
  982. dat = []
  983. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  984. print("---不是管理员")
  985. if ename == "" and f_id == "":
  986. sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user).values()
  987. elif ename == "" and f_id != "":
  988. sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id).values()
  989. elif ename != "" and f_id == "":
  990. sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename).values()
  991. elif ename != "" and f_id != "":
  992. sta1 = RecentCBDdata.objects.filter(equip_id__equip_user=current_user, equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values()
  993. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  994. print("---代理商")
  995. if ename == "" and f_id == "":
  996. sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency).values()
  997. elif ename == "" and f_id != "":
  998. sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id).values()
  999. elif ename != "" and f_id == "":
  1000. sta1 = RecentCBDdata.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_name__contains=ename).values()
  1001. elif ename != "" and f_id != "":
  1002. 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()
  1003. else:
  1004. print("---管理员")
  1005. if ename == "" and f_id == "":
  1006. sta1 = RecentCBDdata.objects.all().values()
  1007. elif ename == "" and f_id != "":
  1008. sta1 = RecentCBDdata.objects.filter(equip_id__equip_id__contains=f_id).values()
  1009. elif ename != "" and f_id == "":
  1010. sta1 = RecentCBDdata.objects.filter(equip_id__equip_name__contains=ename).values()
  1011. elif ename != "" and f_id != "":
  1012. sta1 = RecentCBDdata.objects.filter(equip_id__equip_name__contains=ename,equip_id__equip_id__contains=f_id).values()
  1013. photoday = request.POST.get('photoday')
  1014. dish = request.POST.get('dish')
  1015. # 设备类型筛选设备
  1016. if etype != "":
  1017. if etype == "全部" or etype == "" or etype == None:
  1018. pass
  1019. elif etype == "其他":
  1020. sta1 = sta1.filter(etype=None)
  1021. else:
  1022. sta1 = sta1.filter(etype=etype)
  1023. if dish == "square":
  1024. pass
  1025. elif dish == "circle":
  1026. pass
  1027. # print("photoday================>>",photoday)
  1028. # if photoday == "":
  1029. # print("全部")
  1030. if photoday:
  1031. now_time = datetime.datetime.now()
  1032. start_time = now_time - datetime.timedelta(days=int(photoday))
  1033. for x in sta1:
  1034. if CBDphoto.objects.filter(equip_id_id=x['equip_id_id'],upl_time__range=(start_time, now_time)).exists():
  1035. sta2 = {"cbd_data": x['cbd_data'],"upl_time": x['upl_time'],"scene":x['scene'],"etype":x['etype'],
  1036. "equip_name": x['equip_name'],"equip_id": x['equip_id_id'],"disc":x['disc'],"have_photo":"1"}
  1037. dat.append(sta2)
  1038. else:
  1039. for x in sta1:
  1040. if CBDphoto.objects.filter(equip_id_id=x['equip_id_id']).exists():
  1041. have_photo = "1"
  1042. else:
  1043. have_photo = "0"
  1044. sta2 = {"cbd_data": x['cbd_data'],"upl_time": x['upl_time'],"scene":x['scene'],"etype":x['etype'],
  1045. "equip_name": x['equip_name'],"equip_id": x['equip_id_id'],"disc":x['disc'],"have_photo":have_photo}
  1046. dat.append(sta2)
  1047. # print('-----------------------',x.equip_id.equip_id)
  1048. nums = len(dat)
  1049. print("nums:", nums)
  1050. dat = dat[(10*(page-1)):(page*10)]
  1051. data = {'dat': dat, 'nums': nums}
  1052. # print("data:",data)
  1053. data = json.dumps(data, cls=CJSONEncoder)
  1054. return HttpResponse(data)
  1055. # 报表详情视图:
  1056. @method_decorator(csrf_exempt, name='dispatch')
  1057. class CBD_Report_Detail(ListView):
  1058. def get(self, request):
  1059. equip_id = request.GET.get('id')
  1060. print("请求数据,设备id:", equip_id)
  1061. nums = CBDdata.objects.filter(equip_id=equip_id).count()
  1062. print("nums:", nums)
  1063. return render(request, 'reportmanage/cbd_report_detail.html', context={"equip_id": equip_id, "nums": nums})
  1064. def post(self, request):
  1065. req = request.POST.get('req')
  1066. if req == "data":
  1067. equip_id = request.POST.get('id')
  1068. page = int(request.POST.get('page'))
  1069. print("page:", page)
  1070. print("请求数据的设备id:", equip_id)
  1071. # data = {'dat':"",'pages':""}
  1072. sta1 = CBDdata.objects.filter(equip_id=equip_id).values()[(10*(page-1)):(page*10)]
  1073. sta2 = [{"equip_name": "",
  1074. "cbd_data": x['cbd_data'],
  1075. "upl_time": x['upl_time']} for x in sta1]
  1076. data = json.dumps(sta2, cls=CJSONEncoder)
  1077. # data['dat'] = sta2
  1078. # data['pages'] = pages
  1079. # data = json.dumps(data, cls=CJSONEncoder)
  1080. # print(data)
  1081. return HttpResponse(data)
  1082. elif req == "filter":
  1083. equip_id = request.POST.get('id')
  1084. page = int(request.POST.get('page'))
  1085. print("equip_id:", equip_id)
  1086. print("page:", page)
  1087. print("请求数据的设备id:", equip_id)
  1088. f_tbegin = request.POST.get('begin')
  1089. f_tend = request.POST.get('end')
  1090. print("f_tbegin:", f_tbegin)
  1091. print("f_tend:", f_tend)
  1092. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  1093. enddate = re.findall(r"\d+\.?\d*", f_tend)
  1094. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1095. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1096. print("start_date:", start_date)
  1097. print("end_date:", end_date)
  1098. sta1 = CBDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date)).values()
  1099. print("sta1:", sta1)
  1100. sta2 = [{"equip_name":"",
  1101. "cbd_data": x['cbd_data'],
  1102. "upl_time": x['upl_time']} for x in sta1]
  1103. nums = len(sta2)
  1104. dat = sta2[(10*(page-1)):(page*10)]
  1105. data = {'dat': dat, 'nums': nums}
  1106. # print("data:",data)
  1107. data = json.dumps(data, cls=CJSONEncoder)
  1108. return HttpResponse(data)
  1109. # elif req == "export":
  1110. # equip_id = request.POST.get('id')
  1111. # print("请求数据的设备id:",equip_id)
  1112. # f_tbegin = request.POST.get('begin')
  1113. # f_tend = request.POST.get('end')
  1114. # print("f_tbegin:", f_tbegin)
  1115. # print("f_tend:", f_tend)
  1116. # print("f_tbegin:", type(f_tbegin))
  1117. # print("f_tend:", type(f_tend))
  1118. # # 查询时间段
  1119. # if f_tbegin:
  1120. # begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  1121. # enddate = re.findall(r"\d+\.?\d*", f_tend)
  1122. # start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1123. # end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1124. # print("start_date:", start_date)
  1125. # print("end_date:", end_date)
  1126. # sta1 = CBDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  1127. # print("sta1:", sta1)
  1128. # sta2 = [{"equip_name": x.equip_id.equip_name,
  1129. # "cbd_data": x.cbd_data,
  1130. # "upl_time": x.upl_time} for x in sta1]
  1131. # data = json.dumps(sta2, cls=CJSONEncoder)
  1132. # # 查询全部
  1133. # else:
  1134. # sta1 = CBDdata.objects.filter(equip_id=equip_id)
  1135. # print("sta1:",sta1)
  1136. # sta2 = [{"equip_name": x.equip_id.equip_name,
  1137. # "cbd_data": x.cbd_data,
  1138. # "upl_time": x.upl_time} for x in sta1]
  1139. # data = json.dumps(sta2, cls=CJSONEncoder)
  1140. # return HttpResponse(data)
  1141. # 测报灯报表详情图表视图:
  1142. @method_decorator(csrf_exempt, name='dispatch')
  1143. class CBD_Report_Detail_Chart(ListView):
  1144. def get(self, request):
  1145. pass
  1146. def post(self, request):
  1147. req = request.POST.get('req')
  1148. print("req:", req)
  1149. equip_id = request.POST.get('id')
  1150. print("equip_id:", equip_id)
  1151. if req == "data":
  1152. # 获取当天日期:
  1153. # today = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
  1154. # print("today:",today)
  1155. now_time = datetime.datetime.now()
  1156. # print("type now_time:",type(now_time))
  1157. # # 测试:
  1158. # now_time = datetime.datetime(2018, 2, 28,17,38)
  1159. # print("now_time:",now_time)
  1160. # print("type now_time:",type(now_time))
  1161. # now_time2 = now_time + datetime.timedelta(days=+1) #后一天
  1162. # print("now_time2:",now_time2)
  1163. # print("type now_time2:",type(now_time2))
  1164. # 上月的这一天日期:
  1165. if now_time.month == 1:
  1166. last_month_now = now_time.replace(year=now_time.year-1, month=12)
  1167. else:
  1168. try:
  1169. last_month_now = now_time.replace(month=now_time.month-1)
  1170. except ValueError:
  1171. last_month_now = now_time.replace(month=now_time.month-1,day=now_time.day-3)
  1172. print("last_month_now:", last_month_now)
  1173. # 格式化输出:
  1174. # last_month_now = last_month_now.strftime('%Y%m%d')
  1175. last_month_now = json.dumps(last_month_now, cls=CJSONEncoder)
  1176. print("格式化为json的last_month_now:", last_month_now)
  1177. now_time = json.dumps(
  1178. now_time + datetime.timedelta(days=+1), cls=CJSONEncoder)
  1179. print("格式化为json的now_time:", now_time)
  1180. begindate = re.findall(r"\d+\.?\d*", last_month_now)
  1181. enddate = re.findall(r"\d+\.?\d*", now_time)
  1182. print("begindate:", begindate)
  1183. print("enddate:", enddate)
  1184. start_date = datetime.date(
  1185. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1186. end_date = datetime.date(
  1187. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1188. print("start_date:", start_date)
  1189. print("end_date:", end_date)
  1190. sta1 = CBDdata.objects.filter(
  1191. equip_id=equip_id, upl_time__range=(start_date, end_date)).values()
  1192. sta2 = [{"at": eval(x['cbd_data'])['at'],
  1193. "ah": eval(x['cbd_data'])['ah'],
  1194. "tim": x['upl_time']} for x in sta1]
  1195. data = json.dumps(sta2, cls=CJSONEncoder)
  1196. # print("data:",data)
  1197. return HttpResponse(data)
  1198. elif req == "filter":
  1199. f_tbegin = request.POST.get('begin')
  1200. f_tend = request.POST.get('end')
  1201. print("f_tbegin:", f_tbegin)
  1202. print("f_tend:", f_tend)
  1203. if f_tbegin:
  1204. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  1205. enddate = re.findall(r"\d+\.?\d*", f_tend)
  1206. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1207. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1208. print("start_date:", start_date)
  1209. print("end_date:", end_date)
  1210. sta1 = CBDdata.objects.filter(
  1211. equip_id=equip_id, upl_time__range=(start_date, end_date)).values()
  1212. sta2 = [{"at": eval(x['cbd_data'])['at'],
  1213. "ah": eval(x['cbd_data'])['ah'],
  1214. "tim": x['upl_time']} for x in sta1]
  1215. data = json.dumps(sta2, cls=CJSONEncoder)
  1216. else:
  1217. sta1 = CBDdata.objects.filter(
  1218. equip_id=equip_id).values()
  1219. sta2 = [{"at": eval(x['cbd_data'])['at'],
  1220. "ah": eval(x['cbd_data'])['ah'],
  1221. "tim": x['upl_time']} for x in sta1]
  1222. data = json.dumps(sta2, cls=CJSONEncoder)
  1223. # print("data:",data)
  1224. return HttpResponse(data)
  1225. # 测报灯上传图片测试页面:
  1226. @method_decorator(csrf_exempt, name='dispatch')
  1227. def imageview(request):
  1228. if request.method == 'GET':
  1229. print("-----image preview!-----")
  1230. imei = request.GET.get('imei')
  1231. print("imei:", imei)
  1232. disc = request.GET.get('disc')
  1233. nums = CBDphoto.objects.filter(equip_id=imei).count()
  1234. print("nums:", nums)
  1235. simid = CBDstatus.objects.get(equip_id=imei).simid
  1236. dver = eval(CBDstatus.objects.get(equip_id=imei).cbd_status)["dver"]
  1237. user_name = request.user.username
  1238. print('user_name=', user_name)
  1239. current_user = MyUser.objects.get(username=user_name)
  1240. if current_user.is_superuser:
  1241. role = "superuser"
  1242. elif current_user.is_staff:
  1243. role = "staff"
  1244. elif current_user.is_agency:
  1245. role = "agency"
  1246. else:
  1247. role = "user"
  1248. end_t = datetime.datetime.now()
  1249. start_t = end_t + datetime.timedelta(days=-2)
  1250. # 865650044618094
  1251. rain = "0"
  1252. datalist = CBDdata.objects.filter(equip_id=imei,upl_time__range=(start_t, end_t))
  1253. for i in datalist:
  1254. if eval(i.cbd_data)['rps'] == 1:
  1255. rain = "1"
  1256. break
  1257. return render(request, 'reportmanage/image.html', context={"nums": nums, "imei": imei, "disc":disc, "simid":simid, "dver":dver, "role":role,"rain":rain})
  1258. if request.method == 'POST':
  1259. print("-----image upload request!-----")
  1260. imei = request.GET.get('imei')
  1261. print("imei:", imei)
  1262. # 判断设备是否存在:
  1263. if Equip.objects.filter(equip_id=imei).exists():
  1264. length = request.META['CONTENT_LENGTH']
  1265. print("length:", length)
  1266. # 以当前时间命名图片
  1267. now_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
  1268. pic_name = now_time + '.jpg'
  1269. print("pic_name:", pic_name)
  1270. pic_dir = 'cbd_img/' + imei + '/' + \
  1271. pic_name[0:4] + '/' + pic_name[4:6] + '/'
  1272. if os.path.exists(pic_dir) == False:
  1273. # 文件夹加权限
  1274. os.makedirs(pic_dir)
  1275. # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO)
  1276. print("图片路径:", pic_dir + pic_name)
  1277. # img.save(pic_dir+pic_name)
  1278. with open(pic_dir + pic_name, "wb") as file:
  1279. file.write(request.body)
  1280. # print("request.body:", request.body)
  1281. # 数据库关联设备,并在照片的表中存入路径:
  1282. equip = Equip.objects.get(equip_id=imei)
  1283. CBDphoto.objects.create(equip_id=equip, addr=pic_dir + pic_name)
  1284. try:
  1285. print("------------------------------------")
  1286. time.sleep(3)
  1287. # insect_indentify 昆虫识别
  1288. # # 保存图片之后调用害虫识别接口
  1289. img_addr = pic_dir + pic_name
  1290. # img_addr = "cbd_img/862991419825259/2018/05/20180511201853.jpg"
  1291. # pic_name = "862991419825259"
  1292. # 正则切割文件名 去掉.jpg后缀
  1293. pattern = r'[.]'
  1294. res = img_addr
  1295. result = re.split(pattern, res)
  1296. insect_pic_name = result[0] + 'result' + '.jpg'
  1297. # 调用识别接口并获取识别结果
  1298. # url = 'http://60.166.14.184:9143/upload'
  1299. url = 'http://60.166.14.184:9143/upload'
  1300. # imageFile = {'imageFile':('pic.jpg',open("/home/web/yfwlw/" + img_addr,'rb'),'image/jpeg')}
  1301. imageFile = {'imageFile':('pic.jpg',open("/data/yfwlw/" + img_addr,'rb'),'image/jpeg')}
  1302. data = {'longitude':'118.279643','latitude':'31.221456'}
  1303. print('data:',data)
  1304. res = requests.post(url,data=data,files=imageFile)
  1305. print("res:",res.text)
  1306. resp = json.loads(res.text)
  1307. print("insect_pic_name:", insect_pic_name)
  1308. print("-------------------------识别成功")
  1309. except Exception as e:
  1310. print(e)
  1311. print("---------------------识别失败")
  1312. try:
  1313. # 将识别结果中的链接中的图片存入本地
  1314. # pic_dir_1 = "/home/web/yfwlw/result_cbd_img/" + imei + '/' + pic_name[0:4] + '/' + pic_name[4:6] + '/'
  1315. pic_dir_1 = "/data/yfwlw/result_cbd_img/" + imei + '/' + pic_name[0:4] + '/' + pic_name[4:6] + '/'
  1316. print("pic_dir_1:",pic_dir_1)
  1317. if os.path.exists(pic_dir_1) == False:
  1318. os.makedirs(pic_dir_1)
  1319. img_src = resp["returnResult"]["returnImageUrl"]
  1320. response = requests.get(img_src)
  1321. image = Image.open(BytesIO(response.content))
  1322. insect_image_addr = pic_dir_1 + insect_pic_name
  1323. image.save(insect_image_addr)
  1324. print("------------------图片保存成功")
  1325. try:
  1326. # 将识别结果存入数据库
  1327. pic_dir = "result_pyftp/" + os.path.join(event.path, insect_pic_name)
  1328. photo_obj = CBDphoto.objects.get(addr=img_addr)
  1329. photo_obj.indentify_photo = pic_dir
  1330. photo_obj.indentify_result = resp["returnResult"]["returnString"]
  1331. photo_obj.save()
  1332. print("图片路径:", pic_dir)
  1333. print("---------------数据库保存识别结果成功")
  1334. except Exception as ex:
  1335. print(ex)
  1336. print("---------------数据库保存识别结果失败")
  1337. except Exception as exc:
  1338. print(exc)
  1339. print("----------------识别结果图片保存失败")
  1340. try:
  1341. # equip = Equip.objects.get(equip_id=imei)
  1342. if equip.ftp_addr:
  1343. # http://www.yfzhwlw.com/cbd/pyftp/ftp_file/ykm_cbd/868575028845867/20190305/20:56:15.jpg
  1344. ftp_addr = equip.ftp_addr
  1345. pattern = r'[#]'
  1346. split_result = re.split(pattern, ftp_addr)
  1347. print("split_result:",split_result)
  1348. try:
  1349. need_result = split_result[1]
  1350. except:
  1351. print("对接设备的地址填写有误!请检查!")
  1352. need_result = "0"
  1353. if need_result == "1":
  1354. try:
  1355. r_photo = CBDphoto.objects.get(addr=img_addr).indentify_photo
  1356. indentify_result_1 = CBDphoto.objects.get(addr=img_addr).indentify_result
  1357. img_addr_1 = "http://120.27.222.26/" + img_addr
  1358. indentify_photo_1 = "http://120.27.222.26/" + r_photo
  1359. print("img_addr_1:",img_addr_1)
  1360. print("indentify_photo_1:",indentify_photo_1)
  1361. print("indentify_result_1:",indentify_result_1)
  1362. data = {
  1363. "Image":img_addr_1,
  1364. "Result_image":indentify_photo_1,
  1365. "Result":indentify_result_1,
  1366. "imei":imei
  1367. }
  1368. data = json.dumps(data, cls=CJSONEncoder)
  1369. print("data:",data)
  1370. res_1 = requests.post(split_result[0],data=data,timeout=2)
  1371. print("res_1:",res_1)
  1372. print("------------------识别结果发送成功!!!")
  1373. except Exception as aex:
  1374. print(aex)
  1375. try:
  1376. img_addr_1 = "http://120.27.222.26/" + img_addr
  1377. print("img_addr_1:",img_addr_1)
  1378. data = {
  1379. "Image":img_addr_1,
  1380. "imei":imei
  1381. }
  1382. data = json.dumps(data, cls=CJSONEncoder)
  1383. print("data:",data)
  1384. print("url:",split_result[0])
  1385. res_1 = requests.post(split_result[0],data=data)
  1386. except:
  1387. pass
  1388. print("------------------识别结果发送失败!!!")
  1389. else:
  1390. try:
  1391. # img_addr_1 = "http://www.yfznscd.com/" + img_addr
  1392. img_addr_1 = "http://120.27.222.26/" + img_addr
  1393. print("img_addr_1:",img_addr_1)
  1394. data = {
  1395. "Image":img_addr_1,
  1396. "imei":imei
  1397. }
  1398. data = json.dumps(data, cls=CJSONEncoder)
  1399. # 14:00设备会上传一张未开启闪光灯的照片
  1400. # 照片为黑色,所以在此做处理,判断时间 为 14:00的 不往对接用户发送
  1401. # pic_time = photo_obj.upl_time
  1402. # pic_time = pic_time.strftime("%Y-%m-%d %H:%M:%S")
  1403. # print("图片时间为:",pic_time,type(pic_time))
  1404. # if "14:00:" in pic_time:
  1405. # print("图片上传时间为14:00,所以不对外发送")
  1406. # else:
  1407. # data = json.dumps(data, cls=CJSONEncoder)
  1408. print("data:",data)
  1409. print("url:",split_result[0])
  1410. res_1 = requests.post(split_result[0],data=data)
  1411. print("res_1:",res_1.text)
  1412. # 判断文件大小的方法
  1413. # path = 'F:\YFWLW\yfwlw\\16_19_21.jpg'
  1414. # size = os.path.getsize(path)/1024 得到结果的单位为k
  1415. print("------------------对接设备图片发送成功!!!")
  1416. except Exception as aexc:
  1417. print(aexc)
  1418. print("------------------对接设备图片发送失败!!!")
  1419. except Exception as exce:
  1420. print(exce)
  1421. print("!!!")
  1422. return HttpResponse("-----image upload success!-----")
  1423. else:
  1424. return HttpResponse("-----image upload failed because this imei is not exists!-----")
  1425. # 测报灯上传图片测试页面2:
  1426. @method_decorator(csrf_exempt, name='dispatch')
  1427. def imageview2(request):
  1428. if request.method == 'POST':
  1429. print("-----image upload request!-----")
  1430. imei = request.GET.get('imei')
  1431. print("imei:", imei)
  1432. if Equip.objects.filter(equip_id=imei).exists():
  1433. length = request.META['CONTENT_LENGTH']
  1434. print("length:", length)
  1435. # 以当前时间命名图片
  1436. pic_name = time.strftime(
  1437. '%Y%m%d%H%M%S', time.localtime(time.time())) + '.jpg'
  1438. print("pic_name:", pic_name)
  1439. pic_dir = 'cbd_img/' + imei + '/' + \
  1440. pic_name[0:4] + '/' + pic_name[4:6] + '/'
  1441. if os.path.exists(pic_dir) == False:
  1442. # 文件夹加权限
  1443. os.makedirs(pic_dir)
  1444. # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO)
  1445. print("图片路径:", pic_dir + pic_name)
  1446. pic = request.FILES['img']
  1447. print("pic:",pic)
  1448. img = Image.open(pic).convert('RGB')
  1449. img.save('cbd_img/test.jpg')
  1450. return HttpResponse("-----image upload success!-----")
  1451. else:
  1452. return HttpResponse("-----image upload failed because this imei is not exists!-----")
  1453. # 测报灯图片列表视图:
  1454. @csrf_exempt
  1455. def imagelistview(request):
  1456. if request.method == 'GET':
  1457. print("-----image list view!-----")
  1458. imei = request.GET.get('imei')
  1459. print("imei:", imei)
  1460. user_name = request.user.username
  1461. print('user_name=', user_name)
  1462. disc = request.GET.get('disc')
  1463. current_user = MyUser.objects.get(username=user_name)
  1464. f_begin = request.GET.get('begin')
  1465. f_end = request.GET.get('end')
  1466. if current_user.is_superuser:
  1467. role = "superuser"
  1468. elif current_user.is_staff:
  1469. role = "staff"
  1470. elif current_user.is_agency:
  1471. role = "agency"
  1472. else:
  1473. role = "user"
  1474. # 获得当前页:
  1475. page = int(request.GET.get('page'))
  1476. print("page:", page)
  1477. equip_name = Equip.objects.get(equip_id=imei).equip_name
  1478. # 当前用户:返回用户,前端判断是否显示删除图片按钮
  1479. current_user = request.session.get('username')
  1480. print("current_user:", current_user)
  1481. current_user = MyUser.objects.get(username=current_user)
  1482. img = CBDphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)]
  1483. equip_name = Equip.objects.get(equip_id=imei).equip_name
  1484. nums = ""
  1485. if f_begin:
  1486. img = CBDphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)]
  1487. begindate = re.findall(r"\d+\.?\d*", f_begin)
  1488. enddate = re.findall(r"\d+\.?\d*", f_end)
  1489. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1490. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1491. print("start_date:", start_date)
  1492. print("end_date:", end_date)
  1493. img = CBDphoto.objects.filter(equip_id=imei, upl_time__range=(start_date, end_date))
  1494. nums = img.count()
  1495. img = img[(8*(page-1)):(page*8)]
  1496. end_t = datetime.datetime.now()
  1497. start_t = end_t + datetime.timedelta(days=-2)
  1498. # 865650044618094
  1499. rain = "0"
  1500. datalist = CBDdata.objects.filter(equip_id=imei,upl_time__range=(start_t, end_t))
  1501. for i in datalist:
  1502. if eval(i.cbd_data)['rps'] == 1:
  1503. rain = "1"
  1504. break
  1505. return render(request, 'reportmanage/imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei,'role':role,
  1506. 'disc':disc,'nums':nums,'rain':rain})
  1507. # 删除图片接口:
  1508. class Image_Delete(ListView):
  1509. def get(self, request):
  1510. pass
  1511. def post(self, request):
  1512. print("-----image delete!-----")
  1513. imei = request.POST.get('imei')
  1514. img_name = request.POST.get('addr')
  1515. img_list = request.POST.get('addrlist')
  1516. allpic = request.POST.get('allpic')
  1517. print("img_name:",img_name)
  1518. if allpic == "1":
  1519. all_photo = CBDphoto.objects.filter(equip_id=imei)
  1520. print("-----image delete ok!-----")
  1521. for i in all_photo:
  1522. if os.path.exists(i.addr) == True:
  1523. # 删除图片文件
  1524. os.remove(i.addr)
  1525. # 删除数据库照片列表中,照片路径:
  1526. try:
  1527. CBDphoto.objects.filter(equip_id=imei, addr=i.addr).delete()
  1528. print("-----image delete ok!-----")
  1529. except:
  1530. print("-----image delete failed!-----")
  1531. else:
  1532. # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉
  1533. # 因此不管何时都删除数据库路径
  1534. try:
  1535. CBDphoto.objects.filter(equip_id=imei, addr=i.addr).delete()
  1536. except Exception as e:
  1537. print("========>>",e)
  1538. print("-----image not exist!-----")
  1539. return HttpResponse("0")
  1540. if img_list:
  1541. print("img_list:",type(eval(img_list)))
  1542. print("img_list:",eval(img_list))
  1543. for i in eval(img_list):
  1544. if os.path.exists(i) == True:
  1545. # 删除图片文件
  1546. os.remove(i)
  1547. # 删除数据库照片列表中,照片路径:
  1548. try:
  1549. CBDphoto.objects.filter(equip_id=imei, addr=i).delete()
  1550. print("-----image delete ok!-----")
  1551. except:
  1552. print("-----image delete failed!-----")
  1553. else:
  1554. # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉
  1555. # 因此不管何时都删除数据库路径
  1556. try:
  1557. CBDphoto.objects.filter(equip_id=imei, addr=i).delete()
  1558. except Exception as e:
  1559. print("========>>",e)
  1560. print("-----image not exist!-----")
  1561. data = "0"
  1562. return HttpResponse(data)
  1563. if os.path.exists(img_name) == True:
  1564. # 删除图片文件
  1565. os.remove(img_name)
  1566. # 删除数据库照片列表中,照片路径:
  1567. try:
  1568. CBDphoto.objects.filter(equip_id=imei, addr=img_name).delete()
  1569. print("-----image delete ok!-----")
  1570. data = "1"
  1571. return HttpResponse(data)
  1572. except:
  1573. print("-----image delete failed!-----")
  1574. data = "0"
  1575. return HttpResponse(data)
  1576. else:
  1577. # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉
  1578. # 因此不管何时都删除数据库路径
  1579. try:
  1580. CBDphoto.objects.filter(equip_id=imei, addr=img_name).delete()
  1581. except:
  1582. pass
  1583. print("-----image not exist!-----")
  1584. data = "0"
  1585. return HttpResponse(data)
  1586. # 图片描述接口:
  1587. @method_decorator(csrf_exempt, name='dispatch')
  1588. class Image_Desc(ListView):
  1589. def get(self, request):
  1590. req = request.GET.get('req')
  1591. print('req:',req)
  1592. current_user = request.session.get('username')
  1593. print("current_user:", current_user)
  1594. current_user = MyUser.objects.get(username=current_user)
  1595. # 请求害虫种类列表:
  1596. if req == "pest_kind":
  1597. print("-----get req:pestkind !-----")
  1598. pest_kinds = CBDpest.objects.filter(user=current_user)
  1599. data = [{"pest_name": x.pest_name,} for x in pest_kinds]
  1600. data = json.dumps(data)
  1601. print('data:',data)
  1602. return HttpResponse(data)
  1603. # 请求图片描述:
  1604. elif req == "desc":
  1605. print("-----get req:desc !-----")
  1606. img_name = request.GET.get('addr')
  1607. print("img_name:",img_name)
  1608. print("type img_name:",type(img_name))
  1609. descs = CBDphoto_desc.objects.filter(photo_id=CBDphoto.objects.get(addr=img_name),desc_user=current_user)
  1610. data = [{"crop_name": x.crop_name,
  1611. "pest_case": x.pest_case,
  1612. "pest_name": x.pest_name.pest_name,
  1613. "pest_num":x.pest_num} for x in descs]
  1614. print("data:",data)
  1615. data = json.dumps(data)
  1616. return HttpResponse(data)
  1617. # 增加害虫种类:
  1618. elif req == "add_pest":
  1619. print("-----get req:add_pest !-----")
  1620. pest = request.GET.get('pest')
  1621. print("pest:",pest)
  1622. # 如果该用户下的该害虫名称已经存在!
  1623. if CBDpest.objects.filter(user=current_user,pest_name=pest).exists():
  1624. data = '1'
  1625. return HttpResponse(data)
  1626. try:
  1627. CBDpest.objects.create(user=current_user,pest_name=pest)
  1628. pest_kinds = CBDpest.objects.filter(user=current_user)
  1629. data = [{"pest_name": x.pest_name,} for x in pest_kinds]
  1630. data = json.dumps(data)
  1631. print('data:',data)
  1632. return HttpResponse(data)
  1633. except:
  1634. data = '2'
  1635. return HttpResponse(data)
  1636. # 删除害虫种类:
  1637. elif req == "del_pest":
  1638. print("-----get req:del_pest !-----")
  1639. pests = request.GET.get('pest')
  1640. pests = json.loads(pests)
  1641. for i in pests:
  1642. CBDpest.objects.filter(user=current_user,pest_name=i).delete()
  1643. pest_kinds = CBDpest.objects.filter(user=current_user)
  1644. data = [{"pest_name": x.pest_name,} for x in pest_kinds]
  1645. data = json.dumps(data)
  1646. print('data:',data)
  1647. return HttpResponse(data)
  1648. def post(self, request):
  1649. req = request.POST.get('req')
  1650. print('req:',req)
  1651. current_user = request.session.get('username')
  1652. current_user = MyUser.objects.get(username=current_user)
  1653. img_name = request.POST.get('addr')
  1654. print('img_name:',img_name)
  1655. photo_time = request.POST.get('photo_time')
  1656. desc = request.POST.get('describe')
  1657. # print("json的desc:",desc)
  1658. desc = json.loads(desc)
  1659. # print("转为dict的desc:",desc)
  1660. # 增加描述:
  1661. if req == "add_save":
  1662. print("-----add image describe --post!-----")
  1663. print("desc['pest_name']:",desc['pest_name'])
  1664. print("desc['pest_num']:",desc['pest_num'])
  1665. print("desc['crop_name']:",desc['crop_name'])
  1666. print("desc['pest_case']:",desc['pest_case'])
  1667. if CBDphoto_desc.objects.filter(desc_user=current_user,
  1668. photo_id = CBDphoto.objects.get(addr=img_name),
  1669. pest_name=CBDpest.objects.get(user=current_user,
  1670. pest_name=desc['pest_name'])).exists():
  1671. data = '2'
  1672. return HttpResponse(data)
  1673. try:
  1674. CBDphoto_desc.objects.create(
  1675. desc_user = current_user,
  1676. photo_id = CBDphoto.objects.get(addr=img_name),
  1677. pest_name = CBDpest.objects.get(user=current_user,pest_name=desc['pest_name']),
  1678. pest_num = desc['pest_num'],
  1679. crop_name = desc['crop_name'],
  1680. pest_case = desc['pest_case'],
  1681. pest_name2 = desc['pest_name'],
  1682. photo_time = photo_time,
  1683. photo_time1 = CBDphoto.objects.get(addr=img_name).upl_time,
  1684. equip_id = CBDphoto.objects.get(addr=img_name).equip_id_id
  1685. )
  1686. print("-----image add describe ok!-----")
  1687. data = "0"
  1688. return HttpResponse(data)
  1689. except:
  1690. print("-----image add describe failed!-----")
  1691. data = "1"
  1692. return HttpResponse(data)
  1693. # 修改描述:
  1694. elif req == "change_save":
  1695. print("-----change image describe --post!-----")
  1696. print("desc['pest_name']:",desc['pest_name'])
  1697. print("desc['pest_num']:",desc['pest_num'])
  1698. print("desc['crop_name']:",desc['crop_name'])
  1699. print("desc['pest_case']:",desc['pest_case'])
  1700. try:
  1701. CBDphoto_desc.objects.filter(desc_user = current_user
  1702. ,photo_id = CBDphoto.objects.get(addr=img_name)
  1703. # ,pest_name = CBDpest.objects.get(pest_name=desc['pest_name'])
  1704. ,pest_name = CBDpest.objects.get(user=current_user,pest_name=desc['pest_name'])
  1705. ).update(pest_num = desc['pest_num']
  1706. ,crop_name = desc['crop_name']
  1707. ,pest_case = desc['pest_case']
  1708. ,pest_name2 = desc['pest_name'])
  1709. print("-----change image describe ok!-----")
  1710. data = "0"
  1711. return HttpResponse(data)
  1712. except:
  1713. print("-----change image describe failed!-----")
  1714. data = "1"
  1715. return HttpResponse(data)
  1716. # 删除描述:
  1717. elif req == "del_desc":
  1718. print("-----del image describe --post!-----")
  1719. print("desc['pest_name']:",desc['pest_name'])
  1720. try:
  1721. CBDphoto_desc.objects.filter(desc_user = current_user
  1722. ,photo_id = CBDphoto.objects.get(addr=img_name)
  1723. # ,pest_name = CBDpest.objects.get(pest_name=desc['pest_name'])
  1724. ,pest_name = CBDpest.objects.get(user=current_user,pest_name=desc['pest_name'])
  1725. ).delete()
  1726. print("-----delete image describe ok!-----")
  1727. data = "0"
  1728. return HttpResponse(data)
  1729. except:
  1730. print("-----delete image describe failed!-----")
  1731. data = "1"
  1732. return HttpResponse(data)
  1733. # 图片害虫数据统计接口:
  1734. @method_decorator(csrf_exempt, name='dispatch')
  1735. class Pest_Data(ListView):
  1736. def get(self, request):
  1737. return render(request, 'reportmanage/cbd_pest_data.html', context={})
  1738. def post(self, request):
  1739. current_user = request.session.get('username')
  1740. print("current_user:", current_user)
  1741. current_user = MyUser.objects.get(username=current_user)
  1742. # 先通过imei:查到时间段的照片:
  1743. # imei = '012345'
  1744. imei = request.POST.get('imei')
  1745. print("============>>",imei)
  1746. tbegin = request.POST.get('tbegin')
  1747. tend = request.POST.get('tend')
  1748. # 首次查看统计,默认为最近一个月的照片描述:
  1749. if tbegin:
  1750. begindate = re.findall(r"\d+\.?\d*", tbegin)
  1751. enddate = re.findall(r"\d+\.?\d*", tend)
  1752. print("begindate:", begindate)
  1753. print("enddate:", enddate)
  1754. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1755. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1756. # photos = CBDphoto.objects.filter(equip_id=Equip.objects.get(equip_id=imei),upl_time__range=(start_date, end_date))
  1757. des = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user,photo_time1__range=(start_date, end_date)).values()
  1758. else:
  1759. # 获取当前日期:
  1760. now_time = datetime.datetime.now()
  1761. # 往前推一个月:
  1762. if now_time.month == 1:
  1763. last_month_now = now_time.replace(year=now_time.year-1, month=12)
  1764. else:
  1765. try:
  1766. last_month_now = now_time.replace(month=now_time.month-1)
  1767. except ValueError:
  1768. last_month_now = now_time.replace(month=now_time.month-1,day=now_time.day-3)
  1769. tbegin = last_month_now
  1770. tend = now_time + datetime.timedelta(days=+1)
  1771. # photos = CBDphoto.objects.filter(equip_id=Equip.objects.get(equip_id=imei),upl_time__range=(tbegin, tend))
  1772. des = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user,photo_time1__range=(tbegin, tend)).values()
  1773. data = []
  1774. des = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user).values()
  1775. for ii in des:
  1776. # 遍历一条描述,获取描述的信息:
  1777. desc = {
  1778. "pest_num":ii['pest_num'],
  1779. "pest_name":ii['pest_name2'],
  1780. "crop_name":ii['crop_name'],
  1781. "pest_case":ii['pest_case'],
  1782. "add_time":ii['photo_time1']
  1783. }
  1784. data.append(desc)
  1785. print('data:',data)
  1786. data = json.dumps(data, cls=CJSONEncoder)
  1787. return HttpResponse(data)
  1788. # 害虫统计的表格数据:
  1789. @method_decorator(csrf_exempt, name='dispatch')
  1790. class Pest_TableData(ListView):
  1791. def get(self, request):
  1792. pass
  1793. def post(self, request):
  1794. current_user = request.session.get('username')
  1795. print("current_user:", current_user)
  1796. current_user = MyUser.objects.get(username=current_user)
  1797. # 得到imei
  1798. imei = request.POST.get('imei')
  1799. print("imei:", imei)
  1800. pest_name = request.POST.get("pest_name")
  1801. tbegin = request.POST.get("tbegin")
  1802. tend = request.POST.get("tend")
  1803. # photos = CBDphoto.objects.filter(equip_id_id=imei).values()
  1804. # if tbegin:
  1805. # photos = CBDphoto.objects.filter(equip_id=Equip.objects.get(equip_id=imei),upl_time__range=(tbegin, tend)).values()
  1806. # descs=[]
  1807. # for i in photos:
  1808. # print("i.addr:",i['addr'])
  1809. # # 查描述列表:
  1810. # desc = CBDphoto_desc.objects.filter(desc_user=current_user,photo_id = CBDphoto.objects.get(addr=i['addr'])).values()
  1811. # descs.append(desc)
  1812. # print("descs:",descs)
  1813. dat = []
  1814. # for i in descs:
  1815. # for ii in i:
  1816. # dat.append({
  1817. # "pest_num":ii['pest_num'],
  1818. # "pest_name":ii['pest_name2'],
  1819. # "crop_name":ii['crop_name'],
  1820. # "pest_case":ii['pest_case'],
  1821. # "add_time":ii['photo_time']
  1822. # })
  1823. if tbegin:
  1824. begindate = re.findall(r"\d+\.?\d*", tbegin)
  1825. enddate = re.findall(r"\d+\.?\d*", tend)
  1826. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1827. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1828. desc = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user,photo_time1__range=(start_date, end_date)).values()
  1829. desc = CBDphoto_desc.objects.filter(equip_id=imei,desc_user=current_user).values()
  1830. for ii in desc:
  1831. # if ii['photo_time1']:
  1832. dat.append({
  1833. "pest_num":ii['pest_num'],
  1834. "pest_name":ii['pest_name2'],
  1835. "crop_name":ii['crop_name'],
  1836. "pest_case":ii['pest_case'],
  1837. "add_time":ii['photo_time1']
  1838. })
  1839. if pest_name:
  1840. dat = []
  1841. for ii in desc:
  1842. if pest_name == ii['pest_name2']:
  1843. dat.append({
  1844. "pest_num":ii['pest_num'],
  1845. "pest_name":ii['pest_name2'],
  1846. "crop_name":ii['crop_name'],
  1847. "pest_case":ii['pest_case'],
  1848. "add_time":ii['photo_time1']
  1849. })
  1850. page = int(request.POST.get('page'))
  1851. print("当前页为:",page)
  1852. nums = len(dat)
  1853. print('nums:',nums)
  1854. dat = dat[(10*(page-1)):(page*10)]
  1855. data = {"nums":nums,"dat":dat}
  1856. data = json.dumps(data, cls=CJSONEncoder)
  1857. return HttpResponse(data)
  1858. # 识别统计页面
  1859. class Manual_Pest_Data(ListView):
  1860. def get(self,request):
  1861. e_id = request.GET.get("e_id")
  1862. disc = RecentCBDdata.objects.get(equip_id=e_id).disc
  1863. return render(request, 'reportmanage/cbd_manual_pest_data.html', context={"e_id": e_id, "disc": disc})
  1864. def post(self,request):
  1865. pass
  1866. import xlwt
  1867. # 杀虫灯数据导出接口
  1868. class SCD_Data_Export(ListView):
  1869. def get(self,request):
  1870. equip_id = request.GET.get('id')
  1871. print("请求数据的设备id:",equip_id)
  1872. f_tbegin = request.GET.get('begin')
  1873. f_tend = request.GET.get('end')
  1874. filename = request.GET.get('filename')
  1875. print("filename:", filename)
  1876. print("f_tbegin:", f_tbegin)
  1877. print("f_tend:", f_tend)
  1878. print("f_tbegin:", type(f_tbegin))
  1879. print("f_tend:", type(f_tend))
  1880. # 查询时间段
  1881. if f_tbegin:
  1882. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  1883. enddate = re.findall(r"\d+\.?\d*", f_tend)
  1884. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  1885. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  1886. print("start_date:", start_date)
  1887. print("end_date:", end_date)
  1888. sta1 = SCDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  1889. print("sta1:", sta1)
  1890. sta2 = [{"equip_name": x.equip_id.equip_name,
  1891. "scd_data": eval(x.scd_data),
  1892. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  1893. # 查询全部
  1894. else:
  1895. sta1 = SCDdata.objects.filter(equip_id=equip_id)
  1896. print("sta1:",sta1)
  1897. sta2 = [{"equip_name": x.equip_id.equip_name,
  1898. "scd_data": eval(x.scd_data),
  1899. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  1900. title = ["设备ID","设备名称","设备开关","工作状态","灯管状态","雨控状态",
  1901. "温控状态","倾倒状态","定时(h)","电击次数","温度(℃)","湿度(%)","充电电压(V)","电池电压(V)","经度","纬度","上报时间"]
  1902. book = xlwt.Workbook() # 创建一个excel对象
  1903. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  1904. # --------------------------------------
  1905. # pattern_top = xlwt.Pattern()
  1906. # pattern_top.pattern = xlwt.Pattern.SOLID_PATTERN
  1907. # pattern_top.pattern_fore_colour = 14
  1908. # style = xlwt.XFStyle()
  1909. # style.pattern = pattern_top
  1910. # ---------------------------------------
  1911. for i in range(len(title)): # 遍历列
  1912. # sheet.write(0,i,title[i],style) # 将title数组中的字段写入到0行i列中
  1913. sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  1914. print(sta2)
  1915. for x in range(len(sta2)): # 遍历列表
  1916. if sta2[x]["equip_name"] == "":
  1917. equip_name = "无"
  1918. elif sta2[x]["equip_name"] != "":
  1919. equip_name = sta2[x]["equip_name"]
  1920. if sta2[x]["scd_data"]["ds"] == 0:
  1921. ds = "关"
  1922. elif sta2[x]["scd_data"]["ds"] != 0:
  1923. ds = "开"
  1924. if sta2[x]["scd_data"]["ws"] == 0:
  1925. ws = "待机"
  1926. elif sta2[x]["scd_data"]["ws"] == 1:
  1927. ws = "工作"
  1928. elif sta2[x]["scd_data"]["ws"] == 2:
  1929. ws = "充电"
  1930. if sta2[x]["scd_data"]["tbs"] == 0:
  1931. tbs = "正常"
  1932. elif sta2[x]["scd_data"]["tbs"] != 0:
  1933. tbs = "保护"
  1934. if sta2[x]["scd_data"]["rps"] == 0:
  1935. rps = "正常"
  1936. elif sta2[x]["scd_data"]["rps"] != 0:
  1937. rps = "保护"
  1938. if sta2[x]["scd_data"]["tps"] == 0:
  1939. tps = "正常"
  1940. elif sta2[x]["scd_data"]["tps"] != 0:
  1941. tps = "保护"
  1942. if sta2[x]["scd_data"]["dps"] == 0:
  1943. dps = "正常"
  1944. elif sta2[x]["scd_data"]["dps"] != 0:
  1945. dps = "保护"
  1946. if sta2[x]["scd_data"]["tt"] == 0:
  1947. tt = "常亮"
  1948. elif sta2[x]["scd_data"]["tt"] != 0:
  1949. tt = sta2[x]["scd_data"]["tt"]
  1950. sheet.write(x+1,0,equip_id) # 将equip_id写入到第x+1行,第0列中
  1951. sheet.write(x+1,1,equip_name)
  1952. sheet.write(x+1,2,ds) # 设备开关
  1953. sheet.write(x+1,3,ws) # 工作状态
  1954. sheet.write(x+1,4,tbs) # 灯管状态
  1955. sheet.write(x+1,5,rps) # 雨控状态
  1956. sheet.write(x+1,6,tps) # 温控状态
  1957. sheet.write(x+1,7,dps) # 倾倒状态
  1958. sheet.write(x+1,8,tt) # 定时
  1959. sheet.write(x+1,9,sta2[x]["scd_data"]["ct"]) # 电击次数
  1960. sheet.write(x+1,10,sta2[x]["scd_data"]["at"]) # 温度
  1961. sheet.write(x+1,11,sta2[x]["scd_data"]["ah"]) # 湿度
  1962. sheet.write(x+1,12,"%.2f"%(sta2[x]["scd_data"]["cv"]/1000)) # 充电电压
  1963. sheet.write(x+1,13,"%.2f"%(sta2[x]["scd_data"]["bv"]/1000)) # 电池电压
  1964. sheet.write(x+1,14,sta2[x]["scd_data"]["lng"]) # 经度
  1965. sheet.write(x+1,15,sta2[x]["scd_data"]["lat"]) # 纬度
  1966. sheet.write(x+1,16,sta2[x]["upl_time"]) # 上报时间
  1967. sheet.col(0).width = 256 * 18
  1968. sheet.col(12).width = 256 * 11
  1969. sheet.col(13).width = 256 * 11
  1970. sheet.col(16).width = 256 * 20
  1971. # 写出到IO
  1972. output = BytesIO()
  1973. book.save(output)
  1974. # 重新定位到开始
  1975. output.seek(0)
  1976. response = HttpResponse(content_type='application/vnd.ms-excel')
  1977. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  1978. response.write(output.getvalue())
  1979. return response
  1980. # book.save('demo.xls')
  1981. # return HttpResponse(book)
  1982. def post(self,request):
  1983. pass
  1984. # 测报灯数据导出接口
  1985. class CBD_Data_Export(ListView):
  1986. def get(self,request):
  1987. equip_id = request.GET.get('id')
  1988. print("请求数据的设备id:",equip_id)
  1989. f_tbegin = request.GET.get('begin')
  1990. f_tend = request.GET.get('end')
  1991. filename = request.GET.get('filename')
  1992. print("f_tbegin:", f_tbegin)
  1993. print("f_tend:", f_tend)
  1994. print("f_tbegin:", type(f_tbegin))
  1995. print("f_tend:", type(f_tend))
  1996. # 查询时间段
  1997. if f_tbegin:
  1998. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  1999. enddate = re.findall(r"\d+\.?\d*", f_tend)
  2000. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2001. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2002. print("start_date:", start_date)
  2003. print("end_date:", end_date)
  2004. sta1 = CBDdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  2005. print("sta1:", sta1)
  2006. sta2 = [{"equip_name": x.equip_id.equip_name,
  2007. "cbd_data": eval(x.cbd_data),
  2008. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  2009. # 查询全部
  2010. else:
  2011. sta1 = CBDdata.objects.filter(equip_id=equip_id)
  2012. print("sta1:",sta1)
  2013. sta2 = [{"equip_name": x.equip_id.equip_name,
  2014. "cbd_data": eval(x.cbd_data),
  2015. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  2016. title = ["设备ID","设备名称","环境温度(℃)","环境湿度(%)","加热仓温度(℃)","雨控状态",
  2017. "温控状态","光控状态","经度","纬度","上报时间"]
  2018. book = xlwt.Workbook() # 创建一个excel对象
  2019. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  2020. for i in range(len(title)): # 遍历列
  2021. sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  2022. print(sta2)
  2023. for x in range(len(sta2)): # 遍历列表
  2024. if sta2[x]["equip_name"] == "":
  2025. equip_name = "无"
  2026. elif sta2[x]["equip_name"] != "":
  2027. equip_name = sta2[x]["equip_name"]
  2028. if sta2[x]["cbd_data"]["rps"] == 0:
  2029. rps = "正常"
  2030. elif sta2[x]["cbd_data"]["rps"] != 0:
  2031. rps = "雨控"
  2032. if sta2[x]["cbd_data"]["tps"] == 0:
  2033. tps = "正常"
  2034. elif sta2[x]["cbd_data"]["tps"] != 0:
  2035. tps = "温控"
  2036. if sta2[x]["cbd_data"]["lps"] == 0:
  2037. lps = "正常"
  2038. elif sta2[x]["cbd_data"]["lps"] != 0:
  2039. lps = "光控"
  2040. sheet.write(x+1,0,equip_id) # 将equip_id写入到第x+1行,第0列中
  2041. sheet.write(x+1,1,equip_name)
  2042. sheet.write(x+1,2,"%.1f"%(int(sta2[x]["cbd_data"]["at"])/10)) # 环境温度
  2043. sheet.write(x+1,3,"%.1f"%(int(sta2[x]["cbd_data"]["ah"])/10)) # 环境湿度
  2044. sheet.write(x+1,4,sta2[x]["cbd_data"]["hrt"]) # 加热仓温度
  2045. sheet.write(x+1,5,rps) # 雨控状态
  2046. sheet.write(x+1,6,tps) # 温控状态
  2047. sheet.write(x+1,7,lps) # 光控状态
  2048. sheet.write(x+1,8,sta2[x]["cbd_data"]["lng"]) # 经度
  2049. sheet.write(x+1,9,sta2[x]["cbd_data"]["lat"]) # 纬度
  2050. sheet.write(x+1,10,sta2[x]["upl_time"]) # 上报时间
  2051. sheet.col(0).width = 256 * 18
  2052. sheet.col(2).width = 256 * 11
  2053. sheet.col(3).width = 256 * 11
  2054. sheet.col(4).width = 256 * 13
  2055. sheet.col(8).width = 256 * 11
  2056. sheet.col(9).width = 256 * 11
  2057. sheet.col(10).width = 256 * 20
  2058. # 写出到IO
  2059. output = BytesIO()
  2060. book.save(output)
  2061. # 重新定位到开始
  2062. output.seek(0)
  2063. response = HttpResponse(content_type='application/vnd.ms-excel')
  2064. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  2065. response.write(output.getvalue())
  2066. return response
  2067. # book.save('demo.xls')
  2068. # return HttpResponse(book)
  2069. def post(self,request):
  2070. pass
  2071. # 害虫识别接口
  2072. class Pests_Identification(ListView):
  2073. def get(self,request):
  2074. pass
  2075. def post(self,request):
  2076. # img_addr = request.POST.get('img_addr')
  2077. # photo_obj = CBDphoto.objects.get(addr=img_addr)
  2078. # try:
  2079. # data = {"result":photo_obj.indentify_result,
  2080. # "image_addr":photo_obj.indentify_photo}
  2081. # except:
  2082. # data = {"result":"",
  2083. # "image_addr":""}
  2084. # data = json.dumps(data, cls=CJSONEncoder)
  2085. # return HttpResponse(data)
  2086. img_addr = request.POST.get('img_addr')
  2087. photo_obj = CBDphoto.objects.get(addr=img_addr)
  2088. url = 'http://60.166.14.184:9146/upload'
  2089. # 2019-3-18测试用接口
  2090. # url = 'http://60.166.14.184:9143/upload'
  2091. imageFile = {'imageFile':('pic.jpg',open(img_addr,'rb'),'image/jpeg')}
  2092. data = {'longitude':'118.279643','latitude':'31.221456'}
  2093. print('data:',data)
  2094. res = requests.post(url,data=data,files=imageFile)
  2095. print("res:",res.text)
  2096. try:
  2097. resp = json.loads(res.text)
  2098. except Exception as e:
  2099. print(e)
  2100. print("识别失败")
  2101. data = "1"
  2102. return HttpResponse(data)
  2103. print(resp["returnResult"]["returnString"])
  2104. data = {"image":resp["returnResult"]["returnImageUrl"], "result":resp["returnResult"]["returnString"]}
  2105. data = json.dumps(data, cls=CJSONEncoder)
  2106. return HttpResponse(data)
  2107. # 害虫识别接口丨新
  2108. class Pests_Identification_New(ListView):
  2109. def get(self,request):
  2110. pass
  2111. def post(self,request):
  2112. # img_addr = request.POST.get('img_addr')
  2113. # photo_obj = CBDphoto.objects.get(addr=img_addr)
  2114. # try:
  2115. # data = {"result":photo_obj.indentify_result,
  2116. # "image_addr":photo_obj.indentify_photo}
  2117. # except:
  2118. # data = {"result":"",
  2119. # "image_addr":""}
  2120. # data = json.dumps(data, cls=CJSONEncoder)
  2121. # return HttpResponse(data)
  2122. img_addr = request.POST.get('img_addr')
  2123. photo_obj = CBDphoto.objects.get(addr=img_addr)
  2124. # url = 'http://60.166.14.184:9143/upload'
  2125. url = 'http://60.166.14.184:9143/upload'
  2126. imageFile = {'imageFile':('pic.jpg',open(img_addr,'rb'),'image/jpeg')}
  2127. data = {'longitude':'118.279643','latitude':'31.221456'}
  2128. print('data:',data)
  2129. res = requests.post(url,data=data,files=imageFile)
  2130. print("res:",res.text)
  2131. try:
  2132. resp = json.loads(res.text)
  2133. except Exception as e:
  2134. print(e)
  2135. print("识别失败")
  2136. data = "1"
  2137. return HttpResponse(data)
  2138. print(resp["returnResult"]["returnString"])
  2139. data = {"image":resp["returnResult"]["returnImageUrl"], "result":resp["returnResult"]["returnString"]}
  2140. data = json.dumps(data, cls=CJSONEncoder)
  2141. return HttpResponse(data)
  2142. # 气象站报表管理类视图:
  2143. class QXZreport_View(ListView):
  2144. def get(self, request):
  2145. current_user = request.session.get('username')
  2146. current_user = MyUser.objects.get(username=current_user)
  2147. if current_user.is_superuser == True:
  2148. role = "superuser"
  2149. else:
  2150. role = "user"
  2151. return render(request, 'reportmanage/qxz_report.html', context={"role":role})
  2152. # 气象站分页接口
  2153. class QXZ_Page(ListView):
  2154. def get(self,request):
  2155. current_user = request.user.username
  2156. print("current_user:", current_user)
  2157. current_user = MyUser.objects.get(username=current_user)
  2158. page = request.GET.get('page')
  2159. page = int(page)
  2160. f_id = request.GET.get('f_id')
  2161. print("f_id:", f_id)
  2162. is_online = request.GET.get('is_online')
  2163. etype = request.GET.get('etype')
  2164. print("is_online------>>",is_online)
  2165. print("etype------>>",etype)
  2166. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  2167. # 用户
  2168. if f_id != "" and is_online != "":
  2169. # equip_list = Equip.objects.filter(equip_type=5,equip_user=current_user, equip_id__contains=f_id).values()
  2170. equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id, is_online=is_online)
  2171. elif f_id == "" and is_online != "":
  2172. equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user, is_online=is_online)
  2173. elif f_id != "" and is_online == "":
  2174. equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user, equip_id__equip_id__contains=f_id)
  2175. elif f_id == "" and is_online == "":
  2176. # equip_list = Equip.objects.filter(equip_type=5,equip_user=current_user).values()
  2177. equip_list = QXZstatus_New.objects.filter(equip_id__equip_user=current_user)
  2178. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  2179. # 代理商
  2180. if f_id != "" and is_online != "":
  2181. # equip_list = Equip.objects.filter(equip_type=5,equip_agency=current_user.user_agency, equip_id__contains=f_id).values()
  2182. 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)
  2183. elif f_id == "" and is_online != "":
  2184. equip_list = QXZstatus_New.objects.filter(equip_id__equip_agency=current_user.user_agency, is_online=is_online)
  2185. elif f_id != "" and is_online == "":
  2186. equip_list = QXZstatus_New.objects.filter(equip_id__equip_agency=current_user.user_agency, equip_id__equip_id__contains=f_id)
  2187. elif f_id == "" and is_online == "":
  2188. # equip_list = Equip.objects.filter(equip_type=5,equip_agency=current_user.user_agency).values()
  2189. equip_list = QXZstatus_New.objects.filter(equip_id__equip_agency=current_user.user_agency)
  2190. else:
  2191. # 管理员
  2192. if f_id != "" and is_online != "":
  2193. # equip_list = Equip.objects.filter(equip_type=5,equip_agency=current_user.user_agency, equip_id__contains=f_id).values()
  2194. equip_list = QXZstatus_New.objects.filter(equip_id__equip_id__contains=f_id, is_online=is_online)
  2195. elif f_id == "" and is_online != "":
  2196. print("触发!!!")
  2197. equip_list = QXZstatus_New.objects.filter(is_online=is_online)
  2198. elif f_id != "" and is_online == "":
  2199. equip_list = QXZstatus_New.objects.filter(equip_id__equip_id__contains=f_id)
  2200. elif f_id == "" and is_online == "":
  2201. equip_list = QXZstatus_New.objects.all()
  2202. e_ids = []
  2203. for x in equip_list:
  2204. if etype != "":
  2205. if len(x.equip_id_id) == int(etype):
  2206. 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}
  2207. e_ids.append(n_d)
  2208. else:
  2209. 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}
  2210. e_ids.append(n_d)
  2211. nums = len(e_ids)
  2212. # print(nums)
  2213. ids = e_ids[(10*(page-1)):(page*10)]
  2214. data = {'ids': ids, 'nums': nums}
  2215. print("!!!",data)
  2216. data = json.dumps(data, cls=CJSONEncoder)
  2217. return HttpResponse(data)
  2218. def post(self,request):
  2219. pass
  2220. # 气象站修改图片接口
  2221. class QXZ_Photo(ListView):
  2222. def get(self,request):
  2223. pass
  2224. def post(self,request):
  2225. e_id = request.POST.get('id')
  2226. qxz_sta = QXZstatus.objects.get(equip_id=e_id)
  2227. qxz_photo = request.FILES['upicture']
  2228. print("气象站图片:", qxz_photo)
  2229. qxz_photo_dir = 'qxz_photo/'
  2230. # 判断如果路径不存在,即创建路径
  2231. if os.path.exists(qxz_photo_dir) == False:
  2232. os.makedirs(qxz_photo_dir)
  2233. img = Image.open(qxz_photo)
  2234. img.save(qxz_photo_dir + e_id+".png")
  2235. new_photo = qxz_photo_dir + e_id +".png"
  2236. print("new_photo:",new_photo)
  2237. # 数据库关联设备,并在照片的表中存入路径:
  2238. qxz_sta.qxz_picture = new_photo
  2239. qxz_sta.save()
  2240. data = "0"
  2241. return HttpResponse(data)
  2242. # 气象站详情接口
  2243. class QXZ_Detail(ListView):
  2244. def get(self,request):
  2245. qxz_dict_1 = copy.deepcopy(qxz_dict) # 如果不拷贝 后面折线图修改字典会导致字典内容变化 从而造成数据错误
  2246. current_user = request.user.username
  2247. print("current_user:", current_user)
  2248. try:
  2249. current_user = MyUser.objects.get(username=current_user)
  2250. except:
  2251. current_user = MyUser.objects.get(username="public")
  2252. start_date = datetime.datetime.now() - datetime.timedelta(days=1)
  2253. end_date = datetime.datetime.now()
  2254. print("start_date:", start_date)
  2255. print("end_date:", end_date)
  2256. e_id = request.GET.get('id')
  2257. sta1 = QXZdata.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date)).values()
  2258. # print(len(eval(sta1[0]['qxz_data'])['data']))
  2259. p_data = {"values":[], "times":[]}
  2260. all_data = [] # 所有数据
  2261. try:
  2262. # 先遍历有几种类型的数据
  2263. for a in range(len(eval(sta1[0]["qxz_data"])["data"])):
  2264. # 再遍历24小时内的每条数据
  2265. for x in sta1:
  2266. # sta = {"qxz_data": x['qxz_data'], "upl_time": x['upl_time'],
  2267. # "equip_id": x['equip_id_id']}
  2268. qxzdata = eval(x["qxz_data"])
  2269. # print(qxzdata['data'][a]['eValue'])
  2270. p_data["name"]=qxzdata["data"][a]["eName"]
  2271. p_data["values"].append(eval(qxzdata["data"][a]["eValue"]))
  2272. # print(type(eval(qxzdata['data'][a]['eValue'])))
  2273. p_data["ekey"]=qxzdata['data'][a]["eKey"]
  2274. p_data["unit"] = qxz_dict_1[qxzdata["data"][a]["eNum"]]
  2275. # print('p_data["unit"]',p_data["unit"])
  2276. tt = json.dumps(x['upl_time'], cls=CJSONEncoder)
  2277. p_data["times"].append(tt)
  2278. p_data["min"] = min(p_data["values"])
  2279. p_data["max"] = max(p_data["values"])
  2280. p_data["min_time"] = p_data["times"][p_data["values"].index(min(p_data["values"]))]
  2281. p_data["max_time"] = p_data["times"][p_data["values"].index(max(p_data["values"]))]
  2282. all_data.append(p_data)
  2283. p_data = {"values":[], "times":[]}
  2284. except Exception as e:
  2285. print(e)
  2286. # print('-------------------',all_data)
  2287. # print(sta2)
  2288. dat1 = []
  2289. try:
  2290. sta2 = QXZstatus.objects.get(equip_id=e_id)
  2291. for i in range(len((eval(sta2.qxz_status)["data"]))):
  2292. if eval(sta2.qxz_status)['data'][i]["eNum"] == "163":
  2293. continue
  2294. dat1.append({"unit": qxz_dict_1[eval(sta2.qxz_status)['data'][i]["eNum"]],"equip_name": sta2.equip_id.equip_name,
  2295. "upl_time": sta2.upl_time, "equip_id": sta2.equip_id_id, "eValue": eval(sta2.qxz_status)["data"][i]["eValue"],
  2296. "eKey": eval(sta2.qxz_status)["data"][i]["eKey"], "qxz_picture": "%s"%(sta2.qxz_picture)})
  2297. # print(eval(sta2.qxz_status)['data'][i]['eNum'])
  2298. # print("dat1:",dat1)
  2299. except Exception as exc:
  2300. # dat1 = {"unit": "","equip_name": "",
  2301. # "upl_time": "", "equip_id": "", "eValue": "",
  2302. # "eKey": ""}
  2303. # dat1 = []
  2304. print(exc)
  2305. print("dat1:",dat1)
  2306. # imei = request.POST.get('imei')
  2307. try:
  2308. switch_obj = QXZswitchstatus.objects.get(equip_id=e_id)
  2309. qxz_switch = switch_obj.qxz_switch
  2310. except:
  2311. qxz_switch = ""
  2312. try:
  2313. switch_name_obj = QXZswitchdata.objects.get(equip_id=e_id)
  2314. switch_name = switch_name_obj.qxz_switch_data
  2315. except:
  2316. switch_name = ""
  2317. try:
  2318. timing_list = QXZTimingswitch.objects.get(equip_id=e_id).qxz_timing
  2319. except:
  2320. timing_list = ""
  2321. try:
  2322. auto_list = QXZAutoswitch.objects.get(equip_id_id=e_id).qxz_auto
  2323. except:
  2324. auto_list = ""
  2325. data = {'new_data': dat1, 'all_data':all_data, 'qxz_switch':qxz_switch, 'switch_name':switch_name, 'timing_list':timing_list, 'auto_list':auto_list}
  2326. data = json.dumps(data, cls=CJSONEncoder)
  2327. User_Log.objects.create(log_user=current_user,
  2328. log_ip=request.META['REMOTE_ADDR'], log_desc='设备管理-气象站')
  2329. return HttpResponse(data)
  2330. def post(self,request):
  2331. pass
  2332. # 气象站报表详情折线图:
  2333. class QXZ_Report_Detail_Chart(ListView):
  2334. def get(self, request):
  2335. pass
  2336. def post(self, request):
  2337. qxz_dict_2 = copy.deepcopy(qxz_dict)
  2338. equip_id = request.POST.get('id')
  2339. print("equip_id:", equip_id)
  2340. f_tbegin = request.POST.get('begin')
  2341. f_tend = request.POST.get('end')
  2342. print("f_tbegin:", f_tbegin)
  2343. print("f_tend:", f_tend)
  2344. current_equip = Equip.objects.get(equip_id=equip_id)
  2345. dat = []
  2346. if f_tbegin:
  2347. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  2348. enddate = re.findall(r"\d+\.?\d*", f_tend)
  2349. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2350. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2351. print("start_date:", start_date)
  2352. print("end_date:", end_date)
  2353. sta1 = QXZdata.objects.filter(
  2354. equip_id=equip_id, upl_time__range=(start_date, end_date)).values()
  2355. for x in sta1:
  2356. sta = {"upl_time": x["upl_time"],"e_len": len((eval(x["qxz_data"])["data"])),
  2357. "unit": [], "equip_id": x["equip_id_id"]}
  2358. for i in eval(x["qxz_data"])["data"]:
  2359. if i["eNum"] == "163":
  2360. continue
  2361. qxz_dict_2[i["eNum"]][0] = i["eValue"] # 将气象站字典列表里的索引值替换为 数据的eValue
  2362. d = copy.deepcopy(qxz_dict_2[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉
  2363. ek = i["eKey"]
  2364. d.append(ek)
  2365. d.append(i["eNum"])
  2366. sta["unit"].append(d)
  2367. # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]]
  2368. # print(sta["unit"])
  2369. dat.append(sta)
  2370. # print(dat)
  2371. data = {"e_name": current_equip.equip_name, "dat": dat}
  2372. data = json.dumps(data, cls=CJSONEncoder)
  2373. return HttpResponse(data)
  2374. # 获取当前日期:
  2375. now_time = datetime.datetime.now()
  2376. print("当前日期为:",now_time)
  2377. print("当前月为:",now_time.month)
  2378. sta1 = QXZdata.objects.filter(equip_id=equip_id, upl_time__month=now_time.month).values()
  2379. for x in sta1:
  2380. sta = {"upl_time": x["upl_time"],"e_len": len((eval(x["qxz_data"])["data"])),
  2381. "unit": [], "equip_id": x["equip_id_id"]}
  2382. for i in eval(x["qxz_data"])["data"]:
  2383. if i["eNum"] == "163":
  2384. continue
  2385. qxz_dict_2[i["eNum"]][0] = i["eValue"]
  2386. d = copy.deepcopy(qxz_dict_2[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉
  2387. ek = i["eKey"]
  2388. d.append(ek)
  2389. d.append(i["eNum"])
  2390. sta["unit"].append(d)
  2391. # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]]
  2392. dat.append(sta)
  2393. # print(dat)
  2394. data = {"e_name": current_equip.equip_name, "dat": dat}
  2395. # print("------",data)
  2396. data = json.dumps(data, cls=CJSONEncoder)
  2397. return HttpResponse(data)
  2398. # 气象站列表详情
  2399. class QXZ_Report_Detail(ListView):
  2400. def get(self, request):
  2401. qxz_dict_3 = copy.deepcopy(qxz_dict)
  2402. page = int(request.GET.get('page'))
  2403. print("page:", page)
  2404. equip_id = request.GET.get('id')
  2405. print("equip_id:", equip_id)
  2406. f_tbegin = request.GET.get('begin')
  2407. f_tend = request.GET.get('end')
  2408. print("f_tbegin:", f_tbegin)
  2409. print("f_tend:", f_tend)
  2410. current_equip = Equip.objects.get(equip_id=equip_id)
  2411. dat = []
  2412. if f_tbegin:
  2413. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  2414. enddate = re.findall(r"\d+\.?\d*", f_tend)
  2415. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2416. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2417. print("start_date:", start_date)
  2418. print("end_date:", end_date)
  2419. sta1 = QXZdata.objects.filter(
  2420. equip_id=equip_id, upl_time__range=(start_date, end_date)).values()
  2421. for x in sta1:
  2422. sta = {"upl_time": x["upl_time"], "unit": [], "equip_id": x["equip_id_id"]}
  2423. for i in eval(x["qxz_data"])["data"]:
  2424. if i["eNum"] == "163":
  2425. continue
  2426. qxz_dict_3[i["eNum"]][0] = i["eValue"]
  2427. d = copy.deepcopy(qxz_dict_3[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉
  2428. ek = i["eKey"]
  2429. d.append(ek)
  2430. sta["unit"].append(d)
  2431. # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]]
  2432. dat.append(sta)
  2433. nums = len(dat)
  2434. dat = dat[(10*(page-1)):(page*10)]
  2435. data = {"dat": dat, "nums":nums}
  2436. data = json.dumps(data, cls=CJSONEncoder)
  2437. return HttpResponse(data)
  2438. sta1 = QXZdata.objects.filter(equip_id=equip_id).values()
  2439. for x in sta1:
  2440. sta = {"upl_time": x["upl_time"], "unit": [], "equip_id": x["equip_id_id"]}
  2441. for i in eval(x["qxz_data"])["data"]:
  2442. if i["eNum"] == "163":
  2443. continue
  2444. qxz_dict_3[i["eNum"]][0] = i["eValue"]
  2445. d = copy.deepcopy(qxz_dict_3[i["eNum"]]) # 此处有坑 如果不深拷贝 后一次 qxz_dict[i["eNum"]][0] = i["eValue"] 赋值会把上次赋值替换掉
  2446. ek = i["eKey"]
  2447. d.append(ek)
  2448. sta["unit"].append(d)
  2449. # qxz_dict[eval(x.qxz_data)['data'][0]["eNum"]]
  2450. dat.append(sta)
  2451. nums = len(dat)
  2452. dat = dat[(10*(page-1)):(page*10)]
  2453. data = {"dat": dat, "nums":nums}
  2454. data = json.dumps(data, cls=CJSONEncoder)
  2455. return HttpResponse(data)
  2456. # 孢子仪报表管理视图:
  2457. @csrf_exempt
  2458. def BZY_Report(request):
  2459. # current_user = request.session.get('username')
  2460. # print("current_user:", current_user)
  2461. # current_user = MyUser.objects.get(username=current_user)
  2462. current_user = request.user.username
  2463. print("current_user:", current_user)
  2464. # current_user = MyUser.objects.get(username=current_user)
  2465. try:
  2466. current_user = MyUser.objects.get(username=current_user)
  2467. except:
  2468. current_user = MyUser.objects.get(username="public")
  2469. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  2470. print("---不是管理员")
  2471. equip_list = Equip.objects.filter(
  2472. equip_type=7, equip_user=current_user)
  2473. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  2474. print("---代理商")
  2475. equip_list = Equip.objects.filter(
  2476. equip_type=7, equip_agency=current_user.user_agency)
  2477. else:
  2478. print("---管理员")
  2479. equip_list = Equip.objects.filter(equip_type=7)
  2480. data = []
  2481. for i in equip_list:
  2482. sta1 = BZYstatus.objects.filter(
  2483. equip_id=i.equip_id)
  2484. for x in sta1:
  2485. sta2 = {"equip_name": x.equip_id.equip_name,
  2486. "bzy_status": x.bzy_status, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id}
  2487. data.append(sta2)
  2488. if request.method == 'GET':
  2489. if request.is_ajax():
  2490. req = request.GET.get('req')
  2491. print("req:", req)
  2492. if req == "reqdat":
  2493. print("---post 请求数据!")
  2494. page = int(request.GET.get('page'))
  2495. print("page:", page)
  2496. data = data[(10*(page-1)):(page*10)]
  2497. # data = serializers.serialize("json", equip_list)
  2498. # print("data:", data)
  2499. data = json.dumps(data, cls=CJSONEncoder)
  2500. return HttpResponse(data)
  2501. else:
  2502. nums = len(data)
  2503. User_Log.objects.create(log_user=current_user,
  2504. log_ip=request.META['REMOTE_ADDR'], log_desc='报表管理-孢子仪')
  2505. return render(request, 'reportmanage/bzy_report.html', context={"nums": nums})
  2506. elif request.method == 'POST':
  2507. req = request.POST.get('req')
  2508. print("req:", req)
  2509. if req == "filter":
  2510. print("---筛选!")
  2511. page = int(request.POST.get('page'))
  2512. print("page:", page)
  2513. ename = request.POST.get('ename')
  2514. print("ename:", ename)
  2515. f_id = request.POST.get('f_id')
  2516. print("f_id:", f_id)
  2517. current_user = request.session.get('username')
  2518. print("current_user:", current_user)
  2519. current_user = MyUser.objects.get(username=current_user)
  2520. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  2521. print("---不是管理员")
  2522. if ename == "" and f_id == "":
  2523. equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user)
  2524. elif ename == "" and f_id != "":
  2525. equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user, equip_id__contains=f_id)
  2526. elif ename != "" and f_id == "":
  2527. equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user, equip_name__contains=ename)
  2528. elif ename != "" and f_id != "":
  2529. equip_list = Equip.objects.filter(equip_type=7, equip_user=current_user, equip_name__contains=ename,equip_id__contains=f_id)
  2530. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  2531. print("---代理商")
  2532. if ename == "" and f_id == "":
  2533. equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency)
  2534. elif ename == "" and f_id != "":
  2535. equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency, equip_id__contains=f_id)
  2536. elif ename != "" and f_id == "":
  2537. equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency, equip_name__contains=ename)
  2538. elif ename != "" and f_id != "":
  2539. equip_list = Equip.objects.filter(equip_type=7, equip_agency=current_user.user_agency, equip_name__contains=ename,equip_id__contains=f_id)
  2540. else:
  2541. print("---管理员")
  2542. if ename == "" and f_id == "":
  2543. equip_list = Equip.objects.filter(equip_type=7)
  2544. elif ename == "" and f_id != "":
  2545. equip_list = Equip.objects.filter(equip_type=7, equip_id__contains=f_id)
  2546. elif ename != "" and f_id == "":
  2547. equip_list = Equip.objects.filter(equip_type=7, equip_name__contains=ename)
  2548. elif ename != "" and f_id != "":
  2549. equip_list = Equip.objects.filter(equip_type=7, equip_name__contains=ename,equip_id__contains=f_id)
  2550. dat = []
  2551. for i in equip_list:
  2552. sta1 = BZYstatus.objects.filter(
  2553. equip_id=i.equip_id)
  2554. for x in sta1:
  2555. sta2 = {"equip_name": x.equip_id.equip_name,
  2556. "bzy_status": x.bzy_status, "upl_time": x.upl_time,"equip_id":x.equip_id.equip_id}
  2557. dat.append(sta2)
  2558. # print('-----------------------',x.equip_id.equip_id)
  2559. nums = len(dat)
  2560. print("nums:", nums)
  2561. dat = dat[(10*(page-1)):(page*10)]
  2562. data = {'dat': dat, 'nums': nums}
  2563. # print("data:",data)
  2564. data = json.dumps(data, cls=CJSONEncoder)
  2565. return HttpResponse(data)
  2566. # 孢子仪上传图片测试页面:
  2567. @method_decorator(csrf_exempt, name='dispatch')
  2568. def bzy_photoview(request):
  2569. if request.method == 'GET':
  2570. print("-----image preview!-----")
  2571. imei = request.GET.get('imei')
  2572. print("imei:", imei)
  2573. nums = BZYphoto.objects.filter(equip_id=imei).count()
  2574. print("nums:", nums)
  2575. iccid = BZYstatus.objects.get(equip_id=imei).simid
  2576. dver = eval(BZYstatus.objects.get(equip_id=imei).bzy_status)["dver"]
  2577. return render(request, 'reportmanage/bzy_image.html', context={"nums": nums, "imei": imei, "iccid":iccid, "dver":dver})
  2578. if request.method == 'POST':
  2579. print("-----image upload request!-----")
  2580. imei = request.GET.get('imei')
  2581. print("imei:", imei)
  2582. # 判断设备是否存在:
  2583. if Equip.objects.filter(equip_id=imei).exists():
  2584. length = request.META['CONTENT_LENGTH']
  2585. print("length:", length)
  2586. # 以当前时间命名图片
  2587. now_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
  2588. pic_name = now_time + '.jpg'
  2589. print("pic_name:", pic_name)
  2590. pic_dir = 'bzy_img/' + imei + '/' + \
  2591. pic_name[0:4] + '/' + pic_name[4:6] + '/'
  2592. if os.path.exists(pic_dir) == False:
  2593. # 文件夹加权限
  2594. os.makedirs(pic_dir)
  2595. # os.chmod(pic_dir, stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO)
  2596. print("图片路径:", pic_dir + pic_name)
  2597. # img.save(pic_dir+pic_name)
  2598. with open(pic_dir + pic_name, "wb") as file:
  2599. file.write(request.body)
  2600. # print("request.body:", request.body)
  2601. # 数据库关联设备,并在照片的表中存入路径:
  2602. equip = Equip.objects.get(equip_id=imei)
  2603. BZYphoto.objects.create(equip_id=equip, addr=pic_dir + pic_name)
  2604. return HttpResponse("-----image upload success!-----")
  2605. else:
  2606. return HttpResponse("-----image upload failed because this imei is not exists!-----")
  2607. # 孢子仪报表详视图:
  2608. @method_decorator(csrf_exempt, name='dispatch')
  2609. class BZY_Report_Detail(ListView):
  2610. def get(self, request):
  2611. equip_id = request.GET.get('id')
  2612. print("请求数据,设备id:", equip_id)
  2613. nums = BZYdata.objects.filter(equip_id=equip_id).count()
  2614. print("nums:", nums)
  2615. lng = eval(BZYstatus.objects.get(equip_id=equip_id).bzy_status)["lng"]
  2616. lat = eval(BZYstatus.objects.get(equip_id=equip_id).bzy_status)["lat"]
  2617. return render(request, 'reportmanage/bzy_report_detail.html', context={"equip_id": equip_id, "nums": nums, "lng":lng, "lat":lat})
  2618. def post(self, request):
  2619. req = request.POST.get('req')
  2620. if req == "data":
  2621. equip_id = request.POST.get('id')
  2622. page = int(request.POST.get('page'))
  2623. print("page:", page)
  2624. print("请求数据的设备id:", equip_id)
  2625. # data = {'dat':"",'pages':""}
  2626. sta1 = BZYdata.objects.filter(equip_id=equip_id)[
  2627. (10*(page-1)):(page*10)]
  2628. sta2 = [{"equip_name": x.equip_id.equip_name,
  2629. "bzy_data": x.bzy_data,
  2630. "upl_time": x.upl_time} for x in sta1]
  2631. data = json.dumps(sta2, cls=CJSONEncoder)
  2632. # data['dat'] = sta2
  2633. # data['pages'] = pages
  2634. # data = json.dumps(data, cls=CJSONEncoder)
  2635. # print(data)
  2636. return HttpResponse(data)
  2637. elif req == "filter":
  2638. equip_id = request.POST.get('id')
  2639. page = int(request.POST.get('page'))
  2640. print("equip_id:", equip_id)
  2641. print("page:", page)
  2642. print("请求数据的设备id:", equip_id)
  2643. f_tbegin = request.POST.get('begin')
  2644. f_tend = request.POST.get('end')
  2645. print("f_tbegin:", f_tbegin)
  2646. print("f_tend:", f_tend)
  2647. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  2648. enddate = re.findall(r"\d+\.?\d*", f_tend)
  2649. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2650. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2651. print("start_date:", start_date)
  2652. print("end_date:", end_date)
  2653. sta1 = BZYdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  2654. print("sta1:", sta1)
  2655. sta2 = [{"equip_name": x.equip_id.equip_name,
  2656. "bzy_data": x.bzy_data,
  2657. "upl_time": x.upl_time} for x in sta1]
  2658. nums = len(sta2)
  2659. dat = sta2[(10*(page-1)):(page*10)]
  2660. data = {'dat': dat, 'nums': nums}
  2661. # print("data:",data)
  2662. data = json.dumps(data, cls=CJSONEncoder)
  2663. return HttpResponse(data)
  2664. #孢子仪孢子统计页面
  2665. class BZY_Report_Statistics(ListView):
  2666. def get(self, request):
  2667. equip_id = request.GET.get('id')
  2668. return render(request, 'reportmanage/bzy_report_statistics.html', context={"equip_id": equip_id})
  2669. # 孢子仪报表详情折线图:
  2670. class BZY_Report_Detail_Chart(ListView):
  2671. def get(self, request):
  2672. pass
  2673. def post(self, request):
  2674. req = request.POST.get('req')
  2675. if req == "data":
  2676. equip_id = request.POST.get('id')
  2677. print("equip_id:", equip_id)
  2678. # 获取当前日期:
  2679. now_time = datetime.datetime.now()
  2680. print("当前日期为:",now_time)
  2681. print("当前月为:",now_time.month)
  2682. sta1 = BZYdata.objects.filter(equip_id=equip_id,upl_time__month=now_time.month)
  2683. sta2 = []
  2684. for x in sta1:
  2685. # if eval(x.bzy_data)['pre_temp'] > 100 or eval(x.bzy_data)['pre_temp'] < 0:
  2686. # pre_temp = 20
  2687. # else:
  2688. pre_temp = eval(x.bzy_data)['pre_temp']
  2689. sta2.append({"pre_temp": pre_temp,
  2690. "ah": eval(x.bzy_data)['ah'],
  2691. "at": eval(x.bzy_data)['at'],
  2692. "tim": x.upl_time})
  2693. data = json.dumps(sta2, cls=CJSONEncoder)
  2694. # print("data:", data)
  2695. return HttpResponse(data)
  2696. elif req == "filter":
  2697. equip_id = request.POST.get('id')
  2698. print("equip_id:", equip_id)
  2699. f_tbegin = request.POST.get('begin')
  2700. f_tend = request.POST.get('end')
  2701. print("f_tbegin:", f_tbegin)
  2702. print("f_tend:", f_tend)
  2703. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  2704. enddate = re.findall(r"\d+\.?\d*", f_tend)
  2705. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2706. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2707. print("start_date:", start_date)
  2708. print("end_date:", end_date)
  2709. sta1 = BZYdata.objects.filter(
  2710. equip_id=equip_id, upl_time__range=(start_date, end_date))
  2711. sta2 = []
  2712. for x in sta1:
  2713. pre_temp = eval(x.bzy_data)['pre_temp']
  2714. sta2.append({"pre_temp": pre_temp,
  2715. "ah": eval(x.bzy_data)['ah'],
  2716. "at": eval(x.bzy_data)['at'],
  2717. "tim": x.upl_time})
  2718. data = json.dumps(sta2, cls=CJSONEncoder)
  2719. # print("data:",data)
  2720. return HttpResponse(data)
  2721. # 孢子仪图片列表视图:
  2722. @csrf_exempt
  2723. def bzy_imagelistview(request):
  2724. if request.method == 'GET':
  2725. print("-----image list view!-----")
  2726. imei = request.GET.get('imei')
  2727. print("imei:", imei)
  2728. # 获得当前页:
  2729. page = int(request.GET.get('page'))
  2730. print("page:", page)
  2731. equip_name = Equip.objects.get(equip_id=imei).equip_name
  2732. # 当前用户:返回用户,前端判断是否显示删除图片按钮
  2733. current_user = request.session.get('username')
  2734. print("current_user:", current_user)
  2735. current_user = MyUser.objects.get(username=current_user)
  2736. img = BZYphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)]
  2737. equip_name = Equip.objects.get(equip_id=imei).equip_name
  2738. return render(request, 'reportmanage/bzy_imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei})
  2739. # 孢子仪删除图片接口:
  2740. class BZY_Image_Delete(ListView):
  2741. def get(self, request):
  2742. pass
  2743. def post(self, request):
  2744. print("-----image delete!-----")
  2745. imei = request.POST.get('imei')
  2746. img_name = request.POST.get('addr')
  2747. img_name = img_name.replace('bzy/', '')
  2748. print("img_name:",img_name)
  2749. print("imei:",imei)
  2750. if os.path.exists(img_name) == True:
  2751. # 删除图片文件
  2752. os.remove(img_name)
  2753. # 删除数据库照片列表中,照片路径:
  2754. try:
  2755. BZYphoto.objects.filter(equip_id=imei, addr=img_name).delete()
  2756. print("-----image delete ok!-----")
  2757. data = "1"
  2758. return HttpResponse(data)
  2759. except:
  2760. print("-----image delete failed!-----")
  2761. data = "0"
  2762. return HttpResponse(data)
  2763. else:
  2764. # 照片在数据库里不存在,但是数据库有路径的情况会删除不掉
  2765. # 因此不管何时都删除数据库路径
  2766. try:
  2767. BZYphoto.objects.filter(equip_id=imei, addr=img_name).delete()
  2768. print("-----image delete ok!-----")
  2769. except:
  2770. pass
  2771. print("-----image not exist!-----")
  2772. data = "0"
  2773. return HttpResponse(data)
  2774. # 孢子仪图片描述接口:
  2775. @method_decorator(csrf_exempt, name='dispatch')
  2776. class BZY_Image_Desc(ListView):
  2777. def get(self, request):
  2778. img_name = request.POST.get('addr')
  2779. print('img_name:',img_name)
  2780. try:
  2781. obj = BZYphoto.objects.get(addr=img_name)
  2782. data = obj.describe
  2783. except Exception as e:
  2784. print(e)
  2785. data = ""
  2786. data = json.dumps(data, cls=CJSONEncoder)
  2787. return HttpResponse(data)
  2788. def post(self, request):
  2789. img_name = request.POST.get('addr')
  2790. print('img_name:',img_name)
  2791. desc = request.POST.get('describe')
  2792. print("desc:",desc)
  2793. try:
  2794. obj = BZYphoto.objects.get(addr=img_name)
  2795. obj.describe = desc
  2796. obj.save()
  2797. print("-----image add describe ok!-----")
  2798. data = "0"
  2799. return HttpResponse(data)
  2800. except Exception as e:
  2801. print("-----image add describe failed!-----")
  2802. print("=========",e)
  2803. data = "1"
  2804. return HttpResponse(data)
  2805. # 孢子仪数据导出接口
  2806. class BZY_Data_Export(ListView):
  2807. def get(self,request):
  2808. equip_id = request.GET.get('id')
  2809. print("请求数据的设备id:",equip_id)
  2810. f_tbegin = request.GET.get('begin')
  2811. f_tend = request.GET.get('end')
  2812. filename = request.GET.get('filename')
  2813. print("f_tbegin:", f_tbegin)
  2814. print("f_tend:", f_tend)
  2815. print("f_tbegin:", type(f_tbegin))
  2816. print("f_tend:", type(f_tend))
  2817. # 查询时间段
  2818. if f_tbegin:
  2819. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  2820. enddate = re.findall(r"\d+\.?\d*", f_tend)
  2821. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2822. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2823. print("start_date:", start_date)
  2824. print("end_date:", end_date)
  2825. sta1 = BZYdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  2826. print("sta1:", sta1)
  2827. sta2 = [{"equip_name": x.equip_id.equip_name,
  2828. "bzy_data": eval(x.bzy_data),
  2829. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  2830. # 查询全部
  2831. else:
  2832. sta1 = BZYdata.objects.filter(equip_id=equip_id)
  2833. print("sta1:",sta1)
  2834. sta2 = [{"equip_name": x.equip_id.equip_name,
  2835. "bzy_data": eval(x.bzy_data),
  2836. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  2837. title = ["环境温度(℃)","环境湿度(%)","保温仓设定温度(℃)","保温仓当前温度(℃)","设备开关","电池状态","摄像头状态",
  2838. "电压(V)","海拔高度","信号强度","设备版本","上报时间"]
  2839. book = xlwt.Workbook() # 创建一个excel对象
  2840. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  2841. sheet.write_merge(0, 0, 0, 11, '%s设备数据'%equip_id)
  2842. for i in range(len(title)): # 遍历列
  2843. sheet.write(1,i,title[i]) # 将title数组中的字段写入到0行i列中
  2844. print(sta2)
  2845. for x in range(len(sta2)): # 遍历列表
  2846. if sta2[x]["equip_name"] == "":
  2847. equip_name = "无"
  2848. elif sta2[x]["equip_name"] != "":
  2849. equip_name = sta2[x]["equip_name"]
  2850. if sta2[x]["bzy_data"]["on_off"] == 0:
  2851. on_off = "关闭"
  2852. elif sta2[x]["bzy_data"]["on_off"] != 0:
  2853. on_off = "开启"
  2854. if sta2[x]["bzy_data"]["bat_sta"] == 0:
  2855. bat_sta = "正常"
  2856. elif sta2[x]["bzy_data"]["bat_sta"] != 0:
  2857. bat_sta = "电量过低"
  2858. if sta2[x]["bzy_data"]["usb_sta"] == 0:
  2859. usb_sta = "正常"
  2860. elif sta2[x]["bzy_data"]["usb_sta"] != 0:
  2861. usb_sta = "异常"
  2862. if sta2[x]["bzy_data"]["alti"] != "":
  2863. alti = sta2[x]["bzy_data"]["alti"]
  2864. elif sta2[x]["bzy_data"]["alti"] == "":
  2865. alti = "暂无"
  2866. sheet.write(x+2,0,sta2[x]["bzy_data"]["at"]) # 将环境温度写入到第x+1行,第0列中
  2867. sheet.write(x+2,1,sta2[x]["bzy_data"]["ah"])
  2868. sheet.write(x+2,2,sta2[x]["bzy_data"]["set_temp"]) # 保温仓设定温度
  2869. sheet.write(x+2,3,sta2[x]["bzy_data"]["pre_temp"]) # 保温仓当前温度
  2870. sheet.write(x+2,4,on_off) # 设备开关
  2871. sheet.write(x+2,5,bat_sta) # 电池状态
  2872. sheet.write(x+2,6,usb_sta) # 摄像头状态
  2873. sheet.write(x+2,7,sta2[x]["bzy_data"]["v_bat"]) # 电压
  2874. sheet.write(x+2,8,alti) # 海拔高度
  2875. sheet.write(x+2,9,sta2[x]["bzy_data"]["csq"]) # 信号强度
  2876. sheet.write(x+2,10,sta2[x]["bzy_data"]["dver"]) # 设备版本
  2877. sheet.write(x+2,11,sta2[x]["upl_time"]) # 上报时间
  2878. sheet.col(2).width = 256 * 18
  2879. sheet.col(3).width = 256 * 18
  2880. sheet.col(6).width = 256 * 11
  2881. sheet.col(11).width = 256 * 18
  2882. # 写出到IO
  2883. output = BytesIO()
  2884. book.save(output)
  2885. # 重新定位到开始
  2886. output.seek(0)
  2887. response = HttpResponse(content_type='application/vnd.ms-excel')
  2888. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  2889. response.write(output.getvalue())
  2890. return response
  2891. def post(self,request):
  2892. pass
  2893. # 自动识别后的害虫统计接口:
  2894. @method_decorator(csrf_exempt, name='dispatch')
  2895. class Pest_Statis(ListView):
  2896. def get(self,request):
  2897. equip_id = request.GET.get('id')
  2898. nums = CBDphoto.objects.filter(equip_id=equip_id).count()
  2899. print("nums:", nums)
  2900. current_user = request.session.get('username')
  2901. return render(request, 'reportmanage/cbd_pest_data.html', context={"equip_id":equip_id,"nums":nums,"username":current_user})
  2902. def post(self,request):
  2903. e_id = request.POST.get('e_id')
  2904. tbegin = request.POST.get('tbegin')
  2905. tend = request.POST.get('tend')
  2906. req = request.POST.get('req')
  2907. print('e_id:',e_id)
  2908. print("---折线图")
  2909. one_month = datetime.timedelta(days=30)
  2910. one_month_later = datetime.datetime.now() - one_month
  2911. now_time = datetime.datetime.now()
  2912. print("当前日期为:",now_time)
  2913. sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time))
  2914. sta3 = CBDdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time))
  2915. if req == "filter":
  2916. if tbegin:
  2917. print("-------按日期筛选!")
  2918. print("tbegin:", tbegin)
  2919. print("tend:", tend)
  2920. # page = request.POST.get('page')
  2921. begindate = re.findall(r"\d+\.?\d*", tbegin)
  2922. enddate = re.findall(r"\d+\.?\d*", tend)
  2923. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2924. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2925. print("start_date:", start_date)
  2926. print("end_date:", end_date)
  2927. sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date))
  2928. print("!!!!!",sta1.count())
  2929. dat = []
  2930. tim = []
  2931. cbd_data = []
  2932. pest_kind = []
  2933. for x in sta1:
  2934. # print(x.indentify_result)
  2935. if x.indentify_result != None and x.indentify_result != "":
  2936. pest_reslut = x.indentify_result.split('#')
  2937. for i in pest_reslut:
  2938. i_result = i.split(',')
  2939. # print(i_result)
  2940. if i_result[0] not in pest_kind:
  2941. # print(i[0])
  2942. pest_kind.append(i_result[0])
  2943. sta2 = {"time":x.upl_time,"result":x.indentify_result}
  2944. tim.append(x.upl_time.strftime("%Y-%m-%d %H:%M:%S"))
  2945. # if x.indentify_result:
  2946. dat.append(sta2)
  2947. # for i in sta3:
  2948. for i in sta1:
  2949. # sta4 = {"at":eval(i.cbd_data)["at"],"ah":eval(i.cbd_data)["ah"],"upl_time":i.upl_time}
  2950. sta4 = {"at":i.at,"ah":i.ah,"upl_time":i.upl_time}
  2951. tim.append(i.upl_time.strftime("%Y-%m-%d %H:%M:%S"))
  2952. cbd_data.append(sta4)
  2953. tim = sorted(tim)
  2954. data = {"dat":dat,"kind":pest_kind,"cbd_data":cbd_data,"tim":tim}
  2955. # print("!!!!!!!!!!!!!!!",pest_kind)
  2956. data = json.dumps(data, cls=CJSONEncoder)
  2957. # print("data:",data)
  2958. return HttpResponse(data)
  2959. # 自动识别后的害虫统计接口:
  2960. @method_decorator(csrf_exempt, name='dispatch')
  2961. class Pest_Statis_Form(ListView):
  2962. def get(self,request):
  2963. pass
  2964. def post(self,request):
  2965. e_id = request.POST.get('e_id')
  2966. tbegin = request.POST.get('tbegin')
  2967. tend = request.POST.get('tend')
  2968. req = request.POST.get('req')
  2969. pest = request.POST.get('pestCategory')
  2970. print('e_id:',e_id)
  2971. print('-=-=-=-=-=-=-=-')
  2972. # 统计图
  2973. print("---统计图")
  2974. page = request.POST.get('page')
  2975. page = int(request.POST.get('page'))
  2976. print("page:", page)
  2977. sta1 = CBDphoto.objects.filter(equip_id=e_id)
  2978. if req == "filter":
  2979. page = int(request.POST.get('page'))
  2980. if tbegin:
  2981. print("-------按日期筛选!")
  2982. print("tbegin:", tbegin)
  2983. print("tend:", tend)
  2984. begindate = re.findall(r"\d+\.?\d*", tbegin)
  2985. enddate = re.findall(r"\d+\.?\d*", tend)
  2986. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  2987. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  2988. print("start_date:", start_date)
  2989. print("end_date:", end_date)
  2990. sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date))
  2991. print("!!!!!",sta1.count())
  2992. dat = []
  2993. pest_kind = []
  2994. for x in sta1:
  2995. # print(x.indentify_result)
  2996. if x.indentify_result != None and x.indentify_result != "":
  2997. pest_reslut = x.indentify_result.split('#')
  2998. for i in pest_reslut:
  2999. i_result = i.split(',')
  3000. # print(i_result)
  3001. if i_result[0] not in pest_kind:
  3002. # print(i[0])
  3003. pest_kind.append(i_result[0])
  3004. sta2 = {"time":x.upl_time,"pest":i_result[0],"pestnum":i_result[1]}
  3005. dat.append(sta2)
  3006. if pest:
  3007. dat = []
  3008. print("-------------pest",pest)
  3009. for x in sta1:
  3010. if x.indentify_result != None and x.indentify_result != "":
  3011. pest_reslut = x.indentify_result.split('#')
  3012. for i in pest_reslut:
  3013. i_result = i.split(',')
  3014. if i_result[0] == pest:
  3015. sta2 = {"time":x.upl_time,"pest":i_result[0],"pestnum":i_result[1]}
  3016. dat.append(sta2)
  3017. nums = len(dat)
  3018. print("-------------------------",type(page))
  3019. dat = dat[(10*(page-1)):(page*10)]
  3020. data = {"dat":dat,"kind":pest_kind,"nums":nums}
  3021. data = json.dumps(data, cls=CJSONEncoder)
  3022. # print("data:",data)
  3023. return HttpResponse(data)
  3024. # 害虫统计数据导出接口
  3025. class Pest_Export(ListView):
  3026. def get(self,request):
  3027. equip_id = request.GET.get('id')
  3028. print("请求数据的设备id:",equip_id)
  3029. f_tbegin = request.GET.get('begin')
  3030. f_tend = request.GET.get('end')
  3031. filename = request.GET.get('filename')
  3032. print("f_tbegin:", f_tbegin)
  3033. print("f_tend:", f_tend)
  3034. print("f_tbegin:", type(f_tbegin))
  3035. print("f_tend:", type(f_tend))
  3036. # 查询时间段
  3037. if f_tbegin:
  3038. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  3039. enddate = re.findall(r"\d+\.?\d*", f_tend)
  3040. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  3041. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  3042. print("start_date:", start_date)
  3043. print("end_date:", end_date)
  3044. sta1 = CBDphoto.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  3045. print("sta1:", sta1)
  3046. # 查询全部
  3047. else:
  3048. sta1 = CBDphoto.objects.filter(equip_id=equip_id)
  3049. print("sta1:",sta1)
  3050. sta2 = {}
  3051. for x in sta1:
  3052. if x.indentify_result != None and x.indentify_result != "":
  3053. pest_reslut = x.indentify_result.split('#')
  3054. for i in pest_reslut:
  3055. i_result = i.split(',')
  3056. if insect_dict_new[i_result[0]] not in sta2:
  3057. sta2[insect_dict_new[i_result[0]]] = int(i_result[1])
  3058. else:
  3059. sta2[insect_dict_new[i_result[0]]] = sta2[insect_dict_new[i_result[0]]] + int(i_result[1])
  3060. # 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')})
  3061. title = ["害虫名称","害虫数量"]
  3062. book = xlwt.Workbook() # 创建一个excel对象
  3063. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3064. sheet.write_merge(0, 0, 0, 3, '%s设备数据'%equip_id)
  3065. if f_tbegin:
  3066. sheet.write_merge(1, 1, 0, 3, "%s-%s"%(start_date,end_date))
  3067. else:
  3068. sheet.write_merge(1, 1, 0, 3, "该设备全部数据")
  3069. for i in range(len(title)): # 遍历列
  3070. sheet.write(2,i,title[i]) # 将title数组中的字段写入到0行i列中
  3071. # print(sta2)
  3072. a = 0
  3073. for x in sta2: # 遍历列表
  3074. sheet.write(a+3,0,x)
  3075. sheet.write(a+3,1,sta2[x])
  3076. a += 1
  3077. sheet.col(0).width = 256 * 18
  3078. # 写出到IO
  3079. output = BytesIO()
  3080. book.save(output)
  3081. # 重新定位到开始
  3082. output.seek(0)
  3083. response = HttpResponse(content_type='application/vnd.ms-excel')
  3084. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  3085. response.write(output.getvalue())
  3086. return response
  3087. def post(self,request):
  3088. pass
  3089. # 害虫统计和温湿度对应折线图
  3090. class Pest_At_Ah(ListView):
  3091. def get(self,request):
  3092. pass
  3093. def post(self,request):
  3094. e_id = request.POST.get("e_id")
  3095. tbegin = request.POST.get('tbegin')
  3096. tend = request.POST.get('tend')
  3097. sta1 = CBDphoto.objects.filter(equip_id=e_id)
  3098. if tbegin:
  3099. print("-------按日期筛选!")
  3100. print("tbegin:", tbegin)
  3101. print("tend:", tend)
  3102. begindate = re.findall(r"\d+\.?\d*", tbegin)
  3103. enddate = re.findall(r"\d+\.?\d*", tend)
  3104. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  3105. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  3106. print("start_date:", start_date)
  3107. print("end_date:", end_date)
  3108. sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date))
  3109. print("!!!!!",sta1.count())
  3110. dat = []
  3111. pest_kind = []
  3112. for x in sta1:
  3113. # print(x.indentify_result)
  3114. if x.indentify_result != None and x.indentify_result != "":
  3115. pest_reslut = x.indentify_result.split('#')
  3116. for i in pest_reslut:
  3117. i_result = i.split(',')
  3118. # print(i_result)
  3119. if i_result[0] not in pest_kind:
  3120. # print(i[0])
  3121. pest_kind.append(i_result[0])
  3122. sta2 = {"time":x.upl_time,"result":x.indentify_result,"at":x.at,"ah":x.ah}
  3123. # if x.indentify_result:
  3124. dat.append(sta2)
  3125. try:
  3126. msg_conf = Msg_Conf.objects.get(equip_id=e_id).conf
  3127. except:
  3128. msg_conf = ""
  3129. nums = len(dat)
  3130. data = {"dat":dat,"kind":pest_kind,"nums":nums,"msg_conf":msg_conf}
  3131. # print("!!!!!!!!!!!!!!!",pest_kind)
  3132. data = json.dumps(data, cls=CJSONEncoder)
  3133. # print("data:",data)
  3134. return HttpResponse(data)
  3135. # 害虫统计和温湿度对应折线图
  3136. class Pest_At_Ah_1(ListView):
  3137. def get(self,request):
  3138. pass
  3139. def post(self,request):
  3140. e_id = request.POST.get("e_id")
  3141. tbegin = request.POST.get('tbegin')
  3142. tend = request.POST.get('tend')
  3143. one_month = datetime.timedelta(days=30)
  3144. one_month_later = datetime.datetime.now() - one_month
  3145. now_time = datetime.datetime.now()
  3146. # xy_list = Trapdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time))
  3147. sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time))
  3148. sta3 = CBDdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time))
  3149. # sta1 = CBDphoto.objects.filter(equip_id=e_id)
  3150. # sta3 = CBDdata.objects.filter(equip_id=e_id)
  3151. if tbegin:
  3152. print("-------按日期筛选!")
  3153. print("tbegin:", tbegin)
  3154. print("tend:", tend)
  3155. begindate = re.findall(r"\d+\.?\d*", tbegin)
  3156. enddate = re.findall(r"\d+\.?\d*", tend)
  3157. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  3158. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  3159. print("start_date:", start_date)
  3160. print("end_date:", end_date)
  3161. sta1 = CBDphoto.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date))
  3162. print("!!!!!",sta1.count())
  3163. sta3 = CBDdata.objects.filter(equip_id=e_id, upl_time__range=(start_date, end_date))
  3164. dat = []
  3165. pest_kind = []
  3166. for x in sta1:
  3167. # print(x.indentify_result)
  3168. if x.indentify_result != None and x.indentify_result != "":
  3169. pest_reslut = x.indentify_result.split('#')
  3170. for i in pest_reslut:
  3171. i_result = i.split(',')
  3172. # print(i_result)
  3173. if i_result[0] not in pest_kind:
  3174. # print(i[0])
  3175. pest_kind.append(i_result[0])
  3176. sta2 = {"time":x.upl_time,"result":x.indentify_result}
  3177. # if x.indentify_result:
  3178. dat.append(sta2)
  3179. dat1 = []
  3180. for xx in sta1:
  3181. # print("at",eval(xx.cbd_data)['at'])
  3182. # print("ah",xx.cbd_data)
  3183. sta4 = {"at":xx.at,"ah":xx.ah,"time":xx.upl_time}
  3184. dat1.append(sta4)
  3185. try:
  3186. msg_conf = Msg_Conf.objects.get(equip_id=e_id).conf
  3187. except Exception as e:
  3188. print("报错信息为",e)
  3189. msg_conf = ""
  3190. nums = len(dat)
  3191. data = {"dat":dat,"dat1":dat1,"kind":pest_kind,"nums":nums,"msg_conf":msg_conf}
  3192. # print("!!!!!!!!!!!!!!!",pest_kind)
  3193. data = json.dumps(data, cls=CJSONEncoder)
  3194. print("data:",data)
  3195. return HttpResponse(data)
  3196. @method_decorator(csrf_exempt, name='dispatch')
  3197. class Test(ListView):
  3198. def get(self, request):
  3199. pass
  3200. def post(self, request):
  3201. # e_type = request.POST.get("type")
  3202. # # print("imei",imei)
  3203. # print("s_time",s_time)
  3204. # sta1 = CBDstatus.objects.all()
  3205. # sta3 = []
  3206. # for i in sta1:
  3207. # fir_v = eval(i.cbd_status)["dver"].split(".")
  3208. # if fir_v[0] == e_type:
  3209. # sta3.append(i.equip_id.equip_id)
  3210. # print(sta3)
  3211. # for imei in sta3:
  3212. # file_dir = "pyftp/ftp_file/ykm_cbd/%s/%s"%(imei,s_time)
  3213. # print("file_dir",file_dir)
  3214. # for root, dirs, files in os.walk(file_dir):
  3215. # print(root) #当前目录路径
  3216. # print(dirs) #当前路径下所有子目录
  3217. # print(files) #当前路径下所有非目录子文件
  3218. # for i in files:
  3219. # file = file_dir + "/" + i
  3220. # jpg_time = time.ctime(os.path.getctime(file))
  3221. # print("jpg_time",jpg_time)
  3222. # st = s_time+jpg_time[11:19]
  3223. # pic_time = datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S")
  3224. # print("类型查看",type(pic_time))
  3225. # print("把字符串转成datetime: ", datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S"))
  3226. # if CBDphoto.objects.filter(addr=file).exists():
  3227. # print("照片存在")
  3228. # else:
  3229. # print("照片不存在")
  3230. # try:
  3231. # imei_obj = Equip.objects.get(equip_id=imei)
  3232. # CBDphoto.objects.create(equip_id=imei_obj,addr=file,upl_time=pic_time)
  3233. # except Exception as e:
  3234. # print("错误信息为",e)
  3235. # --------------------------------------------------------------------------------
  3236. # sta1 = CBDstatus.objects.all()
  3237. # sta3 = []
  3238. # for i in sta1:
  3239. # fir_v = eval(i.cbd_status)["dver"].split(".")
  3240. # if fir_v[0] == e_type:
  3241. # sta3.append(i.equip_id.equip_id)
  3242. # for imei in sta3:
  3243. # path = "pyftp/ftp_file/ykm_cbd/%s"%imei
  3244. # lsdir = os.listdir(path)
  3245. #     dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
  3246. #     if dirs:
  3247. #         for i in dirs:
  3248. #             print_files(os.path.join(path, i))
  3249. #     files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]
  3250. #     for f in files:
  3251. #        print(os.path.join(path, f))
  3252. # --------------------------------------------------------------------------------
  3253. # imei = request.POST.get("imei")
  3254. # s_time = request.POST.get("time")
  3255. # file_dir = "pyftp/ftp_file/ykm_cbd/%s/%s"%(imei,s_time)
  3256. # print("file_dir",file_dir)
  3257. # for root, dirs, files in os.walk(file_dir):
  3258. # print(root) #当前目录路径
  3259. # print(dirs) #当前路径下所有子目录
  3260. # print(files) #当前路径下所有非目录子文件
  3261. # for i in files:
  3262. # file = file_dir + "/" + i
  3263. # jpg_time = time.ctime(os.path.getctime(file))
  3264. # print("jpg_time",jpg_time)
  3265. # st = s_time+jpg_time[11:19]
  3266. # print("-------------------",i.split(".")[0])
  3267. # pic_time_1 = s_time+i.split(".")[0]
  3268. # pic_time_1 = datetime.datetime.strptime(pic_time_1,"%Y%m%d%H-%M-%S")
  3269. # print("-------------------->",pic_time_1)
  3270. # print("-------------------->",type(pic_time_1))
  3271. # pic_time = datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S")
  3272. # print("类型查看",type(pic_time))
  3273. # print("把字符串转成datetime: ", datetime.datetime.strptime(st,"%Y%m%d%H:%M:%S"))
  3274. # if CBDphoto.objects.filter(addr=file).exists():
  3275. # photoobj = CBDphoto.objects.get(addr=file)
  3276. # photoobj.upl_time = pic_time_1
  3277. # photoobj.save()
  3278. # print("照片存在")
  3279. # else:
  3280. # print("照片不存在")
  3281. # try:
  3282. # imei_obj = Equip.objects.get(equip_id=imei)
  3283. # CBDphoto.objects.create(equip_id=imei_obj,addr=file,upl_time=pic_time)
  3284. # except Exception as e:
  3285. # print("错误信息为",e)
  3286. # ----------------------------------------------------------------------------------
  3287. # data = {
  3288. # "Image":"http://www.yfzhwlw.com/cbd_img/86123456789/2018/03/20180329135742.jpg",
  3289. # "Result_image":"http://www.yfzhwlw.com/result_cbd_img/86123456789/2018/03/20180329135742result.jpg",
  3290. # "Result":"22,15",
  3291. # "imei":"868575028869313"
  3292. # }
  3293. # url = "http://tp.gw.airag.cn/yunfeikeji/insect/result/b2uanxyihkamjb5n5uydgdxvoi5chqhy"
  3294. # data = json.dumps(data, cls=CJSONEncoder)
  3295. # print("data:",data)
  3296. # res_1 = requests.post(url=url,data=data)
  3297. # url = "http://ip.360.cn/IPShare/info"
  3298. # res = requests.post(url=url)
  3299. # print(res.text)
  3300. # data = res.text
  3301. # aea = request.body
  3302. # print(type(aea))
  3303. # print(aea)
  3304. # dat = []
  3305. # equip_list = SCDstatus.objects.all()
  3306. # for i in equip_list:
  3307. # dat.append({"imei":i.equip_id_id,"lng":i.lng,"lat":i.lat})
  3308. # # print(dat)
  3309. # dat = json.dumps(dat)
  3310. # res = requests.post("http://127.0.0.1:8080/test",data=dat)
  3311. # 清除气象站数据
  3312. # imeistr = request.body
  3313. # print(type(imeistr))
  3314. # if imeistr:
  3315. # imei = eval(imeistr)["imei"]
  3316. # return HttpResponse(imei)
  3317. # dat = []
  3318. # e_id = request.POST.get("imei")
  3319. # qxz_list = QXZdata.objects.filter(equip_id_id=e_id)
  3320. # for i in qxz_list:
  3321. # qxz_time = i.upl_time
  3322. # # str_p = datetime.datetime.strftime(qxz_time,'%Y-%m-%d')
  3323. # time_int = qxz_time.minute
  3324. # # print(str(time_int))
  3325. # if "7" not in str(time_int):
  3326. # i.delete()
  3327. # username = request.POST.get('username')
  3328. # current_user = MyUser.objects.get(username="admin")
  3329. # sta1 = CBDstatus.objects.filter(equip_id__equip_user=current_user)
  3330. # sta1 = CBDstatus.objects.all()
  3331. # print(len(sta1))
  3332. # # print("data:",data)
  3333. # sta2 = []
  3334. # for a in sta1:
  3335. # if a.is_online == "1":
  3336. # sta2.append([a.equip_id_id,a.lng,a.lat])
  3337. # else:
  3338. # pass
  3339. # print(len(sta2))
  3340. # filename = "设备经纬度"
  3341. # title = ["设备ID","经度","纬度"]
  3342. # book = xlwt.Workbook() # 创建一个excel对象
  3343. # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3344. # for i in range(len(title)): # 遍历列
  3345. # sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  3346. # for x in range(len(sta2)): # 遍历列表
  3347. # sheet.write(x+1,0,sta2[x][0])
  3348. # sheet.write(x+1,1,sta2[x][1])
  3349. # sheet.write(x+1,2,sta2[x][2])
  3350. # # 写出到IO
  3351. # output = BytesIO()
  3352. # book.save(output)
  3353. # # 重新定位到开始
  3354. # output.seek(0)
  3355. # response = HttpResponse(content_type='application/vnd.ms-excel')
  3356. # response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  3357. # response.write(output.getvalue())
  3358. # return response
  3359. # equip_list = Equip.objects.all()
  3360. # bbb = 0
  3361. # for i in equip_list:
  3362. # photo_list = CBDphoto.objects.filter(equip_id=i.equip_id)
  3363. # status_list = CBDdata.objects.filter(equip_id=i.equip_id)
  3364. # for x in photo_list:
  3365. # for a in status_list:
  3366. # if x.at == None:
  3367. # 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:
  3368. # # print("数据时间==================>",a.upl_time)
  3369. # # print("设备温度==================>",eval(a.cbd_data)["at"])
  3370. # # print("设备湿度==================>",eval(a.cbd_data)["ah"])
  3371. # # print("照片时间==================>",x.upl_time)
  3372. # x.at = eval(a.cbd_data)["at"]
  3373. # x.ah = eval(a.cbd_data)["ah"]
  3374. # x.save()
  3375. # bbb = bbb + 1
  3376. # print(bbb)
  3377. # print("========操作成功=======")
  3378. # ----------------------------依科曼设备导出-----------------------------------------
  3379. # sta1 = CBDstatus.objects.all()
  3380. # sta3 = []
  3381. # for i in sta1:
  3382. # fir_v = eval(i.cbd_status)["dver"].split(".")
  3383. # if fir_v[0] == "2":
  3384. # sta3.append(i.equip_id.equip_id)
  3385. # print(sta3)
  3386. # filename = "预销号"
  3387. # title = ["设备ID","设备用户","卡号","sim卡状态","套餐","到期时间"]
  3388. # book = xlwt.Workbook() # 创建一个excel对象
  3389. # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3390. # x = 0
  3391. # for i in range(len(title)): # 遍历列
  3392. # sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  3393. # for a in sta3: # 遍历列表
  3394. # x = x + 1
  3395. # try:
  3396. # username = Equip.objects.get(equip_id=a).equip_user.username
  3397. # except:
  3398. # username = ""
  3399. # try:
  3400. # iccid = Equip_SimInfo.objects.get(equip_id=a).iccid
  3401. # except:
  3402. # iccid = ""
  3403. # try:
  3404. # data_plan = Equip_SimInfo.objects.get(equip_id=a).data_plan
  3405. # except:
  3406. # data_plan = ""
  3407. # try:
  3408. # expiry_date = Equip_SimInfo.objects.get(equip_id=a).expiry_date
  3409. # except:
  3410. # expiry_date = ""
  3411. # try:
  3412. # account_status = Equip_SimInfo.objects.get(equip_id=a).account_status
  3413. # if account_status == "0":
  3414. # account = "未知"
  3415. # elif account_status == "1":
  3416. # account = "测试期"
  3417. # elif account_status == "2":
  3418. # account = "沉默期"
  3419. # elif account_status == "3":
  3420. # account = "使用中"
  3421. # elif account_status == "4":
  3422. # account = "停机"
  3423. # elif account_status == "5":
  3424. # account = "停机保号"
  3425. # elif account_status == "6":
  3426. # account = "预销号"
  3427. # elif account_status == "7":
  3428. # account = "销号"
  3429. # except:
  3430. # account_status = ""
  3431. # sheet.write(x,0,a)
  3432. # sheet.write(x,1,username)
  3433. # sheet.write(x,2,iccid)
  3434. # sheet.write(x,3,account)
  3435. # sheet.write(x,4,data_plan)
  3436. # sheet.write(x,5,expiry_date)
  3437. # ----------------------------依科曼设备导出-----------------------------------------
  3438. # ------------------------------活跃设备的imei和iccid导出----------------------------
  3439. # sta1 = Equip_SimInfo.objects.filter(account_status=7)
  3440. # dat = []
  3441. # for i in sta1:
  3442. # dat.append(i.equip_id_id)
  3443. # filename = "预销号"
  3444. # title = ["设备ID","设备类型","设备用户","卡号","到期时间","sim卡状态","设备位置","最新的数据时间"]
  3445. # book = xlwt.Workbook() # 创建一个excel对象
  3446. # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3447. # x = 0
  3448. # for i in range(len(title)): # 遍历列
  3449. # sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  3450. # for a in dat: # 遍历列表
  3451. # x = x + 1
  3452. # if Equip.objects.get(equip_id=a).equip_type_id == 2:
  3453. # e_type = "杀虫灯"
  3454. # equip_time = RecentSCDdata.objects.get(equip_id=a).upl_time
  3455. # # equip_time = time.localtime(equip_time)
  3456. # lat = SCDstatus.objects.get(equip_id=a).lat
  3457. # lng = SCDstatus.objects.get(equip_id=a).lng
  3458. # res = requests.post("http://api.map.baidu.com/geocoder?location=%s,%s&coord_type=gcj02&output=json"%(lat,lng))
  3459. # location = eval(res.text)["result"]["addressComponent"]["province"]+eval(res.text)["result"]["addressComponent"]["district"]
  3460. # else:
  3461. # e_type = "测报灯"
  3462. # equip_time = RecentCBDdata.objects.get(equip_id=a).upl_time
  3463. # # equip_time = time.localtime(equip_time)
  3464. # # equip_time = time.strftime("%Y-%m-%d %H:%M:%S", equip_time)
  3465. # lat = CBDstatus.objects.get(equip_id=a).lat
  3466. # lng = CBDstatus.objects.get(equip_id=a).lng
  3467. # res = requests.post("http://api.map.baidu.com/geocoder?location=%s,%s&coord_type=gcj02&output=json"%(lat,lng))
  3468. # location = eval(res.text)["result"]["addressComponent"]["province"]+eval(res.text)["result"]["addressComponent"]["district"]
  3469. # try:
  3470. # username = Equip.objects.get(equip_id=a).equip_user.username
  3471. # except:
  3472. # username = ""
  3473. # if Equip_SimInfo.objects.get(equip_id=a).account_status == "6":
  3474. # account_status = "预销号"
  3475. # elif Equip_SimInfo.objects.get(equip_id=a).account_status == "7":
  3476. # account_status = "销号"
  3477. # equip_time = equip_time.strftime("%Y-%m-%d %H:%M:%S")
  3478. # sheet.write(x,0,a)
  3479. # sheet.write(x,1,e_type)
  3480. # sheet.write(x,2,username)
  3481. # sheet.write(x,3,Equip_SimInfo.objects.get(equip_id=a).iccid)
  3482. # sheet.write(x,4,Equip_SimInfo.objects.get(equip_id=a).expiry_date)
  3483. # sheet.write(x,5,account_status)
  3484. # sheet.write(x,6,location)
  3485. # sheet.write(x,7,equip_time)
  3486. # # 写出到IO
  3487. # output = BytesIO()
  3488. # book.save(output)
  3489. # # 重新定位到开始
  3490. # output.seek(0)
  3491. # response = HttpResponse(content_type='application/vnd.ms-excel')
  3492. # response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  3493. # response.write(output.getvalue())
  3494. # return response
  3495. # book=xlrd.open_workbook('F:\\12.2河南云飞恢复续费.xlsx')
  3496. # sheet=book.sheet_by_index(0) #根据sheet编号来
  3497. # # sheet=book.sheet_by_name('sheet1') #根据 sheet名称来
  3498. # # print(sheet.nrows) #excel里面有多少行
  3499. # # print(sheet.ncols) #excel里面有多少列
  3500. # # print(sheet.cell(0,0).value) #获取第0行第0列的值
  3501. # # print(sheet.row_values(0)) #获取到整行的内容
  3502. # # print(sheet.col_values(1)) #获取到整列的内容
  3503. # iccid_list = sheet.col_values(1)
  3504. # sim_list = []
  3505. # for i in range(len(iccid_list)):
  3506. # if i == 0:
  3507. # continue
  3508. # sim_list.append(iccid_list[i])
  3509. # print(sim_list)
  3510. # filename = "物联网卡充值验证"
  3511. # title = ["卡号","到期时间","sim卡状态"]
  3512. # book = xlwt.Workbook() # 创建一个excel对象
  3513. # sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3514. # for xx in range(len(title)): # 遍历列
  3515. # sheet.write(0,xx,title[xx]) # 将title数组中的字段写入到0行i列中
  3516. # for x in range(len(sim_list)):
  3517. # res = get_siminfo(sim_list[x])
  3518. # sim_res = res.text.encode('utf-8').decode('unicode_escape')
  3519. # if eval(sim_res)["code"] == 0:
  3520. # timeStamp = eval(sim_res)["data"]["expiry_date"]
  3521. # dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
  3522. # otherStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S")
  3523. # if eval(sim_res)["data"]["account_status"] == 6:
  3524. # account_status = "预销号"
  3525. # elif eval(sim_res)["data"]["account_status"] == 7:
  3526. # account_status = "销号"
  3527. # elif eval(sim_res)["data"]["account_status"] == 3:
  3528. # account_status = "使用中"
  3529. # else:
  3530. # account_status = eval(sim_res)["data"]["account_status"]
  3531. # print(type(account_status))
  3532. # print(otherStyleTime)
  3533. # print(sim_list[x])
  3534. # sheet.write(x,0,sim_list[x])
  3535. # sheet.write(x,1,otherStyleTime)
  3536. # sheet.write(x,2,account_status)
  3537. # # 写出到IO
  3538. # output = BytesIO()
  3539. # book.save(output)
  3540. # # 重新定位到开始
  3541. # output.seek(0)
  3542. # response = HttpResponse(content_type='application/vnd.ms-excel')
  3543. # response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  3544. # response.write(output.getvalue())
  3545. # return response
  3546. # ------------------------------4.re导出----------------------------
  3547. sta1 = CBDstatus.objects.all()
  3548. dat = []
  3549. for i in sta1:
  3550. print(type(eval(i.cbd_status)['dver'][0]))
  3551. if eval(i.cbd_status)['dver'][0] == "4" and "re" in eval(i.cbd_status)['dver']:
  3552. dat.append(i.equip_id_id)
  3553. filename = "设备信息"
  3554. title = ["设备ID","设备版本","在线状态","设备位置",]
  3555. book = xlwt.Workbook() # 创建一个excel对象
  3556. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3557. x = 0
  3558. for i in range(len(title)): # 遍历列
  3559. sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  3560. for a in dat: # 遍历列表
  3561. x = x + 1
  3562. # equip_time = time.localtime(equip_time)
  3563. # equip_time = time.strftime("%Y-%m-%d %H:%M:%S", equip_time)
  3564. lat = CBDstatus.objects.get(equip_id=a).lat
  3565. lng = CBDstatus.objects.get(equip_id=a).lng
  3566. res = requests.post("http://api.map.baidu.com/geocoder?location=%s,%s&coord_type=gcj02&output=json"%(lat,lng))
  3567. location = eval(res.text)["result"]["addressComponent"]["province"]+eval(res.text)["result"]["addressComponent"]["district"]
  3568. # print("在线状态",type(CBDstatus.objects.get(equip_id=a).is_online))
  3569. if CBDstatus.objects.get(equip_id=a).is_online == "1":
  3570. online = "在线"
  3571. else:
  3572. online = "离线"
  3573. dver = eval(CBDstatus.objects.get(equip_id=a).cbd_status)['dver']
  3574. sheet.write(x,0,a)
  3575. sheet.write(x,1,dver)
  3576. sheet.write(x,2,online)
  3577. sheet.write(x,3,location)
  3578. # 写出到IO
  3579. output = BytesIO()
  3580. book.save(output)
  3581. # 重新定位到开始
  3582. output.seek(0)
  3583. response = HttpResponse(content_type='application/vnd.ms-excel')
  3584. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  3585. response.write(output.getvalue())
  3586. return response
  3587. # return HttpResponse("1")
  3588. # # 此接口用于测报灯更换板子时将旧imei的图片导入新imei中
  3589. # class Photo_Replace(ListView):
  3590. # def get(self,request):
  3591. # pass
  3592. # def post(self,request):
  3593. # old_imei = request.POST.get("old")
  3594. # new_imei = request.POST.get("new")
  3595. # old_obj = Equip.objects.get(equip_id=old_imei)
  3596. # new_obj = Equip.objects.get(equip_id=new_imei)
  3597. # old_photo = CBDphoto.objects.filter(equip_id=old_obj)
  3598. # for i in old_photo:
  3599. # CBDphoto.objects.create(equip_id=new_obj,upl_time=i.upl_time,addr=i.addr)
  3600. # return HttpResponse("0")
  3601. # 孢子统计
  3602. @method_decorator(csrf_exempt, name='dispatch')
  3603. class Spore_Count(ListView):
  3604. def get(self, request):
  3605. pass
  3606. def post(self, request):
  3607. e_id = request.POST.get("e_id")
  3608. page = int(request.POST.get("page"))
  3609. spore_time = []
  3610. pic_time_list = []
  3611. sta1 = Spore_Exist.objects.filter(equip_id=e_id).values()
  3612. sta = []
  3613. for x in sta1:
  3614. # sta2 = {"e_id":x['equip_id'],"upl_time":x['upl_time'],"is_exist":x['is_exist']}
  3615. # sta.append(sta2)
  3616. spore_time.append(x['upl_time'])
  3617. # print(spore_time)
  3618. bzy_pic = BZYphoto.objects.filter(equip_id_id=e_id).values()
  3619. # now_day = datetime.datetime.now().strftime('%Y-%m-%d')
  3620. for i in bzy_pic:
  3621. # print(i['upl_time'].strftime('%Y-%m-%d'))
  3622. pic_time_list.append(i['upl_time'])
  3623. # pic_time = i['upl_time'].strftime('%Y-%m-%d')
  3624. # if pic_time == now_day and now_day not in spore_time:
  3625. # Spore_Exist.objects.create(equip_id=e_id,upl_time=i['upl_time'],is_exist=random.choice([True, False, False]))
  3626. # print("-----------孢子存在值生成成功--------------")
  3627. for xxx in pic_time_list:
  3628. if xxx not in spore_time:
  3629. Spore_Exist.objects.create(equip_id=e_id,upl_time=xxx,is_exist=random.choice([True, False, False]))
  3630. print("-----------孢子存在值生成成功old--------------")
  3631. sta3 = Spore_Exist.objects.filter(equip_id=e_id).values()
  3632. for xx in sta3:
  3633. sta2 = {"e_id":xx['equip_id'],"upl_time":xx['upl_time'],"is_exist":xx['is_exist']}
  3634. sta.append(sta2)
  3635. # spore_time.append(x['upl_time'].strftime('%Y-%m-%d'))
  3636. nums = len(sta)
  3637. sta = sta[(10*(page-1)):(page*10)]
  3638. data = {'data': sta, 'count': nums,"code":0}
  3639. # print(data)
  3640. data = json.dumps(data, cls=CJSONEncoder)
  3641. return HttpResponse(data)
  3642. # 气象站数据导出接口
  3643. class QXZ_Data_Export(ListView):
  3644. def get(self,request):
  3645. equip_id = request.GET.get('id')
  3646. print("请求数据的设备id:",equip_id)
  3647. f_tbegin = request.GET.get('begin')
  3648. f_tend = request.GET.get('end')
  3649. filename = request.GET.get('filename')
  3650. print("f_tbegin:", f_tbegin)
  3651. print("f_tend:", f_tend)
  3652. print("f_tbegin:", type(f_tbegin))
  3653. print("f_tend:", type(f_tend))
  3654. # 查询时间段
  3655. if f_tbegin:
  3656. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  3657. enddate = re.findall(r"\d+\.?\d*", f_tend)
  3658. start_date = datetime.date(int(begindate[0]), int(begindate[1]), int(begindate[2]))
  3659. end_date = datetime.date(int(enddate[0]), int(enddate[1]), int(enddate[2]))
  3660. print("start_date:", start_date)
  3661. print("end_date:", end_date)
  3662. sta1 = QXZdata.objects.filter(equip_id=equip_id, upl_time__range=(start_date, end_date))
  3663. print("sta1:", sta1)
  3664. sta2 = [{"equip_name": x.equip_id.equip_name,
  3665. "qxz_data": eval(x.qxz_data)["data"],
  3666. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  3667. # 查询全部
  3668. else:
  3669. sta1 = QXZdata.objects.filter(equip_id=equip_id)
  3670. print("sta1:",sta1)
  3671. sta2 = [{"equip_name": x.equip_id.equip_name,
  3672. "qxz_data": eval(x.qxz_data)["data"],
  3673. "upl_time": x.upl_time.strftime("%Y-%m-%d %H:%M:%S")} for x in sta1]
  3674. # print(sta2)
  3675. try:
  3676. # 遍历标题
  3677. title = []
  3678. for aaa in sta2[0]['qxz_data']:
  3679. # print(qxz_dict[aaa['eNum']][1])
  3680. title.append(qxz_dict[aaa['eNum']][1]+aaa['eKey'])
  3681. title.append("上报时间")
  3682. print(title)
  3683. # print(sta2[0]['qxz_data'])
  3684. except:
  3685. book = xlwt.Workbook() # 创建一个excel对象
  3686. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3687. sheet.write(0,0,"错误的时间段") # 将title数组中的字段写入到0行i列中
  3688. # 写出到IO
  3689. output = BytesIO()
  3690. book.save(output)
  3691. # 重新定位到开始
  3692. output.seek(0)
  3693. response = HttpResponse(content_type='application/vnd.ms-excel')
  3694. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  3695. response.write(output.getvalue())
  3696. return response
  3697. book = xlwt.Workbook() # 创建一个excel对象
  3698. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  3699. for i in range(len(title)): # 遍历列
  3700. sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  3701. for x in range(len(sta2)): # 遍历列表
  3702. # print("行",x)
  3703. for xx in range(len(title)):
  3704. print("行",x+1,"列",xx)
  3705. # print(sta2[x]["qxz_data"][xx-1])
  3706. if xx+1 == len(title):
  3707. # print(x+1,xx,sta2[x]["upl_time"])
  3708. sheet.write(x+1,xx,sta2[x]["upl_time"])
  3709. break
  3710. # print(x+1,xx,sta2[x]["qxz_data"][xx]["eValue"]+" "+qxz_dict[sta2[x]["qxz_data"][xx]["eNum"]][2])
  3711. sheet.write(x+1,xx,sta2[x]["qxz_data"][xx]["eValue"]+" "+qxz_dict[sta2[x]["qxz_data"][xx]["eNum"]][2])
  3712. # 写出到IO
  3713. output = BytesIO()
  3714. book.save(output)
  3715. # 重新定位到开始
  3716. output.seek(0)
  3717. response = HttpResponse(content_type='application/vnd.ms-excel')
  3718. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  3719. response.write(output.getvalue())
  3720. return response
  3721. def post(self,request):
  3722. pass
  3723. # 性诱设备页面
  3724. class Trap_Report(ListView):
  3725. def get(self,request):
  3726. return render(request, 'reportmanage/xyq_report.html', context={})
  3727. def post(self,request):
  3728. current_user = request.user.username
  3729. print("current_user:", current_user)
  3730. current_user = MyUser.objects.get(username=current_user)
  3731. page = int(request.POST.get("page"))
  3732. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  3733. print("---不是管理员")
  3734. xy_list = Trapstatus.objects.filter(equip_id__equip_user=current_user)
  3735. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  3736. print("---代理商")
  3737. xy_list = Trapstatus.objects.filter(equip_id__equip_agency=current_user.user_agency)
  3738. else:
  3739. print("---管理员")
  3740. xy_list = Trapstatus.objects.all()
  3741. dat = []
  3742. for i in xy_list:
  3743. 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})
  3744. nums = len(dat)
  3745. dat = dat[(10*(page-1)):(page*10)]
  3746. data = {"nums":nums,"dat":dat}
  3747. data = json.dumps(data, cls=CJSONEncoder)
  3748. return HttpResponse(data)
  3749. # 性诱设备详情
  3750. class Trap_Report_Detail(ListView):
  3751. def get(self,request):
  3752. e_id = request.GET.get("id")
  3753. equip_obj = Equip.objects.get(equip_id=e_id)
  3754. ename = equip_obj.equip_name
  3755. nums = Trapdata.objects.filter(equip_id=e_id).count()
  3756. return render(request, 'reportmanage/xyq_report_detail.html', context={"ename":ename,"equip_id":e_id,"nums":nums})
  3757. def post(self,request):
  3758. e_id = request.POST.get("id")
  3759. page = int(request.POST.get("page"))
  3760. xy_list = Trapdata.objects.filter(equip_id=e_id)
  3761. dat = []
  3762. for i in xy_list:
  3763. 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})
  3764. nums = len(dat)
  3765. dat = dat[(10*(page-1)):(page*10)]
  3766. data = {"dat":dat,"nums":nums}
  3767. data = json.dumps(data, cls=CJSONEncoder)
  3768. return HttpResponse(data)
  3769. # 性诱详情折线
  3770. class Trap_Report_Detail_Chart(ListView):
  3771. def get(self,request):
  3772. pass
  3773. def post(self,request):
  3774. e_id = request.POST.get("id")
  3775. one_month = datetime.timedelta(days=30)
  3776. one_month_later = datetime.datetime.now() - one_month
  3777. now_time = datetime.datetime.now()
  3778. xy_list = Trapdata.objects.filter(equip_id=e_id, upl_time__range=(one_month_later, now_time))
  3779. data = []
  3780. for i in xy_list:
  3781. data.append({"pest":i.pest,"pestnum":i.pestnum,"upl_time":i.upl_time,"at":i.tem,"ah":i.hum})
  3782. data = json.dumps(data, cls=CJSONEncoder)
  3783. return HttpResponse(data)
  3784. # 性诱设备图片页面
  3785. class Trap_Image(ListView):
  3786. def get(self,request):
  3787. print("-----image preview!-----")
  3788. imei = request.GET.get('imei')
  3789. print("imei:", imei)
  3790. nums = Trapphoto.objects.filter(equip_id=imei).count()
  3791. print("nums:", nums)
  3792. return render(request, 'reportmanage/xyq_image.html', context={"imei":imei,"nums":nums})
  3793. def post(self,request):
  3794. pass
  3795. # 性诱设备图片列表
  3796. class Trap_Image_List(ListView):
  3797. def get(self,request):
  3798. print("-----image list view!-----")
  3799. imei = request.GET.get('imei')
  3800. print("imei:", imei)
  3801. # 获得当前页:
  3802. page = int(request.GET.get('page'))
  3803. print("page:", page)
  3804. equip_name = Equip.objects.get(equip_id=imei).equip_name
  3805. # 当前用户:返回用户,前端判断是否显示删除图片按钮
  3806. current_user = request.session.get('username')
  3807. print("current_user:", current_user)
  3808. current_user = MyUser.objects.get(username=current_user)
  3809. img = Trapphoto.objects.filter(equip_id=imei)[(8*(page-1)):(page*8)]
  3810. equip_name = Equip.objects.get(equip_id=imei).equip_name
  3811. return render(request, 'reportmanage/xyq_imageList.html', context={"img": img, "equip_name": equip_name, "current_user": current_user,'imei':imei})
  3812. def post(self,request):
  3813. pass
  3814. def mkdir(path):
  3815. # 去除首位空格
  3816. path=path.strip()
  3817. # 去除尾部 \ 符号
  3818. path=path.rstrip("\\")
  3819. # 判断路径是否存在
  3820. # 存在 True
  3821. # 不存在 False
  3822. isExists=os.path.exists(path)
  3823. # 判断结果
  3824. if not isExists:
  3825. # 如果不存在则创建目录
  3826. # 创建目录操作函数
  3827. os.makedirs(path)
  3828. print(path+' 创建成功')
  3829. return True
  3830. else:
  3831. # 如果目录存在则不创建,并提示目录已存在
  3832. print(path+' 目录已存在')
  3833. return False
  3834. def variance_of_laplacian(image):
  3835. # 拉普拉斯的方差
  3836. return cv2.Laplacian(image, cv2.CV_64F).var()
  3837. ##通过thread 实现django中
  3838. import threading
  3839. def bzythread(imei):
  3840. nowtime = datetime.datetime.now().strftime('%Y%m%d')
  3841. # origin = sys.stdout
  3842. # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a')
  3843. # sys.stdout = f
  3844. print('=================================================')
  3845. print("<-----imei:\n" + imei + ';\n')
  3846. print("Message:\n" + "http:bzyphoto" + "----->\n")
  3847. print("%s"%datetime.datetime.now())
  3848. print('=================================================')
  3849. pic_name = datetime.datetime.now().strftime('%Y%m')
  3850. args = "pyftp/ftp_file/bzy_test/" + imei
  3851. try:
  3852. # 清晰度的list:
  3853. cv_num_list = []
  3854. # # 文件名的列表
  3855. # file_list = list(paths.list_images(args))
  3856. # print("\n===========================")
  3857. # print("file_list:",file_list)
  3858. # print("type file_list:",type(file_list))
  3859. # -----------------------------------------------------------
  3860. file_list1 = list(paths.list_images(args))
  3861. print("\n===========================")
  3862. # print("file_list1:",file_list1)
  3863. print("type file_list1:",type(file_list1))
  3864. cv_num_list1 = []
  3865. for imagePath1 in file_list1[::]:
  3866. # pass
  3867. # load the image, convert it to grayscale, and compute the
  3868. # focus measure of the image using the Variance of Laplacian
  3869. # method
  3870. # 加载图像,将其转换为灰度,然后计算
  3871. # 使用拉普拉斯方差对图像进行聚焦测量
  3872. #方法
  3873. # image = cv2.imread(imagePath)
  3874. # gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  3875. # fm = variance_of_laplacian(gray)
  3876. # fm = get_value(imagePath)
  3877. # 孢子仪图片过小删除
  3878. if os.path.getsize(imagePath1) <= 10:
  3879. file_list1.remove(imagePath1)
  3880. img1 = cv2.imread(imagePath1)
  3881. img1 = cv2.resize(img1, (800, 600))
  3882. gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
  3883. # 创建SIFT对象
  3884. sift = cv2.xfeatures2d.SIFT_create()
  3885. keypoints, descriptor = sift.detectAndCompute(gray, None)
  3886. img1 = cv2.drawKeypoints(image=img1, outImage=img1, keypoints=keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0, 0, 255))
  3887. # 显示图片
  3888. # cv2.imshow('sift_keypoints', img1)
  3889. # cv2.waitKey(2000)
  3890. # cv2.destroyAllWindows()
  3891. fm1 = len(keypoints)
  3892. # im=Image.open(imagePath)
  3893. # im1=im.convert("YCbCr") #转换图像的模式到视频模式
  3894. # y1,cb1,cr1=im1.getpixel((height*0.2,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3895. # y2,cb2,cr2=im1.getpixel((height*0.8,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3896. # y3,cb3,cr3=im1.getpixel((height*0.2,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3897. # y4,cb4,cr4=im1.getpixel((height*0.8,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3898. # if y1 < 50 and y2 < 50 and y3 < 50 and y4 < 50:
  3899. # file_list1.remove(imagePath)
  3900. # else:
  3901. # cv_num_list1.append(fm1)
  3902. # # 打印清晰度值:
  3903. # print("fm",fm)
  3904. # # 打印文件路径
  3905. # print("imagePath",imagePath)
  3906. cv_num_list1.append(fm1)
  3907. # 打印清晰度值:
  3908. print("fm1",fm1)
  3909. # 打印文件路径
  3910. print("imagePath1",imagePath1)
  3911. file_cv_tuple1 = tuple(zip(cv_num_list1,file_list1))
  3912. print("file_cv_tuple1:\n",file_cv_tuple1)
  3913. print("=========================================/n")
  3914. file_cv_tuple_list1 = list(file_cv_tuple1)
  3915. print("file_cv_tuple_list1:\n",file_cv_tuple_list1)
  3916. print("*****************************************/n")
  3917. # 按照清晰度排序:, reverse=True降序
  3918. result1 = sorted(file_cv_tuple_list1, key=lambda s: s[0],reverse=True)
  3919. print("result1:\n",result1)
  3920. # 切片取清晰度最高的前五张图片:
  3921. result1_5 = result1[0:3]
  3922. # result5 = result[0:1]
  3923. print("result1_5:\n",result1_5)
  3924. # # -----------------------------------------------------------
  3925. # file_list = []
  3926. # for i in result1_5:
  3927. # file_list.append(i[1])
  3928. # for imagePath in file_list[::]:
  3929. # # 孢子仪图片过小删除
  3930. # if os.path.getsize(imagePath) <= 10:
  3931. # file_list.remove(imagePath)
  3932. # # 加载图像,将其转换为灰度,然后计算
  3933. # # 使用拉普拉斯方差对图像进行聚焦测量
  3934. # image = cv2.imread(imagePath)
  3935. # gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  3936. # fm = variance_of_laplacian(gray)
  3937. # # 加载图片
  3938. # img = Image.open(imagePath)
  3939. # # 获取图像的
  3940. # height = img.size[0]
  3941. # width = img.size[1]
  3942. # im=Image.open(imagePath)
  3943. # print(im.mode) #查看图像的模式
  3944. # im1=im.convert("YCbCr") #转换图像的模式到视频模式
  3945. # y1,cb1,cr1=im1.getpixel((height*0.2,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3946. # y2,cb2,cr2=im1.getpixel((height*0.8,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3947. # y3,cb3,cr3=im1.getpixel((height*0.2,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3948. # y4,cb4,cr4=im1.getpixel((height*0.8,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  3949. # if y1 < 50 and y2 < 50 and y3 < 50 and y4 < 50:
  3950. # file_list.remove(imagePath)
  3951. # else:
  3952. # cv_num_list.append(fm)
  3953. # # 打印清晰度值:
  3954. # print("fm",fm)
  3955. # # 打印文件路径
  3956. # print("imagePath",imagePath)
  3957. # print("////////////////////////////////////////////////////////n")
  3958. # print("cv_num_list:\n",cv_num_list)
  3959. # # 清晰度列表和文件列表对应,生成dict
  3960. # # file_cv_dict = dict(zip(cv_num_list,file_list))
  3961. # # 清晰度列表和文件列表对应,生成tuple
  3962. # file_cv_tuple = tuple(zip(cv_num_list,file_list))
  3963. # print("file_cv_tuple:\n",file_cv_tuple)
  3964. # print("=========================================/n")
  3965. # file_cv_tuple_list = list(file_cv_tuple)
  3966. # print("file_cv_tuple_list:\n",file_cv_tuple_list)
  3967. # print("*****************************************/n")
  3968. # # 按照清晰度排序:, reverse=True降序
  3969. # result = sorted(file_cv_tuple_list, key=lambda s: s[0],reverse=True)
  3970. # print("result:\n",result)
  3971. # # 切片取清晰度最高的前五张图片:
  3972. # # result5 = result[0:5]
  3973. # result5 = result[0:1]
  3974. # print("result5:\n",result5)
  3975. # ---------------------------------------------------------------------------------------
  3976. pic_name = datetime.datetime.now().strftime('%Y%m')
  3977. # 定义要创建的目录:
  3978. mkpath="./pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name
  3979. # 调用函数,创建目录:
  3980. mkdir(mkpath)
  3981. for i in result1_5:
  3982. # for i in result5:
  3983. #i值:(137.06453470539032, 'images\\192.168.2.64_01_20190802095315882_ALARM_INPUT.jpg')
  3984. print("file path:",i[1])
  3985. #复制文件:
  3986. shutil.copy(i[1],mkpath)
  3987. # os.system("rm ./pyftp/ftp_file/bzy_test/%s/*.jpg -rf"%imei)
  3988. 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")))
  3989. print("-----------------image move success----------------------")
  3990. equip = Equip.objects.get(equip_id=imei)
  3991. file_dir="pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name
  3992. origin = sys.stdout
  3993. f = open('logs/'+"bzyphoto" + nowtime +'.txt','a')
  3994. sys.stdout = f
  3995. print('=================================================')
  3996. print("<-----imei:\n" + imei + ';\n')
  3997. print("Message:\n" + "http:bzyphoto" + "----->\n")
  3998. print("%s"%datetime.datetime.now())
  3999. print('=================================================')
  4000. for root, dirs, files in os.walk(file_dir):
  4001. print("当前目录为=========>>",root) #当前目录路径
  4002. print("当前子目录为=========>>",dirs) #当前路径下所有子目录
  4003. print("当前目录文件为=========>>",files) #当前路径下所有非目录子文件
  4004. for i in files:
  4005. photo_addr = file_dir + "/" + i
  4006. print("文件夹图片路径===========》》",photo_addr)
  4007. if BZYphoto.objects.filter(addr=photo_addr).exists():
  4008. print("照片存在")
  4009. else:
  4010. BZYphoto.objects.create(equip_id=equip, addr=photo_addr)
  4011. print("照片不存在")
  4012. sys.stdout = origin
  4013. f.close()
  4014. return
  4015. except Exception as a:
  4016. nowtime = datetime.datetime.now().strftime('%Y%m%d')
  4017. origin = sys.stdout
  4018. f = open('logs/'+"bzyphoto_exce" + nowtime +'.txt','a')
  4019. sys.stdout = f
  4020. print('=================================================')
  4021. print("<-----imei:\n" + imei + ';\n')
  4022. print("Message:\n" + "http:bzyphoto" + "----->\n")
  4023. print("%s"%datetime.datetime.now())
  4024. print("==========%s========"%a)
  4025. print("-----------------image move default----------------------")
  4026. sys.stdout = origin
  4027. f.close()
  4028. return
  4029. return
  4030. def bzyphotothread(imei):
  4031. # nowtime = datetime.datetime.now().strftime('%Y%m%d')
  4032. # origin = sys.stdout
  4033. # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a')
  4034. # sys.stdout = f
  4035. # print('=================================================')
  4036. # print("<-----imei:\n" + imei + ';\n')
  4037. # print("Message:\n" + "http:bzyphoto" + "----->\n")
  4038. # print("%s"%datetime.datetime.now())
  4039. # print('=================================================')
  4040. pic_name = datetime.datetime.now().strftime('%Y%m')
  4041. try:
  4042. pic_name = datetime.datetime.now().strftime('%Y%m')
  4043. args = "pyftp/ftp_file/bzy_test/" + imei
  4044. cv_num_list = []
  4045. file_list1 = list(paths.list_images(args))
  4046. print("\n===========================")
  4047. print("file_list1:",file_list1)
  4048. print("type file_list1:",type(file_list1))
  4049. cv_num_list1 = []
  4050. for imagePath1 in file_list1[::]:
  4051. # fm = get_value(imagePath)
  4052. # 孢子仪图片过小删除
  4053. if os.path.getsize(imagePath1) <= 10:
  4054. file_list1.remove(imagePath1)
  4055. img1 = cv2.imread(imagePath1)
  4056. img1 = cv2.resize(img1, (800, 600))
  4057. gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
  4058. # 创建SIFT对象
  4059. sift = cv2.xfeatures2d.SIFT_create()
  4060. keypoints, descriptor = sift.detectAndCompute(gray, None)
  4061. img1 = cv2.drawKeypoints(image=img1, outImage=img1, keypoints=keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT, color=(0, 0, 255))
  4062. fm1 = len(keypoints)
  4063. cv_num_list1.append(fm1)
  4064. # 打印清晰度值:
  4065. # print("fm1",fm1)
  4066. # # 打印文件路径
  4067. # print("imagePath1",imagePath1)
  4068. file_cv_tuple1 = tuple(zip(cv_num_list1,file_list1))
  4069. print("file_cv_tuple1:\n",file_cv_tuple1)
  4070. print("=========================================/n")
  4071. file_cv_tuple_list1 = list(file_cv_tuple1)
  4072. print("file_cv_tuple_list1:\n",file_cv_tuple_list1)
  4073. print("*****************************************/n")
  4074. # 按照清晰度排序:, reverse=True降序
  4075. result1 = sorted(file_cv_tuple_list1, key=lambda s: s[0],reverse=True)
  4076. print("result1:\n",result1)
  4077. # 切片取清晰度最高的前五张图片:
  4078. result1_5 = result1[0:3]
  4079. # result5 = result[0:1]
  4080. print("result1_5:\n",result1_5)
  4081. pic_name = datetime.datetime.now().strftime('%Y%m')
  4082. # 定义要创建的目录:
  4083. mkpath="./pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name
  4084. # 调用函数,创建目录:
  4085. mkdir(mkpath)
  4086. for i in result1_5:
  4087. # for i in result5:
  4088. #i值:(137.06453470539032, 'images\\192.168.2.64_01_20190802095315882_ALARM_INPUT.jpg')
  4089. print("file path:",i[1])
  4090. #复制文件:
  4091. shutil.copy(i[1],mkpath)
  4092. # os.system("rm ./pyftp/ftp_file/bzy_test/%s/*.jpg -rf"%imei)
  4093. 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")))
  4094. print("-----------------image move success----------------------")
  4095. equip = Equip.objects.get(equip_id=imei)
  4096. file_dir="pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name
  4097. for root, dirs, files in os.walk(file_dir):
  4098. print("当前目录为=========>>",root) #当前目录路径
  4099. print("当前子目录为=========>>",dirs) #当前路径下所有子目录
  4100. print("当前目录文件为=========>>",files) #当前路径下所有非目录子文件
  4101. for i in files:
  4102. photo_addr = file_dir + "/" + i
  4103. print("文件夹图片路径===========》》",photo_addr)
  4104. if BZYphoto.objects.filter(addr=photo_addr).exists():
  4105. print("照片存在")
  4106. else:
  4107. BZYphoto.objects.create(equip_id=equip, addr=photo_addr)
  4108. print("照片不存在")
  4109. except Exception as a:
  4110. print('=================================================')
  4111. print("<-----imei:\n" + imei + ';\n')
  4112. print("Message:\n" + "http:bzyphoto" + "----->\n")
  4113. print("%s"%datetime.datetime.now())
  4114. print("==========%s========"%a)
  4115. print("-----------------image move default----------------------")
  4116. # sys.stdout = origin
  4117. # f.close()
  4118. return
  4119. # 孢子仪过滤图片接口
  4120. class BZY_Mqtt_Photo(ListView):
  4121. def get(self,request):
  4122. pass
  4123. def post(self,request):
  4124. imeistr = request.body
  4125. datas = json.loads(request.body.decode())
  4126. print("---------",datas["imei"])
  4127. imei = datas["imei"]
  4128. nowtime = datetime.datetime.now().strftime('%Y%m%d')
  4129. # origin = sys.stdout
  4130. # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a')
  4131. # sys.stdout = f
  4132. # print('=================================================')
  4133. # print("<-----imei:\n" + imei + ';\n')
  4134. # print("Message:\n" + "http:bzyphoto" + "----->\n")
  4135. # print("%s"%datetime.datetime.now())
  4136. # print('=================================================')
  4137. # sys.stdout = origin
  4138. # f.close()
  4139. # t = threading.Thread(target=bzyphotothread,args=(imei,))
  4140. # t.start()
  4141. # r = test.delay(imei) # 返回的r不为Done,而是该任务的uniq_id
  4142. return HttpResponse("0")
  4143. # def post(self,request):
  4144. # imeistr = request.body
  4145. # datas = json.loads(request.body.decode())
  4146. # print("---------",datas["imei"])
  4147. # imei = datas["imei"]
  4148. # nowtime = datetime.datetime.now().strftime('%Y%m%d')
  4149. # origin = sys.stdout
  4150. # f = open('logs/'+"bzyphoto" + nowtime +'.txt','a')
  4151. # sys.stdout = f
  4152. # print('=================================================')
  4153. # print("<-----imei:\n" + imei + ';\n')
  4154. # print("Message:\n" + "http:bzyphoto" + "----->\n")
  4155. # print("%s"%datetime.datetime.now())
  4156. # print('=================================================')
  4157. # sys.stdout = origin
  4158. # f.close()
  4159. # pic_name = datetime.datetime.now().strftime('%Y%m')
  4160. # try:
  4161. # pic_name = datetime.datetime.now().strftime('%Y%m')
  4162. # args = "pyftp/ftp_file/bzy_test/" + imei
  4163. # # 清晰度的list:
  4164. # cv_num_list = []
  4165. # # 文件名的列表
  4166. # file_list = list(paths.list_images(args))
  4167. # print("\n===========================")
  4168. # print("file_list:",file_list)
  4169. # print("type file_list:",type(file_list))
  4170. # for imagePath in file_list[::]:
  4171. # # 孢子仪图片过小删除
  4172. # if os.path.getsize(imagePath) <= 10:
  4173. # file_list.remove(imagePath)
  4174. # # 加载图像,将其转换为灰度,然后计算
  4175. # # 使用拉普拉斯方差对图像进行聚焦测量
  4176. # image = cv2.imread(imagePath)
  4177. # gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  4178. # fm = variance_of_laplacian(gray)
  4179. # # 加载图片
  4180. # img = Image.open(imagePath)
  4181. # # 获取图像的
  4182. # height = img.size[0]
  4183. # width = img.size[1]
  4184. # im=Image.open(imagePath)
  4185. # print(im.mode) #查看图像的模式
  4186. # im1=im.convert("YCbCr") #转换图像的模式到视频模式
  4187. # y1,cb1,cr1=im1.getpixel((height*0.2,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  4188. # y2,cb2,cr2=im1.getpixel((height*0.8,width*0.2)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  4189. # y3,cb3,cr3=im1.getpixel((height*0.2,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  4190. # y4,cb4,cr4=im1.getpixel((height*0.8,width*0.8)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
  4191. # if y1 < 50 and y2 < 50 and y3 < 50 and y4 < 50:
  4192. # file_list.remove(imagePath)
  4193. # else:
  4194. # cv_num_list.append(fm)
  4195. # # 打印清晰度值:
  4196. # print("fm",fm)
  4197. # # 打印文件路径
  4198. # print("imagePath",imagePath)
  4199. # print("////////////////////////////////////////////////////////n")
  4200. # print("cv_num_list:\n",cv_num_list)
  4201. # # 清晰度列表和文件列表对应,生成dict
  4202. # # file_cv_dict = dict(zip(cv_num_list,file_list))
  4203. # # 清晰度列表和文件列表对应,生成tuple
  4204. # file_cv_tuple = tuple(zip(cv_num_list,file_list))
  4205. # print("file_cv_tuple:\n",file_cv_tuple)
  4206. # print("=========================================/n")
  4207. # file_cv_tuple_list = list(file_cv_tuple)
  4208. # print("file_cv_tuple_list:\n",file_cv_tuple_list)
  4209. # print("*****************************************/n")
  4210. # # 按照清晰度排序:, reverse=True降序
  4211. # result = sorted(file_cv_tuple_list, key=lambda s: s[0],reverse=True)
  4212. # print("result:\n",result)
  4213. # # 切片取清晰度最高的前五张图片:
  4214. # # result5 = result[0:5]
  4215. # result5 = result[0:1]
  4216. # print("result5:\n",result5)
  4217. # pic_name = datetime.datetime.now().strftime('%Y%m')
  4218. # # 定义要创建的目录:
  4219. # mkpath="./pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name
  4220. # # 调用函数,创建目录:
  4221. # mkdir(mkpath)
  4222. # for i in result5:
  4223. # #i值:(137.06453470539032, 'images\\192.168.2.64_01_20190802095315882_ALARM_INPUT.jpg')
  4224. # print("file path:",i[1])
  4225. # #复制文件:
  4226. # shutil.copy(i[1],mkpath)
  4227. # # os.system("rm ./pyftp/ftp_file/bzy_test/%s/*.jpg -rf"%imei)
  4228. # 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")))
  4229. # print("-----------------image move success----------------------")
  4230. # equip = Equip.objects.get(equip_id=imei)
  4231. # file_dir="pyftp/ftp_file/bzy_photo/" + imei + "/" + pic_name
  4232. # for root, dirs, files in os.walk(file_dir):
  4233. # print("当前目录为=========>>",root) #当前目录路径
  4234. # print("当前子目录为=========>>",dirs) #当前路径下所有子目录
  4235. # print("当前目录文件为=========>>",files) #当前路径下所有非目录子文件
  4236. # for i in files:
  4237. # photo_addr = file_dir + "/" + i
  4238. # print("文件��图片路径===========》》",photo_addr)
  4239. # if BZYphoto.objects.filter(addr=photo_addr).exists():
  4240. # print("照片存在")
  4241. # else:
  4242. # BZYphoto.objects.create(equip_id=equip, addr=photo_addr)
  4243. # print("照片不存在")
  4244. # return HttpResponse("2")
  4245. # except Exception as a:
  4246. # nowtime = datetime.datetime.now().strftime('%Y%m%d')
  4247. # origin = sys.stdout
  4248. # f = open('logs/'+"bzyphoto_exce" + nowtime +'.txt','a')
  4249. # sys.stdout = f
  4250. # print('=================================================')
  4251. # print("<-----imei:\n" + imei + ';\n')
  4252. # print("Message:\n" + "http:bzyphoto" + "----->\n")
  4253. # print("%s"%datetime.datetime.now())
  4254. # print("==========%s========"%a)
  4255. # print("-----------------image move default----------------------")
  4256. # sys.stdout = origin
  4257. # f.close()
  4258. # return HttpResponse("1")
  4259. # return HttpResponse("0")
  4260. def worker(number):
  4261. for i in range(20):
  4262. print(number)
  4263. print(i)
  4264. time.sleep(1)
  4265. return
  4266. class ThreadView(ListView):
  4267. def get(self,request):
  4268. pass
  4269. def post(self,request):
  4270. imei = request.POST.get("imei")
  4271. # t = threading.Thread(target=worker,args=(imei,))
  4272. # t.start()
  4273. # t.join()
  4274. return HttpResponse("0")
  4275. # 气象站测试接口
  4276. class QXZ_Test(ListView):
  4277. def get(self,request):
  4278. pass
  4279. def post(self,request):
  4280. data = request.POST.get("data")
  4281. try:
  4282. bodydata = request.body
  4283. print("bodydata=====>>",bodydata)
  4284. except:
  4285. pass
  4286. print("data=====>>",data)
  4287. return HttpResponse("success")
  4288. import base64
  4289. # 海康测报灯上传图片
  4290. class XYcb_Photo(ListView):
  4291. def get(self,request):
  4292. pass
  4293. def post(self,request):
  4294. auth = request.META.get('HTTP_AUTHORIZATION').split()
  4295. if len(auth) == 2:
  4296. if auth[0].lower() == "basic":
  4297. print("type %r auth1: %r" % (type(auth[1]), auth[1]))
  4298. uname, passwd = base64.b64decode(auth[1]).decode().split(':')
  4299. print("uname",uname)
  4300. print("passwd",passwd)
  4301. print("验证信息为",auth)
  4302. photo = request.FILES['upicture']
  4303. print("图片:", photo)
  4304. photo_dir = 'pyftp/ftp_file/cbd_test/'
  4305. # 判断如果路径不存在,即创建路径
  4306. if os.path.exists(photo_dir) == False:
  4307. os.makedirs(photo_dir)
  4308. nowtime = datetime.datetime.now().strftime('%Y%m%d')
  4309. img = Image.open(photo)
  4310. img.save(photo_dir + nowtime+".jpg")
  4311. # 数据库关联设备,并在照片的表中存入路径:
  4312. data = "0"
  4313. return HttpResponse(data)