manghe/app/api/controller/Rank.php
2025-03-21 18:43:39 +08:00

178 lines
6.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare (strict_types=1);
namespace app\api\controller;
use app\api\controller\Base;
use app\common\model\GoodsList;
use app\common\model\RankWeek;
use app\common\model\RankMonth;
use app\common\model\User;
use app\common\model\Order;
use think\facade\Db;
use \think\Request;
class Rank extends Base
{
/**
* 周榜排行奖励
*/
public function rank_week()
{
$user = $this->getUser();
$user_id = $user['id'];
#当前日期
$sdefaultDate = date("Y-m-d");
#$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
$first = 1;
#获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$w = date('w', strtotime($sdefaultDate));
#获取本周开始日期,如果$w是0则表示周日减去 6 天
$week_start = date('Y-m-d', strtotime("$sdefaultDate -" . ($w ? $w - $first : 6) . ' days'));
#本周结束日期
$week_end = strtotime("$week_start +6 days");
$week_start = strtotime($week_start);
$week_end = $week_end + 86399;
#我的排名
$my_rank = '暂未上榜';
$my_prize_title = 0;
$my_prize_imgurl = 0;
$my_order_total = Order::field('order_total')
->where('user_id', '=', $user_id)
->where('addtime', 'between', [$week_start, $week_end])
->where('status', '=', 1)
->where('order_type', '<', 5)
->sum('order_total');
$my_order_total = $my_order_total ? $my_order_total : 0;
#排行榜
$data = Order::field('user_id,sum(`order_total`) as order_total')
->append(['user_info'])
->where('addtime', 'between', [$week_start, $week_end])
->where('status', '=', 1)
->where('order_type', '<', 5)
->group('user_id')
->order('order_total desc,user_id asc')
->limit(30)
->select()->toArray();
foreach ($data as $key => &$value) {
$rank = $key + 1;
$value['rank'] = $rank;
$value['order_total'] = $value['order_total'] * 1;
$value['nickname'] = $value['user_info']['nickname'];
$value['headimg'] = $value['user_info']['headimg'];
#奖品信息
$prize_info = GoodsList::field('title,imgurl')
->where('goods_id', '=', -1)
->where('rank', '=', $rank)
->find();
if ($prize_info) {
$value['prize_title'] = $prize_info['title'];
$value['prize_imgurl'] = imageUrl($prize_info['imgurl']);
} else {
$value['prize_title'] = '';
$value['prize_imgurl'] = '';
}
#判断会员是否在排名里面
if ($value['user_id'] == $user_id) {
$my_rank = $rank;
$my_prize_title = $value['prize_title'];
$my_prize_imgurl = $value['prize_imgurl'];
}
unset($value['user_info']);
}
$new_data = [
'date' => (date('m月d日', $week_start) . '-' . date('m月d日', $week_end)),
'end_date' => $week_end,
'my_rank' => [
'my_rank' => $my_rank,
'my_prize_title' => $my_prize_title,
'my_prize_imgurl' => $my_prize_imgurl,
'my_order_total' => $my_order_total,
'my_nickname' => $user['nickname'],
'my_headimg' => imageUrl($user['headimg']),
],
'data' => $data,
];
return $this->renderSuccess("请求成功", $new_data);
}
/**
* 月榜排行奖励
*/
public function rank_month()
{
$user = $this->getUser();
$user_id = $user['id'];
#获取本月开始的时间戳
$beginThismonth = mktime(0, 0, 0, (int)date('m'), 1, (int)date('Y'));
#获取本月结束的时间戳
$endThismonth = mktime(23, 59, 59, (int)date('m'), (int)date('t'), (int)date('Y'));
#我的排名
$my_rank = '暂未上榜';
$my_prize_title = 0;
$my_prize_imgurl = 0;
$my_order_total = Order::field('order_total')
->where('user_id', '=', $user_id)
->where('addtime', 'between', [$beginThismonth, $endThismonth])
->where('status', '=', 1)
->where('order_type', '<', 5)
->sum('order_total');
$my_order_total = $my_order_total ? $my_order_total : 0;
#排行榜
$data = Order::field('user_id,sum(`order_total`) as order_total')
->append(['user_info'])
->where('addtime', 'between', [$beginThismonth, $endThismonth])
->where('status', '=', 1)
->where('order_type', '<', 5)
->group('user_id')
->order('order_total desc,user_id asc')
->limit(30)
->select()->toArray();
foreach ($data as $key => &$value) {
$rank = $key + 1;
$value['rank'] = $rank;
$value['order_total'] = $value['order_total'] * 1;
$value['nickname'] = $value['user_info']['nickname'];
$value['headimg'] = $value['user_info']['headimg'];
#奖品信息
$prize_info = GoodsList::field('title,imgurl')
->where('goods_id', '=', -2)
->where('rank', '=', $rank)
->find();
if ($prize_info) {
$value['prize_title'] = $prize_info['title'];
$value['prize_imgurl'] = imageUrl($prize_info['imgurl']);
} else {
$value['prize_title'] = '';
$value['prize_imgurl'] = '';
}
#判断会员是否在排名里面
if ($value['user_id'] == $user_id) {
$my_rank = $rank;
$my_prize_title = $value['prize_title'];
$my_prize_imgurl = $value['prize_imgurl'];
}
unset($value['user_info']);
}
$new_data = [
'date' => (date('m月d日', $beginThismonth) . '-' . date('m月d日', $endThismonth)),
'end_date' => $endThismonth,
'my_rank' => [
'my_rank' => $my_rank,
'my_prize_title' => $my_prize_title,
'my_prize_imgurl' => $my_prize_imgurl,
'my_order_total' => $my_order_total,
'my_nickname' => $user['nickname'],
'my_headimg' => imageUrl($user['headimg']),
],
'data' => $data,
];
return $this->renderSuccess("请求成功", $new_data);
}
}