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']; $mwhere = [ "company_belong"=>$company_belong, "relation_game_id"=>["in",$game_ids], "_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})" ]; $m_res = M("GameRatioMould","tab_")->where($mwhere)->select(); $modul_ratio = []; for ($i=0; $i < count($m_res); $i++) { $modul_ratio[$m_res[$i]['relation_game_id']] = $m_res[$i]; } unset($m_res); //设置默认 $game_ratio = []; $tmp_g = explode(",",$game_ids); for ($i=0; $i < count($tmp_g); $i++) { $game_ratio[$tmp_g[$i]] = [ ["begintime"=>$begintime,"endtime"=>$endtime] ]; } $map = [ "company_id"=>$company_id, "relation_game_id"=>['in',$game_ids], "_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})" ]; $res = $this->where($map)->order("begin_time asc")->select(); foreach($res as $k=>$v){ //获取最后一个数据 $tgr = &$game_ratio[$v['relation_game_id']]; $game_radio_data = $game_ratio[$v['relation_game_id']]; $game_key = 0; foreach ($game_radio_data as $key => $value) { if (!isset($value['ratio'])) { $game_key = $key; $last_time_ratio = $value; break; } } // $last_time_ratio = end($game_ratio[$v['relation_game_id']]); if($v['end_time'] == 0 || ($v['end_time'] >= $last_time_ratio['endtime'])){ //全段 if($v['begin_time'] <= $last_time_ratio['begintime']){ $tgr[$game_key]['ratio'] = !$is_inside?$v['ratio']:0; $tgr[$game_key]['turnover_ratio'] = !$is_inside?$v['turnover_ratio']:[]; continue; }else{ //上分段 $tgr[$game_key]['endtime'] = $v['begin_time']-1; $tgr[] = ['begintime'=>$v['begin_time'],"endtime"=>$last_time_ratio['endtime'],"ratio"=>!$is_inside?$v['ratio']:0,"turnover_ratio"=>!$is_inside?$v['turnover_ratio']:[]]; continue; } } if($v['end_time'] < $last_time_ratio['endtime']){ if($last_time_ratio['begintime'] < $v['begin_time']){ //中段 $tgr[$game_key]['endtime'] = $v['begin_time']-1; $tgr[] = ['begintime'=>$v['begin_time'],"endtime"=>$v['end_time'],"ratio"=>!$is_inside?$v['ratio']:0,"turnover_ratio"=>!$is_inside?$v['turnover_ratio']:[]]; $tgr[] = ['begintime'=>$v['end_time']-0+1,"endtime"=>$last_time_ratio['endtime']]; continue; } if($last_time_ratio['begintime'] > $v['begin_time']){ //下分段 $tgr[$game_key]['begintime'] = $v['end_time']-0+1; // $tgr[] = ['begintime'=>$v['end_time']-0+1,"endtime"=>$last_time_ratio['endtime'],"ratio"=>!$is_inside?$v['ratio']:0,"turnover_ratio"=>!$is_inside?$v['turnover_ratio']:[]]; $tgr[] = ['begintime'=>$last_time_ratio['begintime'],"endtime"=>$v['end_time']-0,"ratio"=>!$is_inside?$v['ratio']:0,"turnover_ratio"=>!$is_inside?$v['turnover_ratio']:[]]; continue; } if($last_time_ratio['begintime'] = $v['begin_time']){ $tgr[$game_key]['endtime'] = $v['end_time']; $tgr[$game_key]['ratio'] = !$is_inside?$v['ratio']:0; $tgr[$game_key]['turnover_ratio'] = !$is_inside?$v['turnover_ratio']:[]; $tgr[] = ['begintime'=>$v['end_time']-0+1,"endtime"=>$last_time_ratio['endtime']]; } } } $return_data = []; //模板填充 foreach($game_ratio as $k=>&$list){ foreach($list as $i => &$ratio){ if(!isset($ratio['ratio'])){ $mouldwhere = [ "company_belong"=>$company_belong, "relation_game_id"=>["in",(string)$k], "_string"=>"begin_time <={$ratio['endtime']} AND ( end_time = 0 OR end_time >= {$ratio['begintime']})" ]; $moulddata = M("GameRatioMould","tab_")->field("begin_time begintime,end_time endtime,ratio,turnover_ratio")->where($mouldwhere)->order("begin_time asc")->select(); if ($moulddata) { foreach ($moulddata as $key => $value) { if ($key == 0) { $value['begintime'] = $ratio['begintime']; } if (!$moulddata[$key+1]) { $value['endtime'] = $ratio['endtime']; } $return_data[$k][] = $value; } } else { $ratio['ratio'] = 0; $ratio['turnover_ratio'] =null; $return_data[$k][] = $ratio; } // if(isset($modul_ratio[$k]['ratio'])){ // $ratio['ratio'] = !$is_inside?$modul_ratio[$k]['ratio']:0; // $ratio['turnover_ratio'] = !$is_inside?$modul_ratio[$k]['turnover_ratio']:null; // }else{ // $ratio['ratio'] = 0; // $ratio['turnover_ratio'] =null; // } } else { $return_data[$k][] = $ratio; } } } return $return_data; } }