jihuaqiang 4 месяцев назад
Родитель
Сommit
38fcf4486f
2 измененных файлов с 193 добавлено и 0 удалено
  1. 101 0
      src/api/db.py
  2. 92 0
      src/api/main.py

+ 101 - 0
src/api/db.py

@@ -0,0 +1,101 @@
+# 数据库增删改查操作
+from typing import List, Optional, Dict, Any
+import logging
+from ..database.connection import get_db_manager
+
+logger = logging.getLogger(__name__)
+
+
+class KnowledgeQueryDAO:
+    """知识查询数据访问对象"""
+    
+    def __init__(self):
+        self.db_manager = get_db_manager()
+    
+    def get_data_by_task_and_query(
+        self, 
+        suggest_task_id: int, 
+        query: str
+    ) -> Optional[str]:
+        """
+        根据 suggest_task_id 和 query 查询 knowledge_query 表,获取匹配的 行
+        
+        Args:
+            suggest_task_id: 建议任务ID
+            query: 查询词
+            
+        Returns:
+            row数据,如果不存在返回 None
+        """
+        try:
+            with self.db_manager.get_cursor() as cursor:
+                sql = """
+                SELECT * 
+                FROM knowledge_query 
+                WHERE suggest_task_id = %s AND query = %s
+                LIMIT 1
+                """
+                cursor.execute(sql, (suggest_task_id, query))
+                result = cursor.fetchone()
+                
+                if result:
+                    return result
+                return None
+        except Exception as e:
+            logger.error(f"查询 data 失败: {e}")
+            return None
+
+class KnowledgeStoreContentDAO:
+    """知识存储内容数据访问对象"""
+    
+    def __init__(self):
+        self.db_manager = get_db_manager()
+    
+    def get_data_by_request_id(self, request_id: str) -> Optional[str]:
+        """
+        根据 request_id 查询 knowledge_store_content 表,获取匹配的 行
+        
+        Args:
+            request_id: 请求ID
+            
+        Returns:
+            row数据,如果不存在返回 None
+        """
+        try:
+            with self.db_manager.get_cursor() as cursor:
+                sql = """
+                SELECT * 
+                FROM knowledge_store_content 
+                WHERE request_id = %s
+                LIMIT 1
+                """
+                cursor.execute(sql, (request_id,))
+                result = cursor.fetchone()
+                
+                if result:
+                    return result
+                return None
+        except Exception as e:
+            logger.error(f"查询 row 失败: {e}")
+            return None
+
+
+# 全局DAO实例
+knowledge_query_dao = None
+knowledge_store_content_dao = None
+
+
+def get_knowledge_query_dao() -> KnowledgeQueryDAO:
+    """获取 KnowledgeQueryDAO 实例"""
+    global knowledge_query_dao
+    if knowledge_query_dao is None:
+        knowledge_query_dao = KnowledgeQueryDAO()
+    return knowledge_query_dao
+
+
+def get_knowledge_store_content_dao() -> KnowledgeStoreContentDAO:
+    """获取 KnowledgeStoreContentDAO 实例"""
+    global knowledge_store_content_dao
+    if knowledge_store_content_dao is None:
+        knowledge_store_content_dao = KnowledgeStoreContentDAO()
+    return knowledge_store_content_dao

+ 92 - 0
src/api/main.py

@@ -10,6 +10,7 @@ from ..agent.query_agent import QueryGenerationAgent
 from ..database.connection import init_database_manager, get_db_manager
 from ..database.models import QueryTaskDAO, QueryTaskStatus, get_query_task_dao
 from ..tools.scheduler import create_scheduler, get_scheduler
+from .db import get_knowledge_query_dao, get_knowledge_store_content_dao
 import time
 
 # 加载环境变量
@@ -262,6 +263,97 @@ async def root():
     }
 
 
+@app.get("/knowledge-query/data")
+async def get_request_id(suggest_task_id: int, query: str):
+    """
+    根据 suggest_task_id 和 query 查询 knowledge_query 表,获取匹配的 data
+    
+    Args:
+        suggest_task_id: 建议任务ID
+        query: 查询词
+        
+    Returns:
+        request_id 信息
+    """
+    try:
+        dao = get_knowledge_query_dao()
+        data = dao.get_data_by_task_and_query(suggest_task_id, query)
+        
+        if data is None:
+            raise HTTPException(
+                status_code=404, 
+                detail=f"未找到匹配的记录 (suggest_task_id={suggest_task_id}, query={query})"
+            )
+        
+        return data
+        
+    except HTTPException:
+        raise
+    except Exception as e:
+        logger.error(f"查询 request_id 失败: {e}")
+        raise HTTPException(status_code=500, detail=f"查询失败: {str(e)}")
+
+
+@app.get("/knowledge-store/data")
+async def get_store_data(request_id: str):
+    """
+    根据 request_id 查询 knowledge_store_content 表,获取匹配的 行
+    
+    Args:
+        request_id: 请求ID
+        
+    Returns:
+        row数据
+    """
+    try:
+        dao = get_knowledge_store_content_dao()
+        data = dao.get_data_by_request_id(request_id)
+        
+        if data is None:
+            raise HTTPException(
+                status_code=404,
+                detail=f"未找到匹配的记录 (request_id={request_id})"
+            )
+        
+        return data
+        
+    except HTTPException:
+        raise
+    except Exception as e:
+        logger.error(f"查询 data 失败: {e}")
+        raise HTTPException(status_code=500, detail=f"查询失败: {str(e)}")
+
+
+@app.get("/knowledge-store/full")
+async def get_full_store_record(request_id: str):
+    """
+    根据 request_id 查询完整的 knowledge_store_content 记录
+    
+    Args:
+        request_id: 请求ID
+        
+    Returns:
+        完整记录
+    """
+    try:
+        dao = get_knowledge_store_content_dao()
+        record = dao.get_full_record_by_request_id(request_id)
+        
+        if record is None:
+            raise HTTPException(
+                status_code=404,
+                detail=f"未找到匹配的记录 (request_id={request_id})"
+            )
+        
+        return record
+        
+    except HTTPException:
+        raise
+    except Exception as e:
+        logger.error(f"查询完整记录失败: {e}")
+        raise HTTPException(status_code=500, detail=f"查询失败: {str(e)}")
+
+
 if __name__ == "__main__":
     import uvicorn