123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368 |
- <?php
- /**
- * 统计相关
- * 新用户, 在线,在玩,留存等
- * 区分IOS和Android, 以及FB和游客
- */
- class ModelStatistics
- {
- private $_lidEnd = 2;
-
- public $levelRange = [];
- public $addressList = [
- 'TH'=>'泰国',
- 'DE'=>'德国',
- 'FR'=>'法国',
- 'GB'=>'英国',
- 'US'=>'美利坚合众国',
- 'IT'=>'意大利',
- 'RO'=>'罗马尼亚',
- 'NO'=>'挪威',
- 'BR'=>'巴西',
- 'IN'=>'印度',
- 'AT'=>'奥地利',
- 'ES'=>'西班牙',
- 'BE'=>'比利时',
- ];
- /********新注册玩家key(newPlayerAndroidFb newPlayIosVisitor)******/
- protected $newPlayerKeyList = array(
- 1 => array(//玩家类型1FB 2游客 3LINE 4华为
- 1 => 'NPAFB', //1安卓 2IOS
- 2 => 'NPIFB',
- ),
- 2 => array(
- 1 => 'NPAV', //1安卓 2IOS
- 2 => 'NPIV',
- ),
- 3 => array(
- 1 => 'NPAL', //1安卓 2IOS
- 2 => 'NPIL',
- ),
- 4 => array(
- 1 => 'NPAH',//华为
- 2 => 'NPIH',
- ),
- 5 => array(
- 1 => 'NPAK',//靠谱
- 2 => 'NPIK'
- ),
- 6 => array(
- 1 => 'NPAVK',//俄语的安卓VK
- 2 => 'NPIVK' //俄语的苹果VK
- ),
- 7 => array(
- 1 => 'NPAOS',//华为海外
- 2 => 'NPIOS'
- )
- );
- /********新注册玩家key END ******/
- /********登陆玩家key(loginAndroidFb loginIosVisitor)*****/
- protected $loginPlayerKeyList = array(
- 1 => array(//玩家类型1FB 2游客 3LINE 4华为
- 1 => 'LIAFB', //1安卓 2IOS
- 2 => 'LIIFB',
- ),
- 2 => array(//
- 1 => 'LIAV', //1安卓 2IOS
- 2 => 'LIIV',
- ),
- // 3 => array(
- // 1 => 'LIAL', //1安卓 2IOS
- // 2 => 'LIIL',
- // ),
- // 4 => array(
- // 1 => 'LIAH',
- // 2 => 'LIIH',
- // ),
- // 5 => array(
- // 1 =>'LIAK',//靠谱
- // 2 => 'LIIK'
- // ),
- // 6 => array(
- // 1 => 'LIAVK',//俄语的安卓VK
- // 2 => 'LIIVK' //俄语的苹果VK
- // ),
- // 7 => array(
- // 1 => 'LIAOS',//华为海外
- // 2 => 'LIIOS'
- // )
- );
- /********登陆玩家key END *****/
- protected $currentTime;//当前时间
- protected $timeout;//过期时间
- protected $payBlackList;
- public function __construct()
- {
- $this->currentTime = date('Ymd', time());
- $this->timeout = strtotime('+365 day 23:59:59');
- }
- public function getLevelRange(){
- $this->levelRange =[];
- $maxLevel = intval(oo::commonOprModel('readconfig')->getCon('basic','curMaxLevel'))??130;
- for($i=1;$i<=$maxLevel;$i++){
- $this->levelRange[] =$i;
- }
- return $this->levelRange;
- }
- /**
- * 记录所有api请求
- * @param string $mod
- * @Deprecated 暂停该方法调用,不记录日志了
- * @Deprecated
- */
- public function apiRequestLog($mod, $act){
- return;
- //if($mod && $act){
- // $key = okeys::apiRequestLog();
- // oo::commonOprRedis('statistics')->zIncrBy($key, 1, $mod.":".$act);//新增请求参数
- // if(oo::commonOprRedis('statistics')->zSize($key) <= 2){
- // oo::commonOprRedis('statistics')->expireAt($key,strtotime('+1 day 23:59:59')+oo::redisRandomExpire());
- // }
- //}
- }
- /**
- * api记录从缓存入库
- * @Deprecated 暂停该方法调用,不记录日志了
- */
- public function apiRequestToDb() {
- return;
- $key = okeys::apiRequestLog(false);
- $arr = oo::commonOprRedis('statistics')->ZrevRange($key, 0, -1, true);
- $table = otable::apiReqLog();
- if(empty($arr)){
- return;
- }
- $sql = "INSERT INTO {$table}(service, act, num, min) VALUES";
- $tmp = explode(':', $key);
- if(empty($tmp[1])){
- return;
- }
- //删除key
- oo::commonOprRedis('statistics')->delete($key);
- $min = date('Y').$tmp[1];
- $flag = 0;
- foreach($arr as $k => $v){
- $tmp = explode(':', $k);
- //1000以下的不记录日志
- if(empty($tmp[1]) || $v < 1000){
- continue;
- }
- $flag = 1;
- $sql .= "('{$tmp[0]}', '{$tmp[1]}', '{$v}', '{$min}'),";
- }
- if($flag){
- $sql = rtrim($sql, ',');
- oo::commonOprDb('statistics')->query($sql);
- }
- }
- /**
- * 统计新用户
- * redis集合
- * @param int $uid
- * @param int $type 类型 1FB 2游客,默认FB
- * @param int $device 设备 1安卓 2IOS, 默认安卓
- * @param int $sid 包
- * @param int $gameid 游戏ID,当有多个游戏版本时, 默认为1
- */
- public function newPlayer($uid, $type = 1, $device = 1, $sid = 0, $gameid = 1)
- {
- $currentTime = date('Ymd', time());
- $timeout = strtotime('+365 day 23:59:59')+oo::redisRandomExpire();
- $key = $this->newPlayerKeyList[$type][$device].':'.$sid.'_'.$gameid.':'.$currentTime;
- oo::commonOprRedis('statistics')->sAdd($key, $uid);//插入新玩家
- oo::commonOprRedis('statistics')->expireAt($key, $timeout);
- $this->loginPlayer($uid, $type, $device, $sid, $gameid);//同时加入在线集合
- }
- /**
- * 统计登陆玩家
- * redis集合
- * @param int $uid
- * @param int $type 类型 1FB 2游客,3line用户 默认FB
- * @param int $device 设备 1安卓 2IOS, 默认安卓
- * @param int $sid 包 1安卓 2IOS
- * @param int $gameid 游戏ID,当有多个游戏版本时, 默认为1
- */
- public function loginPlayer($uid, $type = 1, $device = 1, $sid = 0, $gameid = 1)
- {
- $currentTime = date('Ymd', time());
- $timeout = strtotime('+365 day 23:59:59')+oo::redisRandomExpire();
- $key = $this->loginPlayerKeyList[$type][$device].':'.$sid.'_'.$gameid.':'.$currentTime;
- oo::commonOprRedis('statistics')->sAdd($key, $uid);
- oo::commonOprRedis('statistics')->expireAt($key, $timeout);
- }
- /**
- * 登录的设备记录--(wsc-7.6无用待删除)
- * @param $mobile_request
- * @param int $type 1 登录 2 新增登录
- */
- public function loginDevice($mobile_request, $type = 1)
- {
- $date = date('Ymd');
- $key = $this->loginDeviceKey($date, $type);
- oo::commonOprRedis('statistics')->sAdd($key, $mobile_request);
- oo::commonOprRedis('statistics')->expireAt($key,strtotime('+39 day 23:59:59')+oo::redisRandomExpire());
- }
- //(wsc-7.6无用待删除)
- public function loginDeviceKey($date, $type = 1)
- {
- $type == 1 ? $key = 'LOGINDEVICE:'.$date : $key = 'NEWDEVICE:'.$date;
- return $key;
- }
- /**
- * 记录用户的国家
- * @param $uid
- * @param $counntry
- * @return bool
- */
- public function loginCountry($uid, $country)
- {
- //记录玩家国家
- $key = okeys::usercountry($country);
- oo::commonOprRedis('common')->sAdd($key, $uid);
- //记录国家列表
- $countryListKey = okeys::countrylist();
- oo::commonOprRedis('common')->sAdd($countryListKey, $country);
- return true;
- }
- /********************数据入库统计 Start******************************/
- /**
- * 每日新注册玩家
- */
- public function newPlayertoDb($time = null)
- {
- $time = $time ?? strtotime('-1 day');
- $yesterday = date( 'Ymd', $time);
- $num = array();//安卓,IOS,数据统计
- $sidList = $this->getSidList();
- $allPlayerArr = [];
- foreach ($sidList as $sid) {
- for ($i=1; $i <= $this->_lidEnd; $i++) {
- for ($j=1; $j <= 2; $j++) {
- $key = $this->newPlayerKeyList[$i][$j].':'.$sid.'_1:'.$yesterday;
- $num[$i][$j] = intval(oo::commonOprRedis('statistics')->sSize($key));
- //所有包的按每一类用户的汇总
- $tmpNum = $allPlayerArr[$i][$j] ?? 0;
- $allPlayerArr[$i][$j] = $num[$i][$j] + $tmpNum;
- }
- }
- $pn_af = $num[1][1]; //安卓FB玩家
- $pn_av = $num[2][1]; //安卓游客玩家
- $pn_if = $num[1][2]; //IOS_FB玩家
- $pn_iv = $num[2][2]; //IOS_游客玩家
- $pn_al = 0;//$num[3][1]; //安卓LINE玩家
- $pn_il = 0;//$num[3][2]; //IOS LINE玩家
- $pn_ah = 0;//$num[4][1]; //安卓华为玩家
- $pn_ak = 0;//$num[5][1]; //安卓靠谱玩家
- $pn_avk = 0;//$num[6][1]; //安卓VK玩家
- $pn_ivk = 0;//$num[6][2]; //苹果VK玩家
- $pn_hwos = 0;//$num[7][1];//安卓华为海外
- $total = $pn_af + $pn_av + $pn_if + $pn_iv + $pn_al + $pn_il + $pn_ah + $pn_ak + $pn_avk + $pn_ivk + $pn_hwos;
- $table = otable::sta_np();
- $sql = " INSERT INTO {$table}(id, ordertime, pn_af, pn_av, pn_if, pn_iv, gameid, pn_al, pn_il, pn_ah, pn_ak, pn_avk, pn_ivk, pn_hwos, total, sid) VALUES(NULL, {$time}, {$pn_af}, {$pn_av}, {$pn_if}, {$pn_iv}, 1, {$pn_al}, {$pn_il}, {$pn_ah}, {$pn_ak}, {$pn_avk}, {$pn_ivk}, {$pn_hwos}, {$total}, {$sid}) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'newPlayertoDb_Error.log');
- }
- }
- //为了去掉重复的uid来统计所有包登录人数总数
- $pn_af = $allPlayerArr[1][1]; //安卓FB玩家
- $pn_av = $allPlayerArr[2][1]; //安卓游客玩家
- $pn_if = $allPlayerArr[1][2]; //IOS_FB玩家
- $pn_iv = $allPlayerArr[2][2]; //IOS_游客玩家
- $pn_al = 0;//$allPlayerArr[3][1]; //IOS_LINE玩家
- $pn_il = 0;//$allPlayerArr[3][2]; //IOS_LINE玩家
- $pn_ah = 0;//$allPlayerArr[4][1]; //安卓华为玩家
- $pn_ak = 0;//$allPlayerArr[5][1]; //安卓靠谱玩家
- $pn_avk = 0;//$allPlayerArr[6][1]; //安卓VK玩家
- $pn_ivk = 0;//$allPlayerArr[6][2]; //苹果VK玩家
- $pn_hwos = 0;//$allPlayerArr[7][1];//安卓华为海外玩家
- //vivo新增
- $vivo_android = $vivo_ios = 0;
- // $tb = otable::userinfo(1);
- // $start_time = strtotime('-1 days 0:0:0');
- // $end_time = strtotime('-1 days 23:59:59');
- // $sql = "SELECT COUNT(*) AS count FROM {$tb} WHERE channel = 1 AND createtime >= {$start_time} AND createtime <= {$end_time}";
- // $ret = oo::commonOprDb('userinfo')->getOne($sql,1);
- // if(!empty($ret['count'])){
- // $vivo_android = $ret['count'];
- // }
- $total = $pn_af + $pn_av + $pn_if + $pn_iv + $pn_al + $pn_il + $pn_ah + $pn_ak + $pn_avk + $pn_ivk + $pn_hwos;
- $table = otable::sta_np();
- $sql = " INSERT INTO {$table}(id, ordertime, pn_af, pn_av, pn_if, pn_iv, gameid, pn_al, pn_il, pn_ah, pn_ak, pn_avk, pn_ivk, pn_hwos, total, sid, vivo_android, vivo_ios) VALUES(NULL, {$time}, {$pn_af}, {$pn_av}, {$pn_if}, {$pn_iv}, 1, {$pn_al}, {$pn_il},{$pn_ah}, {$pn_ak}, {$pn_avk}, {$pn_ivk}, {$pn_hwos}, {$total}, 999, {$vivo_android}, {$vivo_ios}) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'newPlayertoDb_Error.log');
- }
- }
- /**
- * 每日登陆玩家
- */
- public function loginPlayertoDb()
- {
- $time = strtotime("-1 day");
- $yesterday = date( 'Ymd', $time );
- $num = array();//安卓,IOS,数据统计
- //包列表
- $sidList = $this->getSidList();
- $allPlayerArr = [];
- foreach ($sidList as $sid) {
- for ($i=1; $i <= $this->_lidEnd; $i++) {
- for ($j=1; $j <= 2; $j++) {
- $key = $this->loginPlayerKeyList[$i][$j].':'.$sid.'_1:'.$yesterday;
- //获取所有sid的登录用户
- $tmpArr = oo::commonOprRedis('statistics')->sMembers($key);
- if($this->loginPlayerKeyList[$i][$j] == 'LIIFB'){
- $key = 'IIFB:'.$sid.'_1:'.$yesterday;
- $members = oo::commonOprRedis('statistics')->sMembers($key);
- $tmpArr = array_merge($tmpArr, $members);
- }
- $tmpArr = array_unique($tmpArr);
- $num[$i][$j] = intval(count($tmpArr));
- !isset($allPlayerArr[$i][$j]) && $allPlayerArr[$i][$j] = [];
- $allPlayerArr[$i][$j] = array_keys(array_flip($allPlayerArr[$i][$j]) + array_flip($tmpArr));
- }
- }
- $login_af = $num[1][1]; //安卓FB玩家
- $login_av = $num[2][1]; //安卓游客玩家
- $login_if = $num[1][2]; //IOS_FB玩家
- $login_iv = $num[2][2]; //IOS_游客玩家
- $login_al = 0;//$num[3][1]; //IOS_LINE玩家
- $login_il = 0;//$num[3][2]; //IOS_LINE玩家
- $login_ah = 0;//$num[4][1]; //安卓华为玩家
- $login_ak = 0;//$num[5][1]; //安卓靠谱玩家
- $login_avk = 0;//$num[6][1]; //安卓VK玩家
- $login_ivk = 0;//$num[6][2]; //苹果VK玩家
- $login_hwos = 0;//$num[7][1];//安卓华为海外
- $total = $login_af + $login_av + $login_if + $login_iv + $login_al + $login_il + $login_ah + $login_ak + $login_avk + $login_ivk + $login_hwos;
- $table = otable::sta_lp();
- $sql = " INSERT INTO {$table}(id, ordertime, login_af, login_av, login_if, login_iv, gameid, login_al, login_il, login_ah, login_ak, login_avk, login_ivk, login_hwos, total, sid) VALUES(NULL, {$time}, {$login_af}, {$login_av}, {$login_if}, {$login_iv}, 1, {$login_al}, {$login_il},{$login_ah}, {$login_ak}, {$login_avk},{$login_ivk}, {$login_hwos}, {$total}, {$sid}) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'loginPlayertoDb_Error.log');
- }
- }
- //为了去掉重复的uid来统计所有包登录人数总数
- $login_af = count($allPlayerArr[1][1]); //安卓FB玩家
- $login_av = count($allPlayerArr[2][1]); //安卓游客玩家
- $login_if = count($allPlayerArr[1][2]); //IOS_FB玩家
- $login_iv = count($allPlayerArr[2][2]); //IOS_游客玩家
- $login_al = 0;//count($allPlayerArr[3][1]); //IOS_LINE玩家
- $login_il = 0;//count($allPlayerArr[3][2]); //IOS_LINE玩家
- $login_ah = 0;//count($allPlayerArr[4][1]); //安卓华为玩家
- $login_ak = 0;//count($allPlayerArr[5][1]); //安卓靠谱玩家
- $login_avk = 0;//count($allPlayerArr[6][1]); //安卓VK玩家
- $login_ivk = 0;//count($allPlayerArr[6][2]); //苹果VK玩家
- $login_hwos = 0;//count($allPlayerArr[7][1]);//安卓华为海外
- //vivo新增
- $vivo_android = $vivo_ios = 0;
- // $tb = otable::userinfo(1);
- // $start_time = strtotime('-1 days 0:0:0');
- // $end_time = strtotime('-1 days 23:59:59');
- // $sql = "SELECT COUNT(*) AS count FROM {$tb} WHERE channel = 1 AND lasttime >= {$start_time} AND lasttime <= {$end_time}";
- // $ret = oo::commonOprDb('userinfo')->getOne($sql,1);
- // if(!empty($ret['count'])){
- // $vivo_android = $ret['count'];
- // }
- $total = $login_af + $login_av + $login_if + $login_iv + $login_al + $login_il + $login_ah + $login_ak + $login_avk + $login_ivk + $login_hwos;
- $table = otable::sta_lp();
- $sql = " INSERT INTO {$table}(id, ordertime, login_af, login_av, login_if, login_iv, gameid, login_al, login_il, login_ah, login_ak, login_avk, login_ivk, login_hwos, total, sid, vivo_android, vivo_ios) VALUES(NULL, {$time}, {$login_af}, {$login_av}, {$login_if}, {$login_iv}, 1, {$login_al}, {$login_il}, {$login_ah}, {$login_ak}, {$login_avk}, {$login_ivk}, {$login_hwos}, {$total}, 999, {$vivo_android}, {$vivo_ios}) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'loginPlayertoDb_Error.log');
- }
- }
- /**
- * Notes:设置每日登陆新增等缓存记录过期
- * User: wsc
- * Time: 2022/1/6 12:07
- */
- public function expireloginPlayer(){
- $d = date("Ymd",strtotime("-1 day"));
- $arr = [
- "NPAFB:1_1:{$d}", //新增安卓FB
- "NPIFB:2_1:{$d}", //新增ios FB
- "NPAV:1_1:{$d}", //新增安卓游客
- "NPIV:2_1:{$d}", //新增ios 游客
- "LIAFB:1_1:{$d}", //安卓FB DAU
- "LIIFB:2_1:{$d}", //ios FB DAU
- "LIAV:1_1:{$d}", //安卓游客 DAU
- "LIIV:2_1:{$d}", //ios 游客 DAU
- "IIFB:2_1:{$d}",//ios FB DAU (错误存储)
- ];
- foreach ($arr as $key){
- $list2 = oo::commonOprRedis('statistics')->sMembers($key);
- $listStr="";
- if(!empty($list2)){
- $listStr = implode(",",$list2);
- }
- $data = ["date"=>$d,"type"=>$key,"uidlist"=>$listStr];
- $inseretData = funs::db_insertSQL("t_loginplayer_log",$data);
- $ret =oo::commonOprDb('api_log')->query($inseretData,1 );
- }
- foreach ($arr as $ke){
- oo::commonOprRedis('statistics')->expire($ke,7*86400);
- }
- }
- /**
- * 每日新注册玩家按国家统计
- */
- public function newPlayerCountrytoDb()
- {
- $time = strtotime('-1 day');
- $yesterday = date( 'Ymd', $time);
- $newPlayer = $this->getAllPlayer($yesterday, 1);//新注册玩家
- $newPlayerNum = is_array($newPlayer) ? count($newPlayer) : 0;
- $countryListKey = okeys::countrylist();
- $countryList = oo::commonOprRedis('common')->sMembers($countryListKey);
- $total = $num = 0;
- $now = time();
- $table = otable::sta_country();
- if(!empty($countryList)){
- foreach ($countryList as $city){
- $usercountryKey = okeys::usercountry($city);
- $userData = oo::commonOprRedis('common')->sMembers($usercountryKey);
- $intersect = array_intersect($newPlayer, $userData);
- $num = is_array($intersect) ? count($intersect) : 0;
- $total += $num;
- $sql = " INSERT INTO {$table}(country, num, flag, createtime) VALUES('{$city}', $num, 1, $now) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'newPlayerCountrytoDb_Error.log');
- }
- }
- }
- if($newPlayerNum > $total){
- $tmpNum = $newPlayerNum - $total;
- $tmpcity = 'other';
- $sql = " INSERT INTO {$table}(country, num, flag, createtime) VALUES('{$tmpcity}', $tmpNum, 1, $now) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'newPlayerCountrytoDb_Error.log');
- }
- }
- return true;
- }
- /**
- * 每日新注册玩家按国家统计
- */
- public function loginPlayerCountrytoDb()
- {
- $time = strtotime('-1 day');
- $yesterday = date( 'Ymd', $time);
- $newPlayer = $this->getAllPlayer($yesterday, 2);//登录玩家
- $newPlayerNum = is_array($newPlayer) ? count($newPlayer) : 0;
- $countryListKey = okeys::countrylist();
- $countryList = oo::commonOprRedis('common')->sMembers($countryListKey);
- $total = $num = 0;
- $now = time();
- $table = otable::sta_country();
- if(!empty($countryList)){
- foreach ($countryList as $city){
- $usercountryKey = okeys::usercountry($city);
- $userData = oo::commonOprRedis('common')->sMembers($usercountryKey);
- $intersect = array_intersect($newPlayer, $userData);
- $num = is_array($intersect) ? count($intersect) : 0;
- $total += $num;
- $sql = " INSERT INTO {$table}(country, num, flag, createtime) VALUES('{$city}', $num, 2, $now) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'newPlayerCountrytoDb_Error.log');
- }
- }
- }
- if($newPlayerNum > $total){
- $tmpNum = $newPlayerNum - $total;
- $tmpcity = 'other';
- $sql = " INSERT INTO {$table}(country, num, flag, createtime) VALUES('{$tmpcity}', $tmpNum, 2, $now) ";
- $rs = oo::commonOprDb('statistics')->query($sql);
- if( !$rs ){
- oo::logs()->debug3($sql, 'newPlayerCountrytoDb_Error.log');
- }
- }
- return true;
- }
- /********************数据入库统计 End******************************/
- /**
- * 事件统计
- */
- public function event($param)
- {
- if (!is_array($param)) {
- return false;
- }
- $uid = reset($param);
- $actid = end($param);
- $date = date('Ymd');
- $expireDate = strtotime(' +7 days ')+oo::redisRandomExpire();
- $keyUid = okeys::eventActUser($actid);
- $keyAct = okeys::eventAct($actid);
- oo::commonOprRedis('statistics')->sAdd($keyUid, $uid);
- oo::commonOprRedis('statistics')->incr($keyAct);
- oo::commonOprRedis('statistics')->expireAt($keyUid, $expireDate);
- oo::commonOprRedis('statistics')->expireAt($keyAct, $expireDate);
- }
- /**
- * 运行自动报表统计
- * @return bool
- */
- public function reportToDB()
- {
- $this->payBlackList['uid'] = oo::commonOprModel("config")->payWhiteList();
- $data = array('date'=>0, 'dau' => 0, 'new_player' => 0, 'pay_num' => 0, 'revenue' => 0, 'remain_new_last' => 0, 'remain_live_last' => 0, 'broke_rate' => 0);
- $paymentTable = otable::summarylist();
- $reportTable = otable::report();
- $lastDate = date('Ymd', strtotime('-1 day'));
- $stime = strtotime('-1 day 0:0:1');
- $etime = strtotime('-1 day 23:59:59');
- $data['date'] = $lastDate;
- //每日登陆玩家总数
- $infoLogin = $this->getOneLoginPlayer($stime, $etime);
- if ($infoLogin) {
- $data['dau'] = $infoLogin['total'];
- }
- //每日新增总数
- $infoNew = $this->getOneNewPlayer($stime, $etime);
- if ($infoNew) {
- $data['new_player'] = $infoNew['total'];
- }
- //每日成功订单总数 每日成功订单数额
- $blackUidArr = $this->payBlackList['uid'];
- $blackUidStr = implode(',', $blackUidArr);
- $sqlPayment = " SELECT SUM(sl_pusd) AS p FROM {$paymentTable} WHERE sl_status=2 AND sl_sid != -1 AND sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} AND sl_uid NOT IN ({$blackUidStr}) ";
- $infoPayment = oo::commonOprDb('payment')->getOne($sqlPayment, 1);
- if( $infoPayment ){
- $data['revenue'] = floatval($infoPayment['p']);
- }
- //昨日的支付人数
- // $sqlPaymentPerson = " SELECT COUNT(1) as uidNum FROM ( SELECT COUNT(sl_uid) AS uid FROM {$paymentTable} WHERE sl_status=2 AND sl_sid != -1 AND sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} AND sl_uid NOT IN ({$blackUidStr}) GROUP BY sl_uid ) as aa";
- // $infoPaymentPerson = oo::commonOprDb('payment')->getOne($sqlPaymentPerson, 1);
- // $data['pay_num'] = intval($infoPaymentPerson['uidNum'] ?? 0);
- $payNum = 0;
- $payUidList = [];
- $sqlPaymentPerson = " SELECT sl_uid AS uid FROM {$paymentTable} WHERE sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} AND sl_uid NOT IN ({$blackUidStr}) ";
- $payRet = oo::commonOprDb('payment')->getAll($sqlPaymentPerson, 1);
- foreach ($payRet as $value) {
- $uid = $value['uid'];
- if(!in_array($uid, $payUidList)) {
- $payNum++;
- array_push($payUidList, $uid);
- }
- }
- $data['pay_num'] = intval($payNum ?? 0);
- //首充用户
- $firstPayPlayerNum = 0;
- if(!empty($payUidList)) {
- $time = strtotime($lastDate.'0:0:0');
- foreach ($payUidList as $vuid) {
- $checkBought = $this->checkPayFirst($vuid, $time);
- $checkBought && $firstPayPlayerNum++ ;
- }
- }
- $data['first_pay'] = $firstPayPlayerNum;
- //获取当天的最大在线数
- $date = date('Ymd', strtotime("-1 day"));
- $maxnumKey = okeys::onlineusermaxnum($date);
- $maxOnlineNum = intval(oo::commonOprRedis('statistics')->get($maxnumKey));
- $data['max_online_num'] = $maxOnlineNum;
- $days1ago = date('Ymd', strtotime('-1 days'));
- $days2ago = date('Ymd', strtotime('-2 days'));
- $yesterdayPlayer = $this->getAllPlayer($days1ago, 2);//昨日登陆玩家
- $last2daysLoginPlayer = $this->getAllPlayer($days2ago, 2);//前日登陆玩家
- $last2daysPlayer = $this->getAllPlayer($days2ago, 1);//前日新增玩家
- //次日新增留存
- $intersect1dayPlay = array_intersect($yesterdayPlayer, $last2daysPlayer);//交集玩家
- $data['remain_new_last'] = empty(count($last2daysPlayer)) ? 0 : count($intersect1dayPlay) * 100 / count($last2daysPlayer);//次日留存率
- //次日活跃留存
- $intersect1dayLoginPlay = array_intersect($yesterdayPlayer, $last2daysLoginPlayer);//交集玩家
- $data['remain_live_last'] = empty(count($last2daysLoginPlayer)) ? 0 : count($intersect1dayLoginPlay) * 100 / count($last2daysLoginPlayer);//次日留存率
- $tb = otable::BaseDataSta();
- $sql = "SELECT * FROM {$tb} WHERE date='{$lastDate}'";
- $ret = oo::commonOprDb('statistics')->getOne($sql,MYSQLI_ASSOC);
- if(!empty($ret)){
- $data['user_time'] = "'{$ret['loginAvg']}'";
- $data['arpu'] = $ret['payARPU'];
- $data['arppu'] = $ret['payARPPU'];
- $data['pay_rate'] = "'{$ret['payRate']}'";
- $data['net_new_player'] = $data['new_player'];
- $data['net_new_player_rate'] = 100;
- }
-
- //广告数据
- $date = date('Ymd', time());
- $table = otable::advertisementSta();
- $sql = "SELECT * FROM {$table} WHERE date IN ({$date})";
- $ret = oo::commonOprDb('statistics')->getOne($sql,MYSQLI_ASSOC);
- if(!empty($ret)){
- $temp = json_decode($ret['click'],true);
- //兼容旧数据
- if(isset($temp['android']) && isset($temp['ios'])){
- $ad_apply_count = array_sum($temp['android']) + array_sum($temp['ios']);
- }else{
- $ad_apply_count = array_sum($temp);
- }
-
- $temp = json_decode($ret['play'],true);
- //兼容旧数据
- if(isset($temp['android']) && isset($temp['ios'])){
- $ad_count = array_sum($temp['android']) + array_sum($temp['ios']);
- }else{
- $ad_count = array_sum($temp);
- }
-
- $temp = json_decode($ret['success'],true);
- $ad_success_count = array_sum($temp['android']) + array_sum($temp['ios']);
-
- $data['ad_apply_count'] = $ad_apply_count;//广告请求次数
- $data['ad_count'] = $ad_count;//广告展示次数
- $data['ad_success_count'] = $ad_success_count;//广告完成次数
- $data['ad_user_num'] = 0;//广告观看人数
- }
- $setStrKey = implode(',', array_keys($data));
- $setStrValue = implode(',', $data);
- $sql = " INSERT INTO {$reportTable} ($setStrKey) VALUES ($setStrValue)";
- oo::commonOprDb('statistics')->query($sql);
- return true;
- }
- /**
- * 运行自动报表统计(wsc-7.6弃用,功能由reportToDB完成)
- * @return bool
- */
- public function basicReportToDB()
- {
- $this->payBlackList['uid'] = oo::commonOprModel("config")->payWhiteList();
- $data = array('date' => 0, 'dau' => 0, 'new_player' => 0, 'pay_num' => 0, 'revenue' => 0);
- $paymentTable = otable::summarylist();
- $bcreportTable = otable::basicreport();
- $lastDate = date('Ymd', strtotime('-1 day'));
- $stime = strtotime('-1 day 0:0:1');
- $etime = strtotime('-1 day 23:59:59');
- $data['date'] = $lastDate;
- //每日登陆玩家总数
- $infoLogin = $this->getOneLoginPlayer($stime, $etime);
- if ($infoLogin) {
- $data['dau'] = $infoLogin['total'];
- }
- //每日新增总数
- $infoNew = $this->getOneNewPlayer($stime, $etime);
- if ($infoNew) {
- $data['new_player'] = $infoNew['total'];
- }
- //每日成功订单总数 每日成功订单数额
- $blackUidArr = $this->payBlackList['uid'];
- $blackUidStr = implode(',', $blackUidArr);
- $sqlPayment = " SELECT SUM(sl_pusd) AS p FROM {$paymentTable} WHERE sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} AND sl_uid NOT IN ({$blackUidStr}) ";
- $infoPayment = oo::commonOprDb('payment')->getOne($sqlPayment, 1);
- if ($infoPayment) {
- $data['revenue'] = floatval($infoPayment['p']);
- }
- //昨日的支付人数
- $payNum = 0;
- $payUidList = [];
- $sqlPaymentPerson = " SELECT sl_uid AS uid FROM {$paymentTable} WHERE sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} AND sl_uid NOT IN ({$blackUidStr}) ";
- $payRet = oo::commonOprDb('payment')->getAll($sqlPaymentPerson, 1);
- foreach ($payRet as $value) {
- $uid = $value['uid'];
- if(!in_array($uid, $payUidList)) {
- $payNum++;
- array_push($payUidList, $uid);
- }
- }
- $data['pay_num'] = intval($payNum ?? 0);
- //首充用户
- $firstPayPlayerNum = 0;
- if(!empty($payUidList)) {
- $time = strtotime($lastDate.'0:0:0');
- foreach ($payUidList as $vuid) {
- $checkBought = $this->checkPayFirst($vuid, $time);
- $checkBought && $firstPayPlayerNum++ ;
- }
- }
- $data['first_pay'] = $firstPayPlayerNum;
- // //登录和新增登录设备数
- // $loginDeviceKey = $this->loginDeviceKey($lastDate, 1);//登录的设备数
- // $data['login_device'] = oo::commonOprRedis('statistics')->sSize($loginDeviceKey);
- //
- // $newLoginDeviceKey = $this->loginDeviceKey($lastDate, 2);//新登录的设备数
- // $data['newlogin_device'] = oo::commonOprRedis('statistics')->sSize($newLoginDeviceKey);
- $data['createtime'] = time();
- //获取当天的最大在线数
- $date = date('Ymd', strtotime("-1 day"));
- $maxnumKey = okeys::onlineusermaxnum($date);
- $maxOnlineNum = intval(oo::commonOprRedis('statistics')->get($maxnumKey));
- $data['max_online_num'] = $maxOnlineNum;
- // //设备次留
- // $days1ago = date('Ymd', strtotime("-1 day"));
- // $days2ago = date('Ymd', strtotime('-2 day'));
- //
- // ////次日新增留存 比如今天29号 就计算28号的次日留存 那么新增玩家从27号算,
- // $yesterdayPlayer = $this->getAllDevicePlayer($days1ago, 1);//登陆玩家
- // $last2daysPlayer = $this->getAllDevicePlayer($days2ago, 2);//新增玩家
- //
- // $intersect1dayPlay = array_intersect($yesterdayPlayer, $last2daysPlayer);//交集玩家
- // $tempDay1Remain = empty(count($last2daysPlayer)) ? 0 : count($intersect1dayPlay) / count($last2daysPlayer);//次日留存率
- // $data['remain_device'] = round($tempDay1Remain, 4)*100;//次日留存率
- $setStrKey = implode(',', array_keys($data));
- $setStrValue = implode(',', $data);
- $sql = " INSERT INTO {$bcreportTable} (id,$setStrKey) VALUES (NULL, $setStrValue)";
- oo::commonOprDb('statistics')->query($sql);
- return true;
- }
- //(wsc-7.6-无用待删除)
- public function getAllDevicePlayer($date, $type)
- {
- $loginDeviceKey = oo::commonOprModel('statistics')->loginDeviceKey($date, $type);
- $data = oo::commonOprRedis('statistics')->sMembers($loginDeviceKey);
- return $data;
- }
- /**
- * 查询是否是首次充值
- * @param $uid
- * @param $time
- * @return bool
- */
- public function checkPayFirst($uid, $time)
- {
- empty($time) && $time = strtotime('0:0:0') ;
- $table = otable::payment($uid);
- $sql = "SELECT pid FROM {$table} WHERE uid = {$uid} AND status = 2 AND pay_time < {$time} LIMIT 1 ";
- $ret = oo::commonOprDb('payment')->getOne($sql, MYSQLI_ASSOC);
- $pay = true;
- if( !empty($ret) ){
- $pay = false;
- }
- return $pay;
- }
- /**
- * 获取一条登录的数据
- * @param $stime
- * @param $etime
- * @return mixed
- */
- public function getOneLoginPlayer($stime, $etime)
- {
- $loginplayerTable = otable::sta_lp();
- //每日登陆玩家总数
- $sqlLogin = "SELECT * FROM {$loginplayerTable} WHERE ordertime >= {$stime} AND ordertime <= {$etime} AND sid = 999 LIMIT 1";
- $infoLogin = oo::commonOprDb('statistics')->getOne($sqlLogin, 1);
- return $infoLogin;
- }
- /**
- * 获取一条新增的用户数
- * @param $stime
- * @param $etime
- * @return mixed
- */
- public function getOneNewPlayer($stime, $etime)
- {
- $newplayerTable = otable::sta_np();
- //每日新增总数
- $sqlNew = " SELECT * FROM {$newplayerTable} WHERE ordertime >= {$stime} AND ordertime <= {$etime} AND sid = 999 LIMIT 1 ";
- $infoNew = oo::commonOprDb('statistics')->getOne($sqlNew, 1);
- return $infoNew;
- }
- /**
- * Notes:
- * User: wsc
- * Time: 2020/11/10 20:55
- * @param $date string (20201110)|array[20201109,20201110]
- * @param $type int 1新用户 2所有
- * @param int $sidList int(1安卓,2ios,999所有)|array[1,2]
- * @return array
- */
- public function getAllPlayer($date, $type, $sidList = 0)
- {
- //登陆和新增相关key
- $newPlayerKeyList = $this->newPlayerKeyList;
- $loginPlayerKeyList = $this->loginPlayerKeyList;
- $arr = ($type == 1) ? $newPlayerKeyList : $loginPlayerKeyList;
- $total = array();//人数0
- //如果sidList为空或者为999,则默认全部的sid
- if(empty($sidList) || is_array($sidList) && in_array(999, $sidList)) {
- //包列表
- $sidList = $this->getSidList();
- }else {
- if(!is_array($sidList)) {
- $sidList = array($sidList);
- }
- }
- foreach ($sidList as $sid) {
- if(is_array($date)){
- foreach ($date as $k=>$v){
- $tmpArr = $this->getAllPlayerOnce($arr, $v, $sid);
- $total = array_merge($tmpArr, $total);
- }
- }else{
- $tmpArr = $this->getAllPlayerOnce($arr, $date, $sid);
- $total = array_merge($tmpArr, $total);
- }
- }
-
- $total = array_filter($total);//去掉空元素
- return array_unique($total);
- }
- /**
- * 获取一个sid的玩家id列表
- * @param $arr
- * @param $date
- * @param $sid
- * @return array
- */
- private function getAllPlayerOnce($arr, $date, $sid)
- {
- $redisConfig = 'statistics';
- if(strtotime($date) <= 1593647999){
- $redisConfig = 'Userinfo';
- }
- $total = [];
- $logTb = 'crazygod_api_log.t_loginplayer_log';
- for ($i=1; $i <= $this->_lidEnd; $i++) {
- for ($j=1; $j <= 2; $j++) {
- $key = $arr[$i][$j].':'.$sid.'_1:'.$date;
- $members = oo::commonOprRedis($redisConfig)->sMembers($key);
- // if(empty($members)){//找不到历史取库数据
- // $sql = "SELECT * FROM {$logTb} where type='{$key}'";
- // $one = oo::commonOprDb('api_log')->getOne($sql,1);
- // if(!empty($one)&&!empty($one['uidlist'])){
- // $members = explode(',',$one['uidlist']);
- // }
- // }
- $total = array_merge($total, $members);
- if($arr[$i][$j] == 'LIIFB'){
- $key = 'IIFB:'.$sid.'_1:'.$date;
- $members = oo::commonOprRedis($redisConfig)->sMembers($key);
- // if(empty($members)){//找不到历史取库数据
- // $sql = "SELECT * FROM {$logTb} where type='{$key}'";
- // $one = oo::commonOprDb('api_log')->getOne($sql,1);
- // if(!empty($one)&&!empty($one['uidlist'])){
- // $members = explode(',',$one['uidlist']);
- // }
- // }
- $total = array_merge($total, $members);
- }
- }
- }
- return $total;
- }
- /**
- * 计算所有玩家总数
- * type 1 新注册 其他登陆
- */
- public function getTotalPlayers($date, $type, $sidList = 0)
- {
- //登陆和新增相关key
- $newPlayerKeyList = $this->newPlayerKeyList;
- $loginPlayerKeyList = $this->loginPlayerKeyList;
- $arr = ($type == 1) ? $newPlayerKeyList : $loginPlayerKeyList;
- $total = 0;//人数0
- //如果sidList为空或者为999,则默认全部的sid
- if(empty($sidList) || is_array($sidList) && in_array(999, $sidList)) {
- //包列表
- $sidList = $this->getSidList();
- }else {
- if(!is_array($sidList)) {
- $sidList = array($sidList);
- }
- }
- foreach ($sidList as $sid) {
- $total += $this->getSidTotalPlayers($arr, $date, $sid);
- }
- return $total;
- }
- /**
- * 获取sid玩家总人数
- * @param array $arr
- * @param string $date
- * @return int $sid
- * @return int
- */
- private function getSidTotalPlayers($arr, $date, $sid){
- $redisConfig = 'statistics';
- if(strtotime($date) <= 1593647999){
- $redisConfig = 'Userinfo';
- }
- $total = 0;
- for ($i=1; $i <= $this->_lidEnd; $i++) {
- for ($j=1; $j <= 2; $j++) {
- $key = $arr[$i][$j].':'.$sid.'_1:'.$date;
- $total += oo::commonOprRedis($redisConfig)->sSize($key);
- }
- }
- return $total;
- }
- /**
- * 获取该时间到现在为止的用户和sid的对应关系
- * @param $time
- * @return array
- */
- public function getUserSidList($time)
- {
- if(empty($time)) {
- return [];
- }
- $table = otable::xg_push();
- $sql = " SELECT uid, sid FROM {$table} WHERE updatetime >= {$time} ";
- $ret = oo::commonOprDb('common')->getAll($sql, 1);
- $userList = [];
- //获取用户和sid对应
- if(!empty($ret)) {
- foreach ($ret as $v) {
- $userList[$v['uid']] = $v['sid'];
- }
- }
- return $userList;
- }
- /**
- * 获取sid的列表
- * @return array
- */
- public function getSidList()
- {
- $sidConfig = oo::$config;
- $sidList = array_keys($sidConfig['sidlist']);
- return $sidList;
- }
- /**
- * 同步登录和注册的redis数据
- * @param int $state
- * @return bool
- */
- public function sycnLoginData($state = 1)
- {
- if($state == 1) {
- $keyList = $this->loginPlayerKeyList;
- }else {
- $keyList = $this->newPlayerKeyList;
- }
- $today = time();
- $tmpDay = strtotime("-41 days");
- $dayList = $this->getDays($tmpDay, $today, 2);
- //循环41天,把之前的登录和注册的人数按sid区分
- foreach ($keyList as $val) {
- foreach ($val as $device => $keyV) {
- $device == 1 ? $sid = 1 : $sid = 2;
- foreach ($dayList as $day) {
- //把旧的key的值复制到新的key
- $keyOld = $keyV.':'.'1:'.$day;
- oo::logs()->debug3('oldkey:'.$keyOld, 'statistics.php');
- $keyNew = $keyV.':'.$sid.'_1:'.$day;
- $ttl = oo::commonOprRedis('statistics')->ttl($keyOld);
- if($ttl > 0) {
- oo::commonOprRedis('statistics')->sUnionStore($keyNew, $keyOld);
- oo::commonOprRedis('statistics')->expire($keyNew, $ttl);
- }
- }
- }
- }
- return true;
- }
- /**
- * 计算天数差
- * $format = 1 Y-m-d else Ymd
- */
- public function getDays($day1, $day2, $format = 1)
- {
- $second1 = $day1;
- $second2 = $day2;
- if ($second1 < $second2) {
- $tmp = $second2;
- $second2 = $second1;
- $second1 = $tmp;
- }
- $days = ($second1 - $second2) / 86400;
- $dayList = array();
- for ($i=0; $i <= $days ; $i++) {
- if($format == 1) {
- $dayList[] = date('Y-m-d', $second2 + 86400*$i);
- }else {
- $dayList[] = date('Ymd', $second2 + 86400*$i);
- }
- }
- return $dayList;
- }
- /**
- * 获取新增用户的key list
- * @return array
- */
- public function getNewPlayerKeyList()
- {
- return $this->newPlayerKeyList;
- }
- public function getLidEnd()
- {
- return $this->_lidEnd;
- }
- /**
- * 更新ltv数据
- * @return bool
- */
- public function updateLTV($flag = 1)
- {
- set_time_limit(0);
- $table = otable::ltvStatistics();
- $dateTmp = date('Ymd', strtotime("-0 days"));
- $date1 = date('Ymd', strtotime("$dateTmp -1 days"));//从昨天算新增1天
- $date3 = date('Ymd', strtotime("$dateTmp -3 days"));//从昨天算新增3天
- $date7 = date('Ymd', strtotime("$dateTmp -7 days"));//从昨天算新增7天
- $date30 = date('Ymd', strtotime("$dateTmp -30 days"));//从昨天算新增30天
- $date60 = date('Ymd', strtotime("$dateTmp -60 days"));//从昨天算新增60天
- $date90 = date('Ymd', strtotime("$dateTmp -90 days"));//从昨天算新增90天
- $sidList = [];
- $platStr = '';
- switch ($flag){
- case 2://安卓
- $sidList = oo::$config['androidSidList'];
- $platStr = ' AND login_plat != 2 ';
- break;
- case 3://IOS
- $sidList = oo::$config['iosSidList'];
- $platStr = ' AND login_plat = 2 ';
- break;
- default:
- break;
- }
- $newPlayer1 = $this->getAllPlayer($date1, 1, $sidList);//前天新增用户
- $newPlayer3 = $this->getAllPlayer($date3, 1, $sidList);//7天前新增用户
- $newPlayer7 = $this->getAllPlayer($date7, 1, $sidList);//7天前新增用户
- $newPlayer30 = $this->getAllPlayer($date30, 1, $sidList);//30天前新增用户
- $newPlayer60 = $this->getNewPlayerList($date60, $platStr);//60天前新增用户 --由于redis只记录了49天的新用户
- $newPlayer90 = $this->getNewPlayerList($date90, $platStr);//90天前新增用户
- $newPlayerNum1 = count($newPlayer1);
- $newPlayerNum3 = count($newPlayer3);
- $newPlayerNum7 = count($newPlayer7);
- $newPlayerNum30 = count($newPlayer30);
- $newPlayerNum60 = count($newPlayer60);
- $newPlayerNum90 = count($newPlayer90);
- $payBlackList = [];
- $payBlackList['uid'] = oo::commonOprModel("config")->payWhiteList();
- $payBlackUidList = $payBlackList['uid'] ?? [];
- $now = time();
- //写入1天前的数据
- $ltvData1 = $this->getLTVData($newPlayer1, 1, $date1, $payBlackUidList);
- $payAmount1Day = floatval($ltvData1['payAmount']);
- $newPayNum1 = intval($ltvData1['newPayNum']);
- $ltv1 = empty($newPlayerNum1) ? 0 : round($payAmount1Day * 1.0 / $newPlayerNum1, 3);
- $insertSql = "INSERT INTO {$table} (date, new_num, ltv1,new_pay_amount1, new_pay_num1, ltv3, new_pay_amount3, new_pay_num3, ltv7, new_pay_amount7, new_pay_num7, ltv30, new_pay_amount30, new_pay_num30, createtime, updatetime, flag) VALUES ({$date1}, {$newPlayerNum1}, {$ltv1}, {$payAmount1Day}, {$newPayNum1}, 0, 0, 0, 0, 0, 0, 0, 0, 0, $now, $now, {$flag})";
- $ret2 = oo::commonOprDb('statistics')->query($insertSql);
- if($ret2 < 1){
- oo::logs()->debug3('insertSql:'.$insertSql, 'ltvstatisticsFail.php');
- }
- //写入ltv3
- $ltvData3 = $this->getLTVData($newPlayer3, 3, $date1, $payBlackUidList);
- $payAmount3Day = floatval($ltvData3['payAmount']);
- $newPayNum3 = intval($ltvData3['newPayNum']);
- $ltv3 = empty($newPlayerNum3) ? 0 : round($payAmount3Day * 1.0 / $newPlayerNum3, 3);
- $updateSql3 = "UPDATE {$table} SET ltv3 = {$ltv3}, new_pay_amount3 = {$payAmount3Day},new_pay_num3 = {$newPayNum3}, updatetime = {$now} WHERE date = {$date3} AND flag = {$flag} LIMIT 1";
- $ret3 = oo::commonOprDb('statistics')->query($updateSql3);
- if($ret3 < 1){
- oo::logs()->debug3('updateSql3:'.$updateSql3, 'ltvstatisticsFail.php');
- }
- //写入ltv7
- $ltvData7 = $this->getLTVData($newPlayer7, 7, $date1, $payBlackUidList);
- $payAmount7Day = floatval($ltvData7['payAmount']);
- $newPayNum7 = intval($ltvData7['newPayNum']);
- $ltv7 = empty($newPlayerNum7) ? 0 : round($payAmount7Day * 1.0 / $newPlayerNum7, 3);
- $updateSql7 = "UPDATE {$table} SET ltv7 = {$ltv7}, new_pay_amount7 = {$payAmount7Day},new_pay_num7 = {$newPayNum7}, updatetime = {$now} WHERE date = {$date7} AND flag = {$flag} LIMIT 1";
- $ret7 = oo::commonOprDb('statistics')->query($updateSql7);
- if($ret7 < 1){
- oo::logs()->debug3('updateSql7:'.$updateSql7, 'ltvstatisticsFail.php');
- }
- //写入ltv30
- $ltvData30 = $this->getLTVData($newPlayer30, 30, $date1, $payBlackUidList);
- $payAmount30Day = floatval($ltvData30['payAmount']);
- $newPayNum30 = intval($ltvData30['newPayNum']);
- $ltv30 = empty($newPlayerNum30) ? 0 : round($payAmount30Day * 1.0 / $newPlayerNum30, 3);
- $updateSql30 = "UPDATE {$table} SET ltv30 = {$ltv30}, new_pay_amount30 = {$payAmount30Day},new_pay_num30 = {$newPayNum30},updatetime = {$now} WHERE date = {$date30} AND flag = {$flag} LIMIT 1 ";
- $ret30 = oo::commonOprDb('statistics')->query($updateSql30);
- if($ret30 < 1){
- oo::logs()->debug3('updateSql30:'.$updateSql30, 'ltvstatisticsFail.php');
- }
- //写入ltv60
- $ltvData60 = $this->getLTVData($newPlayer60, 60, $date1, $payBlackUidList);
- $payAmount60Day = floatval($ltvData60['payAmount']);
- $newPayNum60 = intval($ltvData60['newPayNum']);
- $ltv60 = empty($newPlayerNum60) ? 0 : round($payAmount60Day * 1.0 / $newPlayerNum60, 3);
- $updateSql60 = "UPDATE {$table} SET ltv60 = {$ltv60}, new_pay_amount60 = {$payAmount60Day},new_pay_num60 = {$newPayNum60},updatetime = {$now} WHERE date = {$date60} AND flag = {$flag} LIMIT 1 ";
- $ret60 = oo::commonOprDb('statistics')->query($updateSql60);
- if($ret60 < 1){
- oo::logs()->debug3('updateSql60:'.$updateSql60, 'ltvstatisticsFail.php');
- }
- //写入ltv90
- $ltvData90 = $this->getLTVData($newPlayer90, 90, $date1, $payBlackUidList);
- $payAmount90Day = floatval($ltvData90['payAmount']);
- $newPayNum90 = intval($ltvData90['newPayNum']);
- $ltv90 = empty($newPlayerNum90) ? 0 : round($payAmount90Day * 1.0 / $newPlayerNum90, 3);
- $updateSql90 = "UPDATE {$table} SET ltv90 = {$ltv90}, new_pay_amount90 = {$payAmount90Day},new_pay_num90 = {$newPayNum90},updatetime = {$now} WHERE date = {$date90} AND flag = {$flag} LIMIT 1 ";
- $ret90 = oo::commonOprDb('statistics')->query($updateSql90);
- if($ret90 < 1){
- oo::logs()->debug3('updateSql90:'.$updateSql90, 'ltvstatisticsFail.php');
- }
- return true;
- }
- /**
- * 获取登录用户
- * @param $loginUserList
- * @param $date
- * @return int
- */
- public function getLoginNum($loginUserList, $date, $daysBegin, $daysEnd, $newPlayer)
- {
- $loginListTmp = [];
- //统计第二天到第七天的登录人数
- for ($i=$daysBegin; $i < $daysEnd; $i++){
- $dateTmp = date('Ymd', strtotime("$date +$i days"));
- $loginPlayer = $loginUserList[$dateTmp] ?? [];
- $newLoginPlayer = array_intersect($newPlayer, $loginPlayer);
- if(!is_array($newLoginPlayer)){
- $newLoginPlayer = array($newLoginPlayer);
- }
- $loginListTmp = array_merge($newLoginPlayer, $loginListTmp);
- }
- $loginListTmp = empty($loginListTmp) ? [] : array_unique($loginListTmp);
- $loginPlayer = count($loginListTmp);
- return $loginPlayer;
- }
- /**
- * 更新付费用户数据
- * @return bool
- */
- public function updatePayRemain($flag = 1, $day=0)
- {
- set_time_limit(0);
- ini_set('memory_limit', '2048M');
- $table = otable::payremainStatistics();
- $dateTmp = date('Ymd', strtotime("-$day days"));
- $date1 = date('Ymd', strtotime("$dateTmp -1 days"));//从昨天算新增1天
- $date3 = date('Ymd', strtotime("$dateTmp -3 days"));//从昨天算新增3天
- $date7 = date('Ymd', strtotime("$dateTmp -7 days"));//从昨天算新增7天
- $date15 = date('Ymd', strtotime("$dateTmp -15 days"));//从昨天算新增15天
- $date30 = date('Ymd', strtotime("$dateTmp -30 days"));//从昨天算新增30天
- $date60 = date('Ymd', strtotime("$dateTmp -60 days"));//从昨天算新增60天
- $date90 = date('Ymd', strtotime("$dateTmp -90 days"));//从昨天算新增90天
- $date120 = date('Ymd', strtotime("$dateTmp -120 days"));//从昨天算新增120天
- $date180 = date('Ymd', strtotime("$dateTmp -180 days"));//从昨天算新增180天
- $sidList = [];
- $platStr = '';
- switch ($flag){
- case 2://安卓
- $sidList = oo::$config['androidSidList'];
- $platStr = ' AND login_plat != 2 ';
- break;
- case 3://IOS
- $sidList = oo::$config['iosSidList'];
- $platStr = ' AND login_plat = 2 ';
- break;
- default:
- break;
- }
- $payBlackList = [];
- $payBlackList['uid'] = oo::commonOprModel("config")->payWhiteList();
- $payBlackUidList = $payBlackList['uid'] ?? [];
- $newPlayer1 = $this->getAllPlayer($date1, 1, $sidList);//1天前新增用户
- $newPlayer3 = $this->getAllPlayer($date3, 1, $sidList);//3天前新增用户
- $newPlayer7 = $this->getAllPlayer($date7, 1, $sidList);//7天前新增用户
- $newPlayer15 = $this->getAllPlayer($date15, 1, $sidList);//15天新增用户
- $newPlayer30 = $this->getAllPlayer($date30, 1, $sidList);//30天新增用户
- $newPlayer60 = $this->getNewPlayerList($date60, $platStr);//60天前新增用户 --由于redis只记录了49天的新用户
- $newPlayer90 = $this->getNewPlayerList($date90, $platStr);//60天前新增用户 --由于redis只记录了49天的新用户
- $newPlayer120 = $this->getNewPlayerList($date120, $platStr);//120天前新增用户
- $newPlayer180 = $this->getNewPlayerList($date180, $platStr);//180天前新增用户
- $newPayUserList1 = $this->getNewPayUser($date1, $newPlayer1, $payBlackUidList);//该天发付费用户
- $newPayUserList3 = $this->getNewPayUser($date3, $newPlayer3, $payBlackUidList);
- $newPayUserList7 = $this->getNewPayUser($date7, $newPlayer7, $payBlackUidList);
- $newPayUserList15 = $this->getNewPayUser($date15, $newPlayer15, $payBlackUidList);
- $newPayUserList30 = $this->getNewPayUser($date30, $newPlayer30, $payBlackUidList);
- $newPayUserList60 = $this->getNewPayUser($date60, $newPlayer60, $payBlackUidList);
- $newPayUserList90 = $this->getNewPayUser($date90, $newPlayer90, $payBlackUidList);
- $newPayUserList120 = $this->getNewPayUser($date120, $newPlayer120, $payBlackUidList);
- $newPayUserList180 = $this->getNewPayUser($date180, $newPlayer180, $payBlackUidList);
- $newPayNum1 = count($newPayUserList1);
- $now = time();
- //写入1天前的数据
- $insertSql = "INSERT INTO {$table} (date, payNum, dauNum_3,payNum_3, payAmount_3,dauNum_7,payNum_7, payAmount_7,dauNum_15,payNum_15, payAmount_15,dauNum_30,payNum_30, payAmount_30,dauNum_60,payNum_60, payAmount_60,dauNum_120,payNum_120, payAmount_120, createtime, flag) VALUES ({$date1}, {$newPayNum1}, 0, 0, 0, 0, 0, 0,0, 0, 0,0, 0, 0,0, 0, 0,0, 0, 0, $now,{$flag})";
- $ret2 = oo::commonOprDb('statistics')->query($insertSql);
- if($ret2 < 1){
- oo::logs()->debug3('insertSql:'.$insertSql, 'payremainstatisticsFail.php');
- }
- //获取登录数据
- $loginUserList = [];
- for($j=179; $j > 0; $j--){
- $dateLogin = date('Ymd', strtotime("-$j days"));
- $loginUserList[$dateLogin] = oo::commonOprModel('statistics')->getAllPlayer($dateLogin, 2, $sidList);
- if($j % 21 == 0){
- usleep(100);
- }
- }
- //统计第二天到第3天的登录人数
- $loginPlayer3 = $this->getLoginNum($loginUserList, $date3, 1, 3, $newPayUserList3);
- //统计第4天到第七天的登录人数
- $loginPlayer7 = $this->getLoginNum($loginUserList, $date7, 3, 7, $newPayUserList7);
- //统计第8天到第15天的登录人数
- $loginPlayer15 = $this->getLoginNum($loginUserList, $date15, 7, 15, $newPayUserList15);
- //统计第16天到第30天的登录人数
- $loginPlayer30 = $this->getLoginNum($loginUserList, $date30, 15, 30, $newPayUserList30);
- //统计第31天到第60天的登录人数
- $loginPlayer60 = $this->getLoginNum($loginUserList, $date60, 30, 60, $newPayUserList60);
- //统计第61天到第90天的登录人数
- $loginPlayer90 = $this->getLoginNum($loginUserList, $date90, 60, 90, $newPayUserList90);
- //统计第91天到第120天的登录人数
- $loginPlayer120 = $this->getLoginNum($loginUserList, $date120, 90, 120, $newPayUserList120);
- //统计第121天到第180天的登录人数
- $loginPlayer180 = $this->getLoginNum($loginUserList, $date180, 120, 180, $newPayUserList180);
- //写入3日除去前1日
- $payUserRet3 = $this->getPayRmainData($newPayUserList3, $date3, 1, 3, $payBlackUidList);
- $payAmount3Day = floatval($payUserRet3['payAmount']);
- $newPayNum3 = intval($payUserRet3['newPayNum']);
- $updateSql3 = "UPDATE {$table} SET dauNum_3 = {$loginPlayer3}, payNum_3 = {$newPayNum3},payAmount_3 = {$payAmount3Day} WHERE date = {$date3} AND flag = {$flag} LIMIT 1";
- $ret3 = oo::commonOprDb('statistics')->query($updateSql3);
- if($ret3 < 1){
- oo::logs()->debug3('updateSql3:'.$updateSql3, 'ltvstatisticsFail.php');
- }
- //写入7日除去前3日
- $payUserRet7 = $this->getPayRmainData($newPayUserList7, $date7, 3, 7, $payBlackUidList);
- $payAmount7Day = floatval($payUserRet7['payAmount']);
- $newPayNum7 = intval($payUserRet7['newPayNum']);
- $updateSql7 = "UPDATE {$table} SET dauNum_7 = {$loginPlayer7}, payNum_7 = {$newPayNum7},payAmount_7 = {$payAmount7Day} WHERE date = {$date7} AND flag = {$flag} LIMIT 1";
- $ret7 = oo::commonOprDb('statistics')->query($updateSql7);
- if($ret7 < 1){
- oo::logs()->debug3('updateSql7:'.$updateSql7, 'ltvstatisticsFail.php');
- }
- //写入15日除去前7日
- $payUserRet15 = $this->getPayRmainData($newPayUserList15, $date15, 7, 15, $payBlackUidList);
- $payAmount15Day = floatval($payUserRet15['payAmount']);
- $newPayNum15 = intval($payUserRet15['newPayNum']);
- $updateSql15 = "UPDATE {$table} SET dauNum_15 = {$loginPlayer15}, payNum_15 = {$newPayNum15},payAmount_15 = {$payAmount15Day} WHERE date = {$date15} AND flag = {$flag} LIMIT 1";
- $ret15 = oo::commonOprDb('statistics')->query($updateSql15);
- if($ret15 < 1){
- oo::logs()->debug3('updateSql15:'.$updateSql15, 'ltvstatisticsFail.php');
- }
- //写入30日除去前15日
- $payUserRet30 = $this->getPayRmainData($newPayUserList30, $date30, 15, 30, $payBlackUidList);
- $payAmount30Day = floatval($payUserRet30['payAmount']);
- $newPayNum30= intval($payUserRet30['newPayNum']);
- $updateSql30 = "UPDATE {$table} SET dauNum_30 = {$loginPlayer30}, payNum_30 = {$newPayNum30},payAmount_30 = {$payAmount30Day} WHERE date = {$date30} AND flag = {$flag} LIMIT 1";
- $ret30 = oo::commonOprDb('statistics')->query($updateSql30);
- if($ret30 < 1){
- oo::logs()->debug3('updateSql30:'.$updateSql30, 'ltvstatisticsFail.php');
- }
- //写入60日除去前30日
- $payUserRet60 = $this->getPayRmainData($newPayUserList60, $date60, 30, 60, $payBlackUidList);
- $payAmount60Day = floatval($payUserRet60['payAmount']);
- $newPayNum60= intval($payUserRet60['newPayNum']);
- $updateSql60 = "UPDATE {$table} SET dauNum_60 = {$loginPlayer60}, payNum_60 = {$newPayNum60},payAmount_60 = {$payAmount60Day} WHERE date = {$date60} AND flag = {$flag} LIMIT 1";
- $ret60 = oo::commonOprDb('statistics')->query($updateSql60);
- if($ret60 < 1){
- oo::logs()->debug3('updateSql60:'.$updateSql60, 'ltvstatisticsFail.php');
- }
- //写入90日除去前60日
- $payUserRet90 = $this->getPayRmainData($newPayUserList90, $date90, 60, 90, $payBlackUidList);
- $payAmount90Day = floatval($payUserRet90['payAmount']);
- $newPayNum90= intval($payUserRet90['newPayNum']);
- $updateSql90 = "UPDATE {$table} SET dauNum_90 = {$loginPlayer90}, payNum_90 = {$newPayNum90},payAmount_90 = {$payAmount90Day} WHERE date = {$date90} AND flag = {$flag} LIMIT 1";
- $ret90 = oo::commonOprDb('statistics')->query($updateSql90);
- if($ret90 < 1){
- oo::logs()->debug3('updateSql90:'.$updateSql90, 'ltvstatisticsFail.php');
- }
- //写入120日除去前90日
- $payUserRet120 = $this->getPayRmainData($newPayUserList120, $date120, 90, 120, $payBlackUidList);
- $payAmount120Day = floatval($payUserRet120['payAmount']);
- $newPayNum120 = intval($payUserRet120['newPayNum']);
- $updateSql120 = "UPDATE {$table} SET dauNum_120 = {$loginPlayer120}, payNum_120 = {$newPayNum120},payAmount_120 = {$payAmount120Day} WHERE date = {$date120} AND flag = {$flag} LIMIT 1";
- $ret120 = oo::commonOprDb('statistics')->query($updateSql120);
- if($ret120 < 1){
- oo::logs()->debug3('updateSql120:'.$updateSql120, 'ltvstatisticsFail.php');
- }
- //写入180日除去前120日
- $payUserRet180 = $this->getPayRmainData($newPayUserList180, $date180, 120, 180, $payBlackUidList);
- $payAmount180Day = floatval($payUserRet180['payAmount']);
- $newPayNum180 = intval($payUserRet180['newPayNum']);
- $updateSql180 = "UPDATE {$table} SET dauNum_180 = {$loginPlayer180}, payNum_180 = {$newPayNum180},payAmount_180 = {$payAmount180Day} WHERE date = {$date180} AND flag = {$flag} LIMIT 1";
- $ret180 = oo::commonOprDb('statistics')->query($updateSql180);
- if($ret180 < 1){
- oo::logs()->debug3('updateSql180:'.$updateSql180, 'ltvstatisticsFail.php');
- }
- return true;
- }
- /**
- * 获取超过30天的新注册用户
- * @param $createtime
- * @return array
- */
- public function getNewPlayerList($date, $platStr = '')
- {
- if(empty($date)){
- $stime = strtotime(" 0:0:0");
- $etime = strtotime(" 23:59:59");
- }else{
- $stime = strtotime("$date 0:0:0");
- $etime = strtotime("$date 23:59:59");
- }
- $userList = [];
- $key = okeys::robotUidList();
- //如果是机器人
- $robotUidList = oo::commonOprRedis('robot')->sMembers($key);
- //获取注册用户时间
- //for($j = 0; $j < 100; $j++){
- //$userinfo = otable::userinfo($j);
- $userinfo = otable::userinfo(1);
- $sqlUser = "SELECT createtime, uid FROM {$userinfo} WHERE createtime >= {$stime} AND createtime <= {$etime} {$platStr} " ;
- $retUser = oo::commonOprDb('userinfo')->getAll($sqlUser, 1);
- foreach ($retUser as $val){
- $uid = $val['uid'];
- //如果是机器人,则不包括
- if(in_array($uid, $robotUidList)){
- continue;
- }
- $userList[] = $uid;
- }
- //}
- return $userList;
- }
- public function getLTVData($newPlayer, $days, $tmpDate = '', $payBlackList = [])
- {
- $tmpDays = $days - 1;
- empty($tmpDate) && $tmpDate = date('Ymd', strtotime("-1 days"));
- $date = date('Ymd', strtotime("$tmpDate -$tmpDays days"));
- $stime = strtotime("$date 0:0:0");
- $etime = strtotime("$tmpDate 23:59:59");
- $payBlackUidStr = implode(',', $payBlackList);
- $whereStr = empty($payBlackList) ? '' : " AND sl_uid NOT IN ({$payBlackUidStr}) ";
- $summaryList = otable::summarylist();
- $sql = " SELECT sl_uid, sum(sl_pusd) as sl_pusd FROM {$summaryList} WHERE sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} $whereStr GROUP BY sl_uid ";
- $ret = oo::commonOprDb('payment')->getAll($sql, 1);
- $newPayNum = 0;
- $payAmount = 0;
- foreach ($ret as $val){
- if(in_array($val['sl_uid'], $newPlayer)){//是新用户
- $pusd = $val['sl_pusd'];
- $payAmount += $pusd;
- $newPayNum++;
- }
- }
- $data['payAmount'] = $payAmount;
- $data['newPayNum'] = $newPayNum;
- return $data;
- }
- /**
- * 获取付费用户留存
- * @param $newPlayer
- * @param $sdate
- * @param $edate
- * @param array $payBlackList
- * @return mixed
- */
- public function getPayRmainData($newPlayer, $date, $daysBegin, $daysEnd, $payBlackList = [])
- {
- $stime = strtotime("$date 0:0:0 + $daysBegin days");
- $etime = strtotime("$date 23:59:59 + $daysEnd days");
- $payBlackUidStr = implode(',', $payBlackList);
- $whereStr = empty($payBlackList) ? '' : " AND sl_uid NOT IN ({$payBlackUidStr}) ";
- $summaryList = otable::summarylist();
- $sql = " SELECT sl_uid, sum(sl_pusd) as sl_pusd FROM {$summaryList} WHERE sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} AND sl_status = 2 $whereStr GROUP BY sl_uid ";
- $ret = oo::commonOprDb('payment')->getAll($sql, 1);
- $newPayNum = 0;
- $payAmount = 0;
- foreach ($ret as $val){
- if(in_array($val['sl_uid'], $newPlayer)){//是新用户
- $pusd = $val['sl_pusd'];
- $payAmount += $pusd;
- $newPayNum++;
- }
- }
- $data['payAmount'] = $payAmount;
- $data['newPayNum'] = $newPayNum;
- return $data;
- }
- /**
- * 获取某个时间段付费人数
- * @param $sdate
- * @param $edate
- * @param $newPlayer
- */
- public function getNewPayUser($sdate,$newPlayer, $payBlackUidList)
- {
- $payBlackStr = implode(',', $payBlackUidList);
- $summaryList = otable::summarylist();
- $stime = strtotime("$sdate 0:0:0");
- $stimeEnd = strtotime("$sdate 23:59:59");
- $newPayUserList1 = $newPayUserList7 = [];
- //查询首日付费用户
- $sql = " SELECT DISTINCT sl_uid FROM {$summaryList} WHERE sl_status and sl_pay_time >= {$stime} AND sl_pay_time <= {$stimeEnd} AND sl_status = 2 AND sl_uid NOT IN ({$payBlackStr}) ";
- $ret = oo::commonOprDb('payment')->getAll($sql, 1);
- if(!empty($ret)){
- foreach ($ret as $val){
- if(in_array($val['sl_uid'], $newPlayer)){
- $newPayUserList1[] = $val['sl_uid'];
- }
- }
- }
- return $newPayUserList1;
- }
- public function avgLoginTime(){
- // $robot = oo::commonOprModel('robot')->getAllRobot();
- // $NotUid = implode(',',$robot);
- // $sum = 0;
- // $total = 0;
- // for($i=0;$i<100;$i++){
- // $tb = otable::statistics($i);
- // $dbsum = oo::commonOprDb('statistics')->getOne("SELECT SUM(loginTime) as sum FROM {$tb} WHERE uid NOT IN ($NotUid)", MYSQLI_ASSOC);
- // $dbtotal = oo::commonOprDb('statistics')->getOne(" SELECT count(1) as total FROM {$tb} WHERE uid NOT IN ($NotUid)", MYSQLI_ASSOC);
- // $sum += $dbsum['sum'];
- // $total += $dbtotal['total'];
- // }
- $data = $this->getAllLoginTime();
- $sum = array_sum(array_values($data));
- $total = count(array_keys($data));
- if(empty($data)){
- return 0;
- }
- return $sum/$total;
- }
- /**
- * 获取登录时长所有数据(分散在多个环形hash key内)
- * @return array
- */
- public function getAllLoginTime() {
- $keys = okeys::LoginTimes();
- $data = [];
- foreach($keys as $k){
- $data = $data + oo::commonOprRedis('common')->hGetAll($k);
- }
- return $data;
- }
- /**
- * 删除所有登录时长环形key
- */
- public function delAllLoginTime() {
- $keys = okeys::LoginTimes();
- foreach($keys as $k){
- oo::commonOprRedis('common')->delete($k);
- }
- }
- public function savePropertyStatistics(){
- $actArr = ["+"=>"add","-"=>"low"];
- $addTotal = 0;
- $lowTotal = 0;
- $data = [];
- foreach ($actArr as $key=>$row){
- if($key == "+"){
- $moneyAddType = oo::commonOprModel('member')->moneyAddType();
- foreach ($moneyAddType as $x=>$y){
- $num = oo::commonOprRedis('statistics')->getSet("Statistics:money{$key}{$x}",0);
- $data['money']['add'][$x] += intval($num);
- $addTotal += intval($num);
- }
- $spinAddType = oo::commonOprModel('member')->sipnAddType();
- foreach ($spinAddType as $x=>$y){
- $num = oo::commonOprRedis('statistics')->getSet("Statistics:spins{$key}{$x}",0);
- $data['spins']['add'][$x] += intval($num);
- }
- }else if($key == "-"){
- $moneyLowType = oo::commonOprModel('member')->moneyLowType();
- foreach ($moneyLowType as $x=>$y){
- $num = oo::commonOprRedis('statistics')->getSet("Statistics:money{$key}{$x}",0);
- $data['money']['low'][$x] += intval($num);
- $lowTotal += intval($num);
- }
- $sipnLowType = oo::commonOprModel('member')->sipnLowType();
- foreach ($sipnLowType as $x=>$y){
- $num = oo::commonOprRedis('statistics')->getSet("Statistics:spins{$key}{$x}",0);
- $data['spins']['low'][$x] += intval($num);
- }
- }
- }
- $date = date('Y-m-d');
- $tbKey[] = 'date';
- $tbVal[] = date('Ymd');
- $tbKey[] = 'data';
- $tbVal[] = json_encode($data);
- $tb = otable::AssetsSta();
- $tbKey = implode(',',$tbKey);
- $tbVal = implode("','",$tbVal);
- $tbVal = "'".$tbVal."'";
- $sql = "INSERT INTO {$tb} ($tbKey) VALUES ({$tbVal})";
- oo::commonOprDb('statistics')->query($sql);
- $keyArr = ["money", "spins", "shield", "star", "levelId","slotCount"];
- $temp = [];
- foreach ($actArr as $key=>$row){
- foreach ($keyArr as $x){
- $okey = ($key== "+")?okeys::PropertyAdd($x):okeys::PropertyLow($x);
- $ret = oo::commonOprRedis('statistics')->get($okey);
- $temp[$row][$x] = $ret?$ret:0;
- oo::commonOprRedis('statistics')->delete($okey);
- }
- }
- $tableAdd = otable::PropertyAdd();
- $sql = " INSERT INTO {$tableAdd}(date,money,spins,shield,star,levelId,slotCount) VALUES('{$date}',{$addTotal},{$temp['add']['spins']},{$temp['add']['shield']},{$temp['add']['star']},{$temp['add']['levelId']},{$temp['add']['slotCount']})";
- oo::commonOprDb('statistics')->query($sql);
- $tableAdd = otable::Propertylow();
- $sql = " INSERT INTO {$tableAdd}(date,money,spins,shield,star) VALUES('{$date}',{$lowTotal},{$temp['low']['spins']},{$temp['low']['shield']},{$temp['low']['star']})";
- oo::commonOprDb('statistics')->query($sql);
- var_dump('run savePropertyStatistics');
- }
- /**
- * 新手流失率
- * Created by: Owen
- * Created on: 2019/7/26 16:58
- * Description:
- */
- public function newLost($timestamp){
- $seven = $timestamp - 24*60*60*8;
- $fifteen = $timestamp - 24*60*60*15;
- $thirty = $timestamp - 24*60*60*30;
- $data = [
- 'time'=>date('Y-m-d', $timestamp),
- 'seven'=>'',
- 'fifteen'=>0,
- 'thirty'=>0,
- 'seven_percent'=>0,
- 'fifteen_percent'=>0,
- 'thirty_percent'=>0,
- 'total'=>0,
- ];
- $robot = oo::commonOprModel('robot')->getAllRobot();
- $robot = implode(',',$robot);
- $total = 0;
- $sevenc = 0;
- $fifteenc = 0;
- $thirtyc = 0;
- //for ($i=0;$i<100;$i++){
- $ghTb = otable::gh_gameserver(1);
- $userTb = otable::userinfo(1);
- $sql = "SELECT count(*) as count FROM {$ghTb} WHERE mid NOT IN ({$robot})";
- $ret = oo::commonOprDb('common')->getOne($sql,1);
- $total += $ret['count'];
- $sql = "SELECT count(*) as count FROM {$ghTb} AS gh LEFT JOIN {$userTb} as u ON gh.mid=u.uid WHERE u.lasttime<{$seven} AND gh.beginGuide<18 AND gh.mid NOT IN ({$robot}) LIMIT 1";
- $ret = oo::commonOprDb('common')->getOne($sql,1);
- $sevenc += $ret['count'];
- $sql = "SELECT count(*) as count FROM {$ghTb} AS gh LEFT JOIN {$userTb} as u ON gh.mid=u.uid WHERE u.lasttime<{$fifteen} AND gh.beginGuide<18 AND gh.mid NOT IN ({$robot}) LIMIT 1";
- $ret = oo::commonOprDb('common')->getOne($sql,1);
- $fifteenc += $ret['count'];
- $sql = "SELECT count(*) as count FROM {$ghTb} AS gh LEFT JOIN {$userTb} as u ON gh.mid=u.uid WHERE u.lasttime<{$thirty} AND gh.beginGuide<18 AND gh.mid NOT IN ({$robot}) LIMIT 1";
- $ret = oo::commonOprDb('common')->getOne($sql,1);
- $thirtyc += $ret['count'];
- //}
- $data['total'] = ($total != 0)?$total:0;
- $data['seven'] = $sevenc;
- $data['seven_percent'] = round($sevenc/$data['total'],2);
- $data['fifteen'] = $fifteenc;
- $data['fifteen_percent'] = round($fifteenc/$data['total'],2);
- $data['thirty'] = $thirtyc;
- $data['thirty_percent'] = round($thirtyc/$data['total'],2);
- $tb = otable::NewLost();
- $value = array_values($data);
- $value = implode("','",$value);
- $value = "'{$value}'";
- $sql = "INSERT INTO {$tb} VALUES({$value})";
- oo::commonOprDb('statistics')->query($sql,true);
- }
- public function newGuideLost(){
- $keys = [10002,10003,10004,10005,10006,10007];
- foreach ($keys as $eventId){
- if($eventId == 10002 || $eventId == 10003){
- continue;
- }
- $data = [
- 'time'=>date('Y-m-d'),
- 'event_id'=>$eventId,
- 'data'=>[],
- 'total'=>0,
- 'success_total'=>0,
- 'other'=>[],
- 'version'=>0,
- ];
-
- //FB
- $dataFb = [
- 'time'=>date('Y-m-d'),
- 'event_id'=>$eventId,
- 'data'=>[],
- 'total'=>0,
- 'success_total'=>0,
- 'version'=>0,
- ];
-
- //游客
- $dataVisitor = [
- 'time'=>date('Y-m-d'),
- 'event_id'=>$eventId,
- 'data'=>[],
- 'total'=>0,
- 'success_total'=>0,
- ];
- $eventData = oo::commonOprRedis('Statistics')->hGetAll(okeys::Report($eventId));
- $data['total'] = count($eventData);
-
- $Users = [];//总用户
- $fbUsers = [];//fb用户
- $visitorUsers = [];//游客
- foreach ($eventData as $key=>$row){
- if($row<24){
- $data['data'][$row] = $data['data'][$row] + 1;
- }
-
- //10005事件 区分FB、游客
- if($eventId == 10005 || $eventId == 10006 || $eventId == 10007){
- $Users[] = $key;
- if(oo::commonOprModel('member')->isVistor($key) == 1){
- //游客
- $visitorUsers[] = $key;
- $dataVisitor['data'][$row] = $dataVisitor['data'][$row] + 1;
- }else{
- //FB
- $fbUsers[] = $key;
- $dataFb['data'][$row] = $dataFb['data'][$row] + 1;
- }
- }
- }
- $dataFb['total'] = count($fbUsers);//FB总流失数 包括通过的
- $dataVisitor['total'] = count($visitorUsers);//游客总流失数 包括通过的
-
- //最后一个事件人数减去通过新手的人数
- if($eventId == 10005 || $eventId == 10006 || $eventId == 10007){
- //所有当天注册玩家
- $successUsersCount = 0;
- if(!empty($Users)){
- $UidStr = empty($Users) ? '' : " AND mid IN (".implode(',', $Users).") ";
- //所有通过新手任务的玩家
- //for($i = 0; $i < 100; $i ++){
- $slTable = otable::gh_gameserver(1);
- $sql = " SELECT count(*) AS count FROM {$slTable} WHERE beginGuide = 19 {$UidStr}";
- $result = oo::commonOprDB('payment')->getOne($sql, 1);
- $successUsersCount +=$result['count'];
- //}
- }
- $data['success_total'] = $successUsersCount;
-
- //FB的通过数
- $successUsersCountFb = 0;
- if(!empty($fbUsers)){
- $UidStrFb = empty($fbUsers) ? '' : " AND mid IN (".implode(',', $fbUsers).") ";
- //所有通过新手任务的玩家
- //for($i = 0; $i < 100; $i ++){
- $slTable = otable::gh_gameserver(1);
- $sql = " SELECT count(*) AS count FROM {$slTable} WHERE beginGuide = 19 {$UidStrFb}";
- $result = oo::commonOprDB('payment')->getOne($sql, 1);
- $successUsersCountFb +=$result['count'];
- //}
- }
- $dataFb['success_total'] = $successUsersCountFb;
-
- //游客的通过数
- $successUsersCountVisitor = 0;
- if(!empty($visitorUsers)){
- $UidStrVisitor = empty($visitorUsers) ? '' : " AND mid IN (".implode(',', $visitorUsers).") ";
- //所有通过新手任务的玩家
- //for($i = 0; $i < 100; $i ++){
- $slTable = otable::gh_gameserver(1);
- $sql = " SELECT count(*) AS count FROM {$slTable} WHERE beginGuide = 19 {$UidStrVisitor}";
- $result = oo::commonOprDB('payment')->getOne($sql, 1);
- $successUsersCountVisitor +=$result['count'];
- //}
- }
- $dataVisitor['success_total'] = $successUsersCountVisitor;
- }
-
- $data['data'] = json_encode($data['data'],JSON_NUMERIC_CHECK);
-
-
- //插入游客 统计结果
- //$dataVisitor['data'] = json_encode($dataVisitor['data'],JSON_NUMERIC_CHECK);
-
- $data['other']['fb'] = $dataFb;
- $data['other']['visitor'] = $dataVisitor;
- $data['other'] = json_encode($data['other'],JSON_NUMERIC_CHECK);
- $tb = otable::newGuideLost();
- $value = array_values($data);
- $value = implode("','",$value);
- $value = "'{$value}'";
- $sql = "INSERT INTO {$tb} VALUES({$value})";
- oo::commonOprDb('statistics')->query($sql,false);
-
- //插入FB 统计结果
- $dataFb['data'] = json_encode($dataFb['data'],JSON_NUMERIC_CHECK);
- $tb = otable::newGuideLostFb();
- $value = array_values($dataFb);
- $value = implode("','",$value);
- $value = "'{$value}'";
- $sql = "INSERT INTO {$tb} VALUES({$value})";
- oo::commonOprDb('statistics')->query($sql,false);
-
- oo::commonOprRedis('Statistics')->delete(okeys::Report($eventId));
- }
- }
- /**
- * 关卡流失率
- * Created by: Owen
- * Created on: 2019/7/26 16:56
- * Description:
- */
- public function levelLost($timestamp){
- $seven = $timestamp - 24*60*60*8;
- $fifteen = $timestamp - 24*60*60*15;
- $thirty = $timestamp - 24*60*60*30;
- $data = [
- 'time'=>date('Y-m-d', $timestamp),
- 'total'=>0,
- 'seven'=>[],
- 'fifteen'=>[],
- 'thirty'=>[],
- ];
- $robot = oo::commonOprModel('robot')->getAllRobot();
- $robot = implode(',',$robot);
- //for ($i=0;$i<100;$i++){
- $ghTb = otable::gh_gameserver(1);
- $userTb = otable::userinfo(1);
- $sql = "SELECT count(*) as count FROM {$ghTb} WHERE mid NOT IN ({$robot})";
- $ret = oo::commonOprDb('common')->getOne($sql,1);
- $data['total'] = $ret['count'];
- $sql = "SELECT gh.levelId as level FROM {$ghTb} AS gh LEFT JOIN {$userTb} as u ON gh.mid=u.uid WHERE u.lasttime<{$seven} AND gh.mid NOT IN ({$robot}) ORDER BY gh.levelId";
- $ret = oo::commonOprDb('common')->getAll($sql,1);
- foreach ($ret as $row){
- $data['seven'][$row['level']] = $data['seven'][$row['level']] + 1;
- }
- $sql = "SELECT gh.levelId as level FROM {$ghTb} AS gh LEFT JOIN {$userTb} as u ON gh.mid=u.uid WHERE u.lasttime<{$fifteen} AND gh.mid NOT IN ({$robot}) ORDER BY gh.levelId";
- $ret = oo::commonOprDb('common')->getAll($sql,1);
- foreach ($ret as $row){
- $data['fifteen'][$row['level']] = $data['fifteen'][$row['level']] + 1;
- }
- $sql = "SELECT gh.levelId as level FROM {$ghTb} AS gh LEFT JOIN {$userTb} as u ON gh.mid=u.uid WHERE u.lasttime<{$thirty} AND gh.mid NOT IN ({$robot}) ORDER BY gh.levelId";
- $ret = oo::commonOprDb('common')->getAll($sql,1);
- foreach ($ret as $row){
- $data['thirty'][$row['level']] = $data['thirty'][$row['level']] + 1;
- }
- //}
- $data['seven'] = json_encode($data['seven'],JSON_NUMERIC_CHECK);
- $data['fifteen'] = json_encode($data['fifteen'],JSON_NUMERIC_CHECK);
- $data['thirty'] = json_encode($data['thirty'],JSON_NUMERIC_CHECK);
- $tb = otable::LevelLost();
- $value = array_values($data);
- $value = implode("','",$value);
- $value = "'{$value}'";
- $sql = "INSERT INTO {$tb} VALUES({$value})";
- oo::commonOprDb('statistics')->query($sql,false);
- }
- /**
- * 关卡通过率
- * Created by: Owen
- * Created on: 2019/7/26 17:01
- * Description:
- */
- public function levelThrough($timestamp){
- $stime = strtotime(date('Y-m-d 00:00:00', $timestamp));
- $etime = strtotime(date('Y-m-d 23:59:59', $timestamp));
- $data = [
- 'time'=>date('Y-m-d', $timestamp),
- 'data'=>[],
- 'total'=>0,
- ];
- $robot = oo::commonOprModel('robot')->getAllRobot();
- $robot = implode(',',$robot);
-
- $ghTb = otable::gh_gameserver(1);
- $sql = "SELECT count(*) as count FROM {$ghTb} WHERE mid NOT IN ({$robot})";
- $ret = oo::commonOprDb('ghgames')->getOne($sql,1);
- $data['total'] = $ret['count'];
-
- for ($i=0;$i<100;$i++){
- $lTb = otable::userlevel($i);
- $sql = "SELECT levelId FROM {$lTb} WHERE levelId>1 AND createTime>{$stime} AND createTime<{$etime} ORDER BY levelId";
- $ret = oo::commonOprDb('userlevel')->getAll($sql,1);
- foreach ($ret as $row){
- $data['data'][$row['levelId']-1] = $data['data'][$row['levelId']-1] + 1;
- }
- }
- $data['data'] = json_encode($data['data'],JSON_NUMERIC_CHECK);
- $tb = otable::LevelThrough();
- $value = array_values($data);
- $value = implode("','",$value);
- $value = "'{$value}'";
- $sql = "INSERT INTO {$tb} VALUES({$value})";
- oo::commonOprDb('statistics')->query($sql,false);
- }
- public function slotStatistics(){
- $tb = otable::slotStatistics();
- $date = date('Y-m-d');
- $money = $this->slotTb(1);
- $spins = $this->slotTb(2);
- $steal = $this->slotTb(3);
- $attack = $this->slotTb(4);
- $shield = $this->slotTb(5);
- $activity = $this->slotTb(6);
- $nothing = $this->slotTb(0);
- $count = $money + $spins + $steal + $attack + $shield + $activity + $nothing;
- $sql = " INSERT INTO {$tb}(date,slot,money,spins,shield,steal,attack,activity,nothing) VALUES('{$date}',{$count},{$money},{$spins},{$shield},{$steal},{$attack},{$activity},{$nothing})";
- oo::commonOprDb('statistics')->query($sql);
-
- oo::commonOprRedis('Statistics')->delete(okeys::slotSta());
- }
- private function slotTb($type){
- $sTime = strtotime(date('00:00:00'));
- $eTime = strtotime(date('23:59:59'));
- $num = 0;
- /*
- //旧逻辑 读老虎机流水表
- for($i=0;$i<100;$i++){
- $tb = otable::slotlog($i);
- $sql = "SELECT count(slottype) as count FROM {$tb} WHERE slottype={$type} AND time>{$sTime} AND time<{$eTime} AND type=1";
- $count = oo::commonOprDb('slotlog')->getOne($sql,1);
- $num += intval($count['count']);
- }
- */
- //新逻辑 读redis
- $num = intval(oo::commonOprRedis('Statistics')->hGet(okeys::slotSta(),$type));
- return $num;
- }
- public function InviteSta($timestamp){
- $date = date('Y-m-d', $timestamp);
- $num = oo::commonOprRedis('statistics')->get(okeys::dailyInviteNum());
- $num = $num?$num:0;
- $tb = otable::userinvitesuc();
- $sTime = strtotime('00:00:00', $timestamp);
- $eTime = strtotime('23:59:59', $timestamp);
- $sql = "SELECT count(*) as count FROM {$tb} WHERE is_time>{$sTime} AND is_time<{$eTime}";
- $ret = oo::commonOprDb('common')->getOne($sql,1);
- $success = $ret['count'];
- $tb = otable::inviteStatistics();
- $sql = " INSERT INTO {$tb}(date,invite,success) VALUES('{$date}',{$num},{$success})";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- function secToTime($sec)
- {
- $sec = round($sec/60);
- if ($sec >= 60){
- $hour = floor($sec/60);
- $min = $sec % 60;
- $res = $hour.' 小时 ';
- $min != 0 && $res .= $min.' 分钟';
- }
- else{
- $res = $sec.' 分钟';
- }
- return $res;
- }
- /**
- * 后台首页上方基本数据统计--运营导出
- * Created by: Owen
- * Created on: 2019/9/20 15:01
- */
- public function BaseDataSta($timestamp){
- $todayKeyDate = date('Ymd', $timestamp);
- $dataToday = oo::commonOprModel('invitecode')->getInviteNum($todayKeyDate);
- $inviteNum = $dataToday['fbAndNum'] + $dataToday['invAndNum'] + $dataToday['fbIosNum'] + $dataToday['invIosNum'];
- $inviteNum = intval($inviteNum);
- $stime = strtotime('00:00:01', $timestamp);
- $etime = strtotime('23:59:59', $timestamp);
- $sidList = [1,2];
- $sidSqlStr = " AND sl_sid IN ( ". implode(',', $sidList)." ) ";
- $slTable = otable::summarylist();;
- $goodsTable = otable::goodsCrazy();;
- $blackUidArr = oo::commonOprModel("config")->payWhiteList();
- $blackUidSql = '';
- if(!empty($blackUidArr)) {
- $blackUidStr = implode(',', $blackUidArr);
- $blackUidSql = " AND sl_uid NOT IN ({$blackUidStr}) ";
- }
- $where = $sidSqlStr.$blackUidSql;
- //查询时间范围内的成功订单
- $sql = " SELECT sl_pusd, sl_uid, sl_pay_time, gchannel
- FROM {$slTable} AS sl LEFT JOIN {$goodsTable} AS goods ON sl.sl_gid = goods.gid
- WHERE sl_status = 2 AND sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} $where ";
- $list = oo::commonOprDb('common')->getAll($sql, MYSQLI_ASSOC);
- //总订单数
- $sql2 = " SELECT id, sl_order_time , gchannel
- FROM {$slTable} AS sl LEFT JOIN {$goodsTable} AS goods ON sl.sl_gid = goods.gid
- WHERE sl_order_time >= {$stime} AND sl_order_time <= {$etime} $where ";
- $list2 = oo::commonOprDb('common')->getAll($sql2, MYSQLI_ASSOC);
- $dayList = $this->getDays($stime, $etime, 2);
- $totalMoney = $totalRecord = $totalUid = $allRecord = $totalChannel = $succChannel = [];
- $uid = [];
- //成功的订单
- foreach ($list as $_v) {
- $date = date('Ymd', $_v['sl_pay_time']);
- $totalMoney[$date] += round($_v['sl_pusd'], 2) ;
- $totalRecord[$date] += 1 ;
- //处理当天重复下单的用户统计
- $uid[$date] ?? $uid[$date] = [];
- if(!in_array($_v['sl_uid'], $uid[$date])) {
- $totalUid[$date] += 1;
- array_push($uid[$date], $_v['sl_uid']);
- }
- //统计当天的渠道的订单数
- if(isset($succChannel[$date][$_v['gchannel']])) {
- $succChannel[$date][$_v['gchannel']] += 1;
- }else {
- $succChannel[$date][$_v['gchannel']] = 1;
- }
- }
- //所有订单
- foreach ($list2 as $_v2) {
- $date = date('Ymd', $_v2['sl_order_time']);
- $allRecord[$date] += 1 ;
- //统计当天的渠道的订单数
- if(isset($totalChannel[$date][$_v2['gchannel']])) {
- $totalChannel[$date][$_v2['gchannel']] += 1;
- }else {
- $totalChannel[$date][$_v2['gchannel']] = 1;
- }
- }
- //计算总的付费用户和新增付费用户
- $firstPayPlayerNum = 0;
- //累计的付费用户数量
- $sqlTotal = " SELECT count(DISTINCT sl_uid) as allPayNum FROM {$slTable} as sl WHERE sl_status = 2 $where ";
- $retTotal = oo::commonOprDb('common')->getOne($sqlTotal, 1);
- $allPayNum = $retTotal['allPayNum'] ?? 0;
- $dateToday = date('Ymd', $timestamp);
- //获取新增的用户UID数组
- $newPlayerArr = oo::commonOprModel('statistics')->getAllPlayer($dateToday, 1, $sidList);
- $newPlayerNum = count($newPlayerArr);//今日新增的人数
- //获取登录的用户UID数组
- $loginPlayerArr = oo::commonOprModel('statistics')->getAllPlayer($dateToday, 2, $sidList);
- $loginPlayerNum = count($loginPlayerArr);
- //今天付费的用户UID
- $payTodayPlayer = $uid[$dateToday] ?? [];
- $newPayUidArr = array_intersect($payTodayPlayer, $newPlayerArr);//获取当天所以新增用户和当天付费的用户的交集
- $newPayNum = count($newPayUidArr);
- $loginAvg = oo::commonOprModel('statistics')->avgLoginTime();
- $loginAvg = floor($loginAvg);
- //首次付费的用户
- if(!empty($payTodayPlayer)) {
- $time = strtotime('0:0:0', $timestamp);
- foreach ($payTodayPlayer as $vuid) {
- $checkBought = $this->checkPayFirst($vuid, $time);
- $checkBought && $firstPayPlayerNum++ ;
- }
- }
- $retDataPayment = [
- 'totalMoney' => $totalMoney,
- 'totalRecord' => $totalRecord,
- 'totalUid' => $totalUid,
- 'allRecord' => $allRecord,
- 'dayList' => $dayList,
- 'totalChannel' => $totalChannel,
- 'succChannel' => $succChannel,
- 'allPayNum' => $allPayNum,
- 'newPayNum' => $newPayNum,
- 'loginPlayerNum' => $loginPlayerNum,
- 'newPlayerNum' => $newPlayerNum,
- 'firstPayPlayerNum' => $firstPayPlayerNum,
- 'loginAvg' => $loginAvg,
- ];
- $todayDate = date('Ymd', $timestamp);
- $todaySuccessPayNum = $retDataPayment['totalUid'][$todayDate] ?? 0;
- $todayPayMoney = $retDataPayment['totalMoney'][$todayDate] ?? 0;
- $data['allPayNum'] = $retDataPayment['allPayNum'] ?? 0;
- $data['newPayNum'] = $retDataPayment['newPayNum'] ?? 0;
- $todayLogin = $retDataPayment['loginPlayerNum'] ?? 0;
- $data['todayNew'] = $retDataPayment['newPlayerNum'] ?? 0;
- $data['firstPayPlayerNum'] = $retDataPayment['firstPayPlayerNum'] ?? 0;
- $data['loginAvg'] = $this->secToTime($retDataPayment['loginAvg'] ?? 0);
- $todayLoginTemp = $todayLogin ?? 0;
- $todaySuccessPayNumTemp = $todaySuccessPayNum ?? 0;
- $todayPayMoneyTemp = round($todayPayMoney ?? 0, 2);
- $data['todayLogin'] = $todayLoginTemp;
- $data['todaySuccessPayNum'] = $todaySuccessPayNumTemp;
- $data['todayPayMoney'] = $todayPayMoney ?? 0;
- //计算付费率 付费人数/DAU
- $data['payRate'] = empty($todayLoginTemp) ? '0%' : round($todaySuccessPayNumTemp * 100 / $todayLoginTemp, 2).'%';
- //ARPU 付费金额/DAU
- $data['payARPU'] = empty($todayLoginTemp) ? 0 : round($todayPayMoneyTemp / $todayLoginTemp, 2);
- //ARPPU 付费金额/付费人数
- $data['payARPPU'] = empty($todaySuccessPayNumTemp) ? 0 : round($todayPayMoneyTemp/ $todaySuccessPayNumTemp, 2);
- //自传播占比 (FB邀请+邀请码邀请)/新增
- $data['AARRR'] = empty($data['todayNew']) ? '0%' : round($inviteNum * 100 / $data['todayNew'], 2).'%';
-
- $LoginCount = oo::commonOprRedis('common')->getSet(okeys::getLoginCount(),0);
- $VersionCount = oo::commonOprRedis('common')->getSet(okeys::getVersionCount(),0);
- if($LoginCount == 0 || $VersionCount == 0){
- $data['loginPro'] = 0;
- }else{
- $data['loginPro'] = ceil(($LoginCount/$VersionCount)*100);
- }
-
- //新手引导完成率安卓
- $guideCount = oo::commonOprRedis('common')->sInter([okeys::getGuideCount(1),okeys::getRegCount(1)]);
- $regCount = oo::commonOprRedis('common')->sUnion(okeys::getRegCount(1));
- if(empty($regCount)){
- $data['guidePro'] = 0;
- }else{
- $data['guidePro'] = ceil((count($guideCount)/count($regCount))*100);
- }
-
- //新手引导完成率IOS
- $guideCount = oo::commonOprRedis('common')->sInter([okeys::getGuideCount(2),okeys::getRegCount(2)]);
- $regCount = oo::commonOprRedis('common')->sUnion(okeys::getRegCount(2));
- if(empty($regCount)){
- $data['guidePro2'] = 0;
- }else{
- $data['guidePro2'] = ceil((count($guideCount)/count($regCount))*100);
- }
- oo::commonOprRedis('common')->delete([okeys::getGuideCount(1),okeys::getRegCount(1),okeys::getGuideCount(2),okeys::getRegCount(2)]);
-
- $stime = strtotime('-6 days 00:00:00', $timestamp);
- $etime = strtotime('-7 days 00:00:00', $timestamp);
- $uidTotal = 0;
- $noBuildTotal = 0;
- //for($i=0;$i<100;$i++){
- //$tb = otable::userinfo($i);
- $tb = otable::userinfo(1);
- $sql = "SELECT uid FROM {$tb} WHERE lasttime<{$stime} AND lasttime>{$etime}";
- $ret = oo::commonOprDb('userinfo')->getAll($sql,MYSQLI_ASSOC);
- foreach ($ret as $row){
- $uidTotal++;
- if(oo::commonOprModel('member')->getUserCurLevelTotal($row['uid']) == 0){
- $noBuildTotal++;
- }
- }
- //}
- $data['noBuildPro'] = empty($uidTotal) ? 0 : ceil(($noBuildTotal/$uidTotal)*100);
- $incr = [
- 'upBuild'=>0,
- 'reBuild'=>0,
- 'woodenChest'=>0,
- 'goldenChest'=>0,
- 'magicalChest'=>0
- ];
- foreach ($incr as $key=>$value){
- $num = intval(oo::commonOprRedis('common')->get(okeys::incr($key)));
- $incr[$key] = $num;
- oo::commonOprRedis('common')->decrBy(okeys::incr($key),$num);
- }
- $data['incrData'] = json_encode($incr);
- $data['slotSpinsTurnAttack'] = 0;
- // $data['slotSpinsTurnAttack'] = oo::commonOprRedis('common')->getSet(okeys::SlotSpinsTurnAttack(),0);
- $data['date'] = date('Ymd', $timestamp);
- $table = otable::BaseDataSta();
- $keys = "";
- $value = "";
- foreach ($data as $key=>$row){
- $keys .= "{$key},";
- $value .= "'{$row}',";
- }
- $keys = trim($keys,',');
- $value = trim($value,',');
- $sql = "INSERT INTO {$table} ({$keys}) VALUES({$value})";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 统计警告
- * @param $uid
- * @param int $robotId
- * @param string $content
- * @param int $type
- * Created by: Owen
- * Created on: 2019/9/26 16:16
- */
- public function addWarning($uid,$content = '',$type = 0,$num = 0){
- $tb = otable::addWarning();
- $time = time();
- $sql = "INSERT INTO {$tb}(uid,num,content,type,time) VALUES({$uid},{$num},'{$content}',{$type},{$time})";
- oo::commonOprDb('common')->query($sql);
- }
-
- public function versionSta($time){
- //统计累计的
- $login_plat = [1=>'Android',2=>'IOS'];
- $temp = [];
- foreach ($login_plat as $key=>$row){
- $where = "u.version = t.version";
- $where .= " AND u.login_plat=".$key;
- //for($i=100;$i<200;$i++){
- //$tb = otable::userinfo($i);
- $tb = otable::userinfo(1);
- $sql = "SELECT u.version ,count(u.version) as count FROM {$tb} as u JOIN (SELECT DISTINCT version FROM {$tb}) as t WHERE {$where} GROUP BY t.version";
- $ret = oo::commonOprDb('userinfo')->getAll($sql,MYSQLI_ASSOC);
- foreach ($ret as $va){
- $version = $va['version'];
- if(empty($version)){
- $version = 'none';
- }
- if(!isset($temp[$row][$version])){
- $temp[$row][$version] = $va['count'];
- }else{
- $temp[$row][$version] +=$va['count'];
- }
- }
- //}
- }
- $out = [];
- foreach ($login_plat as $key=>$row){
- $out[$row] = [];
- foreach ($temp[$row] as $k=>$v){
- if($k == 'none'){
- $tempData['version'] = '';
- }else{
- $tempData['version'] = $k;
- }
- $tempData['count'] = $v;
- $out[$row][] = $tempData;
- }
- }
- //统计当天的
- $login_plat = [1=>'Android',2=>'IOS'];
- $temp = [];
- foreach ($login_plat as $key=>$row){
- $where = "u.version = t.version";
- $where .= " AND u.login_plat=".$key;
-
- //统计当天的
- $time = strtotime('00:00:00', $time);
- $where .= " AND u.lasttime>=".$time;
-
- //for($i=100;$i<200;$i++){
- //$tb = otable::userinfo($i);
- $tb = otable::userinfo(1);
- $sql = "SELECT u.version ,count(u.version) as count FROM {$tb} as u JOIN (SELECT DISTINCT version FROM {$tb}) as t WHERE {$where} GROUP BY t.version";
- $ret = oo::commonOprDb('userinfo')->getAll($sql,MYSQLI_ASSOC);
- foreach ($ret as $va){
- $version = $va['version'];
- if(empty($version)){
- $version = 'none';
- }
- if(!isset($temp[$row][$version])){
- $temp[$row][$version] = $va['count'];
- }else{
- $temp[$row][$version] +=$va['count'];
- }
- }
- //}
- }
- $today_out = [];
- foreach ($login_plat as $key=>$row){
- $today_out[$row] = [];
- if(!isset($temp[$row]) || !is_array($temp[$row])){
- continue;
- }
- foreach ($temp[$row] as $k=>$v){
- if($k == 'none'){
- $tempData['version'] = '';
- }else{
- $tempData['version'] = $k;
- }
- $tempData['count'] = $v;
- $today_out[$row][] = $tempData;
- }
- }
-
- $tb = otable::versionSta();
- $date = date('Y-m-d', $time);
- $out = json_encode($out);
- $today_out = json_encode($today_out);
- $sql = "INSERT INTO {$tb}(date,version,today_version) VALUES('{$date}','{$out}','{$today_out}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- /**
- * 登录时长
- * Created by: Owen
- * Created on: 2019/10/17 17:30
- */
- public function loginTime($deBug = false){
- $date = date('Y-m-d',strtotime("-1 days 0:0:0"));
- $userLoginTime = $this->getAllLoginTime();
- oo::logs()->debug5($userLoginTime,'loginTime.log','loginTime/'.date('Ymd').'/');
- $onLineTime = array_sum(array_values($userLoginTime));
- //分地区统计
- $uids = [];
- $vivo_logintime = 0;//VIVO在线时长
- /*
- foreach($userLoginTime as $uid => $time){
- $uids[] = $uid;
- $temp = oo::commonOprModel('member')->getUserInfo($uid);
- if($temp['channel'] == 1){
- $vivo_logintime += $time;
- }
- }
- */
- $uids = array_keys($userLoginTime);
- if(!empty($uids)){
- $uidsStr = implode(",",$uids);
- $userinfoTb = otable::userinfo(1);
- $sql = "SELECT uid FROM {$userinfoTb} WHERE channel = 1 AND uid in({$uidsStr})";
- $vivoPlayerRet = oo::commonOprDb('common')->getAll($sql, 1);
- foreach($vivoPlayerRet as $vivoPlayerRetTemp){
- $vivo_logintime += $userLoginTime[$vivoPlayerRetTemp['uid']];
- }
- $tb = otable::PropertyLogin();
- $sql = "INSERT INTO {$tb} (uid, date, time, vivo_logintime) VALUES (0,'{$date}', {$onLineTime}, {$vivo_logintime})";
- oo::commonOprDb('statistics')->query($sql);
- $useraddress = otable::useraddress();
- $sql = "SELECT addr.uid,addr.country_code,u.login_plat FROM {$useraddress} addr LEFT JOIN {$userinfoTb} u ON addr.uid = u.uid WHERE addr.uid in({$uidsStr})";
- $ret = oo::commonOprDb('common')->getAll($sql,1);
- $addr = $numArr = [];
- foreach($ret as $row){
- /*
- $userinfo = oo::commonOprModel('member')->getUserInfo($row['uid']);//玩家基本信息
- $sid = ( in_array($userinfo['login_plat'], array(11, 1)) ) ? 1 : 2;
- */
- $sid = ( in_array($row['login_plat'], array(11, 1)) ) ? 1 : 2;
- $addr[$sid][$row['country_code']] += $userLoginTime[$row['uid']];
- $numArr[$sid][$row['country_code']] += 1;
- }
- $tbAddress = otable::loginTimeAddress();
- foreach([1,2] as $sid){
- if(!empty($addr[$sid]) && is_array($addr[$sid])){
- foreach($addr[$sid] as $code => $row){
- $number = empty($numArr[$sid][$code])?0:$numArr[$sid][$code];
- $sql = "INSERT INTO {$tbAddress} (`day`, `address`, `sid`,`time`, `number`) VALUES ('{$date}','{$code}', {$sid},{$row}, {$number})";
- oo::commonOprDb('statistics')->query($sql);
- }
- }
- }
- }
- !$deBug && $this->delAllLoginTime();
- }
-
- /**
- * 广告统计
- * @return string
- * Created by: Owen
- * Created on: 2019/10/21 17:22
- */
- public function advertisement(){
- $date = date('Ymd');
- $sid = [1=>'android',2=>'ios'];
- $successSid = [];
- foreach ($sid as $x=>$y){
- $userCountList = oo::commonOprRedis('common')->hGetAll(okeys::advertisementRemainCount($x));
- $success = [];
- foreach ($userCountList as $key=>$row){
- $temp = explode('-',$key);
- $success[$temp[1]] += $row;
- }
- $successSid[$y] = $success;
- }
- $success = json_encode($successSid);
-
- $clickSid = [];
- foreach ($sid as $x=>$y){
- $userCountList = oo::commonOprRedis('Statistics')->hGetAll(okeys::Report(10002,$x));
- $click = [];
- foreach ($userCountList as $key=>$row){
- $temp = explode('-',$key);
- $click[$temp[1]] += $row;
- }
- $clickSid[$y] = $click;
- }
- $clickSid = json_encode($clickSid);
-
- $playSid = [];
- foreach ($sid as $x=>$y){
- $userCountList = oo::commonOprRedis('Statistics')->hGetAll(okeys::Report(10003,$x));
- $play = [];
- foreach ($userCountList as $key=>$row){
- $temp = explode('-',$key);
- $play[$temp[1]] += $row;
- }
- $playSid[$y] = $play;
- }
- $playSid = json_encode($playSid);
- $tb = otable::advertisementSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$success}', '{$clickSid}','{$playSid}')";
- oo::commonOprDb('statistics')->query($sql);
- oo::commonOprRedis('common')->delete(okeys::advertisementRemainCount());
- oo::commonOprRedis('common')->delete(okeys::advertisementRemainCount(1));
- oo::commonOprRedis('common')->delete(okeys::advertisementRemainCount(2));
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10002,1));
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10002,2));
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10003,1));
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10003,2));
- }
-
- public function dayRank(){
- $key = ['level','money','spins','addMoney','addSpins'];
- foreach ($key as $row){
- oo::commonOprRedis('common')->delete(okeys::todayDataRank($row));
- }
- return
- $inset = [
- 'date'=>date('Ymd')
- ];
- foreach ($key as $row){
- $data = oo::commonOprRedis('common')->hGetAll(okeys::todayDataRank($row));
- arsort($data);
- $data = array_slice($data,0,50,true);
- $inset[$row] = json_encode($data);
- oo::commonOprRedis('common')->delete(okeys::todayDataRank($row));
- }
- $tb = otable::dayRank();
- $key = implode(',',array_keys($inset));
- $str = "";
- foreach ($inset as $row){
- $str .= "'{$row}',";
- }
- $str = trim($str,',');
- $sql = "INSERT INTO {$tb} ({$key}) VALUES ({$str})";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 每日分享统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/12 11:28
- */
- public function todayShareStatistics($timestamp){
- $date = date('Ymd', $timestamp);
-
- $tb = otable::ShareConfig();
- $sql = " SELECT * FROM {$tb}";
- $ret = oo::commonOprDb('config')->getAll($sql,1);
- $datas = array();
- foreach($ret as $k => $v){
- //分享
- $data = array();
- $data['total'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'selfType'),'total'));
- $data['successNumber'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'selfType'),'successNumber'));
- $data['money'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'selfType'),'money'));
- $data['spins'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'selfType'),'spins'));
- $datas[$v['type']]['selfType'] = $data;
- //点击
- $data = array();
- $data['total'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'otherType'),'total'));
- $data['successNumber'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'otherType'),'successNumber'));
- $data['money'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'otherType'),'money'));
- $data['spins'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::todayShareStatistics($v['type'],'otherType'),'spins'));
- $datas[$v['type']]['otherType'] = $data;
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::todayShareStatistics($v['type'],'selfType'));
- oo::commonOprRedis('Statistics')->delete(okeys::todayShareStatistics($v['type'],'otherType'));
- }
-
- $datas = json_encode($datas);
-
- $tb = otable::shareSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$datas}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 每日体力金币发放消耗关卡统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/13 12:05
- */
- public function todaySpinsMoneyLevelSta(){
- return ;
- $date = date('Ymd');
- $data = array();
- $data['moneyAdd'] = oo::commonOprRedis('Statistics')->hgetall(okeys::spinsMoneyLevelStatistics('money','Add'));
- $data['moneySub'] = oo::commonOprRedis('Statistics')->hgetall(okeys::spinsMoneyLevelStatistics('money','Sub'));
- $data['spinsAdd'] = oo::commonOprRedis('Statistics')->hgetall(okeys::spinsMoneyLevelStatistics('spins','Add'));
- $data['spinsSub'] = oo::commonOprRedis('Statistics')->hgetall(okeys::spinsMoneyLevelStatistics('spins','Sub'));
-
- $type = 2;
- $ret = oo::commonOprModel('statistics')->getAllPlayer($date, $type, []);
- $uids = [];
- foreach($ret as $k => $v){
- $uids[] = $v;
- }
- $uids = array_filter($uids);
- $uidStr = implode(",",$uids);
- $levelRangeList = [];
- $todayLoginTime = [];
-
- $tb = otable::gh_gameserver(1);
- //记录每个关卡人数
- $levelRange = $this->getLevelRange();
- foreach ($levelRange as $key=>$row){
- if(!empty($uidStr)){
- $sql = "SELECT count(*) as count FROM {$tb} WHERE levelId={$row} AND mid in(".$uidStr.")";
- $ret = oo::commonOprDb('common')->getOne($sql,1);
- $levelRangeList[] = intval($ret['count']);
- }else{
- $levelRangeList[] = 0;
- }
- $todayLoginTime[] = 0;
- }
- $LoginTime = $this->getAllLoginTime();
- foreach($LoginTime as $k => $v){
- $uid = $k;
- $userLevel = oo::commonOprModel('member')->getUserLevel($uid);
- $levelId = $userLevel['levelId'];
- $todayLoginTime[$levelId-1] += $v / 60;//登陆时长
- }
-
- $data['people'] = $levelRangeList;
- $data['logintime'] = $todayLoginTime;
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::spinsMoneyLevelStatistics('money','Add'));
- oo::commonOprRedis('Statistics')->delete(okeys::spinsMoneyLevelStatistics('money','Sub'));
- oo::commonOprRedis('Statistics')->delete(okeys::spinsMoneyLevelStatistics('spins','Add'));
- oo::commonOprRedis('Statistics')->delete(okeys::spinsMoneyLevelStatistics('spins','Sub'));
-
- $data = json_encode($data);
-
- $tb = otable::spinsMoneyLevelSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 每日偷打记录统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/16 12:05
- */
- public function todayAttackStealSta($timestamp){
- $date = date('Ymd', $timestamp);
- $data = array();
- $data['attack'] = oo::commonOprRedis('Statistics')->hgetall(okeys::attackStealSta('attack'));
- $data['steal'] = oo::commonOprRedis('Statistics')->hgetall(okeys::attackStealSta('steal'));
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::attackStealSta('attack'));
- oo::commonOprRedis('Statistics')->delete(okeys::attackStealSta('steal'));
-
- $data = json_encode($data);
-
- $tb = otable::attackStealSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 每日建筑记录统计
- * @param $type build升级 repair修复
- * @return string
- * Created by: hss
- * Created on: 2019/12/16 18:07
- */
- public function todayBuildSta($uid,$type = 'build',$money){
- return;
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::todayBuildSta($type),'total',1);//总建筑次数
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::todayBuildSta($type),'money',$money);//建筑价格
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::todayBuildSta($type."Users"),$uid,1);//用户建筑次数
- }
-
- /**
- * 每日建筑记录统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/16 18:07
- */
- public function saveTodayBuildSta(){
- $keys = array('build','repair');
- foreach($keys as $k => $v){
- oo::commonOprRedis('Statistics')->delete(okeys::todayBuildSta($v));
- oo::commonOprRedis('Statistics')->delete(okeys::todayBuildSta($v.'Users'));
- }
- return ;
- $date = date('Ymd');
- $data = array();
- foreach($keys as $k => $v){
- $todayBuildSta = oo::commonOprRedis('Statistics')->hgetall(okeys::todayBuildSta($v));
- $data[$v]['total'] = $todayBuildSta['total'];
- $data[$v]['money'] = $todayBuildSta['money'];
- $users = oo::commonOprRedis('Statistics')->hgetall(okeys::todayBuildSta($v.'Users'));
- //其他统计
-
- $data[$v]['userNumber'] = count($users);
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::todayBuildSta($v));
- oo::commonOprRedis('Statistics')->delete(okeys::todayBuildSta($v.'Users'));
- }
- $data = json_encode($data);
-
- $tb = otable::buildSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 新增用户付费情况 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/18 17:13
- */
- public function saveNewPayGoodsSta($timestamp){
- $date = date('Ymd', $timestamp);
- $newUser = $this->getAllPlayer($date,1);
- if(!empty($newUser)){
- //查出付费订单
- $slTable = otable::summarylist();
- $UidStr = empty($newUser) ? '' : " AND sl_uid IN (".implode(',', $newUser).") ";
- $starTime = strtotime($date);
-
- $sql = " SELECT sl_uid,sl_pusd,sl_status FROM {$slTable} AS sl WHERE sl.sl_pay_time > {$starTime} {$UidStr}";
- $list = oo::commonOprDB('payment')->getAll($sql, 1);
-
- $userArr = array();
- $money = 0;
- $orderNumber = 0;
- $orderNumberPay = 0;
- foreach($list as $k => $v){
- $orderNumber++;
- if($v['sl_status'] == '2'){
- $userArr[] = $v['sl_uid'];
- $money += $v['sl_pusd'];
- $orderNumberPay++;
- }
- }
-
- $userArr = array_unique($userArr);
-
- $data = array(
- 'orderNumber'=>$orderNumber,
- 'orderNumberPay'=>$orderNumberPay,
- 'userNumber'=>count($newUser),
- 'money'=>$money,
- 'userNumberPay'=>count($userArr),
- );
-
- $data = json_encode($data);
-
- $tb = otable::newPayGoodsSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- }
-
- /**
- * 付费用户排行榜 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/20 11:50
- */
- public function savePayUserRankSta($timestamp){
- $date = date('Ymd', $timestamp);
-
- $tb = otable::summarylist();
- //查询当天的,直接统计
- $sql = "SELECT sl_uid AS uid,sumMoney FROM (SELECT sum(sl_pusd) AS sumMoney,sl_uid FROM {$tb} WHERE sl_status = 2 AND sl_pusd > 0 GROUP BY sl_uid) AS a ORDER BY sumMoney DESC LIMIT 100";
- $list = oo::commonOprDB('payment')->getAll($sql, 1);
-
- $list = json_encode($list);
-
- $tb = otable::payUserRankSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$list}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 体力发放排行榜 付费 & 非付费 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/14 10:43
- */
- public function saveSpinsAddRank(){
- return ;
- $date = date('Ymd');
- //先计算再传输,因为排行榜只取前100人,如果用户量过大,传输到后台再计算的话,传输的数据量太大了
- $all_addSpins = oo::commonOprRedis('common')->hGetAll(okeys::todayDataRank('addSpins'));
-
- arsort($all_addSpins);
- //$all_addSpins = array_slice($all_addSpins,0,100);
-
- //付费的用户
- $payBlackList = oo::commonOprModel("config")->payWhiteList();
- $slTable = otable::summarylist();
- $blackUidStr = empty($payBlackList) ? '' : " AND sl_uid NOT IN (".implode(',', $payBlackList).") ";
- $sql = " SELECT DISTINCT sl_uid FROM {$slTable} AS sl WHERE sl.sl_status = 2 AND sl.sl_pusd > 0 {$blackUidStr}";
- $list = oo::commonOprDB('payment')->getAll($sql, 1);
- $pay_list = [];
- foreach($list as $k => $v){
- $pay_list[] = $v['sl_uid'];
- }
-
- $data['pay_rank'] = [];//付费排行
- $data['unpay_rank'] = [];//非付费排行
-
- foreach($all_addSpins as $k => $v){
- if(in_array($k,$pay_list)){
- $data['pay_rank'][] = [$k,$v];
- }else{
- $data['unpay_rank'][] = [$k,$v];
- }
- }
- $data['pay_rank'] = array_slice($data['pay_rank'],0,100);
- $data['unpay_rank'] = array_slice($data['unpay_rank'],0,100);
-
- $data = json_encode($data);
-
- $tb = otable::spinsAddRankSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 新手步骤统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2019/12/24 10:41
- */
- public function saveNoviceStepsSta(){
- $date = date('Ymd');
- $data = array();
- $data['statistics'] = oo::commonOprRedis('Statistics')->hgetall(okeys::noviceStepsSta());
- $data['statisticsFb'] = oo::commonOprRedis('Statistics')->hgetall(okeys::noviceStepsSta(1));
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::noviceStepsSta());
- oo::commonOprRedis('Statistics')->delete(okeys::noviceStepsSta(1));
-
- $data = json_encode($data);
-
- $tb = otable::noviceStepsSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 游客转FB数量统计
- * @return string
- * Created by: hss
- * Created on: 2020/1/11 18:55
- */
- public function visitorToFbSta($status,$uid){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::visitorToFbSta(),$status,1);
- }
-
- /**
- * 游客转FB数量统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/1/13 10:43
- */
- public function saveVisitorToFbSta($timestamp){
- $date = date('Ymd', $timestamp);
- $data = array();
- $data['statistics'] = oo::commonOprRedis('Statistics')->hgetall(okeys::visitorToFbSta());
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::visitorToFbSta());
-
- $data = json_encode($data);
- $tb = otable::saveVisitorToFbSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 赠送情况统计
- * @param $type money金币 spins体力 $t Receive收取 Send发送
- * Created by: hss
- * Created on: 2020/1/14 11:43
- */
- static public function giveSta($type = 'money',$t = 'Send',$uid,$number){
- return ;
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::giveSta($type,$t),$uid,$number);
- }
-
- /**
- * 一键赠送 一键领取 人数
- * @param $type money金币 spins体力 $t Receive收取 Send发送
- * Created by: hss
- * Created on: 2020/1/14 11:43
- */
- static public function givesSta($type = 'money',$t = 'Send',$uid){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::givesSta($type,$t),$uid,1);
- }
-
- /**
- * 赠送情况统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/1/14 15:48
- */
- public function saveGivesSta(){
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('money','Send'));
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('spins','Send'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('money','Send'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('spins','Send'));
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('money','Receive'));
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('spins','Receive'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('money','Receive'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('spins','Receive'));
- return;
- $date = date('Ymd');
- $data = array();
-
- $arr = ['Send','Receive'];
- foreach($arr as $a_k => $a_v){
-
- }
- $moneySend = oo::commonOprRedis('Statistics')->hgetall(okeys::giveSta('money','Send'));//赠送统计 金币
- $spinsSend = oo::commonOprRedis('Statistics')->hgetall(okeys::giveSta('spins','Send'));//赠送统计 体力
- $moneySends = oo::commonOprRedis('Statistics')->hgetall(okeys::givesSta('money','Send'));//一键赠送统计 金币
- $spinsSends = oo::commonOprRedis('Statistics')->hgetall(okeys::givesSta('spins','Send'));//一键赠送统计 体力
-
- $moneyReceive = oo::commonOprRedis('Statistics')->hgetall(okeys::giveSta('money','Receive'));//领取统计 金币
- $spinsReceive = oo::commonOprRedis('Statistics')->hgetall(okeys::giveSta('spins','Receive'));//领取统计 体力
- $moneyReceives = oo::commonOprRedis('Statistics')->hgetall(okeys::givesSta('money','Receive'));//一键领取统计 金币
- $spinsReceives = oo::commonOprRedis('Statistics')->hgetall(okeys::givesSta('spins','Receive'));//一键领取统计 体力
-
- //赠送
- $data['send']['moneyUserNumber'] = 0;
- $data['send']['moneyNumber'] = 0;
- foreach($moneySend as $k => $v){
- $data['send']['moneyUserNumber']++;
- $data['send']['moneyNumber'] += $v;
- }
-
- $data['send']['spinsUserNumber'] = 0;
- $data['send']['spinsNumber'] = 0;
- foreach($spinsSend as $k => $v){
- $data['send']['spinsUserNumber']++;
- $data['send']['spinsNumber'] += $v;
- }
-
- $data['send']['moneyCount'] = 0;
- foreach($moneySends as $k => $v){
- $data['send']['moneyCount']++;
- }
-
- $data['send']['spinsCount'] = 0;
- foreach($spinsSends as $k => $v){
- $data['send']['spinsCount']++;
- }
-
- //领取
- $data['receive']['moneyUserNumber'] = 0;
- $data['receive']['moneyNumber'] = 0;
- foreach($moneyReceive as $k => $v){
- $data['receive']['moneyUserNumber']++;
- $data['receive']['moneyNumber'] += $v;
- }
-
- $data['receive']['spinsUserNumber'] = 0;
- $data['receive']['spinsNumber'] = 0;
- foreach($spinsReceive as $k => $v){
- $data['receive']['spinsUserNumber']++;
- $data['receive']['spinsNumber'] += $v;
- }
-
- $data['receive']['moneyCount'] = 0;
- foreach($moneyReceives as $k => $v){
- $data['receive']['moneyCount']++;
- }
-
- $data['receive']['spinsCount'] = 0;
- foreach($spinsReceives as $k => $v){
- $data['receive']['spinsCount']++;
- }
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('money','Send'));
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('spins','Send'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('money','Send'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('spins','Send'));
-
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('money','Receive'));
- oo::commonOprRedis('Statistics')->delete(okeys::giveSta('spins','Receive'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('money','Receive'));
- oo::commonOprRedis('Statistics')->delete(okeys::givesSta('spins','Receive'));
-
- $data = json_encode($data);
-
- $tb = otable::saveGivesSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 赠送卡片排行榜
- * @param $ciid卡片ID
- * Created by: hss
- * Created on: 2020/1/15 10:46
- */
- static public function giveCardSta($ciid){
- //全部赠送卡片排行榜 可以分两种 1用每天的累加 2或者直接在redis统计 每次只清空当天的
- //当天赠送数量
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::giveCardSta('today'),$ciid,1);
- //全部赠送数量
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::giveCardSta('all'),$ciid,1);
- }
-
- /**
- * 赠送卡片排行榜 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/1/15 11:52
- */
- public function saveGiveCardSta(){
- $date = date('Ymd');
- $data = array();
- $data['statistics'] = oo::commonOprRedis('Statistics')->hgetall(okeys::giveCardSta('today'));
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::giveCardSta('today'));
-
- $data = json_encode($data);
- $tb = otable::saveGiveCardSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 当天人均通关数(当天通关数 / 当天登陆用户数) 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/1/15 18:33
- */
- public function saveTodayUpLvelSta(){
- $date = date('Ymd');
- //通过人数 以及 关卡数
- $ret = oo::commonOprRedis('common')->hGetAll(okeys::todayDataRank('level'));
- $data = array();
- $total = 0;
- $count = 0;
- foreach($ret as $k => $v){
- $total += $v;
- $count++;
- }
- $data['total'] = $total;
- $data['count'] = $count;
-
- $data = json_encode($data);
-
- $tb = otable::saveTodayUpLvelSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 金矿领取率
- * @return string
- * Created by: hss
- * Created on: 2020/1/17 10:51
- */
- public function miningReceiveSta($uid,$number){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::miningReceiveSta(),$uid,$number);
- }
-
- /**
- * 金矿领取率 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/1/17 10:51
- */
- public function saveMiningReceiveSta(){
- $date = date('Ymd');
- //通过人数 以及 关卡数
- $ret = oo::commonOprRedis('Statistics')->hLen(okeys::miningReceiveSta());
- $data = array();
- $data['count'] = intval($ret);
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::miningReceiveSta());
-
- $data = json_encode($data);
-
- $tb = otable::saveMiningReceiveSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 矿工进度 保存进数据库
- * @return string
- * Created by: hss
- * Created on: 2020/2/7 12:15
- */
- public function saveMinerSpeedSta(){
- $date = date('Ymd');
- $day = date('Ymd', strtotime("-1 day"));
- $days3age = date('Ymd', strtotime($day.'-3 days'));
- $days8age = date('Ymd', strtotime($day.'-7 days'));
- $last8daysPlayer = oo::commonOprModel('statistics')->getAllPlayer($days3age, 1, []);//新增玩家 3天
- //方案一 读数据全部人的统计平均值 效率低
- $miningInfo = otable::miningInfo();
- $uidStr = implode(",",$last8daysPlayer);
- if(!empty($uidStr)){
- $sql = "SELECT * FROM {$miningInfo} WHERE uid in (".$uidStr.")";
- $ret = oo::commonOprDb('common')->getAll($sql, MYSQLI_ASSOC);
- $molecule = 0;
- $denominator = 0;
- foreach ($ret as $k => $v){
- $uid = $v['uid'];
- $speed = json_decode($v['islandLevel'],true);
- foreach($speed as $speed_k => $speed_v){
- $denominator += 5;
- $molecule += $speed_v;
- }
- }
- //return json_encode([$molecule/$denominator]);
- //保存进数据库
- $data['speed'] = $molecule/$denominator;
- $data = json_encode($data);
-
- $tb = otable::saveMinerSpeedSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- //方案二 添加字段 统计 效率高些
-
-
- }
-
- /**
- * 获取RichestKing统计
- * @return string
- * Created by: hss
- * Created on: 2020/2/14 18:52
- */
- public function getRichestKingSta($uid){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::getRichestKingSta(),$uid,1);
- }
-
- /**
- * 获取RichestKing统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/2/17 13:06
- */
- public function saveGetRichestKingSta(){
- $date = date('Ymd');
- //通过人数 以及 关卡数
- $ret = oo::commonOprRedis('Statistics')->hgetall(okeys::getRichestKingSta());
- $data = array();
- $total = 0;
- foreach($ret as $k => $v){
- $total += $v;
- }
-
- arsort($ret);
-
- $ret = array_slice($ret,0,50,true);
-
- $data['total'] = $total;
- $data['data'] = $ret;
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::getRichestKingSta());
-
- $data = json_encode($data);
-
- $tb = otable::saveGetRichestKingSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 签到领取率统计
- * @return string
- * Created by: hss
- * Created on: 2020/2/25 10:29
- */
- public function signInSta($uid,$type){
- //all 全部
- //1001 体力月卡1
- //1002 体力月卡2
- // oo::commonOprRedis('Statistics')->hIncrBy(okeys::signInSta(),$type,1);
- }
-
- /**
- * 签到领取率统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/2/25 10:30
- */
- public function saveSignInSta(){
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::signInSta());
- return;
- $date = date('Ymd');
- //通过人数 以及 关卡数
- $ret = oo::commonOprRedis('Statistics')->hGetAll(okeys::signInSta());
- $data = array();
- $data['all'] = intval($ret['all']);
- $data['1001'] = intval($ret['1001']);
- $data['1002'] = intval($ret['1002']);
-
- $type = 2;
- $ret = oo::commonOprModel('statistics')->getAllPlayer($date, $type, []);
- if(!empty($ret)){
- $ret = array_filter($ret);//去掉空元素
- $data['all_login'] = is_array($ret) ? count($ret) : 0;
- $data['login_1001'] = 0;
- $data['login_1002'] = 0;
- foreach($ret as $k => $uid){
- if(!empty(oo::commonOprModel('payment')->getSpinMonthly($uid,1001))){
- $data['login_1001']++;
- }
- if(!empty(oo::commonOprModel('payment')->getSpinMonthly($uid,1002))){
- $data['login_1002']++;
- }
- }
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::signInSta());
-
- $data = json_encode($data);
-
- $tb = otable::saveSignInSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- }
-
- /**
- * 系统补偿领取率
- * @return string
- * Created by: hss
- * Created on: 2020/2/27 22:24
- */
- public function sysCompensateSta($uid){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::sysCompensateSta(),$uid,1);
- }
-
- /**
- * 更新公告领取率
- * @return string
- * Created by: hss
- * Created on: 2020/3/3 10:18
- */
- public function updateVersionSta($uid){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::updateVersionSta(),$uid,1);
- }
-
- /**
- * 奖励中心统计 保存进数据库
- * @return string
- * Created by: hss
- * Created on: 2020/3/3 10:48
- */
- public function saveRewardCenterSta($time = null){
- $time = $time ?? time();
-
- $slTable = otable::gh_gameserver(1);
- $sql = " SELECT count(mid) as total FROM {$slTable}";
- $list = oo::commonOprDB('payment')->getOne($sql, 1);
- $totalCount = $list['total'];//总玩家数
- //更新公告领取率
- //取出所有更新版本
- $tb = otable::gameupdate();
- $sql = " SELECT * FROM {$tb} ORDER BY id ASC";
- $versionRet = oo::commonOprDB('common')->getAll($sql, 1);
- $updateVersionStatb = otable::updateVersionSta();
- foreach($versionRet as $k => $v){
- $version = $v['gu_version'];
- $sql = "SELECT * FROM {$updateVersionStatb} WHERE `version` = '{$version}'";
- $ret = oo::commonOprDB('statistics')->getOne($sql, 1);
- if(empty($ret)){
- $sql = "INSERT INTO {$updateVersionStatb} (version,number,total,add_time) VALUES('{$version}', 0,'{$totalCount}','{$time}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- }
-
- $newVersion = end($versionRet);
- $newVersion = $newVersion['gu_version'];
-
- //更新最新版本领取率
- $ret = oo::commonOprRedis('Statistics')->hLen(okeys::updateVersionSta());
- $count = intval($ret);//领取人数
- $sql = "UPDATE {$updateVersionStatb} SET number = '{$count}' WHERE version = '{$newVersion}'";
- oo::commonOprDb('statistics')->query($sql);
-
- //系统补偿领取率
- //取出所有系统补偿
- $tb = otable::SysCompenConfig();
- $sql = "SELECT * FROM {$tb} WHERE 1";
- $sysCompensateSta = otable::sysCompensateSta();
- $SysCompenConfig = oo::commonOprDb('config')->getAll($sql,MYSQLI_ASSOC);
- foreach($SysCompenConfig as $k => $v){
- $compen_id = $v['id'];
- $sql = "SELECT * FROM {$sysCompensateSta} WHERE `compen_id` = '{$compen_id}'";
- $ret = oo::commonOprDB('statistics')->getOne($sql, 1);
- if(empty($ret)){
- $sql = "INSERT INTO {$sysCompensateSta} (compen_id,number,total,add_time) VALUES('{$compen_id}', 0,'{$totalCount}','{$time}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- }
-
- $newCompen = end($SysCompenConfig);
- $newCompenId = $newCompen['id'];
-
- //更新最新版本领取率
- $ret = oo::commonOprRedis('Statistics')->hLen(okeys::sysCompensateSta());
- $count = intval($ret);//领取人数
- $sql = "UPDATE {$sysCompensateSta} SET number = '{$count}' WHERE compen_id = '{$newCompenId}'";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 聊天的人均金币体力领取次数统计
- * @return string
- * Created by: hss
- * Created on: 2020/3/3 10:18
- */
- public function chatGiftSta($type = 'money'){
- //$type spins money
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::chatGiftSta(),$type,1);
- }
-
- /**
- * 聊天的人均金币体力领取次数统计 保存进数据库
- * @return string
- * Created by: hss
- * Created on: 2020/3/3 10:18
- */
- public function saveChatGiftSta(){
- $date = date('Ymd');
- //当天登陆用户数
- $type = 2;
- $ret = oo::commonOprModel('statistics')->getAllPlayer($date, $type, []);
- $data = array();
- $data['all_login'] = count($ret);
- $data['money'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::chatGiftSta(),'money'));
- $data['spins'] = intval(oo::commonOprRedis('Statistics')->hget(okeys::chatGiftSta(),'spins'));
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::chatGiftSta());
-
- $data = json_encode($data);
-
- $tb = otable::chatGiftSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 转盘参与率
- * @return string
- * Created by: hss
- * Created on: 2020/3/5 10:49
- */
- public function turnTableInSta($uid){
- return ;
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::turnTableInSta(),$uid,1);
- }
-
- /**
- * 转盘参与率 & 转盘得奖分布 保存进数据库
- * @return string
- * Created by: hss
- * Created on: 2020/3/3 10:18
- */
- public function saveTurnTableInSta(){
- oo::commonOprRedis('Statistics')->delete(okeys::turnTableInSta());
- $level = range(1,60);
- $type = [2,3];
- foreach($type as $t_k => $t_v){
- foreach($level as $l_k => $l_v){
- oo::commonOprRedis('Statistics')->delete(okeys::turnTablePrizeSta($t_v,$l_v));
- }
- }
- return ;
- $date = date('Ymd');
- //当天登陆用户数
- $type = 2;
- $ret = oo::commonOprModel('statistics')->getAllPlayer($date, $type, []);
- $data = array();
- $data['all_login'] = count($ret);
- $data['join'] = intval(oo::commonOprRedis('Statistics')->hLen(okeys::turnTableInSta()));
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::turnTableInSta());
-
- //转盘得奖分布
- $level = range(1,60);
- $type = [2,3];
- $Prize = [];
- foreach($type as $t_k => $t_v){
- $levelRet = [];
- foreach($level as $l_k => $l_v){
- $ret = oo::commonOprRedis('Statistics')->hGetAll(okeys::turnTablePrizeSta($t_v,$l_v));
- for($i = 0; $i < 8; $i++){
- $levelRet[$l_v][$i] = intval($ret[$i]);
- }
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::turnTablePrizeSta($t_v,$l_v));
- }
- $Prize[$t_v] = $levelRet;
- }
- $data['turnTablePrizeSta'] = $Prize;
-
- $data = json_encode($data);
-
- $tb = otable::turnTableSta();
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 转盘得奖分布
- * @return string
- * @param int $type 类型 2金币转盘 3金币&体力转盘
- * @param int $levelId 等级
- * @param int $rid 中奖ID
- * Created by: hss
- * Created on: 2020/3/6 10:42
- */
- public function turnTablePrizeSta($type,$levelId,$rid){
- return ;
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::turnTablePrizeSta($type,$levelId),$rid,1);
- }
-
- /**
- * 打偷统计
- * @param $type #attack 打 steal 偷 $baseNumber #基础获得 $multNumber #加倍获得
- * @return array
- * Created by: Hss
- * Created on: 2019/12/16 12:00
- * Description:
- */
- public function attackStealSta($type,$baseNumber,$multNumber,$uid = 0){
- return ;
- $systemNumber = $multNumber - $baseNumber;//纯系统发放
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::attackStealSta($type),'total',1);//打偷次数
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::attackStealSta($type),'baseNumber',$baseNumber);//打偷基础获得
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::attackStealSta($type),'multNumber',$multNumber);//打偷加倍获得
- if($systemNumber > 0){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::attackStealSta($type),'systemNumber',$systemNumber);//系统纯发放
- }
-
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::attackStealRankSta($type),$uid,1);//打偷排行榜
- }
-
- /**
- * 个人老虎机摇奖次数记录 & 老虎机类型次数统计 (wsc-6.10-废弃)
- * @return string
- * @param int $uid 摇奖用户 int $type 类型
- * Created by: hss
- * Created on: 2020/3/24 15:11
- */
- public function shakeSta($uid,$type = ""){
- return ;
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::shakeSta(),$uid,1);
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::slotSta(),$type,1);
- }
-
- /**
- * 打偷排行榜统计 & 摇奖次数排行榜
- * @return string
- * Created by: hss
- * Created on: 2020/3/3 10:18
- */
- public function attackStealRankSta(){
- oo::commonOprRedis('Statistics')->delete(okeys::shakeSta());
- oo::commonOprRedis('Statistics')->delete(okeys::attackStealRankSta('steal'));
- oo::commonOprRedis('Statistics')->delete(okeys::attackStealRankSta('attack'));
- return;
- $date = date('Ymd');
- $data = array();
- $ret = oo::commonOprRedis('Statistics')->hGetAll(okeys::shakeSta());
- //摇奖次数排行榜
- $data['rank'] = array_slice($ret,0,100,true);
- $data = json_encode($data);
- $tb = otable::staData();
- $type = 'shakeRankSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- //打偷排行榜
- $stealRet = oo::commonOprRedis('Statistics')->hGetAll(okeys::attackStealRankSta('steal'));
- $attackRet = oo::commonOprRedis('Statistics')->hGetAll(okeys::attackStealRankSta('attack'));
- $stealRank = $attackRank = $data = array();
- foreach($ret as $uid => $number){
- if(empty($number)){
- $stealRank[$uid] = 0;
- }else{
- $stealRank[$uid] = $stealRet[$uid] / $number * 100;//百分比
- }
- if(empty($number)){
- $attackRank[$uid] = 0;
- }else{
- $attackRank[$uid] = $attackRet[$uid] / $number * 100;//百分比
- }
- }
- arsort($stealRank);
- arsort($attackRank);
- arsort($stealRet);
- arsort($attackRet);
- $data['stealRank'] = array_slice($stealRank,0,100,true);//偷概率排行榜
- $data['attackRank'] = array_slice($attackRank,0,100,true);//打概率排行榜
- $data['stealRank2'] = array_slice($stealRet,0,100,true);//偷次数排行榜
- $data['attackRank2'] = array_slice($attackRet,0,100,true);//打次数排行榜
- //次数排行的概率 偷
- $chance = [];
- foreach($data['stealRank2'] as $uid => $v){
- if(empty($ret[$uid])){
- $chance[$uid] = 0;
- }else{
- $chance[$uid] = $v / $ret[$uid] * 100;
- }
- }
- $data['stealRankChance'] = $chance;
- //次数排行的概率 打
- $chance = [];
- foreach($data['attackRank2'] as $uid => $v){
- if(empty($ret[$uid])){
- $chance[$uid] = 0;
- }else{
- $chance[$uid] = $v / $ret[$uid] * 100;
- }
- }
- $data['attackRankChance'] = $chance;
- $data = json_encode($data);
- $tb = otable::staData();
- $type = 'attackStealRankSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::shakeSta());
- oo::commonOprRedis('Statistics')->delete(okeys::attackStealRankSta('steal'));
- oo::commonOprRedis('Statistics')->delete(okeys::attackStealRankSta('attack'));
- }
-
- /**
- * 每日卡片发放产出统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/3/30 15:33
- */
- public function cardGrantSta(){
- $date = date('Ymd');
- $tb = otable::cardinfo_config();
- $sql = "SELECT * FROM {$tb} WHERE 1";
- $temp = oo::commonOprDb('common')->getAll($sql,1);
- foreach ($temp as $key=>$row){
- $t['ci_name'] = $row['ci_name'];
- $t['owner'] = 0;
- $t['num'] = 0;
- $card[$row['ciid']] = $t;
- }
- $tb = otable::usercard_config(1);
- $sql = "SELECT ciid FROM {$tb} WHERE ciid <> '{}'";
- $temp = oo::commonOprDb('common')->getAll($sql,1);
- foreach ($temp as $row){
- $ciid = json_decode($row['ciid'],true);
- foreach ($ciid as $c=>$r){
- $card[$c]['owner'] += 1;
- $card[$c]['num'] += $r;
- }
- }
- $data['card'] = $card;
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'cardGrantSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 卡片来源统计
- * @return string
- * @param $type 1木质宝箱 2黄金宝箱 3 魔法宝箱 4至尊宝箱 5 挖矿【挖到金币为0才有机会触发】,6任务奖励
- * Created by: hss
- * Created on: 2020/4/9 10:40
- */
- public function cardSourceSta($type,$num = 1){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::cardSourceSta(),$type,$num);
- }
-
- /**
- * 卡片来源统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/3/30 15:33
- */
- public function saveCardSourceSta($timestamp){
- $date = date('Ymd', $timestamp);
- $card = oo::commonOprRedis('Statistics')->hGetAll(okeys::cardSourceSta());
- $data['card'] = $card;
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'cardSourceSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::cardSourceSta());
- }
-
- /**
- * 每日VIP开通人数统计
- * @return string
- * Created by: hss
- * Created on: 2020/4/22 10:50
- */
- public function saveTodayVipOpenSta($timestamp){
- $tb = otable::VipLvConfig();
- $sql = "SELECT * FROM {$tb} WHERE 1";
- $levelConfig = oo::commonOprDb('config')->getAll($sql,MYSQLI_ASSOC);
- $userinfoTb = otable::userinfo(1);
-
- $outOpen = $outNoOpen = [];
-
- //开通人数
- $sql = "SELECT vipLv,count(*) AS count FROM {$userinfoTb} WHERE vipLv > 0 AND vip = 1 GROUP BY vipLv";
- $ret = oo::commonOprDb('userinfo')->getAll($sql, MYSQLI_ASSOC);
- $open = [];
- foreach($ret as $k => $v){
- $open[$v['vipLv']] = $v['count'];
- }
- //未开通人数
- $sql = "SELECT vipLv,count(*) AS count FROM {$userinfoTb} WHERE vipLv > 0 AND vip = 0 GROUP BY vipLv";
- $ret2 = oo::commonOprDb('userinfo')->getAll($sql, MYSQLI_ASSOC);
- $noOpen = [];
- foreach($ret2 as $k => $v){
- $noOpen[$v['vipLv']] = $v['count'];
- }
-
-
- foreach ($levelConfig as $key=>$row){
- $vipLv = $row['lv'];
- $outOpen[$vipLv] = isset($open[$vipLv])?$open[$vipLv]:0;
- $outNoOpen[$vipLv] = isset($noOpen[$vipLv])?$noOpen[$vipLv]:0;
- }
-
- $date = date('Ymd', $timestamp);
- $data['open'] = $outOpen;
- $data['no_open'] = $outNoOpen;
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'todayVipOpenSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 在线玩家数量 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/4/26 16:32
- */
- public function saveOnlinePlaying($timestamp){
- $date = date('Ymd', $timestamp);
- $ret = oo::commonOprRedis('statistics')->hGetAll(okeys::onlineplaying(1));
- $data['1'] = $ret;
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'onlinePlaying';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- oo::commonOprRedis('statistics')->delete(okeys::onlineplaying(1));//统计在线在玩
- }
-
- /**
- * 登录监控 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/4/29 10:39
- */
- public function saveLoginMonitorSta($timestamp){
- $date = date('Ymd', $timestamp);
-
- $sidList = [1,2];
- foreach($sidList as $sid){
- $ret = oo::commonOprRedis('common')->hGetAll(okeys::LoginMonitor($sid));
- $data['sid'.$sid] = $ret;
- }
-
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'loginMonitorSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 升级速率排行榜(日)
- * @return string
- * Created by: hss
- * Created on: 2020/4/30 12:18
- */
- public function saveLevelRateRankDay(){
- return;
- $type = 2;
- $date = date('Ymd', $timestamp);
- $day = date('Ymd', strtotime("-1 day", $timestamp));
- $ret = oo::commonOprModel('statistics')->getAllPlayer($date, $type, []);//前天新增用户
- if(!empty($ret)){
- $ret = array_filter($ret);//去掉空元素
- $uidStr = implode(",",$ret);
- }
-
- if(!empty($uidStr)){
- //换城数据库保存的
- $ghtable = otable::statistics(1);
- //$sql = "SELECT loginTime FROM {$ghtable} WHERE uid in (".$uidStr.") AND loginTime > 0";//过滤登陆时间为0的用户
- $sql = "SELECT uid,loginTime FROM {$ghtable} WHERE uid in (".$uidStr.")";
- $ghgamesRet = oo::commonOprDb('ghgames')->getAll($sql,1);
-
- $data = [];
- foreach($ghgamesRet as $ret_k => $ret_v){
-
- $uid = $ret_v['uid'];
-
- $loginTime = intval($ret_v['loginTime']);
-
- $userLevel = oo::commonOprModel('member')->getUserLevel($uid);
- $levelId = $userLevel['levelId'];
-
- if($levelId <= 10){
- continue;
- }
- if($loginTime <= 0){
- continue;
- }
-
- $data[$uid] = $levelId / ($loginTime / 3600);
- }
-
- arsort($data);
- $out['levelRateRank'] = array_slice($data,0,50,true);
-
- $out = json_encode($out,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'levelRateRankDay';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$out}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- }
-
- /**
- * 付费关卡分析(首充率、首次付费率、付费率、累积付费钱数、付费人数曲线、当天钱数人数曲线)
- * 方法一:接口统计,数据精确,但是需要在支付接口加入统计代码,统计影响支付流程性能
- * 方法二:从每天的订单中统计,数据不精确,因为当天用户可能升级,那么付费关卡就不准确
- * @return string
- * Created by: hss
- * Created on: 2020/5/11 11:21
- */
- public function saveLevelPaySta($param){
- /*
- //获取用户关卡
- $uid = oo::functions()->uint($param['uid']);
- $userLevel = oo::commonOprModel('member')->getUserLevel($uid);
- $levelId = $userLevel['levelId'];
-
- //关卡付费人数+1
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::levelPaySta('payNum'),$levelId,1);
- */
-
- //获取当天支付成功的订单
- $stime = strtotime(date('Y-m-d 00:00:01', time()));
- $etime = strtotime(date('Y-m-d 23:59:59', time()));
- $sidList = [999];
- $isAllSid = in_array(999, $sidList);
- $sidSqlStr = '';
- if(!$isAllSid) {
- $sidSqlStr = " AND sl_sid IN ( ". implode(',', $sidList)." ) ";
- }
- $blackUidArr = $this->_payBlackList['uid'];
- $blackUidSql = '';
- if(!empty($blackUidArr)) {
- $blackUidStr = implode(',', $blackUidArr);
- $blackUidSql = " AND sl_uid NOT IN ({$blackUidStr}) ";
- }
- $where = $sidSqlStr.$blackUidSql;
-
- $slTable = otable::summarylist();
- $goodsTable = otable::goodsCrazy();
- //查询时间范围内的成功订单
- $sql = " SELECT sl_pusd, sl_uid, sl_pay_time, gchannel, sl_gid
- FROM {$slTable} AS sl LEFT JOIN {$goodsTable} AS goods ON sl.sl_gid = goods.gid
- WHERE sl_sid != -1 AND sl_status = 2 AND sl_pay_time >= {$stime} AND sl_pay_time <= {$etime} $where ";
- $list = oo::commonOprDb('common')->getAll($sql, MYSQLI_ASSOC);
-
- $totalMoney = [];//每个关卡总付费
- $totalRecord = [];//每个关卡付费订单数
- $firstNum = [];//每个关卡首充次数
- $firstPayNum = [];//每个关卡首次付费
-
- $uids = [];
- $levels = [];
- $payLevel = [];//每个关卡付费人数
- //成功的订单
- foreach ($list as $_v) {
- $uid = $_v['sl_uid'];
- //获取用户关卡
- $userLevel = oo::commonOprModel('member')->getUserLevel($uid);
- $levelId = $userLevel['levelId'];
- $totalMoney[$levelId] += round($_v['sl_pusd'], 2);
- $totalRecord[$levelId] += 1 ;
- $levels[$uid] = $levelId;
-
- if($_v['sl_gid'] == 601){
- $firstNum[$levelId] ?? $firstNum[$levelId] = 0;
- $firstNum[$levelId]++;
- }
-
- //处理当天重复下单的用户统计
- if(!in_array($_v['sl_uid'], $uids)) {
- array_push($uids, $_v['sl_uid']);
- }
- }
-
- foreach($uids as $uid){
- $firstPayNum[$levelId] ?? $firstPayNum[$levelId] = 0;
- //首次付费
- $time = strtotime(date('Y-m-d 0:0:0', $stime));
- $checkBought = $this->checkPayFirst($uid, $time);
- if(!isset($firstPayNum[$levels[$uid]])){
- $firstPayNum[$levels[$uid]] = 0;
- }
- $checkBought && $firstPayNum[$levels[$uid]]++;
- $payLevel[$levels[$uid]] ?? $payLevel[$levels[$uid]] = 0;
- $payLevel[$levels[$uid]]++;
- }
-
- $data = [];
- $data['totalMoney'] = $totalMoney;
- $data['totalRecord'] = $totalRecord;
- $data['firstNum'] = $firstNum;
- $data['firstPayNum'] = $firstPayNum;
- $data['payLevel'] = $payLevel;
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $date = date("Ymd");
- $tb = otable::staData();
- $type = 'levelPaySta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
-
- /**
- * 支付上报 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/6/11 11:17
- */
- public function savePayReportSta(){
- $date = date('Ymd', strtotime("-1 day"));
-
- $sidList = [1,2];
- //总次数
- foreach($sidList as $sid){
- $ret = oo::commonOprRedis('Statistics')->hGetAll(okeys::payReport($sid));
- $data['sid'][$sid] = $ret;
- $data["total"][$sid] = array_sum($ret);
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::payReport($sid));
- }
-
- $event = [10009,10010,10011];
- //支付成功、支付取消、支付失败
- foreach($event as $event_id){
- foreach($sidList as $sid){
- $ret = oo::commonOprRedis('Statistics')->hGetAll(okeys::payReport($sid,$event_id));
- $data[$event_id]['sid'][$sid] = $ret;
- $data[$event_id]["total"][$sid] = array_sum($ret);
-
- //统计后重置
- oo::commonOprRedis('Statistics')->delete(okeys::payReport($sid,$event_id));
- }
- }
-
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'payReport';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
-
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10009));
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10010));
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10011));
- }
-
- /**
- * 新手当天卡片发放数量统计 保存到数据库
- * @return string
- * Created by: hss
- * Created on: 2020/6/12 15:50
- */
- public function saveNewUserCardSta(){
- $date = date('Ymd', strtotime("-1 day"));
- $newUser = oo::commonOprModel('statistics')->getAllPlayer($date,1);
-
- $data = [];
- if(!empty($newUser)){
- $newUserStr = implode(",",$newUser);
-
- $tb = otable::cardinfo_config();
- $sql = "SELECT * FROM {$tb} WHERE 1";
- $temp = oo::commonOprDb('common')->getAll($sql,1);
- foreach ($temp as $key=>$row){
- $t['ci_name'] = $row['ci_name'];
- $t['owner'] = 0;
- $t['num'] = 0;
- $card[$row['ciid']] = $t;
- }
-
- $tb = otable::usercard_config(1);
- $sql = "SELECT ciid FROM {$tb} WHERE uid in({$newUserStr})";
- $temp = oo::commonOprDb('common')->getAll($sql,1);
- foreach ($temp as $row){
- $ciid = json_decode($row['ciid'],true);
- foreach ($ciid as $c=>$r){
- $card[$c]['owner'] += 1;
- $card[$c]['num'] += $r;
- }
- }
- $data['card'] = $card;
- }
-
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'newUserCardSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- /**
- * adJust 統計
- * Created by: Owen
- * Created on: 2020/6/17 16:10
- */
- public function adJustSta(){
- foreach ([1=>'android',2=>'ios'] as $key=>$row){
- $sqlArr = [];
- $list = oo::commonOprRedis('Statistics')->hGetAll(okeys::Report(10012,$key));
- if(empty($list)){
- continue;
- }
- //$sql = "INSERT IGNORE INTO {$tb} (uid,{$row}) VALUES ";
- $sql = "INSERT IGNORE INTO %s (uid,{$row}) VALUES ";
- foreach ($list as $uid=>$data){
- $tb = otable::AdJustSta($uid);
- if(!isset($sqlArr[$tb])){
- $sqlArr[$tb] = sprintf($sql, $tb);
- }
- $sqlArr[$tb] .= "('{$uid}','{$data}'),";
- }
- //批量插入多表
- foreach($sqlArr as $v){
- $v = trim($v,",");
- oo::commonOprDb('common')->query($v);
- }
- oo::commonOprRedis('Statistics')->delete(okeys::Report(10012,$key));
- }
- }
- /**
- * 活动进度支付统计
- * Created by: Hss
- * Created on: 2020/8/25 17:43
- */
- public function activityProgresPaySta(){
- $date = date('Ymd', strtotime("-1 day"));
- $aids = oo::commonOprRedis('activity')->hGetAll(okeys::activityProgresPayAidSta());
- foreach($aids as $aid => $aid2){
- foreach([0,1,2,3,4,5] as $rid){
- if(empty($rid)){
- $rid = '';
- }
- if(empty($aid)){
- $aidTemp = '';
- }else{
- $aidTemp = '_'.$aid;
- }
- $data['data'.$rid.$aidTemp] = oo::commonOprRedis('activity')->hGetAll(okeys::activityProgresPaySta($rid,$aid));
- oo::commonOprRedis('activity')->delete(okeys::activityProgresPaySta($rid,$aid));
- }
- }
- $data['aids'] = $aids;
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'activityProgresPaySta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- oo::commonOprRedis('activity')->delete(okeys::activityProgresPayAidSta());
- }
- /**
- * 宝藏探索产出消耗统计
- * @param $type 道具ID
- * Created by: hss
- * Created on: 2020/9/2 16:01
- */
- public function treasureRewardSta($id,$taskId,$num = 1){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::treasureRewardSta($taskId),$id,$num);
- }
- /**
- * 宝藏探索产出消耗统计 保存到数据库
- * Created by: Hss
- * Created on: 2020/9/2 16:01
- */
- public function saveTreasureRewardSta(){
- $date = date('Ymd', strtotime("-1 day"));
- for($i = 1; $i <= 10; $i++){
- $data['list'][$i] = oo::commonOprRedis('Statistics')->hGetAll(okeys::treasureRewardSta($i));
- oo::commonOprRedis('Statistics')->delete(okeys::treasureRewardSta($i));
- }
- $data = json_encode($data,JSON_NUMERIC_CHECK);
- $tb = otable::staData();
- $type = 'treasureRewardSta';
- $sql = "INSERT INTO {$tb} VALUES('{$date}', '{$type}' ,'{$data}')";
- oo::commonOprDb('statistics')->query($sql);
- }
- /**
- * 小丑卡统计
- * @param $id 来源ID
- * Created by: Hss
- * Created on: 2020/10/15 15:58
- */
- public function jokerCardSta($id,$number = 1,$uid = 0,$reason = "",$rid=3004){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::JokerCardSta(),$id,$number);
- //获得小丑卡流水
- oo::commonOprModel('currency')->log($uid,"card","+",1,1,$rid,"来源:".$reason);
- }
- /**
- * 商城促销统计
- * @param $uid $price价格
- * Created by: Hss
- * Created on: 2020/11/2 10:53
- */
- public function shopDiscountSta($uid,$price = 0){
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::shopDiscountSta(),$uid,1);
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::shopDiscountSta('price'),$uid,$price);
- }
- /**
- * 通行證統計
- * @return bool
- * Created by: Owen
- * Created on: 2020/11/7 10:49
- */
- public function trafficPermitSta($timestamp){
- $aidArr = oo::commonOprModel('activitynew')->getAllOnlineActivityByType('traffic_permit');
- if(empty($aidArr)){
- return false;
- }
- $aid = 0;
- foreach ($aidArr as $row){
- $aid = $row;
- break;
- }
- $date = date("Ymd", $timestamp);
- $buyTrafficPermitNum = oo::commonOprRedis('Statistics')->hLen(okeys::TrafficPermitSta("BUY"));
- $playerNum = max(oo::commonOprRedis('Statistics')->hLen(okeys::TrafficPermitSta("PLAY")),1);
- $buySta = [
- 'playerNum' => $playerNum,
- 'buyNum' => $buyTrafficPermitNum,
- 'buyPro' => $buyTrafficPermitNum/$playerNum,
- ];
- $taskList = [
- 1=>"邀请好友",
- 2=>"完成世界",
- 3=>"偷",
- 4=>"打",
- 5=>"和大盗莫里一起偷袭",
- 6=>"和拳手莫里一起进攻",
- 7=>"转一次黄金转盘",
- 8=>"夺宝一次",
- 9=>"玩一次黄金矿工",
- 10=>"分享游戏",
- ];
- $taskSta = [];
- foreach ($taskList as $taskId=>$taskName){
- $standard = oo::commonOprRedis('Statistics')->hGet(okeys::TrafficPermitSta("STANDARD"),$taskId);
- $complete_1 = oo::commonOprRedis('Statistics')->hGet(okeys::TrafficPermitSta("COMPLETE-1"),$taskId);
- $complete_2 = oo::commonOprRedis('Statistics')->hGet(okeys::TrafficPermitSta("COMPLETE-2"),$taskId);
- $taskSta[$taskId] = [
- 'standard' => $standard,
- 'complete_1' => $complete_1,
- 'complete_2' => $complete_2,
- 'completePro' =>( $complete_1 + $complete_2 )/$playerNum,
- ];
- }
- $levelSta = [];
- $levelArr = oo::commonOprRedis('Statistics')->hGetAll(okeys::TrafficPermitSta("BUYLEVEL"));
- $userBuy = oo::commonOprRedis('Statistics')->hGetAll(okeys::TrafficPermitSta("BUY"));
- $onLevelBuy = [];
- foreach ($userBuy as $row){
- $onLevelBuy[$row] = intval($onLevelBuy[$row]) + 1;
- }
- $curNumArr = oo::commonOprRedis('activity')->hGetAll(okeys::TrafficPermitCurNum($aid));
- $rewardConf = oo::commonOprModel('activitynew')->getActReward($aid);
- $levelConf = [];
- $reward = $rewardConf['reward']??[];
- $maxLevel = max(array_column($reward,'levelId'));
- foreach ($reward as $k=>$v) {
- $levelConf[$v['levelId']] = $v['max'];
- }
- $levelData = [];
- foreach ($curNumArr as $num){
- $levelId = 0;
- foreach ($levelConf as $level=>$max){
- if($num < $max){
- break;
- }
- $levelId = $level;
- }
- $levelData[$levelId] = intval($levelData[$levelId]) + 1;
- }
- for($i=0;$i<=$maxLevel;$i++){
- $levelSta[$i] = [
- 'buyTrafficPermitNum' => intval($onLevelBuy[$i]),
- 'buyLevelNum' => intval($levelArr[$i]),
- 'playerNum' => intval($levelData[$i]),
- ];
- }
- $propsSta = [];
- $propsList = oo::commonOprModel('props')->getPropsConfig();
- foreach ($propsList as $propsId=>$row){
- $propsSta['normal'][$propsId] = oo::commonOprRedis('Statistics')->hGet(okeys::TrafficPermitSta("PROPS-normal"),$propsId);
- $propsSta['special'][$propsId] = oo::commonOprRedis('Statistics')->hGet(okeys::TrafficPermitSta("PROPS-special"),$propsId);
- }
- $data = addslashes(json_encode([
- 'buySta' => $buySta,
- 'taskSta' => $taskSta,
- 'levelSta' => $levelSta,
- 'propsSta' => $propsSta,
- ]));
- $tb = otable::TrafficPermitSta();
- oo::commonOprDb('statistics')->query("INSERT INTO {$tb} VALUES('{$date}', '{$data}')");
- oo::commonOprRedis('Statistics')->delete([
- okeys::TrafficPermitSta("BUY"),
- okeys::TrafficPermitSta("PLAY"),
- okeys::TrafficPermitSta("STANDARD"),
- okeys::TrafficPermitSta("COMPLETE-1"),
- okeys::TrafficPermitSta("COMPLETE-2"),
- okeys::TrafficPermitSta("BUYLEVEL"),
- okeys::TrafficPermitSta("PROPS-normal"),
- okeys::TrafficPermitSta("PROPS-special"),
- ]);
- }
- /**
- * 矿工小游戏統計(停用-2021.10.23-wsc)
- * Created by: Owen
- * Created on: 2020/11/7 10:49
- */
- public function miningGameSta(){
- oo::commonOprRedis('common')->delete([okeys::MiningGameSta("PLAY",0),okeys::MiningGameSta("PASS",0)]);
- return true;
- $data = [];
- for($i=1;$i<=20;$i++){
- $data[$i] = [
- 'play'=>intval(oo::commonOprRedis('common')->hGet(okeys::MiningGameSta("PLAY",0),$i)),
- 'pass'=>intval(oo::commonOprRedis('common')->hGet(okeys::MiningGameSta("PASS",0),$i)),
- ];
- }
- $tb = otable::MiningGameDateSta();
- $date = date("Ymd");
- $data = addslashes(json_encode($data));
- oo::commonOprDb('statistics')->query("INSERT INTO {$tb} VALUES('{$date}','{$data}')");
- oo::commonOprRedis('common')->delete([okeys::MiningGameSta("PLAY",0),okeys::MiningGameSta("PASS",0)]);
- }
- /**
- * 保险柜统计
- * Created by: Owen
- * Created on: 2020/12/8 19:45
- */
- public function steelSafeSta(){
- $data = [];
- foreach ([1,2,3] as $progressId){
- $data['times'][] = intval(oo::commonOprRedis('Activity')->hGet(okeys::SteelSafeSta(),"reward:".$progressId));// 每天统计每个进度领取次数
- $data['coins'][] = intval(oo::commonOprRedis('Activity')->hGet(okeys::SteelSafeSta(),"coins:".$progressId));// 每天统计每个进度金币金额
- $data['limit'][] = intval(oo::commonOprRedis('Activity')->hGet(okeys::SteelSafeSta(),"limit:".$progressId));// 每天统计每个进度领取到限时奖励次数
- $list = oo::commonOprModel('props')->getPropsConfig();
- foreach ($list as $propsId=>$row){
- $data['props'][$progressId][] = intval(oo::commonOprRedis('Activity')->hGet(okeys::SteelSafeSta(),"props:".$progressId."-".$propsId)); // 每天统计每个进度的领取到限时奖励物品和数量
- }
- }
- $data = addslashes(json_encode($data));
- $tb = otable::SteelSafeSta();
- $date = date("Ymd");
- oo::commonOprDb('statistics')->query("INSERT INTO {$tb} VALUES('{$date}', '{$data}')");
- oo::commonOprRedis('Activity')->delete(okeys::SteelSafeSta());
- $aidArr = oo::commonOprModel('activitynew')->getAllOnlineActivityByType('steel_safe');
- foreach ($aidArr as $aid){
- oo::commonOprRedis('Activity')->delete([okeys::SteelSafeCurNum($aid),okeys::SteelSafeCurProgress($aid)]);
- }
- }
- /**
- * Notes:统计每日活跃推送开关
- * User: wsc
- * Time: 2021/1/5 19:44
- */
- public function userPushStatusSta(){
- $yd = date('Ymd',strtotime('-1 days'));
- for($i=0;$i<3;$i++){
- $k="OPENPUSHUSERLOG:{$yd}:{$i}";
- $arr[$i]=oo::commonOprRedis('statistics')->hLen($k);
- oo::commonOprRedis('statistics')->delete($k);
- }
- $data['data'] = json_encode($arr);
- $data['date'] = $yd;
- $data['type'] ='userPushStatus';
- $tb= otable::staData();
- $sql = funs::db_insertSQL($tb,$data);
- oo::commonOprDb('statistics')->query($sql);
- }
- /**
- * Notes:后台增加老虎机体力统计/老虎机体力关卡概率统计 & 锦标赛 活动期间消耗体力 & 收集活动 每个进度消耗体力
- * User: Hss
- * Time: 2021/2/1 16:35
- */
- public function slotSpinsSta($uid = 0,$levelId = 1,$spins = 0,$bet = 1,$type = 1,$rankAid = 0,$lowSpins = 0){
- $date = date("Ymd",time());
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::slotSpinsSta($date,$type),$levelId,$spins);
- if($rankAid){
- $info = oo::commonOprModel('activitynew')->getUserActStageInfo($uid, $rankAid);
- $stage = isset($info['stage'])?$info['stage']:0;
- $rid = oo::commonOprRedis('activity')->get(okeys::userBindActRid($uid,$rankAid));//绑定活动奖励方案id
- self::rankConsumeSta($rankAid,$uid,$rid,$stage,$lowSpins);//锦标赛 活动期间消耗体力
- }
- $aid = oo::commonOprModel('activitynew')->activityLock($uid,'super_collect');
- if($aid){
- $info = oo::commonOprModel('activitynew')->getUserActStageInfo($uid, $aid);
- $stage = isset($info['stage'])?$info['stage']:0;
- $rid = oo::commonOprRedis('activity')->get(okeys::userBindActRid($uid,$aid));//绑定活动奖励方案id
- // oo::commonOprRedis('Statistics')->hIncrBy(okeys::rankConsumeSta($aid,'super_collect-up',$rid,$stage),$uid,$lowSpins);//每升一次进度清空一次
- oo::commonOprRedis('activity')->hIncrBy(okeys::getCollectActSpins($aid),$uid,$lowSpins);
- }
- }
- /**
- * 锦标赛 + 超级收集活动 统计 & 活动进度支付统计
- * @param $param
- * @return false|string
- * Created by: Hss
- * Created on: 2021/3/2 18:19
- */
- public function rankCollectSta($uid = 0,$gprice = 0,$spins = 0){
- $gprice = $gprice * 100;
- foreach(['super_collect','rank'] as $type){
- $aid = oo::commonOprModel('activitynew')->activityLock($uid,$type);
- if($aid){
- $info = oo::commonOprModel('activitynew')->getUserActStageInfo($uid, $aid);
- $stage = isset($info['stage'])?$info['stage']:0;
- $rid = oo::commonOprRedis('activity')->get(okeys::userBindActRid($uid,$aid));//绑定活动奖励方案id
- //记录当前层付费总金额
- oo::commonOprRedis('Statistics')->hIncrBy(okeys::rankCollectPaySta($aid,$type, $rid, $stage), $uid, $gprice);
- //记录付费前当前体力
- oo::commonOprRedis('Statistics')->hSetNx(okeys::rankCollectSpinsSta($aid,$type, $rid, $stage), $uid, $spins);
- //记录每层首次付费进度数值
- $num = intval($info['rate']);
- oo::commonOprRedis('Statistics')->hSetNx(okeys::rankCollectNumSta($aid,$type, $rid, $stage), $uid, $num);
- if($type == "super_collect"){
- //活动进度支付统计
- oo::commonOprRedis('activity')->hIncrBy(okeys::activityProgresPaySta($rid,$aid), $stage, 1);
- oo::commonOprRedis('activity')->hSetNx(okeys::activityProgresPayAidSta(),$aid,$aid);
- }
- }
- }
- }
- /**
- * 锦标赛 活动期间消耗体力 & 升进度消耗体力
- * @param $param
- * @return false|string
- * Created by: Hss
- * Created on: 2021/3/3 16:49
- */
- public function rankConsumeSta($aid,$uid = 0,$rid = 0,$stage = 0,$spins = 0){
- //根据进度消耗累加获得累计数值,无需重复计算
- // oo::commonOprRedis('Statistics')->hIncrBy(okeys::rankConsumeSta($aid,'',$rid),$uid,$spins);//累计
- // oo::commonOprRedis('Statistics')->hIncrBy(okeys::rankConsumeSta($aid,'rank-up',$rid,$stage),$uid,$spins);//进度消耗
- }
- /**
- * 获取用户统计数据
- * @param $uid
- * @return array
- * Created by: Owen
- * Created on: 2021/5/10 18:16
- */
- public function getUserStatistics($uid){
- $cacheKey = okeys::UserStatistics($uid);
- $cache = oo::commonOprRedis('Statistics')->hGetAll($cacheKey);
- if(!empty($cache)){
- return $cache;
- }
- $tb = otable::UserStatistics($uid);
- $ret= oo::commonOprDb('userinfo')->getOne("SELECT * FROM {$tb} WHERE uid={$uid} LIMIT 1",MYSQLI_ASSOC);
- if(empty($ret)){
- oo::commonOprDb('userinfo')->query("INSERT INTO {$tb} (uid) VALUES ({$uid})");
- $ret= oo::commonOprDb('userinfo')->getOne("SELECT * FROM {$tb} WHERE uid={$uid} LIMIT 1",MYSQLI_ASSOC);
- }
- oo::commonOprRedis('Statistics')->hMset($cacheKey,$ret);
- oo::commonOprRedis('Statistics')->expire($cacheKey,5*24*60*60);
- return $ret;
- }
- /**
- * 追加统计
- * @param $uid
- * @param $info
- * Created by: Owen
- * Created on: 2021/5/10 19:00
- */
- public function addUserStatistics($uid,$info){
- $cacheKey = okeys::UserStatistics($uid);
- if(!oo::commonOprRedis('Statistics')->exists($cacheKey)){
- $this->getUserStatistics($uid);
- }
- foreach ($info as $key=>$row){
- oo::commonOprRedis('Statistics')->hIncrBy($cacheKey,$key,$row);
- }
- oo::commonOprRedis('Statistics')->expire($cacheKey,5*24*60*60);
- /** 数据落地标识 */
- oo::commonOprRedis('common')->zAdd(okeys::Landing("USERSTATISTICS", $uid),time(),$uid);
- }
- /**
- * 追加统计
- * @param $uid
- * @param $info
- * Created by: Owen
- * Created on: 2021/5/10 19:00
- */
- public function setUserStatistics($uid,$info){
- $cacheKey = okeys::UserStatistics($uid);
- if(!oo::commonOprRedis('Statistics')->exists($cacheKey)){
- $this->getUserStatistics($uid);
- }
- foreach ($info as $key=>$row){
- oo::commonOprRedis('Statistics')->hSet($cacheKey,$key,$row);
- }
- oo::commonOprRedis('Statistics')->expire($cacheKey,5*24*60*60);
- /** 数据落地标识 */
- oo::commonOprRedis('common')->zAdd(okeys::Landing("USERSTATISTICS", $uid),time(),$uid);
- }
- }
|