2022-11-26 13:52:30 +00:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
2022-12-30 11:36:57 +00:00
|
|
|
|
use Carbon\Carbon;
|
2023-01-10 14:27:03 +00:00
|
|
|
|
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
|
2022-11-26 13:52:30 +00:00
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
2022-12-30 11:36:57 +00:00
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
2022-11-26 13:52:30 +00:00
|
|
|
|
|
|
|
|
|
class UserGroup extends Model
|
|
|
|
|
{
|
2023-01-10 14:27:03 +00:00
|
|
|
|
use Cachable;
|
|
|
|
|
|
2022-11-26 13:52:30 +00:00
|
|
|
|
public $fillable = [
|
|
|
|
|
'name',
|
|
|
|
|
'color',
|
|
|
|
|
'discount',
|
|
|
|
|
'exempt',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
public $casts = [
|
|
|
|
|
'discount' => 'integer',
|
|
|
|
|
'exempt' => 'boolean',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
public function users(): HasMany
|
|
|
|
|
{
|
|
|
|
|
return $this->hasMany(User::class);
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-30 11:36:57 +00:00
|
|
|
|
/**
|
|
|
|
|
* 设置临时用户组
|
|
|
|
|
*
|
2023-02-07 09:04:11 +00:00
|
|
|
|
* @param User $user
|
|
|
|
|
* @param UserGroup $group
|
|
|
|
|
* @param Carbon $expired_at
|
2022-12-30 11:36:57 +00:00
|
|
|
|
* @return User
|
|
|
|
|
*/
|
|
|
|
|
public function setTempGroup(User $user, self $group, Carbon $expired_at): User
|
|
|
|
|
{
|
|
|
|
|
$temp_groups = Cache::get('users_temp_groups', []);
|
|
|
|
|
|
|
|
|
|
// 检测是否存在,存在则更新(更新过期时间,但是不更新 user_group_id)
|
|
|
|
|
if (isset($temp_groups[$user->id])) {
|
|
|
|
|
$temp_groups[$user->id]['expired_at'] = $expired_at;
|
|
|
|
|
} else {
|
|
|
|
|
$temp_groups[$user->id] = [
|
|
|
|
|
'user_group_id' => $user->user_group_id,
|
|
|
|
|
'expired_at' => $expired_at,
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 保存到缓存
|
|
|
|
|
Cache::forever('users_temp_groups', $temp_groups);
|
|
|
|
|
|
|
|
|
|
// 设置新的用户组
|
|
|
|
|
$user->user_group_id = $group->id;
|
|
|
|
|
$user->save();
|
|
|
|
|
|
|
|
|
|
return $user;
|
|
|
|
|
}
|
2022-11-26 13:52:30 +00:00
|
|
|
|
}
|