YAServerDlg.cpp 225 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585
  1. // YAServerDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "YAServer.h"
  5. #include "YAServerDlg.h"
  6. #include "afxdialogex.h"
  7. #include <stdio.h>
  8. #include <sio_client.h>
  9. //#include <functional>
  10. //#include <thread> // c++11init_reader
  11. //#include <mutex> // c++11
  12. #include <condition_variable>
  13. #include <string>
  14. #include "def.h"
  15. #include "socketdef.h"
  16. #include <Functions/Functions.h>
  17. #include <json/json.h>
  18. #include "MysqlConnPool.h"
  19. #include "locate_algorithm.h"
  20. #include <strconv/strconv.h>
  21. #include <kalman/locate.h>
  22. #include <INIFILE.h>
  23. #include "log_def.h"
  24. #include "DbSettingDlg.h"
  25. #include "LogSetting.h"
  26. #include "SysSetting.h"
  27. #define STR_LEN_TIME 30
  28. #ifdef _DEBUG
  29. #ifndef DEBUG_NEW
  30. #define new DEBUG_NEW
  31. #endif
  32. #endif
  33. typedef struct {
  34. CYAServerDlg* handle;
  35. int len;
  36. DWORD dwConnID;
  37. BYTE buf[LENGTH_MSG_4K];
  38. }ParseData;
  39. typedef struct
  40. {
  41. CYAServerDlg* handle;
  42. bool useTime;
  43. char* path;
  44. char* strLog;
  45. }LogInfo;
  46. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  47. DWORD g_tickcount;
  48. DWORD g_diffTickCount = 0;
  49. DWORD g_send_tickout;
  50. DWORD g_last_send_time;
  51. DWORD g_testtick;
  52. bool g_is_rec_hist = false;
  53. class CAboutDlg : public CDialogEx
  54. {
  55. public:
  56. CAboutDlg();
  57. // 对话框数据
  58. enum { IDD = IDD_ABOUTBOX };
  59. protected:
  60. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  61. // 实现
  62. protected:
  63. DECLARE_MESSAGE_MAP()
  64. };
  65. CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
  66. {
  67. }
  68. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  69. {
  70. CDialogEx::DoDataExchange(pDX);
  71. }
  72. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  73. END_MESSAGE_MAP()
  74. // CYAServerDlg 对话框
  75. CYAServerDlg::CYAServerDlg(CWnd* pParent /*=NULL*/)
  76. : CDialogEx(CYAServerDlg::IDD, pParent),
  77. _server(this),
  78. _io(new client())
  79. , m_reader_id_hist(0)
  80. {
  81. ws_init();
  82. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  83. }
  84. void CYAServerDlg::DoDataExchange(CDataExchange* pDX)
  85. {
  86. CDialogEx::DoDataExchange(pDX);
  87. DDX_Control(pDX, IDC_BTN_START, m_btStart);
  88. DDX_Control(pDX, IDC_BTN_STOP, m_btStop);
  89. DDX_Control(pDX, IDC_LIST_READER, m_listctrl_reader);
  90. DDX_Control(pDX, IDC_LIST_LOG, m_list_log);
  91. DDX_Text(pDX, IDC_EDIT_READERID, m_reader_id_hist);
  92. }
  93. BEGIN_MESSAGE_MAP(CYAServerDlg, CDialogEx)
  94. ON_WM_SYSCOMMAND()
  95. ON_WM_PAINT()
  96. ON_WM_QUERYDRAGICON()
  97. ON_WM_TIMER()
  98. ON_BN_CLICKED(IDC_BTN_START, &CYAServerDlg::OnBnStart)
  99. ON_BN_CLICKED(IDC_BTN_STOP, &CYAServerDlg::OnBnStop)
  100. ON_BN_CLICKED(IDC_BTN_EXIT, &CYAServerDlg::OnBnExit)
  101. ON_BN_CLICKED(IDC_BTN_SYNCTIME, &CYAServerDlg::OnBnSyncTime)
  102. ON_MESSAGE(WM_ON_MONITOR, on_monitor)
  103. ON_COMMAND(ID_MENU_DB, &CYAServerDlg::OnMenuDb)
  104. ON_COMMAND(ID_MENU_LOG, &CYAServerDlg::OnMenuLog)
  105. ON_COMMAND(ID_MENU_PARAM, &CYAServerDlg::OnMenuParam)
  106. ON_BN_CLICKED(IDC_BTN_HIS, &CYAServerDlg::OnBnCallHisData)
  107. ON_MESSAGE(WM_REFRESH_IP_LIST, &CYAServerDlg::OnMsgRefreshIpList)
  108. ON_MESSAGE(WM_CARD_ADD_DIST, &CYAServerDlg::OnCardAddDist)
  109. ON_MESSAGE(WM_REMOVE_SOCKET, &CYAServerDlg::OnRemoveSocket)
  110. ON_EN_UPDATE(IDC_EDIT_READERID, &CYAServerDlg::OnEnUpdateEditReaderid)
  111. END_MESSAGE_MAP()
  112. // CYAServerDlg 消息处理程序
  113. UINT WaitForS(int nSecond,bool bSleep=false)//用于等待一段时间的函数,普通精度的,参数单位秒
  114. {
  115. COleDateTime start_time = COleDateTime::GetCurrentTime();
  116. COleDateTimeSpan end_time = COleDateTime::GetCurrentTime()-start_time;
  117. while(end_time.GetTotalSeconds() < nSecond){
  118. if(!bSleep){
  119. MSG msg;
  120. PeekMessage(&msg,NULL,0,0,PM_NOREMOVE);
  121. TranslateMessage(&msg);
  122. DispatchMessage(&msg);
  123. //以上四行是实现在延时或定时期间能处理其他的消息,降低CPU的占有率,但也降低延时或定时精度
  124. }
  125. Sleep(80);
  126. end_time = COleDateTime::GetCurrentTime()-start_time;
  127. }
  128. return 0;
  129. }
  130. UINT WaitForMS(int mSecond,bool bSleep=false)//高精度的等待函数,参数单位毫秒
  131. {
  132. double dfFreq;
  133. LARGE_INTEGER litmp;
  134. QueryPerformanceFrequency(&litmp);
  135. dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
  136. QueryPerformanceCounter(&litmp);
  137. LONGLONG QPart0 = litmp.QuadPart;// 获得初始值
  138. while((double)(litmp.QuadPart-QPart0)/dfFreq < double(mSecond/1000)){
  139. if(!bSleep){
  140. MSG msg;
  141. PeekMessage(&msg,NULL,0,0,PM_NOREMOVE);
  142. TranslateMessage(&msg);
  143. DispatchMessage(&msg);
  144. //以上四行是实现在延时或定时期间能处理其他的消息,降低CPU的占有率,但也降低延时或定时精度
  145. }
  146. QueryPerformanceCounter(&litmp);
  147. }
  148. return 0;
  149. }
  150. ULONGLONG time_send_json_counting;
  151. ULONGLONG time_send_json_device_state;
  152. ULONGLONG time_send_json_alarm;
  153. ULONGLONG time_send_json_postion;
  154. ULONGLONG time_sync_reader_time;
  155. ULONGLONG time_clear_call_time;
  156. ULONGLONG time_send_call;
  157. ULONGLONG time_send_help;
  158. ULONGLONG time_ws_connect;
  159. bool g_exit=false;
  160. long giSqlCount=0;
  161. long giSqlThreadCount=0;
  162. long gSqlTimes=0;
  163. long giAllSqlCount=0;
  164. long giAllThreadCount=0;
  165. HANDLE hSemaHandle=NULL;
  166. DWORD WINAPI _exec_sql(LPVOID lparam)
  167. {
  168. char *sql = (char*)lparam ;
  169. CMysqlConn* pConn = NULL;
  170. CDBConnGuard pDbGuard(pConn);
  171. if(pConn == NULL){
  172. delete[] sql;
  173. sql = NULL;
  174. //TRACE(_T("failed \n"));
  175. return 1;
  176. }
  177. MYSQL_RES* pRes;
  178. int err = 0;
  179. //pRes = pConn->Execute(sql, err);
  180. pRes = pConn->MultiExecute(sql,err);
  181. if(err > 0){
  182. TRACE(_T("sql error \n"));
  183. }
  184. mysql_free_result(pRes);
  185. //TRACE(_T("passed\n"));
  186. delete[] sql;
  187. sql = NULL;
  188. Sleep(1);
  189. return 0;
  190. }
  191. DWORD WINAPI _write_error_log(LPVOID lparam)
  192. {
  193. LogInfo* err = (LogInfo*)lparam;
  194. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(err->handle);
  195. dlg->writeErrorLogEx(err->path, err->strLog, err->useTime);
  196. // malloc
  197. if(err){
  198. free(err->path);
  199. err->path = NULL;
  200. free(err->strLog);
  201. err->strLog = NULL;
  202. delete err;
  203. err = NULL;
  204. }
  205. Sleep(1);
  206. return 0;
  207. }
  208. DWORD WINAPI _parse_package_data(LPVOID lparam)
  209. {
  210. ParseData* data = (ParseData*)lparam;
  211. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(data->handle);
  212. dlg->parse_package_data(data->buf, data->len, data->dwConnID);
  213. //dlg->parse_data_receive_package(data->buf, data->len, data->dwConnID);
  214. free(data);
  215. Sleep(1);
  216. return 0;
  217. }
  218. DWORD WINAPI _parse_data_server(LPVOID lparam)
  219. {
  220. //TRACE(_T("in thread \n"));
  221. ParseData* data = (ParseData*)lparam;
  222. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(data->handle);
  223. //dlg->parse_package_data(data->buf, data->len, data->dwConnID);
  224. dlg->parse_data_server(data->buf, data->len, data->dwConnID);
  225. //TRACE(_T("do not come here \n"));
  226. data->handle->m_nMallocTimes--;
  227. //TRACE(_T("use data over %d = \n"),data->handle->m_nMallocTimes);
  228. free(data);
  229. Sleep(1);
  230. return 0;
  231. }
  232. UINT _thread_timer(LPVOID lparam)
  233. {
  234. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(lparam);
  235. while(!g_exit){
  236. ULONGLONG cur_time =::GetTickCount();
  237. // send_json_counting
  238. if(cur_time - time_send_json_counting > theApp.send_json_counting ){
  239. //time_send_json_counting = cur_time;
  240. //dlg->send_json_data(JSON_CMD_VALUE_PUSH, dlg->get_json_counting());
  241. }
  242. // send_json_alarm
  243. if(cur_time - time_send_json_alarm > theApp.send_json_alarm){
  244. time_send_json_alarm = cur_time;
  245. dlg->send_json_data(JSON_CMD_VALUE_PUSH, dlg->get_json_alarm());
  246. }
  247. // send_json_device
  248. if(cur_time - time_send_json_device_state > theApp.send_json_alarm){
  249. time_send_json_device_state = cur_time;
  250. dlg->deal_readers();
  251. dlg->send_json_data(JSON_CMD_VALUE_PUSH, dlg->get_json_device_state());
  252. }
  253. // send_json_postion
  254. if(cur_time - time_send_json_postion > theApp.send_json_postion){
  255. time_send_json_postion = cur_time;
  256. DWORD dw = ::GetTickCount();
  257. dlg->package_data();
  258. }
  259. //send help
  260. if(cur_time - time_send_help > theApp.send_json_alarm){
  261. time_send_help = cur_time;
  262. dlg->send_json_data(JSON_CMD_VALUE_PUSH,dlg->get_json_help());
  263. }
  264. // send_call_data
  265. if(cur_time - time_send_call > theApp.send_json_alarm){
  266. time_send_call = cur_time;
  267. dlg->send_call_info();
  268. //dlg->clear_call_info();
  269. }
  270. if(!dlg->is_websocket_login &&cur_time - time_ws_connect > theApp.ws_connect_interval){
  271. time_ws_connect = cur_time;
  272. if(!dlg->is_websocket_ok){
  273. dlg->ws_open();
  274. }
  275. dlg->ws_login();
  276. }
  277. WaitForMS(10);
  278. }
  279. return 0;
  280. }
  281. UINT _thread_monitor(LPVOID lparam)
  282. {
  283. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(lparam);
  284. time_t time_end = time(NULL);
  285. while (!g_exit){
  286. time_t time_current = time(NULL);
  287. // 判断采集状态, 20s没有接收到数据认为采集中断
  288. dlg->is_server_ok = (difftime(time_current, dlg->m_time_last_rec) > 20) ? false : true;
  289. dlg->set_run_state(); // 更新采集运行状态
  290. if(!IsWindow(theApp.m_hwnd_monitor)){ // 监控程序没有打开
  291. theApp.m_hwnd_monitor = NULL;
  292. //// 启动监控程序
  293. //if(strlen(theApp.m_path_monitor)<=0){
  294. // strcpy(theApp.m_path_monitor, "YAMonitor.exe");//启动同目录下的monitor
  295. //}
  296. //WinExec(theApp.m_path_monitor, SW_HIDE);
  297. }
  298. // 发送给监控程序
  299. if(theApp.m_hwnd_monitor && dlg->m_bListen){
  300. WPARAM wpSERVERSTATE=WPARAM(dlg->m_uint_state);
  301. ::PostMessage(theApp.m_hwnd_monitor, WM_ON_MONITOR, wpSERVERSTATE, LPARAM(dlg->m_hWnd));
  302. }
  303. WaitForS(10);
  304. }
  305. return 0;
  306. }
  307. BOOL CYAServerDlg::OnInitDialog()
  308. {
  309. CDialogEx::OnInitDialog();
  310. // 将“关于...”菜单项添加到系统菜单中。
  311. // IDM_ABOUTBOX 必须在系统命令范围内。
  312. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  313. ASSERT(IDM_ABOUTBOX < 0xF000);
  314. CMenu* pSysMenu = GetSystemMenu(FALSE);
  315. if (pSysMenu != NULL)
  316. {
  317. BOOL bNameValid;
  318. CString strAboutMenu;
  319. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  320. ASSERT(bNameValid);
  321. if (!strAboutMenu.IsEmpty())
  322. {
  323. pSysMenu->AppendMenu(MF_SEPARATOR);
  324. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  325. }
  326. }
  327. //加载系统配置
  328. m_bUseFilter = theApp.use_filter;
  329. if(m_bUseFilter){
  330. m_nFilterType = FILTER_KALMAN;
  331. }else{
  332. m_nFilterType = NO_FILTER;
  333. }
  334. m_log_sys_status = theApp.log_sys_status;
  335. m_log_raw_data = theApp.log_raw_data;
  336. m_log_parse_data = theApp.log_parse_data;
  337. m_log_send_package = theApp.log_send_package;
  338. m_log_recv_package = theApp.log_recv_package;
  339. m_log_locate_data = theApp.log_locate_data;
  340. m_reader_interval_time = theApp.reader_interval_time * 1.0 / 1000.0;
  341. m_nMallocTimes = 0;
  342. //初始化线程池
  343. //m_LogThreadPool.Initialize((void*)100,THREADPOOL_SIZE);
  344. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  345. // 执行此操作
  346. SetIcon(m_hIcon, TRUE); // 设置大图标
  347. SetIcon(m_hIcon, FALSE); // 设置小图标
  348. init_queuestring();
  349. init_param();
  350. init_ui();
  351. init_base_data();
  352. load_his_data();
  353. //ReceiveDateTime=COleDateTime::GetCurrentTime();
  354. theApp.set_server_handle(this->m_hWnd);
  355. theApp.load_monitor_conf();
  356. m_thread_monitor = ::AfxBeginThread(_thread_monitor, this, THREAD_PRIORITY_HIGHEST);
  357. RECT rc;
  358. GetWindowRect(&rc);
  359. rc.left=rc.right;
  360. rc.right+=250;
  361. //创建菜单
  362. m_mnMain.LoadMenu(IDR_MENUMAIN);
  363. SetMenu(&m_mnMain);
  364. CString strInfo;
  365. //// 将图标放入系统托盘
  366. //nd.cbSize = sizeof (NOTIFYICONDATA);
  367. //nd.hWnd = m_hWnd;
  368. //nd.uID = IDI_ICON;
  369. //nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  370. //nd.uCallbackMessage= WM_NOTIFYICON;
  371. //nd.hIcon = m_hIcon;
  372. //strcpy(nd.szTip, "采集应用服务器");
  373. //Shell_NotifyIcon(NIM_ADD, &nd);
  374. SetWindowText(_T("永安信通数据采集系统"));
  375. OnBnStart();
  376. time_send_json_counting = time_send_json_device_state=time_send_json_alarm=time_send_json_postion=::GetTickCount();
  377. time_sync_reader_time=time_clear_call_time=time_send_call=time_send_help=::GetTickCount();
  378. m_thread_timer = ::AfxBeginThread(_thread_timer, this, THREAD_PRIORITY_HIGHEST);
  379. UpdateData(FALSE);
  380. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  381. }
  382. void CYAServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
  383. {
  384. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  385. {
  386. CAboutDlg dlgAbout;
  387. dlgAbout.DoModal();
  388. }
  389. else
  390. {
  391. CDialogEx::OnSysCommand(nID, lParam);
  392. }
  393. }
  394. // 如果向对话框添加最小化按钮,则需要下面的代码
  395. // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  396. // 这将由框架自动完成。
  397. void CYAServerDlg::OnPaint()
  398. {
  399. if (IsIconic())
  400. {
  401. CPaintDC dc(this); // 用于绘制的设备上下文or
  402. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  403. // 使图标在工作区矩形中居中
  404. int cxIcon = GetSystemMetrics(SM_CXICON);
  405. int cyIcon = GetSystemMetrics(SM_CYICON);
  406. CRect rect;
  407. GetClientRect(&rect);
  408. int x = (rect.Width() - cxIcon + 1) / 2;
  409. int y = (rect.Height() - cyIcon + 1) / 2;
  410. // 绘制图标
  411. dc.DrawIcon(x, y, m_hIcon);
  412. }
  413. else
  414. {
  415. CDialogEx::OnPaint();
  416. }
  417. }
  418. //当用户拖动最小化窗口时系统调用此函数取得光标
  419. //显示。
  420. HCURSOR CYAServerDlg::OnQueryDragIcon()
  421. {
  422. return static_cast<HCURSOR>(m_hIcon);
  423. }
  424. /*
  425. * 点击启动按钮
  426. * 登录websocket服务器
  427. * 启动tcp server
  428. *
  429. * param
  430. * 无
  431. *
  432. * return
  433. * 无
  434. *
  435. */
  436. void CYAServerDlg::OnBnStart()
  437. {
  438. Test();
  439. if(!is_websocket_login){
  440. ws_login();
  441. }
  442. start_tcp_server();
  443. }
  444. /*
  445. * 点击停止按钮
  446. * 退出websocket服务器
  447. * 停止tcp server
  448. *
  449. * param
  450. * 无
  451. *
  452. * return
  453. * 无
  454. *
  455. */
  456. void CYAServerDlg::OnBnStop()
  457. {
  458. //if(MessageBoxEx(m_hWnd, _T("确定停止吗?"), _T("询问"), MB_ICONQUESTION|MB_OKCANCEL|MB_DEFBUTTON2,NULL) == IDCANCEL){
  459. // return;
  460. //}
  461. stop_tcp_server();
  462. if(is_websocket_login){
  463. ws_logout();
  464. is_websocket_login = false;
  465. }
  466. }
  467. LRESULT CYAServerDlg::on_monitor(WPARAM wParam, LPARAM lParam)
  468. {
  469. if(m_bListen){
  470. m_uint_state = wParam ;
  471. }
  472. if(wParam == 0xFFFF){
  473. stop_and_exit();
  474. }
  475. return S_OK;
  476. }
  477. /*
  478. * 初始化对话框ui
  479. *
  480. * param
  481. * 无
  482. *
  483. * return
  484. * 无
  485. *
  486. */
  487. void CYAServerDlg::init_ui()
  488. {
  489. set_app_state(ST_STOPPED);
  490. m_listctrl_reader.SetColumnHeader(_T("分站号,60;分站地址,120;状态,60;"));
  491. m_listctrl_reader.SetGridLines(TRUE);
  492. m_listctrl_reader.SetEditable(FALSE);
  493. m_listctrl_reader.SetSortable(FALSE);
  494. Invalidate(FALSE);
  495. }
  496. void CYAServerDlg::set_app_state( EnAppState eas )
  497. {
  498. m_enState = eas;
  499. if(this->GetSafeHwnd() == nullptr)
  500. return;
  501. m_btStart.EnableWindow(m_enState == ST_STOPPED);
  502. m_btStop.EnableWindow(m_enState == ST_STARTED);
  503. //m_Close.EnableWindow(m_enState == ST_STARTED);
  504. //m_SycnTime.EnableWindow(m_enState == ST_STARTED);
  505. //m_HistoryData.EnableWindow(m_enState == ST_STARTED);
  506. }
  507. void CYAServerDlg::init_param()
  508. {
  509. ::SetMainWnd(this);
  510. ::SetInfoList(&m_list_log);
  511. g_last_send_time = ::GetTickCount();
  512. m_time_last_rec = time(NULL);
  513. m_bListen = FALSE;
  514. m_nPort = PORT_SERVER_MASTER;
  515. m_nCountClick = 0;
  516. m_ws_url = TEST_WS_URL;
  517. time_over_count_person = time_over_count_vehicle = 0;
  518. is_server_ok = true;
  519. g_exit = false;
  520. umpRootSyncNum.swap(unordered_map<DWORD, WORD>());
  521. InitializeCriticalSection(&m_csWriteLog);
  522. InitializeCriticalSection(&m_csRefreshList);
  523. InitializeCriticalSection(&m_csRemoveSocket);
  524. InitializeCriticalSection(&m_csParseDataServer);
  525. InitializeCriticalSection(&m_csAddDist);
  526. InitializeCriticalSection(&m_csSyncTime);
  527. InitializeCriticalSection(&m_csCallInfo);
  528. //从配置中读取(regedit)
  529. load_param_from_ini();
  530. database_connect();
  531. ws_open();
  532. //UpdateData(FALSE);
  533. }
  534. void CYAServerDlg::stop_and_exit()
  535. {
  536. stop_tcp_server();
  537. //set_button_state(TRUE);
  538. ws_close();
  539. //m_listctrl_reader.DeleteAllItems();
  540. //if(m_bIsInit) //停止定时器(停止呼叫、通行侦测)
  541. // ::KillTimer(NULL, CLEAR_CALL_TIMER);
  542. //::KillTimer(NULL, CLEAR_PASS_TIMER);
  543. //{
  544. // //m_Comm.Stop(1);
  545. // //?m_Comm
  546. // ShowAppMessage("停止采集数据");
  547. // READER_EX_INFO *pCurReaderEx;
  548. // for(int i=0;i<MaxMineID;i++)
  549. // for(int j=1;j<MAXREADERCOUNT;j++)
  550. // {
  551. // pCurReaderEx=AllReaderData[j][i];
  552. // if(pCurReaderEx==NULL)//没有该分站
  553. // continue;
  554. // SaveReaderData(i,pCurReaderEx);//停止服务
  555. // }
  556. // //停止监听
  557. // m_bIsInit = FALSE;
  558. //}
  559. //if(m_bListen)
  560. //{
  561. // ClearListener();
  562. // ShowAppMessage("停止监听\n");
  563. // m_bListen=FALSE;
  564. //}
  565. g_exit = true;
  566. if(m_thread_monitor){
  567. WaitForSingleObject(m_thread_monitor->m_hThread,INFINITE);
  568. }
  569. m_thread_monitor = NULL;
  570. if(m_thread_timer){
  571. WaitForSingleObject(m_thread_timer->m_hThread, INFINITE);
  572. }
  573. m_thread_timer = NULL;
  574. DeleteCriticalSection(&m_csWriteLog);
  575. DeleteCriticalSection(&m_csParseDataServer);
  576. DeleteCriticalSection(&m_csRemoveSocket);
  577. DeleteCriticalSection(&m_csRefreshList);
  578. DeleteCriticalSection(&m_csAddDist);
  579. DeleteCriticalSection(&m_csSyncTime);
  580. DeleteCriticalSection(&m_csCallInfo);
  581. }
  582. void CYAServerDlg::set_run_state()
  583. {
  584. m_uint_state = 0;
  585. if(!is_server_ok){
  586. m_uint_state |= 0x10; // 长时间未接收到采集数据(网络故障,采集故障)
  587. }
  588. //m_uKJ133State=0;
  589. //UINT uNoClient=0x0002;
  590. //UINT uClientError=0;
  591. //for(POSITION pos = m_connectionList.GetHeadPosition(); pos != NULL;)
  592. //{
  593. // CClientSocket* pSocket = (CClientSocket*)m_connectionList.GetNext(pos);
  594. // uNoClient=0;
  595. // if(pSocket->bError)
  596. // uClientError=0x0004;
  597. //}
  598. //m_uKJ133State |= uNoClient;
  599. //m_uKJ133State |= uClientError;
  600. //m_uKJ133State |= (m_bListen?0:0x0001);
  601. //m_uKJ133State |= uReaderError;
  602. //m_uKJ133State |= iMo;//0x0010,采集数据出问题 0x0000,没问题
  603. //if(g_DisconnectDB)
  604. // m_uKJ133State |=0x0100;
  605. //UINT uDBError=0;
  606. //UINT uDisconnect=0;
  607. //COleDateTime nowTime=COleDateTime::GetCurrentTime();
  608. //COleDateTimeSpan spDateTime;
  609. //spDateTime.SetDateTimeSpan(0,1,0,0);
  610. //if(g_LastDBErrorTime + spDateTime > nowTime)
  611. // uDBError=0x0200;
  612. //if(g_LastDisconnectTime + spDateTime > nowTime)
  613. // uDisconnect=0x0400;
  614. //m_uKJ133State |= uDBError;
  615. //m_uKJ133State |= uDisconnect;
  616. }
  617. int CYAServerDlg::init_staffer(string staff_id /* = "" */, bool is_card /*= false*/ )
  618. {
  619. CMysqlConn* pConn = NULL;
  620. CDBConnGuard pDbGuard(pConn);
  621. if(pConn == NULL){
  622. return 1;
  623. }
  624. MYSQL_RES* pRes;
  625. MYSQL_ROW pRow;
  626. int err = 0;
  627. char buf[LENGTH_SQL] = {0};
  628. if(staff_id.length() == 0){
  629. sprintf_s(buf, "SELECT staff_id, s.card_id, c.card_type_id, s.name, \
  630. s.dept_id, s.group_id, s.occupation_id, \
  631. d.name as dname, g.name as gname, o.name as oname \
  632. FROM dat_staff s \
  633. LEFT JOIN dat_card c ON s.card_id = c.card_id \
  634. LEFT JOIN dat_dept d ON s.dept_id = d.dept_id \
  635. LEFT JOIN dat_group g ON s.group_id = g.group_id \
  636. LEFT JOIN dat_occupation o ON s.occupation_id = o.occupation_id \
  637. WHERE c.card_type_id = 1 and s.state = 0;");
  638. }else if(is_card){
  639. sprintf_s(buf, "SELECT staff_id, s.card_id, c.card_type_id, s.name, \
  640. s.dept_id, s.group_id, s.occupation_id, \
  641. d.name as dname, g.name as gname, o.name as oname \
  642. FROM dat_staff s \
  643. LEFT JOIN dat_card c ON s.card_id = c.card_id \
  644. LEFT JOIN dat_dept d ON s.dept_id = d.dept_id \
  645. LEFT JOIN dat_group g ON s.group_id = g.group_id \
  646. LEFT JOIN dat_occupation o ON s.occupation_id = o.occupation_id \
  647. WHERE c.card_type_id = 1 and s.state = 0 AND s.card_id = '%s';", staff_id.c_str());
  648. }else{
  649. sprintf_s(buf, "SELECT staff_id, s.card_id, c.card_type_id, s.name, \
  650. s.dept_id, s.group_id, s.occupation_id, \
  651. d.name as dname, g.name as gname, o.name as oname \
  652. FROM dat_staff s \
  653. LEFT JOIN dat_card c ON s.card_id = c.card_id \
  654. LEFT JOIN dat_dept d ON s.dept_id = d.dept_id \
  655. LEFT JOIN dat_group g ON s.group_id = g.group_id \
  656. LEFT JOIN dat_occupation o ON s.occupation_id = o.occupation_id \
  657. WHERE c.card_type_id = 1 and s.state = 0 AND staffer_id = '%s';", staff_id.c_str());
  658. }
  659. pRes = pConn->Execute(buf, err);
  660. Card* pCard = NULL;
  661. int nRow = 0;
  662. while(pRow = mysql_fetch_row(pRes)) {
  663. CardMap::iterator it = mp_card_list_all.find(pRow[1]);
  664. if(it != mp_card_list_all.end()){
  665. pCard = it->second;
  666. }else{
  667. pCard = new Card(pRow[1], atoi(pRow[2]), theApp.z_offset);
  668. #ifdef ALGORITHM_TYPE_TOF
  669. pCard->set_reader_path(&mp_reader_path_list);
  670. #elif defined ALGORITHM_TYPE_TDOA
  671. pCard->set_reader_path(&mp_reader_path_list_tdoa);
  672. #endif
  673. mp_card_list_all.insert(make_pair(pCard->card_id, pCard));
  674. }
  675. nRow++;
  676. pCard->id = pRow[0];
  677. pCard->name = pRow[3];
  678. pCard->dept_id = atoi(pRow[4]);
  679. pCard->group_id = atoi(pRow[5]);
  680. pCard->department = (pRow[7] == NULL?"":pRow[7]);
  681. pCard->group = pRow[8];
  682. pCard->occupation = pRow[9];
  683. if(m_bUseFilter){
  684. if(theApp.use_filter_odd){
  685. std::string temp = pRow[1];
  686. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  687. if(0 == a%2){
  688. pCard->EnableFilter(m_nFilterType);
  689. }
  690. }else{
  691. pCard->EnableFilter(m_nFilterType);
  692. }
  693. }
  694. }
  695. mysql_free_result(pRes);
  696. CString strlog;
  697. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_STAFF), nRow, _T(LOG_RECORD_COUNT));
  698. show_log(strlog);
  699. return 0;
  700. }
  701. /*
  702. * 初始化所有车卡信息
  703. *
  704. * param
  705. * vehicle_id ------ 车卡id
  706. * is_card ------ 是否是卡
  707. *
  708. * return
  709. * 成功返回0,失败返回1
  710. *
  711. */
  712. int CYAServerDlg::init_vehicle(string vehicle_id /* = "" */, bool is_card /*= false*/)
  713. {
  714. CMysqlConn* pConn = NULL;
  715. CDBConnGuard pDbGuard(pConn);
  716. if(pConn == NULL){
  717. return 1;
  718. }
  719. MYSQL_RES* pRes;
  720. MYSQL_ROW pRow;
  721. int err = 0;
  722. char buf[LENGTH_SQL] = {0};
  723. if(vehicle_id.length() == 0){
  724. sprintf_s(buf, "SELECT vehicle_id, v.card_id, c.card_type_id, v.name, v.number, \
  725. v.dept_id, v.group_id, v.vehicle_type_id, \
  726. d.name as dname, g.name as gname, vt.name as vtname \
  727. FROM dat_vehicle v \
  728. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  729. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  730. LEFT JOIN dat_group g ON v.group_id = g.group_id \
  731. LEFT JOIN dat_vehicle_type vt ON v.vehicle_type_id = vt.vehicle_type_id \
  732. WHERE c.card_type_id = 2 and v.state = 0;");
  733. }else if(is_card){
  734. sprintf_s(buf, "SELECT vehicle_id, v.card_id, c.card_type_id, v.name, v.number, \
  735. v.dept_id, v.group_id, v.vehicle_type_id, \
  736. d.name as dname, g.name as gname, vt.name as vtname \
  737. FROM dat_vehicle v \
  738. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  739. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  740. LEFT JOIN dat_group g ON v.group_id = g.group_id \
  741. LEFT JOIN dat_vehicle_type vt ON v.vehicle_type_id = vt.vehicle_type_id \
  742. WHERE c.card_type_id = 2 and v.state = 0 AND v.card_id ='%s';", vehicle_id.c_str());
  743. }else{
  744. sprintf_s(buf, "SELECT vehicle_id, v.card_id, c.card_type_id, v.name, v.number, \
  745. v.dept_id, v.group_id, v.vehicle_type_id, \
  746. d.name as dname, g.name as gname, vt.name as vtname \
  747. FROM dat_vehicle v \
  748. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  749. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  750. LEFT JOIN dat_group g ON v.group_id = g.group_id \
  751. LEFT JOIN dat_vehicle_type vt ON v.vehicle_type_id = vt.vehicle_type_id \
  752. WHERE c.card_type_id = 2 and v.state = 0 AND vehicle_id='%s';", vehicle_id.c_str());
  753. }
  754. pRes = pConn->Execute(buf, err);
  755. Card* pCard = NULL;
  756. int nRow = 0;
  757. while(pRow = mysql_fetch_row(pRes)){
  758. CardMap::iterator it = mp_card_list_all.find(pRow[1]);
  759. if(it != mp_card_list_all.end()){
  760. pCard = it->second;
  761. }else{
  762. pCard = new Card(pRow[1], atoi(pRow[2]), theApp.z_offset);
  763. #ifdef ALGORITHM_TYPE_TOF
  764. pCard->set_reader_path(&mp_reader_path_list);
  765. #elif defined ALGORITHM_TYPE_TDOA
  766. pCard->set_reader_path(&mp_reader_path_list_tdoa);
  767. #endif
  768. mp_card_list_all.insert(make_pair(pCard->card_id, pCard));
  769. //return 1;
  770. }
  771. nRow++;
  772. pCard->id = (pRow[0] == NULL) ? "" : pRow[0];
  773. pCard->name = (pRow[3] == NULL) ? "" : pRow[3];
  774. pCard->number = (pRow[4] == NULL) ? "" : pRow[4];
  775. pCard->dept_id = atoi(pRow[5]);
  776. pCard->group_id = atoi(pRow[6]);
  777. pCard->department = (pRow[8] == NULL) ? "" : pRow[8];
  778. pCard->group = (pRow[9] == NULL) ? "" : pRow[9];
  779. pCard->worktype = (pRow[10] == NULL) ? "" : pRow[10];
  780. if(m_bUseFilter){
  781. if(theApp.use_filter_odd){
  782. std::string temp = pRow[1];
  783. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  784. if(0 == a%2){
  785. pCard->EnableFilter(m_nFilterType);
  786. }
  787. }else{
  788. pCard->EnableFilter(m_nFilterType);
  789. }
  790. }
  791. }
  792. mysql_free_result(pRes);
  793. CString strlog;
  794. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_VEHICLE), nRow, _T(LOG_RECORD_COUNT));
  795. show_log(strlog);
  796. return 0;
  797. }
  798. /*
  799. * 初始化所有车卡信息
  800. *
  801. * param
  802. * vehicle_id ------ 车卡id
  803. * is_card ------ 是否是卡
  804. *
  805. * return
  806. * 成功返回0,失败返回1
  807. *
  808. */
  809. int CYAServerDlg::init_adhoc(string adhoc_id /*= ""*/,bool is_card /*= false*/)
  810. {
  811. CMysqlConn* pConn = NULL;
  812. CDBConnGuard pDbGuard(pConn);
  813. if(pConn == NULL){
  814. return 1;
  815. }
  816. MYSQL_ROW pRow;
  817. MYSQL_RES *pRes = NULL;
  818. int err = 0;
  819. char strsql[LENGTH_SQL] = {0};
  820. if(adhoc_id == ""){
  821. sprintf_s(strsql,"select adhoc_id,name,card_id from dat_adhoc where state==0");
  822. }else{
  823. sprintf_s(strsql,"select adhoc_id,name,card_id from dat_adhoc where state==0 and adhoc_id =='%s'",adhoc_id);
  824. }
  825. return 0;
  826. }
  827. int CYAServerDlg::init_map(int map_id /*= 0*/)
  828. {
  829. CMysqlConn* pConn = NULL;
  830. CDBConnGuard pDbGuard(pConn);
  831. if(pConn == NULL){
  832. return 1;
  833. }
  834. MYSQL_ROW pRow;
  835. MYSQL_RES *pRes = NULL;
  836. int err = 0;
  837. char strsql[LENGTH_SQL] = {0};
  838. if(map_id == 0){
  839. sprintf_s(strsql, "SELECT map_id, name, scale FROM dat_map;");
  840. }else{
  841. sprintf_s(strsql, "SELECT map_id, name, scale FROM dat_map WHERE map_id = %d; ", map_id);
  842. }
  843. pRes = pConn->Execute(strsql, err);
  844. MapInfo* pMap = NULL;
  845. int nRow = 0;
  846. while(pRow = mysql_fetch_row(pRes)){
  847. MapInfoMap::iterator it = mp_map_list.find(atoi(pRow[0]));
  848. if(it != mp_map_list.end()){
  849. pMap = it->second;
  850. }else{
  851. pMap = new MapInfo();
  852. pMap->map_id = atoi(pRow[0]);
  853. mp_map_list.insert(make_pair(pMap->map_id, pMap));
  854. nRow++;
  855. }
  856. pMap->map_name = pRow[1];
  857. pMap->map_scale = atof(pRow[2]);
  858. }
  859. mysql_free_result(pRes);
  860. CString strlog;
  861. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_MAP), nRow, _T(LOG_RECORD_COUNT));
  862. show_log(strlog);
  863. return 0;
  864. }
  865. int CYAServerDlg::init_area(int area_id /* = 0 */)
  866. {
  867. CMysqlConn* pConn = NULL;
  868. CDBConnGuard pDbGuard(pConn);
  869. if(pConn == NULL){
  870. return 1;
  871. }
  872. MYSQL_ROW pRow;
  873. MYSQL_RES *pRes = NULL;
  874. int err = 0;
  875. char strsql[LENGTH_SQL] = {0};
  876. if(area_id == 0){
  877. sprintf_s(strsql, "SELECT area_id, name, map_id, area_type_id, path, \
  878. over_count_person, over_count_vehicle, over_time_person, over_time_vehicle, is_attendance \
  879. FROM dat_area;");
  880. }else{
  881. sprintf_s(strsql, "SELECT area_id, name, map_id, area_type_id, path, \
  882. over_count_person, over_count_vehicle, over_time_person, over_time_vehicle, is_attendance \
  883. FROM dat_area WHERE area_id = %d; ", area_id);
  884. }
  885. pRes = pConn->Execute(strsql, err);
  886. Area* pArea = NULL;
  887. int nRow = 0;
  888. while(pRow = mysql_fetch_row(pRes)){
  889. AreaMap::iterator it = mp_area_list.find(atoi(pRow[0]));
  890. if(it != mp_area_list.end()){
  891. pArea = it->second;
  892. }else{
  893. pArea = new Area();
  894. pArea->area_id = atoi(pRow[0]);
  895. mp_area_list.insert(make_pair(pArea->area_id, pArea));
  896. nRow++;
  897. }
  898. pArea->map_id = atoi(pRow[2]);
  899. MapInfoMap::iterator map_it = mp_map_list.find(pArea->map_id);
  900. if(map_it != mp_map_list.end()){
  901. AreaMap::iterator area_it = map_it->second->map_area_list.find(pArea->area_id);
  902. if(area_it == map_it->second->map_area_list.end()){
  903. map_it->second->map_area_list.insert(make_pair(pArea->area_id, pArea));
  904. }
  905. }
  906. pArea->area_name = pRow[1];
  907. pArea->area_type_id = atoi(pRow[3]);
  908. pArea->path = pRow[4]; // 多边形
  909. pArea->over_count_person = atoi(pRow[5]);
  910. pArea->over_count_vehicle = atoi(pRow[6]);
  911. pArea->over_time_person = atoi(pRow[7]);
  912. pArea->under_time_vehicle = atoi(pRow[8]);
  913. pArea->is_att = atoi(pRow[9]);
  914. pArea->init_border(pRow[4]);
  915. //pArea->x1 = atof(pRow[8]);
  916. //pArea->y1 = atof(pRow[9]);
  917. //pArea->z1 = atof(pRow[10]);
  918. //pArea->sr = atof(pRow[11]);
  919. }
  920. mysql_free_result(pRes);
  921. CString strlog;
  922. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_AREA), nRow, _T(LOG_RECORD_COUNT));
  923. show_log(strlog);
  924. return 0;
  925. }
  926. int CYAServerDlg::init_reader(int reader_id /* = 0 */)
  927. {
  928. // 从数据库中读取
  929. CMysqlConn* pConn = NULL;
  930. CDBConnGuard pDbGuard(pConn);
  931. if(pConn == NULL){
  932. return 1;
  933. }
  934. MYSQL_ROW pRow;
  935. MYSQL_RES *pRes = NULL;
  936. int err = 0;
  937. char strsql[LENGTH_SQL] = {0};
  938. if(reader_id == 0){
  939. sprintf_s(strsql, "SELECT reader_id, map_id, area_id, name, x, y, z, angle, \
  940. state, ip, device_type_id, reader_type_id,isSpecial \
  941. FROM dat_reader WHERE state=0;");
  942. }else{
  943. sprintf_s(strsql, "SELECT reader_id, map_id, area_id, name, x, y, z, angle, \
  944. state, ip, device_type_id, reader_type_id,isSpecial \
  945. FROM dat_reader WHERE state=0 AND reader_id = %d; ", reader_id);
  946. }
  947. pRes = pConn->Execute(strsql, err);
  948. Reader* pReader = NULL;
  949. int nRow = 0;
  950. while(pRow = mysql_fetch_row(pRes)) {
  951. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[0]));
  952. if(it != mp_reader_list.end()){
  953. pReader = it->second;
  954. }else{
  955. pReader = new Reader();
  956. pReader->reader_interval_time = m_reader_interval_time;
  957. pReader->reader_id = atoi(pRow[0]);
  958. mp_reader_list.insert(make_pair(pReader->reader_id, pReader));
  959. nRow++;
  960. }
  961. pReader->map_id = atoi(pRow[1]);
  962. MapInfoMap::iterator map_it = mp_map_list.find(pReader->map_id);
  963. if(map_it != mp_map_list.end()){
  964. ReaderMap::iterator reader_it = map_it->second->map_reader_list.find(pReader->reader_id);
  965. if(reader_it == map_it->second->map_reader_list.end()){
  966. map_it->second->map_reader_list.insert(make_pair(pReader->reader_id, pReader));
  967. }
  968. pReader->map_scale = map_it->second->map_scale;
  969. }
  970. pReader->area_id = atoi(pRow[2]);
  971. pReader->reader_name = pRow[3];
  972. pReader->reader_x = atof(pRow[4]);
  973. pReader->reader_y = atof(pRow[5]);
  974. pReader->reader_z = atof(pRow[6]);
  975. pReader->reader_angle = atof(pRow[7]) * M_PI /180;
  976. pReader->ip = pRow[9];
  977. pReader->device_type_id = atoi(pRow[10]);
  978. pReader->pos_state = atoi(pRow[11]);
  979. pReader->m_nIsSpecial = atoi(pRow[12]);
  980. }
  981. mysql_free_result(pRes);
  982. CString strlog;
  983. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_READER), nRow, _T(LOG_RECORD_COUNT));
  984. show_log(strlog);
  985. return 0;
  986. }
  987. int CYAServerDlg::init_antenna(int reader_id /* = 0 */)
  988. {
  989. CMysqlConn* pConn = NULL;
  990. CDBConnGuard pDbGuard(pConn);
  991. if(pConn == NULL){
  992. return 1;
  993. }
  994. MYSQL_ROW pRow;
  995. MYSQL_RES *pRes = NULL;
  996. int err = 0;
  997. char strsql[LENGTH_SQL] = {0};
  998. if(reader_id == 0){
  999. sprintf_s(strsql, "SELECT antenna_id, a.reader_id, reader_idx, a.x, a.y, a.z, a.angle \
  1000. FROM dat_antenna a, dat_reader r \
  1001. WHERE a.reader_id = r.reader_id;");
  1002. }else{
  1003. sprintf_s(strsql, "SELECT antenna_id, a.reader_id, reader_idx, a.x, a.y, a.z, a.angle \
  1004. FROM dat_antenna a, dat_reader r \
  1005. WHERE a.reader_id = r.reader_id AND reader_id = %d; ", reader_id);
  1006. }
  1007. pRes = pConn->Execute(strsql,err);
  1008. int nRow = 0;
  1009. while(pRow = mysql_fetch_row(pRes)){
  1010. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[1]));
  1011. if(it != mp_reader_list.end()){
  1012. Antenna* ant = new Antenna();
  1013. ant->antenna_id = atoi(pRow[0]);
  1014. ant->antenna_x = atof(pRow[3]);
  1015. ant->antenna_y = atof(pRow[4]);
  1016. ant->antenna_z = atof(pRow[5]);
  1017. ant->antenna_angle = atof(pRow[6]) * M_PI / 180.0;
  1018. int idx = (atoi(pRow[2]) == 1) ? 0 : 1;
  1019. it->second->ant[idx] = ant;
  1020. nRow++;
  1021. }
  1022. }
  1023. mysql_free_result(pRes);
  1024. CString strlog;
  1025. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_ANTENNA), nRow, _T(LOG_RECORD_COUNT));
  1026. show_log(strlog);
  1027. return 0;
  1028. }
  1029. int CYAServerDlg::init_dev_adhoc( int reader_id /*= 0*/ )
  1030. {
  1031. CMysqlConn* pConn = NULL;
  1032. CDBConnGuard pDbGuard(pConn);
  1033. if(pConn == NULL){
  1034. return 1;
  1035. }
  1036. MYSQL_ROW pRow;
  1037. MYSQL_RES *pRes = NULL;
  1038. int err = 0;
  1039. char strsql[LENGTH_SQL] = {0};
  1040. if(reader_id == 0){//dat_dev_adhoc
  1041. sprintf_s(strsql, "select ad.adhoc_id, ad.reader_id, ad.idx, ad.x, ad.y, ad.z from dat_adhoc ad, dat_reader r \
  1042. where ad.reader_id = r.reader_id;");
  1043. }else{
  1044. sprintf_s(strsql, "select ad.adhoc_id, ad.reader_id, ad.idx, ad.x, ad.y, ad.z from dat_adhoc ad, dat_reader r \
  1045. where ad.reader_id = r.reader_id and ad.reader_id = %d; ", reader_id);
  1046. }
  1047. pRes = pConn->Execute(strsql,err);
  1048. int nRow = 0;
  1049. int idx = 0;
  1050. while(pRow = mysql_fetch_row(pRes)){
  1051. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[1]));
  1052. if(it != mp_reader_list.end()){
  1053. Adhoc* adhoc = new Adhoc();
  1054. adhoc->adhoc_id = atoi(pRow[0]);
  1055. adhoc->idx = atoi(pRow[2]);
  1056. adhoc->x = atof(pRow[3]);
  1057. adhoc->y = atof(pRow[4]);
  1058. adhoc->z = atof(pRow[5]);
  1059. idx = (adhoc->idx < ADHOC_COUNT)?adhoc->idx:0;
  1060. it->second->adhoc[idx] = adhoc;
  1061. nRow++;
  1062. }
  1063. }
  1064. mysql_free_result(pRes);
  1065. CString strlog;
  1066. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_ADHOC), nRow, _T(LOG_RECORD_COUNT));
  1067. show_log(strlog);
  1068. return 0;
  1069. }
  1070. /*
  1071. * 函数名:init_all_readers_coverage
  1072. * 从数据库的dat_reader_path表中读取指定map_id和reader_id的地图范围集,
  1073. * 将此分站的地图范围集保存在分站类中的readerCoverage中;
  1074. * 如果指定了相同的地图范围集的reader_id,则直接将指定的reader_id的地图范围集赋值给此reader_id的地图范围集
  1075. * 然后将地图集赋值给station
  1076. *
  1077. *
  1078. * @param
  1079. * reader_id 分站id号
  1080. *
  1081. * @return
  1082. * -1,表示在分站map中未找到此分站信息或者未正常执行;0,表示正常执行
  1083. *
  1084. */
  1085. int CYAServerDlg::init_all_readers_coverage(int reader_id)
  1086. {
  1087. CMysqlConn* pConn = NULL;
  1088. CDBConnGuard pDbGuard(pConn);
  1089. //如果无可用数据库连接,不执行后续操作
  1090. if(pConn == NULL){
  1091. return 1;
  1092. }
  1093. char sql[LENGTH_SQL] = {0};
  1094. if(reader_id == 0){
  1095. sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = r.reader_id;");
  1096. }else{
  1097. sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = %d; ", reader_id);
  1098. }
  1099. MYSQL_RES* pRes = NULL;
  1100. MYSQL_ROW pRow;
  1101. int err = 0;
  1102. int nRow = 0;
  1103. //查询数据库
  1104. pRes = pConn->Execute(sql,err);
  1105. //从数据库获得信息赋给分站对象的地图集
  1106. while(pRow = mysql_fetch_row(pRes)){
  1107. int nReaderId = atoi(pRow[1]);
  1108. ReaderMap::iterator it = mp_reader_list.find(nReaderId);
  1109. int nSameConfigReader = atoi(pRow[0]);
  1110. int nIdx = atoi(pRow[2]);
  1111. //判断地图集信息是否可利用其它分站的覆盖范围,如果可用,则使用其它分站的覆盖范围
  1112. //-1表示不可用,否则表示可复用分站id号为nSameConfigReader的地图集覆盖范围
  1113. if(nSameConfigReader == -1){
  1114. _point p;
  1115. p.x = atof(pRow[3]);
  1116. p.y = atof(pRow[4]);
  1117. p.z = atof(pRow[5]);
  1118. it->second->readerCoveragePath.insert(make_pair(nIdx,p));
  1119. it->second->bIsInitCoverage = true;
  1120. nRow++;
  1121. }else{
  1122. it->second->readerCoveragePath = mp_reader_list.find(nSameConfigReader)->second->readerCoveragePath;
  1123. it->second->bIsInitCoverage = true;
  1124. nRow++;
  1125. }
  1126. }
  1127. mysql_free_result(pRes);
  1128. //输出操作数据库的日志信息
  1129. CString strlog;
  1130. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_READER_PATH), nRow, _T(LOG_RECORD_COUNT));
  1131. show_log(strlog);
  1132. //根据获得地图集将其赋给mp_reader_path_list
  1133. ReaderMap::iterator it = mp_reader_list.begin();
  1134. for(it;it!=mp_reader_list.end();it++){
  1135. if(it->second->bIsInitCoverage){
  1136. int nReaderId = it->second->reader_id - 1;
  1137. double dMapScale = mp_map_list.find(it->second->map_id)->second->map_scale;
  1138. ReaderPath* pReaderPath = NULL;
  1139. ReaderPathMap::iterator prpIt = mp_reader_path_list.find(nReaderId);
  1140. if(prpIt != mp_reader_path_list.end()){
  1141. pReaderPath = prpIt->second;
  1142. }else{
  1143. pReaderPath = new ReaderPath();
  1144. mp_reader_path_list.insert(make_pair(nReaderId,pReaderPath));
  1145. }
  1146. pReaderPath->nRealCalcPoints = it->second->readerCoveragePath.size();
  1147. for(int i=0;i<2;i++){
  1148. pReaderPath->x[i] = it->second->ant[i]->antenna_x*dMapScale;
  1149. pReaderPath->y[i] = it->second->ant[i]->antenna_y*dMapScale;
  1150. pReaderPath->z[i] = it->second->ant[i]->antenna_z*dMapScale;
  1151. }
  1152. for(size_t j = 1;j <= it->second->readerCoveragePath.size(); j++){
  1153. pReaderPath->px[j - 1] = it->second->readerCoveragePath.find(j)->second.x*dMapScale;
  1154. pReaderPath->py[j - 1] = it->second->readerCoveragePath.find(j)->second.y*dMapScale;
  1155. pReaderPath->pz[j - 1] = it->second->readerCoveragePath.find(j)->second.z*dMapScale;
  1156. }
  1157. }
  1158. }
  1159. return 0;
  1160. }
  1161. /*
  1162. * 函数名:init_tdoa_all_readers_coverage
  1163. * 实现初始化TDOA方式的地图集描述,并存储冗余数据
  1164. * 冗余数据的主要作用在于:例如存在分站<B1,B2>之间的地图集描述,那么也存在<B2,B1>的对应关系
  1165. *
  1166. * param
  1167. * reader_id ------ 分站id号
  1168. *
  1169. * return
  1170. * 如果执行失败返回-1
  1171. * 正确执行,返回0
  1172. *
  1173. */
  1174. //int CYAServerDlg::init_tdoa_all_readers_coverage(int reader_id)
  1175. //{
  1176. // CMysqlConn* pConn = NULL;
  1177. // CDBConnGuard pDbGuard(pConn);
  1178. //
  1179. // //无可用数据库连接
  1180. // if(pConn == NULL){
  1181. // return 1;
  1182. // }
  1183. //
  1184. // char sql[LENGTH_SQL] = {0};
  1185. // if(reader_id == 0){
  1186. // //dat_reader_path_tdoa_bjd1
  1187. // //dat_reader_path_tdoa
  1188. // sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = r.reader_id;");
  1189. // }else{
  1190. // sprintf_s(sql, "select start_reader_id,end_reader_id,idx,x,y,z,is_bezier from dat_reader_path_tdoa where p.start_reader_id =%d; ", reader_id);
  1191. // }
  1192. //
  1193. // MYSQL_RES* pRes = NULL;
  1194. // MYSQL_ROW pRow;
  1195. // int err = 0;
  1196. // int nRow = 0;
  1197. //
  1198. // //查询数据库
  1199. // pRes = pConn->Execute(sql,err);
  1200. //
  1201. // double mapScale = 0.0;
  1202. // while(pRow = mysql_fetch_row(pRes)){
  1203. // int start_reader_id = atoi(pRow[0]);
  1204. // int end_reader_id = atoi(pRow[1]);
  1205. // int ndx = atoi(pRow[2]);
  1206. //
  1207. // //后缀_r都为冗余信息
  1208. // ReaderPath* prp = NULL;
  1209. // ReaderPath* prp_r = NULL;
  1210. //
  1211. // TDOAReaderPathMap::iterator it = mp_reader_path_list_tdoa.find(start_reader_id);
  1212. //
  1213. // if(it == mp_reader_path_list_tdoa.end()){
  1214. // ReaderPathMap* prpm = new ReaderPathMap();
  1215. // ReaderPath* prp1 = new ReaderPath();
  1216. // //prp1->nRealCalcPoints++;
  1217. // prpm->insert(make_pair(end_reader_id,prp1));
  1218. // mp_reader_path_list_tdoa.insert(make_pair(start_reader_id,prpm));
  1219. //
  1220. // //冗余数据
  1221. // ReaderPathMap* prpm_r = new ReaderPathMap();
  1222. // ReaderPath* prp1_r = new ReaderPath();
  1223. // //prp1_r->nRealCalcPoints++;
  1224. // prpm_r->insert(make_pair(start_reader_id,prp1_r));
  1225. // mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm_r));
  1226. // }else{
  1227. // ReaderPathMap::iterator it2;
  1228. // it2 = it->second->find(end_reader_id);
  1229. // if(it2 == it->second->end()){
  1230. // ReaderPath* prp1 = new ReaderPath();
  1231. // //prp1->nRealCalcPoints++;
  1232. // it->second->insert(make_pair(end_reader_id,prp1));
  1233. //
  1234. // //冗余数据
  1235. // ReaderPathMap* prpm_r = new ReaderPathMap();
  1236. // ReaderPath* prp1_r = new ReaderPath();
  1237. // //prp1_r->nRealCalcPoints++;
  1238. // prpm_r->insert(make_pair(start_reader_id,prp1_r));
  1239. // mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm_r));
  1240. // }
  1241. // }
  1242. //
  1243. // ReaderPathMap::iterator it_rpm = mp_reader_path_list_tdoa.find(start_reader_id)->second->find(end_reader_id);
  1244. // if(it_rpm!=mp_reader_path_list_tdoa.find(start_reader_id)->second->end()){
  1245. // prp = it_rpm->second;
  1246. // }else{
  1247. // prp = new ReaderPath();
  1248. // mp_reader_path_list_tdoa.find(start_reader_id)->second->insert(make_pair(end_reader_id,prp));
  1249. // }
  1250. //
  1251. // //冗余信息
  1252. // ReaderPathMap::iterator it_rpm_r = mp_reader_path_list_tdoa.find(end_reader_id)->second->find(start_reader_id);
  1253. // if(it_rpm_r!=mp_reader_path_list_tdoa.find(end_reader_id)->second->end()){
  1254. // prp_r = it_rpm_r->second;
  1255. // }else{
  1256. // prp_r = new ReaderPath();
  1257. // mp_reader_path_list_tdoa.find(end_reader_id)->second->insert(make_pair(start_reader_id,prp));
  1258. // }
  1259. //
  1260. // //获得地图比例
  1261. // int map_id = mp_reader_list.find(start_reader_id)->second->map_id;
  1262. // MapInfoMap::iterator mit = mp_map_list.find(map_id);
  1263. // if(mit == mp_map_list.end()){
  1264. // //没有相关地图信息,要输出错误日志
  1265. // AfxMessageBox(_T("分站所在地图不存在!"));
  1266. // break;
  1267. // }
  1268. // mapScale = mp_map_list.find(map_id)->second->map_scale;
  1269. //
  1270. // if(prp->nRealCalcPoints < ndx){
  1271. // prp->nRealCalcPoints = ndx;
  1272. // }
  1273. // if(prp_r->nRealCalcPoints < ndx){
  1274. // prp_r->nRealCalcPoints = ndx;
  1275. // }
  1276. //
  1277. // if(!prp->bIsInit){
  1278. // //获得分站坐标,其中索引0表示起始分站坐标,索引1表示结束分站坐标
  1279. // prp->x[0] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1280. // prp->y[0] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1281. // prp->z[0] = 0;
  1282. // prp->x[1] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1283. // prp->y[1] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1284. // prp->z[1] = 0;
  1285. // prp->px[ndx-1] = atof(pRow[3])*mapScale;
  1286. // prp->py[ndx-1] = atof(pRow[4])*mapScale;
  1287. // prp->bIsInit = true;
  1288. // }
  1289. //
  1290. // if(!prp_r->bIsInit){
  1291. // //冗余信息
  1292. // prp_r->x[0] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1293. // prp_r->y[0] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1294. // prp_r->z[0] = 0;
  1295. // prp_r->x[1] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1296. // prp_r->y[1] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1297. // prp_r->z[1] = 0;
  1298. // prp_r->px[ndx-1] = atof(pRow[3])*mapScale;
  1299. // prp_r->py[ndx-1] = atof(pRow[4])*mapScale;
  1300. // prp->bIsInit = true;
  1301. // }
  1302. //
  1303. // //prp_r->nRealCalcPoints++;
  1304. // }
  1305. // mysql_free_result(pRes);
  1306. //
  1307. // //输出操作结果信息
  1308. // CString strlog;
  1309. // strlog.Format(_T("%s%d%s"), _T(LOG_INIT_MAP_PATH), nRow, _T(LOG_RECORD_COUNT));
  1310. // show_log(strlog);
  1311. //
  1312. // return 0;
  1313. //}
  1314. int CYAServerDlg::init_tdoa_all_readers_coverage(int reader_id)
  1315. {
  1316. CMysqlConn* pConn = NULL;
  1317. CDBConnGuard pDbGuard(pConn);
  1318. //无可用数据库连接
  1319. if(pConn == NULL){
  1320. return 1;
  1321. }
  1322. char sql[LENGTH_SQL] = {0};
  1323. if(reader_id == 0){
  1324. //dat_reader_path_tdoa_bjd1
  1325. //dat_reader_path_tdoa
  1326. sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = r.reader_id;");
  1327. }else{
  1328. sprintf_s(sql, "select start_reader_id,end_reader_id,idx,x,y,z,is_bezier from dat_reader_path_tdoa where p.start_reader_id =%d; ", reader_id);
  1329. }
  1330. MYSQL_RES* pRes = NULL;
  1331. MYSQL_ROW pRow;
  1332. int err = 0;
  1333. int nRow = 0;
  1334. //查询数据库
  1335. pRes = pConn->Execute(sql,err);
  1336. double mapScale = 0.0;
  1337. while(pRow = mysql_fetch_row(pRes)){
  1338. int start_reader_id = atoi(pRow[0]);
  1339. int end_reader_id = atoi(pRow[1]);
  1340. int ndx = atoi(pRow[2]);
  1341. //后缀_r都为冗余信息
  1342. ReaderPath* prp = NULL;
  1343. ReaderPath* prp_r = NULL;
  1344. TDOAReaderPathMap::iterator it = mp_reader_path_list_tdoa.find(start_reader_id);
  1345. if(it == mp_reader_path_list_tdoa.end()){
  1346. ReaderPathMap* prpm = new ReaderPathMap();
  1347. ReaderPath* prp1 = new ReaderPath();
  1348. //prp1->nRealCalcPoints++;
  1349. prpm->insert(make_pair(end_reader_id,prp1));
  1350. mp_reader_path_list_tdoa.insert(make_pair(start_reader_id,prpm));
  1351. //冗余数据
  1352. ReaderPathMap* prpm_r = new ReaderPathMap();
  1353. ReaderPath* prp1_r = new ReaderPath();
  1354. //prp1_r->nRealCalcPoints++;
  1355. prpm_r->insert(make_pair(start_reader_id,prp1_r));
  1356. mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm_r));
  1357. }else{
  1358. ReaderPathMap::iterator it2;
  1359. it2 = it->second->find(end_reader_id);
  1360. if(it2 == it->second->end()){
  1361. ReaderPath* prp1 = new ReaderPath();
  1362. //prp1->nRealCalcPoints++;
  1363. it->second->insert(make_pair(end_reader_id,prp1));
  1364. }
  1365. }
  1366. TDOAReaderPathMap::iterator it_r = mp_reader_path_list_tdoa.find(end_reader_id);
  1367. if(it_r == mp_reader_path_list_tdoa.end()){
  1368. ReaderPathMap* prpm = new ReaderPathMap();
  1369. ReaderPath* prp1 = new ReaderPath();
  1370. //prp1->nRealCalcPoints++;
  1371. prpm->insert(make_pair(start_reader_id,prp1));
  1372. mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm));
  1373. }else{
  1374. ReaderPathMap::iterator it2;
  1375. it2 = it_r->second->find(start_reader_id);
  1376. if(it2 == it_r->second->end()){
  1377. ReaderPath* prp1 = new ReaderPath();
  1378. //prp1->nRealCalcPoints++;
  1379. it_r->second->insert(make_pair(start_reader_id,prp1));
  1380. }
  1381. }
  1382. ReaderPathMap::iterator it_rpm = mp_reader_path_list_tdoa.find(start_reader_id)->second->find(end_reader_id);
  1383. if(it_rpm!=mp_reader_path_list_tdoa.find(start_reader_id)->second->end()){
  1384. prp = it_rpm->second;
  1385. }else{
  1386. prp = new ReaderPath();
  1387. mp_reader_path_list_tdoa.find(start_reader_id)->second->insert(make_pair(end_reader_id,prp));
  1388. }
  1389. //冗余信息
  1390. ReaderPathMap::iterator it_rpm_r = mp_reader_path_list_tdoa.find(end_reader_id)->second->find(start_reader_id);
  1391. if(it_rpm_r!=mp_reader_path_list_tdoa.find(end_reader_id)->second->end()){
  1392. prp_r = it_rpm_r->second;
  1393. }else{
  1394. prp_r = new ReaderPath();
  1395. mp_reader_path_list_tdoa.find(end_reader_id)->second->insert(make_pair(start_reader_id,prp));
  1396. }
  1397. //获得地图比例
  1398. int map_id = mp_reader_list.find(start_reader_id)->second->map_id;
  1399. MapInfoMap::iterator mit = mp_map_list.find(map_id);
  1400. if(mit == mp_map_list.end()){
  1401. //没有相关地图信息,要输出错误日志
  1402. AfxMessageBox(_T("分站所在地图不存在!"));
  1403. break;
  1404. }
  1405. mapScale = mp_map_list.find(map_id)->second->map_scale;
  1406. if(prp->nRealCalcPoints < ndx){
  1407. prp->nRealCalcPoints = ndx;
  1408. }
  1409. if(prp_r->nRealCalcPoints < ndx){
  1410. prp_r->nRealCalcPoints = ndx;
  1411. }
  1412. if(!prp->bIsInit){
  1413. //获得分站坐标,其中索引0表示起始分站坐标,索引1表示结束分站坐标
  1414. prp->x[0] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1415. prp->y[0] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1416. prp->z[0] = 0;
  1417. prp->x[1] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1418. prp->y[1] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1419. prp->z[1] = 0;
  1420. prp->bIsInit = true;
  1421. }
  1422. prp->px[ndx-1] = atof(pRow[3])*mapScale;
  1423. prp->py[ndx-1] = atof(pRow[4])*mapScale;
  1424. if(!prp_r->bIsInit){
  1425. //冗余信息
  1426. prp_r->x[0] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1427. prp_r->y[0] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1428. prp_r->z[0] = 0;
  1429. prp_r->x[1] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1430. prp_r->y[1] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1431. prp_r->z[1] = 0;
  1432. prp_r->bIsInit = true;
  1433. }
  1434. prp_r->px[ndx-1] = atof(pRow[3])*mapScale;
  1435. prp_r->py[ndx-1] = atof(pRow[4])*mapScale;
  1436. //prp_r->nRealCalcPoints++;
  1437. }
  1438. mysql_free_result(pRes);
  1439. //输出操作结果信息
  1440. CString strlog;
  1441. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_MAP_PATH), nRow, _T(LOG_RECORD_COUNT));
  1442. show_log(strlog);
  1443. return 0;
  1444. }
  1445. void CYAServerDlg::ws_init()
  1446. {
  1447. is_websocket_ok = false;
  1448. is_websocket_login = false;
  1449. _io->set_reconnect_attempts(3);
  1450. using std::placeholders::_1;
  1451. using std::placeholders::_2;
  1452. using std::placeholders::_3;
  1453. using std::placeholders::_4;
  1454. socket::ptr sock = _io->socket();
  1455. //default socket opened, also we have "set_open_listener" for monitoring physical connection opened.
  1456. //sock->on(JSON_CMD_VALUE_USER, sio::socket::event_listener_aux(std::bind(&CYAServerDlg::OnLoginMessage,this,_1,_2,_3,_4)));
  1457. sock->on(JSON_CMD_VALUE_USER, sio::socket::event_listener_aux(std::bind(&CYAServerDlg::OnLogin, this, _1,_2,_3,_4)));
  1458. sock->on(JSON_CMD_VALUE_CALL, sio::socket::event_listener_aux(std::bind(&CYAServerDlg::OnCallMessage,this,_1,_2,_3,_4)));
  1459. sock->on(JSON_CMD_VALUE_PUSH, sio::socket::event_listener(std::bind(&CYAServerDlg::OnPushMessage, this)));
  1460. //sock->on(JSON_CMD_VALUE_USER, sio::socket::event_listener(std::bind(&CYAServerDlg::OnLoginCallBack, this, std::placeholders::_1)));
  1461. _io->set_socket_open_listener(std::bind(&CYAServerDlg::OnConnected, this));
  1462. //_io->set_open_listener(std::bind(&CYAServerDlg::OnConnected, this));
  1463. //physical connection closed or drop.
  1464. _io->set_close_listener(std::bind(&CYAServerDlg::OnClosed,this, std::placeholders::_1));
  1465. //physical connection fail to establish.
  1466. _io->set_fail_listener(std::bind(&CYAServerDlg::OnFailed,this));
  1467. }
  1468. void CYAServerDlg::ws_close()
  1469. {
  1470. //_io->socket()->off_all();
  1471. //_io->socket()->off_error();
  1472. }
  1473. void CYAServerDlg::ws_login()
  1474. {
  1475. USES_CONVERSION;
  1476. CC2UTF8 conv = (char*)get_json_login().c_str();
  1477. string szlogin = conv.c_str();
  1478. _io->socket()->emit(JSON_CMD_VALUE_USER, szlogin, [&](sio::message::list const& msglist){
  1479. message::ptr msg_ptr = msglist[0];
  1480. int n =(int)msg_ptr->get_map()["code"]->get_int();
  1481. is_websocket_login = (0 == n) ? true : false;
  1482. CString strlog;
  1483. wchar_t* p_url = CFunctions::c2wc(m_ws_url.c_str());
  1484. if(is_websocket_login){
  1485. strlog.Format(_T("%s: %s"), _T(LOG_LOGIN_WEB_SERVER), p_url/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1486. //show_log(strlog);
  1487. }else{
  1488. p_url = CFunctions::c2wc(m_ws_url.c_str());
  1489. strlog.Format(_T("%s: %s, err: %d"), _T(LOG_LOGIN_WEB_SERVER_FAILED), p_url, n/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1490. }
  1491. show_log(strlog);
  1492. if(p_url){
  1493. free(p_url);
  1494. p_url = NULL;
  1495. }
  1496. });
  1497. }
  1498. void CYAServerDlg::ws_logout()
  1499. {
  1500. USES_CONVERSION;
  1501. CC2UTF8 conv = (char*)get_json_logout().c_str();
  1502. string szlogout = conv.c_str();
  1503. _io->socket()->emit(JSON_CMD_VALUE_USER, szlogout, [&](sio::message::list const& msglist){
  1504. message::ptr msg_ptr = msglist[0];
  1505. int n =(int)msg_ptr->get_map()["code"]->get_int();
  1506. CString strlog;
  1507. wchar_t* p_url = CFunctions::c2wc(m_ws_url.c_str());
  1508. if(n == 0){
  1509. strlog.Format(_T("%s: %s"), _T(LOG_LOGOUT_WEB_SERVER), p_url/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1510. //show_log(strlog);
  1511. }else{
  1512. p_url = CFunctions::c2wc(m_ws_url.c_str());
  1513. strlog.Format(_T("%s: %s, err: %d"), _T(LOG_LOGOUT_WEB_SERVER_FAILED), p_url, n/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1514. }
  1515. show_log(strlog);
  1516. if(p_url){
  1517. free(p_url);
  1518. p_url = NULL;
  1519. }
  1520. });
  1521. //send_json_data(JSON_CMD_VALUE_USER, get_json_logout().c_str());
  1522. //CString strlog;
  1523. //wchar_t* p_url = CFunctions::c2wc(m_ws_url.c_str());
  1524. //strlog.Format(_T("%s: %s"), _T(LOG_LOGOUT_WEB_SERVER), p_url/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1525. //show_log(strlog);
  1526. //if(p_url){
  1527. // free(p_url);
  1528. // p_url = NULL;
  1529. //}
  1530. }
  1531. void CYAServerDlg::start_tcp_server()
  1532. {
  1533. set_app_state(ST_STARTING);
  1534. if(_server.Start(LOCAL_ADDRESS, PORT_SERVER_MASTER))
  1535. {
  1536. ::LogServerStart(LOCAL_ADDRESS, PORT_SERVER_MASTER);
  1537. set_app_state(ST_STARTED);
  1538. }
  1539. else
  1540. {
  1541. ::LogServerStartFail(_server.GetLastError(), _server.GetLastErrorDesc());
  1542. set_app_state(ST_STOPPED);
  1543. }
  1544. }
  1545. void CYAServerDlg::stop_tcp_server()
  1546. {
  1547. set_app_state(ST_STOPPING);
  1548. if(_server.Stop()){
  1549. ::LogServerStop();
  1550. set_app_state(ST_STOPPED);
  1551. }
  1552. else{
  1553. //ASSERT(FALSE);
  1554. }
  1555. }
  1556. void CYAServerDlg::clear_listener()
  1557. {
  1558. //SocketMap::iterator it_sock = mp_socket_list.begin();
  1559. //for(; it_sock != mp_socket_list.end();){
  1560. // it_sock->second->Close();
  1561. // mp_socket_list.erase(it_sock++);
  1562. //}
  1563. }
  1564. void CYAServerDlg::clear_all_list()
  1565. {
  1566. // 清空创建的对象
  1567. //mp_card_list_all.clear();
  1568. //mp_reader_list.clear();
  1569. //mp_area_list.clear();
  1570. //mp_map_list.clear();
  1571. }
  1572. void CYAServerDlg::parse_data(BYTE *pData, int nLen, DWORD dwConnID)
  1573. {
  1574. //CString strBuf;
  1575. //formatByteArray(strBuf, (BYTE*)pData, nLen);
  1576. //writeErrorLog(_T("RAW_SS"), strBuf, false);
  1577. WORD tmplen = 0;
  1578. SocketBufferMap::iterator it = mp_socket_buffer_list.find(dwConnID);
  1579. if(it != mp_socket_buffer_list.end()){ // 有此socket数据
  1580. if(0 == it->second->wReadLen){ // 新的数据包
  1581. memset(it->second->pData, 0, LENGTH_MSG_4K);
  1582. tmplen = MAKEWORD(pData[1], pData[0]) + sizeof(WORD); // 加上描述长度的两字节
  1583. it->second->wLen = tmplen;
  1584. if(tmplen > nLen){
  1585. tmplen = nLen;
  1586. }
  1587. //TRACE(_T("1 \n"));
  1588. memcpy(it->second->pData, pData, tmplen);
  1589. }else{ // 接着上一次收取
  1590. tmplen = min(nLen, it->second->wLen - it->second->wReadLen);
  1591. //TRACE(_T("2 \n"));
  1592. memcpy(&it->second->pData[it->second->wReadLen], pData, tmplen);
  1593. }
  1594. it->second->wReadLen += tmplen;
  1595. if(it->second->wReadLen >= it->second->wLen){ // 接收完毕
  1596. parse_data_receive(&it->second->pData[sizeof(WORD)], it->second->wLen - sizeof(WORD), dwConnID); // 减去表示长度的两个字节
  1597. it->second->wReadLen = 0; // 重置
  1598. }
  1599. }else{ // 无此socket数据
  1600. _SOCKET_BUFFER* _sockbuf = new _SOCKET_BUFFER;
  1601. _sockbuf->wReadLen = 0;
  1602. _sockbuf->dwConnID = dwConnID;
  1603. _sockbuf->wLen = MAKEWORD(pData[1], pData[0]) + sizeof(WORD); // 加上描述长度的两个字节
  1604. memset(_sockbuf->pData, 0, LENGTH_MSG_4K);
  1605. //TRACE(_T("3 \n"));
  1606. memcpy(_sockbuf->pData, pData, nLen);
  1607. _sockbuf->wReadLen += nLen;
  1608. mp_socket_buffer_list.insert(make_pair(dwConnID, _sockbuf));
  1609. if(_sockbuf->wReadLen >= _sockbuf->wLen){
  1610. parse_data_receive(&_sockbuf->pData[sizeof(WORD)], nLen - sizeof(WORD), dwConnID); // 减去表示长度的两个字节
  1611. _sockbuf->wReadLen = 0;
  1612. }
  1613. }
  1614. }
  1615. void CYAServerDlg::parse_data_receive(BYTE *pData, int nLen, DWORD dwConnID )
  1616. {
  1617. if(m_log_raw_data){
  1618. //CString strBuf;
  1619. //formatByteArray(strBuf, (BYTE*)pData, nLen);
  1620. //writeErrorLog(_T("RAW_SS"), strBuf, false);
  1621. }
  1622. int total_pos = 0;
  1623. WORD pkg_len = 0;
  1624. while(total_pos < nLen){ // 处理粘包
  1625. if(total_pos + sizeof(WORD) >= nLen){
  1626. int aa = 20;
  1627. //break;
  1628. }
  1629. pkg_len = MAKEWORD(pData[total_pos+1], pData[total_pos]); // 单个数据包长度
  1630. if(total_pos + pkg_len> nLen)
  1631. {
  1632. int aa = 20;
  1633. }
  1634. TRACE("new memory = %d\n",pkg_len);
  1635. BYTE* DataBuffer = new BYTE[pkg_len];
  1636. if(DataBuffer){
  1637. memset(DataBuffer, 0, pkg_len);
  1638. //TRACE(_T("4 \n"));
  1639. memcpy(DataBuffer, &pData[total_pos], pkg_len + sizeof(WORD)); // 一个数据包
  1640. parse_package_data(DataBuffer, pkg_len + sizeof(WORD), dwConnID); // 解析数据包
  1641. }
  1642. //WaitForMS(3);
  1643. //delete[] DataBuffer;
  1644. //DataBuffer = NULL;
  1645. total_pos += pkg_len + sizeof(WORD); // 数据包长度 + 长度自身两个字节
  1646. }
  1647. }
  1648. void CYAServerDlg::parse_package_data(BYTE* DataBuffer, int nLen, DWORD dwConnID )
  1649. {
  1650. if(DataBuffer == NULL){
  1651. return;
  1652. }
  1653. DWORD dw = ::GetTickCount();
  1654. CString strBuf = _T("");
  1655. if(m_log_raw_data){
  1656. formatByteArray(strBuf, DataBuffer, nLen);
  1657. writeErrorLog(_T("RAW_S"), strBuf, false);
  1658. //strBuf = _T("");
  1659. strBuf.Empty();
  1660. }
  1661. int nCurPos = 0;
  1662. nCurPos += sizeof(WORD);
  1663. nLen -= sizeof(WORD); // 减去数据长度
  1664. WORD wCrc = CFunctions::getCRC(&DataBuffer[nCurPos], nLen - sizeof(WORD)); // CRC校验码
  1665. WORD w ;
  1666. CFunctions::getWord(&DataBuffer[nCurPos], &w, nLen - sizeof(WORD));
  1667. if( w != wCrc ){ // 校验不对
  1668. //if(theApp.log_raw_data){
  1669. if(m_log_raw_data){
  1670. strBuf = _T("CRC校验不通过");
  1671. writeErrorLog(_T("RAW_S"), strBuf);
  1672. //strBuf = _T("");
  1673. strBuf.Empty();
  1674. }
  1675. return;
  1676. }
  1677. WORD wChr = 0;
  1678. CFunctions::getWord(DataBuffer, &wChr, nCurPos);
  1679. nCurPos += sizeof(WORD);
  1680. int reader_id = 0;
  1681. int nTick = 0;
  1682. CString strtime = _T("");
  1683. switch (wChr){
  1684. case CHAR_LOCATEDATA: // 定位数据
  1685. {
  1686. parse_data_locate_reader(DataBuffer, nCurPos, nLen, dwConnID, reader_id);
  1687. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1688. if(it != mp_reader_list.end()){
  1689. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1690. parse_data_locate_card(DataBuffer, nCurPos, reader_id, wChr);
  1691. }
  1692. }
  1693. break;
  1694. }
  1695. case CHAR_LOCATEDATA_TDOA:
  1696. {
  1697. parse_data_locate_reader(DataBuffer, nCurPos, nLen, dwConnID, reader_id);
  1698. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1699. if(it != mp_reader_list.end()){
  1700. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1701. parse_data_locate_card(DataBuffer, nCurPos, reader_id, wChr);
  1702. }
  1703. }
  1704. break;
  1705. }
  1706. case CHAR_LOCATEDATAHIS:
  1707. {
  1708. g_is_rec_hist = true;
  1709. parse_data_locate_reader_his(DataBuffer, nLen, nCurPos, reader_id, nTick, strtime, wChr);
  1710. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1711. parse_data_locate_card_his(DataBuffer, nCurPos, reader_id, nTick, strtime, wChr);
  1712. }
  1713. break;
  1714. }
  1715. case CHAR_LOCATEDATAHIS_TDOA:
  1716. {
  1717. g_is_rec_hist = true;
  1718. parse_data_locate_reader_his(DataBuffer, nLen, nCurPos, reader_id, nTick, strtime, wChr);
  1719. BYTE* bt = new BYTE[nLen];
  1720. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1721. // 获取一条记录的长度
  1722. WORD wframelen = 0;
  1723. CFunctions::getWord(DataBuffer, &wframelen, nCurPos);
  1724. nCurPos += sizeof(WORD);
  1725. if(bt){
  1726. memset(bt, 0, nLen);
  1727. memcpy(bt, &DataBuffer[nCurPos], wframelen);
  1728. parse_data_locate_card_his_tdoa(bt, wframelen, reader_id, nTick, strtime);
  1729. }
  1730. nCurPos += nLen;
  1731. }
  1732. delete[] bt;
  1733. break;
  1734. }
  1735. case CHAR_HIST_DATA_FINISH:
  1736. {
  1737. g_is_rec_hist = false;
  1738. // 完成历史数据上传,可点名下一分站
  1739. }
  1740. case CHAR_READER_SYNC_TIME:
  1741. {
  1742. parse_data_reader_synctime(DataBuffer ,nLen ,nCurPos);
  1743. break;
  1744. }
  1745. case CHAR_ADHOC:
  1746. {
  1747. parse_data_locate_reader(DataBuffer, nCurPos, nLen, dwConnID, reader_id);
  1748. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1749. if(it != mp_reader_list.end()){
  1750. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1751. parse_data_adhoc(DataBuffer, nCurPos, reader_id);
  1752. }
  1753. }
  1754. break;
  1755. }
  1756. default:
  1757. //WriteInfoFile("未能解析的命令!");
  1758. break;
  1759. }
  1760. strtime.ReleaseBuffer();
  1761. //TRACE(_T("parse_package_data: id: %Iu, t: %d,total t: %d, len: %d\r\n"),dwConnID,::GetTickCount()-dw,::GetTickCount()-g_testtick,nLen);
  1762. }
  1763. void CYAServerDlg::parse_data_locate_reader(BYTE * DataBuffer, int& nCurPos, int nLen, DWORD dwConnID, int& reader_id )
  1764. {
  1765. // 分站号
  1766. DWORD dwReaderID;
  1767. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  1768. nCurPos += sizeof(DWORD);
  1769. reader_id = dwReaderID;
  1770. //_SOCK* sock = get_socket_by_count(dwConnID);
  1771. //if(NULL == sock){ // 列表中不存在
  1772. // if(_server.Disconnect(dwConnID))
  1773. // ::LogDisconnect(dwConnID);
  1774. // else
  1775. // ::LogDisconnectFail(dwConnID);
  1776. // return;
  1777. //}
  1778. ReaderMap::iterator itReader = mp_reader_list.find(dwReaderID);
  1779. Reader* pReader;
  1780. bool isErrorReader = false;
  1781. if(itReader != mp_reader_list.end()){
  1782. pReader = itReader->second;
  1783. add_socket_to_list(dwConnID, reader_id);
  1784. }else{
  1785. return;
  1786. isErrorReader = true;
  1787. pReader = new Reader();
  1788. pReader->reader_id = dwReaderID;
  1789. TRACE(_T("parse_data_locate_reader : new Reader \n"));
  1790. //mp_reader_list.insert(make_pair(dwReaderID, pReader)); // 只处理在数据库中维护的
  1791. }
  1792. // 接收数据时间
  1793. //TRACE(_T("time memcpy \n"));
  1794. pReader->rec_time = time(NULL); // COleDateTime::GetTickCount();
  1795. m_time_last_rec = pReader->rec_time; // 更新最后信号时间
  1796. // 分站时间戳
  1797. WORD wTickCount = 0;
  1798. CFunctions::getWord(DataBuffer, &wTickCount, nCurPos);
  1799. nCurPos += sizeof(WORD);
  1800. pReader->tick_count = wTickCount;
  1801. // 分站时间
  1802. // 7字节 从第一个字节开始,分别表示秒、分、时、天、周、月、年
  1803. BYTE btSec = 0;
  1804. //TRACE(_T("5 \n"));
  1805. memcpy(&btSec, &DataBuffer[nCurPos], sizeof(BYTE));
  1806. nCurPos += sizeof(BYTE);
  1807. BYTE btMin = 0;
  1808. memcpy(&btMin, &DataBuffer[nCurPos], sizeof(BYTE));
  1809. nCurPos += sizeof(BYTE);
  1810. BYTE btHour = 0;
  1811. memcpy(&btHour, &DataBuffer[nCurPos], sizeof(BYTE));
  1812. nCurPos += sizeof(BYTE);
  1813. BYTE btDay = 0;
  1814. memcpy(&btDay, &DataBuffer[nCurPos], sizeof(BYTE));
  1815. nCurPos += sizeof(BYTE);
  1816. BYTE btWeek = 0;
  1817. memcpy(&btWeek, &DataBuffer[nCurPos], sizeof(BYTE));
  1818. nCurPos += sizeof(BYTE);
  1819. BYTE btMonth = 0;
  1820. memcpy(&btMonth, &DataBuffer[nCurPos], sizeof(BYTE));
  1821. nCurPos += sizeof(BYTE);
  1822. BYTE btYear = 0;
  1823. memcpy(&btYear, &DataBuffer[nCurPos], sizeof(BYTE));
  1824. nCurPos += sizeof(BYTE);
  1825. struct tm reader_time;
  1826. reader_time.tm_sec = btSec;
  1827. reader_time.tm_min = btMin;
  1828. reader_time.tm_hour = btHour;
  1829. reader_time.tm_mday = btDay;
  1830. reader_time.tm_wday = btWeek;
  1831. reader_time.tm_mon = btMonth - 1;
  1832. reader_time.tm_year = btYear + 100; // + 2000 - 1900
  1833. pReader->reader_time = mktime(&reader_time);
  1834. // 温度
  1835. BYTE btTemperature = 0;
  1836. memcpy(&btTemperature, &DataBuffer[nCurPos], sizeof(BYTE));
  1837. nCurPos += sizeof(BYTE);
  1838. pReader->temperature = btTemperature;
  1839. // 状态
  1840. WORD wState = 0;
  1841. CFunctions::getWord(DataBuffer, &wState, sizeof(WORD));
  1842. nCurPos += sizeof(WORD);
  1843. // pReader->state = wState;
  1844. //if(theApp.log_parse_data){
  1845. if(m_log_parse_data){
  1846. CString strLog;
  1847. strLog.Format(_T("id:%d, n:%d, %.2d-%.2d-%.2d %.2d:%.2d:%.2d, tep:%d, sta:%d"),
  1848. dwReaderID, wTickCount, btYear, btMonth, btDay, btHour, btMin, btSec, btTemperature, wState);
  1849. writeErrorLog(_T("PARSE_S"), strLog);
  1850. //strLog = _T("");
  1851. strLog.Empty();
  1852. }
  1853. }
  1854. void CYAServerDlg::parse_data_locate_card(BYTE* DataBuffer, int& nCurPos, int reader_id, unsigned short wChr)
  1855. {
  1856. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1857. // 卡类型
  1858. BYTE btCardType = 0;
  1859. //TRACE(_T("6 \n"));
  1860. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  1861. nCurPos += sizeof(BYTE);
  1862. // 卡号
  1863. DWORD dwCardId = 0;
  1864. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  1865. nCurPos += sizeof(DWORD);
  1866. // 获取标识卡编号, 3位卡类型 + 10位卡号
  1867. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  1868. Card* card = NULL;
  1869. bool isErrorCard = false;
  1870. CardMap::iterator it_card = mp_card_list_all.find(str_card_id);
  1871. if(it_card != mp_card_list_all.end()){
  1872. card = it_card->second;
  1873. }else{
  1874. isErrorCard = true;
  1875. card = new Card(str_card_id, btCardType, theApp.z_offset);
  1876. //TRACE(_T("parse_data_locate_card : new Card \n"));
  1877. #ifdef ALGORITHM_TYPE_TOF
  1878. card->set_reader_path(&mp_reader_path_list);
  1879. #elif defined ALGORITHM_TYPE_TDOA
  1880. card->set_reader_path(&mp_reader_path_list_tdoa);
  1881. #endif
  1882. //mp_card_list_all.insert(make_pair(str_card_id, card));
  1883. }
  1884. // 设置当前分站, 进入分站时间、进入区域时间,当前区域,当前地图
  1885. card->set_reader(it->second);
  1886. card->reader_tickcount = it->second->tick_count;
  1887. card->is_hist = false;
  1888. switch(btCardType)
  1889. {
  1890. case CT_VEHICLE:
  1891. {
  1892. //DWORD dw = ::GetTickCount();
  1893. parse_data_locate_card_vehicle(DataBuffer, nCurPos, card, wChr);
  1894. if(isErrorCard){
  1895. //TRACE(_T("delete card: %d \r\n"));
  1896. delete card;
  1897. card = NULL;
  1898. return;
  1899. }
  1900. deal_card_msg(card);
  1901. //TRACE(_T("deal_card: %d \r\n"), ::GetTickCount() - dw);
  1902. break;
  1903. }
  1904. case CT_PERSON:
  1905. {
  1906. parse_data_locate_card_vehicle(DataBuffer, nCurPos, card, wChr);
  1907. if(isErrorCard){
  1908. //TRACE(_T("delete card: %d \r\n"));
  1909. delete card;
  1910. card = NULL;
  1911. return;
  1912. }
  1913. deal_card_msg(card);
  1914. break;
  1915. }
  1916. default:
  1917. {
  1918. // 无法识别的数据
  1919. break;
  1920. }
  1921. }
  1922. /*if(isErrorCard){
  1923. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  1924. TRACE(_T("card_id : %s\n"),p_card_id);
  1925. if(p_card_id){
  1926. free(p_card_id);
  1927. p_card_id = NULL;
  1928. }
  1929. delete card;
  1930. card = NULL;
  1931. }*/
  1932. }
  1933. void CYAServerDlg::parse_data_locate_card_vehicle(BYTE* DataBuffer, int& nCurPos, Card* card, unsigned short wChr )
  1934. {
  1935. if(LT_READER == theApp.locate_type){
  1936. card->isdealed = false;
  1937. card->isreceive = true;
  1938. card->issent = false;
  1939. }
  1940. // 报文时间
  1941. WORD wCardTickCount;
  1942. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  1943. nCurPos += sizeof(WORD);
  1944. BYTE btTypeAndPower;
  1945. //TRACE(_T("7 \n"));
  1946. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  1947. nCurPos += sizeof(BYTE);
  1948. //报文类型
  1949. BYTE btType;
  1950. btType = (btTypeAndPower >>4) & 0x0F;
  1951. //电池电量
  1952. BYTE btPower;
  1953. btPower = btTypeAndPower & 0x0F;
  1954. //保留
  1955. nCurPos += sizeof(BYTE);
  1956. //加速度
  1957. BYTE btAcceleration;
  1958. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  1959. nCurPos += sizeof(BYTE);
  1960. //定位时间戳Tsp // 字序
  1961. LONG64 lTime1 = 0;
  1962. BYTE btTemp = 0;
  1963. int nRangingPos = nCurPos;
  1964. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  1965. nCurPos += sizeof(BYTE);
  1966. DWORD dwTemp = 0;
  1967. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  1968. nCurPos += sizeof(DWORD);
  1969. lTime1 = btTemp;
  1970. lTime1 = lTime1 << 32;
  1971. lTime1 |= ((long long)dwTemp & 0xffffffff);
  1972. // 距离
  1973. double dldist = CFunctions::getDistance(lTime1);
  1974. //dldist *= card->map_scale;
  1975. // 天线
  1976. BYTE btAntenna;
  1977. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  1978. nCurPos += sizeof(BYTE);
  1979. WORD wSyncNum = 0;
  1980. WORD wStrength = 0;
  1981. if(CHAR_LOCATEDATA_TDOA == wChr){
  1982. // 分站时间同步序列号
  1983. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  1984. nCurPos += sizeof(WORD);
  1985. // 信号强度
  1986. CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  1987. nCurPos += sizeof(WORD);
  1988. }
  1989. if(LT_COORDINATE == theApp.locate_type){
  1990. card->time_stamp = wCardTickCount;
  1991. card->ranging_type = btType;
  1992. card->power_state = btPower;
  1993. card->accelerate_state = btAcceleration;
  1994. card->flying_time = lTime1;
  1995. card->sync_num = wSyncNum;
  1996. card->antenna_id = ((btAntenna & 0xFF) == 1) ? 0 : 1;
  1997. card->distance = dldist;
  1998. if(m_log_parse_data){
  1999. CString strLog;
  2000. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  2001. strLog.Format(_T("id:%s, n:%d, type:%d, power:%d, acc:%d, flytime:%I64u, d:%f, ant:%d, syncnum:%d, strength:%d"),
  2002. p_card_id/*CFunctions::c2wc(card->card_id.c_str())*/, wCardTickCount, btType, btPower, btAcceleration, lTime1, dldist, btAntenna, wSyncNum, wStrength);
  2003. writeErrorLog(_T("PARSE_S"), strLog, true);
  2004. //strLog = _T("");
  2005. strLog.Empty();
  2006. if(p_card_id){
  2007. free(p_card_id);
  2008. p_card_id = NULL;
  2009. }
  2010. }
  2011. }else if(LT_READER == theApp.locate_type){
  2012. if(card->time_stamp < 0xFF && card->time_stamp < wCardTickCount){
  2013. card->time_stamp = wCardTickCount;
  2014. card->ranging_type = btType;
  2015. card->power_state = btPower;
  2016. card->accelerate_state = btAcceleration;
  2017. card->flying_time = lTime1;
  2018. card->sync_num = wSyncNum;
  2019. card->antenna_id = ((btAntenna & 0xFF) == 1) ? 0 : 1;
  2020. card->distance = dldist;
  2021. }else if(0xFF == card->time_stamp && wCardTickCount == 0){
  2022. card->time_stamp = wCardTickCount;
  2023. card->ranging_type = btType;
  2024. card->power_state = btPower;
  2025. card->accelerate_state = btAcceleration;
  2026. card->flying_time = lTime1;
  2027. card->sync_num = wSyncNum;
  2028. card->antenna_id = ((btAntenna & 0xFF) == 1) ? 0 : 1;
  2029. card->distance = dldist;
  2030. }
  2031. }
  2032. }
  2033. void CYAServerDlg::parse_data_adhoc( BYTE* DataBuffer, int& nCurPos, int reader_id )
  2034. {
  2035. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  2036. BYTE nlen = 0, nDeal = nCurPos;
  2037. //获取自组网数据长度,1字节
  2038. memcpy(&nlen, &DataBuffer[nCurPos], sizeof(BYTE));
  2039. nCurPos += sizeof(BYTE);
  2040. while (nlen > nCurPos - nDeal){
  2041. //获取命令字,1字节
  2042. BYTE btCmd = 0;
  2043. memcpy(&btCmd, &DataBuffer[nCurPos], sizeof(BYTE));
  2044. nCurPos += sizeof(BYTE);
  2045. btCmd = btCmd&0x3F;
  2046. //获取源地址ID,1字节
  2047. BYTE btId = 0;
  2048. memcpy(&btId, &DataBuffer[nCurPos], sizeof(BYTE));
  2049. nCurPos += sizeof(BYTE);
  2050. //时间戳,1字节
  2051. BYTE btTickcount = 0;
  2052. memcpy(&btTickcount, &DataBuffer[nCurPos], sizeof(BYTE));
  2053. nCurPos += sizeof(BYTE);
  2054. //节点级别,1字节
  2055. BYTE btIdx = 0;
  2056. memcpy(&btIdx, &DataBuffer[nCurPos], sizeof(BYTE));
  2057. nCurPos += sizeof(BYTE);
  2058. if(btId != 0){
  2059. string str_card_id = CFunctions::getstrwithzero(CT_ADHOC, 3) + CFunctions::getstrwithzero(btId, 10);
  2060. Card* card = NULL;
  2061. CardMap::iterator it_card = mp_card_list_all.find(str_card_id);
  2062. if(it_card != mp_card_list_all.end()){
  2063. card = it_card->second;
  2064. }else{
  2065. card = new Card(str_card_id, CT_ADHOC, theApp.z_offset);
  2066. mp_card_list_all.insert(make_pair(str_card_id, card));
  2067. }
  2068. CardMap::iterator it_adhoc_card = mp_card_list_down_adhoc.find(str_card_id);
  2069. if(it_adhoc_card==mp_card_list_down_adhoc.end()&&it_card!=mp_card_list_all.end()){
  2070. mp_card_list_down_adhoc.insert(make_pair(str_card_id, it_card->second));
  2071. }
  2072. //设置当前分站, 进入分站时间、进入区域时间,当前区域,当前地图
  2073. card->set_reader(it->second);
  2074. if(it->second->adhoc[btIdx]){
  2075. card->x = it->second->adhoc[btIdx]->x;
  2076. card->y = it->second->adhoc[btIdx]->y;
  2077. card->z = it->second->adhoc[btIdx]->z;
  2078. }
  2079. if(btCmd & 0x01){ // 呼救
  2080. card->status_help = STATUS_ERROR;
  2081. }else if(btCmd & 0x02){ // 呼叫应答,即呼叫成功
  2082. TRACE("ANS!");
  2083. if(STATUS_NORMAL == card->status_call){
  2084. card->state_biz = STATUS_NORMAL;
  2085. }
  2086. }else {
  2087. card->status_call = STATUS_NORMAL;
  2088. card->status_help = STATUS_NORMAL;
  2089. }
  2090. card->issent = false;
  2091. //if(card->status_help != btCmd){
  2092. // card->status_help = btCmd;
  2093. //}
  2094. deal_card_msg(card);
  2095. }
  2096. //BYTE btDiret = (btCmd >> 6);
  2097. //if(btDiret == 0x02){ // 只处理上传数据,0x00、0x03 保留,0x01下发数据,0x02上传数据
  2098. // btCmd &= 0x3F; // 高两位为命令传递方向,上位机无用
  2099. // BYTE btId = 0;
  2100. // memcpy(&btId, &DataBuffer[nCurPos], sizeof(BYTE));
  2101. // nCurPos += sizeof(BYTE);
  2102. // BYTE btTickcount = 0;
  2103. // memcpy(&btTickcount, &DataBuffer[nCurPos], sizeof(BYTE));
  2104. // nCurPos += sizeof(BYTE);
  2105. // BYTE btIdx = 0;
  2106. // memcpy(&btIdx, &DataBuffer[nCurPos], sizeof(BYTE));
  2107. // nCurPos += sizeof(BYTE);
  2108. // if(btId != 0){
  2109. // string str_card_id = CFunctions::getstrwithzero(CT_ADHOC, 3) + CFunctions::getstrwithzero(btId, 10);
  2110. // Card* card = NULL;
  2111. // CardMap::iterator it_card = mp_card_list_all.find(str_card_id);
  2112. // if(it_card != mp_card_list_all.end()){
  2113. // card = it_card->second;
  2114. // }else{
  2115. // card = new Card(str_card_id, CT_ADHOC, theApp.z_offset);
  2116. // mp_card_list_all.insert(make_pair(str_card_id, card));
  2117. // }
  2118. // //设置当前分站, 进入分站时间、进入区域时间,当前区域,当前地图
  2119. // card->set_reader(it->second);
  2120. // if(it->second->adhoc[btIdx]){
  2121. // card->x = it->second->adhoc[btIdx]->x;
  2122. // card->y = it->second->adhoc[btIdx]->y;
  2123. // card->z = it->second->adhoc[btIdx]->z;
  2124. // }
  2125. // if(btCmd & 0x01){ // 呼救
  2126. // card->state_biz = STATUS_HELP;
  2127. // }else if(btCmd & 0x02){ // 呼叫应答,即呼叫成功
  2128. // TRACE("ANS!");
  2129. // if(STATUS_NORMAL == card->status_call){
  2130. // }
  2131. // }else {
  2132. // card->status_call = STATUS_NORMAL;
  2133. // card->status_help = STATUS_NORMAL;
  2134. // }
  2135. // card->issent = false;
  2136. // //if(card->status_help != btCmd){
  2137. // // card->status_help = btCmd;
  2138. // //}
  2139. // deal_card_msg(card);
  2140. // }
  2141. //}else{
  2142. // nCurPos += 3 * sizeof(BYTE);
  2143. //}
  2144. }
  2145. }
  2146. void CYAServerDlg::add_socket_to_list(DWORD dwConnID, DWORD reader_id )
  2147. {
  2148. TCHAR szAddress[40];
  2149. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  2150. USHORT usPort;
  2151. if( _server.GetRemoteAddress(dwConnID, szAddress, iAddressLen, usPort)){
  2152. SocketMap::iterator itSock = mp_socket_list.find(szAddress);
  2153. if(itSock != mp_socket_list.end()){
  2154. itSock->second->dwConnID = dwConnID;
  2155. itSock->second->state = 0;
  2156. itSock->second->reader_id = reader_id;
  2157. }else{
  2158. _SOCK *sock = new _SOCK();
  2159. sock->sip = szAddress;
  2160. sock->dwConnID = dwConnID;
  2161. sock->state = 0;
  2162. sock->reader_id = reader_id;
  2163. mp_socket_list.insert(make_pair(szAddress, sock));
  2164. ::PostMessage(this->GetSafeHwnd(), WM_REFRESH_IP_LIST, 1, 0);
  2165. }
  2166. }
  2167. }
  2168. void CYAServerDlg::remove_socket(DWORD dwConnID )
  2169. {
  2170. EnterCriticalSection(&m_csRemoveSocket);
  2171. bool bNeedRefresh = false;
  2172. SocketMap::iterator _sock = mp_socket_list.begin();
  2173. while(_sock != mp_socket_list.end()){
  2174. if(_sock->second->dwConnID == dwConnID){
  2175. _SOCK* s = _sock->second;
  2176. mp_socket_list.erase(_sock++);
  2177. bNeedRefresh = true;
  2178. if(s){
  2179. delete s;
  2180. s = NULL;
  2181. }
  2182. }else{
  2183. ++_sock;
  2184. }
  2185. }
  2186. if(bNeedRefresh){
  2187. ::PostMessage(this->GetSafeHwnd(), WM_REFRESH_IP_LIST, 0, 0);
  2188. }
  2189. LeaveCriticalSection(&m_csRemoveSocket);
  2190. }
  2191. // 获取设备状态信息, 分站、红绿灯、道岔、扩音器
  2192. std::string CYAServerDlg::get_json_device_state()
  2193. {
  2194. char _time[STR_LEN_TIME];
  2195. struct tm local_time;
  2196. Json::Value root;
  2197. Json::Value state_maps;
  2198. MapInfoMap::iterator it_map = mp_map_list.begin();
  2199. int nn = 0;
  2200. for(; it_map != mp_map_list.end(); ++it_map){
  2201. Json::Value state_map;
  2202. Json::Value state_devs;
  2203. int n = 0;
  2204. ReaderMap::iterator it = mp_reader_list.begin();
  2205. for(; it != mp_reader_list.end(); ++it){
  2206. if(it->second->map_id != it_map->second->map_id) continue;
  2207. //if(it->second->state != it->second->state_old){
  2208. Json::Value state_dev;
  2209. state_dev[JSON_KEY_DEV_STATE_DEVICE_ID] = it->second->reader_id;
  2210. state_dev[JSON_KEY_DEV_STATE_STATE_DESC] = it->second->get_state_text();
  2211. state_dev[JSON_KEY_DEV_STATE_STATE] = it->second->state;
  2212. state_dev[JSON_KEY_DEV_STATE_DEVICE_TYPE_ID] = it->second->device_type_id;
  2213. localtime_s(&local_time, &it->second->rec_time);
  2214. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2215. state_dev[JSON_KEY_DEV_STATE_TIME] = _time;
  2216. n++;
  2217. state_devs.append(state_dev);
  2218. it->second->state_old = it->second->state;
  2219. //}
  2220. }
  2221. if(n >0){
  2222. state_map[JSON_KEY_DEV_STATE_MAP_ID] = it_map->second->map_id;
  2223. state_map[JSON_KEY_DEV_STATE_DEVICES] = state_devs;
  2224. nn++;
  2225. state_maps.append(state_map);
  2226. }
  2227. }
  2228. if(nn>0){
  2229. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_DEV_STATE;
  2230. root[JSON_ROOT_KEY_DATA] = state_maps;
  2231. return root.toFastString();
  2232. }
  2233. return "";
  2234. }
  2235. std::string CYAServerDlg::get_json_alarm()
  2236. {
  2237. Json::Value root;
  2238. Json::Value data;
  2239. Json::Value _global;
  2240. Json::Value _areas;
  2241. Json::Value _readers;
  2242. Json::Value _staff;
  2243. Json::Value _vehicle;
  2244. Json::Value _adhoc;
  2245. unsigned int alarm_count = 0;
  2246. char _time[STR_LEN_TIME];
  2247. struct tm local_time;
  2248. // global
  2249. // 人员超员
  2250. alarm_count = mp_card_list_down_person.size();
  2251. if(alarm_count > sls_setting.over_count_person){ // if(time_over_count_person >0)
  2252. Json::Value alarm;
  2253. Json::Value detail;
  2254. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_PERSON;
  2255. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_count_person;
  2256. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2257. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2258. _global.append(alarm);
  2259. }
  2260. // 车辆超员
  2261. alarm_count = mp_card_list_down_vehicle.size();
  2262. if(alarm_count > sls_setting.over_count_vehicle){
  2263. Json::Value alarm;
  2264. Json::Value detail;
  2265. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_VEHICLE;
  2266. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_count_vehicle;
  2267. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2268. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2269. _global.append(alarm);
  2270. }
  2271. // 人员超时
  2272. alarm_count = mp_card_list_over_time_person.size();
  2273. if(alarm_count > 0){
  2274. Json::Value alarm;
  2275. Json::Value detail;
  2276. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_PERSON;
  2277. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_time_person;
  2278. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2279. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2280. _global.append(alarm);
  2281. }
  2282. // 车辆超时
  2283. alarm_count = mp_card_list_over_time_vehicle.size();
  2284. if(alarm_count > 0){
  2285. Json::Value alarm;
  2286. Json::Value detail;
  2287. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_VEHICLE;
  2288. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_time_vehicle;
  2289. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2290. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2291. _global.append(alarm);
  2292. }
  2293. // 车辆超速
  2294. alarm_count = mp_card_list_over_speed_vehicle.size();
  2295. if(alarm_count > 0){
  2296. Json::Value alarm;
  2297. Json::Value detail;
  2298. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_VEHICLE;
  2299. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_speed;
  2300. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2301. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2302. _global.append(alarm);
  2303. }
  2304. // areas
  2305. // 人员超员
  2306. AreaMap::iterator it_area = mp_area_list.begin();
  2307. bool is_alarm = false;
  2308. for(; it_area != mp_area_list.end(); ++it_area){
  2309. is_alarm = false;
  2310. Json::Value area;
  2311. Json::Value alarms;
  2312. if(it_area->second->count_area_over_count_person > 0){
  2313. is_alarm = true;
  2314. Json::Value alarm;
  2315. Json::Value detail;
  2316. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_PERSON;
  2317. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_count_person;
  2318. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_person;
  2319. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2320. alarms.append(alarm);
  2321. }
  2322. if(it_area->second->count_area_over_count_vehicle > 0){
  2323. is_alarm = true;
  2324. Json::Value alarm;
  2325. Json::Value detail;
  2326. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_VEHICLE;
  2327. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_count_vehicle;
  2328. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_vehicle;
  2329. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2330. alarms.append(alarm);
  2331. }
  2332. if(it_area->second->count_area_over_time_person > 0){
  2333. is_alarm = true;
  2334. Json::Value alarm;
  2335. Json::Value detail;
  2336. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_PERSON;
  2337. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_time_person;
  2338. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_area_over_time_person;
  2339. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2340. alarms.append(alarm);
  2341. }
  2342. if(it_area->second->count_area_over_time_vehicle > 0){
  2343. is_alarm = true;
  2344. Json::Value alarm;
  2345. Json::Value detail;
  2346. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_VEHICLE;
  2347. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_time_vehicle;
  2348. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_area_over_time_vehicle;
  2349. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2350. alarms.append(alarm);
  2351. }
  2352. if(it_area->second->count_area_forbidden_person > 0 || it_area->second->count_area_forbidden_vehicle > 0){
  2353. is_alarm = true;
  2354. Json::Value alarm;
  2355. Json::Value detail;
  2356. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_AREA_FORBIDDEN;
  2357. detail[JSON_KEY_ALARM_PERSON] = it_area->second->count_area_forbidden_person;
  2358. detail[JSON_KEY_ALARM_VEHICLE] = it_area->second->count_area_forbidden_vehicle;
  2359. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2360. alarms.append(alarm);
  2361. }
  2362. if(is_alarm){
  2363. area[JSON_KEY_ALARM_AREA_ID] = it_area->first;//it_area->second->area_id;
  2364. area[JSON_KEY_ALARM_ALARMS] = alarms;
  2365. _areas.append(area);
  2366. }
  2367. }
  2368. // 分站
  2369. ReaderMap::iterator it_reader = mp_reader_list.begin();
  2370. alarm_count = 0;
  2371. for(; it_reader != mp_reader_list.end(); ++it_reader){
  2372. if (it_reader->second->state == STATUS_DEVICE_ERROR){
  2373. Json::Value alarm;
  2374. int r_id = it_reader->second->reader_id;
  2375. alarm[JSON_KEY_ALARM_READER_ID] = it_reader->second->reader_id;
  2376. alarm[JSON_KEY_ALARM_TYPE_ID] = ATID_READER;
  2377. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_READER);
  2378. if(it_alarm != mp_alarm_type_list.end()){
  2379. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2380. }
  2381. localtime_s(&local_time, &it_reader->second->rec_time);
  2382. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2383. //strftime(_time, STR_LEN_TIME, "%m-%d %H:%M", &local_time);
  2384. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2385. _readers.append(alarm);
  2386. }
  2387. }
  2388. CardMap::iterator it_staff = mp_card_list_down_person.begin();
  2389. for(; it_staff != mp_card_list_down_person.end(); ++it_staff){
  2390. if(it_staff->second->status_area_over_time == STATUS_NORMAL &&
  2391. it_staff->second->status_area_forbidden == STATUS_NORMAL &&
  2392. it_staff->second->status_over_time == STATUS_NORMAL &&
  2393. it_staff->second->status_power == STATUS_NORMAL) {
  2394. continue;
  2395. }
  2396. Json::Value alarms;
  2397. Json::Value staff;
  2398. if(it_staff->second->status_area_forbidden == STATUS_ERROR){
  2399. time_t tt = it_staff->second->time_area_forbidden;
  2400. Json::Value alarm;
  2401. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_FORBIDDEN_PERSON);
  2402. if(it_alarm != mp_alarm_type_list.end()){
  2403. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2404. }
  2405. localtime_s(&local_time, &tt);
  2406. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2407. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2408. alarms.append(alarm);
  2409. }
  2410. if(it_staff->second->status_area_over_time == STATUS_ERROR){
  2411. Json::Value alarm;
  2412. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_OVER_TIME_PERSON);
  2413. if(it_alarm != mp_alarm_type_list.end()){
  2414. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2415. }
  2416. localtime_s(&local_time, &it_staff->second->time_area_over_time);
  2417. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2418. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2419. alarms.append(alarm);
  2420. }
  2421. if(it_staff->second->status_over_time == STATUS_ERROR){
  2422. Json::Value alarm;
  2423. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_OVER_TIME_PERSON);
  2424. if(it_alarm != mp_alarm_type_list.end()){
  2425. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2426. }
  2427. localtime_s(&local_time, &it_staff->second->time_over_time);
  2428. strftime(_time, STR_LEN_TIME, "%m-%d %H:%M", &local_time);
  2429. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2430. alarms.append(alarm);
  2431. }
  2432. if(it_staff->second->status_power == STATUS_ERROR){
  2433. Json::Value alarm;
  2434. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_POWER);
  2435. if(it_alarm != mp_alarm_type_list.end()){
  2436. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2437. }
  2438. localtime_s(&local_time, &it_staff->second->time_low_power);
  2439. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2440. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2441. alarms.append(alarm);
  2442. }
  2443. if(alarms != NULL){
  2444. staff[JSON_KEY_ALARM_STAFFER_ID] = it_staff->first;//it_staff->second->id;
  2445. staff[JSON_KEY_ALARM_ALARMS] = alarms;
  2446. _staff.append(staff);
  2447. }
  2448. }
  2449. CardMap::iterator it_vehicle = mp_card_list_down_vehicle.begin();
  2450. for(; it_vehicle != mp_card_list_down_vehicle.end(); ++it_vehicle){
  2451. if(it_vehicle->second->status_area_forbidden == STATUS_NORMAL &&
  2452. it_vehicle->second->status_area_over_time == STATUS_NORMAL &&
  2453. it_vehicle->second->status_over_speed == STATUS_NORMAL &&
  2454. it_vehicle->second->status_over_time == STATUS_NORMAL &&
  2455. it_vehicle->second->status_power == STATUS_NORMAL ){
  2456. continue;
  2457. }
  2458. Json::Value alarms;
  2459. Json::Value vehichle;
  2460. if(it_vehicle->second->status_area_forbidden == STATUS_ERROR){
  2461. Json::Value alarm;
  2462. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_FORBIDDEN_VEHICLE);
  2463. if(it_alarm != mp_alarm_type_list.end()){
  2464. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2465. }
  2466. localtime_s(&local_time, &it_vehicle->second->time_area_forbidden);
  2467. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2468. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2469. alarms.append(alarm);
  2470. }
  2471. if(it_vehicle->second->status_area_over_time == STATUS_ERROR){
  2472. Json::Value alarm;
  2473. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_OVER_TIME_VEHICLE);
  2474. if(it_alarm != mp_alarm_type_list.end()){
  2475. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2476. }
  2477. localtime_s(&local_time, &it_vehicle->second->time_area_over_time);
  2478. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2479. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2480. alarms.append(alarm);
  2481. }
  2482. if(it_vehicle->second->status_over_time == STATUS_ERROR){
  2483. Json::Value alarm;
  2484. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_OVER_TIME_VEHICLE);
  2485. if(it_alarm != mp_alarm_type_list.end()){
  2486. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2487. }
  2488. localtime_s(&local_time, &it_vehicle->second->time_over_time);
  2489. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2490. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2491. alarms.append(alarm);
  2492. }
  2493. if(it_vehicle->second->status_power == STATUS_ERROR){
  2494. Json::Value alarm;
  2495. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_POWER);
  2496. if(it_alarm != mp_alarm_type_list.end()){
  2497. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2498. }
  2499. localtime_s(&local_time, &it_vehicle->second->time_low_power);
  2500. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2501. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2502. alarms.append(alarm);
  2503. }
  2504. if(it_vehicle->second->status_over_speed == STATUS_ERROR){
  2505. Json::Value alarm;
  2506. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_OVER_SPEED);
  2507. if(it_alarm != mp_alarm_type_list.end()){
  2508. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2509. }
  2510. localtime_s(&local_time, &it_vehicle->second->time_over_speed);
  2511. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2512. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2513. alarms.append(alarm);
  2514. }
  2515. if(alarms != NULL){
  2516. vehichle[JSON_KEY_ALARM_STAFFER_ID] = it_vehicle->first;
  2517. vehichle[JSON_KEY_ALARM_ALARMS] = alarms;
  2518. _vehicle.append(vehichle);
  2519. }
  2520. }
  2521. if(_global != NULL){
  2522. data[JSON_KEY_ALARM_GLOBAL] = _global;
  2523. }
  2524. if(_areas != NULL){
  2525. data[JSON_KEY_ALARM_AREA] = _areas;
  2526. }
  2527. if(_readers != NULL){
  2528. data[JSON_KEY_ALARM_READER] = _readers;
  2529. }
  2530. if(_staff != NULL){
  2531. data[JSON_KEY_ALARM_STAFF] = _staff;
  2532. }
  2533. if(_vehicle != NULL){
  2534. data[JSON_KEY_ALARM_VEHICLE] = _vehicle;
  2535. }
  2536. if(data != NULL){
  2537. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_ALARM;
  2538. root[JSON_ROOT_KEY_DATA] = data;
  2539. return root.toFastString();
  2540. }
  2541. return "";
  2542. }
  2543. int CYAServerDlg::get_help_card_nums()
  2544. {
  2545. int nRet = 0;
  2546. CardMap::iterator it = mp_card_list_down_adhoc.begin();
  2547. for(it;it!=mp_card_list_down_adhoc.end();++it){
  2548. if(it->second->status_help == STATUS_ERROR){
  2549. nRet++;
  2550. }
  2551. }
  2552. return nRet;
  2553. }
  2554. std::string CYAServerDlg::get_json_help()
  2555. {
  2556. Json::Value root;
  2557. Json::Value alarms;
  2558. char _time[STR_LEN_TIME];
  2559. struct tm local_time;
  2560. CardMap::iterator it_adhoc = mp_card_list_down_adhoc.begin();
  2561. for(;it_adhoc!=mp_card_list_down_adhoc.end();++it_adhoc){
  2562. if(it_adhoc->second->status_help == STATUS_NORMAL){
  2563. continue;
  2564. }
  2565. Json::Value alarm;
  2566. if(it_adhoc->second->status_help == STATUS_ERROR){
  2567. alarm[JSON_KEY_CARD_ID] = it_adhoc->second->card_id;
  2568. alarm[JSON_KEY_CARD_TYPE_ID] = it_adhoc->second->card_type;
  2569. localtime_s(&local_time, &it_adhoc->second->enter_reader_time);
  2570. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2571. alarm["start_time"] = _time;
  2572. }
  2573. if(!alarm.isNull()){
  2574. //alarms.append(alarm);
  2575. alarms=alarm;
  2576. string sss = "";
  2577. sss = alarms.toStyledString();
  2578. }
  2579. }
  2580. if(!alarms.isNull()){
  2581. root[JSON_ROOT_KEY_CMD] = "helpme_req";
  2582. root[JSON_ROOT_KEY_DATA] = alarms;
  2583. }
  2584. string aa = "";
  2585. aa = root.toStyledString();
  2586. return root.toFastString();
  2587. }
  2588. std::string CYAServerDlg::get_json_down_and_up( Card* card )
  2589. {
  2590. //新json格式
  2591. Json::Value root;
  2592. Json::Value val_card;
  2593. Json::Value val_cards;
  2594. //卡号
  2595. val_card[JSON_KEY_CARD_ID] = card->card_id;
  2596. val_cards.append(val_card[JSON_KEY_CARD_ID]);
  2597. if(card->pos_state == DT_DOWN){
  2598. //x,y坐标
  2599. val_card[JSON_KEY_CORDINATE_X] = CFunctions::round(card->x,2);
  2600. val_cards.append(val_card[JSON_KEY_CORDINATE_X]);
  2601. val_card[JSON_KEY_CORDINATE_Y] = CFunctions::round(card->y,2);
  2602. val_cards.append(val_card[JSON_KEY_CORDINATE_Y]);
  2603. }else{
  2604. val_card[JSON_KEY_CORDINATE_X] = 0;
  2605. val_cards.append(val_card[JSON_KEY_CORDINATE_X]);
  2606. val_card[JSON_KEY_CORDINATE_Y] = 0;
  2607. val_cards.append(val_card[JSON_KEY_CORDINATE_Y]);
  2608. }
  2609. int ms = 1000;
  2610. //入井时间戳
  2611. double t = *((int64_t*)&card->down_time)*ms; //转为ms
  2612. val_card[JSON_KEY_DOWN_TIME] = t;
  2613. val_cards.append(val_card[JSON_KEY_DOWN_TIME]);
  2614. //进入区域时间戳
  2615. t = *((int64_t*)&card->enter_area_time)*ms;
  2616. val_card[JSON_KEY_ENTER_AREA_TIME] = t;
  2617. val_cards.append(val_card[JSON_KEY_ENTER_AREA_TIME]);
  2618. if(card->pos_state == DT_DOWN){
  2619. //接收时间戳
  2620. t = *((int64_t*)&card->rec_time)*ms;
  2621. val_card[JSON_KEY_REC_TIME] = t;
  2622. val_cards.append(val_card[JSON_KEY_REC_TIME]);
  2623. //工作时长
  2624. t = (int)(difftime(time(NULL), card->down_time))*ms;
  2625. val_card[JSON_KEY_WORK_TIME] = t;
  2626. val_cards.append(val_card[JSON_KEY_WORK_TIME]);
  2627. }else{
  2628. val_card[JSON_KEY_REC_TIME] = 0;
  2629. val_cards.append(val_card[JSON_KEY_REC_TIME]);
  2630. //工作时长
  2631. //t = (int)(difftime(time(NULL), card->down_time));
  2632. val_card[JSON_KEY_WORK_TIME] = 0;
  2633. val_cards.append(val_card[JSON_KEY_WORK_TIME]);
  2634. }
  2635. //地图编号
  2636. val_card[JSON_KEY_MAP_ID] = card->map_id;
  2637. val_cards.append(val_card[JSON_KEY_MAP_ID]);
  2638. //区域编号
  2639. val_card[JSON_KEY_AREA_ID] = card->area_id;
  2640. val_cards.append(val_card[JSON_KEY_AREA_ID]);
  2641. //部门编号
  2642. val_card[JSON_KEY_DEPT_ID] = card->dept_id;
  2643. val_cards.append(val_card[JSON_KEY_DEPT_ID]);
  2644. if(card->pos_state == DT_DOWN){
  2645. card->get_state_text();
  2646. //状态
  2647. val_card[JSON_KEY_STATE] = card->state;
  2648. val_cards.append(val_card[JSON_KEY_STATE]);
  2649. //运行状态
  2650. val_card[JSON_KEY_STATE_MOVING] = card->state_moving;
  2651. val_cards.append(val_card[JSON_KEY_STATE_MOVING]);
  2652. //业务状态
  2653. val_card[JSON_KEY_STATE_BIZ] = card->state_biz;
  2654. val_cards.append(val_card[JSON_KEY_STATE_BIZ]);
  2655. //速度
  2656. val_card[JSON_KEY_SPEED] = CFunctions::round(card->v,2);
  2657. val_cards.append(val_card[JSON_KEY_SPEED]);
  2658. }else{
  2659. //状态
  2660. val_card[JSON_KEY_STATE] = 0;
  2661. val_cards.append(val_card[JSON_KEY_STATE]);
  2662. //运行状态
  2663. val_card[JSON_KEY_STATE_MOVING] = 0;
  2664. val_cards.append(val_card[JSON_KEY_STATE_MOVING]);
  2665. //业务状态
  2666. val_card[JSON_KEY_STATE_BIZ] = 0;
  2667. val_cards.append(val_card[JSON_KEY_STATE_BIZ]);
  2668. //速度
  2669. val_card[JSON_KEY_SPEED] = 0;
  2670. val_cards.append(val_card[JSON_KEY_SPEED]);
  2671. }
  2672. root[JSON_ROOT_KEY_CMD] = (DT_DOWN == card->pos_state)? JSON_CMD_VALUE_DOWN_MINE : JSON_CMD_VALUE_UP_MINE;
  2673. root[JSON_ROOT_KEY_DATA].append(val_cards);
  2674. string ss = root.toStyledString();
  2675. return root.toFastString();
  2676. //旧版本json
  2677. //Json::Value root;
  2678. //Json::Value val_map;
  2679. //Json::Value val_maps;
  2680. //Json::Value val_card;
  2681. //Json::Value val_cards;
  2682. //char _time[STR_LEN_TIME];
  2683. //struct tm local_time;
  2684. //val_card[JSON_KEY_CARD_ID] = card->card_id;
  2685. //val_card[JSON_KEY_CARD_TYPE_ID] = card->card_type;
  2686. //val_card[JSON_KEY_CARD_NUM] = card->id;
  2687. //localtime_s(&local_time, &card->down_time);
  2688. //strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2689. //val_card[JSON_KEY_DOWN_TIME] = _time;
  2690. //val_card[JSON_KEY_WORK_TIME] = CFunctions::getworktimebysec((int)difftime(time(NULL), card->down_time));
  2691. //localtime_s(&local_time, &card->enter_area_time);
  2692. //strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2693. //val_card[JSON_KEY_ENTER_AREA_TIME] = _time;
  2694. //val_card[JSON_KEY_AREA_ID] = card->area_id;
  2695. //val_card[JSON_KEY_DEPT_ID] = card->dept_id;
  2696. //val_card[JSON_KEY_STATE] = card->state;
  2697. //localtime_s(&local_time, &card->rec_time);
  2698. //strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  2699. //val_card[JSON_KEY_REC_TIME] = _time;
  2700. //val_card[JSON_KEY_CORDINATE_X] = card->x;
  2701. //val_card[JSON_KEY_CORDINATE_Y] = card->y;
  2702. //val_card[JSON_KEY_CORDINATE_Z] = 0; // card->z;
  2703. //val_cards.append(val_card);
  2704. //val_map[JSON_KEY_MAP_ID] = card->map_id;
  2705. //val_map[JSON_KEY_POS_CARD] = val_cards;
  2706. //val_maps.append(val_map);
  2707. //root[JSON_ROOT_KEY_CMD] = (DT_DOWN == card->pos_state)? JSON_CMD_VALUE_DOWN_MINE : JSON_CMD_VALUE_UP_MINE;
  2708. //root[JSON_ROOT_KEY_DATA] = val_maps;
  2709. //string ss = root.toStyledString();
  2710. //return root.toFastString();
  2711. }
  2712. std::string CYAServerDlg::get_json_position()
  2713. {
  2714. Json::Value root;
  2715. int cnt = 0;
  2716. MapInfoMap::iterator it_map = mp_map_list.begin();
  2717. for(; it_map != mp_map_list.end(); ++it_map){
  2718. CardMap::iterator it = mp_card_list_all.begin();
  2719. for(; it != mp_card_list_all.end(); ++it){
  2720. /*if(it->second->pos_state != DT_DOWN){
  2721. continue;
  2722. }*/
  2723. if(it->second->issent) {
  2724. continue;
  2725. }
  2726. if(it->second->map_id != it_map->second->map_id){
  2727. continue;
  2728. }
  2729. if(!it->second->isdealed){
  2730. continue;
  2731. }
  2732. if(_isnan(it->second->x) || _isnan(it->second->y) || _isnan(it->second->v)){
  2733. continue;
  2734. }
  2735. Json::Value pos_cards;
  2736. Json::Value pos_card;
  2737. it->second->isdealed = false;
  2738. it->second->issent = true;
  2739. //卡号
  2740. pos_card[JSON_KEY_CARD_ID] = it->second->card_id;
  2741. pos_cards.append(pos_card[JSON_KEY_CARD_ID]);
  2742. //x,y坐标
  2743. pos_card[JSON_KEY_CORDINATE_X] = CFunctions::round(it->second->x, 2);
  2744. pos_cards.append(pos_card[JSON_KEY_CORDINATE_X]);
  2745. pos_card[JSON_KEY_CORDINATE_Y] = CFunctions::round(it->second->y, 2);
  2746. pos_cards.append(pos_card[JSON_KEY_CORDINATE_Y]);
  2747. int ms = 1000; //转为ms
  2748. //入井时间戳
  2749. double t = *((int64_t*)&it->second->down_time)*ms;
  2750. pos_card[JSON_KEY_DOWN_TIME] = t;
  2751. pos_cards.append(pos_card[JSON_KEY_DOWN_TIME]);
  2752. //进入区域时间戳
  2753. t = *((int64_t*)&it->second->enter_area_time)*ms;
  2754. pos_card[JSON_KEY_ENTER_AREA_TIME] = t;
  2755. pos_cards.append(pos_card[JSON_KEY_ENTER_AREA_TIME]);
  2756. //最后接收时间戳
  2757. t = *((int64_t*)&it->second->rec_time)*ms;
  2758. pos_card[JSON_KEY_REC_TIME] = t;
  2759. pos_cards.append(pos_card[JSON_KEY_REC_TIME]);
  2760. //工作时长
  2761. t = (int)difftime(time(NULL), it->second->down_time)*ms;
  2762. pos_card[JSON_KEY_WORK_TIME] = t;
  2763. pos_cards.append(pos_card[JSON_KEY_WORK_TIME]);
  2764. //地图编号
  2765. pos_card[JSON_KEY_MAP_ID] = it->second->map_id;
  2766. pos_cards.append(pos_card[JSON_KEY_MAP_ID]);
  2767. //区域编号
  2768. pos_card[JSON_KEY_AREA_ID] = it->second->area_id;
  2769. pos_cards.append(pos_card[JSON_KEY_AREA_ID]);
  2770. //部门编号
  2771. pos_card[JSON_KEY_DEPT_ID] = it->second->dept_id;
  2772. pos_cards.append(pos_card[JSON_KEY_DEPT_ID]);
  2773. it->second->get_state_text();
  2774. //状态
  2775. pos_card[JSON_KEY_STATE] = it->second->state;
  2776. pos_cards.append(pos_card[JSON_KEY_STATE]);
  2777. //运行状态
  2778. pos_card[JSON_KEY_STATE_MOVING] = it->second->state_moving;
  2779. pos_cards.append(pos_card[JSON_KEY_STATE_MOVING]);
  2780. //业务状态
  2781. pos_card[JSON_KEY_STATE_BIZ] = it->second->state_biz;
  2782. pos_cards.append(pos_card[JSON_KEY_STATE_BIZ]);
  2783. //速度
  2784. pos_card[JSON_KEY_SPEED] = CFunctions::round(it->second->v,2);
  2785. pos_cards.append(pos_card[JSON_KEY_SPEED]);
  2786. if(!pos_cards.isNull()){
  2787. root[JSON_ROOT_KEY_DATA].append(pos_cards);
  2788. cnt++;
  2789. }
  2790. }
  2791. }
  2792. std::string ret = "";
  2793. if(cnt > 0){
  2794. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_POS_MAP;
  2795. ret = root.toFastString().c_str();
  2796. }
  2797. return ret;
  2798. }
  2799. std::string CYAServerDlg::get_json_position_all()
  2800. {
  2801. Json::Value root;
  2802. int cnt = 0;
  2803. MapInfoMap::iterator it_map = mp_map_list.begin();
  2804. for(; it_map != mp_map_list.end(); ++it_map){
  2805. CardMap::iterator it = mp_card_list_all.begin();
  2806. for(; it != mp_card_list_all.end(); ++it){
  2807. if(it->second->map_id != it_map->second->map_id){
  2808. continue;
  2809. }
  2810. if(_isnan(it->second->x) || _isnan(it->second->y) || _isnan(it->second->v)){
  2811. continue;
  2812. }
  2813. it->second->issent = true;
  2814. Json::Value pos_cards;
  2815. Json::Value pos_card;
  2816. //卡号
  2817. pos_card[JSON_KEY_CARD_ID] = it->second->card_id;
  2818. pos_cards.append(pos_card[JSON_KEY_CARD_ID]);
  2819. //x,y坐标
  2820. pos_card[JSON_KEY_CORDINATE_X] = CFunctions::round(it->second->x, 2);
  2821. pos_cards.append(pos_card[JSON_KEY_CORDINATE_X]);
  2822. pos_card[JSON_KEY_CORDINATE_Y] = CFunctions::round(it->second->y, 2);
  2823. pos_cards.append(pos_card[JSON_KEY_CORDINATE_Y]);
  2824. int ms = 1000; //转为ms
  2825. //入井时间戳
  2826. double t = *((int64_t*)&it->second->down_time)*ms;
  2827. pos_card[JSON_KEY_DOWN_TIME] = t;
  2828. pos_cards.append(pos_card[JSON_KEY_DOWN_TIME]);
  2829. //进入区域时间戳
  2830. t = *((int64_t*)&it->second->enter_area_time)*ms;
  2831. pos_card[JSON_KEY_ENTER_AREA_TIME] = t;
  2832. pos_cards.append(pos_card[JSON_KEY_ENTER_AREA_TIME]);
  2833. //最后接收时间戳
  2834. t = *((int64_t*)&it->second->rec_time)*ms;
  2835. pos_card[JSON_KEY_REC_TIME] = t;
  2836. pos_cards.append(pos_card[JSON_KEY_REC_TIME]);
  2837. //工作时长
  2838. t = (int)difftime(time(NULL), it->second->down_time)*ms;
  2839. pos_card[JSON_KEY_WORK_TIME] = t;
  2840. pos_cards.append(pos_card[JSON_KEY_WORK_TIME]);
  2841. //地图编号
  2842. pos_card[JSON_KEY_MAP_ID] = it->second->map_id;
  2843. pos_cards.append(pos_card[JSON_KEY_MAP_ID]);
  2844. //区域编号
  2845. pos_card[JSON_KEY_AREA_ID] = it->second->area_id;
  2846. pos_cards.append(pos_card[JSON_KEY_AREA_ID]);
  2847. //部门编号
  2848. pos_card[JSON_KEY_DEPT_ID] = it->second->dept_id;
  2849. pos_cards.append(pos_card[JSON_KEY_DEPT_ID]);
  2850. it->second->get_state_text();
  2851. //状态
  2852. pos_card[JSON_KEY_STATE] = it->second->state;
  2853. pos_cards.append(pos_card[JSON_KEY_STATE]);
  2854. //运行状态
  2855. pos_card[JSON_KEY_STATE_MOVING] = it->second->state_moving;
  2856. pos_cards.append(pos_card[JSON_KEY_STATE_MOVING]);
  2857. //业务状态
  2858. pos_card[JSON_KEY_STATE_BIZ] = it->second->state_biz;
  2859. pos_cards.append(pos_card[JSON_KEY_STATE_BIZ]);
  2860. //速度
  2861. pos_card[JSON_KEY_SPEED] = CFunctions::round(it->second->v,2);
  2862. pos_cards.append(pos_card[JSON_KEY_SPEED]);
  2863. if(!pos_cards.isNull()){
  2864. root[JSON_ROOT_KEY_DATA].append(pos_cards);
  2865. cnt++;
  2866. }
  2867. }
  2868. }
  2869. std::string ret = "";
  2870. if(cnt > 0){
  2871. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_POS_MAP;
  2872. ret = root.toFastString().c_str();
  2873. }
  2874. return ret;
  2875. }
  2876. std::string CYAServerDlg::get_json_login()
  2877. {
  2878. Json::Value root;
  2879. Json::Value data;
  2880. data[JSON_KEY_USERNAME] = JSON_VALUE_USERNAME;
  2881. data[JSON_KEY_PASSWORD] = JSON_VALUE_PASSWORD;
  2882. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_LOGIN;
  2883. root[JSON_ROOT_KEY_DATA] = data;
  2884. return root.toFastString();
  2885. }
  2886. std::string CYAServerDlg::get_json_logout()
  2887. {
  2888. Json::Value root;
  2889. Json::Value data;
  2890. //data[JSON_KEY_USERNAME] = JSON_VALUE_USERNAME;
  2891. data["name"] = JSON_VALUE_USERNAME;
  2892. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_LOGOUT;
  2893. //root[JSON_ROOT_KEY_DATA] = data;
  2894. root["user"] = data;
  2895. return root.toFastString();
  2896. }
  2897. void CYAServerDlg::send_json_data(string cmd, string data, bool is_login /* = false*/)
  2898. {
  2899. USES_CONVERSION;
  2900. CC2UTF8 conv = (char*)data.c_str();
  2901. string utf8_data = conv.c_str();
  2902. CString strlog;
  2903. if(is_login){
  2904. if(is_websocket_ok){
  2905. _io->socket()->emit(cmd, utf8_data);
  2906. is_websocket_login = true;
  2907. strlog.Format(_T("%s: %s"), _T(LOG_SEND_JSON_DATA), _T("登录数据"));
  2908. show_log(strlog);
  2909. }
  2910. }else if(is_websocket_login){
  2911. strlog.Format(_T("%s: %s"), _T(LOG_SEND_JSON_DATA), _T("常规数据"));
  2912. _io->socket()->emit(cmd, utf8_data);
  2913. if(m_log_send_package){
  2914. wchar_t* p_data = CFunctions::c2wc(data.c_str());
  2915. writeErrorLog(L"JSON_S", p_data/*CFunctions::c2wc(data.c_str())*/,false);
  2916. if(p_data){
  2917. free(p_data);
  2918. p_data = NULL;
  2919. }
  2920. }
  2921. }
  2922. //strlog.Format(_T("%s: %s"), _T(LOG_SEND_JSON_DATA), CFunctions::c2wc(cmd.c_str()));
  2923. //show_log(strlog);
  2924. }
  2925. // 处理分站状态
  2926. void CYAServerDlg::deal_readers()
  2927. {
  2928. ReaderMap::iterator it = mp_reader_list.begin();
  2929. for(; it != mp_reader_list.end(); ++ it){
  2930. int ndiff = (int)difftime(time(NULL), it->second->rec_time);
  2931. if(STATUS_DEVICE_ERROR == it->second->state){ // 异常
  2932. if(ndiff < READER_TIMEOUT){ // 恢复正常
  2933. store_data_reader(it->second, ALARM_READER_LOST_END);
  2934. it->second->state = STATUS_DEVICE_NORMAL;
  2935. }
  2936. }else{
  2937. if(ndiff >= READER_TIMEOUT){ //异常
  2938. it->second->state = STATUS_DEVICE_ERROR;
  2939. it->second->lost_time = time(NULL);
  2940. store_data_reader(it->second, ALARM_READER_LOST_START);
  2941. }
  2942. }
  2943. }
  2944. }
  2945. void CYAServerDlg::deal_areas()
  2946. {
  2947. // 区域人数,区域超员数,区域超时数
  2948. int count_person, count_vehicle, count_total, count_over_time_person, count_over_time_vehicle;
  2949. int over_time_vehicle, over_time_person, over_time;
  2950. //TRACE(_T("time memcpy 9\n"));
  2951. time_t current_time(time(NULL));
  2952. AreaMap::iterator it_Area = mp_area_list.begin();
  2953. bool is_true;
  2954. for(; it_Area != mp_area_list.end(); ++it_Area){
  2955. count_person = count_vehicle = count_total = count_over_time_vehicle = count_over_time_person = 0;
  2956. over_time_person = it_Area->second->over_time_person * 60; // 转为秒
  2957. over_time_vehicle = it_Area->second->over_time_vehicle * 60; // 转为秒
  2958. over_time = over_time_person;
  2959. // 遍历卡,计数
  2960. CardMap::iterator it_card_person = it_Area->second->area_card_list_person.begin();
  2961. for(; it_card_person != it_Area->second->area_card_list_person.end(); ++it_card_person){
  2962. // 计数
  2963. count_total++;
  2964. count_person++;
  2965. // 超时
  2966. is_true = difftime(current_time, it_card_person->second->enter_area_time) > over_time;
  2967. if(is_true){
  2968. if(!it_card_person->second->is_area_over_time){
  2969. it_card_person->second->is_area_over_time = true;
  2970. it_card_person->second->time_area_over_time = current_time;
  2971. store_data_card(it_card_person->second, ALARM_CARD_OVER_TIME_AREA_START);
  2972. deal_alarm_card(it_card_person->second, &mp_card_list_area_over_time_person, is_true, AF_CARD_AREA_OVER_TIME);
  2973. }
  2974. over_time_person++;
  2975. }else if(it_card_person->second->is_area_over_time){ // 理论上不会走这条分支,应该走cards_leave_area()
  2976. it_card_person->second->is_area_over_time = false;
  2977. deal_alarm_card(it_card_person->second, &mp_card_list_area_over_time_person, is_true, AF_CARD_AREA_OVER_TIME);
  2978. }
  2979. }
  2980. over_time = over_time_vehicle;
  2981. CardMap::iterator it_card_vehicle = it_Area->second->area_card_list_vehicle.begin();
  2982. for(;it_card_vehicle != it_Area->second->area_card_list_vehicle.end(); ++it_card_vehicle){
  2983. // 计数
  2984. count_total++;
  2985. // 区域超速,暂无此逻辑
  2986. count_vehicle++;
  2987. // 超时
  2988. if(difftime(current_time, it_card_vehicle->second->enter_area_time) > over_time){
  2989. if(!it_card_vehicle->second->is_area_over_time){
  2990. it_card_vehicle->second->is_area_over_time = true;
  2991. it_card_vehicle->second->time_area_over_time = current_time;
  2992. store_data_card(it_card_person->second, ALARM_CARD_OVER_TIME_AREA_START);
  2993. deal_alarm_card(it_card_vehicle->second, &mp_card_list_area_over_time_vehicle, is_true, AF_CARD_AREA_OVER_TIME);
  2994. }
  2995. over_time_vehicle++;
  2996. }else if(it_card_vehicle->second->is_area_over_time){ // 理论上不会走这条分支,应该走cards_leave_area()
  2997. it_card_vehicle->second->is_area_over_time = false;
  2998. deal_alarm_card(it_card_vehicle->second, &mp_card_list_area_over_time_vehicle, is_true, AF_CARD_AREA_OVER_TIME);
  2999. }
  3000. }
  3001. it_Area->second->count_person = count_person;
  3002. it_Area->second->count_vehicle = count_vehicle;
  3003. it_Area->second->count_area_over_time_person = count_over_time_person;
  3004. it_Area->second->count_area_over_time_vehicle = count_over_time_vehicle;
  3005. // 区域禁入 人员
  3006. //if(it_Area->second->over_count_person == 0){
  3007. if(it_Area->second->area_type_id == 3){
  3008. if(count_person > 0){
  3009. if(!it_Area->second->is_area_forbidden_person){
  3010. it_Area->second->is_area_forbidden_person = true;
  3011. it_Area->second->count_area_forbidden_person = count_person;
  3012. it_Area->second->time_forbidden_person = current_time;
  3013. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_FORBIDDEN_PERSON_START);
  3014. deal_alarm_area(it_Area->second, &mp_area_forbidden_person, true, AF_AREA_FORBIDDEN);
  3015. }
  3016. }else{
  3017. if(it_Area->second->is_area_forbidden_person){
  3018. it_Area->second->is_area_forbidden_person = false; // 结束报警
  3019. store_data_area(it_Area->second, current_time, it_Area->second->time_forbidden_person, ALARM_AREA_FORBIDDEN_PERSON_END);
  3020. deal_alarm_area(it_Area->second, &mp_area_forbidden_person, false, AF_AREA_FORBIDDEN);
  3021. }
  3022. }
  3023. } else {
  3024. if(count_person > it_Area->second->over_count_person ){ // 区域人员超员
  3025. if(!it_Area->second->is_area_over_count_person){
  3026. it_Area->second->is_area_over_count_person = true;
  3027. it_Area->second->count_area_over_count_person = count_person - it_Area->second->over_count_person;
  3028. it_Area->second->time_over_count_person = current_time;
  3029. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_OVER_COUNT_PERSON_START);
  3030. deal_alarm_area(it_Area->second, &mp_area_over_count_person, true, AF_AREA_OVER_COUNT);
  3031. }
  3032. }else{
  3033. if(it_Area->second->is_area_over_count_person){ // 结束超员
  3034. it_Area->second->is_area_over_count_person = false;
  3035. store_data_area(it_Area->second, current_time, it_Area->second->time_over_count_person, ALARM_AREA_OVER_COUNT_PERSON_END);
  3036. deal_alarm_area(it_Area->second, &mp_area_over_count_person, false, AF_AREA_OVER_COUNT);
  3037. }
  3038. }
  3039. // 区域人员超时
  3040. if(count_over_time_person > 0){
  3041. if(!it_Area->second->is_area_over_time_person){
  3042. it_Area->second->is_area_over_time_person = true;
  3043. it_Area->second->time_over_time_person = current_time;
  3044. deal_alarm_area(it_Area->second, &mp_area_over_time_person, true, AF_AREA_OVER_TIME);
  3045. }
  3046. }else{
  3047. if(it_Area->second->is_area_over_time_person){ // 结束
  3048. it_Area->second->is_area_over_time_person = false;
  3049. deal_alarm_area(it_Area->second, &mp_area_over_time_person, false, AF_AREA_OVER_TIME);
  3050. }
  3051. }
  3052. }
  3053. // 区域禁入 车辆
  3054. //if(it_Area->second->over_count_vehicle == 0){
  3055. if(it_Area->second->area_type_id == 3){
  3056. if(count_vehicle > 0){
  3057. if(!it_Area->second->is_area_forbidden_vehicle){
  3058. it_Area->second->is_area_forbidden_vehicle = true;
  3059. it_Area->second->count_area_forbidden_vehicle = count_vehicle;
  3060. it_Area->second->time_forbidden_vehicle = current_time;
  3061. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_FORBIDDEN_VEHICLE_START);
  3062. deal_alarm_area(it_Area->second, &mp_area_forbidden_vehicle, true, AF_AREA_FORBIDDEN);
  3063. }
  3064. }else{
  3065. if(it_Area->second->is_area_forbidden_vehicle){
  3066. it_Area->second->is_area_forbidden_vehicle = false; // 结束报警
  3067. store_data_area(it_Area->second, current_time, it_Area->second->time_forbidden_vehicle, ALARM_AREA_FORBIDDEN_VEHICLE_END);
  3068. deal_alarm_area(it_Area->second, &mp_area_forbidden_vehicle, false, AF_AREA_FORBIDDEN);
  3069. }
  3070. }
  3071. }else {
  3072. if(count_vehicle > it_Area->second->over_count_vehicle){ // 区域车辆超员
  3073. if(!it_Area->second->is_area_over_count_vehicle){
  3074. it_Area->second->is_area_over_count_vehicle = true;
  3075. it_Area->second->count_area_over_count_vehicle = count_vehicle - it_Area->second->over_count_vehicle;
  3076. it_Area->second->time_over_count_vehicle = current_time;
  3077. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_OVER_COUNT_VEHICLE_START);
  3078. deal_alarm_area(it_Area->second, &mp_area_over_count_vehicle, true, AF_AREA_OVER_COUNT);
  3079. }
  3080. }else{
  3081. it_Area->second->is_area_over_count_vehicle = false; // 结束
  3082. store_data_area(it_Area->second, current_time, it_Area->second->time_over_count_vehicle, ALARM_AREA_OVER_COUNT_VEHICLE_END);
  3083. deal_alarm_area(it_Area->second, &mp_area_over_count_vehicle, false, AF_AREA_OVER_COUNT);
  3084. }
  3085. // 区域车辆超时
  3086. if(count_over_time_vehicle > 0){
  3087. if(!it_Area->second->is_area_over_time_vehicle){
  3088. it_Area->second->is_area_over_time_vehicle = true;
  3089. it_Area->second->time_over_time_vehicle = current_time;
  3090. deal_alarm_area(it_Area->second, &mp_area_over_time_vehicle, true, AF_AREA_OVER_TIME);
  3091. }
  3092. }else{
  3093. if(it_Area->second->is_area_over_time_vehicle){ // 结束
  3094. it_Area->second->is_area_over_time_vehicle = false;
  3095. deal_alarm_area(it_Area->second, &mp_area_over_time_vehicle, false, AF_AREA_OVER_TIME);
  3096. // 写入数据库
  3097. }
  3098. }
  3099. }
  3100. }
  3101. }
  3102. void CYAServerDlg::card_enter_mine( Card* card )
  3103. {
  3104. if(!card->is_pos_state_changed(TEST_CONFIRM_COUNT)){ // 位置没有变化
  3105. if(DT_DOWN == card->pos_state){
  3106. if(CT_PERSON == card->card_type){
  3107. if(difftime(time(NULL), card->get_working_time()) > sls_setting.over_time_person){
  3108. store_data_card(card, ALARM_CARD_OVER_TIME_START);
  3109. deal_alarm_card(card, &mp_card_list_over_time_person, true, AF_CARD_OVER_TIME);
  3110. }
  3111. }else if(CT_VEHICLE == card->card_type){
  3112. if(difftime(time(NULL), card->get_working_time()) > sls_setting.over_time_vehicle){
  3113. store_data_card(card, ALARM_CARD_OVER_TIME_START);
  3114. deal_alarm_card(card, &mp_card_list_over_time_vehicle, true, AF_CARD_OVER_TIME);
  3115. }
  3116. if(card->get_speed() > sls_setting.over_speed){
  3117. store_data_card(card, ALARM_CARD_OVER_SPEED_START);
  3118. deal_alarm_card(card, &mp_card_list_over_speed_vehicle, true, AF_CARD_OVER_SPEED);
  3119. }
  3120. }
  3121. }
  3122. }else{
  3123. if(DT_UP == card->pos_state){ // 升井
  3124. card_up_mine(card);
  3125. // 升井,补全离开区域时间
  3126. store_data_card(card, HIS_AREA_LOCATION_LEAVE);
  3127. }else if(DT_DOWN == card->pos_state){ // 入井
  3128. card_down_mine(card);
  3129. }
  3130. send_json_data(JSON_CMD_VALUE_PUSH, get_json_down_and_up(card));
  3131. }
  3132. }
  3133. void CYAServerDlg::card_enter_park( Card* card )
  3134. {
  3135. if(card->is_pos_state_pack_changed(TEST_CONFIRM_COUNT)){ // 位置没有变化
  3136. if(AAT_ENTER == card->pos_state_park){ //
  3137. card->up_time = card->deal_time;
  3138. store_data_card(card, RPT_ATTEND_UP);
  3139. }else if(AAT_LEAVE == card->pos_state_park){ // 入井
  3140. card->down_time = card->deal_time;
  3141. store_data_card(card, RPT_ATTEND_DOWN);
  3142. }
  3143. }
  3144. }
  3145. void CYAServerDlg::card_enter_map( Card* card )
  3146. {
  3147. if(card->map_id == card->map_id_old) return ;
  3148. // 离开原地图,进入新地图
  3149. MapInfoMap::iterator it_map_old = mp_map_list.find(card->map_id_old);
  3150. if(it_map_old != mp_map_list.end()){
  3151. if(CT_PERSON == card->card_type){
  3152. CardMap::iterator it_card = it_map_old->second->map_card_list_person.find(card->card_id);
  3153. if(it_card != it_map_old->second->map_card_list_person.end()){
  3154. it_map_old->second->map_card_list_person.erase(it_card);
  3155. }
  3156. }else if(CT_VEHICLE == card->card_type){
  3157. CardMap::iterator it_card = it_map_old->second->map_card_list_vehicle.find(card->card_id);
  3158. if(it_card != it_map_old->second->map_card_list_vehicle.end()){
  3159. it_map_old->second->map_card_list_vehicle.erase(it_card);
  3160. }
  3161. }
  3162. }
  3163. card->map_id_old = card->map_id;
  3164. MapInfoMap::iterator it_map = mp_map_list.find(card->map_id);
  3165. if(it_map != mp_map_list.end()){
  3166. card->map_scale = it_map->second->map_scale;
  3167. if(CT_PERSON == card->card_type){
  3168. it_map->second->map_card_list_person.insert(make_pair(card->card_id, card));
  3169. }else if(CT_VEHICLE == card->card_type){
  3170. it_map->second->map_card_list_vehicle.insert(make_pair(card->card_id, card));
  3171. }
  3172. }
  3173. }
  3174. //卡card进入区域
  3175. void CYAServerDlg::card_enter_area( Card* card)
  3176. {
  3177. _point p1, p2;
  3178. double r, scale;
  3179. bool b_in_area = false;
  3180. p1.x = card->x, p1.y = card->y, p1.z = card->z;
  3181. //TRACE(_T("x: %f , y: %f ,z: %f \n"),p1.x,p1.y,p1.z);
  3182. AreaMap::iterator it_area_cur = mp_area_list.find(card->area_id);
  3183. if(it_area_cur != mp_area_list.end()){ // 在区域中
  3184. if(it_area_cur->second->is_in_polygon(p1)) { // 区域没有变化
  3185. return;
  3186. }
  3187. }
  3188. int old_area_id = card->area_id;
  3189. AreaMap::iterator it_area = mp_area_list.begin();
  3190. for(; it_area != mp_area_list.end(); ++it_area){
  3191. if(card->map_id == it_area->second->map_id){ // 必须在同一地图内
  3192. if(it_area->second->is_in_polygon(p1)){ // 在区域内
  3193. if(it_area->second->area_id == old_area_id){
  3194. return;
  3195. }
  3196. if(it_area_cur != mp_area_list.end()){ // 离开区域
  3197. store_data_card(card, HIS_AREA_LOCATION_LEAVE);
  3198. card_leave_area(card, it_area_cur->second);
  3199. }
  3200. card->area_id = it_area->second->area_id;
  3201. card->enter_area_time = card->deal_time;
  3202. card->pos_state = (0 == it_area->second->area_type_id) ? DT_UP :DT_DOWN;
  3203. card->pos_state_park = it_area->second->is_att;
  3204. if(CT_PERSON == card->card_type){
  3205. it_area->second->area_card_list_person.insert(make_pair(card->card_id, card));
  3206. //if(it_area->second->over_count_person == 0){
  3207. if(it_area->second->area_type_id == 3){
  3208. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3209. deal_alarm_card(card, &mp_card_list_forbidden_person, true, AF_CARD_AREA_FORBIDDEN);
  3210. }
  3211. }else if(CT_VEHICLE == card->card_type){
  3212. it_area->second->area_card_list_vehicle.insert(make_pair(card->card_id, card));
  3213. //if(it_area->second->over_count_vehicle == 0){
  3214. if(it_area->second->area_type_id == 3){
  3215. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3216. deal_alarm_card(card, &mp_card_list_forbidden_vehicle, true, AF_CARD_AREA_FORBIDDEN);
  3217. }
  3218. }
  3219. b_in_area = true;
  3220. break;
  3221. }
  3222. }
  3223. }
  3224. if(!b_in_area){
  3225. // 找不到区域,使用分站所属区域
  3226. //从区域列表中查找卡所属分站的区域ID
  3227. AreaMap::iterator it_area_reader = mp_area_list.find(card->p_reader->area_id);
  3228. if(it_area_reader == mp_area_list.end()){
  3229. return;
  3230. }
  3231. if(card->area_id == it_area_reader->second->area_id){
  3232. return;
  3233. }
  3234. if(it_area_cur != mp_area_list.end()){
  3235. store_data_card(card, HIS_AREA_LOCATION_LEAVE);
  3236. card_leave_area(card, it_area_cur->second);
  3237. }
  3238. card->area_id = it_area_reader->second->area_id;
  3239. card->enter_area_time = card->deal_time;
  3240. card->pos_state = (0 == it_area_reader->second->area_type_id) ? DT_UP :DT_DOWN;
  3241. card->pos_state_park = it_area_reader->second->is_att;
  3242. if(CT_PERSON == card->card_type){
  3243. it_area_reader->second->area_card_list_person.insert(make_pair(card->card_id, card));
  3244. //if(it_area_reader->second->over_count_person == 0){
  3245. if(it_area_reader->second->area_type_id == 3){
  3246. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3247. deal_alarm_card(card, &mp_card_list_forbidden_person, true, AF_CARD_AREA_FORBIDDEN);
  3248. }
  3249. }else if(CT_VEHICLE == card->card_type){
  3250. it_area_reader->second->area_card_list_vehicle.insert(make_pair(card->card_id, card));
  3251. //if(it_area_reader->second->over_count_vehicle == 0){
  3252. if(it_area_reader->second->area_type_id == 3){
  3253. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3254. deal_alarm_card(card, &mp_card_list_forbidden_vehicle, true, AF_CARD_AREA_FORBIDDEN);
  3255. }
  3256. }
  3257. }
  3258. // 保存区域信息
  3259. store_data_card(card, HIS_AREA_LOCATION_ENTER);
  3260. // 升入井判断
  3261. card_enter_mine(card);
  3262. if(CT_VEHICLE == card->card_type){
  3263. card_enter_park(card);
  3264. }
  3265. }
  3266. void CYAServerDlg::card_leave_area( Card* card, Area* area)
  3267. {
  3268. // 从列表中删除
  3269. CardMap *card_map, *alarm_card_map, *alarm_forbidden_map;
  3270. if(CT_PERSON == card->card_type){
  3271. card_map = &area->area_card_list_person;
  3272. alarm_card_map = &mp_card_list_area_over_time_person;
  3273. alarm_forbidden_map = &mp_card_list_forbidden_person;
  3274. }else if(CT_VEHICLE == card->card_type){
  3275. card_map = &area->area_card_list_vehicle;
  3276. alarm_card_map = &mp_card_list_area_over_time_vehicle;
  3277. alarm_forbidden_map = &mp_card_list_forbidden_vehicle;
  3278. }
  3279. CardMap::iterator it_card = card_map->find(card->card_id);
  3280. if(it_card != card_map->end()){
  3281. // 如果区域超时
  3282. if(it_card->second->is_area_over_time){
  3283. it_card->second->is_area_over_time = false;
  3284. store_data_card(card, ALARM_CARD_OVER_TIME_AREA_END);
  3285. deal_alarm_card(card, alarm_card_map, false, AF_CARD_AREA_OVER_TIME);
  3286. }
  3287. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_END);
  3288. deal_alarm_card(card, alarm_forbidden_map, false, AF_CARD_AREA_FORBIDDEN);
  3289. // 先处理,后删除
  3290. card_map->erase(it_card);
  3291. }
  3292. }
  3293. void CYAServerDlg::reset_map_card()
  3294. {
  3295. MapInfoMap::iterator it_map = mp_map_list.begin();
  3296. for(; it_map != mp_map_list.end(); ++ it_map){
  3297. //用map.erase(map.begin(),map.end())比较好 清空元素
  3298. it_map->second->map_card_list_person.erase(it_map->second->map_card_list_person.begin(), it_map->second->map_card_list_person.end());
  3299. it_map->second->map_card_list_vehicle.erase(it_map->second->map_card_list_vehicle.begin(), it_map->second->map_card_list_vehicle.end());
  3300. //it_map->second->map_card_list.clear(); // 删除map
  3301. }
  3302. }
  3303. bool CYAServerDlg::is_in_rectangle( _point p, double dblleft, double dbltop, double dblright, double dblbottom )
  3304. {
  3305. return (p.x >= dblleft && p.x <= dblright && p.y >= dbltop && p.y <= dblbottom);
  3306. }
  3307. bool CYAServerDlg::is_in_circle( _point p1, _point p2, double r, double scale )
  3308. {
  3309. return sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y)) <= r * scale;
  3310. }
  3311. void CYAServerDlg::package_data()
  3312. {
  3313. string strJson = get_json_position();
  3314. // 定位数据
  3315. if(strJson == "") return ;
  3316. send_json_data(JSON_CMD_VALUE_PUSH, strJson);
  3317. g_last_send_time = ::GetTickCount();
  3318. }
  3319. void CYAServerDlg::package_data_test()
  3320. {
  3321. Json::Value root;
  3322. Json::Value valStaffer;
  3323. Json::Value valStaffers;
  3324. Json::Value valDistance;
  3325. Json::Value valDist;
  3326. Json::Value valReaders;
  3327. Json::Value valReader;
  3328. int nCnt = 0;
  3329. std::string strJson;
  3330. for(int i = 1; i < 4; i++){
  3331. valStaffer["id"] = i;
  3332. valStaffer["x"] = 50 * (m_nCountClick + i);
  3333. valStaffer["y"] = 50 * sin(20.0) * (m_nCountClick + i);
  3334. valStaffers.append(valStaffer);
  3335. nCnt++;
  3336. }
  3337. root["staffer"] = valStaffers;
  3338. //map<DWORD, READERINFO*>::iterator itReader = m_mpReaderInfo.begin();
  3339. //for(; itReader != m_mpReaderInfo.end(); ++itReader)
  3340. //{
  3341. // valReader["id"] = (unsigned int)itReader->second->readerid;
  3342. // valReader["x"] = itReader->second->X;
  3343. // valReader["y"] = itReader->second->Y;
  3344. // valReaders.append(valReader);
  3345. //}
  3346. root["reader"] = valReaders;
  3347. if(nCnt == 0){
  3348. return;
  3349. }
  3350. strJson = root.toFastString();
  3351. send_json_data(JSON_CMD_VALUE_PUSH, strJson.c_str());
  3352. }
  3353. void CYAServerDlg::formatByteArray( CString &strBuf, BYTE * buf, int nLen )
  3354. {
  3355. CString strBuf1 = _T("");
  3356. for(int i = 0; i < nLen; i++){
  3357. strBuf1.Format(_T("%.2X "),buf[i]);
  3358. strBuf += strBuf1;
  3359. if((i + 1) % 16 == 0){
  3360. strBuf += _T("\n");
  3361. }
  3362. }
  3363. }
  3364. void CYAServerDlg::writeErrorLog( const CString strFile, const CString strErr, bool bTime /*= true*/ )
  3365. {
  3366. LogInfo* err = new LogInfo;
  3367. err->handle = NULL;
  3368. err->useTime = false;
  3369. err->path = NULL;
  3370. err->strLog = NULL;
  3371. err->handle = this;
  3372. err->useTime = bTime;
  3373. err->path = CFunctions::CString2char(strFile);
  3374. err->strLog = CFunctions::CString2char(strErr);
  3375. QueueUserWorkItem(_write_error_log, (LPVOID)err, WT_EXECUTEDEFAULT);
  3376. }
  3377. BOOL CYAServerDlg::openLogFile(CString strFile)
  3378. {
  3379. TCHAR lpstrCurDir[MAX_PATH] = _T("");
  3380. CString ctemp;
  3381. GetModuleFileName(NULL,lpstrCurDir,MAX_PATH);
  3382. ctemp = lpstrCurDir;
  3383. int index = ctemp.ReverseFind('\\');
  3384. CString strFilePath = ctemp.Left(index+1);
  3385. CString strFileName;
  3386. strFileName.Format(_T("%s_%s.log"), strFile, COleDateTime::GetCurrentTime().Format(_T("%Y%m%d")));
  3387. strFilePath += _T("error\\");
  3388. strFilePath += strFileName;
  3389. if (cfErrorLog == NULL){
  3390. return FALSE;
  3391. }
  3392. BOOL bOpenFile=FALSE;//是否需要重新打开文件
  3393. if(cfErrorLog.m_pStream==NULL){
  3394. bOpenFile=TRUE;
  3395. }else{
  3396. if(cfErrorLog.GetFilePath()!=strFilePath){
  3397. bOpenFile=TRUE;
  3398. cfErrorLog.Close();
  3399. }
  3400. }
  3401. if(bOpenFile){
  3402. return cfErrorLog.Open(strFilePath, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::shareDenyNone);
  3403. }else{
  3404. return TRUE;
  3405. }
  3406. }
  3407. BOOL CYAServerDlg::openLogFile(const char* strFile)
  3408. {
  3409. TCHAR lpstrCurDir[MAX_PATH] = _T("");
  3410. CString ctemp;
  3411. GetModuleFileName(NULL,lpstrCurDir,MAX_PATH);
  3412. ctemp = lpstrCurDir;
  3413. int index = ctemp.ReverseFind('\\');
  3414. CString strFilePath = ctemp.Left(index+1);
  3415. CString strFileName;
  3416. //CString strTemp;
  3417. //strTemp.Format(_T("%S"),strFile);
  3418. strFileName.Format(_T("%S_%s.log"), strFile, COleDateTime::GetCurrentTime().Format(_T("%Y%m%d")));
  3419. strFilePath += _T("error\\");
  3420. strFilePath += strFileName;
  3421. if (cfErrorLog == NULL){
  3422. return FALSE;
  3423. }
  3424. BOOL bOpenFile=FALSE;//是否需要重新打开文件
  3425. if(cfErrorLog.m_pStream==NULL){
  3426. bOpenFile=TRUE;
  3427. }else{
  3428. if(cfErrorLog.GetFilePath()!=strFilePath){
  3429. bOpenFile=TRUE;
  3430. cfErrorLog.Close();
  3431. }
  3432. }
  3433. if(bOpenFile){
  3434. return cfErrorLog.Open(strFilePath, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::shareDenyNone);
  3435. }else{
  3436. return TRUE;
  3437. }
  3438. }
  3439. void CYAServerDlg::OnBnExit()
  3440. {
  3441. stop_tcp_server();
  3442. ws_logout();
  3443. is_websocket_login = false;
  3444. clear_all_list();
  3445. GetConnPool().CloseAllConn();
  3446. CDialogEx::OnCancel();
  3447. }
  3448. void CYAServerDlg::OnBnSyncTime()
  3449. {
  3450. send_sync_reader();
  3451. }
  3452. CYAServerDlg::~CYAServerDlg()
  3453. {
  3454. release_memory();
  3455. ws_close();
  3456. }
  3457. void CYAServerDlg::OnConnected()
  3458. {
  3459. is_websocket_ok = true;
  3460. //Sleep(50); // need delay
  3461. time_ws_connect = ::GetTickCount();
  3462. }
  3463. void CYAServerDlg::OnClosed( client::close_reason const& reason )
  3464. {
  3465. int i = -1;
  3466. if(reason == client::close_reason_drop){
  3467. i = (int) reason;
  3468. }else{
  3469. i = (int) reason;
  3470. }
  3471. }
  3472. void CYAServerDlg::OnFailed()
  3473. {
  3474. is_websocket_login = false;
  3475. is_websocket_ok = false;
  3476. _io->close();
  3477. }
  3478. void CYAServerDlg::ws_open()
  3479. {
  3480. //m_ws_url="ws://localhost:8086/";
  3481. _io->connect(m_ws_url);
  3482. CString strlog = _T("");
  3483. //strlog.Format(_T("%s: %s"), _T(LOG_CONNECT_WEB_SERVER), CFunctions::c2wc(m_ws_url.c_str()));
  3484. wchar_t* p = CFunctions::c2wc(m_ws_url.c_str());
  3485. strlog.Format(_T("%s: %s"), _T(LOG_CONNECT_WEB_SERVER), p);
  3486. if(p){
  3487. free(p);
  3488. p = NULL;
  3489. }
  3490. show_log(strlog);
  3491. }
  3492. void CYAServerDlg::OnPushMessage()
  3493. {
  3494. string aa = "";
  3495. }
  3496. void CYAServerDlg::store_data_card( Card* card, int tag )
  3497. {
  3498. char sql[LENGTH_SQL] = {0};
  3499. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  3500. struct tm local_time, local_time_ex;
  3501. localtime_s(&local_time, &card->deal_time);
  3502. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  3503. bool b_exec = false;
  3504. switch(tag){
  3505. case TEST_LOCATE_COMPARE:
  3506. {
  3507. b_exec = true;
  3508. sprintf_s(sql, LENGTH_SQL,
  3509. "INSERT INTO test_locate_compare(x, y, xx, yy, x1, x2, x3, x4, y1, y2, y3, y4, rec_time)\
  3510. VALUES(%.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, '%s');",
  3511. card->x, card->y, card->xx, card->yy, card->x1, card->x2, card->x3, card->x4,
  3512. card->y1, card->y2, card->y3, card->y4, _time);
  3513. break;
  3514. }
  3515. case TEST_LOCATE_DATA:
  3516. {
  3517. b_exec = true;
  3518. sprintf_s(sql, LENGTH_SQL,
  3519. "INSERT INTO test_locatedata(card_id, reader_id, antenna_id, \
  3520. reader_stamp, card_stamp, locatetime, distance, stamp_type, power_state,\
  3521. accelerate, rec_time, card_x, card_y) \
  3522. VALUES(%s, %d, %d, %d, %d, %lld, %f, %d, %d, %d, '%s', %.4f, %.4f);",
  3523. card->card_id.c_str(), card->reader_id, card->antenna_id, card->p_reader->tick_count, card->time_stamp,
  3524. card->flying_time, card->distance, card->ranging_type, card->power_state, card->accelerate_state,
  3525. _time, card->x, card->y);
  3526. break;
  3527. }
  3528. case HIS_LOCATION:
  3529. {
  3530. if(card->map_id != 0 && card->area_id != 0){
  3531. b_exec = true;
  3532. sprintf_s(sql, LENGTH_SQL,
  3533. "INSERT INTO his_location(card_id, cur_time, x, y, z, map_id, area_id, state) VALUES(%s, '%s', %.3f, %.3f, %.3f, %d, %d, %d);",
  3534. card->card_id.c_str(), _time, card->x, card->y, card->z, card->map_id, card->area_id, card->state);
  3535. }
  3536. break;
  3537. }
  3538. case HIS_RAW_DATA:
  3539. {
  3540. b_exec = true;
  3541. sprintf_s(sql, LENGTH_SQL,
  3542. "INSERT INTO his_raw_data(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
  3543. fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time ) \
  3544. VALUES(%s, %d, %d, %d, %d, %lld, %4.f, %d, %d, %d, '%s', '%s');",
  3545. card->card_id.c_str(), card->reader_id, card->antenna_id, card->reader_tickcount, card->time_stamp,
  3546. card->flying_time, card->distance, card->ranging_type, card->power_state, card->accelerate_state,
  3547. card->str_his_time.c_str(), card->str_rec_time.c_str());
  3548. break;
  3549. }
  3550. case HIS_AREA_LOCATION_ENTER:
  3551. {
  3552. if(card->map_id != 0 && card->area_id != 0){
  3553. b_exec = true;
  3554. sprintf_s(sql, LENGTH_SQL,
  3555. "INSERT INTO his_location_area(card_id, area_id, map_id, enter_time) VALUES(%s, %d, %d, '%s');",
  3556. card->card_id.c_str() , card->area_id, card->map_id, _time);
  3557. }
  3558. break;
  3559. }
  3560. case HIS_AREA_LOCATION_LEAVE:
  3561. {
  3562. if(card->map_id != 0 && card->area_id != 0){
  3563. b_exec = true;
  3564. localtime_s(&local_time_ex, &card->enter_area_time);
  3565. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3566. sprintf_s(sql, LENGTH_SQL,
  3567. "UPDATE his_location_area SET leave_time = '%s' WHERE card_id = %s AND area_id=%d AND enter_time = '%s';",
  3568. _time, card->card_id.c_str(), card->area_id, _time_ex);
  3569. }
  3570. break;
  3571. }
  3572. case RPT_ATTEND_DOWN:
  3573. {
  3574. if(card->map_id != 0 && card->area_id != 0){
  3575. b_exec = true;
  3576. //sprintf_s(sql, LENGTH_SQL,
  3577. // "INSERT INTO rpt_attendance(card_id, start_time, att_date) VALUES(%s, '%s', '%s');",
  3578. // card->card_id.c_str(), _time, _time);
  3579. sprintf_s(sql, LENGTH_SQL,
  3580. "CALL add_att(%s, '%s', '%s');", card->card_id.c_str(), _time, _time);
  3581. }
  3582. break;
  3583. }
  3584. case RPT_ATTEND_UP:
  3585. {
  3586. if(card->map_id != 0 && card->area_id != 0){
  3587. b_exec = true;
  3588. localtime_s(&local_time_ex, &card->down_time);
  3589. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3590. //sprintf_s(sql, LENGTH_SQL,
  3591. // "UPDATE rpt_attendance SET end_time = '%s' WHERE card_id = %s AND start_time = '%s';",
  3592. // _time, card->card_id.c_str(), _time_ex);
  3593. sprintf_s(sql, LENGTH_SQL,
  3594. "CALL add_att(%s, '%s', '%s');", card->card_id.c_str(), _time, _time_ex);
  3595. }
  3596. break;
  3597. }
  3598. case ALARM_CARD_LOW_POWER_START:
  3599. {
  3600. b_exec = true;
  3601. int alarm_type_id = ATID_POWER;
  3602. sprintf_s(sql, LENGTH_SQL,
  3603. "INSERT INTO his_alarm_card(card_id, alarm_type_id, card_type_id, start_time) \
  3604. VALUES(%s, %d, %d, '%s');",
  3605. card->card_id.c_str(), alarm_type_id, card->card_type, _time);
  3606. break;
  3607. }
  3608. case ALARM_CARD_LOW_POWER_END:
  3609. {
  3610. b_exec = true;
  3611. localtime_s(&local_time_ex, &card->low_power_time);
  3612. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3613. int alarm_type_id = ATID_POWER;
  3614. sprintf_s(sql, LENGTH_SQL,
  3615. "UPDATE his_alarm_card SET end_time = '%s' WHERE card_id=%s AND alarm_type_id=%d AND start_time = '%s';",
  3616. _time, card->card_id.c_str(), alarm_type_id, _time_ex);
  3617. break;
  3618. }
  3619. //case ALARM_CARD_OVER_TIME_AREA_START:
  3620. // {
  3621. // int alarm_type_id = ATID_AREA_OVER_TIME_PERSON;
  3622. // if(CT_VEHICLE == card->card_type){
  3623. // alarm_type_id = ATID_AREA_OVER_TIME_VEHICLE;
  3624. // }
  3625. // sprintf_s(sql, LENGTH_SQL,
  3626. // "INSERT INTO his_alarm_card(card_id, alarm_type_id, card_type_id, start_time) \
  3627. // VALUES(%s, %d, %d, '%s')",
  3628. // card->card_id.c_str(), alarm_type_id, card->card_type, _time);
  3629. // break;
  3630. // }
  3631. //case ALARM_CARD_OVER_TIME_AREA_END:
  3632. // {
  3633. // localtime_s(&local_time_ex, &card->time_area_over_time);
  3634. // strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3635. // int alarm_type_id = ATID_AREA_OVER_TIME_PERSON;
  3636. // if(CT_VEHICLE == card->card_type){
  3637. // alarm_type_id = ATID_AREA_OVER_TIME_VEHICLE;
  3638. // }
  3639. // sprintf_s(sql, LENGTH_SQL,
  3640. // "UPDATE his_alarm_card SET end_time = '%s' \
  3641. // WHERE card_id=%s AND alarm_type_id=%d AND start_time = '%s';",
  3642. // _time, card->card_id.c_str(), alarm_type_id, _time_ex);
  3643. // break;
  3644. // }
  3645. //case ALARM_CARD_OVER_TIME_START:
  3646. // {
  3647. // int alarm_type_id = ATID_OVER_TIME_PERSON;
  3648. // if(CT_VEHICLE == card->card_type){
  3649. // alarm_type_id = ATID_OVER_TIME_VEHICLE;
  3650. // }
  3651. // sprintf_s(sql, LENGTH_SQL,
  3652. // "INSERT INTO his_alarm_card(card_id, alarm_type_id, card_type_id, start_time) \
  3653. // VALUES(%s, %d, %d, '%s')",
  3654. // card->card_id.c_str(), alarm_type_id, card->card_type, _time);
  3655. // break;
  3656. // }
  3657. //case ALARM_CARD_OVER_TIME_END:
  3658. // {
  3659. // localtime_s(&local_time_ex, &card->time_over_time);
  3660. // strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3661. // int alarm_type_id = ATID_OVER_TIME_PERSON;
  3662. // if(CT_VEHICLE == card->card_type){
  3663. // alarm_type_id = ATID_OVER_TIME_VEHICLE;
  3664. // }
  3665. // sprintf_s(sql, LENGTH_SQL,
  3666. // "UPDATE his_alarm_card SET end_time = '%s' \
  3667. // WHERE card_id=%s AND alarm_type_id=%d AND start_time = '%s';",
  3668. // _time, card->card_id.c_str(), alarm_type_id, _time_ex);
  3669. // break;
  3670. // }
  3671. default:
  3672. return;
  3673. }
  3674. try
  3675. {
  3676. if(b_exec){
  3677. execute_sql(sql);
  3678. }
  3679. }
  3680. catch (...)
  3681. {
  3682. CString str = _T("");
  3683. //str.Format(_T("%s\n"), CFunctions::c2wc(sql));
  3684. wchar_t* p = CFunctions::c2wc(sql);
  3685. str.Format(_T("%s\n"), p);
  3686. writeErrorLog(_T("SQL_S"), str);
  3687. //str = _T("");
  3688. str.Empty();
  3689. if(p){
  3690. free(p);
  3691. p = NULL;
  3692. }
  3693. }
  3694. }
  3695. std::string CYAServerDlg::get_json_counting()
  3696. {
  3697. Json::Value root;
  3698. Json::Value data;
  3699. Json::Value mapcounts;
  3700. int total_count = 0,total_count_vehicle = 0,total_count_person = 0;
  3701. int map_count_total, map_count_vehicle, map_count_person;
  3702. int area_count_total, area_count_vehicle, area_count_person;
  3703. MapInfoMap::iterator it_map = mp_map_list.begin();
  3704. for(; it_map != mp_map_list.end(); ++it_map){
  3705. Json::Value mapcount;
  3706. Json::Value areacounts;
  3707. // area
  3708. map_count_total = map_count_vehicle = map_count_person = 0;
  3709. AreaMap::iterator it_area = it_map->second->map_area_list.begin();
  3710. for(; it_area != it_map->second->map_area_list.end(); ++it_area){
  3711. area_count_total = area_count_vehicle = area_count_person = 0;
  3712. Json::Value areacount;
  3713. // person
  3714. CardMap::iterator it_card = it_area->second->area_card_list_person.begin();
  3715. for(; it_card != it_area->second->area_card_list_person.end(); ++ it_card){
  3716. if(DT_DOWN == it_card->second->pos_state){
  3717. area_count_person++;
  3718. area_count_total++;
  3719. } else {
  3720. continue;
  3721. }
  3722. }
  3723. // vehicle
  3724. it_card = it_area->second->area_card_list_vehicle.begin();
  3725. for(; it_card != it_area->second->area_card_list_vehicle.end(); ++ it_card){
  3726. if(DT_DOWN == it_card->second->pos_state){
  3727. area_count_vehicle++;
  3728. area_count_total++;
  3729. } else {
  3730. continue;
  3731. }
  3732. }
  3733. //if(area_count_total > 0){
  3734. areacount[JSON_KEY_COUNTING_AREA_COUNT_PERSON] = area_count_person;
  3735. areacount[JSON_KEY_COUNTING_AREA_COUNT_VEHICLE] = area_count_vehicle;
  3736. areacount[JSON_KEY_COUNTING_AREA_COUNT] = area_count_total;
  3737. areacount[JSON_KEY_COUNTING_AREA_ID] = it_area->second->area_id;
  3738. map_count_total += area_count_total;
  3739. map_count_person += area_count_person;
  3740. map_count_vehicle += area_count_vehicle;
  3741. areacounts.append(areacount);
  3742. //}
  3743. }
  3744. //if(map_count_total > 0){
  3745. mapcount[JSON_KEY_COUNTING_MAP_ID] = it_map->second->map_id;
  3746. mapcount[JSON_KEY_COUNTING_MAP_COUNT_PERSON] = map_count_person;
  3747. mapcount[JSON_KEY_COUNTING_MAP_COUNT_VEHICLE] = map_count_vehicle;
  3748. mapcount[JSON_KEY_COUNTING_MAP_COUNT_TOTAL] = map_count_total;
  3749. mapcount[JSON_KEY_COUNTING_AREA_COUNT] = areacounts;
  3750. total_count += map_count_total;
  3751. total_count_person += map_count_person;
  3752. total_count_vehicle += map_count_vehicle;
  3753. mapcounts.append(mapcount);
  3754. //}
  3755. }
  3756. // dept
  3757. Json::Value deptcounts;
  3758. Json::Value deptcount;
  3759. int dept_person_count, dept_vehicle_count, total_dept_count = 0;
  3760. DeptMap::iterator it_dept = mp_dept_list.begin();
  3761. for(; it_dept != mp_dept_list.end(); ++it_dept){
  3762. deptcount[JSON_KEY_COUNTING_DEPT_ID] = it_dept->second->dept_id;
  3763. //deptcount[JSON_KEY_COUNTING_DEPT_NAME] = it_dept->second->dept_name;
  3764. dept_person_count = it_dept->second->dept_card_list_person.size();
  3765. dept_vehicle_count = it_dept->second->dept_card_list_vehicle.size();
  3766. deptcount[JSON_KEY_COUNTING_DEPT_COUNT_TOTAL] = dept_person_count + dept_vehicle_count;
  3767. deptcount[JSON_KEY_COUNTING_DEPT_COUNT_PERSON] = dept_person_count;
  3768. deptcount[JSON_KEY_COUNTING_DEPT_COUNT_VEHICLE] = dept_vehicle_count;
  3769. //if(dept_vehicle_count + dept_person_count > 0){
  3770. // total_dept_count += dept_vehicle_count + dept_person_count;
  3771. deptcounts.append(deptcount);
  3772. //}
  3773. }
  3774. //if(total_dept_count>0){
  3775. data[JSON_KEY_COUNTING_DEPT_COUNT] = deptcounts;
  3776. //}
  3777. data[JSON_KEY_COUNTING_MAP_COUNT] = mapcounts;
  3778. data[JSON_KEY_COUNTING_COUNT_TOTAL] = total_count;
  3779. data[JSON_KEY_COUNTING_COUNT_VEHICLE] = total_count_vehicle;
  3780. data[JSON_KEY_COUNTING_COUNT_PERSON] = total_count_person;
  3781. root[JSON_ROOT_KEY_DATA] = data;
  3782. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_COUNTING;
  3783. //string ss = root.toStyledString();
  3784. return root.toFastString();
  3785. }
  3786. void CYAServerDlg::OnTimer( UINT nIDEvent )
  3787. {
  3788. // 需要优化,如果数据没有变化,则不重复发送数据,数据变化后再发送
  3789. switch ( nIDEvent)
  3790. {
  3791. case TMR_SEND_COUNTING:
  3792. {
  3793. send_json_data(JSON_CMD_VALUE_PUSH, get_json_counting());
  3794. break;
  3795. }
  3796. case TMR_SEND_ALARM:
  3797. {
  3798. send_json_data(JSON_CMD_VALUE_PUSH, get_json_alarm());
  3799. break;
  3800. }
  3801. case TMR_SEND_DEVICE_STATE:
  3802. {
  3803. deal_readers();
  3804. send_json_data(JSON_CMD_VALUE_PUSH, get_json_device_state());
  3805. break;
  3806. }
  3807. case TMR_SEND_POSTION:
  3808. {
  3809. package_data();
  3810. break;
  3811. }
  3812. case TMR_SYNC_READER_TIME:
  3813. {
  3814. send_sync_reader();
  3815. break;
  3816. }
  3817. case TMR_CLEAR_CALL_TIMER:
  3818. {
  3819. clear_call_info();
  3820. break;
  3821. }
  3822. case TMR_SEND_CALL:
  3823. {
  3824. send_call_info();
  3825. break;
  3826. }
  3827. default:
  3828. break;
  3829. }
  3830. }
  3831. /*
  3832. * 从配置文件中载入数据库配置
  3833. *
  3834. * param
  3835. * 无
  3836. *
  3837. * return
  3838. * 无
  3839. */
  3840. void CYAServerDlg::load_param_from_ini()
  3841. {
  3842. IniFile ini;
  3843. string strvalue;
  3844. int nTemp = 0;
  3845. //show_log(_T(LOG_LOAD_CONFIG), FALSE);
  3846. //输出操作日志到日志文件
  3847. show_log(_T(LOG_LOAD_CONFIG));
  3848. if(ini.open(FILEPATH_SERVER_CONFIG)){
  3849. strvalue = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL);
  3850. m_ws_url = strvalue;
  3851. int nBackup = atoi(theApp.dbbackup.c_str());
  3852. switch(nBackup){
  3853. case 0:
  3854. m_db_setting.host = ini.read(CONF_SECT_DB, CONF_DB_KEY_HOST);
  3855. m_db_setting.user = ini.read(CONF_SECT_DB, CONF_DB_KEY_USER);
  3856. m_db_setting.password = ini.read(CONF_SECT_DB, CONF_DB_KEY_PWD);
  3857. m_db_setting.dbname = ini.read(CONF_SECT_DB, CONF_DB_KEY_DBNAME);
  3858. m_db_setting.encoding = ini.read(CONF_SECT_DB, CONF_DB_KEY_ENCODING);
  3859. m_db_setting.port = atoi(ini.read(CONF_SECT_DB, CONF_DB_KEY_PORT).c_str());
  3860. break;
  3861. case 1:
  3862. m_db_setting.host = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_HOST);
  3863. m_db_setting.user = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_USER);
  3864. m_db_setting.password = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PWD);
  3865. m_db_setting.dbname = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_DBNAME);
  3866. m_db_setting.encoding = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_ENCODING);
  3867. m_db_setting.port = atoi(ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PORT).c_str());
  3868. break;
  3869. }
  3870. /*m_db_setting.host = ini.read(CONF_SECT_DB, CONF_DB_KEY_HOST);
  3871. m_db_setting.user = ini.read(CONF_SECT_DB, CONF_DB_KEY_USER);
  3872. m_db_setting.password = ini.read(CONF_SECT_DB, CONF_DB_KEY_PWD);
  3873. m_db_setting.dbname = ini.read(CONF_SECT_DB, CONF_DB_KEY_DBNAME);
  3874. m_db_setting.encoding = ini.read(CONF_SECT_DB, CONF_DB_KEY_ENCODING);
  3875. m_db_setting.port = atoi(ini.read(CONF_SECT_DB, CONF_DB_KEY_PORT).c_str());*/
  3876. //show_log(_T(LOG_LOAD_CONFIG_SUCCESS), FALSE);
  3877. show_log(_T(LOG_LOAD_CONFIG_SUCCESS));
  3878. }else{
  3879. //show_log(_T(LOG_LOAD_CONFIG_FAIL));
  3880. show_log(_T(LOG_LOAD_CONFIG_FAIL));
  3881. }
  3882. }
  3883. int CYAServerDlg::init_dept()
  3884. {
  3885. CMysqlConn* pConn = NULL;
  3886. CDBConnGuard pDbGuard(pConn);
  3887. if(pConn == NULL){
  3888. return 1;
  3889. }
  3890. MYSQL_ROW pRow;
  3891. MYSQL_RES *pRes = NULL;
  3892. int err = 0;
  3893. pRes = pConn->Execute("select dept_id, name from dat_dept order by rank;", err);
  3894. Dept* dept = NULL;
  3895. int nRow = 0;
  3896. while(pRow = mysql_fetch_row(pRes)) {
  3897. DeptMap::iterator it = mp_dept_list.find(atoi(pRow[0]));
  3898. if(it != mp_dept_list.end()){
  3899. dept = it->second;
  3900. }else{
  3901. dept = new Dept(atoi(pRow[0]), pRow[1]);
  3902. mp_dept_list.insert(make_pair(dept->dept_id, dept));
  3903. nRow++;
  3904. }
  3905. }
  3906. mysql_free_result(pRes);
  3907. CString strlog;
  3908. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_DEPT), nRow, _T(LOG_RECORD_COUNT));
  3909. show_log(strlog);
  3910. return 0;
  3911. }
  3912. /*
  3913. * 从数据库的dat_setting表初始化系统阈值,
  3914. * 包括:井下人员阈值,井下车辆阈值,人员超时阈值,车辆超时阈值,车辆超速阈值
  3915. *
  3916. * param
  3917. * 无
  3918. *
  3919. * return
  3920. * 无
  3921. */
  3922. int CYAServerDlg::init_setting()
  3923. {
  3924. CMysqlConn* pConn = NULL;
  3925. CDBConnGuard pDbGuard(pConn);
  3926. if(pConn == NULL){
  3927. return 1;
  3928. }
  3929. MYSQL_ROW pRow;
  3930. MYSQL_RES *pRes = NULL;
  3931. int err = 0;
  3932. pRes = pConn->Execute("select setting_id, name, type, value from dat_setting;", err);
  3933. string name, val, type;
  3934. while(pRow = mysql_fetch_row(pRes)) {
  3935. name = pRow[1], type = pRow[2], val = pRow[3];
  3936. if("over_count_person" == name){
  3937. sls_setting.over_count_person = atoi(val.c_str());
  3938. }else if("over_count_vehicle" == name){
  3939. sls_setting.over_count_vehicle = atoi(val.c_str());
  3940. }else if("over_time_person" == name){
  3941. sls_setting.over_time_person = atoi(val.c_str());
  3942. }else if("over_time_vehicle" == name){
  3943. sls_setting.over_time_vehicle = atoi(val.c_str());
  3944. }else if("over_speed" == name){
  3945. sls_setting.over_speed = atof(val.c_str());
  3946. }
  3947. }
  3948. mysql_free_result(pRes);
  3949. show_log(_T(LOG_INIT_SETTING));
  3950. return 0;
  3951. }
  3952. void CYAServerDlg::deal_alarm_card(Card* card, CardMap* dest_card_list, bool is_alarm, ALARM_FLAG tag)
  3953. {
  3954. //TRACE(_T("start \n"));
  3955. CardMap::iterator it_card = dest_card_list->find(card->card_id);
  3956. //TRACE(_T("end \n"));
  3957. if(it_card != dest_card_list->end()){
  3958. if(!is_alarm){ // 取消报警
  3959. dest_card_list->erase(it_card);
  3960. }
  3961. }else {
  3962. if(is_alarm){
  3963. dest_card_list->insert(make_pair(card->card_id, card));
  3964. }
  3965. }
  3966. switch (tag) // savetodb
  3967. {
  3968. case AF_CARD_AREA_FORBIDDEN:
  3969. {
  3970. card->time_area_forbidden = is_alarm ? time(NULL) : 0;
  3971. card->status_area_forbidden = is_alarm ? 1 : 0;
  3972. break;
  3973. }
  3974. case AF_CARD_AREA_OVER_TIME:
  3975. {
  3976. card->time_area_over_time = is_alarm ? time(NULL) : 0;
  3977. card->status_area_over_time = is_alarm ? 1 : 0;
  3978. break;
  3979. }
  3980. case AF_AREA_OVER_TIME:
  3981. {
  3982. card->time_over_time = is_alarm ? time(NULL) : 0;
  3983. card->status_over_time = is_alarm ? 1 : 0;
  3984. break;
  3985. }
  3986. case AF_CARD_OVER_SPEED:
  3987. {
  3988. card->time_over_speed = is_alarm ? time(NULL) : 0;
  3989. card->status_over_speed = is_alarm ? 1 : 0;
  3990. break;
  3991. }
  3992. default:
  3993. break;
  3994. }
  3995. }
  3996. void CYAServerDlg::deal_alarm_area( Area* area, AreaMap* dest_area_list, bool is_alarm, ALARM_FLAG tag )
  3997. {
  3998. AreaMap::iterator it_area = dest_area_list->find(area->area_id);
  3999. if(it_area != dest_area_list->end()){
  4000. if(!is_alarm){
  4001. //savetodb
  4002. dest_area_list->erase(it_area);
  4003. }
  4004. }else{
  4005. if(is_alarm){
  4006. // savetodb
  4007. dest_area_list->insert(make_pair(area->area_id, area));
  4008. }
  4009. }
  4010. }
  4011. /*
  4012. * 从数据库的dat_alarm_type表初始化告警类型和名称
  4013. *
  4014. * param
  4015. * 无
  4016. *
  4017. * return
  4018. * 无
  4019. */
  4020. int CYAServerDlg::init_alarm_type()
  4021. {
  4022. CMysqlConn* pConn = NULL;
  4023. CDBConnGuard pDbGuard(pConn);
  4024. if(pConn == NULL){
  4025. return 1;
  4026. }
  4027. MYSQL_ROW pRow;
  4028. MYSQL_RES *pRes = NULL;
  4029. int err = 0;
  4030. pRes = pConn->Execute("select alarm_type_id, name from dat_alarm_type;", err);
  4031. while(pRow = mysql_fetch_row(pRes)) {
  4032. AlarmTypeMap::iterator it = mp_alarm_type_list.find(atoi(pRow[0]));
  4033. if(it != mp_alarm_type_list.end()){
  4034. it->second = pRow[1];
  4035. }else{
  4036. mp_alarm_type_list.insert(make_pair(atoi(pRow[0]), pRow[1]));
  4037. }
  4038. }
  4039. mysql_free_result(pRes);
  4040. show_log(_T(LOG_INIT_ALARM_TYPE));
  4041. return 0;
  4042. }
  4043. void CYAServerDlg::AddItem( CString strvalue, int readerid, BOOL is_closed /*= false*/ )
  4044. {
  4045. CString strRow;
  4046. int nRow = 0;
  4047. bool bFind = false;
  4048. for(int i = 0; i < m_listctrl_reader.GetItemCount(); i++){
  4049. if(strvalue == m_listctrl_reader.GetItemText(i, 1)){
  4050. nRow = i;
  4051. bFind = true;
  4052. break;
  4053. }
  4054. }
  4055. if(!bFind){
  4056. nRow = m_listctrl_reader.GetItemCount();
  4057. //strRow.Format(_T("%d"), nRow + 1);
  4058. nRow = m_listctrl_reader.InsertItem(nRow, CFunctions::formatInt(readerid));
  4059. }
  4060. m_listctrl_reader.SetItemText(nRow, 1, strvalue);
  4061. m_listctrl_reader.SetItemText(nRow, 2, is_closed ? _T("中断"): _T("已连接"));
  4062. }
  4063. void CYAServerDlg::show_log( LPCTSTR szlog, BOOL bSave )
  4064. {
  4065. CString sMsg, sLog;
  4066. CString sTime=COleDateTime::GetCurrentTime().Format(_T(LOG_TIME_FORMAT));
  4067. sMsg.Format(_T("%s %s\n"), sTime, szlog);
  4068. try{
  4069. ::LogMsg(sMsg);
  4070. }
  4071. catch(...){
  4072. }
  4073. /*if(bSave && theApp.log_sys_status){
  4074. writeErrorLog(_T("LOG_S"), sMsg);
  4075. }*/
  4076. if(m_log_sys_status){
  4077. writeErrorLog(_T("LOG_S"), sMsg,false);
  4078. //sMsg = _T("");
  4079. sMsg.Empty();
  4080. }
  4081. }
  4082. /*
  4083. * 初始化数据库连接
  4084. *
  4085. * param
  4086. * 无
  4087. *
  4088. * return
  4089. * 无
  4090. *
  4091. */
  4092. void CYAServerDlg::database_connect()
  4093. {
  4094. //show_log(_T(LOG_CONNECT_DB), FALSE);
  4095. show_log(_T(LOG_CONNECT_DB));
  4096. GetConnPool().Init(m_db_setting.encoding.c_str(), m_db_setting.host.c_str(), m_db_setting.user.c_str(),
  4097. m_db_setting.password.c_str(), m_db_setting.dbname.c_str(), m_db_setting.port, NULL, 0);
  4098. int nConn = GetConnPool().InitAllConn();
  4099. if(nConn > 0){
  4100. show_log(_T(LOG_CONNECT_DB_SUCCESS));
  4101. }else{
  4102. show_log(_T(LOG_CONNECT_DB_FAIL));
  4103. }
  4104. }
  4105. void CYAServerDlg::stop_timer()
  4106. {
  4107. KillTimer(TMR_SEND_COUNTING);
  4108. KillTimer(TMR_SEND_ALARM);
  4109. KillTimer(TMR_SEND_DEVICE_STATE);
  4110. KillTimer(TMR_SEND_POSTION);
  4111. }
  4112. void CYAServerDlg::OnMenuDb()
  4113. {
  4114. CDbSettingDlg dlg;
  4115. dlg.DoModal();
  4116. }
  4117. void CYAServerDlg::OnCallMessage(string const& name, message::ptr const& data, bool isAck,message::list &ack_resp )
  4118. {
  4119. if(data->get_flag() == message::flag_object){
  4120. string cmd = data->get_map()[JSON_ROOT_KEY_CMD]->get_string();
  4121. if(JSON_CMD_VALUE_META_DATA_CHANGED == cmd){
  4122. map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  4123. string name = data_map[JSON_KEY_NAME]->get_string().c_str();
  4124. string op_type = data_map[JSON_KEY_OP_TYPE]->get_string().c_str();
  4125. EDIT_TYPE_ID edit_type_id = (JSON_KEY_OP_TYPE_INSERT == op_type)? ET_INSERT: ((JSON_KEY_OP_TYPE_UPDATE == op_type)? ET_UPDATE: ET_DELETE);
  4126. if(JSON_KEY_NAME_VEHICLE == name){
  4127. string id = data_map[JSON_KEY_ID]->get_string().c_str();
  4128. deal_call_edit_vehicle(id, edit_type_id);
  4129. }else if(JSON_KEY_NAME_STAFF == name){
  4130. string id = data_map[JSON_KEY_ID]->get_string().c_str();
  4131. deal_call_edit_staff(id, edit_type_id);
  4132. }else if(JSON_KEY_NAME_READER == name){
  4133. int id = atoi(data_map[JSON_KEY_ID]->get_string().c_str());
  4134. deal_call_edit_reader(id, edit_type_id);
  4135. }else if(JSON_KEY_NAME_CARD == name){
  4136. string id = data_map[JSON_KEY_ID]->get_string().c_str();
  4137. deal_call_edit_card(id, edit_type_id);
  4138. }else if(JSON_KEY_NAME_AREA == name){
  4139. int id = atoi(data_map[JSON_KEY_ID]->get_string().c_str());
  4140. deal_call_edit_area(id, edit_type_id);
  4141. }else if(JSON_KEY_NAME_MAP == name){
  4142. int id = atoi(data_map[JSON_KEY_ID]->get_string().c_str());
  4143. deal_call_edit_map(id, edit_type_id);
  4144. }else if(JSON_KEY_NAME_PATH == name){
  4145. //int id = data_map[JSON_KEY_ID]->get_int();
  4146. //deal_call_edit_path(id, edit_type_id);
  4147. }
  4148. }else if(JSON_CMD_VALUE_SET_LIMIT_VALUE == cmd){
  4149. //阈值限制接口
  4150. string json_data = data->get_map()[JSON_ROOT_KEY_DATA]->get_string();
  4151. parse_json_data_set_limit_value(json_data.c_str());
  4152. } else if(JSON_CMD_VALUE_REQUEST_ALL_POSTION == cmd){
  4153. //请求全部位置信息
  4154. send_json_data(JSON_CMD_VALUE_REQUEST_ALL_POSTION, get_json_position_all());
  4155. } else if(JSON_CMD_VALUE_DEAL_HELP == cmd){
  4156. // 处理呼救信息
  4157. string json_data = data->get_map()[JSON_ROOT_KEY_DATA]->get_string();
  4158. parse_json_data_deal_help(json_data.c_str());
  4159. } else if(JSON_CMD_VALUE_CALL_CARD_START == cmd){
  4160. //呼叫
  4161. parse_json_data_call_card(data);
  4162. } else if(JSON_CMD_VALUE_CALL_CARD_CANCEL == cmd){
  4163. //取消呼叫
  4164. parse_json_data_call_card_cancel(data);
  4165. } else if(JSON_CMD_VALUE_CLEAR_CARD == cmd) {
  4166. // 清楚盲区卡
  4167. //map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  4168. //parse_json_data_clear_card(data_map);
  4169. }
  4170. }
  4171. }
  4172. void CYAServerDlg::parse_json_data_set_limit_value( const char* sz )
  4173. {
  4174. //USES_CONVERSION;
  4175. //CUTF82C strJson(szJson);
  4176. Json::Value root;
  4177. Json::Reader reader;
  4178. CString strlog;
  4179. if (!reader.parse(sz,root)){
  4180. strlog.Format(_T("%s%s"), _T(LOG_SET_LIMIT_VALUE), _T(LOG_FAIL));
  4181. show_log(strlog);
  4182. return ;
  4183. }
  4184. sls_setting.over_count_person = root[JSON_KEY_ALARM_OVER_COUNT_PERSON].asInt();
  4185. sls_setting.over_count_vehicle = root[JSON_KEY_ALARM_OVER_COUNT_VEHICLE].asInt();
  4186. sls_setting.over_time_person = root[JSON_KEY_ALARM_OVER_TIME_PERSON].asInt();
  4187. sls_setting.over_time_vehicle = root[JSON_KEY_ALARM_OVER_TIME_VEHICLE].asInt();
  4188. sls_setting.over_speed = root[JSON_KEY_ALARM_OVER_SPEED_VEHICLE].asDouble();
  4189. strlog.Format(_T("%s%s"), _T(LOG_SET_LIMIT_VALUE), _T(LOG_SUCCESS));
  4190. show_log(strlog);
  4191. if(m_log_recv_package){
  4192. strlog = _T("");
  4193. strlog.Format(_T("%s"),sz);
  4194. writeErrorLog(_T("JSON_R"),strlog,false);
  4195. //strlog = _T("");
  4196. strlog.Empty();
  4197. }
  4198. }
  4199. void CYAServerDlg::parse_json_data_call_card(message::ptr const& data /*const char* sz*/ )
  4200. {
  4201. CString strlog;
  4202. string call_id, user_name, call_time;
  4203. string cardid, readerid;
  4204. int call_time_out, reader_count, card_count, call_type_id;
  4205. map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  4206. call_id = data_map[JSON_KEY_CALL_CARD_CALL_ID]->get_string();
  4207. call_time_out = data_map[JSON_KEY_CALL_CARD_CALL_TIME_OUT]->get_int();
  4208. call_type_id = data_map[JSON_KEY_CALL_CARD_CALL_TYPE]->get_int();
  4209. user_name = data_map[JSON_KEY_CALL_CARD_USER_NAME]->get_string();
  4210. call_time = data_map[JSON_KEY_CALL_CARD_CALL_TIME]->get_string();
  4211. vector<message::ptr> reader_vec = data_map[JSON_KEY_CALL_CARD_STATIONS]->get_vector();
  4212. vector<message::ptr> card_vec = data_map[JSON_KEY_CALL_CARD_CARDS]->get_vector();
  4213. if(reader_vec.size() == 0 && card_vec.size() == 0)
  4214. {
  4215. return;
  4216. }
  4217. int reader_id, npos;
  4218. SocketMap::iterator it_sock;
  4219. BYTE buf[LENGTH_SEND_BUF];
  4220. _call_info_reader* call_reader;
  4221. _call_info_card* call_card;
  4222. //呼叫发起有两种,
  4223. //一种通过分站发起呼叫即为对此分站下的所有自组网卡全员呼叫
  4224. //一种是对单卡发起的呼叫
  4225. vector<message::ptr>::const_iterator it_reader = reader_vec.begin();
  4226. if(reader_vec.size() > 0){
  4227. for(; it_reader != reader_vec.end(); ++it_reader){
  4228. string s_reader_id = "";
  4229. s_reader_id = (*it_reader)->get_map()[JSON_KEY_CALL_CARD_STATION_ID]->get_string();
  4230. reader_id = atoi(s_reader_id.c_str());
  4231. CallInfoReaderMap::iterator it_call_reader = mp_call_info.find(reader_id);
  4232. if(it_call_reader != mp_call_info.end()){
  4233. call_reader = it_call_reader->second;
  4234. if(call_reader->call_type > call_type_id){
  4235. call_reader->call_type = call_type_id;
  4236. }
  4237. }else{
  4238. call_reader = new _call_info_reader;
  4239. call_reader->call_type = call_type_id;
  4240. mp_call_info.insert(make_pair(reader_id, call_reader));
  4241. }
  4242. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  4243. if(card_vec.size() == 0 || "" == (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string()){
  4244. call_reader->cards_count = 0;
  4245. call_reader->is_call_all = true;
  4246. call_reader->is_start_call = true;
  4247. }else{
  4248. call_reader->cards_count = card_vec.size();
  4249. call_reader->is_call_all = false;
  4250. call_reader->is_start_call = true;
  4251. BYTE card_type = 0;
  4252. for(; it_card != card_vec.end(); ++it_card){
  4253. if( "" == (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string()){
  4254. call_reader->cards_count = 0;
  4255. call_reader->is_call_all = true;
  4256. }else{
  4257. string s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  4258. string s_card_type = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  4259. //string str_card_id = CFunctions::getstrwithzero(card_type, 3) + CFunctions::getstrwithzero(card_id, 10);
  4260. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  4261. int card_id = atoi(s_card_id.c_str());
  4262. int card_type = atoi(s_card_type.c_str());
  4263. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  4264. call_card = it_call_card->second;
  4265. if(call_card->call_type < call_type_id){ // 原呼叫优先级低
  4266. call_card->card_type = card_type;
  4267. call_card->call_type = call_type_id;
  4268. call_card->start_time = time(NULL);
  4269. call_card->time_out = call_time_out;
  4270. }else {
  4271. call_card->start_time = time(NULL);
  4272. call_card->time_out = call_time_out;
  4273. }
  4274. }else{ // 未在呼叫列表
  4275. call_card = new _call_info_card;
  4276. //call_card->card_id = card_id;
  4277. call_card->card_type = card_type;
  4278. call_card->start_time = time(NULL);
  4279. call_card->time_out = call_time_out;
  4280. call_card->call_type = call_type_id;
  4281. call_reader->mpCard.insert(make_pair(s_card_id, call_card));
  4282. }
  4283. }
  4284. }
  4285. }
  4286. }
  4287. }
  4288. //单卡发送呼叫
  4289. it_reader = reader_vec.begin();
  4290. if(it_reader == reader_vec.end() && card_vec.size() > 0 ){
  4291. int nCounts = 0;
  4292. int card_id = 0;
  4293. BYTE card_type = 0;
  4294. string s_card_id = "";
  4295. string s_card_type = "";
  4296. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  4297. for(; it_card != card_vec.end(); ++it_card){
  4298. card_type = 0;
  4299. s_card_id = "";
  4300. s_card_type = "";
  4301. call_type_id = 0;
  4302. nCounts++;
  4303. s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  4304. s_card_type =(*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  4305. string new_card_id = s_card_id.substr(3,s_card_id.length());
  4306. card_id = atoi(new_card_id.c_str());
  4307. card_type = CT_ADHOC;
  4308. reader_id = mp_card_list_down_adhoc.find(s_card_id)->second->reader_id;
  4309. CallInfoReaderMap::iterator it_call_reader = mp_call_info.find(reader_id);
  4310. if(it_call_reader != mp_call_info.end()){
  4311. call_reader = it_call_reader->second;
  4312. call_reader->is_start_call = true;
  4313. if(call_reader->call_type > call_type_id){
  4314. call_reader->call_type = call_type_id;
  4315. }
  4316. }else{
  4317. call_reader = new _call_info_reader;
  4318. call_reader->call_type = call_type_id;
  4319. call_reader->is_call_all = false;
  4320. call_reader->cards_count = 1;
  4321. call_reader->is_start_call = true;
  4322. mp_call_info.insert(make_pair(reader_id, call_reader));
  4323. }
  4324. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  4325. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  4326. call_card = it_call_card->second;
  4327. if(call_card->call_type < call_type_id){ // 原呼叫优先级低
  4328. call_card->card_type = card_type;
  4329. call_card->card_id = 1;
  4330. call_card->call_type = call_type_id;
  4331. call_card->start_time = time(NULL);
  4332. call_card->time_out = call_time_out;
  4333. }else {
  4334. call_card->start_time = time(NULL);
  4335. call_card->time_out = call_time_out;
  4336. }
  4337. }else{ // 未在呼叫列表
  4338. call_card = new _call_info_card;
  4339. call_card->card_id = card_id;
  4340. call_card->card_type = card_type;
  4341. call_card->start_time = time(NULL);
  4342. call_card->time_out = call_time_out;
  4343. call_card->call_type = call_type_id;
  4344. call_reader->mpCard.insert(make_pair(s_card_id, call_card));
  4345. }
  4346. }
  4347. }
  4348. strlog.Format(_T("%s%s"), _T(LOG_CALL_CARD), _T(LOG_SUCCESS));
  4349. show_log(strlog);
  4350. }
  4351. void CYAServerDlg::parse_json_data_clear_card( const char* sz )
  4352. {
  4353. Json::Value root;
  4354. Json::Reader reader;
  4355. CString strlog = _T("");
  4356. if (!reader.parse(sz,root)){
  4357. strlog.Format(_T("%s%s"), _T(LOG_CLEAR_CARD), _T(LOG_FAIL));
  4358. show_log(strlog);
  4359. return ;
  4360. }
  4361. if(root.isNull() || !root.isArray()){
  4362. return;
  4363. }
  4364. int card_type_id, edit_type_id;
  4365. string cardid = "";
  4366. for(unsigned int i = 0; i < root.size(); i++){
  4367. cardid = root[i][JSON_KEY_EDIT_CARD_ID].asString();
  4368. edit_type_id = root[i][JSON_KEY_EDIT_EDIT_TYPE_ID].asInt();
  4369. CardMap::iterator it_card = mp_card_list_all.find(cardid);
  4370. if(it_card != mp_card_list_all.end()){
  4371. if(STATUS_ERROR == it_card->second->status_lost){
  4372. // 升井
  4373. //TRACE(_T("time memcpy 8\n"));
  4374. it_card->second->up_time = time(NULL);
  4375. it_card->second->pos_state = DT_UP;
  4376. card_enter_mine(it_card->second);
  4377. remove_card(cardid); // reset_card_status();
  4378. }
  4379. }
  4380. }
  4381. strlog.Format(_T("%s%s"), _T(LOG_CLEAR_CARD), _T(LOG_SUCCESS));
  4382. show_log(strlog);
  4383. if(m_log_recv_package){
  4384. strlog = _T("");
  4385. strlog.Format(_T("%s"),sz);
  4386. writeErrorLog(_T("JSON_R"),strlog,false);
  4387. }
  4388. }
  4389. void CYAServerDlg::parse_json_data_deal_help( const char* sz )
  4390. {
  4391. Json::Value root;
  4392. Json::Reader reader;
  4393. CString strlog;
  4394. if (!reader.parse(sz,root)){
  4395. strlog.Format(_T("%s%s"), _T(LOG_DEAL_HELP), _T(LOG_FAIL));
  4396. show_log(strlog);
  4397. return ;
  4398. }
  4399. int card_type_id, edit_type_id;
  4400. string cardid = root[JSON_KEY_EDIT_CARD_ID].asString();
  4401. card_type_id = root[JSON_KEY_CARD_TYPE_ID].asInt();
  4402. edit_type_id = root[JSON_KEY_EDIT_EDIT_TYPE_ID].asInt();
  4403. CardMap::iterator it_card = mp_card_list_help.find(cardid);
  4404. if(it_card != mp_card_list_help.end()){
  4405. it_card->second->status_help = STATUS_HELP_DEALED;
  4406. }
  4407. strlog.Format(_T("%s%s"), _T(LOG_DEAL_HELP), _T(LOG_SUCCESS));
  4408. show_log(strlog);
  4409. if(m_log_recv_package){
  4410. strlog = _T("");
  4411. strlog.Format(_T("%s"),sz);
  4412. writeErrorLog(_T("JSON_R"),strlog,false);
  4413. //strlog = _T("");
  4414. strlog.Empty();
  4415. }
  4416. }
  4417. void CYAServerDlg::deal_call_edit_map(int id, EDIT_TYPE_ID edit_type_id)
  4418. {
  4419. CString strlog = _T("");
  4420. switch (edit_type_id)
  4421. {
  4422. case ET_INSERT:
  4423. {
  4424. init_map(id);
  4425. break;
  4426. }
  4427. case ET_UPDATE:
  4428. {
  4429. init_map(id);
  4430. break;
  4431. }
  4432. case ET_DELETE:
  4433. {
  4434. MapInfoMap::iterator it_map = mp_map_list.find(id);
  4435. if(it_map != mp_map_list.end()){
  4436. mp_map_list.erase(it_map);
  4437. }
  4438. break;
  4439. }
  4440. default:
  4441. break;
  4442. }
  4443. strlog.Format(_T("%s%s"), _T(LOG_EDIT_MAP), _T(LOG_SUCCESS));
  4444. show_log(strlog);
  4445. }
  4446. void CYAServerDlg::deal_call_edit_area(int id, EDIT_TYPE_ID edit_type_id)
  4447. {
  4448. CString strlog;
  4449. switch (edit_type_id)
  4450. {
  4451. case ET_INSERT:
  4452. {
  4453. init_area(id);
  4454. break;
  4455. }
  4456. case ET_UPDATE:
  4457. {
  4458. init_area(id);
  4459. break;
  4460. }
  4461. case ET_DELETE:
  4462. {
  4463. AreaMap::iterator it_area = mp_area_list.find(id);
  4464. MapInfoMap::iterator it_map = mp_map_list.find(it_area->second->map_id);
  4465. if(it_map != mp_map_list.end()){
  4466. AreaMap::iterator it_map_area = it_map->second->map_area_list.find(id);
  4467. it_map->second->map_area_list.erase(it_map_area);
  4468. }
  4469. if(it_area != mp_area_list.end()){
  4470. mp_area_list.erase(it_area);
  4471. }
  4472. it_area = mp_area_over_count_person.find(id);
  4473. if(it_area != mp_area_over_count_person.end()){
  4474. mp_area_over_count_person.erase(it_area);
  4475. }
  4476. it_area = mp_area_over_time_person.find(id);
  4477. if(it_area != mp_area_over_time_person.end()){
  4478. mp_area_over_time_person.erase(it_area);
  4479. }
  4480. it_area = mp_area_forbidden_person.find(id);
  4481. if(it_area != mp_area_forbidden_person.end()){
  4482. mp_area_forbidden_person.erase(it_area);
  4483. }
  4484. it_area = mp_area_over_count_vehicle.find(id);
  4485. if(it_area != mp_area_over_count_vehicle.end()){
  4486. mp_area_over_count_vehicle.erase(it_area);
  4487. }
  4488. it_area = mp_area_over_time_vehicle.find(id);
  4489. if(it_area != mp_area_over_time_vehicle.end()){
  4490. mp_area_over_time_vehicle.erase(it_area);
  4491. }
  4492. it_area = mp_area_forbidden_vehicle.find(id);
  4493. if(it_area != mp_area_forbidden_vehicle.end()){
  4494. mp_area_forbidden_vehicle.erase(it_area);
  4495. }
  4496. break;
  4497. }
  4498. default:
  4499. break;
  4500. }
  4501. strlog.Format(_T("%s%s"), _T(LOG_EDIT_AREA), _T(LOG_SUCCESS));
  4502. show_log(strlog);
  4503. }
  4504. void CYAServerDlg::deal_call_edit_reader(int id, EDIT_TYPE_ID edit_type_id)
  4505. {
  4506. CString strlog;
  4507. switch (edit_type_id)
  4508. {
  4509. case ET_INSERT:
  4510. {
  4511. init_reader(id);
  4512. init_antenna(id);
  4513. //init_all_readers_coverage(id);
  4514. //init_tdoa_all_readers_coverage(id);
  4515. #ifdef ALGORITHM_TYPE_TOF
  4516. init_all_readers_coverage();
  4517. #elif defined ALGORITHM_TYPE_TDOA
  4518. init_tdoa_all_readers_coverage(id);
  4519. #endif
  4520. break;
  4521. }
  4522. case ET_UPDATE:
  4523. {
  4524. init_reader(id);
  4525. init_reader(id);
  4526. //init_all_readers_coverage(id);
  4527. //init_tdoa_all_readers_coverage(id);
  4528. #ifdef ALGORITHM_TYPE_TOF
  4529. init_all_readers_coverage();
  4530. #elif defined ALGORITHM_TYPE_TDOA
  4531. init_tdoa_all_readers_coverage(id);
  4532. #endif
  4533. break;
  4534. }
  4535. case ET_DELETE:
  4536. {
  4537. ReaderMap::iterator it_reader = mp_reader_list.find(id);
  4538. MapInfoMap::iterator it_map = mp_map_list.find(it_reader->second->map_id);
  4539. if(it_map != mp_map_list.end()){
  4540. ReaderMap::iterator it_map_reader = it_map->second->map_reader_list.find(id);
  4541. if(it_map_reader != it_map->second->map_reader_list.end()){
  4542. it_map->second->map_reader_list.erase(it_map_reader);
  4543. }
  4544. }
  4545. if(it_reader != mp_reader_list.end()){
  4546. mp_reader_list.erase(it_reader);
  4547. }
  4548. break;
  4549. }
  4550. default:
  4551. break;
  4552. }
  4553. strlog.Format(_T("%s%s"), _T(LOG_EDIT_READER), _T(LOG_SUCCESS));
  4554. show_log(strlog);
  4555. }
  4556. void CYAServerDlg::deal_call_edit_card(string id, EDIT_TYPE_ID edit_type_id)
  4557. {
  4558. CString strlog;
  4559. CardMap::iterator it_card = mp_card_list_all.find(id);
  4560. if(it_card == mp_card_list_all.end()){
  4561. return;
  4562. }
  4563. int card_type_id = it_card->second->card_type;
  4564. switch (edit_type_id)
  4565. {
  4566. case ET_INSERT:
  4567. {
  4568. if(CT_VEHICLE == card_type_id){
  4569. init_vehicle(id, true);
  4570. }else if(CT_PERSON == card_type_id) {
  4571. init_staffer(id, true);
  4572. }
  4573. break;
  4574. }
  4575. case ET_UPDATE:
  4576. {
  4577. if(CT_VEHICLE == card_type_id){
  4578. init_vehicle(id, true);
  4579. }else if(CT_PERSON == card_type_id) {
  4580. init_staffer(id, true);
  4581. }
  4582. break;
  4583. }
  4584. case ET_DELETE:
  4585. {
  4586. remove_card(id);
  4587. break;
  4588. }
  4589. default:
  4590. break;
  4591. }
  4592. strlog.Format(_T("%s%s"), _T(LOG_EDIT_CARD), _T(LOG_SUCCESS));
  4593. show_log(strlog);
  4594. }
  4595. void CYAServerDlg::deal_call_edit_staff(string id, EDIT_TYPE_ID edit_type_id)
  4596. {
  4597. CString strlog;
  4598. switch (edit_type_id)
  4599. {
  4600. case ET_INSERT:
  4601. {
  4602. init_staffer(id);
  4603. break;
  4604. }
  4605. case ET_UPDATE:
  4606. {
  4607. init_staffer(id);
  4608. break;
  4609. }
  4610. case ET_DELETE:
  4611. {
  4612. string cardid = "";
  4613. CardMap::iterator it_card = mp_card_list_down_person.begin();
  4614. for(; it_card != mp_card_list_down_person.end(); ++it_card){
  4615. if(it_card->second->id == id){
  4616. cardid = it_card->second->card_id;
  4617. break;
  4618. }
  4619. }
  4620. remove_card(cardid);
  4621. break;
  4622. }
  4623. default:
  4624. break;
  4625. }
  4626. strlog.Format(_T("%s%s"), _T(LOG_EDIT_STAFFER), _T(LOG_SUCCESS));
  4627. show_log(strlog);
  4628. }
  4629. void CYAServerDlg::deal_call_edit_vehicle(string id, EDIT_TYPE_ID edit_type_id)
  4630. {
  4631. CString strlog;
  4632. switch (edit_type_id)
  4633. {
  4634. case ET_INSERT:
  4635. {
  4636. init_vehicle(id);
  4637. break;
  4638. }
  4639. case ET_UPDATE:
  4640. {
  4641. init_vehicle(id);
  4642. break;
  4643. }
  4644. case ET_DELETE:
  4645. {
  4646. string cardid = "";
  4647. CardMap::iterator it_card = mp_card_list_down_vehicle.begin();
  4648. for(; it_card != mp_card_list_down_vehicle.end(); ++it_card){
  4649. if(it_card->second->id == id){
  4650. cardid = it_card->second->card_id;
  4651. break;
  4652. }
  4653. }
  4654. remove_card(cardid);
  4655. break;
  4656. }
  4657. default:
  4658. break;
  4659. }
  4660. strlog.Format(_T("%s%s"), _T(LOG_EDIT_VEHICLE), _T(LOG_SUCCESS));
  4661. show_log(strlog);
  4662. }
  4663. void CYAServerDlg::remove_card( string card_id )
  4664. {
  4665. if(card_id.length() == 0)
  4666. return;
  4667. int card_type_id = 0;
  4668. CardMap::iterator it_card = mp_card_list_all.find(card_id);
  4669. if(it_card == mp_card_list_all.end()){
  4670. return;
  4671. }
  4672. card_type_id = it_card->second->card_type;
  4673. mp_card_list_all.erase(it_card);
  4674. MapInfoMap::iterator it_map = mp_map_list.find(it_card->second->map_id);
  4675. if(it_map != mp_map_list.end()){
  4676. if(CT_VEHICLE == card_type_id){
  4677. CardMap::iterator it_map_card = it_map->second->map_card_list_vehicle.find(card_id);
  4678. if(it_map_card != it_map->second->map_card_list_vehicle.end()){
  4679. it_map->second->map_card_list_vehicle.erase(it_map_card);
  4680. }
  4681. }else if(CT_PERSON == card_type_id){
  4682. CardMap::iterator it_map_card = it_map->second->map_card_list_person.find(card_id);
  4683. if(it_map_card != it_map->second->map_card_list_person.end()){
  4684. it_map->second->map_card_list_person.erase(it_map_card);
  4685. }
  4686. }
  4687. }
  4688. AreaMap::iterator it_area = mp_area_list.find(it_card->second->area_id);
  4689. if(it_area != mp_area_list.end()){
  4690. if(CT_VEHICLE == card_type_id){
  4691. CardMap::iterator it_area_card = it_area->second->area_card_list_vehicle.find(card_id);
  4692. if(it_area_card != it_area->second->area_card_list_vehicle.end()){
  4693. it_area->second->area_card_list_vehicle.erase(it_area_card);
  4694. }
  4695. }else if(CT_PERSON == card_type_id){
  4696. CardMap::iterator it_area_card = it_area->second->area_card_list_person.find(card_id);
  4697. if(it_area_card != it_area->second->area_card_list_person.end()){
  4698. it_area->second->area_card_list_person.erase(it_area_card);
  4699. }
  4700. }
  4701. }
  4702. DeptMap::iterator it_dept = mp_dept_list.find(it_card->second->dept_id);
  4703. if(it_dept != mp_dept_list.end()){
  4704. if(CT_VEHICLE == card_type_id){
  4705. CardMap::iterator it_dept_card = it_dept->second->dept_card_list_vehicle.find(card_id);
  4706. if(it_dept_card != it_dept->second->dept_card_list_vehicle.end()){
  4707. it_dept->second->dept_card_list_vehicle.erase(it_dept_card);
  4708. }
  4709. }else if(CT_PERSON == card_type_id){
  4710. CardMap::iterator it_dept_card = it_dept->second->dept_card_list_person.find(card_id);
  4711. if(it_dept_card != it_dept->second->dept_card_list_person.end()){
  4712. it_dept->second->dept_card_list_person.erase(it_dept_card);
  4713. }
  4714. }
  4715. }
  4716. if(CT_VEHICLE == card_type_id){
  4717. it_card = mp_card_list_down_vehicle.find(card_id);
  4718. if(it_card != mp_card_list_down_vehicle.end()){
  4719. mp_card_list_down_vehicle.erase(it_card);
  4720. }
  4721. it_card = mp_card_list_forbidden_vehicle.find(card_id);
  4722. if(it_card != mp_card_list_forbidden_vehicle.end()){
  4723. mp_card_list_forbidden_vehicle.erase(it_card);
  4724. }
  4725. it_card = mp_card_list_over_time_vehicle.find(card_id);
  4726. if(it_card != mp_card_list_over_time_vehicle.end()){
  4727. mp_card_list_over_time_vehicle.erase(it_card);
  4728. }
  4729. it_card = mp_card_list_area_over_time_vehicle.find(card_id);
  4730. if(it_card != mp_card_list_area_over_time_vehicle.end()){
  4731. mp_card_list_area_over_time_vehicle.erase(it_card);
  4732. }
  4733. it_card = mp_card_list_over_speed_vehicle.find(card_id);
  4734. if(it_card != mp_card_list_over_speed_vehicle.end()){
  4735. mp_card_list_over_speed_vehicle.erase(it_card);
  4736. }
  4737. }else if(CT_PERSON == card_type_id) {
  4738. it_card = mp_card_list_down_person.find(card_id);
  4739. if(it_card != mp_card_list_down_person.end()){
  4740. mp_card_list_down_person.erase(it_card);
  4741. }
  4742. it_card = mp_card_list_over_time_person.find(card_id);
  4743. if(it_card != mp_card_list_over_time_person.end()){
  4744. mp_card_list_over_time_person.erase(it_card);
  4745. }
  4746. it_card = mp_card_list_forbidden_person.find(card_id);
  4747. if(it_card != mp_card_list_forbidden_person.end()){
  4748. mp_card_list_forbidden_person.erase(it_card);
  4749. }
  4750. it_card = mp_card_list_help.find(card_id);
  4751. if(it_card != mp_card_list_help.end()){
  4752. mp_card_list_help.erase(it_card);
  4753. }
  4754. it_card = mp_card_list_area_over_time_person.find(card_id);
  4755. if(it_card != mp_card_list_area_over_time_person.end()){
  4756. mp_card_list_area_over_time_person.erase(it_card);
  4757. }
  4758. }
  4759. }
  4760. void CYAServerDlg::save_card_postion( Card* card )
  4761. {
  4762. // 位置发生变化
  4763. double moved_dist = sqrt(pow(card->x - card->stored_x, 2) + pow(card->y - card->stored_y, 2) +
  4764. pow(card->z - card->stored_z, 2));
  4765. //if(moved_dist > card->map_scale * 20){ //移动距离大于20m,认为出错
  4766. // card->x = card->last_x;
  4767. // card->y = card->last_y;
  4768. // card->z = card->last_z;
  4769. // return;
  4770. //}
  4771. // 位置变化幅度大于1m
  4772. if( moved_dist < card->map_scale / 2.0){ // 移动位置小于半米,不记录数据
  4773. return ;
  4774. }
  4775. card->stored_x = card->x;
  4776. card->stored_y = card->y;
  4777. card->stored_z = card->z;
  4778. //card->is_first_location = false;
  4779. store_data_card(card, HIS_LOCATION);
  4780. }
  4781. void CYAServerDlg::store_data_area( Area* area, time_t cur_time, time_t start_time, int tag )
  4782. {
  4783. char sql[LENGTH_SQL] = {'\0'};
  4784. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  4785. struct tm local_time, local_time_ex;
  4786. localtime_s(&local_time, &cur_time);
  4787. localtime_s(&local_time_ex, &start_time);
  4788. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  4789. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  4790. switch(tag){
  4791. case ALARM_AREA_OVER_COUNT_PERSON_START:
  4792. {
  4793. int alarm_type_id = ATID_AREA_OVER_COUNT_PERSON;
  4794. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_area(area_id, alarm_type_id, start_time) VALUES(%d, %d, '%s');",
  4795. area->area_id, alarm_type_id, _time);
  4796. break;
  4797. }
  4798. case ALARM_AREA_OVER_COUNT_PERSON_END:
  4799. {
  4800. localtime_s(&local_time_ex, &area->time_over_count_person);
  4801. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  4802. int alarm_type_id = ATID_AREA_OVER_COUNT_PERSON;
  4803. sprintf_s(sql, LENGTH_SQL,
  4804. "UPDATE his_alarm_area SET end_time = '%s' WHERE area_id=%d AND alarm_type_id=%d AND start_time = '%s';",
  4805. _time, area->area_id, alarm_type_id, _time_ex);
  4806. break;
  4807. }
  4808. default:
  4809. return;
  4810. }
  4811. execute_sql(sql);
  4812. }
  4813. void CYAServerDlg::store_data_reader( Reader* reader, int tag )
  4814. {
  4815. char sql[LENGTH_SQL] = {'\0'};
  4816. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  4817. struct tm local_time, local_time_ex;
  4818. localtime_s(&local_time, &reader->lost_time);
  4819. localtime_s(&local_time_ex, &reader->rec_time);
  4820. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  4821. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  4822. switch(tag){
  4823. case ALARM_READER_LOST_START:
  4824. {
  4825. int alarm_type_id = ATID_READER;
  4826. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_reader(reader_id, alarm_type_id, start_time, rec_time) VALUES(%d, %d, '%s', '%s');",
  4827. reader->reader_id, alarm_type_id, _time, _time_ex);
  4828. break;
  4829. }
  4830. case ALARM_READER_LOST_END:
  4831. {
  4832. int alarm_type_id = ATID_READER;
  4833. sprintf_s(sql, LENGTH_SQL, "UPDATE his_alarm_reader set end_time='%s' where reader_id=%d and alarm_type_id=%d and start_time='%s';",
  4834. _time_ex, reader->reader_id, alarm_type_id, _time);
  4835. break;
  4836. }
  4837. default:
  4838. return;
  4839. }
  4840. execute_sql(sql);
  4841. }
  4842. void CYAServerDlg::execute_sql( const char* sql )
  4843. {
  4844. m_qsmSQL->AddString(sql);
  4845. }
  4846. /*
  4847. * 日志菜单设置
  4848. * 将日志菜单设置内容同步更新到主对话框中的相应变量
  4849. *
  4850. * param
  4851. * 无
  4852. *
  4853. * return
  4854. * 无
  4855. */
  4856. void CYAServerDlg::OnMenuLog()
  4857. {
  4858. CLogSetting dlg;
  4859. dlg.DoModal();
  4860. m_log_sys_status = dlg.m_log_sys_status;
  4861. m_log_raw_data = dlg.m_log_raw_data;
  4862. m_log_parse_data = dlg.m_log_parse_data;
  4863. m_log_recv_package = dlg.m_log_recv_package;
  4864. m_log_send_package = dlg.m_log_send_package;
  4865. m_log_locate_data = dlg.m_log_locate_data;
  4866. }
  4867. void CYAServerDlg::OnMenuParam()
  4868. {
  4869. CSysSetting dlg;
  4870. dlg.DoModal();
  4871. m_bUseFilter = dlg.m_use_filter;
  4872. if(m_bUseFilter){
  4873. m_nFilterType = FILTER_KALMAN;
  4874. }else{
  4875. m_nFilterType = NO_FILTER;
  4876. }
  4877. CardMap::iterator it = mp_card_list_all.begin();
  4878. for(it;it!=mp_card_list_all.end();it++){
  4879. it->second->m_nFilterType = m_nFilterType;
  4880. if(it->second->m_pKalmanFilter == NULL && m_nFilterType != NO_FILTER){
  4881. if(theApp.use_filter_odd){
  4882. std::string temp = it->second->card_id;
  4883. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  4884. if(0 == a%2){
  4885. it->second->EnableFilter(m_nFilterType);
  4886. }
  4887. }else{
  4888. it->second->EnableFilter(m_nFilterType);
  4889. }
  4890. }
  4891. }
  4892. }
  4893. void CYAServerDlg::OnLogin(string const& name, message::ptr const& data, bool isAck, message::list &ack_resp)
  4894. {
  4895. int res_code = (int)data->get_map()["code"]->get_int();
  4896. switch (res_code)
  4897. {
  4898. case -1: // 用户未登录
  4899. {
  4900. //ws_login();
  4901. is_websocket_login = false;
  4902. break;
  4903. }
  4904. case 0:
  4905. {
  4906. if("" == data->get_map()["code"]->get_string()){ // 登录成功
  4907. is_websocket_login = true;
  4908. }else{ // 退出登录
  4909. is_websocket_login = false;
  4910. }
  4911. break;
  4912. }
  4913. default:
  4914. break;
  4915. }
  4916. }
  4917. void CYAServerDlg::OnLoginCallBack( message::list const& msglist /*= nullptr*/ )
  4918. {
  4919. message::ptr msg_ptr = msglist[0];
  4920. int n = (int)msg_ptr->get_map()["code"]->get_int();
  4921. is_websocket_login = (0 == n) ? true : false;
  4922. }
  4923. void CYAServerDlg::send_call_info()
  4924. {
  4925. EnterCriticalSection(&m_csCallInfo);
  4926. BYTE buf[LENGTH_SEND_BUF];
  4927. SocketMap::iterator it_sock;
  4928. CallInfoReaderMap::iterator it_call_reader = mp_call_info.begin();
  4929. if(it_call_reader == mp_call_info.end()){
  4930. LeaveCriticalSection(&m_csCallInfo);
  4931. return;
  4932. }
  4933. if(!it_call_reader->second->is_start_call){
  4934. LeaveCriticalSection(&m_csCallInfo);
  4935. return;
  4936. }
  4937. for(; it_call_reader != mp_call_info.end(); ++it_call_reader){
  4938. it_sock = mp_socket_list.begin();
  4939. for(it_sock;it_sock!=mp_socket_list.end();++it_sock){
  4940. if(it_sock->second->reader_id == it_call_reader->first){
  4941. break;
  4942. }
  4943. }
  4944. if(it_sock != mp_socket_list.end()){
  4945. memset(buf, 0, LENGTH_SEND_BUF);
  4946. int npos = 0, card_count = 0;
  4947. //卡数
  4948. card_count = it_call_reader->second->cards_count;
  4949. memcpy(&buf[npos], &card_count, sizeof(BYTE));
  4950. npos += sizeof(BYTE);
  4951. //呼叫类型
  4952. memcpy(&buf[npos], &it_call_reader->second->call_type, sizeof(BYTE));
  4953. npos += sizeof(BYTE);
  4954. if(!it_call_reader->second->is_call_all){ // 定员呼叫,加入卡列表
  4955. //循环添加卡信息
  4956. CallInfoCardMap::iterator it_call_card = it_call_reader->second->mpCard.begin();
  4957. for(; it_call_card != it_call_reader->second->mpCard.end(); ++it_call_card){
  4958. //呼叫类型
  4959. memcpy(&buf[npos], &it_call_card->second->call_type, sizeof(BYTE));
  4960. npos += sizeof(BYTE);
  4961. //卡类型
  4962. memcpy(&buf[npos], &it_call_card->second->card_type, sizeof(BYTE));
  4963. npos += sizeof(BYTE);
  4964. //卡ID长度
  4965. BYTE id_len = (BYTE)get_card_id_len(it_call_card->second->card_type);
  4966. memcpy(&buf[npos], &id_len, sizeof(BYTE));
  4967. npos += sizeof(BYTE);
  4968. //卡ID
  4969. if(id_len > 1){ // 标准卡id为4个字节,自组网卡为1个字节
  4970. CFunctions::memcpyDWord(buf, it_call_card->second->card_id, npos);
  4971. }else{
  4972. memcpy(&buf[npos], &it_call_card->second->card_id, id_len);
  4973. }
  4974. npos += id_len;
  4975. }
  4976. memcpy(&buf[0], &card_count, sizeof(BYTE));
  4977. }
  4978. SendData(it_sock->second->dwConnID,CHAR_CALL, npos, buf);
  4979. }
  4980. }
  4981. LeaveCriticalSection(&m_csCallInfo);
  4982. }
  4983. void CYAServerDlg::clear_call_info()
  4984. {
  4985. EnterCriticalSection(&m_csCallInfo);
  4986. CallInfoReaderMap::iterator it_call_reader = mp_call_info.begin();
  4987. time_t current_time = time(NULL);
  4988. for(; it_call_reader != mp_call_info.end(); ++it_call_reader){
  4989. if(it_call_reader->second->is_call_all){
  4990. }else{
  4991. CallInfoCardMap::iterator it_call_card = it_call_reader->second->mpCard.begin();
  4992. for(; it_call_card != it_call_reader->second->mpCard.end();){
  4993. if(difftime(current_time, it_call_card->second->start_time) > it_call_card->second->time_out * 60 ){
  4994. it_call_reader->second->mpCard.erase(it_call_card++);
  4995. it_call_reader->second->is_start_call = false;
  4996. }
  4997. }
  4998. }
  4999. }
  5000. LeaveCriticalSection(&m_csCallInfo);
  5001. }
  5002. int CYAServerDlg::get_card_id_len( int card_type )
  5003. {
  5004. switch (card_type)
  5005. {
  5006. //case CT_PERSON:
  5007. // return 4;
  5008. //case CT_VEHICLE:
  5009. // return 4;
  5010. case CT_ADHOC:
  5011. return 1;
  5012. default:
  5013. return 4;
  5014. //break;
  5015. }
  5016. }
  5017. std::string CYAServerDlg::get_json_call_test()
  5018. {
  5019. Json::Value root;
  5020. Json::Value val_data;
  5021. Json::Value val_stations;
  5022. Json::Value val_station;
  5023. Json::Value val_cards;
  5024. Json::Value val_card;
  5025. char _time[STR_LEN_TIME];
  5026. struct tm local_time;
  5027. //TRACE(_T("time memcpy 7\n"));
  5028. time_t tt = time(NULL);
  5029. localtime_s(&local_time, &tt);
  5030. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  5031. val_data[JSON_KEY_CALL_CARD_CALL_TIME] = _time;
  5032. val_data[JSON_KEY_CALL_CARD_CALL_TYPE] = 0;
  5033. val_data[JSON_KEY_CALL_CARD_USER_NAME] = "aaaaaa";
  5034. val_data[JSON_KEY_CALL_CARD_CALL_TIME_OUT] = 5;
  5035. val_station[JSON_KEY_CALL_CARD_STATION_ID] = 233;
  5036. val_stations.append(val_station);
  5037. val_station[JSON_KEY_CALL_CARD_STATION_ID] = 59;
  5038. val_stations.append(val_station);
  5039. val_card[JSON_KEY_CALL_CARD_CARD_TYPE_ID] = 3;
  5040. val_card[JSON_KEY_CALL_CARD_CARD_ID] = 5;
  5041. val_cards.append(val_card);
  5042. val_card[JSON_KEY_CALL_CARD_CARD_TYPE_ID] = 3;
  5043. val_card[JSON_KEY_CALL_CARD_CARD_ID] = 8;
  5044. val_cards.append(val_card);
  5045. val_data[JSON_KEY_CALL_CARD_STATIONS] = val_stations;
  5046. val_data[JSON_KEY_CALL_CARD_CARDS] = val_cards;
  5047. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_CALL_CARD_START;
  5048. root[JSON_ROOT_KEY_DATA] = val_data;
  5049. return root.toFastString();
  5050. }
  5051. void CYAServerDlg::init_base_data()
  5052. {
  5053. init_setting();
  5054. init_alarm_type();
  5055. init_dept();
  5056. init_map();
  5057. init_area();
  5058. init_reader();
  5059. init_antenna();
  5060. #ifdef ALGORITHM_TYPE_TOF
  5061. init_all_readers_coverage();
  5062. #elif defined ALGORITHM_TYPE_TDOA
  5063. init_tdoa_all_readers_coverage();
  5064. #endif
  5065. init_dev_adhoc();
  5066. init_antenna_sync();
  5067. init_card();
  5068. init_staffer();
  5069. init_vehicle();
  5070. }
  5071. void CYAServerDlg::load_his_data()
  5072. {
  5073. //load_his_down(); // 入井状态
  5074. //load_his_area(); // 所在区域
  5075. load_his_reader(); // 分站状态
  5076. load_his_card_postion(); // 所在位置
  5077. load_his_card_state();
  5078. deal_hist_card_postion();
  5079. }
  5080. void CYAServerDlg::load_his_down()
  5081. {
  5082. }
  5083. void CYAServerDlg::load_his_area()
  5084. {
  5085. CMysqlConn* pConn = NULL;
  5086. CDBConnGuard pDbGuard(pConn);
  5087. if(pConn == NULL){
  5088. return;
  5089. }
  5090. MYSQL_RES* pRes;
  5091. MYSQL_ROW pRow;
  5092. int err = 0;
  5093. char buf[LENGTH_SQL] = {0};
  5094. sprintf_s(buf, "select la.card_id, la.area_id, la.map_id, la.enter_time from his_location_area la \
  5095. where not exists(select 1 from his_location_area where card_id=la.card_id and enter_time> la.enter_time) \
  5096. and la.leave_time is null;");
  5097. pRes = pConn->Execute(buf, err);
  5098. int nRow = 0;
  5099. std::string enter_time;
  5100. while(pRow = mysql_fetch_row(pRes)){
  5101. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5102. if(it != mp_card_list_all.end()){
  5103. it->second->area_id = atoi(pRow[1]);
  5104. it->second->map_id = atoi(pRow[2]);
  5105. enter_time = pRow[3];
  5106. API_StringToTime(enter_time, it->second->enter_area_time);
  5107. nRow++;
  5108. }
  5109. }
  5110. mysql_free_result(pRes);
  5111. CString strlog;
  5112. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_AREA), nRow, _T(LOG_RECORD_COUNT));
  5113. show_log(strlog);
  5114. }
  5115. void CYAServerDlg::load_his_card_postion()
  5116. {
  5117. CMysqlConn* pConn = NULL;
  5118. CDBConnGuard pDbGuard(pConn);
  5119. if(pConn == NULL){
  5120. return;
  5121. }
  5122. MYSQL_RES* pRes;
  5123. MYSQL_ROW pRow;
  5124. int err = 0;
  5125. char buf[LENGTH_SQL] = {0};
  5126. sprintf_s(buf, "select l.card_id, l.cur_time, l.x, l.y, l.z, la.map_id, la.area_id, la.enter_time, att.start_time \
  5127. from his_location l, (select card_id, max(cur_time) cur_time from his_location where cur_time >= date_sub(now(), interval 2 hour) group by card_id) lx, \
  5128. (select la.* from his_location_area la, (select card_id, max(enter_time) enter_time from his_location_area where leave_time is null group by card_id) lax \
  5129. where la.card_id = lax.card_id and la.enter_time = lax.enter_time and la.leave_time is null) la, \
  5130. (select att.* from rpt_attendance att, (select card_id, max(start_time) start_time from rpt_attendance where end_time is null group by card_id) attx \
  5131. where att.card_id = attx.card_id and att.start_time = attx. start_time and att.end_time is null) att \
  5132. where l.card_id = lx.card_id and l.cur_time = lx.cur_time \
  5133. and l.card_id = la.card_id and l.area_id = la.area_id and l.cur_time >= la.enter_time \
  5134. and l.card_id = att.card_id and l.cur_time >= att.start_time;");
  5135. //sprintf_s(buf, "select l.card_id, l.cur_time, l.x, l.y, l.z, la.map_id, la.area_id, la.enter_time, att.start_time \
  5136. // from his_location l \
  5137. // ,(select l.card_id, l.cur_time from his_location l where not exists(select 1 from his_location where card_id=l.card_id and cur_time>l.cur_time) and cur_time>= date_sub(now(), interval 2 hour)) lx \
  5138. // ,(select la.card_id, la.map_id, la.area_id, la.enter_time from his_location_area la where not exists(select 1 from his_location_area where card_id=la.card_id and enter_time > la.enter_time) and la.leave_time is null) la \
  5139. // ,(select att.card_id, att.start_time from rpt_attendance att where not exists(select 1 from rpt_attendance where card_id=att.card_id and start_time>att.start_time) and att.end_time is null) att \
  5140. // where l.cur_time >= date_sub(now(), interval 2 hour) and l.card_id = lx.card_id and l.cur_time = lx.cur_time \
  5141. // and l.card_id = la.card_id and l.area_id = la.area_id and l.cur_time >= la.enter_time \
  5142. // and l.card_id = att.card_id and l.cur_time >= att.start_time;");
  5143. //pRes = pConn->Execute(buf, err);
  5144. pRes = pConn->Execute(buf, err);
  5145. int nRow = 0;
  5146. std::string rec_time, enter_time, start_time;
  5147. while(pRow = mysql_fetch_row(pRes)){
  5148. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5149. if(it != mp_card_list_all.end()){
  5150. rec_time = pRow[1];
  5151. API_StringToTime(rec_time, it->second->rec_time);
  5152. it->second->x = atof(pRow[2]);
  5153. it->second->y = atof(pRow[3]);
  5154. it->second->z = atof(pRow[4]);
  5155. it->second->last_x = it->second->x;
  5156. it->second->last_y = it->second->y;
  5157. it->second->last_z = it->second->z;
  5158. it->second->area_id = atoi(pRow[5]);
  5159. it->second->map_id = atoi(pRow[6]);
  5160. //it->second->map_scale =
  5161. enter_time = pRow[7];
  5162. API_StringToTime(enter_time, it->second->enter_area_time);
  5163. start_time = pRow[8];
  5164. API_StringToTime(start_time, it->second->down_time);
  5165. it->second->pos_state = DT_DOWN;
  5166. it->second->pos_state_old = DT_DOWN;
  5167. //it->second->deal_time = time(NULL);
  5168. it->second->is_hist = true;
  5169. it->second->isdealed = true;
  5170. it->second->issent = false;
  5171. nRow++;
  5172. //card_down_mine(it->second, true);
  5173. //card_enter_map(it->second, true);
  5174. //card_enter_area(it->second, true);
  5175. //if(it->second->card_type == CT_VEHICLE){
  5176. // mp_card_list_down_vehicle.insert(make_pair(it->second->card_id, it->second));
  5177. //}else if(it->second->card_type == CT_PERSON){
  5178. // mp_card_list_down_person.insert(make_pair(it->second->card_id, it->second));
  5179. //}
  5180. }
  5181. }
  5182. mysql_free_result(pRes);
  5183. CString strlog;
  5184. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_POSTION), nRow, _T(LOG_RECORD_COUNT));
  5185. show_log(strlog);
  5186. }
  5187. int CYAServerDlg::API_TimeToString( string &strDateStr,const time_t &timeData )
  5188. {
  5189. char chTmp[100] = {0};
  5190. memset(chTmp, 0, sizeof(chTmp));
  5191. struct tm *p = 0;
  5192. localtime_s(p, &timeData);
  5193. //p = localtime(&timeData);
  5194. p->tm_year = p->tm_year + 1900;
  5195. p->tm_mon = p->tm_mon + 1;
  5196. sprintf_s(chTmp,sizeof(chTmp),"%.4d-%.2d-%.2d %.2d:%.2d:%.2d",
  5197. p->tm_year, p->tm_mon, p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
  5198. strDateStr = chTmp;
  5199. return 0;
  5200. }
  5201. int CYAServerDlg::API_StringToTime( const string &strDateStr,time_t &timeData )
  5202. {
  5203. char *pBeginPos = (char*) strDateStr.c_str();
  5204. char *pPos = strstr(pBeginPos,"-");
  5205. if(pPos == NULL){
  5206. //printf("strDateStr[%s] err /n", strDateStr.c_str());
  5207. return -1;
  5208. }
  5209. int iYear = atoi(pBeginPos);
  5210. int iMonth = atoi(pPos + 1);
  5211. pPos = strstr(pPos + 1,"-");
  5212. if(pPos == NULL){
  5213. //printf("strDateStr[%s] err /n", strDateStr.c_str());
  5214. return -1;
  5215. }
  5216. int iDay = atoi(pPos + 1);
  5217. int iHour=0;
  5218. int iMin=0;
  5219. int iSec=0;
  5220. pPos = strstr(pPos + 1," ");
  5221. //为了兼容有些没精确到时分秒的
  5222. if(pPos != NULL){
  5223. iHour=atoi(pPos + 1);
  5224. pPos = strstr(pPos + 1,":");
  5225. if(pPos != NULL){
  5226. iMin=atoi(pPos + 1);
  5227. pPos = strstr(pPos + 1,":");
  5228. if(pPos != NULL){
  5229. iSec=atoi(pPos + 1);
  5230. }
  5231. }
  5232. }
  5233. struct tm sourcedate;
  5234. memset((void*)&sourcedate, 0, sizeof(sourcedate));
  5235. sourcedate.tm_sec = iSec;
  5236. sourcedate.tm_min = iMin;
  5237. sourcedate.tm_hour = iHour;
  5238. sourcedate.tm_mday = iDay;
  5239. sourcedate.tm_mon = iMonth - 1;
  5240. sourcedate.tm_year = iYear - 1900;
  5241. timeData = mktime(&sourcedate);
  5242. return 0;
  5243. }
  5244. int CYAServerDlg::init_card( string card_id /*= ""*/ )
  5245. {
  5246. CMysqlConn* pConn = NULL;
  5247. CDBConnGuard pDbGuard(pConn);
  5248. if(pConn == NULL){
  5249. return 1;
  5250. }
  5251. MYSQL_RES* pRes;
  5252. MYSQL_ROW pRow;
  5253. int err = 0;
  5254. char buf[LENGTH_SQL] = {0};
  5255. if(card_id.length() == 0){
  5256. sprintf_s(buf, "select card_id, card_type_id, state, is_count, ident from dat_card where state = 0;");
  5257. }else{
  5258. sprintf_s(buf, "select card_id, card_type_id, state, is_count, ident from dat_card where state = 0 and card_id='%s';", card_id.c_str());
  5259. }
  5260. pRes = pConn->Execute(buf, err);
  5261. Card* pCard = NULL;
  5262. int nRow = 0;
  5263. while(pRow = mysql_fetch_row(pRes)){
  5264. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5265. if(it != mp_card_list_all.end()){
  5266. pCard = it->second;
  5267. }else{
  5268. pCard = new Card(pRow[0], atoi(pRow[1]), theApp.z_offset);
  5269. #ifdef ALGORITHM_TYPE_TOF
  5270. pCard->set_reader_path(&mp_reader_path_list);
  5271. #elif defined ALGORITHM_TYPE_TDOA
  5272. pCard->set_reader_path(&mp_reader_path_list_tdoa);
  5273. #endif
  5274. mp_card_list_all.insert(make_pair(pCard->card_id, pCard));
  5275. nRow++;
  5276. if(m_bUseFilter){
  5277. if(theApp.use_filter_odd){
  5278. std::string temp = pRow[1];
  5279. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  5280. if(0 == a%2){
  5281. pCard->EnableFilter(m_nFilterType);
  5282. }
  5283. }else{
  5284. pCard->EnableFilter(m_nFilterType);
  5285. }
  5286. }
  5287. }
  5288. }
  5289. mysql_free_result(pRes);
  5290. CString strlog;
  5291. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_CARD), nRow, _T(LOG_RECORD_COUNT));
  5292. show_log(strlog);
  5293. return 0;
  5294. }
  5295. void CYAServerDlg::card_up_mine( Card* card )
  5296. {
  5297. card->up_time = card->deal_time;
  5298. store_data_card(card, RPT_ATTEND_UP);
  5299. if(CT_PERSON == card->card_type){
  5300. CardMap::iterator it_card = mp_card_list_down_person.find(card->card_id);
  5301. if(it_card != mp_card_list_down_person.end()){
  5302. mp_card_list_down_person.erase(it_card); // 从井下卡列表删除
  5303. }
  5304. if(mp_card_list_down_person.size() <= sls_setting.over_count_person && time_over_count_person >0){ // 取消报警
  5305. store_data_mine(ALARM_MINE_OVER_COUNT_PERSON_END);
  5306. time_over_count_person = 0;
  5307. }
  5308. }else if(CT_VEHICLE == card->card_type){
  5309. CardMap::iterator it_card = mp_card_list_down_vehicle.find(card->card_id);
  5310. if(it_card != mp_card_list_down_vehicle.end()){
  5311. //Card* card = it_card->second;
  5312. mp_card_list_down_vehicle.erase(it_card); // 从井下卡列表删除
  5313. if(card){
  5314. //delete card;
  5315. //card = NULL;
  5316. }
  5317. }
  5318. if(mp_card_list_down_vehicle.size() < sls_setting.over_count_vehicle && time_over_count_vehicle > 0){
  5319. store_data_mine(ALARM_MINE_OVER_COUNT_VEHICLE_END);
  5320. time_over_count_vehicle = 0;
  5321. }
  5322. }
  5323. DeptMap::iterator it_dept = mp_dept_list.find(card->dept_id);
  5324. if(it_dept != mp_dept_list.end()){
  5325. if(CT_PERSON == card->card_type){
  5326. CardMap::iterator it_card = it_dept->second->dept_card_list_person.find(card->card_id);
  5327. if(it_card != it_dept->second->dept_card_list_person.end()){
  5328. it_dept->second->dept_card_list_person.erase(it_card); // 从井下卡列表删除
  5329. }
  5330. store_data_card(card, ALARM_CARD_OVER_TIME_END);
  5331. deal_alarm_card(card, &mp_card_list_over_time_person, false, AF_CARD_OVER_TIME);
  5332. }else if(CT_VEHICLE == card->card_type){
  5333. CardMap::iterator it_card = it_dept->second->dept_card_list_vehicle.find(card->card_id);
  5334. if(it_card != it_dept->second->dept_card_list_vehicle.end()){
  5335. it_dept->second->dept_card_list_vehicle.erase(it_card); // 从井下卡列表删除
  5336. }
  5337. store_data_card(card, ALARM_CARD_OVER_TIME_END);
  5338. deal_alarm_card(card, &mp_card_list_over_time_vehicle, false, AF_CARD_OVER_TIME);
  5339. }
  5340. }
  5341. }
  5342. void CYAServerDlg::card_down_mine( Card* card )
  5343. {
  5344. card->down_time = card->deal_time;
  5345. if(CT_PERSON == card->card_type){
  5346. CardMap::iterator it_card = mp_card_list_down_person.find(card->card_id);
  5347. if(it_card == mp_card_list_down_person.end()){
  5348. mp_card_list_down_person.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5349. }
  5350. if(time_over_count_person == 0 && mp_card_list_down_person.size() > sls_setting.over_count_person){
  5351. //TRACE(_T("time memcpy 6\n"));
  5352. time_over_count_person = time(NULL);
  5353. store_data_mine(ALARM_MINE_OVER_COUNT_PERSON_START);
  5354. }
  5355. }else if(CT_VEHICLE == card->card_type){
  5356. CardMap::iterator it_card = mp_card_list_down_vehicle.find(card->card_id);
  5357. if(it_card == mp_card_list_down_vehicle.end()){
  5358. mp_card_list_down_vehicle.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5359. }
  5360. //如果井下车辆总数超过系统设置的车辆阈值,则存储车辆超员告警信息
  5361. if(time_over_count_vehicle == 0 && mp_card_list_down_vehicle.size() > sls_setting.over_count_vehicle){
  5362. //TRACE(_T("time memcpy 5\n"));
  5363. time_over_count_vehicle = time(NULL);
  5364. store_data_mine(ALARM_MINE_OVER_COUNT_VEHICLE_START);
  5365. }
  5366. }
  5367. DeptMap::iterator it_dept = mp_dept_list.find(card->dept_id);
  5368. if(it_dept != mp_dept_list.end()){
  5369. if(CT_PERSON == card->card_type){
  5370. CardMap::iterator it_card = it_dept->second->dept_card_list_person.find(card->card_id);
  5371. if(it_card == it_dept->second->dept_card_list_person.end()){
  5372. it_dept->second->dept_card_list_person.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5373. }
  5374. // 判断是否超员
  5375. }else if(CT_VEHICLE == card->card_type){
  5376. CardMap::iterator it_card = it_dept->second->dept_card_list_vehicle.find(card->card_id);
  5377. if(it_card == it_dept->second->dept_card_list_vehicle.end()){
  5378. it_dept->second->dept_card_list_vehicle.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5379. }
  5380. // 判断是否超员
  5381. }
  5382. }
  5383. store_data_card(card, RPT_ATTEND_DOWN);
  5384. }
  5385. void CYAServerDlg::send_sync_reader()
  5386. {
  5387. time_t cur_time;
  5388. struct tm local;
  5389. int wlen = 0;
  5390. BYTE SendBuffer[LENGTH_SEND_BUF];
  5391. BYTE bt_tmp;
  5392. // 遍历发送数据
  5393. int nPos = 0;
  5394. SocketMap::iterator it_sock = mp_socket_list.begin();
  5395. for(; it_sock != mp_socket_list.end(); ++it_sock){
  5396. wlen = 0;
  5397. cur_time = time(NULL);
  5398. memset(SendBuffer, 0, LENGTH_SEND_BUF);
  5399. localtime_s(&local, &cur_time);
  5400. bt_tmp = local.tm_sec;
  5401. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5402. wlen += sizeof(BYTE);
  5403. bt_tmp = local.tm_min;
  5404. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5405. wlen += sizeof(BYTE);
  5406. bt_tmp = local.tm_hour;
  5407. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5408. wlen += sizeof(BYTE);
  5409. bt_tmp = local.tm_mday;
  5410. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5411. wlen += sizeof(BYTE);
  5412. bt_tmp = local.tm_wday;
  5413. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5414. wlen += sizeof(BYTE);
  5415. bt_tmp = local.tm_mon + 1;
  5416. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5417. wlen += sizeof(BYTE);
  5418. bt_tmp = (local.tm_year + 1900)%100;
  5419. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5420. wlen += sizeof(BYTE);
  5421. SendData(it_sock->second->dwConnID , CHAR_SYNC_TIME, wlen, SendBuffer);
  5422. Sleep(20);
  5423. TRACE(_T("dwConnID: %d"),it_sock->second->dwConnID);
  5424. }
  5425. }
  5426. void CYAServerDlg::send_call_his_data()
  5427. {
  5428. if(g_is_rec_hist){
  5429. if(MessageBox(_T("正在接受收历史数据,请稍后再试"), _T("接收历史数据"), MB_OK) == IDOK){
  5430. return;
  5431. }
  5432. }
  5433. if (MessageBox(_T("确定要接收历史数据吗?"), _T("接收历史数据"), MB_OKCANCEL) != IDOK){
  5434. return;
  5435. }
  5436. UpdateData(FALSE);
  5437. bool bExit = false;
  5438. SocketMap::iterator it_sock = mp_socket_list.begin();
  5439. for(; it_sock != mp_socket_list.end(); ++it_sock){
  5440. if(it_sock->second->reader_id == m_reader_id_hist){
  5441. int wlen = 0;
  5442. WORD wchr = CHAR_LOCATEDATAHIS_TDOA;
  5443. BYTE SendBuffer[LENGTH_SEND_BUF];
  5444. memset(SendBuffer, 0, LENGTH_SEND_BUF);
  5445. SendData(it_sock->second->dwConnID, wchr, wlen, SendBuffer);
  5446. bExit = true;
  5447. break;
  5448. }
  5449. }
  5450. if(!bExit){
  5451. //if (MessageBox(_T("此分站未连接"), _T("请求历史数据"), MB_OK) == IDOK){
  5452. //
  5453. //}
  5454. }
  5455. }
  5456. void CYAServerDlg::OnBnCallHisData()
  5457. {
  5458. send_call_his_data();
  5459. }
  5460. void CYAServerDlg::deal_hist_card_postion()
  5461. {
  5462. CardMap::iterator it_card = mp_card_list_all.begin();
  5463. for(; it_card != mp_card_list_all.end(); ++it_card){
  5464. if(it_card->second->is_hist){
  5465. if(CT_VEHICLE == it_card->second->card_type){
  5466. MapInfoMap::iterator it_map = mp_map_list.find(it_card->second->map_id);
  5467. if(it_map != mp_map_list.end()){
  5468. it_map->second->map_card_list_vehicle.insert(make_pair(it_card->first, it_card->second));
  5469. it_card->second->map_scale = it_map->second->map_scale;
  5470. }
  5471. mp_card_list_down_vehicle.insert(make_pair(it_card->first, it_card->second));
  5472. AreaMap::iterator it_area = mp_area_list.find(it_card->second->area_id);
  5473. if(it_area != mp_area_list.end()){
  5474. it_area->second->area_card_list_vehicle.insert(make_pair(it_card->first, it_card->second));
  5475. if(0 == it_area->second->over_count_vehicle){
  5476. mp_card_list_forbidden_vehicle.insert(make_pair(it_card->first, it_card->second));
  5477. }
  5478. }
  5479. }else if(CT_PERSON == it_card->second->card_type){
  5480. MapInfoMap::iterator it_map = mp_map_list.find(it_card->second->map_id);
  5481. if(it_map != mp_map_list.end()){
  5482. it_map->second->map_card_list_person.insert(make_pair(it_card->first, it_card->second));
  5483. it_card->second->map_scale = it_map->second->map_scale;
  5484. }
  5485. mp_card_list_down_person.insert(make_pair(it_card->first, it_card->second));
  5486. AreaMap::iterator it_area = mp_area_list.find(it_card->second->area_id);
  5487. if(it_area != mp_area_list.end()){
  5488. it_area->second->area_card_list_person.insert(make_pair(it_card->first, it_card->second));
  5489. if(0 == it_area->second->over_count_person){
  5490. mp_card_list_forbidden_person.insert(make_pair(it_card->first, it_card->second));
  5491. }
  5492. }
  5493. }
  5494. }
  5495. }
  5496. }
  5497. void CYAServerDlg::deal_hist_card_alarm()
  5498. {
  5499. //CardMap mp_card_list_forbidden_vehicle;
  5500. //CardMap mp_card_list_over_time_vehicle;
  5501. //CardMap mp_card_list_over_speed_vehicle;
  5502. //CardMap mp_card_list_area_over_time_vehicle;
  5503. //CardMap mp_card_list_over_time_person; //
  5504. //CardMap mp_card_list_forbidden_person;
  5505. //CardMap mp_card_list_help;
  5506. //CardMap mp_card_list_area_over_time_person;
  5507. }
  5508. void CYAServerDlg::deal_hist_area()
  5509. {
  5510. //AreaMap mp_area_over_count_person;
  5511. //AreaMap mp_area_over_time_person;
  5512. //AreaMap mp_area_forbidden_person;
  5513. //AreaMap mp_area_over_count_vehicle;
  5514. //AreaMap mp_area_over_time_vehicle;
  5515. //AreaMap mp_area_forbidden_vehicle;
  5516. }
  5517. void CYAServerDlg::load_his_reader()
  5518. {
  5519. CMysqlConn* pConn = NULL;
  5520. CDBConnGuard pDbGuard(pConn);
  5521. if(pConn == NULL){
  5522. return;
  5523. }
  5524. MYSQL_RES* pRes;
  5525. MYSQL_ROW pRow;
  5526. int err = 0;
  5527. char buf[LENGTH_SQL] = {0};
  5528. sprintf_s(buf, "select ar.reader_id, ar.start_time, ar.rec_time from his_alarm_reader ar \
  5529. where not exists(select 1 from his_alarm_reader where reader_id=ar.reader_id and start_time> ar.start_time) \
  5530. and ar.end_time IS NULL;");
  5531. pRes = pConn->Execute(buf, err);
  5532. int nRow = 0;
  5533. std::string rec_time, lost_time;
  5534. while(pRow = mysql_fetch_row(pRes)){
  5535. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[0]));
  5536. if(it != mp_reader_list.end()){
  5537. lost_time = pRow[1];
  5538. rec_time = pRow[2];
  5539. API_StringToTime(rec_time, it->second->rec_time);
  5540. API_StringToTime(lost_time, it->second->lost_time);
  5541. it->second->state = STATUS_DEVICE_ERROR;
  5542. nRow++;
  5543. }
  5544. }
  5545. mysql_free_result(pRes);
  5546. CString strlog;
  5547. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_READER), nRow, _T(LOG_RECORD_COUNT));
  5548. show_log(strlog);
  5549. }
  5550. void CYAServerDlg::store_data_mine( int tag )
  5551. {
  5552. char sql[LENGTH_SQL] = {'\0'};
  5553. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  5554. //TRACE(_T("time memcpy 3\n"));
  5555. time_t cur_time = time(NULL);
  5556. struct tm local_time, local_time_ex;
  5557. switch(tag){
  5558. case ALARM_MINE_OVER_COUNT_PERSON_START:
  5559. {
  5560. localtime_s(&local_time, &time_over_count_person);
  5561. localtime_s(&local_time_ex, &cur_time);
  5562. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5563. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5564. int alarm_type_id = ATID_OVER_COUNT_PERSON;
  5565. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_info(alarm_type_id, start_time) VALUES(%d, '%s');",
  5566. alarm_type_id, _time);
  5567. break;
  5568. }
  5569. case ALARM_MINE_OVER_COUNT_PERSON_END:
  5570. {
  5571. localtime_s(&local_time, &time_over_count_person);
  5572. localtime_s(&local_time_ex, &cur_time);
  5573. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5574. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5575. int alarm_type_id = ATID_OVER_COUNT_PERSON;
  5576. sprintf_s(sql, LENGTH_SQL, "UPDATE his_alarm_info set end_time='%s' where alarm_type_id=%d and start_time='%s';",
  5577. _time_ex, alarm_type_id, _time);
  5578. break;
  5579. }
  5580. case ALARM_MINE_OVER_COUNT_VEHICLE_START:
  5581. {
  5582. localtime_s(&local_time, &time_over_count_vehicle);
  5583. localtime_s(&local_time_ex, &cur_time);
  5584. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5585. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5586. int alarm_type_id = ATID_OVER_COUNT_VEHICLE;
  5587. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_info(alarm_type_id, start_time) VALUES(%d, '%s');",
  5588. alarm_type_id, _time);
  5589. break;
  5590. }
  5591. case ALARM_MINE_OVER_COUNT_VEHICLE_END:
  5592. {
  5593. localtime_s(&local_time, &time_over_count_vehicle);
  5594. localtime_s(&local_time_ex, &cur_time);
  5595. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5596. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5597. int alarm_type_id = ATID_OVER_COUNT_VEHICLE;
  5598. sprintf_s(sql, LENGTH_SQL, "UPDATE his_alarm_info set end_time='%s' where alarm_type_id=%d and start_time='%s';",
  5599. _time_ex, alarm_type_id, _time);
  5600. break;
  5601. }
  5602. default:
  5603. return;
  5604. }
  5605. execute_sql(sql);
  5606. }
  5607. void CYAServerDlg::deal_card_state( Card* card )
  5608. {
  5609. // 电量
  5610. if(card->power_state == 0 && card->power_state_last != 0){
  5611. card->status_power = STATUS_NORMAL;
  5612. store_data_card(card, ALARM_CARD_LOW_POWER_END);
  5613. }
  5614. if(card->power_state_last == 0 && card->power_state != 0){
  5615. card->low_power_time = card->deal_time;
  5616. store_data_card(card, ALARM_CARD_LOW_POWER_START);
  5617. }
  5618. card->power_state_last = card->power_state;
  5619. }
  5620. void CYAServerDlg::load_his_card_state()
  5621. {
  5622. CMysqlConn* pConn = NULL;
  5623. CDBConnGuard pDbGuard(pConn);
  5624. if(pConn == NULL){
  5625. return ;
  5626. }
  5627. MYSQL_RES* pRes;
  5628. MYSQL_ROW pRow;
  5629. int err = 0;
  5630. char buf[LENGTH_SQL] = {0};
  5631. sprintf_s(buf, "select ac.card_id, ac.alarm_type_id, ac.start_time from his_alarm_card ac \
  5632. where not exists(select 1 from his_alarm_card where card_id=ac.card_id and alarm_type_id=ac.alarm_type_id and start_time> ac.start_time) \
  5633. and ac.end_time is NULL;");
  5634. pRes = pConn->Execute(buf, err);
  5635. int nRow = 0;
  5636. std::string start_time;
  5637. while(pRow = mysql_fetch_row(pRes)){
  5638. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5639. if(it != mp_card_list_all.end()){
  5640. switch (atoi(pRow[1]))
  5641. {
  5642. case ATID_POWER:
  5643. it->second->power_state = 1;
  5644. it->second->power_state_last = 1;
  5645. it->second->status_power = STATUS_ERROR;
  5646. start_time = pRow[2];
  5647. API_StringToTime(start_time, it->second->low_power_time);
  5648. default:
  5649. break;
  5650. }
  5651. nRow++;
  5652. }
  5653. }
  5654. mysql_free_result(pRes);
  5655. CString strlog;
  5656. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_STATE), nRow, _T(LOG_RECORD_COUNT));
  5657. show_log(strlog);
  5658. }
  5659. EnHandleResult CYAServerDlg::OnPrepareListen( ITcpServer* pSender, SOCKET soListen )
  5660. {
  5661. TCHAR szAddress[40];
  5662. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  5663. USHORT usPort;
  5664. pSender->GetListenAddress(szAddress, iAddressLen, usPort);
  5665. //::PostOnPrepareListen(szAddress, usPort);
  5666. return HR_OK;
  5667. }
  5668. EnHandleResult CYAServerDlg::OnAccept( ITcpServer* pSender, CONNID dwConnID, SOCKET soClient )
  5669. {
  5670. BOOL bPass = TRUE;
  5671. TCHAR szAddress[40];
  5672. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  5673. USHORT usPort;
  5674. pSender->GetRemoteAddress(dwConnID, szAddress, iAddressLen, usPort);
  5675. //::PostOnAccept(dwConnID, szAddress, usPort, bPass);
  5676. return HR_OK;
  5677. }
  5678. EnHandleResult CYAServerDlg::OnSend( ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength )
  5679. {
  5680. //::PostOnSend(dwConnID, pData, iLength);
  5681. return HR_OK;
  5682. }
  5683. EnHandleResult CYAServerDlg::OnReceive( ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength )
  5684. {
  5685. TRACE(_T("OnReceive: %d, %d\n"), iLength, dwConnID);
  5686. DWORD dw = ::GetTickCount();
  5687. ParseData *data = NULL;
  5688. data = (ParseData*)malloc(sizeof(ParseData));
  5689. data->handle = this;
  5690. data->dwConnID = dwConnID;
  5691. data->len = iLength;
  5692. memset(data->buf, 0, LENGTH_MSG_4K);
  5693. //TRACE(_T("9 malloc \n"));
  5694. memcpy(data->buf, pData, iLength);
  5695. //TRACE(_T("m_nMalloctimes = %d \n"),++m_nMallocTimes);
  5696. QueueUserWorkItem(_parse_data_server, (LPVOID)data, WT_EXECUTEDEFAULT);
  5697. //parse_data_server(pData, iLength, dwConnID);
  5698. //TRACE(_T("parse_data_server: %d, %d, %d\r\n"), ::GetTickCount() - dw, dwConnID, iLength);
  5699. return HR_OK;
  5700. }
  5701. EnHandleResult CYAServerDlg::OnClose( ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode )
  5702. {
  5703. ::PostMessage(this->GetSafeHwnd(), WM_REMOVE_SOCKET, NULL, (LPARAM)dwConnID);
  5704. return HR_OK;
  5705. }
  5706. EnHandleResult CYAServerDlg::OnShutdown( ITcpServer* pSender )
  5707. {
  5708. return HR_OK;
  5709. }
  5710. _SOCK* CYAServerDlg::get_socket_by_count( DWORD dwConnID )
  5711. {
  5712. SocketMap::iterator _sock = mp_socket_list.begin();
  5713. for(; _sock != mp_socket_list.end(); ++_sock){
  5714. if(_sock->second->dwConnID == dwConnID){
  5715. return _sock->second;
  5716. }
  5717. }
  5718. return NULL;
  5719. }
  5720. afx_msg LRESULT CYAServerDlg::OnMsgRefreshIpList(WPARAM wParam, LPARAM lParam)
  5721. {
  5722. EnterCriticalSection(&m_csRefreshList);
  5723. m_listctrl_reader.SetRedraw(FALSE);
  5724. m_listctrl_reader.DeleteAllItems();
  5725. SocketMap::reverse_iterator it_sock = mp_socket_list.rbegin();
  5726. for(; it_sock != mp_socket_list.rend(); ++it_sock){
  5727. AddItem(it_sock->second->sip, it_sock->second->reader_id, it_sock->second->state);
  5728. }
  5729. m_listctrl_reader.SetRedraw(TRUE);
  5730. LeaveCriticalSection(&m_csRefreshList);
  5731. return 0;
  5732. }
  5733. void CYAServerDlg::parse_data_locate_card_his( BYTE* DataBuffer, int& nCurPos, int reader_id, DWORD wTickCount, CString strTime, unsigned short wChr)
  5734. {
  5735. // 按时间分组解析
  5736. // 组长度
  5737. WORD wframelen = 0;
  5738. CFunctions::getWord(DataBuffer, &wframelen, nCurPos);
  5739. nCurPos += sizeof(WORD);
  5740. int nframepos = nCurPos;
  5741. // 数据保存时间 7字节,年,月,周,日,时,分,秒
  5742. BYTE btSec = 0;
  5743. //TRACE(_T("10 \n"));
  5744. memcpy(&btSec, &DataBuffer[nCurPos], sizeof(BYTE));
  5745. nCurPos += sizeof(BYTE);
  5746. BYTE btMin = 0;
  5747. memcpy(&btMin, &DataBuffer[nCurPos], sizeof(BYTE));
  5748. nCurPos += sizeof(BYTE);
  5749. BYTE btHour = 0;
  5750. memcpy(&btHour, &DataBuffer[nCurPos], sizeof(BYTE));
  5751. nCurPos += sizeof(BYTE);
  5752. BYTE btDay = 0;
  5753. memcpy(&btDay, &DataBuffer[nCurPos], sizeof(BYTE));
  5754. nCurPos += sizeof(BYTE);
  5755. BYTE btWeek = 0;
  5756. memcpy(&btWeek, &DataBuffer[nCurPos], sizeof(BYTE));
  5757. nCurPos += sizeof(BYTE);
  5758. BYTE btMonth = 0;
  5759. memcpy(&btMonth, &DataBuffer[nCurPos], sizeof(BYTE));
  5760. nCurPos += sizeof(BYTE);
  5761. BYTE btYear = 0;
  5762. memcpy(&btYear, &DataBuffer[nCurPos], sizeof(BYTE));
  5763. nCurPos += sizeof(BYTE);
  5764. CString strhistime;
  5765. strhistime.Format(_T("20%.2d-%.2d-%.2d %.2d:%.2d:%.2d"), btYear%100, btMonth, btDay, btHour, btMin, btSec );
  5766. while(nCurPos - nframepos < wframelen){ // 一组数据
  5767. BYTE btCardType = 0;
  5768. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  5769. nCurPos += sizeof(BYTE);
  5770. DWORD dwCardId = 0;
  5771. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  5772. nCurPos += sizeof(DWORD);
  5773. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  5774. Card* pCard = new Card(str_card_id, btCardType, theApp.z_offset);
  5775. pCard->reader_id = reader_id;
  5776. pCard->str_his_time = CFunctions::wc2c(strhistime);
  5777. pCard->reader_tickcount = wTickCount;
  5778. pCard->str_rec_time = CFunctions::wc2c(strTime);
  5779. //LONG64 l64cardid = btCardType;
  5780. //l64cardid <<= 32;
  5781. //l64cardid |= dwCardId;
  5782. switch(btCardType)
  5783. {
  5784. case CT_VEHICLE:
  5785. {
  5786. //报文时间
  5787. WORD wCardTickCount = 0;
  5788. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  5789. nCurPos += sizeof(WORD);
  5790. pCard->time_stamp = wCardTickCount;
  5791. BYTE btTypeAndPower = 0;
  5792. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  5793. nCurPos += sizeof(BYTE);
  5794. //报文类型
  5795. BYTE btType = 0;
  5796. btType = (btTypeAndPower >>4) & 0x0F;
  5797. //电池电量
  5798. BYTE btPower = 0;
  5799. btPower = btTypeAndPower & 0x0F;
  5800. pCard->ranging_type = btType;
  5801. pCard->power_state = btPower;
  5802. //保留
  5803. nCurPos += sizeof(BYTE);
  5804. //加速度
  5805. BYTE btAcceleration = 0;
  5806. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  5807. nCurPos += sizeof(BYTE);
  5808. pCard->accelerate_state = btAcceleration;
  5809. //定位时间戳Tsp // 字序
  5810. LONG64 lTime1 = 0;
  5811. BYTE btTemp = 0;
  5812. int nRangingPos = nCurPos;
  5813. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  5814. nCurPos += sizeof(BYTE);
  5815. DWORD dwTemp = 0;
  5816. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  5817. nCurPos += sizeof(DWORD);
  5818. lTime1 = btTemp;
  5819. lTime1 = lTime1 << 32;
  5820. lTime1 |= dwTemp;
  5821. pCard->flying_time = lTime1;
  5822. double dbldist = CFunctions::getDistance(lTime1);
  5823. pCard->distance = dbldist;
  5824. BYTE btAntenna = 0;
  5825. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  5826. nCurPos += sizeof(BYTE);
  5827. btAntenna = btAntenna & 0xFF;
  5828. pCard->antenna_id = btAntenna;
  5829. if(CHAR_LOCATEDATAHIS_TDOA == wChr ){
  5830. // 分站时间同步序列号
  5831. WORD wSyncNum = 0;
  5832. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  5833. nCurPos += sizeof(WORD);
  5834. // 信号强度
  5835. WORD wStrength = 0;
  5836. CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  5837. nCurPos += sizeof(WORD);
  5838. }
  5839. break;
  5840. }
  5841. case CT_PERSON:
  5842. {
  5843. break;
  5844. }
  5845. default:
  5846. {
  5847. //strBuf.Format(_T("无法识别的卡类型:%d\r\n"), btCardType);
  5848. break;
  5849. }
  5850. }
  5851. store_data_card(pCard, HIS_RAW_DATA);
  5852. delete pCard;
  5853. pCard = NULL;
  5854. }
  5855. }
  5856. void CYAServerDlg::parse_data_locate_reader_his( BYTE * DataBuffer, int nLen, int& nCurPos, int& reader_id, int& nTick, CString& strtime, unsigned short wChr)
  5857. {
  5858. //CString strTime;
  5859. strtime.Format(_T("%s"), COleDateTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S")));
  5860. DWORD dwReaderID = 0;
  5861. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  5862. nCurPos += sizeof(DWORD);
  5863. WORD wTickCount = 0;
  5864. CFunctions::getWord(DataBuffer, &wTickCount, nCurPos);
  5865. nCurPos += sizeof(WORD);
  5866. }
  5867. void CYAServerDlg::parse_data_reader_synctime(BYTE *DataBuffer, int nLen, int& nCurPos)
  5868. {
  5869. while(nCurPos < nLen - sizeof(WORD)){
  5870. DWORD dwReaderID = 0; // 本机分站号
  5871. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  5872. nCurPos += sizeof(DWORD);
  5873. BYTE btAnt = 0; // 本机发送天线
  5874. //TRACE(_T("11 \n"));
  5875. memcpy(&btAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  5876. nCurPos += sizeof(BYTE);
  5877. DWORD dwRootReaderID = 0; // root分站号
  5878. CFunctions::getDWord(DataBuffer, &dwRootReaderID, nCurPos);
  5879. nCurPos += sizeof(DWORD);
  5880. BYTE btRootAnt = 0; // root天线
  5881. memcpy(&btRootAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  5882. nCurPos += sizeof(BYTE);
  5883. WORD wSyncNum = 0; // 序列号
  5884. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  5885. nCurPos += sizeof(WORD);
  5886. WORD wSyncLevel = 0; // 同步等级
  5887. CFunctions::getWord(DataBuffer, &wSyncLevel, nCurPos);
  5888. nCurPos += sizeof(WORD);
  5889. LONG64 lTime1 = 0, lTime2 = 0;
  5890. BYTE btTemp = 0;
  5891. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  5892. nCurPos += sizeof(BYTE);
  5893. DWORD dwTemp = 0;
  5894. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  5895. nCurPos += sizeof(DWORD);
  5896. lTime1 = btTemp; // 本机发送时间戳
  5897. lTime1 = lTime1 << 32;
  5898. lTime1 |= dwTemp;
  5899. btTemp = 0;
  5900. dwTemp = 0;
  5901. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  5902. nCurPos += sizeof(BYTE);
  5903. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  5904. nCurPos += sizeof(DWORD);
  5905. lTime2 = btTemp; // 本机接收时间戳
  5906. lTime2 = lTime2 << 32;
  5907. lTime2 |= dwTemp;
  5908. /*CString strLog;
  5909. strLog.Format(_T("id1:%d, id2:%d, syncnum:%d, level:%d, send:%I64u, rec:%I64u"), dwReaderID, dwRootReaderID, wSyncNum, wSyncLevel, lTime1, lTime2);
  5910. writeErrorLog(_T("SYNC_S"), strLog, true);*/
  5911. HostServer::SyncTimeMsg msg;
  5912. msg.LocalIdCode(dwReaderID);
  5913. msg.LocalIdCode((msg.LocalIdCode() << 8) + btAnt);
  5914. msg.UpperIdCode(dwRootReaderID);
  5915. msg.UpperIdCode((msg.UpperIdCode() << 8) + btRootAnt);
  5916. msg.SyncNum(wSyncNum);
  5917. msg.SyncLevel(wSyncLevel);
  5918. msg.LocalStationSendTime(lTime1);
  5919. msg.LocalStationReceiveTime(lTime2);
  5920. syncmanager.analyzeSyncMsg(msg);
  5921. if(wSyncLevel == 0){
  5922. EnterCriticalSection(&m_csSyncTime);
  5923. umpRootSyncNum[dwReaderID] = wSyncNum;
  5924. LeaveCriticalSection(&m_csSyncTime);
  5925. }
  5926. ReaderMap::iterator it = mp_reader_list.find(dwReaderID);
  5927. if(it != mp_reader_list.end()){
  5928. it->second->sync_level = wSyncLevel;
  5929. }
  5930. if(m_log_parse_data){
  5931. CString strLog;
  5932. strLog.Format(_T("id1:%d, id2:%d, syncnum:%d, level:%d, send:%I64u, rec:%I64u"), dwReaderID, dwRootReaderID, wSyncNum, wSyncLevel, lTime1, lTime2);
  5933. writeErrorLog(_T("SYNC_S"), strLog, true);
  5934. //strLog = _T("");
  5935. strLog.Empty();
  5936. }
  5937. }
  5938. }
  5939. int CYAServerDlg::init_antenna_sync()
  5940. {
  5941. ReaderMap::iterator itReader = mp_reader_list.begin();
  5942. // 初始化数组,将分站添加到列表,只有一个天线
  5943. for(; itReader != mp_reader_list.end(); ++itReader){
  5944. syncmanager.updateAnchor(itReader->second->reader_id, 1,
  5945. itReader->second->ant[0]->antenna_x * itReader->second->map_scale,
  5946. itReader->second->ant[0]->antenna_y * itReader->second->map_scale,
  5947. itReader->second->ant[0]->antenna_z * itReader->second->map_scale);
  5948. }
  5949. // 根据坐标计算分站间距离
  5950. for (auto it = syncmanager._anchors.begin(); it != syncmanager._anchors.end(); it++)
  5951. {
  5952. for (auto it2 = syncmanager._anchors.begin(); it2 != syncmanager._anchors.end(); it2++)
  5953. {
  5954. if(it != it2)
  5955. {
  5956. double d = sqrt(pow((it->second.x - it2->second.x), 2)
  5957. + pow((it->second.y - it2->second.y), 2)
  5958. + pow((it->second.z - it2->second.z), 2)) * 10000 / (2.99702547 * 15.65);
  5959. syncmanager.updateDistance(it->first >>8, it->first & 0xFF, it2->first >> 8, it2->first & 0xFF,d);
  5960. }
  5961. }
  5962. }
  5963. return 0;
  5964. }
  5965. void CYAServerDlg::Test()
  5966. {
  5967. ReceiveDataMap pRdm;
  5968. pRdm.clear();
  5969. double dMapScale = 3.46;
  5970. /*_coordinate** cd = new _coordinate*[4];
  5971. cd[0] = NULL;
  5972. cd[1] = NULL;
  5973. cd[2] = NULL;
  5974. cd[3] = NULL;
  5975. _coordinate c1;
  5976. c1.tt = 448142133759;
  5977. cd[0] = &c1;
  5978. _coordinate c2;
  5979. c2.tt = 448142159656;
  5980. cd[1] = &c2;
  5981. _coordinate c3;
  5982. c3.tt = 448142221673;
  5983. cd[2] = &c3;
  5984. _coordinate c4;
  5985. c4.tt = 448142175733;
  5986. cd[3] = &c4;
  5987. //HeapSort(cd,4);
  5988. SelectSort(cd,4);*/
  5989. //34
  5990. ReceiveData* prd2 = new ReceiveData();
  5991. prd2->reader_id = 218;
  5992. prd2->antenna_id = 1;
  5993. prd2->rec_time_stamp = 60380465780;//283613853712;//
  5994. prd2->x = 164.0*dMapScale;
  5995. prd2->y = 449.5*dMapScale;
  5996. prd2->z = 0;
  5997. prd2->special = 0;
  5998. pRdm.insert(ReceiveDataMap::value_type(prd2->reader_id,*prd2));
  5999. //35
  6000. ReceiveData* prd3 = new ReceiveData();
  6001. prd3->reader_id = 217;
  6002. prd3->antenna_id = 1;
  6003. prd3->rec_time_stamp = 60380488541;//283613846609;
  6004. prd3->x = 210.1*dMapScale;
  6005. prd3->y = 449.5*dMapScale;
  6006. prd3->z = 0;
  6007. prd2->special = 0;
  6008. pRdm.insert(ReceiveDataMap::value_type(prd3->reader_id,*prd3));
  6009. //36
  6010. //ReceiveData* prd1 = new ReceiveData();
  6011. //prd1->reader_id = 214;
  6012. //prd1->antenna_id = 1;
  6013. //prd1->rec_time_stamp = 464710764016;//283613846791;
  6014. //prd1->x = 328.7*dMapScale;
  6015. //prd1->y = 449.5*dMapScale;
  6016. //prd1->z = 0;
  6017. //prd1->special = 0;
  6018. //pRdm.insert(ReceiveDataMap::value_type(prd1->reader_id,*prd1));
  6019. //ReceiveData* prd4 = new ReceiveData();
  6020. //prd4->reader_id = 213;
  6021. //prd4->antenna_id = 1;
  6022. //prd4->rec_time_stamp = 464710783767;//283613846609;
  6023. //prd4->x = 356.3*dMapScale;
  6024. //prd4->y = 449.5*dMapScale;
  6025. //prd4->z = 0;
  6026. //pRdm.insert(ReceiveDataMap::value_type(prd4->reader_id,*prd4));
  6027. //ReceiveData* prd5 = new ReceiveData();
  6028. //prd5->reader_id = 205;
  6029. //prd5->antenna_id = 1;
  6030. //prd5->rec_time_stamp = 630968206079;//283613846609;
  6031. //prd5->x = 804.000000*dMapScale;
  6032. //prd5->y = 285.200000*dMapScale;
  6033. //prd5->z = 0;
  6034. //pRdm.insert(ReceiveDataMap::value_type(prd5->reader_id,*prd5));
  6035. //ReceiveData* prd5 = new ReceiveData();
  6036. //prd5->reader_id = 205;
  6037. //prd5->antenna_id = 1;
  6038. //prd5->rec_time_stamp = 630968206079;//283613846609;
  6039. //prd5->x = 804.000000*dMapScale;
  6040. //prd5->y = 449.500000*dMapScale;
  6041. //prd5->z = 0;
  6042. //pRdm.insert(ReceiveDataMap::value_type(prd5->reader_id,*prd5));
  6043. POS* p = NULL;
  6044. p = LocateAlgorithm::Pos(&pRdm,mp_reader_path_list_tdoa);
  6045. bool bRet = false;
  6046. bRet = LocateAlgorithm::CheckPosInValid(p,&pRdm,dMapScale);
  6047. if(bRet){
  6048. p->posx = INVALID_COORDINATE ;
  6049. p->posy = INVALID_COORDINATE ;
  6050. p->posz = -2 ;
  6051. }
  6052. double x = p->posx / dMapScale;
  6053. double y = p->posy / dMapScale;
  6054. }
  6055. void CYAServerDlg::release_memory()
  6056. {
  6057. //释放CYAServer中new的内存
  6058. if(theApp.m_path_monitor){
  6059. delete[] theApp.m_path_monitor;
  6060. theApp.m_path_monitor = NULL;
  6061. }
  6062. //mp_area_list
  6063. //mp_map_list
  6064. //mp_card_list_all
  6065. //mp_reader_list
  6066. release_dept_memory();
  6067. delete m_qsmSQL;
  6068. }
  6069. /*
  6070. * 释放mp_dept_list中的new的内存
  6071. *
  6072. * param
  6073. * 无
  6074. *
  6075. * return
  6076. * 无
  6077. *
  6078. */
  6079. void CYAServerDlg::release_dept_memory()
  6080. {
  6081. if(mp_dept_list.size() > 0){
  6082. DeptMap::iterator it = mp_dept_list.begin();
  6083. for(it ;it != mp_dept_list.end();){
  6084. Dept* tmp = (Dept*)(it->second);
  6085. mp_dept_list.erase(it);
  6086. delete tmp;
  6087. tmp = NULL;
  6088. it = mp_dept_list.begin();
  6089. }
  6090. }
  6091. }
  6092. afx_msg LRESULT CYAServerDlg::OnWriteErrorLog(WPARAM wParam, LPARAM lParam)
  6093. {
  6094. LogMsg* pMsg = (LogMsg*)wParam;
  6095. CString strFile = pMsg->strFile;
  6096. bool bTime = pMsg->isNeedTime;
  6097. CString strErr = pMsg->strLog;
  6098. writeErrorLogEx(strFile, strErr, bTime);
  6099. strErr.Empty();
  6100. strFile.Empty();
  6101. delete pMsg;
  6102. return 0;
  6103. }
  6104. void CYAServerDlg::parse_data_server( const BYTE * pData, int nLen, DWORD dwConnId )
  6105. {
  6106. //TRACE(_T("in server \n"));
  6107. //改为拆成小包post
  6108. EnterCriticalSection(&m_csParseDataServer);
  6109. //TRACE(_T("in server cs \n"));
  6110. //if(m_log_raw_data){
  6111. // //CString strBuf;
  6112. // //formatByteArray(strBuf, (BYTE*)pData, nLen);
  6113. // //writeErrorLog(_T("RAW_SSSS"), strBuf, false);
  6114. //}
  6115. int read_length = 0;
  6116. int pkg_len = 0;
  6117. BYTE *Buf = new BYTE[LENGTH_MSG_1M];
  6118. if(Buf == NULL){
  6119. LeaveCriticalSection(&m_csParseDataServer);
  6120. return;
  6121. }
  6122. memset(Buf, 0, LENGTH_MSG_1M);
  6123. //TRACE(_T("12 \n"));
  6124. SocketBufferMap::iterator it = mp_socket_buffer_list.find(dwConnId);
  6125. if(it != mp_socket_buffer_list.end()){ // 有此socket数据
  6126. if(nLen + it->second->wReadLen > LENGTH_MSG_1M){
  6127. //_server->Disconnect(dwConnId); // 出现错误数据或者溢出,断开连接
  6128. //ASSERT(0);
  6129. LeaveCriticalSection(&m_csParseDataServer);
  6130. return ;
  6131. }
  6132. if(it->second->wReadLen > 0){
  6133. memcpy(Buf, it->second->pData, it->second->wReadLen);
  6134. }
  6135. memcpy(&Buf[it->second->wReadLen], pData, nLen);
  6136. it->second->wReadLen += nLen;
  6137. nLen = it->second->wReadLen;
  6138. // read_length = it->second->wReadLen + nLen;
  6139. }else{
  6140. memcpy(Buf, pData, nLen);
  6141. }
  6142. while (read_length < nLen){
  6143. pkg_len = MAKEWORD(Buf[read_length + 1], Buf[read_length]);
  6144. pkg_len += sizeof(WORD); // 长度
  6145. if(read_length + pkg_len > nLen){
  6146. break; // 有半个包,溢出,保留与下个包合并
  6147. }
  6148. //将完整包送出
  6149. ParseData *data = (ParseData*)malloc(sizeof(ParseData));
  6150. data->handle = this;
  6151. data->dwConnID = dwConnId;
  6152. data->len = pkg_len;
  6153. memset(data->buf, 0, LENGTH_MSG_4K);
  6154. //由于存在pkg_len大于LENGTH_MSG_4K的情况,导致memcpy出错的问题;
  6155. //原因猜测可能是第三方库缓存过大再发送过来的原因
  6156. if(pkg_len > LENGTH_MSG_4K){
  6157. //TRACE(_T("package is too long. \n"));
  6158. free(data);
  6159. data = NULL;
  6160. if(Buf){
  6161. delete[] Buf;
  6162. Buf = NULL;
  6163. }
  6164. LeaveCriticalSection(&m_csParseDataServer);
  6165. return;
  6166. }
  6167. memcpy(data->buf, &Buf[read_length], pkg_len);
  6168. QueueUserWorkItem(_parse_package_data, (LPVOID)data, WT_EXECUTEDEFAULT);
  6169. read_length += pkg_len;
  6170. //TRACE(_T("while 1: %d"),read_length);
  6171. }
  6172. if(read_length >= nLen){ //没剩下数据, 直接解析
  6173. if(it != mp_socket_buffer_list.end()){
  6174. it->second->wLen = 0;
  6175. it->second->wReadLen = 0;
  6176. it->second->dwConnID = dwConnId;
  6177. //memset(it->second->pData, 0, LENGTH_MSG_1M);
  6178. _SOCKET_BUFFER* pp = it->second;
  6179. mp_socket_buffer_list.erase(it);
  6180. free(pp);
  6181. //memset(pp, 0, sizeof(_SOCKET_BUFFER));
  6182. pp = NULL;
  6183. }
  6184. }else{ // 有剩余数据,保存起来
  6185. if(it != mp_socket_buffer_list.end()){
  6186. //it->second->wLen = pkg_len - sizeof(WORD);
  6187. try{
  6188. if(it->second->wReadLen > 0){
  6189. memset(&it->second->pData[it->second->wReadLen], 0, LENGTH_MSG_1M - it->second->wReadLen);
  6190. }
  6191. }catch(...){
  6192. int tt = it->second->wReadLen;
  6193. }
  6194. try{
  6195. //TRACE(_T("13 \n"));
  6196. memcpy(&it->second->pData[it->second->wReadLen], &Buf[read_length], nLen - read_length);
  6197. }catch(...){
  6198. int tt = it->second->wReadLen;
  6199. }
  6200. it->second->wReadLen += nLen - read_length;
  6201. }else{
  6202. _SOCKET_BUFFER* _sockbuf = (_SOCKET_BUFFER*)malloc(sizeof(_SOCKET_BUFFER));
  6203. _sockbuf->wReadLen = 0;
  6204. _sockbuf->dwConnID = dwConnId;
  6205. _sockbuf->wLen = pkg_len;
  6206. memset(_sockbuf->pData, 0, LENGTH_MSG_1M);
  6207. //TRACE("5\n");
  6208. //TRACE(_T("13_2 new socket_buffer\n"));
  6209. memcpy(_sockbuf->pData, &Buf[read_length], nLen - read_length);
  6210. _sockbuf->wReadLen += nLen - read_length;
  6211. mp_socket_buffer_list.insert(make_pair(dwConnId, _sockbuf));
  6212. }
  6213. }
  6214. delete[] Buf;
  6215. Buf = NULL;
  6216. //TRACE(_T("release memory \n"));
  6217. LeaveCriticalSection(&m_csParseDataServer);
  6218. //TRACE(_T("out server \n"));
  6219. }
  6220. void CYAServerDlg::parse_data_receive_package(BYTE *pData, int nLen, DWORD dwConnID )
  6221. {
  6222. //CString strBuf;
  6223. //formatByteArray(strBuf, (BYTE*)pData, nLen);
  6224. //writeErrorLog(_T("RAW_SSS"), strBuf, false);
  6225. int read_length = 0;
  6226. int pkg_len = 0;
  6227. BYTE* Buf = new BYTE[LENGTH_MSG_4K];
  6228. while (read_length < nLen){
  6229. pkg_len = MAKEWORD(pData[read_length + 1], pData[read_length]);
  6230. //TRACE(_T("14 read_length: %d; pkg_len: %d \n"),read_length,pkg_len);
  6231. if(Buf){
  6232. memset(Buf, 0, LENGTH_MSG_4K);
  6233. memcpy(Buf, &pData[read_length + sizeof(WORD)], pkg_len);
  6234. parse_package_data(Buf, pkg_len, dwConnID);
  6235. }
  6236. /*parse_data_receive(Buf, pkg_len, dwConnID);*/
  6237. read_length += pkg_len + sizeof(WORD);
  6238. //TRACE(_T("parse_data_receive_package : read_length: %d, nLen: %d \n"),read_length, nLen);
  6239. }
  6240. delete[] Buf;
  6241. Buf = NULL;
  6242. }
  6243. void CYAServerDlg::deal_card_msg( Card* card, bool is_hist /*= false*/ )
  6244. {
  6245. DWORD dw;
  6246. if(!is_hist){
  6247. if(card->card_type == CT_ADHOC){ // 此处不需处理,已经在解析时计算了坐标位置
  6248. }else if( LT_READER == theApp.locate_type){
  6249. card->x = card->p_reader->ant[card->antenna_id]->antenna_x;
  6250. card->y = card->p_reader->ant[card->antenna_id]->antenna_y;
  6251. card->z = card->p_reader->ant[card->antenna_id]->antenna_z;
  6252. card->a = card->p_reader->ant[card->antenna_id]->antenna_angle;
  6253. card->reader_id = card->p_reader->reader_id;
  6254. }else{
  6255. // 将距离加入到距离列表
  6256. _coordinate* dist = new _coordinate;
  6257. dist->t = card->time_stamp;
  6258. dist->x = card->p_reader->ant[card->antenna_id]->antenna_x;
  6259. dist->y = card->p_reader->ant[card->antenna_id]->antenna_y;
  6260. dist->z = card->p_reader->ant[card->antenna_id]->antenna_z;
  6261. dist->a = card->p_reader->ant[card->antenna_id]->antenna_angle;
  6262. dist->reader_id = card->p_reader->reader_id;
  6263. dist->antenna_id = card->antenna_id;
  6264. dist->d = card->distance;
  6265. dist->v = 0;
  6266. dist->d_offset = 0;
  6267. dist->special = card->p_reader->m_nIsSpecial;
  6268. dist->st = card->sync_num;
  6269. unsigned short root_sync_num = 0;
  6270. bool bUseAlgo = false;
  6271. if(umpRootSyncNum.size() > 0){
  6272. root_sync_num = umpRootSyncNum.begin()->second; // 单root可行,多root还要处理
  6273. if(root_sync_num >= dist->st){
  6274. if(root_sync_num - dist->st <= 5){
  6275. bUseAlgo = true;
  6276. }
  6277. }else{
  6278. if(dist->st - root_sync_num >= 65530){
  6279. bUseAlgo = true;
  6280. }
  6281. }
  6282. }
  6283. if(card->p_reader->sync_level == 0){
  6284. bUseAlgo = true;
  6285. }
  6286. if(bUseAlgo){
  6287. HostServer::TagMsg tagMsg;
  6288. tagMsg.ReceiveTime = card->flying_time;
  6289. tagMsg.StationIdCode = HostServer::SyncHelper::parseId((unsigned long long)card->reader_id, (unsigned long long)(card->antenna_id + 1));
  6290. tagMsg.SyncNum = card->sync_num;
  6291. if(card->p_reader->sync_level == 0){
  6292. dist->tt = card->flying_time;
  6293. }else{
  6294. dist->tt = syncmanager.calTimeByLinar(tagMsg);
  6295. }
  6296. EnterCriticalSection(&m_csAddDist);
  6297. card->add_dist(dist);
  6298. LeaveCriticalSection(&m_csAddDist);
  6299. }
  6300. if(m_log_locate_data){
  6301. CString strLog = _T("");
  6302. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  6303. strLog.Format(_T("r: %d-%d, t: %d, l:%d, tt: %I64u, ft: %I64u, x1: %f, y1: %f, z1: %f, ct: %d, cardid:%s"),
  6304. dist->reader_id, dist->antenna_id + 1, dist->st, card->p_reader->sync_level, dist->tt, card->flying_time, dist->x, dist->y, dist->z, dist->t, p_card_id/*CFunctions::c2wc(card->card_id.c_str())*/);
  6305. writeErrorLog(_T("DIST_S"), strLog, true);
  6306. //strLog = _T("");
  6307. strLog.ReleaseBuffer(strLog.GetLength());
  6308. strLog.Empty();
  6309. //此处和save_card_msg消息存在不一致
  6310. if(card->x != card->last_x || card->y != card->last_y){
  6311. card->last_x = card->x;
  6312. card->last_y = card->y;
  6313. card->last_z = card->z;
  6314. strLog.Format(_T("cardid:%s, cx: %f, cy: %f, cz: %f, clx: %f, cly: %f, v: %f, ct: %d"), p_card_id /*CFunctions::c2wc(card->card_id.c_str())*/, card->x, card->y, card->z, card->last_locate.x, card->last_locate.y, card->v, card->time_stamp_cal);
  6315. writeErrorLog(_T("DIST_S"), strLog, false);
  6316. strLog.Empty();
  6317. strLog = _T("");
  6318. strLog.Format(_T("%d,%f,%f,%f,%f,f: %f,s: %f,ct: %d, ov: %f,cv: %f,av: %f, lsn: %d,cardid: %s"),card->m_unCalcSyncNum,card->origin_locate.x,card->origin_locate.y,card->x, card->y,card->m_dFirstDiff,card->m_dSecondDiff,card->time_stamp_cal,card->origin_locate.v,card->v,card->last_locate.acceleration,card->m_unSyncNumInList,p_card_id);
  6319. writeErrorLog(_T("KALMAN_S"),strLog,false);
  6320. }
  6321. if(p_card_id){
  6322. free(p_card_id);
  6323. p_card_id = NULL;
  6324. }
  6325. }
  6326. }
  6327. }
  6328. if(LT_READER == theApp.locate_type){
  6329. //TRACE(_T("time memcpy 1\n"));
  6330. time_t cur_time = time(NULL);
  6331. if(difftime(cur_time, card->deal_time) <30){
  6332. return ;
  6333. }
  6334. }
  6335. //TRACE(_T("time memcpy 2\n"));
  6336. card->deal_time = time(NULL);
  6337. dw = ::GetTickCount();
  6338. save_card_postion(card);
  6339. card_enter_map(card); // 切换地图
  6340. card_enter_area(card); //, card->deal_time);
  6341. deal_card_state(card);
  6342. card->isdealed = true;
  6343. if(LT_READER != theApp.locate_type){
  6344. card->issent = false;
  6345. }
  6346. }
  6347. afx_msg LRESULT CYAServerDlg::OnCardAddDist(WPARAM wParam, LPARAM lParam)
  6348. {
  6349. Card* card = (Card*)lParam;
  6350. _coordinate* dist = (_coordinate*)wParam;
  6351. HostServer::TagMsg tagMsg;
  6352. tagMsg.ReceiveTime = card->flying_time;
  6353. tagMsg.StationIdCode = HostServer::SyncHelper::parseId((unsigned long long)card->reader_id, (unsigned long long)(card->antenna_id + 1));
  6354. tagMsg.SyncNum = card->sync_num;
  6355. if(card->p_reader->sync_level == 0){
  6356. dist->tt = card->flying_time;
  6357. }else{
  6358. dist->tt = syncmanager.calTimeByLinar(tagMsg);
  6359. }
  6360. card->add_dist(dist);
  6361. if(m_log_locate_data){
  6362. CString strLog = _T("");
  6363. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  6364. if(card->x != card->last_x || card->y != card->last_y){
  6365. card->last_x = card->x;
  6366. card->last_y = card->y;
  6367. card->last_z = card->z;
  6368. strLog.Format(_T("cardid:%s, cx: %f, cy: %f, cz: %f, clx: %f, cly: %f"), p_card_id/*CFunctions::c2wc(card->card_id.c_str())*/, card->x, card->y, card->z, card->last_x, card->last_y);
  6369. writeErrorLog(_T("DIST_S"), strLog, false);
  6370. //strLog = _T("");
  6371. strLog.Empty();
  6372. }
  6373. strLog.Format(_T("r: %d-%d, t: %d, l:%d, tt: %I64u, ft: %I64u, x1: %f, y1: %f, z1: %f, ct: %d, cardid:%s"),
  6374. dist->reader_id, dist->antenna_id + 1, card->sync_num, card->p_reader->sync_level, dist->tt, card->flying_time, dist->x, dist->y, dist->z,card->time_stamp, p_card_id /*CFunctions::c2wc(card->card_id.c_str())*/);
  6375. writeErrorLog(_T("DIST_S"), strLog, true);
  6376. //strLog = _T("");
  6377. strLog.Empty();
  6378. if(p_card_id){
  6379. free(p_card_id);
  6380. p_card_id = NULL;
  6381. }
  6382. }
  6383. return 0;
  6384. }
  6385. afx_msg LRESULT CYAServerDlg::OnRemoveSocket(WPARAM wParam, LPARAM lParam)
  6386. {
  6387. DWORD dwConnID = (DWORD)lParam;
  6388. remove_socket(dwConnID);
  6389. return 0;
  6390. }
  6391. void CYAServerDlg::writeErrorLogEx( const CString strFile, const CString strErr ,bool bTime /*= true*/ )
  6392. {
  6393. EnterCriticalSection(&m_csWriteLog);
  6394. if(openLogFile(strFile)){
  6395. CString strTempInfo;
  6396. if(bTime){
  6397. COleDateTime t = COleDateTime::GetCurrentTime();
  6398. strTempInfo.Format(_T("%s\r\n%s\r\n"), t.Format(_T("%H:%M:%S")), strErr);
  6399. }else{
  6400. strTempInfo.Format(_T("%s\r\n"), strErr);
  6401. }
  6402. TRY{
  6403. cfErrorLog.SeekToEnd();
  6404. char* old_locale = _strdup(setlocale(LC_CTYPE,NULL));
  6405. setlocale( LC_CTYPE, "chs" );//设定
  6406. cfErrorLog.WriteString(strTempInfo);
  6407. setlocale( LC_CTYPE, old_locale );
  6408. free( old_locale );//还原区域设定
  6409. }
  6410. CATCH(CFileException, e){
  6411. if(cfErrorLog.m_pStream)
  6412. cfErrorLog.Close();
  6413. }
  6414. END_CATCH
  6415. }
  6416. LeaveCriticalSection(&m_csWriteLog);
  6417. }
  6418. void CYAServerDlg::writeErrorLogEx( const char* strFile, const char* strErr ,bool bTime /*= true*/ )
  6419. {
  6420. EnterCriticalSection(&m_csWriteLog);
  6421. if(openLogFile(strFile)){
  6422. CString strTempInfo;
  6423. if(bTime){
  6424. COleDateTime t = COleDateTime::GetCurrentTime();
  6425. strTempInfo.Format(_T("%s\r\n"), t.Format(_T("%H:%M:%S")));
  6426. USES_CONVERSION;
  6427. CString tmp = A2T(strErr);
  6428. strTempInfo += tmp + _T("\r\n");
  6429. }else{
  6430. //strTempInfo.Format(_T("%S\r\n"), strErr);
  6431. USES_CONVERSION;
  6432. strTempInfo = A2T(strErr);
  6433. strTempInfo += _T("\r\n");
  6434. }
  6435. TRY{
  6436. cfErrorLog.SeekToEnd();
  6437. char* old_locale = _strdup(setlocale(LC_CTYPE,NULL));
  6438. setlocale( LC_CTYPE, "chs" );//设定
  6439. cfErrorLog.WriteString(strTempInfo);
  6440. setlocale( LC_CTYPE, old_locale );
  6441. free( old_locale );//还原区域设定
  6442. }
  6443. CATCH(CFileException, e){
  6444. if(cfErrorLog.m_pStream)
  6445. cfErrorLog.Close();
  6446. LeaveCriticalSection(&m_csWriteLog);
  6447. }
  6448. END_CATCH
  6449. }
  6450. LeaveCriticalSection(&m_csWriteLog);
  6451. }
  6452. void CYAServerDlg::init_queuestring()
  6453. {
  6454. m_qsmSQL = new QueueStrManager(50, 7500, _exec_sql);
  6455. }
  6456. void CYAServerDlg::SendData( DWORD dwConnID, WORD wCharacterWord, int wLength, BYTE* DataBuffer )
  6457. {
  6458. BYTE SendBuffer[LENGTH_MSG_2K];
  6459. WORD nlength = wLength + sizeof(WORD) + sizeof(WORD); //socket的数据长度 数据的长度(n) + 特征字(2) + 校验码(2)
  6460. memset(SendBuffer, 0, LENGTH_MSG_2K);
  6461. int nPos = 0;
  6462. CFunctions::memcpyWord(SendBuffer, nlength, nPos);//长度
  6463. nPos += sizeof(WORD);
  6464. CFunctions::memcpyWord(SendBuffer, wCharacterWord, nPos);
  6465. nPos += sizeof(WORD);
  6466. memcpy(&SendBuffer[nPos], &DataBuffer[0], wLength);
  6467. nPos += wLength;
  6468. WORD wCrc = CFunctions::getCRC(&SendBuffer[sizeof(WORD)], wLength + sizeof(WORD)); // 数据长度 + 特征字
  6469. CFunctions::memcpyWord(SendBuffer, wCrc, nPos);
  6470. nPos += sizeof(WORD);
  6471. _server.Send(dwConnID, &SendBuffer[0], nPos);
  6472. Sleep(20);
  6473. }
  6474. void CYAServerDlg::parse_data_locate_card_his_tdoa( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime)
  6475. {
  6476. // 按时间分组解析
  6477. // 组长度
  6478. int nCurPos = 0;
  6479. // 数据保存时间 7字节,年,月,周,日,时,分,秒
  6480. BYTE btSec = 0;
  6481. memcpy(&btSec, &DataBuffer[nCurPos], sizeof(BYTE));
  6482. nCurPos += sizeof(BYTE);
  6483. BYTE btMin = 0;
  6484. memcpy(&btMin, &DataBuffer[nCurPos], sizeof(BYTE));
  6485. nCurPos += sizeof(BYTE);
  6486. BYTE btHour = 0;
  6487. memcpy(&btHour, &DataBuffer[nCurPos], sizeof(BYTE));
  6488. nCurPos += sizeof(BYTE);
  6489. BYTE btDay = 0;
  6490. memcpy(&btDay, &DataBuffer[nCurPos], sizeof(BYTE));
  6491. nCurPos += sizeof(BYTE);
  6492. BYTE btWeek = 0;
  6493. memcpy(&btWeek, &DataBuffer[nCurPos], sizeof(BYTE));
  6494. nCurPos += sizeof(BYTE);
  6495. BYTE btMonth = 0;
  6496. memcpy(&btMonth, &DataBuffer[nCurPos], sizeof(BYTE));
  6497. nCurPos += sizeof(BYTE);
  6498. BYTE btYear = 0;
  6499. memcpy(&btYear, &DataBuffer[nCurPos], sizeof(BYTE));
  6500. nCurPos += sizeof(BYTE);
  6501. CString strhistime;
  6502. strhistime.Format(_T("20%.2d-%.2d-%.2d %.2d:%.2d:%.2d"), btYear%100, btMonth, btDay, btHour, btMin, btSec );
  6503. BYTE* bt = new BYTE[nLen];
  6504. while(nCurPos < nLen){ // 一组数据
  6505. // 一个数据包
  6506. WORD wPkgLen = 0;
  6507. CFunctions::getWord(DataBuffer, &wPkgLen, nCurPos);
  6508. nCurPos += sizeof(WORD);
  6509. if(bt){
  6510. memset(bt, 0, nLen);
  6511. memcpy(bt, &DataBuffer[nCurPos], wPkgLen);
  6512. parse_data_locate_card_his_tdoa_package(bt, wPkgLen, reader_id, wTickCount, strTime, strhistime);
  6513. }
  6514. nCurPos += wPkgLen;
  6515. }
  6516. delete[] bt;
  6517. }
  6518. void CYAServerDlg::parse_data_locate_card_his_tdoa_package( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime, CString strHistTime )
  6519. {
  6520. // 命令字
  6521. int nCurPos = 0;
  6522. WORD wChr = 0;
  6523. CFunctions::getWord(DataBuffer, &wChr, nCurPos);
  6524. nCurPos += sizeof(WORD);
  6525. BYTE* bt = new BYTE[LENGTH_RECORD_MAX];
  6526. if(NULL == bt){
  6527. return;
  6528. }
  6529. while(nCurPos < nLen){
  6530. switch (wChr)
  6531. {
  6532. case CHAR_LOCATEDATA:
  6533. {
  6534. memset(bt, 0, LENGTH_RECORD_MAX);
  6535. memcpy(bt, &DataBuffer[nCurPos], LENGTH_TOF_VEHICLE);
  6536. parse_data_locate_card_his_tof_card(bt, LENGTH_TOF_VEHICLE, reader_id, wTickCount, strTime, strHistTime);
  6537. nCurPos += LENGTH_TOF_VEHICLE;
  6538. break;
  6539. }
  6540. case CHAR_LOCATEDATA_TDOA:
  6541. {
  6542. memset(bt, 0, LENGTH_RECORD_MAX);
  6543. memcpy(bt, &DataBuffer[nCurPos], LENGTH_TDOA_VEHICLE);
  6544. parse_data_locate_card_his_tdoa_card(bt, LENGTH_TOF_VEHICLE, reader_id, wTickCount, strTime, strHistTime);
  6545. nCurPos += LENGTH_TDOA_VEHICLE;
  6546. break;
  6547. }
  6548. case CHAR_READER_SYNC_TIME:
  6549. {
  6550. memset(bt, 0, LENGTH_RECORD_MAX);
  6551. memcpy(bt, &DataBuffer[nCurPos], LENGTH_SYNC_TIME);
  6552. parse_data_locate_card_his_sync_time(bt, LENGTH_TOF_VEHICLE, strTime, strHistTime);
  6553. nCurPos += LENGTH_SYNC_TIME;
  6554. break;
  6555. }
  6556. default:
  6557. break;
  6558. }
  6559. }
  6560. delete[] bt;
  6561. }
  6562. void CYAServerDlg::parse_data_locate_card_his_tof_card( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime, CString strHistTime )
  6563. {
  6564. int nCurPos = 0;
  6565. BYTE btCardType = 0;
  6566. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  6567. nCurPos += sizeof(BYTE);
  6568. DWORD dwCardId = 0;
  6569. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  6570. nCurPos += sizeof(DWORD);
  6571. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  6572. char sql[LENGTH_SQL] = {0};
  6573. bool b_exec = false;
  6574. switch(btCardType)
  6575. {
  6576. case CT_VEHICLE:
  6577. {
  6578. //报文时间
  6579. WORD wCardTickCount = 0;
  6580. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  6581. nCurPos += sizeof(WORD);
  6582. BYTE btTypeAndPower = 0;
  6583. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  6584. nCurPos += sizeof(BYTE);
  6585. //报文类型
  6586. BYTE btType = 0;
  6587. btType = (btTypeAndPower >>4) & 0x0F;
  6588. //电池电量
  6589. BYTE btPower = 0;
  6590. btPower = btTypeAndPower & 0x0F;
  6591. //保留
  6592. nCurPos += sizeof(BYTE);
  6593. //加速度
  6594. BYTE btAcceleration = 0;
  6595. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  6596. nCurPos += sizeof(BYTE);
  6597. //定位时间戳Tsp // 字序
  6598. LONG64 lTime1 = 0;
  6599. BYTE btTemp = 0;
  6600. int nRangingPos = nCurPos;
  6601. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6602. nCurPos += sizeof(BYTE);
  6603. DWORD dwTemp = 0;
  6604. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6605. nCurPos += sizeof(DWORD);
  6606. lTime1 = btTemp;
  6607. lTime1 = lTime1 << 32;
  6608. lTime1 |= dwTemp;
  6609. double dbldist = CFunctions::getDistance(lTime1);
  6610. BYTE btAntenna = 0;
  6611. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  6612. nCurPos += sizeof(BYTE);
  6613. btAntenna = btAntenna & 0xFF;
  6614. b_exec = true;
  6615. sprintf_s(sql, LENGTH_SQL,
  6616. "INSERT INTO his_raw_data(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
  6617. fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time ) \
  6618. VALUES(%s, %d, %d, %d, %d, %lld, %4.f, %d, %d, %d, '%s', '%s');",
  6619. str_card_id.c_str(), reader_id, btAntenna, wTickCount, wCardTickCount, lTime1, dbldist, btType,
  6620. btPower,btAcceleration, CFunctions::wc2c(strHistTime), CFunctions::wc2c(strTime));
  6621. //if(CHAR_LOCATEDATAHIS_TDOA == wChr ){
  6622. // // 分站时间同步序列号
  6623. // WORD wSyncNum = 0;
  6624. // CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  6625. // nCurPos += sizeof(WORD);
  6626. // // 信号强度
  6627. // WORD wStrength = 0;
  6628. // CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  6629. // nCurPos += sizeof(WORD);
  6630. //}
  6631. break;
  6632. }
  6633. case CT_PERSON:
  6634. {
  6635. break;
  6636. }
  6637. default:
  6638. {
  6639. break;
  6640. }
  6641. }
  6642. try
  6643. {
  6644. if(b_exec){
  6645. execute_sql(sql);
  6646. }
  6647. }
  6648. catch (...)
  6649. {
  6650. CString str;
  6651. wchar_t* p = CFunctions::c2wc(sql);
  6652. str.Format(_T("%s\n"), p);
  6653. writeErrorLog(_T("SQL_S"), str);
  6654. str.Empty();
  6655. if(p){
  6656. free(p);
  6657. p = NULL;
  6658. }
  6659. }
  6660. }
  6661. void CYAServerDlg::parse_data_locate_card_his_tdoa_card( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime, CString strHistTime )
  6662. {
  6663. int nCurPos = 0;
  6664. BYTE btCardType = 0;
  6665. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  6666. nCurPos += sizeof(BYTE);
  6667. DWORD dwCardId = 0;
  6668. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  6669. nCurPos += sizeof(DWORD);
  6670. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  6671. char sql[LENGTH_SQL] = {0};
  6672. bool b_exec = false;
  6673. switch(btCardType)
  6674. {
  6675. case CT_VEHICLE:
  6676. {
  6677. //报文时间
  6678. WORD wCardTickCount = 0;
  6679. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  6680. nCurPos += sizeof(WORD);
  6681. BYTE btTypeAndPower = 0;
  6682. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  6683. nCurPos += sizeof(BYTE);
  6684. //报文类型
  6685. BYTE btType = 0;
  6686. btType = (btTypeAndPower >>4) & 0x0F;
  6687. //电池电量
  6688. BYTE btPower = 0;
  6689. btPower = btTypeAndPower & 0x0F;
  6690. //保留
  6691. nCurPos += sizeof(BYTE);
  6692. //加速度
  6693. BYTE btAcceleration = 0;
  6694. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  6695. nCurPos += sizeof(BYTE);
  6696. //定位时间戳Tsp // 字序
  6697. LONG64 lTime1 = 0;
  6698. BYTE btTemp = 0;
  6699. int nRangingPos = nCurPos;
  6700. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6701. nCurPos += sizeof(BYTE);
  6702. DWORD dwTemp = 0;
  6703. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6704. nCurPos += sizeof(DWORD);
  6705. lTime1 = btTemp;
  6706. lTime1 = lTime1 << 32;
  6707. lTime1 |= dwTemp;
  6708. double dbldist = 0;
  6709. BYTE btAntenna = 0;
  6710. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  6711. nCurPos += sizeof(BYTE);
  6712. btAntenna = btAntenna & 0xFF;
  6713. // 分站时间同步序列号
  6714. WORD wSyncNum = 0;
  6715. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  6716. nCurPos += sizeof(WORD);
  6717. // 信号强度
  6718. WORD wStrength = 0;
  6719. CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  6720. nCurPos += sizeof(WORD);
  6721. double dblaccx, dblaccy, dblaccz;
  6722. dblaccx = dblaccy = dblaccz = 0;
  6723. b_exec = true;
  6724. sprintf_s(sql, LENGTH_SQL,
  6725. "INSERT INTO his_raw_data_tdoa(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
  6726. fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time, sync_num, strength, acc_x, acc_y, acc_z) \
  6727. VALUES(%s, %d, %d, %d, %d, %lld, %4.f, %d, %d, %d, '%s', '%s', %d, %d, %4.f, %4.f, %4.f);",
  6728. str_card_id.c_str(), reader_id, btAntenna, wTickCount, wCardTickCount, lTime1, dbldist, btType,
  6729. btPower,btAcceleration, CFunctions::wc2c(strHistTime), CFunctions::wc2c(strTime), wSyncNum, wStrength, dblaccx, dblaccy, dblaccz);
  6730. break;
  6731. }
  6732. case CT_PERSON:
  6733. {
  6734. break;
  6735. }
  6736. default:
  6737. {
  6738. break;
  6739. }
  6740. }
  6741. try
  6742. {
  6743. if(b_exec){
  6744. execute_sql(sql);
  6745. }
  6746. }
  6747. catch (...)
  6748. {
  6749. CString str;
  6750. wchar_t* p = CFunctions::c2wc(sql);
  6751. str.Format(_T("%s\n"), p);
  6752. writeErrorLog(_T("SQL_S"), str);
  6753. str.Empty();
  6754. if(p){
  6755. free(p);
  6756. p = NULL;
  6757. }
  6758. }
  6759. }
  6760. void CYAServerDlg::parse_data_locate_card_his_sync_time( BYTE* DataBuffer, int nLen, CString strTime, CString strHistTime )
  6761. {
  6762. char sql[LENGTH_SQL] = {0};
  6763. bool b_exec = false;
  6764. int nCurPos = 0;
  6765. DWORD dwReaderID = 0; // 本机分站号
  6766. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  6767. nCurPos += sizeof(DWORD);
  6768. BYTE btAnt = 0; // 本机发送天线
  6769. memcpy(&btAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  6770. nCurPos += sizeof(BYTE);
  6771. DWORD dwRootReaderID = 0; // root分站号
  6772. CFunctions::getDWord(DataBuffer, &dwRootReaderID, nCurPos);
  6773. nCurPos += sizeof(DWORD);
  6774. BYTE btRootAnt = 0; // root天线
  6775. memcpy(&btRootAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  6776. nCurPos += sizeof(BYTE);
  6777. WORD wSyncNum = 0; // 序列号
  6778. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  6779. nCurPos += sizeof(WORD);
  6780. WORD wSyncLevel = 0; // 同步等级
  6781. CFunctions::getWord(DataBuffer, &wSyncLevel, nCurPos);
  6782. nCurPos += sizeof(WORD);
  6783. LONG64 lTime1 = 0, lTime2 = 0;
  6784. BYTE btTemp = 0;
  6785. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6786. nCurPos += sizeof(BYTE);
  6787. DWORD dwTemp = 0;
  6788. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6789. nCurPos += sizeof(DWORD);
  6790. lTime1 = btTemp; // 本机发送时间戳
  6791. lTime1 = lTime1 << 32;
  6792. lTime1 |= dwTemp;
  6793. btTemp = 0;
  6794. dwTemp = 0;
  6795. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6796. nCurPos += sizeof(BYTE);
  6797. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6798. nCurPos += sizeof(DWORD);
  6799. lTime2 = btTemp; // 本机接收时间戳
  6800. lTime2 = lTime2 << 32;
  6801. lTime2 |= dwTemp;
  6802. sprintf_s(sql, LENGTH_SQL,
  6803. "INSERT INTO his_raw_data_tdoa(reader_id, ant_id, parent_reader_id, parent_ant_id, sync_num, sync_level,\
  6804. send_timestamp, rec_timestamp, his_time, rec_time) \
  6805. VALUES(%d, %d, %d, %d, %d, %d, %lld, %lld, '%s', '%s');",
  6806. dwReaderID, btAnt, dwRootReaderID, btRootAnt, wSyncNum, wSyncLevel, lTime1, lTime2,
  6807. CFunctions::wc2c(strHistTime), CFunctions::wc2c(strTime));
  6808. try
  6809. {
  6810. execute_sql(sql);
  6811. }
  6812. catch (...)
  6813. {
  6814. CString str;
  6815. wchar_t* p = CFunctions::c2wc(sql);
  6816. str.Format(_T("%s\n"), p);
  6817. writeErrorLog(_T("SQL_S"), str);
  6818. str.Empty();
  6819. if(p){
  6820. free(p);
  6821. p = NULL;
  6822. }
  6823. }
  6824. }
  6825. void CYAServerDlg::OnEnUpdateEditReaderid()
  6826. {
  6827. // TODO: 如果该控件是 RICHEDIT 控件,它将不
  6828. // 发送此通知,除非重写 __super::OnInitDialog()
  6829. // 函数,以将 EM_SETEVENTMASK 消息发送到该控件,
  6830. // 同时将 ENM_UPDATE 标志“或”运算到 lParam 掩码中。
  6831. // TODO: 在此添加控件通知处理程序代码
  6832. UpdateData(TRUE);
  6833. }
  6834. void CYAServerDlg::parse_json_data_call_card_cancel(message::ptr const& data )
  6835. {
  6836. EnterCriticalSection(&m_csCallInfo);
  6837. CString strlog;
  6838. string call_id, user_name, call_time;
  6839. string cardid, readerid;
  6840. int call_time_out, reader_count, card_count;
  6841. map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  6842. call_id = data_map[JSON_KEY_CALL_CARD_CALL_ID]->get_string();
  6843. user_name = data_map[JSON_KEY_CALL_CARD_USER_NAME]->get_string();
  6844. call_time = data_map[JSON_KEY_CALL_CARD_CALL_TIME]->get_string();
  6845. vector<message::ptr> reader_vec = data_map[JSON_KEY_CALL_CARD_STATIONS]->get_vector();
  6846. vector<message::ptr> card_vec = data_map[JSON_KEY_CALL_CARD_CARDS]->get_vector();
  6847. if(reader_vec.size() == 0 && card_vec.size() == 0)
  6848. {
  6849. return;
  6850. }
  6851. int reader_id, npos;
  6852. SocketMap::iterator it_sock;
  6853. BYTE buf[LENGTH_SEND_BUF];
  6854. _call_info_reader* call_reader;
  6855. _call_info_card* call_card;
  6856. //取消呼叫有两种:
  6857. //从分站取消呼叫,即取消全员呼叫
  6858. //对指定卡取消呼叫
  6859. vector<message::ptr>::const_iterator it_reader = reader_vec.begin();
  6860. if(reader_vec.size() > 0){
  6861. for(; it_reader != reader_vec.end(); ++it_reader){
  6862. string s_reader_id = (*it_reader)->get_map()[JSON_KEY_CALL_CARD_STATION_ID]->get_string();
  6863. reader_id = atoi(s_reader_id.c_str());
  6864. CallInfoReaderMap::iterator it_call_reader = mp_call_info.find(reader_id);
  6865. if(it_call_reader != mp_call_info.end()){
  6866. call_reader = it_call_reader->second;
  6867. call_reader->is_start_call = false;
  6868. call_reader->is_call_all = false;
  6869. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  6870. if(card_vec.size() == 0 || "" == (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string()){
  6871. if(call_reader->cards_count){
  6872. CallInfoCardMap::iterator it_reader_card = call_reader->mpCard.begin();
  6873. for(; it_reader_card != call_reader->mpCard.end();){
  6874. call_reader->mpCard.erase(++it_reader_card);
  6875. }
  6876. }
  6877. call_reader->mpCard.clear();
  6878. mp_call_info.erase(it_call_reader);
  6879. call_reader->cards_count = 0;
  6880. }else{
  6881. BYTE card_type = 0;
  6882. for(; it_card != card_vec.end(); ++it_card){
  6883. string s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  6884. string s_card_type = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  6885. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  6886. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  6887. call_reader->mpCard.erase(it_call_card);
  6888. }
  6889. }
  6890. if(call_reader->mpCard.size() == 0){
  6891. call_reader->mpCard.clear();
  6892. mp_call_info.erase(it_call_reader);
  6893. }
  6894. }
  6895. call_reader->cards_count = 0;
  6896. }
  6897. }
  6898. }
  6899. it_reader = reader_vec.begin();
  6900. if(it_reader == reader_vec.end() && card_vec.size() > 0){
  6901. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  6902. BYTE card_type = 0;
  6903. for(; it_card != card_vec.end(); ++it_card){
  6904. string s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  6905. string s_card_type = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  6906. int reader_id = mp_card_list_down_adhoc.find(s_card_id)->second->reader_id;
  6907. call_reader = mp_call_info.find(reader_id)->second;
  6908. call_reader->is_start_call = false;
  6909. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  6910. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  6911. call_reader->mpCard.erase(it_call_card);
  6912. }
  6913. }
  6914. }
  6915. LeaveCriticalSection(&m_csCallInfo);
  6916. strlog.Format(_T("%s%s"), _T(LOG_CANCEL_CALL_CARD), _T(LOG_SUCCESS));
  6917. show_log(strlog);
  6918. }