jh-admin/addon/team/job/TeamUpgradationJob.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)');
}
}