# 元数据审核记录创建接口 - 前端开发指南 ## 接口概述 该接口用于创建元数据审核记录,支持前端页面发起两个元数据的对比审核请求(如疑似重复、变动审核、合并请求等场景)。 ## 基本信息 | 项目 | 说明 | |------|------| | **接口路径** | `/api/meta_data/review/create` | | **请求方法** | `POST` | | **Content-Type** | `application/json` | | **认证方式** | 无(如需认证请参考项目认证配置) | ## 请求参数 ### 请求体 (Request Body) | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | `record_type` | string | ✅ 是 | 审核记录类型,可选值:`redundancy`(疑似重复)、`change`(疑似变动)、`merge`(合并请求) | | `source` | string | 否 | 触发来源,默认值:`"manual"` | | `meta1` | object | ✅ 是 | 第一个元数据信息(主元数据) | | `meta2` | object | ✅ 是 | 第二个元数据信息(候选/对比元数据) | | `notes` | string | 否 | 备注信息 | ### 元数据对象结构 (meta1 / meta2) | 字段名 | 类型 | 必填 | 说明 | |--------|------|------|------| | `id` | number | ✅ 是 | 元数据节点 ID(Neo4j 节点 ID) | | `name_zh` | string | ✅ 是 | 元数据中文名称 | | `name_en` | string | ✅ 是 | 元数据英文名称 | | `data_type` | string | ✅ 是 | 数据类型(如 `varchar(255)`、`integer` 等) | | `status` | boolean | ✅ 是 | 元数据状态(`true`:启用,`false`:禁用) | ### 请求示例 ```json { "record_type": "redundancy", "source": "manual", "meta1": { "id": 1001, "name_zh": "仓库名称", "name_en": "warehouse_name", "data_type": "varchar(255)", "status": true }, "meta2": { "id": 1002, "name_zh": "仓库名", "name_en": "wh_name", "data_type": "varchar(100)", "status": true }, "notes": "疑似重复元数据,需要人工审核确认" } ``` ## 响应格式 ### 成功响应 ```json { "code": 200, "message": "操作成功", "data": { "record": { "id": 1, "record_type": "redundancy", "source": "manual", "business_domain_id": null, "new_meta": { "id": 1001, "name_zh": "仓库名称", "name_en": "warehouse_name", "data_type": "varchar(255)", "status": true }, "candidates": [ { "id": 1002, "name_zh": "仓库名", "name_en": "wh_name", "data_type": "varchar(100)", "status": true } ], "old_meta": null, "status": "pending", "resolution_action": null, "resolution_payload": null, "notes": "疑似重复元数据,需要人工审核确认", "created_at": "2024-01-15T10:30:00", "updated_at": "2024-01-15T10:30:00", "resolved_at": null, "resolved_by": null }, "message": "审核记录创建成功,请前往数据审核页面进行处理" } } ``` ### 失败响应 ```json { "code": 500, "message": "错误描述信息", "data": null, "error": "详细错误信息(可选)" } ``` ## 返回码说明 | code | message | 说明 | |------|---------|------| | 200 | 操作成功 | 审核记录创建成功 | | 500 | record_type 不能为空 | 缺少必填参数 record_type | | 500 | record_type 必须是 redundancy、change 或 merge 之一 | record_type 值不合法 | | 500 | meta1 不能为空且必须是对象 | meta1 参数缺失或格式错误 | | 500 | meta2 不能为空且必须是对象 | meta2 参数缺失或格式错误 | | 500 | meta1 缺少必要字段: {field} | meta1 缺少必填字段 | | 500 | meta2 缺少必要字段: {field} | meta2 缺少必填字段 | | 500 | 请求数据格式错误,应为 JSON 对象 | 请求体不是有效的 JSON | | 500 | 创建审核记录失败 | 服务器内部错误 | ## record_type 枚举说明 | 值 | 含义 | 使用场景 | |----|------|----------| | `redundancy` | 疑似重复 | 两个元数据名称相似,可能是重复定义 | | `change` | 疑似变动 | 元数据定义发生变化,需要审核确认 | | `merge` | 合并请求 | 请求将两个元数据合并为一个 | ## Vue 3 接入示例 ### 1. API 请求封装 ```typescript // src/api/metaReview.ts import request from '@/utils/request' // 元数据对象类型定义 export interface MetaInfo { id: number name_zh: string name_en: string data_type: string status: boolean } // 创建审核记录请求参数 export interface CreateReviewParams { record_type: 'redundancy' | 'change' | 'merge' source?: string meta1: MetaInfo meta2: MetaInfo notes?: string } // 审核记录响应数据 export interface ReviewRecord { id: number record_type: string source: string business_domain_id: number | null new_meta: MetaInfo candidates: MetaInfo[] old_meta: MetaInfo | null status: string resolution_action: string | null resolution_payload: Record | null notes: string | null created_at: string updated_at: string resolved_at: string | null resolved_by: string | null } // API 响应类型 export interface ApiResponse { code: number message: string data: T error?: string } // 创建审核记录 export function createMetaReview(params: CreateReviewParams) { return request.post>('/api/meta_data/review/create', params) } ``` ### 2. 组件中使用 ```vue ``` ### 3. Axios 请求封装参考 ```typescript // src/utils/request.ts import axios from 'axios' import { ElMessage } from 'element-plus' const request = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL || '', timeout: 30000, headers: { 'Content-Type': 'application/json', }, }) // 响应拦截器 request.interceptors.response.use( (response) => { return response }, (error) => { const message = error.response?.data?.message || error.message || '请求失败' ElMessage.error(message) return Promise.reject(error) } ) export default request ``` ## 快速调用示例 ### 使用 fetch ```javascript async function createReviewRecord() { const response = await fetch('/api/meta_data/review/create', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ record_type: 'redundancy', meta1: { id: 1001, name_zh: '仓库名称', name_en: 'warehouse_name', data_type: 'varchar(255)', status: true }, meta2: { id: 1002, name_zh: '仓库名', name_en: 'wh_name', data_type: 'varchar(100)', status: true }, notes: '疑似重复' }) }) const result = await response.json() if (result.code === 200) { console.log('创建成功:', result.data.record) alert(result.data.message) } else { console.error('创建失败:', result.message) } } ``` ### 使用 axios ```javascript import axios from 'axios' axios.post('/api/meta_data/review/create', { record_type: 'merge', meta1: { id: 1001, name_zh: '仓库名称', name_en: 'warehouse_name', data_type: 'varchar(255)', status: true }, meta2: { id: 1002, name_zh: '仓库名', name_en: 'wh_name', data_type: 'varchar(100)', status: true } }).then(res => { if (res.data.code === 200) { console.log('审核记录ID:', res.data.data.record.id) } }).catch(err => { console.error('请求失败:', err) }) ``` ## 相关接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/meta_data/review/list` | POST | 查询审核记录列表 | | `/api/meta_data/review/detail` | GET | 获取审核记录详情 | | `/api/meta_data/review/resolve` | POST | 处理审核记录 | ## 注意事项 1. **元数据 ID**:`meta1.id` 和 `meta2.id` 应为有效的 Neo4j 节点 ID 2. **状态值**:`status` 为布尔值,`true` 表示启用,`false` 表示禁用 3. **record_type**:必须是三个枚举值之一,否则会返回错误 4. **幂等性**:该接口不具备幂等性,重复调用会创建多条审核记录 5. **后续处理**:创建成功后,需要前往数据审核页面(`/api/meta_data/review/list`)查看并处理审核记录 ## 更新日志 | 日期 | 版本 | 说明 | |------|------|------| | 2024-01-15 | v1.0 | 初始版本 |