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)'); } }