diff --git a/Merge/back_rhj/app/routes.py b/Merge/back_rhj/app/routes.py
index 23ff49b..f123a84 100644
--- a/Merge/back_rhj/app/routes.py
+++ b/Merge/back_rhj/app/routes.py
@@ -1,5 +1,6 @@
 from flask import Blueprint, request, jsonify
 from .functions.FAuth import FAuth
+from .services.recommendation_service import RecommendationService
 from sqlalchemy import create_engine
 from sqlalchemy.orm import sessionmaker
 from config import Config
@@ -8,6 +9,9 @@
 
 main = Blueprint('main', __name__)
 
+# 初始化推荐服务
+recommendation_service = RecommendationService()
+
 def token_required(f):
     """装饰器：需要令牌验证"""
     @wraps(f)
@@ -322,4 +326,69 @@
         return jsonify({
             'success': False, 
             'message': f'JWT令牌验证失败: {str(e)}'
-        }), 500
\ No newline at end of file
+        }), 500
+        
+@main.route('/verify_user', methods=['POST'])
+@token_required
+def verify_user(current_user):
+    """测试JWT令牌接口（需要登录）"""
+    try:
+        # 获取当前请求的token（从装饰器已验证的Authorization header）
+        auth_header = request.headers.get('Authorization')
+        current_token = auth_header[7:] if auth_header and auth_header.startswith('Bearer ') else None
+        
+        print(f"当前用户: {current_user.username}")
+        print(f"当前用户ID: {current_user.id}")
+        print(current_user.role)
+        print(f"Token验证成功: {current_token[:20]}..." if current_token else "No token")
+        
+        # 可选：检查请求体中是否有额外的token需要验证
+        data = request.get_json() or {}
+        additional_token = data.get('token')
+        
+        response_data = {
+            'success': True,
+            'userid': current_user.id,
+            'role': current_user.role,
+        }
+        
+        return jsonify(response_data), 200
+        
+    except Exception as e:
+        print(f"用户验证错误: {str(e)}")
+        return jsonify({
+            'success': False, 
+            'message': f'JWT令牌验证失败: {str(e)}'
+        }), 500
+
+@main.route('/recommend', methods=['POST'])
+@token_required
+def get_recommendations(current_user):
+    """获取个性化推荐接口"""
+    try:
+        data = request.get_json() or {}
+        user_id = data.get('user_id') or current_user.id
+        topk = data.get('topk', 10)  # 默认推荐10个
+        
+        print(f"为用户 {user_id} 获取推荐，数量: {topk}")
+        
+        # 调用推荐系统
+        recommendations = recommendation_service.get_recommendations(user_id, topk)
+        
+        return jsonify({
+            'success': True,
+            'data': {
+                'user_id': user_id,
+                'recommendations': recommendations,
+                'count': len(recommendations),
+                'type': 'personalized'
+            },
+            'message': '个性化推荐获取成功'
+        }), 200
+        
+    except Exception as e:
+        print(f"推荐系统错误: {str(e)}")
+        return jsonify({
+            'success': False, 
+            'message': f'推荐获取失败: {str(e)}'
+        }), 500
