/**
* 收益排行
* 1每日,2每周排行
*/
public function profitRank(){
$user_id = $this->_user['id'];
$params = $this->_params;
$validate = $this->validate($params, 'Distributor.profitRank');
if ($validate !== true) {
return $this->error($validate, ResponseCode::ERROR);
}
$type = $params['type']; //1每日 2每周排行
$distributor_id = $params['distributor_id']; //分销员id
$data = [];
$msg = '';
if($type == 1){
$so_time = date('Y-m-d'); //今天
$where['rank_date'] = $so_time;
$list = DistributorRankModel::alias('dr')
->leftJoin('user u','dr.user_id = u.id')
->where($where)
->order('dr.RB desc')
->field('dr.id,dr.distributor_id,dr.RB,dr.rank_date,u.avatar,u.nickname')
->select();
$my = [];
$msg = '每日收益排行';
if(!empty($list)){
foreach ($list as $k => $v) {
$list[$k]['rank'] = $k+1;
if($v['distributor_id'] == $distributor_id){
$my = $list[$k];
}
}
}
}
if($type == 2){
$week = $this->get_week();
$list = DistributorRankModel::alias('dr')
->leftJoin('user u','dr.user_id = u.id')
->where('dr.rank_date','in',$week)
->field('dr.id,dr.user_id,dr.distributor_id,dr.RB,dr.rank_date,u.avatar,u.nickname')
->select();
$my = [];
$msg = '每周收益排行';
if(!empty($list)){
$list = $this->formatArray($list);
$rb = array_column($list,'RB'); //取出二维数组的某一列
array_multisort($rb,SORT_DESC,$list); //二维数组的排序
foreach ($list as $k => $v) {
$list[$k]['rank'] = $k+1;
if($v['distributor_id'] == $distributor_id){
$my = $list[$k];
}
}
}
}
$data['list'] = $list;
$data['my'] = $my;
return $this->success($data,$msg);
}
/**
* 处理二维数组相同user_id,数量相加,合并用户id,返回一个数组
* @param $array
* @return array
*/
public function formatArray($array)
{
$newdata = array();
foreach ($array as $k=>$v){
if(!isset($newdata[$v['user_id']])){ //如果不存在就写入
$newdata[$v['user_id']] = $v;
}else{
$newdata[$v['user_id']]['RB'] += $v['RB']; //存在就先存起来
}
}
return array_values($newdata); //获取二维数组的键值
}
/**
* 获取本周所有日期
*/
function get_week($time = '', $format='Y-m-d'){
$time = $time != '' ? $time : time();
//获取当前周
$week = date('w', $time);
$date = [];
for ($i=1; $i<=7; $i++){
$date[$i] = date($format ,strtotime( '+' . $i-$week .' days', $time));
}
return $date;
}