diff --git a/Application/Admin/Conf/config.php b/Application/Admin/Conf/config.php index 26d141df6..e3319f786 100644 --- a/Application/Admin/Conf/config.php +++ b/Application/Admin/Conf/config.php @@ -129,5 +129,6 @@ return array( "tab_reward_detail", "tab_reward_record", "tab_new_company_statement_info", + "tab_spend" ] ); \ No newline at end of file diff --git a/Application/Admin/Controller/CompanyStatementController.class.php b/Application/Admin/Controller/CompanyStatementController.class.php index 06eda5aeb..50b4181f6 100644 --- a/Application/Admin/Controller/CompanyStatementController.class.php +++ b/Application/Admin/Controller/CompanyStatementController.class.php @@ -229,6 +229,13 @@ class CompanyStatementController extends ThinkController } $this->assign("IS_SUBSITE",IS_SUBSITE); + if(IS_SUBSITE){ + $SubKvModel = M("Kv","sub_",SUBSITE_DB);//指定子库 + $LastSynTime = $SubKvModel->where("`key` = 'sub_spend_syn_time'")->getField("value"); + $LastStatementTime = $SubKvModel->where("`key` = 'sub_company_statement'")->getField("value"); + $this->assign('lastSynTime',date('Y-m-d',$LastSynTime)); + $this->assign('lastStatementTime',date('Y-m-d',$LastStatementTime)); + } $this->assign('data',$data); $this->assign('count',$count); @@ -1761,6 +1768,24 @@ class CompanyStatementController extends ThinkController $this->ajaxReturn(array("success"=>"ok","data"=>[])); } + //子站新增结算 + public function subAddStatement(){ + if(!isset($_REQUEST['statement_time'])) $this->error("参数错误"); + $statement_time = $_REQUEST['statement_time']; + $end = date("Y-m-d",strtotime($statement_time)+ 86400); + $utime = strtotime($statement_time)+86399; + + $LastStatementTime = M("Kv","sub_",SUBSITE_DB)->where("`key` = 'sub_company_statement'")->getField("value"); + $begin = date("Y-m-d",$LastStatementTime-0+1); + + $params = "php ".SUBSITE_INDEX." SubCompanyStatementSet/setFreeDateCount/begin/{$begin}/end/{$end}/utime/{$utime}"; + $r = D("CmdTasks")->addTask("SubCompanyStatementSet",$params); + if($r){ + $this->ajaxReturn(["status"=>1,"info"=>"任务登记成功,请等待五分分钟后查看结果"]); + }else{ + $this->ajaxReturn(["status"=>0,"info"=>"任务登记错误"]); + } + } public function viewSpecialComplement() { @@ -2475,6 +2500,13 @@ class CompanyStatementController extends ThinkController "viewSpecialComplement"=>"特殊补点", "delStatement"=>"批量删除" ]; + if(IS_SUBSITE){ + unset($mentBtn['updateNewStatement']); + $is_can_add = D("CmdTasks")->isCanAddTask("SubCompanyStatementSet"); + if($is_can_add){ + $mentBtn['subAddStatement'] = "新增结算"; + } + } $resarr = []; foreach ($mentBtn as $k => $v) { if(IS_ROOT){ diff --git a/Application/Admin/Controller/ExportController.class.php b/Application/Admin/Controller/ExportController.class.php index da7e1ef3d..f293def63 100644 --- a/Application/Admin/Controller/ExportController.class.php +++ b/Application/Admin/Controller/ExportController.class.php @@ -1087,6 +1087,12 @@ class ExportController extends Controller $startTime = strtotime($startDate); $endTime = strtotime($endDate) + 86399; $map['pay_time'] = array('BETWEEN', array($startTime, $endTime)); + $is_sub_data = I("issubdata",0); + if($is_sub_data == 1){ + $SpendModel = M("spend","tab_",SUBSITE_DB); + }else{ + $SpendModel = M("spend","tab_"); + } unset($_REQUEST['timestart']); unset($_REQUEST['timeend']); @@ -1201,7 +1207,7 @@ class ExportController extends Controller D("Spend")->addSubsiteWhere($map); $map1 = $map; $map1['pay_status'] = 1; - $total = M('Spend','tab_')->where($map1)->sum('pay_amount'); + $total = $SpendModel->where($map1)->sum('pay_amount'); // var_dump($total);die(); $total=$total?$total:0; @@ -1277,7 +1283,7 @@ class ExportController extends Controller mb_convert_variables('GBK', 'UTF-8', $xlsCell); fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中 - $accessNum = M('Spend',"tab_") + $accessNum = $SpendModel ->where($map) ->count(); @@ -1286,7 +1292,7 @@ class ExportController extends Controller // var_dump($count);die(); for($i = 1; $i <= $pages; $i++) { - $xlsData = M('Spend',"tab_") + $xlsData = $SpendModel ->field($fields) ->where($map) ->limit(($i-1)*$perSize ,$perSize) diff --git a/Application/Admin/Controller/SubCompanyStatementSetController.class.php b/Application/Admin/Controller/SubCompanyStatementSetController.class.php index 817319353..af5e1671a 100644 --- a/Application/Admin/Controller/SubCompanyStatementSetController.class.php +++ b/Application/Admin/Controller/SubCompanyStatementSetController.class.php @@ -24,6 +24,15 @@ class SubCompanyStatementSetController extends Controller { echo "请先设置请求接口aggregate_cp_settlement_api的值".PHP_EOL;die; } $this->cpapihost = $cpapihost['value']; + $this->synGame(); + } + + //同步游戏表 + protected function synGame() + { + $mainGame = M("Game","tab_")->select(); + SM()->execute("truncate table tab_game"); + M("game","tab_",SUBSITE_DB)->addAll($mainGame); } /** * Undocumented function @@ -33,7 +42,7 @@ class SubCompanyStatementSetController extends Controller { * @param string $company all/pc/cp/pu 全部 下游公司 上游 下游个人 * @return void */ - public function setFreeDateCount($begin,$end='',$company='all') + public function setFreeDateCount($begin,$end='',$utime=false,$company='all') { if($end == '') $end = $begin; //判断日期格式 @@ -58,6 +67,9 @@ class SubCompanyStatementSetController extends Controller { for($i=0;$i<$countdate;$i++){ $this->setDailyCount($datelist[$i],$company); } + if($utime){ + M("Kv","sub_",SUBSITE_DB)->where("`key` = 'sub_company_statement'")->save(["value"=>$utime]); + } } public function setDailyCount($stime="now",$company='all') { @@ -74,14 +86,14 @@ class SubCompanyStatementSetController extends Controller { $w = (int)date("w",$stime); if($w == 1){ if($company == "all"){ - echo $nowdate.":".PHP_EOL; - echo "--周结begin".PHP_EOL; + // echo $nowdate.":".PHP_EOL; + // echo "--周结begin".PHP_EOL; $this->cpStatement(0,$stime); - echo "∟----CP周结统计ok".PHP_EOL; + // echo "∟----CP周结统计ok".PHP_EOL; $this->promoteCompanyStatement(0,$stime); - echo "∟----推广公司周结统计ok".PHP_EOL; + // echo "∟----推广公司周结统计ok".PHP_EOL; } if($company == "cp"){ $this->cpStatement(0,$stime); @@ -94,19 +106,18 @@ class SubCompanyStatementSetController extends Controller { } if($d == 1){ if($company == "all"){ - echo $nowdate.":".PHP_EOL; - echo "--月结&补点begin".PHP_EOL; + // echo $nowdate.":".PHP_EOL; + // echo "--月结&补点begin".PHP_EOL; $this->cpStatement(1,$stime); - echo "∟----CP月结&补点统计ok".PHP_EOL; + // echo "∟----CP月结&补点统计ok".PHP_EOL; $this->promoteCompanyStatement(1,$stime); - $this->officeCompanyStatement($stime); //官方结算 - echo "∟----官方/推广公司月结统计ok".PHP_EOL; + // echo "∟----官方/推广公司月结统计ok".PHP_EOL; $this->promoteUserPool(1,$stime); - echo "∟----推广个人月结统计ok".PHP_EOL; + // echo "∟----推广个人月结统计ok".PHP_EOL; } if($company == "cp"){ $this->cpStatement(1,$stime); @@ -122,9 +133,9 @@ class SubCompanyStatementSetController extends Controller { echo "∟----推广个人月结&补点统计ok".PHP_EOL; } } - if($w != 1 && $d != 1){ - echo $nowdate."非月初,无需任何处理".PHP_EOL; - } + // if($w != 1 && $d != 1){ + // echo $nowdate."非月初,无需任何处理".PHP_EOL; + // } } /** * 上游结算 @@ -396,7 +407,7 @@ class SubCompanyStatementSetController extends Controller { $Promote = M("Promote","tab_"); - $Spend = M("Spend","tab_"); + $Spend = SM("Spend","tab_"); $spenMap = [ "s.pay_status"=>1, "s.payed_time"=>['between', [$begintime,$endtime]], @@ -614,7 +625,7 @@ class SubCompanyStatementSetController extends Controller { //获取推广员 if(count($idarr) == 0){return $res;} $Promote = M("Promote","tab_"); - $Spend = M("Spend","tab_"); + $Spend = SM("Spend","tab_"); $spenMap = [ "s.pay_status"=>1, "s.payed_time"=>['between', [$begintime,$endtime]], @@ -994,7 +1005,7 @@ class SubCompanyStatementSetController extends Controller { $res = []; //获取推广员 $Promote = M("Promote","tab_"); - $Spend = M("Spend","tab_"); + $Spend = SM("Spend","tab_"); $spenMap = [ "s.pay_status"=>1, "s.payed_time"=>['between', [$begintime,$endtime]], @@ -1021,7 +1032,7 @@ class SubCompanyStatementSetController extends Controller { $res = []; //获取推广员 $Promote = M("Promote","tab_"); - $Spend = M("Spend","tab_"); + $Spend = SM("Spend","tab_"); $spenMap = [ "s.pay_status"=>1, "s.payed_time"=>['between', [$begintime,$endtime]], diff --git a/Application/Admin/Controller/SubSpendController.class.php b/Application/Admin/Controller/SubSpendController.class.php new file mode 100644 index 000000000..a38bbedd0 --- /dev/null +++ b/Application/Admin/Controller/SubSpendController.class.php @@ -0,0 +1,402 @@ + + */ +class SubSpendController extends ThinkController +{ + const model_name = 'Spend'; + public $OpAuthList; + + public function lists() + { + list($is_sub_data, $startTime, $endTime) = $this->setSelectDate(); + // dump($is_sub_data); + // dump($startTime); + // dump($endTime); + // dd(1); + $map['pay_time'] = array('BETWEEN', array($startTime, $endTime)); + if (isset($_REQUEST['is_check'])) { + $map['is_check'] = (int)($_REQUEST['is_check']); + } + + if (isset($_REQUEST['user_account'])) { + $map['user_account'] = array('like', trim($_REQUEST['user_account'])); + unset($_REQUEST['user_account']); + } + if (isset($_REQUEST['spend_ip'])) { + $map['spend_ip'] = array('like', trim($_REQUEST['spend_ip']) . '%'); + unset($_REQUEST['spend_ip']); + } + if (isset($_REQUEST['game_name'])) { + if ($_REQUEST['game_name'] == '全部') { + unset($_REQUEST['game_name']); + } else { + $map['game_id'] = ['in', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')]; + unset($_REQUEST['game_name']); + } + } + if (isset($_REQUEST['game_type']) && $_REQUEST['game_type']) { + $map['sdk_version'] = $_REQUEST['game_type']; + } + if (isset($_REQUEST['server_id'])) { + $map['server_id'] = $_REQUEST['server_id']; + unset($_REQUEST['server_id']); + } + if (isset($_REQUEST['pay_order_number'])) { + $map['pay_order_number'] = array('like', trim($_REQUEST['pay_order_number'])); + unset($_REQUEST['pay_order_number']); + } + if (isset($_REQUEST['extend'])) { + $map['extend'] = array('like', trim($_REQUEST['extend'])); + unset($_REQUEST['extend']); + } + if (isset($_REQUEST['pay_status'])) { + $map['pay_status'] = $_REQUEST['pay_status']; + unset($_REQUEST['pay_status']); + } + if (isset($_REQUEST['pay_way'])) { + if ($_REQUEST['pay_way'] == 2) { + $map['pay_way'] = ['in', '2,3,4']; + } else { + $map['pay_way'] = $_REQUEST['pay_way']; + } + unset($_REQUEST['pay_way']); + } + if (isset($_REQUEST['pay_game_status'])) { + $map['pay_game_status'] = $_REQUEST['pay_game_status']; + unset($_REQUEST['pay_game_status']); + } + + if ($_REQUEST['merchant_id']) { + $map['merchant_id'] = $_REQUEST['merchant_id']; + unset($_REQUEST['merchant_id']); + } + + $marketAdminId = 0; + $isMarketAdmin = isMarketAdmin(); + if ($isMarketAdmin) { + $userAuth = session('user_auth'); + $marketAdminId = $userAuth['uid']; + } else { + $marketAdminId = I('market_admin_id', 0); + } + if ($marketAdminId > 0) { + $map['market_admin_id'] = $marketAdminId; + } else { + setPowerPromoteIds($map,'promote_id'); + } + + if (isset($_REQUEST['promote_id'])) { + $promoteId = intval($_REQUEST['promote_id']); + if ($promoteId == 0) { + $map['promote_id'] = 0; + } else { + $promoteMap['chain'] = ['like', "%/$promoteId/%"]; + $promoteIds = M('Promote', 'tab_')->where($promoteMap)->getField('id', true); + $promoteIds[] = $promoteId; + $map['promote_id'] = ['in', $promoteIds]; + } + } + if ($_REQUEST['data_order'] != '') { + $data_order = reset(explode(',', $_REQUEST['data_order'])); + $data_order_type = end(explode(',', $_REQUEST['data_order'])); + $this->assign('userarpu_order', $data_order); + $this->assign('userarpu_order_type', $data_order_type); + $sort = $data_order == 3 ? 'desc' : 'asc'; + $order = $data_order_type . ' ' . $sort; + } else { + $order = ' pay_time desc '; + } + if (I('platform_type', 0) != 0) { + $sy = I('platform_type', 0) == 1 ? '=' : '<>'; + $game_id = M("Game","tab_")->where('unique_code ' . $sy . ' ""')->getField("id",true); + $map['game_id'] = ['in',$game_id]; + } + + // if (intval(($endTime + 1) - $startTime) / (24 * 3600) <= 31) { + // $map1 = $map; + // $map1['pay_status'] = 1; + // } else { + // $map = '1 = 2'; + // $map1 = $map; + // } + $this->checkListOrCountAuthRestMap($map,["extend", "pay_order_number", "user_account"]); + D("Spend")->addSubsiteWhere($map); + + $map1 = $map; + $map1['pay_status'] = 1; + $total = null_to_0(M(self::model_name,"tab_")->where($map1)->sum('pay_amount')); + $this->assign('total', $total); + $this->meta_title = $this->m_title = '游戏充值'; + $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Spend/lists', 'status' => 1])->find()); + + $data = $this->getSpendList($_GET["p"], $map, $order,$is_sub_data); + if (!empty($data['data'])) { + $adminUsernameList = getAdminUsernameList(array_column($data['data'], 'market_admin_id')); + foreach ($data['data'] as $key=>&$value) { + ($value['promote_account']=='官方渠道')?($value['promote_account']=C('OFFICIEL_CHANNEL')):''; + $value['market_admin_username'] = $adminUsernameList[$value['market_admin_id']] ?? '无'; + $value['is_check_str'] = D(self::model_name)::IsCheckStr[$value['is_check']]; + //拆分游戏名称和设备类型 + $game_arr = explode("(", rtrim($value['game_name'], ")")); + $value['game_name'] = $game_arr[0]; + $value['sdk_version_name'] = $game_arr[1]; + } + } + + $this->assign('showMarketAdmin', session('user_auth')['show_market_admin']); + $this->assign('showPromote', session('user_auth')['show_promote']); + $this->assign('isMarketAdmin', $isMarketAdmin); + $this->assign('marketAdmins', getMarketAdmins()); + $this->assign('list_data', $data['data']); + $this->assign('_page', $data['page']); + $show_data_power = (is_administrator()|| session('user_auth')['show_data']); + $this->assign('show_data_power', $show_data_power); + + if(!IS_ROOT){ + $this->OpAuthList= getModuleControllerAuth(); + } + + $this->assign('menubtn',$this->menuAuth($is_sub_data)); + $this->display(); + } + + protected function menuAuth($is_sub_data = false) + { + $is_can_add = D("CmdTasks")->isCanAddTask("SubSpendSet"); + if($is_can_add){ + $mentBtn = [ + "addSubSpendSet"=>"固定订单", + "updateSubSpend"=>"重固订单" + ]; + }else{ + $mentBtn = []; + } + if($is_sub_data){ + $mentBtn['changeSubSpend'] = "订单换绑"; + $mentBtn['addStatement'] = "参与结算"; + $mentBtn['removeStatement'] = "移出结算"; + } + $resarr = []; + foreach ($mentBtn as $k => $v) { + if(IS_ROOT){ + $resarr[] = $v; + }else{ + if(in_array($k,$this->OpAuthList)){ + $resarr[] = $v; + } + } + } + return $resarr; + } + + + + public function addSubSpendSet(){ + if(!isset($_REQUEST['time'])) $this->error("参数错误"); + $time = $_REQUEST['time']; + $params = "php ".SUBSITE_INDEX." SubSpendSet/setSubSpend/time/{$time}"; + $r = D("CmdTasks")->addTask("SubSpendSet",$params); + if($r){ + $this->ajaxReturn(["status"=>1,"info"=>"固化数据任务登记成功,请等待两三分钟后查看结果"]); + }else{ + $this->ajaxReturn(["status"=>0,"info"=>"固化数据任务登记错误"]); + } + } + public function changeSubSpend(){ + if (IS_POST) { + $this->editSubSpend(); + }else{ + $this->showChooseSubSpendCount(); + } + } + + public function updateSubSpend(){ + if(!isset($_REQUEST['begin']) || !isset($_REQUEST['end'])) $this->error("参数错误"); + $begin = $_REQUEST['begin']; + $end = $_REQUEST['end']; + + $params = "php ".SUBSITE_INDEX." SubSpendSet/recountSubSpend/begin/{$begin}/end/{$end}"; + $r = D("CmdTasks")->addTask("SubSpendSet",$params); + if($r){ + $this->ajaxReturn(["status"=>1,"info"=>"重算任务登记成功,请等待两三分钟后查看结果"]); + }else{ + $this->ajaxReturn(["status"=>0,"info"=>"重算任务登记错误"]); + } + } + + public function addStatement() + { + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + $this->editOrderIscheck($ids,2,1); + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"操作成功" + )); + } + public function removeStatement() + { + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + $this->editOrderIscheck($ids,1,2); + $this->ajaxReturn(array( + 'status' => 1, + "info"=>"操作成功" + )); + + } + protected function editSubSpend(){ + if(!isset($_REQUEST['ids']) || !isset($_REQUEST['company_id']) ) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + $company_id = $_REQUEST['company_id']; + //获取会长及adminid + $promote = M("promote","tab_")->field("id,account,admin_id")->where("company_id = '{$company_id}' and level = '1' and status = '1'")->find(); + $saveData = [ + "promote_id"=>$promote['id'], + "promote_account"=>$promote['account'], + "market_admin_id"=>$promote['admin_id'], + ]; + $where = [ + "id"=>['in',$ids] + ]; + M("spend","tab_",SUBSITE_DB)->where($where)->save($saveData); + $this->ajaxReturn([ + 'status' => 1, + "info"=>"换绑成功" + ]); + + } + + + protected function showChooseSubSpendCount(){ + if(!isset($_REQUEST['ids'])) $this->error("参数错误"); + $ids = $_REQUEST['ids']; + + $dbres = M("spend","tab_",SUBSITE_DB)->where("id in ({$ids})")->group("promote_id")->getField("promote_id,SUM(pay_amount) pay_amount"); + //获取公司 + $promoteIds = implode(",",array_keys($dbres)); + $company = M("promote","tab_") + ->alias('p') + ->where("p.id in ({$promoteIds})") + ->join("tab_promote_company c on p.company_id = c.id","left") + ->group("p.company_id") + ->getField("company_id,group_concat(p.id) promote_ids,c.company_name"); + $sendData = [ + "count" => 0, + "list"=>[] + ]; + foreach ($company as $k => $v) { + $v['promote_ids'] = explode(",",$v['promote_ids']); + $v['pay_amount'] = 0; + foreach($v['promote_ids'] as $promote_id){ + $v['pay_amount'] += ($dbres[$promote_id]-0); + unset($dbres[$promote_id]); + } + unset($v['promote_ids'],$v['company_id']); + $sendData['count'] += $v['pay_amount']; + $sendData['list'][] = $v; + } + if(count($dbres) > 0){ + $office_pay_amount = 0; + foreach ($dbres as $value) { + $office_pay_amount += ($value-0); + } + $sendData['list'][]= ["company_name"=>C('OFFICIEL_CHANNEL'),"pay_amount"=>$office_pay_amount]; + $sendData['count'] += $office_pay_amount; + } + //获取所有公司 + $promoteCompany = M('promote_company','tab_')->field('id, company_name as name')->where(['status' => 1])->select(); + + + $this->assign('promoteCompany', $promoteCompany); + $this->assign('data', $sendData); + $this->assign('ids', $ids); + $this->display("showChooseSubSpendCount"); + } + + protected function editOrderIscheck($ids,$oldval,$newval){ + $dbres = M("spend","tab_",SUBSITE_DB)->where("id in ({$ids}) and is_check = '{$oldval}'")->select(); + if(empty($dbres)) return false; + + $changeIds = implode(",",array_column($dbres,"id")); + //执行操作 + $res = D(self::model_name)->where("id in ({$changeIds}) and is_check = '{$oldval}'")->save(['is_check'=>$newval]); + if(empty($res)) return false; + //日志 + if($newval == 1){ + $op_name = "加入结算"; + $key = "addStatement"; + }else{ + $op_name = "移出结算"; + $key = "removeStatement"; + } + addOperationLog(['op_type'=>1,'key'=>$key,"op_name"=>$op_name,"content"=>json_encode(["ids"=>$_REQUEST['ids'],"is_check"=>$newval])]); + return true; + } + protected function setSelectDate() + { + $startDate = empty($_REQUEST['timestart']) ? date('Y-m-d', strtotime('-6 day', time())) : $_REQUEST['timestart']; + $endDate = empty($_REQUEST['timeend']) ? date('Y-m-d') : $_REQUEST['timeend']; + unset($_REQUEST['timestart']); + unset($_REQUEST['timeend']); + $startTime = strtotime($startDate); + $endTime = strtotime($endDate) + 86399; + $is_sub_data = false; + $lastSynTime = M("Kv","sub_",SUBSITE_DB)->where("`key` = 'sub_spend_syn_time'")->getField("value"); + if($lastSynTime >= $startTime && $lastSynTime < $endTime){ + $this->redirect(ACTION_NAME, array('timestart' => $startDate,"timeend"=>date('Y-m-d',$lastSynTime))); + } + if($lastSynTime >= $startTime && $lastSynTime <= $endTime){ + $is_sub_data = true; + $endTime = $lastSynTime; + } + if($lastSynTime > $endTime){ + $is_sub_data = true; + } + + $this->assign('startDate', date('Y-m-d',$startTime)); + $this->assign('endDate', date('Y-m-d',$endTime)); + $this->assign('isSubData', $is_sub_data ? 1 : 0); + $this->assign('lastSynTime', date('Y-m-d',$lastSynTime)); + return [$is_sub_data,$startTime,$endTime]; + } + + protected function getSpendList($p = 1, $map = array(), $order, $is_sub_data) + { + $page = intval($p); + $page = $page ? $page : 1; //默认显示第一页数据 + if (isset($_REQUEST['row'])) { + $row = $_REQUEST['row']; + } else { + $row = 10; + } + if($is_sub_data){ + $SpendModel = M("spend","tab_",SUBSITE_DB); + }else{ + $SpendModel = M("spend","tab_"); + } + + $list = $SpendModel + ->where($map) + ->page($page, $row) + ->order($order ? $order : 'pay_time desc') + ->select(); + $count = $SpendModel->where($map)->count(); + + if($count < 20000){ + $page = set_pagination_all($count, $row); + }else{ + $page = set_pagination($count, $row); + } + $data['data'] = $list; + if ($page) { + $data['page'] = $page; + } + return $data; + } + +} diff --git a/Application/Admin/Controller/SubSpendSetController.class.php b/Application/Admin/Controller/SubSpendSetController.class.php new file mode 100644 index 000000000..ea24935e1 --- /dev/null +++ b/Application/Admin/Controller/SubSpendSetController.class.php @@ -0,0 +1,107 @@ +1, + "partner_type"=>["in",[0,PARTNER_TYPE]] + ]; + + public function _initialize() + { + $this->SubSpendModel = M("spend","tab_",SUBSITE_DB);//指定子库 + $this->MainSpendModel = M("spend","tab_");//指定子库 + $this->SubKvModel = M("Kv","sub_",SUBSITE_DB);//指定子库 + $this->LastSynTime = $this->SubKvModel->where("`key` = 'sub_spend_syn_time'")->getField("value"); + } + + public function setSubSpend($time) + { + if($time == '') die("时间不能为空"); + //判断日期格式 + $patten = "/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/"; + if (!preg_match($patten, $time)) { + die("时间格式错误"); + } + if(strtotime($time)+86399-24*3600 > time()){ + die("时间不能大于当前"); + } + $this->SynTime = strtotime($time)+86399; + if($this->SynTime <= $this->LastSynTime){ + die("时间不能小于最后同步时间"); + } + $this->SynWhere['payed_time'] = ['between', [$this->LastSynTime-0+1,$this->SynTime]]; + + if($this->pageSetSpend()){ + $this->updateLastSynTime(); + }; + echo "sub_spend syn ok".PHP_EOL; + } + + public function recountSubSpend($begin,$end) + { + $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 > $this->LastSynTime){ + die("结束时间不能大于最后同步时间"); + } + $end = strtotime($end)+86399; + $begin = strtotime($begin); + $this->SynWhere['payed_time'] = ['between', [$begin,$end]]; + if($this->delSubSpend() !== false){ + echo "delete sub_spend ok".PHP_EOL; + $this->pageSetSpend(); + } + echo "sub_spend update and syn ok".PHP_EOL; + } + //分页插入同步数据 + protected function pageSetSpend() + { + $count = $this->getSynCount(); + if(empty($count)) return true; + $pageCount = ceil($count/self::LIMIT); + for ($i=1; $i <= $pageCount; $i++) { + $tres = $this->MainSpendModel->where($this->SynWhere)->page($i,self::LIMIT)->select(); + $addRes = $this->SubSpendModel->addAll($tres); + echo "[{$i}/{$pageCount}] {$addRes}".PHP_EOL; + } + return true; + } + //删除本地已同步数据 + protected function delSubSpend() + { + return $this->SubSpendModel->where($this->SynWhere)->delete(); + } + //获取需要同步的数量 + protected function getSynCount() + { + return $this->MainSpendModel->where($this->SynWhere)->count(); + } + //更新最后同步时间 + protected function updateLastSynTime() + { + return $this->SubKvModel->where("`key` = 'sub_spend_syn_time'")->save(['value'=>$this->SynTime]); + } +} diff --git a/Application/Admin/View/CompanyStatement/lists.html b/Application/Admin/View/CompanyStatement/lists.html index 0d913da05..483915996 100644 --- a/Application/Admin/View/CompanyStatement/lists.html +++ b/Application/Admin/View/CompanyStatement/lists.html @@ -289,6 +289,28 @@ + @@ -743,6 +765,74 @@ } }); }) + //子站新增结算单 + $("#subAddStatement").click(function(){ + var html = $("#addSubStatementTpl").html(); + layer.open({ + type: 1, + title: "新增结算单", + maxWidth:720, + closeBtn: 1, + shadeClose: false, + content: html, + success:function(){ + $("#addSubStatementSubmit").off("click"); + $("#addSubStatementTime").datetimepicker({ + format: 'yyyy-mm-dd', + language: "zh-CN", + showMeridian:true, + pickDate:true, + minView: 2, + autoclose: true, + pickTime:true, + todayBtn:true, + }); + $("#addSubStatementSubmit").on("click",function(){ + var subtime= $("#addSubStatementTime").val(); + + if(subtime == '') { + layer.msg('请先选择要结算的时间'); + return false; + } + + var lastSynTime = Date.parse($("#lastSynTime").val())+86400000; + var lastStatementTime = Date.parse($("#lastStatementTime").val()); + + var subtimenum = Date.parse(subtime); + + if(subtimenum > lastSynTime) { + layer.msg('新增结算时间必须小于固定订单时间'); + return false; + } + if(subtimenum <= lastStatementTime) { + layer.msg('所选时间已结算'); + return false; + } + + $.ajax({ + type: "POST", + url: "{:U('subAddStatement')}", + dataType: 'json', + async: true, + data: {statement_time:subtime}, + success:function(data){ + + if(data.status==1){ + layer.msg("" + data.info + ""); + setTimeout(function(){ + window.location.reload(); + },1500); + }else{ + layer.alert(data.info) + } + } + }); + + }) + } + }); + }) + //查看批注 $(".viewRemark").click(function () { var remark = $(this).data("remark"); diff --git a/Application/Admin/View/SubSpend/lists.html b/Application/Admin/View/SubSpend/lists.html new file mode 100644 index 000000000..6889b78da --- /dev/null +++ b/Application/Admin/View/SubSpend/lists.html @@ -0,0 +1,1008 @@ + + + + + + + + + + + +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ + - +
+ + +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + - +
+
+ +
+ + + +
+ +
+ + +
+ +
+ +
+ +
+
+ + +
+ +
+ + + +
+ 搜索 +
+
+ +
+
+
+ + {$vo} + +
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
支付订单号CP订单号 + + 充值时间 + 支付时间玩家账号游戏名称设备类型所属推广员所属市场专员所属商户充值ip区服ID游戏区服角色ID角色名称订单金额 + + 实付金额 + 充值方式订单状态游戏通知状态是否参与结算操作
aOh! 暂时还没有内容!
+ + {$data.pay_order_number} + + {$data.pay_order_number|encryptStr} + + + + {$data.extend} + + {$data.extend|encryptStr} + + {:set_show_time($data['pay_time'])} + + {:set_show_time($data['payed_time'])} + + ------ + + + + {$data.user_account} + + {$data.user_account|encryptStr} + + ({$data.small_account}){$data.game_name}{$data.sdk_version_name} + C('OFFICIEL_CHANNEL') + + {$data['promote_account']} + + + {$data.market_admin_username}{:getMerchantName($data['merchant_id'])}{$data.spend_ip}— —— —{$data.server_id}{$data.server_name}— —— —{$data.game_player_id}{$data.game_player_name}{$data.cost|default=0.00}{$data.pay_amount}{:get_pay_way($data['pay_way'])} + {:get_info_status($data['pay_status'],9)} + + {:get_info_status($data['pay_status'],9)} + + + {:get_info_status($data['pay_game_status'],14)} + + — — + + {:get_info_status($data['pay_game_status'],14)} + + {$data.is_check_str} + + + + 补单 + + + 补单 + + + + +
+ + + 通知到账 + + +
汇总 + 当页充值:{:null_to_0(array_sum(array_column(array_status2value('pay_status','',$list_data),'pay_amount')))} + + 累计充值:{$total}(此处只汇总充值成功的订单) +
+
+
+
+ + 导出 + + {$_page|default=''} +
+ + + + + + +
+ + + + if(C('COLOR_STYLE')=='blue_color') echo ' + + '; + + + + + + + + + diff --git a/Application/Admin/View/SubSpend/showChooseSubSpendCount.html b/Application/Admin/View/SubSpend/showChooseSubSpendCount.html new file mode 100644 index 000000000..2397374c6 --- /dev/null +++ b/Application/Admin/View/SubSpend/showChooseSubSpendCount.html @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 说明:换绑后的数据将归属到选择的公司 +
+
+ + +
+
+ +
+
+ +
+ + + + +
+ +
+ + +
+
所选订单统计:
+
+ + + + + + + + + + + + + + + + + + + + + +
公司金额
{$vo.company_name}{$vo.pay_amount}
合计:{$data['count']}
+
+
+ + +
+