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; } protected 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"=>'' ]; } } }