117 lines
3.5 KiB
Python
117 lines
3.5 KiB
Python
"""知识库路由(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)
|