This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/source/application/task/behavior/user/Grade.php
2020-04-25 22:20:29 +08:00

70 lines
1.9 KiB
PHP

<?php
namespace app\task\behavior\user;
use think\Cache;
use app\task\model\User as UserModel;
use app\task\model\user\Grade as GradeModel;
class Grade
{
/* @var GradeModel $model */
private $model;
/**
* 执行函数
* @param $model
* @return bool
* @throws \Exception
*/
public function run($model)
{
if (!$model instanceof GradeModel) {
return new GradeModel and false;
}
$this->model = $model;
if (!$model::$wxapp_id) {
return false;
}
$cacheKey = "__task_space__[user/Grade]__{$model::$wxapp_id}";
if (!Cache::has($cacheKey)) {
// 设置用户的会员等级
$this->setUserGrade();
Cache::set($cacheKey, time(), 60 * 10);
}
return true;
}
/**
* 设置用户的会员等级
* @return array|bool|false
* @throws \Exception
*/
private function setUserGrade()
{
// 用户模型
$UserModel = new UserModel;
// 获取所有等级
$list = GradeModel::getUsableList(null, ['weight' => 'desc']);
if ($list->isEmpty()) {
return false;
}
// 遍历等级,根据升级条件 查询满足消费金额的用户列表,并且他的等级小于该等级
$data = [];
foreach ($list as $grade) {
$userList = $UserModel->getUpgradeUserList($grade, array_keys($data));
foreach ($userList as $user) {
if (!isset($data[$user['user_id']])) {
$data[$user['user_id']] = [
'user_id' => $user['user_id'],
'old_grade_id' => $user['grade_id'],
'new_grade_id' => $grade['grade_id'],
];
}
}
}
// 批量修改会员的等级
return $UserModel->setBatchGrade($data);
}
}