baodan/api/insurance/kb/routes.py

117 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""知识库路由A4
POST /kb/documents/upload 上传文档
GET /kb/documents 文档列表
GET /kb/documents/{id}/status 文档处理状态
POST /kb/documents/{id}/retry 重试失败文档
PATCH /kb/documents/{id} 更新元数据
DELETE /kb/documents/{id} 删除文档
GET /kb/datasources 数据源列表
POST /kb/datasources 新建数据源
POST /kb/datasources/{id}/sync 手动同步
GET /kb/datasources/{id}/logs 同步日志
"""
from flask import Blueprint, request, jsonify
from insurance.kb.service import KBService
from insurance.middleware.auth_middleware import jwt_required, admin_required
kb_bp = Blueprint("kb", __name__)
kb_service = KBService()
@kb_bp.route("/documents/upload", methods=["POST"])
@admin_required
def upload_documents():
"""多文件上传,触发异步处理流水线。"""
files = request.files.getlist("files")
insurance_type = request.form.get("险种", "")
company = request.form.get("保司", "")
if not files:
return jsonify({"code": 1001, "message": "请选择文件", "data": None}), 400
result = kb_service.upload_documents(files, insurance_type, company)
return jsonify(result)
@kb_bp.route("/documents", methods=["GET"])
@jwt_required
def list_documents():
"""文档列表,支持多维筛选。"""
params = {
"page": request.args.get("page", 1, type=int),
"page_size": request.args.get("page_size", 20, type=int),
"险种": request.args.get("险种", ""),
"保司": request.args.get("保司", ""),
"status": request.args.get("status", ""),
"keyword": request.args.get("keyword", ""),
}
result = kb_service.list_documents(params)
return jsonify(result)
@kb_bp.route("/documents/<doc_id>/status", methods=["GET"])
@jwt_required
def get_document_status(doc_id):
"""查询文档处理流水线状态。"""
result = kb_service.get_document_status(doc_id)
return jsonify(result)
@kb_bp.route("/documents/<doc_id>/retry", methods=["POST"])
@admin_required
def retry_document(doc_id):
"""重试处理失败的文档。"""
result = kb_service.retry_document(doc_id)
return jsonify(result)
@kb_bp.route("/documents/<doc_id>", methods=["PATCH"])
@admin_required
def update_document(doc_id):
"""更新文档元数据。"""
data = request.get_json()
result = kb_service.update_document(doc_id, data)
return jsonify(result)
@kb_bp.route("/documents/<doc_id>", methods=["DELETE"])
@admin_required
def delete_document(doc_id):
"""归档/软删除文档。"""
result = kb_service.delete_document(doc_id)
return jsonify(result)
@kb_bp.route("/datasources", methods=["GET"])
@admin_required
def list_datasources():
"""获取数据源列表。"""
result = kb_service.list_datasources()
return jsonify(result)
@kb_bp.route("/datasources", methods=["POST"])
@admin_required
def create_datasource():
"""新建数据源配置。"""
data = request.get_json()
result = kb_service.create_datasource(data)
return jsonify(result)
@kb_bp.route("/datasources/<ds_id>/sync", methods=["POST"])
@admin_required
def sync_datasource(ds_id):
"""手动触发数据源同步。"""
result = kb_service.sync_datasource(ds_id)
return jsonify(result)
@kb_bp.route("/datasources/<ds_id>/logs", methods=["GET"])
@admin_required
def get_sync_logs(ds_id):
"""获取同步历史日志。"""
result = kb_service.get_sync_logs(ds_id)
return jsonify(result)