diff --git a/Application/Admin/Controller/SpendCountSetController.class.php b/Application/Admin/Controller/SpendCountSetController.class.php new file mode 100644 index 000000000..d112cff45 --- /dev/null +++ b/Application/Admin/Controller/SpendCountSetController.class.php @@ -0,0 +1,260 @@ + + */ +class SpendCountSetController extends \Think\Controller +{ + public $beginThismonth; + public $endThismonth; + public $date; + public $nowdata; + public $model; + public $continue=false; + public function _initialize(){ + //初始化 + $this->beginThismonth = mktime(0,0,0,date('m')-1,1,date('Y')); + $this->endThismonth = mktime(0,0,0,date('m')-1,date('t'),date('Y'))-1; + $this->date = date('Y')."-".((date('m')-1) > 9 ? (date('m')-1) : "0".(date('m')-1)); + $this->nowdata =time(); + $this->model =M("spend",'tab_'); + } + public function initCount() + { + $countRes = M("spend_count","tab_")->field("count(*) date_count")->find()['date_count']; + if($countRes > 0){ + die("init error"); + } + $nowdate = date('Y')."-".(date('m') > 9 ? date('m') : "0".date('m')); + // $nowdate = "2017-10"; + //获取所有的月份 pay_time + $res = M("spend",'tab_')->field("FROM_UNIXTIME(pay_time,'%Y-%m') AS pay_time")->buildSql(); + $res = M()->table($res.' a')->group('pay_time')->select(); + //执行数据统计 + for ($i=0; $i < count($res); $i++) { + # code... + if($res[$i]['pay_time'] != $nowdate){ + $month = $res[$i]['pay_time']; + $this->date = $month; + $tarry = explode('-',$month); + $this->beginThismonth=mktime(0,0,0,$tarry[1],1,$tarry[0]); + $this->endThismonth=mktime(0,0,0,$tarry[1]-0+1,1,$tarry[0])-1; + //执行 + $this->model->startTrans(); + $this->continue =true; + $this->getCashData(); + $this->getBalanceData(); + $this->getBingData(); + $this->getInsideData(); + + $this->model->commit(); + } + } + die("success"); + + } + //流水聚合接口 + public function setSpendCount() + { + //判断是否已经聚合 + $countRes = M("spend_count","tab_")->field("count(*) date_count")->where("count_date = '{$this->date}'")->find()['date_count']; + if($countRes > 0){ + die("Repeated statistics"); + } + $this->model->startTrans(); + $this->continue =true; + $this->getCashData(); + $this->getBalanceData(); + $this->getBingData(); + $this->getInsideData(); + + $this->model->commit(); + die("success"); + } + //获取游戏现金流水 + public function getCashData() + { + if(!$this->continue){ + die("api error"); + } + $map = array( + "pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)), + "spend.pay_status"=>1, + "pay_way"=>array("GT",0) + ); + $field = "IFNULL(game.partner_id,0) partner_id,partner.partner partner_name, + spend.promote_id,spend.promote_account,spend.game_id,spend.game_name, + IFNULL(promote.parent_id,0) parent_id,promote.parent_name,sum(pay_amount) cash_count, + '{$this->date}' as count_date,'{$this->nowdata}' as create_time"; + //获取现金 + $cashRes = M() + ->table("tab_spend spend") + ->field($field) + ->where($map) + ->join("tab_promote promote ON spend.promote_id = promote.id","left") + ->join("tab_game game ON spend.game_id = game.id","left") + ->join("tab_partner partner ON partner.id = game.partner_id","left") + ->group('spend.promote_id,spend.game_id') + ->select(); + if(!empty($cashRes)){ + $dbres = M("spend_count",'tab_')->addAll($cashRes); + if(!$dbres){ + $this->model->rollback(); + die("error"); + } + } + # code... + } + //获取平台币聚合 + public function getBalanceData() + { + if(!$this->continue){ + die("api error"); + } + $map = array( + "pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)), + "spend.pay_status"=>1, + "pay_way"=> array("LT",1) + ); + $field = "IFNULL(game.partner_id,0) partner_id,partner.partner partner_name, + spend.promote_id,spend.promote_account,spend.game_id,spend.game_name, + IFNULL(promote.parent_id,0) parent_id,promote.parent_name,sum(pay_amount) balance_coin_count, + '{$this->date}' as count_date,'{$this->nowdata}' as create_time"; + $balanceRes = M() + ->table("tab_spend spend") + ->field($field) + ->where($map) + ->join("tab_promote promote ON spend.promote_id = promote.id","left") + ->join("tab_game game ON spend.game_id = game.id","left") + ->join("tab_partner partner ON partner.id = game.partner_id","left") + ->group('spend.promote_id,spend.game_id') + ->select(); + //集中两个表 + if(!empty($balanceRes)){ + + for ($i=0; $i < count($balanceRes); $i++) { + # code... + $tempmap = array( + "game_id"=>$balanceRes[$i]['game_id'], + "promote_id"=>$balanceRes[$i]['promote_id'], + "count_date"=>$this->date + ); + $dbres = M("spend_count","tab_")->where($tempmap)->find(); + if(!$dbres){ + //不存在 + $tempdbres = M("spend_count","tab_")->add($balanceRes[$i]); + if(!$tempdbres){ + $this->model->rollback(); + die("error"); + } + }else{ + $dbres["balance_coin_count"] = $balanceRes[$i]['balance_coin_count']; + $tempdbres = M("spend_count","tab_")->save($dbres); + if(!$tempdbres){ + $this->model->rollback(); + die("error"); + } + } + } + } + # code... + } + //获取绑定币充值 + public function getBingData() + { + if(!$this->continue){ + die("api error"); + } + $bindRes = M() + ->table("tab_bind_recharge bind") + ->field("IFNULL(game.partner_id,0) partner_id,partner.partner partner_name, + bind.game_id,bind.game_name,bind.promote_id,bind.promote_account, + IFNULL(promote.parent_id,0) parent_id,promote.parent_name,sum(real_amount) bind_coin_count, + '{$this->date}' as count_date,'{$this->nowdata}' as create_time") + ->where(array( + "bind.create_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)), + "bind.pay_status"=>1 + )) + ->join("tab_promote promote ON bind.promote_id = promote.id","left") + ->join("tab_game game ON bind.game_id = game.id","left") + ->join("tab_partner partner ON partner.id = game.partner_id","left") + ->group('bind.promote_id,bind.game_id') + ->select(); + //聚合表 + if(!empty($bindRes)){ + for ($i=0; $i < count($bindRes); $i++) { + # code... + $tempmap = array( + "game_id"=>$balanceRes[$i]['game_id'], + "promote_id"=>$balanceRes[$i]['promote_id'], + "count_date"=>$this->date + ); + $dbres = M("spend_count","tab_")->where($tempmap)->find(); + if(!$dbres){ + //不存在 + $tempdbres = M("spend_count","tab_")->add($bindRes[$i]); + if(!$tempdbres){ + $this->model->rollback(); + die("error"); + } + }else{ + $dbres["bind_coin_count"] = $bindRes[$i]['bind_coin_count']; + $tempdbres = M("spend_count","tab_")->save($dbres); + if(!$tempdbres){ + $this->model->rollback(); + die("error"); + } + } + } + } + } + //获取内充流水 + public function getInsideData() + { + if(!$this->continue){ + die("api error"); + } + $insideRes = M() + ->table("tab_deposit deposit") + ->field("promote_id,promote_account,IFNULL(promote.parent_id,0) parent_id,parent_name,sum(pay_amount) inside_cash_count,'{$this->date}' as count_date,'{$this->nowdata}' as create_time") + ->where(array( + "deposit.create_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)), + "pay_status"=>1 + )) + ->join("tab_promote promote ON deposit.promote_id = promote.id","left") + ->group('promote_id') + ->select(); + //聚合表 + if(!empty($insideRes)){ + for ($i=0; $i < count($insideRes); $i++) { + # code... + $tempmap = array( + "promote_id"=>$insideRes[$i]['promote_id'], + "count_date"=>$this->date + ); + $dbres = M("spend_count","tab_")->where($tempmap)->find(); + if(!$dbres){ + //不存在 + $tempdbres = M("spend_count","tab_")->add($insideRes[$i]); + if(!$tempdbres){ + $this->model->rollback(); + die("error"); + } + }else{ + $savedata = array("inside_cash_count"=>$insideRes[$i]['inside_cash_count']); + $tempdbres = M("spend_count","tab_")->where($tempmap)->save($savedata); + if(!$tempdbres){ + $this->model->rollback(); + die("error"); + } + } + } + } + // return true; + } + + + +} diff --git a/Data/update.sql b/Data/update.sql index ed6670118..4e476a510 100644 --- a/Data/update.sql +++ b/Data/update.sql @@ -188,4 +188,28 @@ CREATE TABLE `tab_partner` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `tab_game` ADD COLUMN `partner_id` int(11) NOT NULL DEFAULT 0 COMMENT '合作方ID' AFTER `supersign_url`; -ALTER TABLE `tab_partner` MODIFY COLUMN `partner` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '合作方名称' AFTER `id`; \ No newline at end of file +ALTER TABLE `tab_partner` MODIFY COLUMN `partner` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '合作方名称' AFTER `id`; + +-- 2019-10-28 chenzhi +CREATE TABLE `tab_spend_count` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', + `promote_id` int(11) NOT NULL DEFAULT '0' COMMENT '推广员id', + `promote_account` varchar(30) DEFAULT '' COMMENT '推广员账号', + `parent_id` int(11) DEFAULT '0' COMMENT '父类ID', + `parent_name` varchar(30) DEFAULT NULL COMMENT '父类名称', + `game_id` int(11) NOT NULL DEFAULT '0' COMMENT '游戏id', + `game_name` varchar(30) DEFAULT '' COMMENT '游戏名称', + `partner_id` int(11) DEFAULT '0' COMMENT '合作方id', + `partner_name` varchar(50) DEFAULT NULL COMMENT '合作方名称', + `cash_count` decimal(10,2) DEFAULT '0.00' COMMENT '现金流水', + `balance_coin_count` decimal(10,2) DEFAULT '0.00' COMMENT '平台币流水', + `bind_coin_count` decimal(10,2) DEFAULT '0.00' COMMENT '绑定币流水', + `inside_cash_count` decimal(10,2) DEFAULT '0.00' COMMENT '内充流水(仅对用户与月份唯一)', + `count_date` varchar(30) DEFAULT '' COMMENT '统计月份', + `create_time` int(11) DEFAULT NULL COMMENT '添加时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `game_id` (`game_id`) USING BTREE, + KEY `promote_id` (`promote_id`) USING BTREE, + KEY `partner_id` (`partner_id`) USING BTREE, + KEY `count_date` (`count_date`) USING BTREE +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='游戏流水聚合表'; \ No newline at end of file