You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

369 lines
14 KiB
PHP

<?php
// 游戏默认分成比例模板
namespace Admin\Controller;
class CompanySystemRatioController extends AdminController
{
private $api = "http://admin.chengfeng123.cn/index.php?g=Api&m=CpJuheCompany&a=ratioIndex";
public function _initialize()
{
$this->admininfo = $_SESSION['onethink_admin']['user_auth'];
parent::_initialize();
}
//比例类型 0-内团 1-外团 2-分发联盟 3上游游戏 4聚合比例
private $checkRatio = [0,1,2,3,4];
public function index()
{
$params = I('get.');
$page = $params['p'] ? intval($params['p']) : 1;
$row = $params['row'] ? intval($params['row']) : 10;
//权限分配
if(!IS_ROOT){
$this->OpAuthList= getModuleControllerAuth();
}
$map = [];
$data = M("game_ratio_mould","tab_")->where($map)->select();
$handleData=[];
$handleData = $this->getAggregateData();
foreach ($data as $key => $value) {
$handleData[$value['relation_game_id']][$value['company_belong']][] = ['turnover'=>"0.00",'ratio'=>$value['ratio'],'instanceof'=>1];
$handleData[$value['relation_game_id']][$value['company_belong']]=array_merge($handleData[$value['relation_game_id']][$value['company_belong']],json_decode($value['turnover_ratio'],true)??[]);
}
$handleData = $this->getCpGameRatio($handleData);
$data = $this->handleRatio($handleData);
$checkData = $handleData;
// dump($data);die();
$gameData = M("game","tab_")->field("original_package_name,relation_game_name game_name,game_type_name,relation_game_id game_id")
->where($map)
->group("original_package_name")
->select();
$gameOriginData = M("game","tab_")->field("original_package_name,relation_game_name game_name,relation_game_id")->where($map)->group("relation_game_id")->select();
//类型区分
$handleGameData = [];
foreach ($gameData as $key => $value) {
if ($value['game_type_name']) {
$handleGameData[$value['game_type_name']][] = $value;
}
}
//游戏原包名区分
$handleOriginData = [];
foreach ($gameOriginData as $key => $value) {
if ($value['original_package_name']) {
$handleOriginData[$value['original_package_name']][] = $value;
}
}
//将比例打进游戏中
foreach ($handleOriginData as $key => $value) {
foreach ($value as $k => $v) {
$handleOriginData[$key][$k]['ratio_data'] = $data[$v['relation_game_id']];
}
}
//处理数据
$data = [];
foreach ($handleGameData as $key => $value) {
$handleData = [];
foreach ($value as $k => $v) {
// unset($handleGameData[$key][$k]['original_package_name']);
$handleGameData[$key][$k]['game_data'] = $handleOriginData[$v['original_package_name']];
}
$handleData['game_type'] = $key;
$handleData['data'] = $handleGameData[$key];
$data[] = $handleData;
}
// dump($data);die();
foreach ($data as $key => $value) {
foreach ($value['data'] as $k => $v) {
if (!$v['game_data']) {
$data[$key]['data'][$k]['row'] = 1;
$data[$key]['row'] += 1;
}
foreach ($v['game_data'] as $vk => $vv) {
$data[$key]['data'][$k]['game_data'][$vk]['row'] = $vv['ratio_data']?count($vv['ratio_data']):1;
$data[$key]['data'][$k]['row'] += $vv['ratio_data']?count($vv['ratio_data']):1;
$data[$key]['row'] += $vv['ratio_data']?count($vv['ratio_data']):1;
// if (!$vv['ratio_data']) {
// $data[$key]['data'][$k]['game_data'][$vk]['row']=1;
// }
foreach($vv['ratio_data'] as $vvk=>$vvv) {
if (count($data[$key]['data'][$k]['game_data'][$vk]['ratio_data']) == 1) {
$data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk]['turnover'] = '无阶梯';
break;
} else {
if ($vvv['is_equal'] != 1) {
if (($data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk+1]['turnover'] == $vvv['turnover'] && !$data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk+2]['turnover'])
||!($data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk+1]['turnover'])) {
$end = '∞';
} elseif($data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk+1]['turnover'] == $vvv['turnover'] && $data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk+2]['turnover']) {
$end = floatval($data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk+2]['turnover']);
} else {
$end = floatval($data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk+1]['turnover']);
}
$data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk]['turnover']
= floatval($vvv['turnover']).($vvv['instanceof']==1?'<=':'<').'月流水'.
('<').
($end);
} else {
if ($vvv['instanceof'] != 1) {
foreach ($this->checkRatio as $ck => $cv) {
// if($v['game_id'] == 187) {
//
// dump($checkData[$v['game_id']][$cv]);
// dump($vvv);
// }
foreach ($checkData[$v['game_id']][$cv] as $gk=> $gv){
// if($cv == 2){
// dump($gv);
// dump($vvv['turnover']);
// die();
if($gv['turnover'] < $vvv['turnover']) {
$checkInstanceof = array_column($checkData[$v['game_id']][$cv],'instanceof');
// if($v['game_id'] == 187 && $cv == 2) {
// dump($checkData[$v['game_id']][$cv]);
// dump($vvv['turnover']);
// dump(in_array(3,$checkInstanceof));
// }
// in_array($checkInstanceof,2);
// die();
if (in_array(2,$checkInstanceof)) {
$data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk][$cv] = $gv['ratio'];
}
} else {
break;
}
// }
}
}
}
$data[$key]['data'][$k]['game_data'][$vk]['ratio_data'][$vvk]['turnover']=
'月流水='.$vvv['turnover'];
}
}
}
}
}
}
// die();
if ($_REQUEST['export']) {
$this->assign("is_export",true);
$this->assign("data",$data);
$time = date("Y-m-d",time());
$this->assign('title',"橙枫科技产品分成比例体系[{$time}]");
$this->display("export");die();
}
$count = count($data);
$page = set_pagination($count, $row,$params);
if($page) {
$this->assign('_page', $page);
}
$size = $row;//每页显示的记录数
$data = array_slice($data, (($params['p']??1) - 1) * $size, $size);
// dump($data);die();
$this->assign("data",$data);
$this->display();
}
//获取上游游戏比例
function getCpGameRatio($handleData = []) {
$cpGameData = M('cp_game_ratio', 'tab_')->where(['is_del'=>"0"])->order('id asc')->select();
foreach ($cpGameData as $key => $value) {
$cpRatio['turnover'] = $value['begin_total_amount'];
$cpRatio['instanceof'] = $value['instanceof'];
$cpRatio['ratio'] = $value['ratio'];
$handleData[$value['game_id']][3][] =$cpRatio;
}
return $handleData;
}
//将比例整合
function handleRatio($handleData = []) {
$finalData = [];
// dump($handleData);die();
foreach ($handleData as $key => $value) {
foreach ($value as $vk => $vv) {
foreach ($vv as $k => $v) {
if ($finalData[$key][$v['turnover']]) {
$finalData[$key][$v['turnover']][$vk] = $v["ratio"];
// if($v["instanceof"] != 0 && ($vk==0||$vk==1||$vk==2) && $handleData[$key][$vk][$k-1]["ratio"]) {
// $finalData[$key][$v['turnover']][$vk] = $handleData[$key][$vk][$k-1]["ratio"];
// }
//判断是否有相同值且一个是>=另一个是>的情况
if ($finalData[$key][$v['turnover']]["instanceof"] != $v["instanceof"]) {
$finalData[$key][$v['turnover']]["instanceof"] = 0;
$finalData[$key][$v['turnover']."ed"] = $finalData[$key][$v['turnover']];
$finalData[$key][$v['turnover']."ed"]['is_equal'] = 1;
}
continue;
}
$v['is_equal'] = 0;
$v[$vk] = $v["ratio"];
unset($v["ratio"]);
$finalData[$key][$v['turnover']] = $v;
}
}
}
foreach ($finalData as $key => $value) {
$last_names = array_column($finalData[$key],'turnover');
array_multisort($last_names,SORT_ASC,$finalData[$key]);
}
// dump($finalData);die();
$data = [];
foreach ($finalData as $key => $value) {
foreach ($value as $k => $v) {
foreach ($this->checkRatio as $ck=>$cv) {
if ($k == "0.00" && !$finalData[$key][$k][$cv]) {
$finalData[$key][$k][$cv] = "0.00";
}
if ($k != "0.00" && !$finalData[$key][$k][$cv]) {
//查找上一个比例
$finalData[$key][$k][$cv] = $data[$key][count($data[$key])-1][$cv];
}
}
// dump($finalData[$key]);
$data[$key][] = $finalData[$key][$k];
}
}
// dump($data);die();
// foreach ($data as $key => $value) {
//
// $last_names = array_column($data[$key],'turnover');
// array_multisort($last_names,SORT_ASC,$data[$key]);
//
// }
// dump($data);
return $data;
}
function getAggregateData() {
$request = [];
$request['remote'] = 1;
$aggregateData = json_decode(curl_post($this->api,$request),true);
// dump($aggregateData);
$gameData = M("game","tab_")
->field("unique_code,relation_game_id game_id")
->where('unique_code is not null or unique_code!=""')
->group("unique_code")
->select();
// dump($gameData);
$gameUniqueData = [];
foreach ($gameData as $key => $value ) {
$gameUniqueData[$value['unique_code']] = $value['game_id'];
}
$handleAggregateData = [];
foreach ($aggregateData as $key => $value) {
if ($value['unique_code']) {
$explodeData = explode('|',$value['exploitation_rate']);
$explodeDefauleData = explode('|',$value['default_exploitation_rate']);
$temporaryNum = 100;
$temporaryData = [];
foreach ($explodeDefauleData as $k => $v) {
// dump($v);
if ($v<$temporaryNum && $v>0) {
$temporaryData = [];
$temporaryNum = $v;
$temporaryData[] = ['turnover'=>'0.00','instanceof'=>1,'ratio'=>number_format(100.00-$v,2,'.','')];
$defauleData = json_decode($explodeData[$k],true);
foreach ($defauleData as $ek => $ev) {
$temporaryData[] = ['turnover'=>number_format($ev['money'],2,'.',''),'instanceof'=>$ev['symbol'],'ratio'=>number_format(100.00-$ev['rate'],2,'.','')];
}
// dump($temporaryData);
}
}
if($temporaryData) {
$handleAggregateData[$gameUniqueData[$value['unique_code']]][4] = $temporaryData;
}
}
}
return $handleAggregateData;
}
}