创建了一个收入表
sql
CREATE TABLE `income_logs` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL COMMENT '订单ID',
`type` int(11) NOT NULL DEFAULT '0' COMMENT ' 类型 0 支出 1收入',
`user_id` int(11) NOT NULL COMMENT '消费者用户',
`price` decimal(10,2) NOT NULL COMMENT '收益金额',
`agent_user_id` int(11) NOT NULL COMMENT '代理用户ID',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
`created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='收益明细';
每次有利润的时候创建一条代理收益记录,我们做月排行榜的时候不好计算,下面是计算月排行榜的代码
php
$startOfMonth = Carbon::now()->startOfMonth(); // 当前月的1日
$endOfMonth = Carbon::now()->endOfMonth(); // 当前月的最后一天
$data['list'] = Income::select('agent_user_id', DB::raw('SUM(price) as earnings'))
->whereBetween('created_at', [$startOfMonth, $endOfMonth]) // 指定日期范围
->groupBy('agent_user_id') // 按代理用户 ID 分组
->having(DB::raw('SUM(price)'), '>', 0) // 只显示收益大于0的数据
->orderBy('earnings', 'desc') // 按 earnings 降序排列
->take(50) // 限制返回结果数量
->get();
/* 补充用户信息 */
foreach ($data['list'] as $item) {
$user = User::where('id', $item['agent_user_id'])->first();
$item['avatar'] = $user['avatar'];
$item['id'] = $item['agent_user_id'];
$item['username'] = $user['username'];
$item['is_vip'] = $user['is_vip'];
}