services->setting->addons->get($mall_id, $identity_desc, 'basic'); $upgrade_user_id_arr = UserPartitionRelationship::getParentIdArr($user_id); if(empty($configs['is_open_level_limit']) || !empty($configs['is_open_level_limit']) && $user_id != $shopping_upgrade_uid) $upgrade_user_id_arr [] = $user_id;// 如果开启了逐级升级,并且购物升级就是本人则不能进行条件升级 $upgrade_user_id_arr = array_reverse($upgrade_user_id_arr); $model_list = $identity_obj::find()->where(['user_id' => $upgrade_user_id_arr, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->all(); $model_arr = $upgrade_user_ids = []; foreach ($upgrade_user_id_arr as $id){ if(!isset($model_list[$id])){ } if(!empty($model_list[$id])) { $model_arr[] = $model_list[$id]; }else{ $model = new $identity_obj; $model->mall_id = $mall_id; $model->user_id = $id; $model->level = 0; $model->upgrade_level_at = 0; $model_arr[] = $model; } } $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $params = []; if($configs && isset($configs['is_open_level_limit']) && !empty($configs['is_open_level_limit'])){ $params['order'] = 'level asc'; $is_open_level_limit = true; }else{ $params['order'] = 'level desc'; $is_open_level_limit = false; } $params['where'] = $where; $level_list = $level_obj::lists($params); if (empty($level_list)) return []; foreach ($model_arr as $identity) { $flag = false; $can_upgrade_level = 0; $upgrade_status = 0; $upgrade_level = 0;// 升级次数 if($level_list){ foreach ($level_list as $identity_level_arr) { // 当前等级大于或等于可以升级的等级则直接退出 if(!$is_open_level_limit && $identity->level >= $identity_level_arr['level']){ break; } if($is_open_level_limit && $identity->level >= $identity_level_arr['level']){ continue; } $can_upgrade_level = $identity_level_arr['level']; $upgrade_level ++; //开启条件升级 if ($identity_level_arr['upgrade_type_condition']&&$identity_level_arr['is_auto_upgrade']) { $upgrade_status = UpgradeEnum::UPGRADE_STATUS_CONDITION; $res = UpgradeCondition::check($identity->user_id, $identity_level_arr, $mall_id, $identity_level_arr['level'],$order['id']); if ($res) { $flag = true; break; } } } } if ($flag && $can_upgrade_level > $identity->level) { $original_identity_level = $identity->level; // 开启了逐级升级,跳级升级的用户无法升级 if($is_open_level_limit && $upgrade_level > 1) continue; $identity->level = $can_upgrade_level; $identity->upgrade_status = $upgrade_status; $identity->upgrade_level_at = time(); if (!$identity->save()) throw new Exception("{用户ID:$identity->user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."条件升级失败"); $upgrade_user_ids[] = $identity->user_id; if ($upgrade_log_obj !== null) { $upgrade_log_obj_clone = clone $upgrade_log_obj; $upgrade_log_obj_clone->mall_id = $mall_id; $upgrade_log_obj_clone->user_id = $identity->user_id; $upgrade_log_obj_clone->before_level = $original_identity_level; $upgrade_log_obj_clone->after_level = $can_upgrade_level; $upgrade_log_obj_clone->upgrade_type = LevelUpgradeLogEnum::CONDITION_UPGRADE;; $upgrade_log_obj_clone->order_id = $order['id']; $upgrade_log_obj_clone->upgrade_condition = $identity_level_arr ?? []; $upgrade_log_obj_clone->save(); } } } return $upgrade_user_ids; } catch (Exception $e) { $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "条件升级失败"); echo $exception; $this->setError($exception); Yii::error($exception); return false; } } }