views.py 217 KB

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