|
|
<?php
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
use App\Enums\SettingKeyEnum;
|
|
|
use App\Models\Subscribe;
|
|
|
use App\Models\User;
|
|
|
use App\Utils\HomeCacheDataUtil;
|
|
|
|
|
|
class HomeController extends Controller
|
|
|
{
|
|
|
/**
|
|
|
* 显示首页的数据
|
|
|
*
|
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 返回首页视图
|
|
|
*/
|
|
|
public function index()
|
|
|
{
|
|
|
// 设置缓存过期时间,随机增加 10 到 30 秒
|
|
|
$ttl = 120 + mt_rand(10, 30);
|
|
|
|
|
|
// 获取后台排序好的九个分类,并关联商品总数
|
|
|
// 如果没有缓存的 key,存入缓存中,防止用户未配置好任务调度时访问首页
|
|
|
// 数据将不会从首页更新,每分钟任务调度更新,请务必配置好
|
|
|
$categories = HomeCacheDataUtil::categories($ttl);
|
|
|
$hotProducts = HomeCacheDataUtil::hotProducts($ttl);
|
|
|
$latestProducts = HomeCacheDataUtil::latestProducts($ttl);
|
|
|
$users = HomeCacheDataUtil::users($ttl);
|
|
|
|
|
|
// 获取秒杀数据
|
|
|
$secKills = HomeCacheDataUtil::getSeckillData();
|
|
|
|
|
|
/**
|
|
|
* 当前登录用户
|
|
|
*
|
|
|
* @var $loginUser User
|
|
|
*/
|
|
|
// 如果用户已登录,加载其订阅信息
|
|
|
if ($loginUser = auth()->user()) {
|
|
|
$loginUser->load('subscribe');
|
|
|
}
|
|
|
|
|
|
// 查询优惠券模板
|
|
|
$couponTemplates = HomeCacheDataUtil::couponTemplates();
|
|
|
|
|
|
// 检查秒杀功能是否开启
|
|
|
$setting = new SettingKeyEnum(SettingKeyEnum::IS_OPEN_SECKILL);
|
|
|
$isOpenSeckill = setting($setting) == 1; // 1 表示开启
|
|
|
|
|
|
// 返回首页视图,并传递所需的数据
|
|
|
return view(
|
|
|
'homes.index',
|
|
|
compact('categories', 'hotProducts', 'latestProducts', 'users', 'secKills', 'loginUser', 'isOpenSeckill', 'couponTemplates')
|
|
|
);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取消订阅功能
|
|
|
*
|
|
|
* @param string $email 加密的邮箱地址
|
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 返回取消订阅的结果视图
|
|
|
*/
|
|
|
public function unSubscribe($email)
|
|
|
{
|
|
|
try {
|
|
|
// 解密邮箱地址
|
|
|
$email = decrypt($email);
|
|
|
} catch (\Exception $e) {
|
|
|
// 如果解密失败,返回错误提示视图
|
|
|
return view('hint.error', ['status' => '未知的账号']);
|
|
|
}
|
|
|
|
|
|
// 更新订阅状态为未订阅
|
|
|
Subscribe::query()->where('email', $email)->update(['is_subscribe' => 0]);
|
|
|
|
|
|
// 返回成功提示视图
|
|
|
return view('hint.success', ['status' => '已取消订阅']);
|
|
|
}
|
|
|
}
|