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 = []; $last_time_ratio = []; foreach ($game_radio_data as $key => $value) { if (!isset($value['ratio'])) { $game_key[] = $key; $last_time_ratio[] = $value; } } foreach($last_time_ratio as $key => $value) { if($v['end_time'] == 0 || ($v['end_time'] >= $value['endtime'])){ //全段 if($v['begin_time'] <= $value['begintime']){ $tgr[$game_key[$key]]['ratio'] = !$is_inside?$v['ratio']:0; $tgr[$game_key[$key]]['turnover_ratio'] = !$is_inside?$v['turnover_ratio']:[]; continue; }elseif($v['end_time'] >= $value['begintime']){ //上分段 $tgr[$game_key[$key]]['endtime'] = $v['begin_time']-1; $tgr[] = ['begintime'=>$v['begin_time'],"endtime"=>$value['endtime'],"ratio"=>!$is_inside?$v['ratio']:0,"turnover_ratio"=>!$is_inside?$v['turnover_ratio']:[]]; continue; } } if($v['end_time'] < $value['endtime'] && $v['end_time'] != 0){ if($value['begintime'] < $v['begin_time']){ //中段 $tgr[$game_key[$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"=>$value['endtime']]; continue; } if($value['begintime'] > $v['begin_time']){ //下分段 $tgr[$game_key[$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'=>$value['begintime'],"endtime"=>$v['end_time']-0,"ratio"=>!$is_inside?$v['ratio']:0,"turnover_ratio"=>!$is_inside?$v['turnover_ratio']:[]]; continue; } if($value['begintime'] = $v['begin_time']){ $tgr[$game_key[$key]]['endtime'] = $v['end_time']; $tgr[$game_key[$key]]['ratio'] = !$is_inside?$v['ratio']:0; $tgr[$game_key[$key]]['turnover_ratio'] = !$is_inside?$v['turnover_ratio']:[]; $tgr[] = ['begintime'=>$v['end_time']-0+1,"endtime"=>$value['endtime']]; } } } // 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; } }