"""知识库路由(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//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//retry", methods=["POST"]) @admin_required def retry_document(doc_id): """重试处理失败的文档。""" result = kb_service.retry_document(doc_id) return jsonify(result) @kb_bp.route("/documents/", 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/", 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//sync", methods=["POST"]) @admin_required def sync_datasource(ds_id): """手动触发数据源同步。""" result = kb_service.sync_datasource(ds_id) return jsonify(result) @kb_bp.route("/datasources//logs", methods=["GET"]) @admin_required def get_sync_logs(ds_id): """获取同步历史日志。""" result = kb_service.get_sync_logs(ds_id) return jsonify(result)