field("value")->where("`key` = 'aggregate_finance_api'")->find(); if(empty($apihost)){ echo "请先设置请求接口aggregate_finance_api的值".PHP_EOL;die; } $this->apihost = $apihost['value']; } public function setFreeDateCount($begin,$end='') { if($end == '') $end = $begin; //判断日期格式 $patten = "/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/"; if (!preg_match($patten, $begin)) { die("开始时间格式错误"); } if (!preg_match($patten, $end)) { die("结束时间格式错误"); } if(strtotime($end) < strtotime($begin)){ die("结束时间不能比开始时间小"); } if(strtotime($end)+86399-24*3600 > time()){ die("结束时间不能大于当前"); } $starttime = $begin?strtotime($begin):mktime(0,0,0,date('m'),date('d'),date('Y')); $endtime = $end?strtotime($end)+86399:$starttime+86399; $datelist = get_date_list($starttime,$endtime,1); $countdate = count($datelist); for($i=0;$i<$countdate;$i++){ $this->setDailyCount($datelist[$i]); } } public function setDailyCount($stime="now") { if($stime=="now"){ $stime=time(); }else{ $stime = strtotime($stime); } $nowdate = date("Y-m-d",$stime); $w = (int)date("w",$stime); $d = (int)date("d",$stime); if($w == 1 || $d == 1){ if($w == 1){ echo $nowdate.":".PHP_EOL; echo "--周结begin".PHP_EOL; $this->setWeekCount($stime); } if($d == 1){ echo $nowdate.":".PHP_EOL; echo "--月结&补点begin".PHP_EOL; $this->setMonthCount($stime); } }else{ echo $nowdate."非周一和月初,无需任何处理".PHP_EOL; } } public function setWeekCount($stime)//进行周结 { $begintime = mktime(0,0,0,date('m',$stime),date('d',$stime)-7,date('Y',$stime)); $endtime = mktime(0,0,0,date('m',$stime),date('d',$stime),date('Y',$stime))-1; $this->getAndSaveData(0,$begintime,$endtime); } public function setMonthCount($stime)//进行周结 { $thismonth = date('m',$stime); $thisyear = date('Y',$stime); if ($thismonth == 1) { $lastmonth = 12; $lastyear = $thisyear - 1; } else { $lastmonth = $thismonth - 1; $lastyear = $thisyear; } $lastStartDay = $lastyear . '-' . $lastmonth . '-1'; $lastEndDay = $lastyear . '-' . $lastmonth . '-' . date('t', strtotime($lastStartDay)); $begintime = strtotime($lastStartDay);//上个月的月初时间戳 $endtime = strtotime($lastEndDay)+24*3600-1;//上个月的月末时间戳 //普通月结 $this->getAndSaveData(1,$begintime,$endtime); //补点 $this->getAndSaveData(2,$begintime,$endtime); } protected function getAndSaveData($type,$begintime,$endtime) { $sign = md5($begintime.$endtime.$type.$this->token); $arr = [ "begintime"=>$begintime, "endtime"=>$endtime, "type"=>$type, "sign"=>$sign ]; $dataurl .= $this->apihost."&".http_build_query($arr); $html = file_get_contents($dataurl); $rsp = json_decode($html,true); var_dump($dataurl); if($rsp['code'] != 1){ echo $rsp['error'].PHP_EOL;die; } //成功插入 $Aggregate = M("aggregate_statement","tab_"); $begintimestr = date("Y-m-d",$begintime); $endtimestr = date("Y-m-d",$endtime); if($rsp['count'] > 0){ //插入数据 foreach ($rsp['data'] as $k => $v) { foreach ($v["game_list"] as $ke => &$va) { $va['begintime'] = $begintimestr; $va['endtime'] = $endtimestr; $va['fax_ratio'] = 0; } $v["statement_info"] = json_encode($v["game_list"],JSON_UNESCAPED_UNICODE); unset($v["game_list"]); $v['begintime'] = $begintime; $v['endtime'] = $endtime; $v['create_time'] = time(); $Aggregate->add($v); } } if($type == 0){ echo "----周结统计ok".PHP_EOL; }elseif($type == 1){ echo "----月结统计ok".PHP_EOL; }elseif($type == 2){ echo "----补点统计ok".PHP_EOL; } } public function setDateCount($date) { $this->date = $date; $tarry = explode('-',$date); $this->beginTime=mktime(0,0,0,$tarry[1],$tarry[2],$tarry[0]); $this->endTime=mktime(0,0,0,$tarry[1],$tarry[2]-0+1,$tarry[0])-1; set_time_limit(0); $t1 = microtime(true); //判断是否存在 $PromoteRes = $this->PromoteCountModel->where("date = '{$this->beginTime}'")->find(); $GameRes = $this->GameCountModel->where("date = '{$this->beginTime}'")->find(); $reset=''; if(!empty($PromoteRes) || !empty($GameRes) ){ if($this->reset){ $this->PromoteCountModel->where("date = '{$this->beginTime}'")->delete(); $this->GameCountModel->where("date = '{$this->beginTime}'")->delete(); $reset = "reset and creat "; }else{ echo ("{$this->date} 已统计,请勿重复提交".PHP_EOL); return; } } $this->model->startTrans(); $this->addid = []; $this->adddata = []; $this->promoteNew(); $this->promotePayMoeny(); $this->promoteActive(); $this->promoteCreateDb(); // unset($this->addid); // unset($this->adddata); $this->gameid = []; $this->gamedata = []; $this->gameNew(); $this->gamePayMoeny(); $this->gameActive(); $this->gameCreateDb(); $this->model->commit(); $t2 = microtime(true); echo ("{$this->date} {$reset}success runtime:".round($t2-$t1,3).'s'.PHP_EOL); # code... } //=======================聚合推广员======================== //1聚合新增 public function promoteNew() { $map = ['register_time'=>['between',[$this->beginTime,$this->endTime]],"puid"=>0,"promote_id"=>["gt",0]]; $promoteNew = $this->UserModel->field('COUNT(1) AS new_user_count,promote_id,promote_account') ->where($map) ->group("promote_id") ->select(); $count = count($promoteNew); for ($i=0; $i < $count; $i++) { $this->addid[] = $promoteNew[$i]["promote_id"]; $this->adddata[$promoteNew[$i]["promote_id"]] = $promoteNew[$i]; } unset($promoteNew); } //2聚合付费 public function promotePayMoeny() { $map = ['pay_time'=>['between',[$this->beginTime,$this->endTime]],"pay_status"=>1,"promote_id"=>["gt",0]];//1支付成功 $promotePayMoeny = $this->SpendModel->field('sum(pay_amount) AS pay_money_count,promote_id,promote_account') ->where($map) ->group("promote_id") ->select(); $count = count($promotePayMoeny); for ($i=0; $i < $count; $i++) { if (in_array($promotePayMoeny[$i]["promote_id"],$this->addid)) { //存在 $this->adddata[$promotePayMoeny[$i]["promote_id"]]["pay_money_count"] = $promotePayMoeny[$i]["pay_money_count"]; }else{ $this->addid[] = $promotePayMoeny[$i]["promote_id"]; $this->adddata[$promotePayMoeny[$i]["promote_id"]] = $promotePayMoeny[$i]; } } unset($promotePayMoeny); } //3聚合活跃 public function promoteActive() { $map = ['login_time'=>['between',[$this->beginTime,$this->endTime]],"promote_id"=>["gt",0]];//0不是小号 $promoteActive = $this->LoginModel->field('COUNT(DISTINCT user_id) AS active_user_count,GROUP_CONCAT(DISTINCT user_id) active_user_list,promote_id') ->where($map) ->group("promote_id") ->select(); $count = count($promoteActive); for ($i=0; $i < $count; $i++) { if (in_array($promoteActive[$i]["promote_id"],$this->addid)) { //存在 $this->adddata[$promoteActive[$i]["promote_id"]]["active_user_count"] = $promoteActive[$i]["active_user_count"]; $this->adddata[$promoteActive[$i]["promote_id"]]["active_user_list"] = $promoteActive[$i]["active_user_list"]; }else{ $this->addid[] = $promoteActive[$i]["promote_id"]; $this->adddata[$promoteActive[$i]["promote_id"]] = $promoteActive[$i]; } } unset($promoteActive); } //4加入数据库 public function promoteCreateDb() { $count = count($this->addid); if ($count > 0) { foreach ($this->adddata as $key => $value) { $value['date']=$this->beginTime; $value['create_time']=$this->nowdata; $value['active_user_list'] = @json_encode(array_map("intFun",explode(",",$value['active_user_list']))); if(empty($value['promote_account']) && $value['promote_id']){ if($value['promote_id'] == 0){ $value['promote_account'] = "官方渠道"; }else{ $value['promote_account'] = $this->PromoteModel->field("account")->where("id = {$value['promote_id']}")->find()['account']; if(!$value['promote_account']){ $value['promote_account']="未知推广员"; } } } $tempdbres = $this->PromoteCountModel->add($value); if($tempdbres === false){ $this->model->rollback(); die("error"); } } } } //=======================聚合游戏======================== //1聚合新增 public function gameNew() { $map = ['register_time'=>['between',[$this->beginTime,$this->endTime]],"puid"=>0,"fgame_id"=>["gt",0]];//0不是小号 $gameNew = $this->UserModel->field('COUNT(1) AS new_user_count,fgame_id game_id,fgame_name game_name') ->where($map) ->group("fgame_id") ->select(); $count = count($gameNew); for ($i=0; $i < $count; $i++) { $this->gameid[] = $gameNew[$i]["game_id"]; $this->gamedata[$gameNew[$i]["game_id"]] = $gameNew[$i]; } unset($gameNew); } //2聚合付费 public function gamePayMoeny() { $map = ['pay_time'=>['between',[$this->beginTime,$this->endTime]],"pay_status"=>1,"game_id"=>["gt",0]];//1支付成功 $gamePayMoeny = $this->SpendModel->field('sum(pay_amount) AS pay_money_count,game_id,game_name') ->where($map) ->group("game_id") ->select(); $count = count($gamePayMoeny); for ($i=0; $i < $count; $i++) { if (in_array($gamePayMoeny[$i]["game_id"],$this->gameid)) { //存在 $this->gamedata[$gamePayMoeny[$i]["game_id"]]["pay_money_count"] = $gamePayMoeny[$i]["pay_money_count"]; }else{ $this->gameid[] = $gamePayMoeny[$i]["game_id"]; $this->gamedata[$gamePayMoeny[$i]["game_id"]] = $gamePayMoeny[$i]; } } unset($gamePayMoeny); } //3聚合活跃 public function gameActive() { $map = ['login_time'=>['between',[$this->beginTime,$this->endTime]],"game_id"=>["gt",0]];//0不是小号 $gameActive = $this->LoginModel->field('COUNT(DISTINCT user_id) AS active_user_count,GROUP_CONCAT(DISTINCT user_id) active_user_list,game_id,game_name') ->where($map) ->group("game_id") ->select(); $count = count($gameActive); for ($i=0; $i < $count; $i++) { if (in_array($gameActive[$i]["game_id"],$this->gameid)) { //存在 $this->gamedata[$gameActive[$i]["game_id"]]["active_user_count"] = $gameActive[$i]["active_user_count"]; $this->gamedata[$gameActive[$i]["game_id"]]["active_user_list"] = $gameActive[$i]["active_user_list"]; }else{ $this->gameid[] = $gameActive[$i]["game_id"]; $this->gamedata[$gameActive[$i]["game_id"]] = $gameActive[$i]; } } unset($gameActive); } //4加入数据库 public function gameCreateDb() { $count = count($this->gameid); if ($count > 0) { foreach ($this->gamedata as $key => $value) { $value['date']=$this->beginTime; $value['create_time']=$this->nowdata; $value['active_user_list'] = @json_encode(array_map("intFun",explode(",",$value['active_user_list']))); $tempdbres = $this->GameCountModel->add($value); if($tempdbres === false){ $this->model->rollback(); die("error"); } } } } }