156 lines
3.5 KiB
PHP
156 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace app\api\model\app\agent;
|
|
|
|
use think\Model;
|
|
use think\Db;
|
|
|
|
/**
|
|
* 分销等级
|
|
*/
|
|
class Level extends Model
|
|
{
|
|
|
|
/**
|
|
* 获取用户当前等级
|
|
* @param $userId
|
|
* @return void
|
|
*/
|
|
public function getUserLevel($userId){
|
|
$levelList = \app\common\model\app\agent\Level::getLevelList();
|
|
|
|
if(empty($levelList)){
|
|
return false;
|
|
}
|
|
|
|
$memberModel = new \app\common\model\app\agent\Member();
|
|
|
|
$member = $memberModel->getMember($userId);
|
|
|
|
if(!$member || $member['status'] != 1){
|
|
return false;
|
|
}
|
|
|
|
foreach ($levelList as $item){
|
|
|
|
if( isset($item['id']) && $member['level'] == $item['id']){
|
|
return $item;
|
|
}
|
|
}
|
|
|
|
return $levelList[0];
|
|
}
|
|
|
|
/**
|
|
* 获取用户的下一等级
|
|
* @param $userId
|
|
* @return void
|
|
*/
|
|
public function getUserNextLevel($userId){
|
|
$levelList = \app\common\model\app\agent\Level::getLevelList();
|
|
|
|
$memberModel = new \app\common\model\app\agent\Member();
|
|
$member = $memberModel->getMember($userId);
|
|
|
|
if(!$member){
|
|
return false;
|
|
}
|
|
|
|
$levelIndex = 0;
|
|
//当前的等级下标
|
|
$nowLevelIndex = 0;
|
|
|
|
foreach ($levelList as $item){
|
|
$data[] = $item;
|
|
if( isset($item['id']) && $member['level'] == $item['id']){
|
|
$nowLevelIndex = $levelIndex;
|
|
}
|
|
$levelIndex++;
|
|
}
|
|
|
|
if(isset($data[$nowLevelIndex+1])){
|
|
return $data[$nowLevelIndex+1];
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* 检查升级
|
|
* @param $userId
|
|
* @return void
|
|
*/
|
|
public function handle($userId){
|
|
|
|
$nextLevelId = $this->checkLevelCondtion($userId);
|
|
|
|
if($nextLevelId !== false){
|
|
$this->upLevel($userId,$nextLevelId);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 检查是否满足升级条件
|
|
* @param $userId 用户ID
|
|
* @return false 满足则返回升级等级ID 否则false
|
|
*/
|
|
public function checkLevelCondtion($userId)
|
|
{
|
|
$config = \app\common\model\app\Config::getConfig('agent');
|
|
$upLevel = $this->getUserNextLevel($userId);
|
|
|
|
if(!$upLevel){
|
|
return false;
|
|
}
|
|
//判断是否满足条件
|
|
$satisfy = false;
|
|
foreach ($upLevel['condition'] as $type => $item){
|
|
if($item['status'] == 1){
|
|
|
|
//判断自定条件
|
|
$temp = \app\api\model\app\agent\Condition::checkCondition($userId,$type,$item['value']);
|
|
|
|
if($config['upgrade'] == 2){
|
|
//满足一个即可
|
|
if($temp){
|
|
$satisfy = true;
|
|
break;
|
|
}
|
|
}else{
|
|
//需要全部满足
|
|
if(!$temp){
|
|
$satisfy = false;
|
|
break;
|
|
}else{
|
|
$satisfy = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($satisfy){
|
|
return $upLevel['id'];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 升级
|
|
* @param $userId 用户ID
|
|
* @param $toLevelId 要升级的等级ID
|
|
* @return void
|
|
*/
|
|
public function upLevel($userId,$toLevelId){
|
|
|
|
$memberModel = new \app\common\model\app\agent\Member();
|
|
|
|
return $memberModel->where([
|
|
'user_id'=>$userId
|
|
])->update([
|
|
'level'=>$toLevelId
|
|
]);
|
|
}
|
|
} |