baodan/api/insurance/kb/routes.py

117 lines
3.5 KiB
Python
Raw Normal View History

"""知识库路由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)