106 lines
5.4 KiB
PHP
106 lines
5.4 KiB
PHP
<?php
|
|
/**
|
|
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.gobuysaas.com
|
|
* =========================================================
|
|
*/
|
|
namespace addon\team\job;
|
|
|
|
|
|
use addon\team\model\Member;
|
|
use addon\team\model\Setting;
|
|
use addon\team\model\Team;
|
|
use think\Exception;
|
|
use think\facade\Db;
|
|
use think\queue\Job;
|
|
|
|
class TeamUpgradationJob{
|
|
|
|
public function fire(Job $job,$data){
|
|
Db::startTrans();
|
|
try{
|
|
// trace($data, '团队升级流程 - 开始处理');
|
|
$currentMemberId = $data['member_id'] ?? 0;
|
|
if($currentMemberId <= 0) throw new Exception('用户不存在!');
|
|
// 公共信息获取
|
|
$siteId = model('member')->getValue([['member_id','=',$currentMemberId]],'site_id');
|
|
$set = (new Setting())->getConfig((int)$siteId);
|
|
if($set['switch'] != 1) throw new Exception('功能未开启!');
|
|
// 获取全部上级 然后循环处理
|
|
$allParent = (array)(new Member())->getAllParent($currentMemberId);
|
|
$allParent = array_merge([$currentMemberId],$allParent);
|
|
// trace($allParent, '团队升级流程 - 需要处理的用户id列表');
|
|
foreach($allParent as $memberId){
|
|
$teamInfo = model('team')->getInfo([['member_id','=',$memberId]],'id,site_id,member_id,level_id');
|
|
if($teamInfo) $currentLevelWeight = model('team_level')->getValue([['id','=',$teamInfo['level_id']]],'weight');
|
|
else $currentLevelWeight = 0;
|
|
$levelList = model('team_level')->getList([
|
|
['weight', '>', $currentLevelWeight],
|
|
['site_id', '=', $siteId],
|
|
['upgrade_type', '<>', 0],
|
|
],'id,site_id,weight,upgrade_type,upgrade_conditions','weight DESC');
|
|
if(count($levelList) <= 0) continue;//throw new Exception('不存在可升级的等级信息!');
|
|
// 获取升级判断需要使用的部分内容
|
|
$memberModel = new \addon\team\model\Member();
|
|
$needUseInfo = [
|
|
'one_people' => $memberModel->getPeopleNum($memberId, $siteId),// 直推人数
|
|
'team_people' => $memberModel->getPeopleNum($memberId, $siteId, 'team'),// 团队人数
|
|
'one_money' => $memberModel->getMoneyNum($memberId, $siteId),// 直推业绩
|
|
'team_money' => $memberModel->getMoneyNum($memberId, $siteId, 'team'),// 团队业绩
|
|
];
|
|
// 循环处理 判断是否可以升级
|
|
foreach($levelList as $levelInfo){
|
|
$upgradeConditions = unserialize($levelInfo['upgrade_conditions']);
|
|
// 判断:当前等级是否存在升级条件
|
|
$upgradeWhere = $upgradeConditions['where'] ?? [];
|
|
if(count($upgradeWhere) <= 0) continue;
|
|
// 获取当前等级所有升级条件达标的结果
|
|
$completeItems = [];
|
|
foreach($upgradeWhere as $whereName){
|
|
switch($whereName){
|
|
case 'one_people':// 直推人数
|
|
case 'team_people':// 团队人数
|
|
case 'one_money':// 直推业绩
|
|
case 'team_money':// 团队业绩
|
|
if($upgradeConditions[$whereName] <= $needUseInfo[$whereName]) $completeItems[] = $whereName;
|
|
break;
|
|
case 'buy_goods':
|
|
$buyGoods = $upgradeConditions['buy_goods'] ?? [];
|
|
if(count($buyGoods) > 0){
|
|
$buyGoodsIds = array_column($buyGoods, 'goods_id');
|
|
$buyGoodsNum = (int)$memberModel->isBuyDesignatedGoods((int)$memberId,(array)$buyGoodsIds,(int)$set['buy_goods_type']);
|
|
if($buyGoodsNum > 0) $completeItems[] = $whereName;
|
|
}
|
|
break;// 购买指定商品之一
|
|
}
|
|
}
|
|
// 判断:是否达标 达标则升级并且跳出循环
|
|
$countComplete = count($completeItems);// 总完成项
|
|
$countDemand = count($upgradeWhere);// 总需求条件数量
|
|
if(($levelInfo['upgrade_type'] == 1 && $countComplete > 0) || ($levelInfo['upgrade_type'] == 2 && $countComplete == $countDemand)){
|
|
// 条件达成 升级
|
|
$result = (new Team())->TeamUpgrade($memberId, $levelInfo['id'], $completeItems);
|
|
trace($result, '团队升级流程 - 等级改变 - 结果');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
Db::commit();
|
|
}
|
|
catch(\Exception $e){
|
|
$data['error_msg'] = $e->getMessage();
|
|
trace($data, '团队升级流程 - 失败');
|
|
Db::rollback();
|
|
}
|
|
$job->delete();
|
|
}
|
|
|
|
public function failed($data){
|
|
trace($data, '团队升级流程 - 失败(failed)');
|
|
}
|
|
}
|