Commit fdbfe462 authored by 龚双喜's avatar 龚双喜

调整佣金排行接口

parent 8b06f02b
......@@ -14,66 +14,90 @@ class Ranking extends Commission
/**
* 佣金排行榜
* 按已结算佣金金额排序
* 按用户表佣金字段排序
*/
public function commission()
{
$limit = $this->request->param('limit', 20);
$timeType = $this->request->param('time_type', 'all'); // all|month|week|day
$query = RewardModel::field([
'agent_id',
'sum(commission) as total_commission',
'count(distinct order_id) as order_count'
// 从User表直接读取commission字段
$query = UserModel::field([
'id as user_id',
'nickname',
'avatar',
'commission as total_commission'
])
->where('status', RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED)
->group('agent_id');
->where('commission', '>', 0)
->where('status', 'normal');
// 时间筛选(根据佣金记录计算时间范围内的佣金)
if ($timeType !== 'all') {
// 查询在时间范围内有佣金记录的用户
$rewardQuery = RewardModel::field('agent_id')
->where('status', RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED);
// 时间筛选
switch ($timeType) {
case 'month':
$query->whereTime('commission_time', 'month');
$rewardQuery->whereTime('commission_time', 'month');
break;
case 'week':
$query->whereTime('commission_time', 'week');
$rewardQuery->whereTime('commission_time', 'week');
break;
case 'day':
$query->whereTime('commission_time', 'today');
$rewardQuery->whereTime('commission_time', 'today');
break;
}
$rankings = $query->order('total_commission', 'desc')
$agentIds = $rewardQuery->group('agent_id')->column('agent_id');
$query->whereIn('id', $agentIds);
}
$rankings = $query->order('commission', 'desc')
->limit($limit)
->select();
if (empty($rankings)) {
$this->success('获取成功', []);
$this->success('获取成功', [
'list' => [],
'current_user_rank' => null
]);
}
$agentIds = array_column($rankings, 'agent_id');
$result = [];
foreach ($rankings as $index => $item) {
// 查询订单数量
$orderCount = 0;
if ($timeType !== 'all') {
$orderQuery = RewardModel::where('agent_id', $item['user_id'])
->where('status', RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED);
// 获取用户信息
$users = UserModel::whereIn('id', $agentIds)
->field('id, nickname, avatar')
->select();
switch ($timeType) {
case 'month':
$orderQuery->whereTime('commission_time', 'month');
break;
case 'week':
$orderQuery->whereTime('commission_time', 'week');
break;
case 'day':
$orderQuery->whereTime('commission_time', 'today');
break;
}
$userMap = [];
if (is_array($users)) {
$userMap = array_column($users, null, 'id');
$orderCount = $orderQuery->count('distinct order_id');
} else {
$userMap = $users->column(null, 'id');
$orderCount = RewardModel::where('agent_id', $item['user_id'])
->where('status', RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED)
->count('distinct order_id');
}
$result = [];
foreach ($rankings as $index => $item) {
$user = $userMap[$item->agent_id] ?? null;
$result[] = [
'rank' => $index + 1,
'user_id' => $item->agent_id,
'nickname' => $user ? $user->nickname : '匿名用户', //string_hide($user->nickname, 5) : '匿名用户',
'avatar' => $user ? $user->avatar : '',
'total_commission' => round($item->total_commission, 2),
'order_count' => $item->order_count
'user_id' => $item['user_id'],
'nickname' => $item['nickname'] ?: '匿名用户',
'avatar' => $item['avatar'] ?: '',
'total_commission' => round($item['total_commission'], 2),
'order_count' => $orderCount
];
}
......@@ -179,7 +203,16 @@ class Ranking extends Commission
}
}
// 查询当前用户的佣金
// 查询当前用户信息
$user = UserModel::get($userId);
if (!$user || $user->commission <= 0) {
return null;
}
$totalCommission = $user->commission;
// 时间筛选时,检查用户是否有对应时间范围内的佣金记录
if ($timeType !== 'all') {
$query = RewardModel::where('agent_id', $userId)
->where('status', RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED);
......@@ -195,38 +228,41 @@ class Ranking extends Commission
break;
}
$totalCommission = $query->sum('commission');
$orderCount = $query->count('distinct order_id');
if ($totalCommission <= 0) {
if (!$query->find()) {
return null;
}
}
// 计算排名
$rankWhereQuery = RewardModel::where('status', RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED);
// 查询订单数量
$orderQuery = RewardModel::where('agent_id', $userId)
->where('status', RewardModel::COMMISSION_REWARD_STATUS_ACCOUNTED);
if ($timeType !== 'all') {
switch ($timeType) {
case 'month':
$rankWhereQuery->whereTime('commission_time', 'month');
$orderQuery->whereTime('commission_time', 'month');
break;
case 'week':
$rankWhereQuery->whereTime('commission_time', 'week');
$orderQuery->whereTime('commission_time', 'week');
break;
case 'day':
$rankWhereQuery->whereTime('commission_time', 'today');
$orderQuery->whereTime('commission_time', 'today');
break;
}
}
$rank = $rankWhereQuery->group('agent_id')
->having('sum(commission) > ' . $totalCommission)
->count() + 1;
$orderCount = $orderQuery->count('distinct order_id');
$user = UserModel::get($userId);
// 计算排名:统计佣金大于当前用户的人数
$rank = UserModel::where('commission', '>', $totalCommission)
->where('status', 'normal')
->count() + 1;
return [
'rank' => $rank,
'user_id' => $userId,
'nickname' => $user ? $user->nickname : '我',
'avatar' => $user ? $user->avatar : '',
'nickname' => $user->nickname ?: '我',
'avatar' => $user->avatar ?: '',
'total_commission' => round($totalCommission, 2),
'order_count' => $orderCount,
'is_out_list' => true
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment