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.
310 lines
12 KiB
PHP
310 lines
12 KiB
PHP
<?php
|
|
|
|
namespace Admin\Model;
|
|
|
|
use Think\Model;
|
|
|
|
class CompanyGameRatioModel extends Model
|
|
{
|
|
// 数据表前缀
|
|
protected $tablePrefix = 'tab_';
|
|
|
|
public function getPromoteCompanyGameRatio($company_id,$game_ids,$begintime,$endtime,$company_belong=false){
|
|
//获取默认比例
|
|
if($company_belong === false){
|
|
$company_belong = M("PromoteCompany","tab_")->field("company_belong")->where("id='{$company_id}'")->find()['company_belong'];
|
|
}
|
|
|
|
$is_inside = M("PromoteCompany","tab_")->field("is_inside")->where("id='{$company_id}'")->find()['is_inside'];
|
|
|
|
|
|
|
|
//设置默认
|
|
$game_ratio = [];
|
|
$tmp_g = explode(",",$game_ids);
|
|
for ($i=0; $i < count($tmp_g); $i++) {
|
|
$game_id = $tmp_g[$i];
|
|
if ($is_inside){
|
|
$game_ratio[$game_id] = [[
|
|
"begintime" => $begintime,
|
|
"endtime"=>$endtime,
|
|
"ratio"=>0,
|
|
"turnover_ratio"=>''
|
|
]];
|
|
}else{
|
|
$company_belong_game = M("company_belong_game","tab_")
|
|
->field("game_ids,begin_time,end_time")
|
|
->where("((begin_time<={$begintime} and (end_time >={$begintime} or end_time=0)) or (begin_time<={$endtime} and end_time >={$endtime}) or (end_time>={$begintime} and end_time <={$endtime})) AND game_ids like '%,{$game_id},%'")
|
|
->order("begin_time ASC")
|
|
->select();
|
|
|
|
if ($company_belong == 1 && !empty($company_belong_game)) {
|
|
|
|
$company_begin_time = $begintime;
|
|
$company_end_time = $endtime;
|
|
$game_ratio[$game_id] = [];
|
|
foreach($company_belong_game as $key => $value) {
|
|
|
|
if ($value['begin_time'] > $company_begin_time) {
|
|
$game_ratio[$game_id] = array_merge($game_ratio[$game_id],$this->getGameRadio($company_id,$game_id,$company_belong,$company_begin_time,$value['begin_time']-1));
|
|
|
|
if ($value['end_time'] >= $company_end_time || !$value['end_time']) {
|
|
// $game_ratio[$game_id] = array_merge($game_ratio[$game_id],[[
|
|
// "begintime" => $value['begin_time'],
|
|
// "endtime"=>$company_end_time,
|
|
// "ratio"=>0,
|
|
// "turnover_ratio"=>''
|
|
// ]]);
|
|
} else {
|
|
// $game_ratio[$game_id] = array_merge($game_ratio[$game_id],[[
|
|
// "begintime" => $value['begin_time'],
|
|
// "endtime"=>$value['end_time']+86399,
|
|
// "ratio"=>0,
|
|
// "turnover_ratio"=>''
|
|
// ]]);
|
|
if (!$company_belong_game[$key+1]['begin_time']) {
|
|
// $game_ratio[$game_id] = array_merge($game_ratio[$game_id],[[
|
|
// "begintime" => $value['end_time']+86400,
|
|
// "endtime"=>$company_end_time,
|
|
// "ratio"=>0,
|
|
// "turnover_ratio"=>''
|
|
// ]]);
|
|
$game_ratio[$game_id] = array_merge($game_ratio[$game_id],$this->getGameRadio($company_id,$game_id,$company_belong,$value['end_time']+86400,$company_end_time));
|
|
} else {
|
|
$company_begin_time = $value['end_time'];
|
|
}
|
|
}
|
|
} else {
|
|
if ($value['end_time'] >= $company_end_time || !$value['end_time']) {
|
|
// $game_ratio[$game_id] = array_merge($game_ratio[$game_id],[[
|
|
// "begintime" => $company_begin_time,
|
|
// "endtime"=>$company_end_time,
|
|
// "ratio"=>0,
|
|
// "turnover_ratio"=>''
|
|
// ]]);
|
|
} else {
|
|
// $game_ratio[$game_id] = array_merge($game_ratio[$game_id],[[
|
|
// "begintime" => $company_begin_time,
|
|
// "endtime"=>$value['end_time']+86399,
|
|
// "ratio"=>0,
|
|
// "turnover_ratio"=>''
|
|
// ]]);
|
|
if (!$company_belong_game[$key+1]['begin_time']) {
|
|
$game_ratio[$game_id] = array_merge($game_ratio[$game_id],$this->getGameRadio($company_id,$game_id,$company_belong,$value['end_time']+86400,$company_end_time));
|
|
} else {
|
|
$company_begin_time = $value['end_time'];
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
// if ($company_id == 12&&$game_id == 191) {
|
|
// dump(2);
|
|
// }
|
|
$game_ratio[$game_id] = $this->getGameRadio($company_id,$game_id,$company_belong,$begintime,$endtime);
|
|
}
|
|
|
|
}
|
|
}
|
|
return $game_ratio;
|
|
|
|
}
|
|
|
|
public function getGameRadio($company_id,$game_id,$company_belong,$begintime,$endtime)
|
|
{
|
|
$map = [
|
|
"company_id"=>$company_id,
|
|
"relation_game_id"=>$game_id,
|
|
"_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})",
|
|
];
|
|
|
|
$res = $this->where($map)->order("begin_time asc")->select();
|
|
|
|
if (empty($res)) {
|
|
$map = [
|
|
"company_id"=>0,
|
|
"relation_game_id"=>$game_id,
|
|
"_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})",
|
|
"company_belong"=>$company_belong,
|
|
];
|
|
|
|
$res = $this->where($map)->order("begin_time asc")->select();
|
|
}
|
|
|
|
$data = [];
|
|
if(empty($res)){
|
|
$this->getGameMouldRadio($data,$game_id,$company_belong,$begintime,$endtime);
|
|
return $data;
|
|
}
|
|
|
|
foreach ($res as $ke => $va) {
|
|
if($va['begin_time'] <= $begintime){
|
|
//
|
|
if($va['end_time'] == 0 || $va['end_time'] >= $endtime){
|
|
//全段
|
|
$tmp["begintime"] = $begintime;
|
|
$tmp["endtime"] = $endtime;
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
$data[] = $tmp;
|
|
break;
|
|
}
|
|
if($va['end_time'] > 0 && $va['end_time'] < $endtime){
|
|
//上分
|
|
$tmp["begintime"] = $begintime;
|
|
$tmp["endtime"] = $va['end_time'];
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
//插入空段
|
|
$begintime = $va['end_time']-0+1;
|
|
$data[] = $tmp;
|
|
continue;
|
|
}
|
|
}
|
|
if($va['begin_time'] > $begintime){
|
|
//空段 模板比例
|
|
$this->getGameMouldRadio($data,$game_id,$company_belong,$begintime,$va['begin_time']-1);
|
|
|
|
//补充内容
|
|
if($va['end_time'] == 0 || $va['end_time'] >= $endtime){
|
|
$tmp["begintime"] = $va['begin_time'];
|
|
$tmp["endtime"] = $endtime;
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
$data[] = $tmp;
|
|
break;
|
|
}
|
|
if($va['end_time'] > 0 && $va['end_time'] < $endtime){
|
|
//上分
|
|
$tmp["begintime"] = $va['begin_time'];
|
|
$tmp["endtime"] = $va['end_time'];
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
//插入空段
|
|
$begintime = $va['end_time']-0+1;
|
|
$data[] = $tmp;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
//获取最后一段
|
|
$end = end($data)['endtime'];
|
|
if($end !== $endtime){
|
|
//空段 模板比例
|
|
$this->getGameMouldRadio($data,$game_id,$company_belong,$end+1,$endtime);
|
|
}
|
|
|
|
// foreach ($data as $ke => &$va) {
|
|
// $va['begintime'] = \date("Y-m-d H:i:s", $va['begintime']);
|
|
// $va['endtime'] = \date("Y-m-d H:i:s", $va['endtime']);
|
|
// }
|
|
return $data;
|
|
|
|
|
|
}
|
|
//获取模板比例
|
|
protected function getGameMouldRadio(&$data,$game_id,$company_belong,$begintime,$endtime){
|
|
|
|
$where = [
|
|
"company_belong"=>$company_belong,
|
|
"relation_game_id"=>$game_id,
|
|
"_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})"
|
|
];
|
|
$res = M("GameRatioMould","tab_")->where($where)->order("begin_time asc")->select();
|
|
if(empty($res)){
|
|
$data[] = [
|
|
"begintime"=>$begintime,
|
|
"endtime"=>$endtime,
|
|
"ratio"=>0,
|
|
"turnover_ratio"=>''
|
|
];
|
|
return ;
|
|
}
|
|
foreach ($res as $ke => $va) {
|
|
if($va['begin_time'] <= $begintime){
|
|
//
|
|
if($va['end_time'] == 0 || $va['end_time'] >= $endtime){
|
|
//全段
|
|
$tmp["begintime"] = $begintime;
|
|
$tmp["endtime"] = $endtime;
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
$data[] = $tmp;
|
|
return;
|
|
}
|
|
if($va['end_time'] > 0 && $va['end_time'] < $endtime){
|
|
//上分
|
|
$tmp["begintime"] = $begintime;
|
|
$tmp["endtime"] = $va['end_time'];
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
//插入空段
|
|
$begintime = $va['end_time']-0+1;
|
|
$data[] = $tmp;
|
|
continue;
|
|
}
|
|
}
|
|
if($va['begin_time'] > $begintime){
|
|
//补充空段
|
|
$bank["begintime"] = $begintime;
|
|
$bank["endtime"] = $va['begin_time']-1;
|
|
$bank["ratio"] = 0;
|
|
$bank["turnover_ratio"] = '';
|
|
$data[] = $bank;
|
|
//补充内容
|
|
if($va['end_time'] == 0 || $va['end_time'] >= $endtime){
|
|
$tmp["begintime"] = $va['begin_time'];
|
|
$tmp["endtime"] = $endtime;
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
$data[] = $tmp;
|
|
break;
|
|
}
|
|
if($va['end_time'] > 0 && $va['end_time'] < $endtime){
|
|
//上分
|
|
$tmp["begintime"] = $va['begin_time'];
|
|
$tmp["endtime"] = $va['end_time'];
|
|
$tmp['ratio'] = $va['ratio'];
|
|
$tmp['turnover_ratio'] = $va['turnover_ratio'];
|
|
//插入空段
|
|
$begintime = $va['end_time']-0+1;
|
|
$data[] = $tmp;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
$end = end($data)['endtime'];
|
|
if($end !== $endtime){
|
|
$data[] = [
|
|
"begintime"=>$end+1,
|
|
"endtime"=>$endtime,
|
|
"ratio"=>0,
|
|
"turnover_ratio"=>''
|
|
];
|
|
}
|
|
}
|
|
|
|
public function getTurnoverRatio($amount,$ratio,$turnover_ratio)
|
|
{
|
|
if(empty($turnover_ratio)){
|
|
return $ratio;
|
|
}
|
|
if(!is_array($turnover_ratio)){
|
|
$turnover_ratio = json_decode($turnover_ratio,true);
|
|
}
|
|
foreach($turnover_ratio as $k=>$v){
|
|
if($v['instanceof'] == 1){
|
|
if($amount >= $v['turnover']){
|
|
$ratio = $v['ratio'];
|
|
}
|
|
}else{
|
|
if($amount > $v['turnover']){
|
|
$ratio = $v['ratio'];
|
|
}
|
|
}
|
|
}
|
|
return $ratio;
|
|
}
|
|
} |