setGrade($userId); return true; } /** * 设置等级 */ private function setGrade($userId) { if (empty($userId)) { return false; } log_write('VIP用户升级$user_id='.$userId); // 用户模型 $user = vipUserModel::detail($userId); if (empty($user)) { return false; } // 获取所有等级 $list = GradeModel::getUsableList($user['app_id']); if ($list->isEmpty()) { return false; } // 遍历等级,根据升级条件 查询满足消费金额的用户列表,并且他的等级小于该等级 $upgradeGrade = null; foreach ($list as $grade) { if($grade['is_default'] == 1){ continue; } // 不自动升级 if($grade['auto_upgrade'] == 0){ continue; } $is_upgrade = $this->checkCanUpdate($user, $grade); if($is_upgrade){ $upgradeGrade = $grade; continue; }else{ break; } } if($upgradeGrade){ if($user['grade_id'] == $upgradeGrade['grade_id']||$user['grade']['weight'] >= $upgradeGrade['weight']){ return true; } $this->dologs('setVipUserGrade', [ 'user_id' => $user['user_id'], 'grade_id' => $upgradeGrade['grade_id'], ]); // 修改会员的等级 (new vipUserModel())->upgradeGrade($user, $upgradeGrade); } } /** * 查询满足会员等级升级条件的用户列表 */ public function checkCanUpdate($user, $grade) { // 按购买指定商品次数升级 $purchase_count = false; if($grade['is_purchase_count'] == 1 && $user['user']['purchase_count'] >= $grade['purchase_count']){ $purchase_count = true; } $supplier_count = false; // 直推供应商多少人 if($grade['is_supplier_count'] == 1 ){ $referee_supplier_count = (new Supplier())->where('referee_id', $user['user_id'])->count(); if ($referee_supplier_count >= $grade['supplier_count']){ $supplier_count = true; } } $referee_grade_count=false; if($grade['is_referee_grade'] == 1){ // 推荐人等级 $user_referee_grade_count = (new UserModel())->getRefereeGradeCount([$user['user_id']], $grade['referee_grade_ids']); if ($user_referee_grade_count >= $grade['referee_grade_count']){ $referee_grade_count = true; } } $buy_product = false; if ($grade['open_buy_product'] == 1&& OrderModel::getOrderProductIds($user['user_id'],$grade['product_ids'],true)){ $buy_product= true; } if($grade['condition_type'] == 'and'){ $grade['is_purchase_count']!=1 && $purchase_count=true; $grade['is_supplier_count']!=1 && $supplier_count=true; $grade['is_referee_grade']!=1 && $referee_grade_count=true; $grade['is_buy_product']!=1 && $buy_product=true; if ($grade['open_type_product']){ return ($purchase_count && $supplier_count && $referee_grade_count) || $buy_product; }else{ return $purchase_count && $supplier_count && $referee_grade_count && $buy_product; } }else{ return $purchase_count || $supplier_count || $referee_grade_count || $buy_product; } } /** * 记录日志 */ private function dologs($method, $params = []) { $value = 'VipUserGrade --' . $method; foreach ($params as $key => $val) $value .= ' --' . $key . ' ' . $val; return log_write($value, 'task'); } }