You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aquaculture/app/Http/Controllers/HomeController.php

80 lines
2.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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' => '已取消订阅']);
}
}