|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Admin\Controller;
|
|
|
|
use Think\Controller;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 后台总览聚合
|
|
|
|
* @author cz
|
|
|
|
*/
|
|
|
|
class AggregateFinanceSetController extends Controller {
|
|
|
|
public $apihost;
|
|
|
|
public $token = "LYHTQDJS";
|
|
|
|
|
|
|
|
public function _initialize(){
|
|
|
|
$apihost = M("Kv")->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();
|
|
|
|
$v['admin_name'] = "system";
|
|
|
|
$v['admin_id'] = 0;
|
|
|
|
$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");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|