uid = $uid; $this->order = $order; $this->levels = $levels; // 0 是完成 1 是付款 $this->self_order_after = $self_order_after; $this->set = $set; $this->methodList = get_class_methods(new UpgrateConditionsService()); // \YunShop::app()->uniacid = $order->uniacid; } public function handle() { \YunShop::app()->uniacid = $this->order->uniacid; Setting::$uniqueAccountId = $this->order->uniacid; \Log::debug('分销商升级队列'); // 自己不是分销商 找 上级分销商 $one_agent = AgentService::getFirstAgentByUid($this->uid); if (!$one_agent) { // \Log::debug('自己不是分销商,上级分销商'); return; } $this->agents($one_agent->member_id); } private function agents($uid, $num = 1) { if ($uid > 0) { // 跳出递归 if ($num > 3) { return; } $num += 1; // 分销商 $agent = Agents::getAgentByMemberId($uid)->first(); // 没有分销商数据 或 不允许升级 if (!$agent || $agent->agent_not_upgrade) { \Log::debug('UID['.$uid.']没有分销商数据 或 不允许升级,'); // file_put_contents(storage_path('logs/Y0914.txt'), print_r('UID['.$uid.']没有分销商数据 或 不允许升级, '.PHP_EOL,1), FILE_APPEND); } else { // 分销商的等级权重 $agent_level_weight = isset($agent->agentLevel->level) ? $agent->agentLevel->level : 0; $culturalLevelWeight = isset($agent->culturalLevel->level) ? $agent->culturalLevel->level : 0; // uid 重新赋值 $this->uid = $agent->member_id; \Log::debug('UID['.$this->uid.']要进行升级;'."agent_level_weight={$agent_level_weight}"); // file_put_contents(storage_path('logs/Y0914.txt'), print_r('time:'.date('Y-m-d H:i:s').',UID['.$this->uid.']要进行升级'.PHP_EOL,1), FILE_APPEND); // 下一步 $this->fecLevels($agent_level_weight,$culturalLevelWeight); } // 递归当前 $this->agents($agent->parent_id, $num); } } private function fecLevels($level_weight,$culturalLevelWeight) { // \Log::debug('$level_weight',$level_weight); $is_upgrate = true; foreach ($this->levels as $level) { // 当前等级的等级权重 小于等于 分销商等级的等级权重 if(($level['level_type'] == 0 && $level['level'] <= $level_weight) || ($level['level_type'] == 1 && $level['level'] <= $culturalLevelWeight)){ continue; } // 判断条件 $condition = $this->getCondition($level); if ($condition) continue; // 触发升级条件判断 $is_upgrate = $this->upgrateVerdict($level, $is_upgrate); if ($is_upgrate) { // 升级 $this->upgrate($level); // 预防重复升级 break; } } } private function upgrate($level){ // 分销商数据 $agentModel = Agents::getAgentByMemberId($this->uid)->first(); // 升级 UpgradeService::upgrade($level, $this->uid, $agentModel); if (app('plugins')->isEnabled('merchant')) { //升级完判断招商中心升级 CenterUpgradeService::handle($this->uid); } // log // UpgradeService::setLog($agentModel, $level); } private function upgrateVerdict($level, $is_upgrate){ foreach ($level['upgraded'] as $upgrateType => $value) { // 转换字符串格式 [ps:order_count => orderCount] $function_name = Str::camel($upgrateType); // 验证方法是否存在 并 执行 if(in_array($function_name, $this->methodList)) { $is_upgrate = UpgrateConditionsService::$function_name($this->uid, $level, $this->order, $level['upgraded']['self_order_after'],$this->self_order_after); // 返回false 跳出循环 if (!$is_upgrate) { break; } } } return $is_upgrate; } private function getCondition($level) { $count = count($level['upgraded']); $upgraded = $count == 1 ? $level['upgraded']['self_order_after'] :0; return !$level['upgraded'] || $upgraded; // 没有升级条件 or 升级条件为:购买指定商品 or 订单状态 // return (!$level['upgraded'] || $upgraded) || $level['upgraded']['goods']; // return !$level['upgraded'] || $level['upgraded']['goods']; // todo 我咋觉得没啥用呢 // 没有升级条件 or ((升级条件为:购买指定商品 or 自购订单数 or 自购金额) and 订单状态) //return !$level['upgraded'] || (($level['upgraded']['goods'] || $level['upgraded']['self_buy_money'] || $level['upgraded']['self_buy_count']) && $level['upgraded']['self_order_after'] != $this->self_order_after); } }