# DataOps Platform 代码库完整解析与迭代升级基线 > 基线日期:2026-07-16 > 产品决策复核:2026-07-16 > 分析对象:当前 `master` 工作树中的主源码、前端、数据库脚本、部署包、测试与现有技术文档 > 目标:为下一轮迭代提供可追溯的架构、代码逻辑、页面—接口—存储映射和风险优先级基线 ## 1. 结论摘要 DataOps Platform 当前是一个“单仓库、多运行时、混合存储、部分能力外置”的数据运营平台:Vue 2 前端通过 `/api` 调用 Flask 后端;PostgreSQL 保存订单、产品、审核、用户和任务记录;Neo4j 保存元数据、业务域、数据源、数据流程及其关系;MinIO 保存上传文件;n8n 承担工作流管理和执行;LLM 用于翻译、DDL 解析、订单实体提取和加工逻辑生成。 代码规模约为: | 范围 | 规模 | |---|---:| | Flask 主后端 | 66 个 Python 文件,21,578 行 | | 前端 | 289 个 Vue 文件、65 个 JS 文件,56,903 行 | | 后端路由 | 9 个 Blueprint、107 个路由 | | 前端 API 调用定义 | 430 个有效调用 | | 可与本仓库 Flask 路由精确匹配 | 82 个(约 19.1%) | | 外部服务、历史网关或本仓库未实现 | 348 个(约 80.9%) | | PostgreSQL DDL | 20 个 SQL 文件 | 最重要的判断如下: 1. **当前不是一个完全自包含的前后端系统。** 活跃页面中既有本仓库闭环功能,也有依赖 `/authentication`、`/vanna`、`/dataFactory`、`/digitizationData` 等历史服务的功能。经产品确认,这 348 个未匹配调用基本属于后端服务已经下线后的前端遗留,后续默认按删除和瘦身处理,而不是补建同名后端。 2. **主源码与生产发布源码发生反向漂移。** `app/` 与 `deployment/app/` 有 12 个文件不同,且部署副本包含较新的 DeepSeek、运行时环境加载、日志和生产端口修复。此时执行 `deployment/sync_release.sh` 会用较旧的 `app/` 覆盖部署副本,存在生产回退风险。 3. **认证链路在契约上不闭环。** 前端登录后读取 `data.token`,后端登录接口只返回用户信息;前端之后发送 `Authorization: Bearer undefined`。同时绝大多数后端路由没有认证装饰器,所以“前端路由守卫”并没有形成后端安全边界。 4. **仓库存在必须优先处理的凭据风险。** Git 跟踪了 SSH 私钥 `cursorssh-143`,主配置中还包含 LLM、n8n、MinIO、Neo4j、PostgreSQL 等硬编码凭据或回退值。 5. **数据订单是当前最完整的端到端业务链路。** 它跨 PostgreSQL、Neo4j、LLM、任务表、生成脚本/n8n 工作流和数据产品注册,但缺少跨存储事务、幂等和补偿机制,容易产生“订单失败但图节点/产品/任务已部分创建”的状态。 6. **DataFlow 只保留定义、关系和查询能力。** 执行、状态和日志接口当前是 TODO/mock,产品已确认不再在本代码库实现,应删除对应后端路由、前端 API 和操作入口,不再规划新的调度器来补齐它们。n8n 中的 Workflow 是执行编排实体,不应重命名为 DataFlow。 7. **现有文档不能作为唯一事实来源。** `docs/CODE_DOCUMENTATION.md` 对技术栈、LLM 和部分模块的描述已落后于部署副本,且没有覆盖真实前端页面、外部 API 和源码漂移。 ### 1.1 已确认的产品决策 以下内容已由产品侧于 2026-07-16 确认,可直接作为代码瘦身依据: - 348 个前端未匹配调用基本属于已下线后端服务的遗留调用;默认动作是删除不可达页面、API 定义和关联组件,不为这些旧路径恢复后端。 - DataFlow 的执行、执行状态和执行日志不再由本代码库提供;保留 DataFlow 定义、CRUD、关系、脚本元信息和血缘用途。 - Vanna 已停止使用;`dataChart`、`modelSystem` 及 `api/dataChart.js` 等依赖 Vanna 的页面和调用进入删除范围。 - Airflow 已停止使用;主配置、部署配置、环境变量模板和文档中的 Airflow 配置进入删除范围。 - n8n 继续保留,覆盖工作流管理、执行记录、订单生成工作流和 `onboard` 回调;n8n 与 DataFlow mock 运行接口是两条不同链路,清理时不得误删 n8n 适配层。 - 统一术语:`DataFlow` 表示平台内的数据流程定义、输入输出关系、脚本元信息和血缘节点;`n8n Workflow` 表示 n8n 的执行编排对象。代码和 API 中继续使用 n8n 原生 `workflow` 命名,前端统一展示为“n8n 工作流”或“执行编排”,不将其改名为 `dataflow`。一个 DataFlow 可以关联多个有明确版本标识的 Workflow,同一环境只允许一个当前生效版本。 - 原“产品知识库”更名为“数据治理知识库”。知识来源包括数据业务域定义、数据流程定义、元数据定义以及后续纳入的数据治理资产,目标能力为统一入库、检索和问答;采用“治理对象变更后增量同步 + 每日全量一致性巡检”,不复用已下线的 Vanna/RAG 历史接口。 - 工作台继续保留,支持按用户保存布局;第一阶段提供待审核数、订单状态、数据产品统计、数据源健康和 n8n 执行状态等有限标准组件,并重建本仓库内的持久化接口。 - 暂不开放自助注册;建立管理员、编辑者、查看者三级 RBAC。部署初始化时创建首个管理员,后续用户只能由管理员创建。 - `app/` 是唯一后端源码。先将 `deployment/app/` 中仍有效的修复合并回 `app/`,再将部署目录改为单向生成产物。 - DeepSeek 是当前唯一默认生成式 LLM 和问答模型;数据治理知识库允许使用 Qwen Embedding 模型。删除 Qwen 对话/生成回退,只保留用途隔离的 Embedding 客户端与配置;Vanna 和 Airflow 配置进入清理范围。 - 数据资源、数据模型、数据指标须经可达性核验后删除;本报告第 6.2 节已完成静态核验。数据安全保留前端入口,第一阶段作为明确的待建设占位功能。 - 旧数据工厂非 n8n 模块整体移除,只保留 n8n 适配、订单生成 n8n 工作流、执行记录和回调链路。 - `mcp-servers/task-manager/` 已确认不再使用,进入整体删除范围;HOPMS 数据导入脚本、测试、源文档和 `docs/generated/*.json` 验收样例保留。 - 本轮只从代码和初始化 DDL 中清理已确认的历史表;生产数据库真实表须在只读核查、备份和依赖确认后单独下线。 - 本轮完成历史代码瘦身和 Node LTS 升级;Vue 3 迁移放到下一阶段,不与业务边界收敛同时实施。 - 问卷薪酬、图表定制、旧系统管理、名片解析和数据资产原型已确认整体移除。旧系统管理删除时保留通用 404 页面;名片解析删除时保留当前数据治理中的 `dataGovernance/dataSource` 能力。 ## 2. 仓库层级与源码归属 ```text DataOps-platform/ ├── app/ # 主后端源码;开发迭代应以此为唯一源代码入口 │ ├── api/ # Flask Blueprint 路由层 │ ├── core/ # 业务逻辑、图谱、LLM、n8n、数据处理 │ ├── models/ # SQLAlchemy 模型与统一响应 │ ├── services/ # Neo4j 驱动、DB 健康检查、历史公共函数 │ ├── config/ # 运行配置与 CORS │ └── scripts/ # PostgreSQL 初始化/迁移辅助脚本 ├── frontend/ # Vue 2 单页应用 │ ├── src/router/routes.js # 静态菜单与页面路由事实来源 │ ├── src/api/ # 前端 API 客户端 │ ├── src/views/ # 页面与业务组件 │ ├── src/store/ # Vuex 状态 │ └── src/utils/request.js # Axios 封装与响应契约 ├── database/ # 手工 PostgreSQL DDL/迁移脚本 ├── datafactory/ # DataMeta Agent/n8n 工作流资源 ├── mcp-servers/task-manager/ # 独立 Node.js MCP 服务;已确认整体删除 ├── deployment/ # 可独立上传的生产发布包;当前含有与 app/ 不一致的源码副本 ├── scripts/ # 本地/部署运维与数据导入脚本 ├── tests/ # 后端单元测试,当前无前端测试 └── docs/ # API、部署和专题文档 ``` 源码归属建议: - `app/`、`frontend/src/`、`database/` 应是唯一可编辑源。 - `deployment/app/`、`deployment/database/` 应由 CI 或单向同步脚本生成,不能继续作为另一份可人工修改源码。 - `docs/generated/` 是导入结果,不应被当作业务代码。 - `mcp-servers/task-manager/` 是独立子系统:不在 Flask Blueprint、前端路由或主部署链中注册,已确认不再使用并整体删除。 ## 3. 运行架构与层级关系 ```mermaid flowchart TD U["浏览器用户"] --> V["Vue 2 SPA :18183"] V -->|"/api/*"| N["Nginx / API 网关"] N --> F["Gunicorn + Flask"] F --> A["Blueprint API 层"] A --> C["Core 业务层"] C --> P[("PostgreSQL")] C --> G[("Neo4j")] C --> M[("MinIO")] C --> W["n8n API / Webhook"] C --> L["DeepSeek / OpenAI-compatible LLM"] C --> FS["本地生成脚本与 workflow JSON"] W -->|"订单 onboard 回调"| A ``` ### 3.1 后端调用层级 ```text HTTP 请求 -> app/api//routes.py 参数解析、响应包装、异常转译 -> app/core//*.py 业务规则、状态机、图查询、外部调用 -> app/models/*.py PostgreSQL ORM 模型 -> app/services/*.py Neo4j/数据库基础设施 -> PostgreSQL / Neo4j / MinIO / n8n / LLM ``` 实际代码没有完全遵守该分层:部分路由直接写 Cypher,`core/system/auth.py` 直接使用 psycopg2 连接池,`core/data_flow/dataflows.py` 和 `core/data_service/data_product_service.py` 直接执行 SQL,导致事务、测试和复用边界不统一。 ### 3.2 前端调用层级 ```text routes.js -> defaultRoute.js 动态 import 页面 -> views/**/*.vue -> api/*.js -> utils/request.js (Axios, baseURL=/api) -> 本仓库 Flask 或外部网关服务 ``` 前端当前使用静态路由。`store/modules/menu.js` 的远程菜单调用已注释,权限信息直接取自 `routes.js`;因此路由上的 `roles` 字段并未形成真正的动态授权。 ## 4. 后端模块与核心代码逻辑 ### 4.1 应用初始化与通用响应 - `app/__init__.py` 创建 Flask 应用、初始化 SQLAlchemy/CORS、注册 9 个 Blueprint、配置日志和全局异常处理。 - API 正常返回主要使用 `app/models/result.py` 的 `{code, message, data}` 结构。 - 多数业务错误只改变 JSON 内的 `code`,HTTP 状态仍为 200;前端依赖响应体 `code` 判断成功。这不利于网关、监控、重试和标准客户端处理。 - 全局异常处理会把原始异常文本返回给前端,可能泄露内部结构和连接信息。 ### 4.2 元数据 `meta_data` 主要职责: - `DataMeta` 节点列表、详情、图谱、创建、更新、删除和搜索。 - 新增/更新时进行冗余检测,必要时在 PostgreSQL 创建 `metadata_review_records`。 - 上传、预览、下载结构化/非结构化文件到 MinIO。 - 解析文本并创建 `DataMeta`/`Tag` 图节点。 - 审核处理支持合并、创建、忽略等动作,并写入 `metadata_version_history`。 主要存储:Neo4j `DataMeta`、`DataLabel`、`Tag`、`master_data`;PostgreSQL 审核与版本表;MinIO 文件对象。 ### 4.3 业务域 `business_domain` 主要职责: - `BusinessDomain` 列表、详情、保存、更新、删除和图谱展示。 - 通过 `INCLUDES` 连接 `DataMeta`,通过 `LABEL` 连接 `DataLabel`,通过 `COME_FROM` 连接 `DataSource`。 - 上传 DDL/Excel/Word/PDF,调用 `DDLParser` 解析表和字段。 - 组合多个元数据或业务域,复用/创建元数据并建立关系。 - 新元数据与候选元数据按名称、类型和标签匹配,生成审核记录。 该模块是最大的图谱写入入口之一,`business_domain.py` 约 1,979 行,已混合查询、规则、序列化、审核、创建与更新逻辑,建议拆分为 Repository、MatchingPolicy、ReviewService 和 DomainService。 ### 4.4 数据接口 `data_interface` 主要职责: - `data_standard` 节点的新增、详情、更新、列表、代码生成和图谱。 - `DataLabel` 节点的新增、详情、列表、动态识别、图谱和删除。 - 聚合业务域、数据流、元数据之间的全图关系。 需要注意:数据标准标签使用小写 `data_standard`,其他主要标签使用 PascalCase;图模型命名不一致会增加查询和迁移成本。 ### 4.5 数据源 `data_source` 主要职责: - 将连接配置保存为 Neo4j `DataSource` 节点。 - 列表、删除、连接串解析、LLM 校验和 SQLAlchemy 连接测试。 - `/graph` 路由仍为 TODO,当前没有实际实现。 连接测试可接受用户提供的主机、端口和凭据;在后端无认证的情况下,它相当于一个可访问内网数据库的探测入口,必须纳入 P0 安全治理。 ### 4.6 数据流程 `data_flow` 主要职责: - `DataFlow` 图节点 CRUD。 - 维护业务域/数据源与数据流程的 `INPUT`、`OUTPUT`、`LABEL`、`child` 关系。 - 根据业务域元数据生成源表和目标表 DDL。 - 创建 `public.task_list` 任务记录并关联脚本路径。 - 获取关联脚本内容。 已确认删除的运行时部分: - `execute_dataflow` 及 `/execute-dataflow/{id}`。 - `get_dataflow_status` 及 `/get-dataflow-status/{id}`。 - `get_dataflow_logs` 及 `/get-dataflow-logs/{id}`。 - 前端 `runDataFlow/getDataFlowExecute/getDataFlowLog` 和页面“运行”操作。 删除后,DataFlow 继续作为图谱中的加工过程定义和血缘节点存在,但不再表达本系统可直接执行该流程。此处不再引入 Airflow 或新的统一调度服务。 #### DataFlow 与 n8n Workflow 的命名边界 两者不应合并为同一个术语: | 对象 | 平台语义 | 代码/接口命名 | 用户界面名称 | |---|---|---|---| | `DataFlow` | 数据流程定义、输入输出关系、加工要求、脚本元信息和血缘 | `/api/dataflow/*`、Neo4j `DataFlow` | 数据流程 | | n8n Workflow | n8n 中可启停、查看执行记录和触发的执行编排对象 | `/api/datafactory/workflows/*`、`workflow_id` | n8n 工作流 / 执行编排 | 保留 `workflow` 命名的原因是它与 n8n 公共 API 和对象模型一致,也能避免把“治理定义”误解为“本平台直接执行的任务”。映射规则已确认:一个 DataFlow 可以关联多个有明确版本标识的 n8n Workflow;按环境区分部署状态,每个 DataFlow 在同一环境只能有一个当前生效版本。建议持久化 `dataflow_id`、`environment`、`n8n_workflow_id`、`version`、`is_active`、部署状态和最近一次执行状态,并对 `(dataflow_id, environment)` 的生效记录建立唯一约束。当前代码只生成本地 workflow JSON,没有持久化 n8n Workflow ID,链路仍不完整。 ### 4.7 数据工厂 `data_factory` 这是对 n8n 公共 API 的适配层: - `N8nClient` 负责 URL、鉴权、HTTP 请求和异常封装。 - `N8nService` 将 n8n 的 workflow/execution 结构转为前端格式。 - API 支持工作流列表、详情、状态、启停、执行记录、Webhook 触发和健康检查。 它不负责前端 `dataFactory.js` 中旧版生产线、接入、加工、集成、日志等约 98 个接口;这些非 n8n 旧数据工厂页面和调用已确认整体删除。保留范围仅包括 n8n 客户端、适配服务、`/api/datafactory/workflows*`、执行记录、健康检查、订单生成 n8n workflow JSON 和 `onboard` 回调。 ### 4.8 数据产品与数据订单 `data_service` #### 数据产品 - PostgreSQL `data_products` 保存产品元信息和目标物理表定位。 - 预览接口查询 `information_schema`,再动态读取目标表并合并 Neo4j 字段标签。 - 支持 Excel 下载、浏览标记、统计刷新、注册和删除。 - 血缘可视化沿 `DataFlow -> BusinessDomain -> DataMeta/DataSource` 追踪生产链。 风险:目标 schema/table 来自产品注册参数,随后拼接进动态 SQL。虽然使用双引号,但没有白名单校验,仍应按 SQL 标识符注入风险治理。 #### 数据订单状态机 ```mermaid stateDiagram-v2 [*] --> pending: 创建订单 pending --> analyzing: 开始 LLM 分析 analyzing --> need_supplement: 提取失败 analyzing --> manual_review: 无匹配域或不可连通 analyzing --> pending_approval: 图谱可连通 need_supplement --> pending: 修改订单 manual_review --> pending: 修改订单 pending_approval --> processing: 审批并生成资源 manual_review --> processing: 人工审批 processing --> onboard: n8n/数据工厂回调 onboard --> completed: 用户确认完成 pending_approval --> rejected: 驳回 manual_review --> rejected: 驳回 ``` 审批通过后会依次: 1. 用 LLM 提取输出业务域、字段和处理逻辑。 2. 在 Neo4j 创建输出 `BusinessDomain`、`DataMeta`、`DataFlow` 以及 `INPUT/OUTPUT/INCLUDES/LABEL` 关系。 3. 在 PostgreSQL 注册 `data_products`。 4. 在 PostgreSQL 写入 `task_list`。 5. 在本地生成 n8n workflow JSON。 6. 将订单置为 `processing`,等待 `/orders/{id}/onboard` 回调。 这条链路跨越多个不可共同提交的存储,没有 Saga/Outbox、幂等键或补偿清理。任何中途失败都可能留下孤立图节点、重复产品或无效任务。 ### 4.9 系统、认证和图操作 - `system` 提供健康、配置、系统信息、配置校验、注册、登录、用户查询和翻译。 - 用户密码只是 Base64 编码,不是安全密码哈希。 - `require_auth` 比较整个 Authorization 头与 `SECRET_KEY`,但当前业务路由没有普遍使用该装饰器。 - `/api/graph/query` 可执行任意 Cypher;在无认证状态下风险极高。 - Neo4j 关系普遍使用内部 `id(node)` 作为跨表引用。Neo4j 内部 ID 不适合作为稳定业务主键,应逐步迁移为 UUID/业务 ID。 ### 4.10 数据清洗、校验与 LLM - `DataCleaner` 支持空值、重复、类型转换和离群值处理。 - `DataValidator` 提供必填、类型、正则、邮箱、电话和自定义规则。 - 这两个模块目前更像工具库,未形成明确的 API 或数据流程执行闭环。 - `DDLParser` 支持 SQL/Excel/Word/PDF,优先本地 SQL 解析,再调用 LLM。 - 主源码仍有 Qwen/DashScope 生成式回退配置,部署副本已转向 DeepSeek。产品已确认 DeepSeek 为唯一默认生成式 LLM 和知识库问答模型,同时允许 Qwen Embedding 用于语义向量化。应将部署副本中的有效 DeepSeek 修复合并回 `app/`,删除 Qwen 对话/生成回退和硬编码配置;Qwen Embedding 使用独立客户端、独立模型配置和独立用途凭据,不能重新演变为通用 LLM 回退。 ## 5. 后端 API 完整清单 共 107 个路由。以下路径均含 `/api` 前缀。 ### 5.1 `system`:8 个 | 方法 | 路径 | 逻辑/存储 | |---|---|---| | GET | `/system/health` | PostgreSQL、Neo4j 和系统健康 | | GET | `/system/config` | 脱敏配置视图 | | GET | `/system/info` | 进程/系统信息 | | GET | `/system/config/validate` | 配置完整性检查 | | POST | `/system/auth/register` | PostgreSQL `users` | | POST | `/system/auth/login` | PostgreSQL `users` | | GET | `/system/auth/user/{username}` | PostgreSQL `users` | | POST | `/system/translate` | LLM/本地回退翻译 | ### 5.2 `meta`:22 个 | 方法 | 路径 | |---|---| | POST | `/meta/node/list`、`/meta/node/graph`、`/meta/node/delete`、`/meta/node/edit`、`/meta/node/add`、`/meta/node/update` | | GET | `/meta/check`、`/meta/search`、`/meta/config` | | POST | `/meta/full/text/query`、`/meta/unstructure/text/query`、`/meta/text/graph`、`/meta/unstructured/process` | | POST | `/meta/resource/upload`、`/meta/resource/display`、`/meta/resource/translate`、`/meta/resource/node` | | GET | `/meta/resource/download` | | POST | `/meta/review/list`、`/meta/review/create`、`/meta/review/resolve` | | GET | `/meta/review/detail` | ### 5.3 `bd`:12 个 | 方法 | 路径 | |---|---| | POST | `/bd/list`、`/bd/detail`、`/bd/delete`、`/bd/save`、`/bd/update` | | POST | `/bd/upload`、`/bd/graphall`、`/bd/ddlparse`、`/bd/search`、`/bd/compose`、`/bd/labellist` | | GET | `/bd/download` | ### 5.4 `interface`:15 个 | 方法 | 路径 | |---|---| | POST | `/interface/data/standard/add`、`detail`、`code`、`update`、`list`、`graph/all` | | POST | `/interface/data/label/add`、`detail`、`list`、`dynamic/identify`、`graph/all`、`delete` | | POST | `/interface/labellist`、`/interface/graphall`、`/interface/metric/label/standard/delete` | ### 5.5 `datasource`:7 个 全部为 POST:`/datasource/save`、`list`、`delete`、`parse`、`valid`、`conntest`、`graph`。 ### 5.6 `dataflow`:10 个 | 方法 | 路径 | |---|---| | GET | `/dataflow/get-dataflows-list`、`/get-dataflow/{id}`、`/get-dataflow-status/{id}`、`/get-dataflow-logs/{id}`、`/get-BD-list`、`/get-script/{id}` | | POST | `/dataflow/add-dataflow`、`/execute-dataflow/{id}` | | PUT | `/dataflow/update-dataflow/{id}` | | DELETE | `/dataflow/delete-dataflow/{id}` | ### 5.7 `datafactory`:10 个 | 方法 | 路径 | |---|---| | GET | `/datafactory/workflows`、`/workflows/{id}`、`/workflows/{id}/status`、`/workflows/{id}/executions`、`/executions`、`/executions/{id}`、`/health` | | POST | `/datafactory/workflows/{id}/activate`、`deactivate`、`execute` | ### 5.8 `dataservice`:19 个 | 方法 | 路径 | |---|---| | GET | `/dataservice/products`、`/products/{id}`、`/products/{id}/preview`、`/products/{id}/download`、`/orderlist`、`/orders/{id}/detail` | | POST | `/dataservice/products`、`/products/{id}/lineage-visualization`、`/products/{id}/viewed`、`/products/{id}/refresh` | | DELETE | `/dataservice/products/{id}` | | POST | `/dataservice/neworder`、`/orders/{id}/analyze`、`approve`、`reject`、`onboard`、`complete` | | PUT | `/dataservice/orders/{id}/update`、`/orders/{id}/delete` | ### 5.9 `graph`:4 个 全部为 POST:`/graph/query`、`/graph/node/create`、`/graph/relationship/create`、`/graph/subgraph`。 ## 6. 前端页面—接口—后端—存储映射 ### 6.1 活跃路由映射 | 页面路由 | 页面组件 | 主要 API | 后端/存储 | 闭环状态 | |---|---|---|---|---| | `/home`、`/home/edit` | `views/home` | `/authentication/user/menu/*` | 历史菜单服务已下线 | **保留;重建按用户布局持久化,首期有限标准组件** | | `/knowledge-base-product`(历史路由名) | `knowledgeBaseProduct/index` | `/text/product/list` | 历史知识库服务已下线 | **更名并重建为数据治理知识库,支持治理定义检索和问答** | | `/data-chart` | `dataChart` | `/vanna/v0/*` | 已停用 Vanna | **已确认删除** | | `/data-governance/metadata` | `dataGovernance/metadata` | `/meta/node/*`、`/meta/review/create`、`/interface/labellist`、`/system/translate` | Neo4j、PostgreSQL 审核表、LLM | **本仓库闭环** | | `/data-governance/business-domain` | `dataGovernance/businessDomain` | `/bd/*`、`/meta/node/list`、`/interface/labellist`、`/datasource/list` | Neo4j、MinIO、PostgreSQL 审核表、LLM | **本仓库闭环** | | `/data-governance/data-standard` | `dataGovernance/dataStandard` | `/interface/data/standard/*`;删除调用 `/metric/label/standard/delete` | Neo4j | 列表/新增/详情闭环;**删除路径少 `/interface` 前缀** | | `/data-governance/data-process` | `dataGovernance/dataProcess` | `/dataflow/*`、`/interface/labellist` | Neo4j、PostgreSQL `task_list`、脚本文件 | 保留定义/CRUD;删除运行、状态、日志 | | `/data-governance/data-Label` | `dataGovernance/dataLabel` | `/interface/data/label/*` | Neo4j `DataLabel` | **本仓库闭环** | | `/data-governance/data-source` | `dataGovernance/dataSource` | `/datasource/list/save/delete/parse/valid/conntest` | Neo4j、外部目标数据库、LLM | 除 graph 外闭环 | | `/data-book/data-metadata`及详情 | `dataBook/dataMetaData` | `/meta/node/list/edit/graph`、`/interface/graphall` | Neo4j | **本仓库闭环** | | `/data-book/business-domain`及详情 | `dataBook/businessDomain` | `/bd/list/detail/search`、`/interface/graphall` | Neo4j | **本仓库闭环** | | `/data-book/data-standard`及详情 | `dataBook/dataStandard` | `/interface/data/standard/list/detail`、`/interface/graphall` | Neo4j | **本仓库闭环** | | `/data-book/data-process`及详情 | `dataBook/dataProcess` | `/dataflow/get-*`、`/interface/graphall` | Neo4j、脚本文件 | 查询闭环 | | `/data-book/data-label`及详情 | `dataBook/dataLabel` | `/interface/data/label/list/detail`、`/interface/graphall` | Neo4j | **本仓库闭环** | | 数据工厂“生产线管理” | 外部 URL `VUE_APP_N8N_URL` | 直接跳转 n8n | n8n | 外部系统 | | `/dataFactory/workflow` | `dataFactory/workflow` | `/datafactory/workflows*`、`executions*`、`health` | n8n API | **保留;术语固定为 n8n 工作流/执行编排** | | `/dataService/dataOrder` | `dataService/dataOrder` | `/dataservice/order*` | PostgreSQL、Neo4j、LLM、n8n/文件 | **核心链路闭环,但跨存储一致性不足** | | `/dataService/dataProduct` | `dataService/dataProduct` | `/dataservice/products*` | PostgreSQL、目标物理表、Neo4j | **本仓库闭环** | | `/dataReview` | `dataReview` | `/meta/review/list/detail/resolve`、`/dataflow/get-BD-list` | PostgreSQL 审核/历史表、Neo4j | **本仓库闭环** | | `/data-asset`及详情 | `dataAsset` | 无真实 API | 页面内硬编码一条示例数据 | **已确认删除** | | `/model-system/*` | `modelSystem/*` | `/vanna/v0/*` | 已停用 Vanna | **已确认删除** | ### 6.2 已注释但仍保留代码的页面 以下功能在 `routes.js` 中已注释或隐藏,但源码仍存在,会继续增加维护成本:数据资源、数据模型、数据指标、数据安全、RDBMS/非结构化数据来源、旧数据工厂接入/加工/集成、系统管理、问卷、图表定制等。 #### 数据资源、数据模型、数据指标静态可达性复核 | 模块 | 路由状态 | API/后端状态 | 残余引用 | 结论 | |---|---|---|---|---| | 数据资源 | 治理页和数据地图页全部注释 | 前端依赖 `/resource/*`;本仓库没有对应 Blueprint | 旧数据工厂 `dispatch` 页面和数据地图共享组件旧默认 API | 当前无可达业务入口;随旧数据工厂删除,并清理共享组件默认值后可删除 | | 数据模型 | 治理页和数据地图页全部注释 | 前端依赖 `/model/*`;本仓库没有对应 Blueprint | 引用集中在 `dataGovernance/dataModules`、`dataBook/dataModel` | 当前无可达业务入口,可以删除 | | 数据指标 | 治理页和数据地图页全部注释 | 前端依赖 `/metric/*`;本仓库没有指标 CRUD Blueprint | 引用集中在 `dataGovernance/dataIndicator`、`dataBook/indicator` | 当前无可达业务入口,可以删除;`/interface/metric/label/standard/delete` 是数据标准删除接口,不代表指标模块仍可用 | 该结论来自静态路由、动态组件路径、前端 API 引用和 Flask Blueprint 的交叉核验。当前 `store/modules/menu.js` 的远端 `getMenu2` 调用已注释,运行时直接使用 `router/routes.js`,不存在后端动态菜单重新激活这三个模块的代码路径。真正删除时仍执行三道保护:先移除共享组件中的旧默认 API,再执行前端构建,最后回归元数据、业务域、数据标准、数据标签、数据流程、数据产品和数据审核页面。本次未实时核对线上静态包,部署前仍需确认线上包与当前源码版本一致。 数据安全与上述三项不同:当前 `dataGovernance/dataSecurity/index.vue` 是未调用后端的占位页面,`created()` 中的初始化已注释。产品已确认保留并恢复“数据安全”前端入口,首期页面应明确展示“规划中/待建设”,避免用空表伪装为已实现功能,后续再补权限策略、脱敏、审计或分级分类等正式能力。 已确认整体删除:Vanna/DataChart/ModelSystem、Airflow 配置、DataFlow mock 运行时、问卷薪酬、图表定制、旧系统管理、名片解析、数据资产原型、数据资源、数据模型、数据指标、旧数据工厂非 n8n 页面和 `mcp-servers/task-manager/`。保留项是 n8n、数据治理知识库、工作台、数据安全入口、HOPMS 导入工具,以及当前已经闭环的数据治理/地图/服务/审核能力。 ### 6.3 前端 API 依赖分布 | 前端 API 模块 | 调用数 | 本仓库匹配 | 外部/未实现 | |---|---:|---:|---:| | `dataGovernance.js` | 91 | 43 | 48 | | `dataFactory.js` | 108 | 10 | 98 | | `dataService.js` | 9 | 9 | 0 | | `dataOrder.js` | 9 | 9 | 0 | | `dataOrigin.js` | 11 | 6 | 5 | | `dataReview.js` | 3 | 3 | 0 | | `dataBook.js` | 52 | 0 | 52 | | `dataChart.js` | 40 | 0 | 40 | | `menu.js` | 29 | 0 | 29 | | `system.js` | 39 | 0 | 39 | | `user.js` | 9 | 1 | 8 | | 其他 4 个模块 | 30 | 1 | 29 | 未匹配接口按一级路径聚合,主要为:`dataFactory` 141、`authentication` 57、`vanna` 43、`digitizationData` 33、`op_maintenance` 14、`resource` 12、`model` 11、`metric` 11,其余为 `dags/parse/pipeline/text/rag/graph` 等。 产品侧已确认这些未匹配调用大部分来自已下线后端。实施删除前仍需对活跃路由和仍被 import 的组件做一次可达性复核;只有产品明确要求保留的少量模块才进入重新实现或外部服务映射。 ## 7. 数据库与图模型对应 ### 7.1 PostgreSQL 表 | 表 | 代码模型/入口 | 页面/API | 状态 | |---|---|---|---| | `public.users` | `core/system/auth.py` 直接 psycopg2 | 登录、注册、用户查询 | 运行时建表;Base64 密码;无正式迁移 | | `public.data_products` | `models/DataProduct` | 数据产品列表、预览、下载、统计、血缘 | 活跃核心表 | | `public.data_orders` | `models/DataOrder` | 数据订单创建、分析、审批、回调、完成 | 活跃核心表;`data_source` 依赖单独迁移 | | `public.metadata_review_records` | `MetadataReviewRecord` | `/dataReview`、元数据/业务域冗余审核 | 活跃核心表 | | `public.metadata_version_history` | `MetadataVersionHistory` | 审核解决时记录前后快照 | 活跃核心表 | | `public.task_list` | dataflow/order 服务直接 SQL | 订单审批生成任务、数据流程 | 活跃;无 ORM 模型 | | `public.calendar_info` | SQL 脚本 | 当前 Flask 路由无直接使用 | 遗留/外部功能 | | `public.calendar_records` | SQL/脚本 | 当前 Flask 路由无直接使用 | 遗留/外部功能 | | `public.wechat_users` | SQL/迁移脚本 | 当前 Flask 路由无直接使用 | 外部微信登录能力 | | `business_cards` / `duplicate_business_cards` | SQL 脚本 | 前端 `/parse/*`,本仓库无后端路由 | 外部/遗留能力 | | `hotel_group_brands` | SQL 脚本 | 问卷/薪酬外部接口 | 参考数据;DDL 注释引用不存在的 `sequence_no` | | `hotel_positions` | SQL 脚本 | 问卷/薪酬外部接口 | 参考数据 | 本轮数据库清理边界已经确认:对随历史模块下线的表,只清理代码引用和初始化 DDL,不在本轮直接执行生产 `DROP TABLE`。生产真实表下线必须独立完成只读 schema/数据量/最近写入/依赖核查、备份、审批和可恢复删除方案。 数据库治理问题: - `requirements.txt` 包含 Alembic/Flask-Migrate,但仓库没有可追溯的 Alembic revision 链。 - DDL、增量 ALTER、回滚脚本混在同一目录,没有版本顺序和已执行状态。 - ORM、DDL 和生产库可能漂移,例如 `data_orders.data_source` 依赖额外脚本。 - `result_product_id`、`result_dataflow_id` 等跨 PostgreSQL/Neo4j 引用没有数据库外键,也没有应用级一致性审计。 - `users` 同时绕过 SQLAlchemy,自建 psycopg2 池,连接与事务管理不统一。 ### 7.2 Neo4j 图模型 核心节点: | 节点标签 | 含义 | 主要入口 | |---|---|---| | `DataMeta` | 字段/元数据 | 元数据、业务域、订单生成 | | `BusinessDomain` | 业务表/业务域/输出数据产品域 | 业务域、数据订单 | | `DataSource` | 数据库连接与来源 | 数据源、业务域 | | `DataFlow` | 加工流程 | 数据流程、数据订单 | | `DataLabel` | 标签 | 数据标签、元数据、业务域、流程 | | `data_standard` | 数据标准 | 数据标准 | | `DataResource`、`DataModel` | 旧版资源/模型 | 路由已关闭或依赖外部接口 | | `Tag`、`master_data` | 非结构化标签/主数据 | 元数据扩展能力 | 核心关系: ```mermaid flowchart LR DS["DataSource"] -->|"COME_FROM 反向语义:BD 来源于 DS"| BD["BusinessDomain"] BD -->|"INCLUDES"| DM["DataMeta"] DM -->|"LABEL"| DL["DataLabel"] DM -->|"ALIAS"| DM2["DataMeta"] BD -->|"INPUT"| DF["DataFlow"] DF -->|"OUTPUT"| OUT["BusinessDomain"] DF -->|"LABEL"| DL ``` 代码中同时出现 `BusinessDomain-[:INPUT]->DataFlow` 和部分查询注释/旧逻辑中的其他方向假设,下一轮应建立唯一图模型约束、关系方向和索引定义。 ### 7.3 MinIO、文件系统与外部存储 - MinIO 保存业务域上传文件和元数据资源文件。 - 数据产品实际数据不存于 `data_products`,而是由 `target_schema + target_table` 指向 PostgreSQL 物理表。 - 订单审批会在本地 `datafactory/workflows/` 生成 n8n Workflow JSON,在 `datafactory/scripts/` 约定任务脚本路径。 - Vanna、相关 Redis/PgVector 管理页面和 Airflow 配置已确认不再使用,应从当前系统架构和部署要求中移除。 - HOPMS 导入工具暂时保留,包括 `scripts/import_hopms_dataset.py`、对应测试和源 DOCX;`docs/generated/*.json` 作为验收样例一并保留,不随本轮历史模块删除。 ## 8. 关键业务链路 ### 8.1 DDL 到业务域 ```text 前端上传文件 -> /bd/ddlparse -> DDLParser 本地解析或 LLM -> 前端确认表/字段 -> /bd/save 或 /bd/update -> Neo4j BusinessDomain + DataMeta + LABEL/INCLUDES/COME_FROM -> 命中重复规则时写 metadata_review_records -> /dataReview 人工处理 -> metadata_version_history + Neo4j 合并/新建 ``` ### 8.2 数据订单到数据产品 ```text 创建 data_orders -> LLM 提取业务域/字段/用途/标签 -> Neo4j 匹配和连通性分析 -> 人工审批 -> 创建输出 BusinessDomain/DataMeta/DataFlow -> 注册 data_products -> 创建 task_list -> 生成 n8n workflow JSON -> n8n 执行脚本 -> onboard 回调 -> 用户确认 completed ``` ### 8.3 数据产品预览与血缘 ```text data_products 定位 schema/table -> information_schema 读取列 -> 动态 SELECT 读取样例/统计 -> Neo4j 根据 source_dataflow_id 查目标业务域和字段标签 -> 前端表格/血缘图展示 ``` ### 8.4 数据治理知识库(下一轮目标链路) 现有 `/knowledge-base-product` 页面仍使用产品资料字段和已下线的 `/text/product/list`、历史 RAG 对比组件,不能直接作为新功能后端契约。建议保留页面入口但重构名称、数据模型和交互: ```text 业务域 / DataFlow / DataMeta / 数据标准 / 数据标签等治理定义 -> 按实体类型、业务域、版本、责任人和权限抽取标准知识文档 -> 治理对象变更后增量同步,并每日执行一次全量一致性巡检 -> 保存来源实体 ID、版本、内容哈希和更新时间 -> 使用 Qwen Embedding 建立语义索引,同时保留关键词检索 -> 检索结果携带来源、实体类型和版本引用 -> DeepSeek 基于检索上下文回答 -> 用户可回跳原始治理对象核验答案 ``` 首期至少需要:变更增量同步、每日一致性巡检、统一搜索、问答、来源引用、权限过滤和索引状态;不得直接复用 Vanna、旧 `/rag/*` 或 `/text/product/*` 契约。知识库应以现有治理实体为事实源,不维护另一套无法追溯的手工副本。DeepSeek 负责生成式问答,Qwen Embedding 只负责向量化,两类模型配置和调用适配必须解耦。 ### 8.5 工作台(下一轮目标链路) 现有 `/home/edit` 调用已下线的 `/authentication/user/menu/*`,且标准组件清单基本被注释。首期标准组件确认为:待审核数、订单状态、数据产品统计、数据源健康和 n8n 执行状态。后端按用户保存组件 ID、布局、尺寸和必要配置;组件能力由三级 RBAC 过滤,不开放任意前端组件路径或脚本配置。 ## 9. 风险与技术债优先级 ### P0:迭代开始前必须处理 1. **撤销并轮换仓库中的真实凭据。** 删除 Git 跟踪的 SSH 私钥,轮换 SSH、LLM、n8n、MinIO、Neo4j、PostgreSQL 凭据;必要时清理 Git 历史。 2. **落实唯一源码。** `app/` 已确认为唯一后端源码;将 `deployment/` 改为生成产物,先逐项审查并把部署副本中仍有效的修复合并回 `app/`,再执行单向同步,禁止当前脚本直接覆盖。 3. **修复认证闭环。** 使用 Argon2/bcrypt 密码哈希、签发有时效的 JWT/session、后端统一鉴权和管理员/编辑者/查看者三级 RBAC;首期不提供自助注册,禁止只依赖前端路由守卫。 4. **关闭危险匿名能力。** 优先保护任意 Cypher、数据源连接测试、文件上传下载、订单审批和系统配置接口。 5. **建立前端删除清单。** 以路由可达性、组件 import 和 API 引用为依据清理 348 个历史调用;默认删除,只有产品明确保留的模块才重新设计后端契约。 6. **对生产数据库做只读 schema 快照。** 对比 SQLAlchemy 模型、SQL 文件和实际表结构,再生成正式迁移基线。 ### P1:架构稳定化 1. 统一 HTTP 状态码和响应结构,建立 OpenAPI 契约。 2. 引入 Alembic 正式 revision,停止手工无序 SQL 发布。 3. 将 Neo4j 查询、PostgreSQL ORM/SQL、MinIO 和 n8n 抽为 Repository/Adapter。 4. 为订单审批引入 Saga/Outbox、幂等键、补偿清理和可恢复步骤状态。 5. 用业务 UUID 替代 Neo4j 内部 `id()`。 6. 校验动态 schema/table 标识符;限制数据源连接测试的协议、网段和账号权限。 7. 删除 DataFlow 的 mock 执行、状态和日志接口,同时保留 DataFlow 作为定义和血缘节点的语义。 ### P2:前端与功能收敛 1. 为活跃路由建立明确 API ownership;优先保证数据研发、数据地图、数据服务和审核闭环。 2. 修复数据标准删除路径缺少 `/interface` 前缀的问题。 3. 删除硬编码的数据资产原型页面和路由。 4. 删除 Vanna/DataChart/ModelSystem、Airflow 配置、DataFlow 运行时操作、问卷薪酬、图表定制、旧系统管理、名片解析、数据资源、数据模型、数据指标、旧数据工厂非 n8n 页面和 task-manager MCP 服务;保留数据安全入口。 5. 前端升级到受支持 Node LTS;本轮保持 Vue 2,Vue 3 渐进迁移明确放到下一阶段。 6. 移除生产环境全局禁用 `console.error`,接入统一前端错误上报。 7. 将原产品知识库重构为数据治理知识库,围绕业务域、数据流程、元数据等治理定义设计采集、索引、检索和问答契约;工作台重建按用户保存布局的后端契约,首期仅提供有限标准组件。两者均不复用已经下线的历史接口。 ### P3:工程化与可观测性 1. 后端单元、API 契约、PostgreSQL/Neo4j 集成、订单 Saga 和前端 E2E 测试。 2. CI 中执行 lint、type check、test、依赖/密钥扫描和部署包一致性检查。 3. 统一结构化日志、request ID、审计日志、指标和告警。 4. 前后端构建产物版本化,部署后自动进行健康、登录和关键页面烟测。 ## 10. 建议的下一轮开发计划 ### Sprint 0:基线与安全收口(1–2 周) - 凭据轮换和 Git 安全清理。 - 合并 `app/` 与 `deployment/app/`,建立一致性 CI。 - 导出生产 API 路由、网关配置、PostgreSQL schema 和 Neo4j schema。 - 定义核心域负责人:元数据、业务域、DataFlow 定义/血缘、n8n 执行编排、订单/产品、数据治理知识库。 - 产出 OpenAPI v1 和历史代码删除清单。 **退出条件:** 可以明确回答每个活跃页面调用哪个服务、部署哪份代码、读写哪些数据。 ### Sprint 1:认证、契约与迁移(2–3 周) - 新认证机制和管理员/编辑者/查看者三级 RBAC;部署初始化创建首个管理员,关闭自助注册,后续用户由管理员创建,并为危险接口加权限。 - 统一错误码、HTTP 状态和请求校验。 - 建立 Alembic 基线与生产 schema 差异报告。 - 修复活跃页面已知接口错配和登录 token 契约。 **退出条件:** 未登录无法访问业务 API;数据库变更可版本化、可回滚。 ### Sprint 2:订单可靠性与 DataFlow 语义收口(3–4 周) - 将订单审批拆为可恢复步骤,加入幂等、Outbox 和补偿。 - 删除 DataFlow 运行、状态和日志的 mock 链路,统一其“定义与血缘节点”定位。 - 保留 n8n 订单工作流链路及 `workflow` 原生命名,前端统一显示“n8n 工作流/执行编排”;实现一个 DataFlow 对多个有版本标识的 Workflow,并保证同一环境只有一个当前生效版本,同时升级部署、执行追踪、失败重试和 `onboard` 回调可靠性。 - 建立订单—任务—流程—产品一致性巡检。 **退出条件:** 任一步骤失败可重试或补偿,不留下不可解释的半成品。 ### Sprint 3:前端与外部能力收敛(3–5 周) - 按页面清理 348 个未匹配调用,删除 Vanna、Airflow、问卷薪酬、图表定制、旧系统管理、名片解析、数据资产原型、数据资源、数据模型、数据指标、旧数据工厂非 n8n 页面、task-manager MCP 服务和其他不可达历史页面;恢复并保留数据安全占位入口。 - 外部服务客户端分域,环境配置显式化。 - 建立数据治理知识库的增量同步、每日全量一致性巡检、Qwen Embedding 检索和 DeepSeek 问答能力;建立工作台按用户保存布局能力,首期组件为待审核数、订单状态、数据产品统计、数据源健康和 n8n 执行状态。 - 升级 Node LTS 和前端依赖,保持 Vue 2,补齐关键页面 E2E;Vue 3 迁移进入下一阶段计划。 **退出条件:** 活跃菜单中不再出现静态演示页或无所有者接口。 ### Sprint 4:可观测性与发布(2–3 周) - 全链路 request/trace ID、结构化日志、审计日志和告警。 - CI/CD、数据库迁移门禁、部署包校验和回滚演练。 - 性能基线:大图查询、DDL 解析、产品预览、订单分析。 ## 11. 验收指标建议 | 领域 | 指标 | |---|---| | API 闭环 | 活跃页面 API 100% 有明确服务 owner;无 owner 调用为 0 | | 安全 | 仓库密钥扫描为 0;危险接口认证覆盖 100% | | 数据库 | ORM/DDL/生产 schema 差异为 0;所有变更有 migration revision | | 可靠性 | 订单跨存储步骤可重试、可补偿;重复审批不产生重复资源 | | 测试 | 核心后端服务、API 契约和活跃页面 E2E 纳入 CI | | 发布 | `app/` 与发布包一致性自动校验;部署可回滚 | | 可观测性 | 订单、任务、流程、n8n 执行可用同一关联 ID 查询 | ## 12. 本次验证边界 已完成: - 全仓库文件、路由、前端 API、页面导入、ORM、SQL、Cypher、部署脚本和配置的静态解析。 - 147 个 Python 文件语法解析,语法错误为 0。 - 主源码与部署副本差异检查。 - 当前工作树检查;仅保留用户已有的 `frontend/src/router/routes.js` 菜单隐藏修改,未覆盖该改动。 未完成且需要后续环境支持: - 当前本机 Python 环境没有 Flask、SQLAlchemy、Neo4j、MinIO、OpenAI、psycopg2、pandas、numpy 和 pytest,现有 18 个后端测试函数无法执行。 - `frontend/node_modules` 不存在,未执行前端构建或浏览器 E2E。 - 本次没有连接生产 PostgreSQL、Neo4j、MinIO、n8n 或线上网关,因此“外部/未实现”表示本仓库未找到对应实现,不等于线上一定不可用。 - 未对线上静态包和服务器当前部署副本做实时校验。 ## 13. 建议立即补充的架构产物 1. `OPENAPI.yaml`:本仓库 107 个路由的正式契约。 2. `FRONTEND_REMOVAL_INVENTORY.md`:348 个历史调用对应的页面、组件、API 定义、删除批次和少量保留例外。 3. `DATA_MODEL.md`:PostgreSQL ER 图、Neo4j 标签/关系约束、跨存储 ID 规则。 4. `DEPLOYMENT_SOURCE_OF_TRUTH.md`:源码到发布包、前端静态包、Nginx/Gunicorn 的唯一发布链。 5. `ADR-001-authentication.md`、`ADR-002-workflow-engine.md`、`ADR-003-cross-store-consistency.md`。 完成以上基线后,再排具体功能需求,能显著降低下一轮迭代在认证、接口归属、数据库迁移和部署回退上的返工。 ## 14. 详细设计决策补充 以下边界已由产品侧确认,后续设计和开发计划直接以此为准: 1. 数据治理知识库采用“治理对象变更后增量同步 + 每日全量一致性巡检”。增量同步负责时效性,每日巡检负责发现漏同步、版本漂移和孤立索引。 2. DeepSeek 负责知识库最终问答;语义检索允许使用 Qwen Embedding 模型。Qwen Embedding 是专用向量化依赖,不恢复 Qwen 作为生成式 LLM 的回退路径。具体 Embedding 型号、向量维度和索引存储属于技术选型,不再构成产品边界问题。 3. 一个 DataFlow 可以对应多个有明确版本标识的 n8n Workflow;不同环境分别管理生效状态,同一个 DataFlow 在同一环境只允许一个当前生效版本。 4. 工作台首期标准组件包括待审核数、订单状态、数据产品统计、数据源健康和 n8n 执行状态,支持按用户保存布局。 5. 部署初始化时创建第一个管理员;系统不开放自助注册,后续新用户由管理员创建,并赋予管理员、编辑者或查看者角色。 6. HOPMS 的 `docs/generated/*.json` 作为验收样例保留,同时保留源 DOCX、导入脚本和自动化测试。 ## 附录 A:107 个后端路由逐项索引 本附录记录瘦身实施前的当前代码基线,由 `app/api/*/routes.py` 的 Blueprint 前缀和路由装饰器逐项核对。已确认删除的 DataFlow 运行时路由仍列在这里,便于后续通过路由数量变化验证清理结果。 ### A.1 business_domain ```text POST /api/bd/list POST /api/bd/detail POST /api/bd/delete POST /api/bd/save POST /api/bd/update POST /api/bd/upload GET /api/bd/download POST /api/bd/graphall POST /api/bd/ddlparse POST /api/bd/search POST /api/bd/compose POST /api/bd/labellist ``` ### A.2 data_factory ```text GET /api/datafactory/workflows GET /api/datafactory/workflows/{workflow_id} GET /api/datafactory/workflows/{workflow_id}/status POST /api/datafactory/workflows/{workflow_id}/activate POST /api/datafactory/workflows/{workflow_id}/deactivate GET /api/datafactory/workflows/{workflow_id}/executions GET /api/datafactory/executions GET /api/datafactory/executions/{execution_id} POST /api/datafactory/workflows/{workflow_id}/execute GET /api/datafactory/health ``` ### A.3 data_flow ```text GET /api/dataflow/get-dataflows-list GET /api/dataflow/get-dataflow/{dataflow_id} POST /api/dataflow/add-dataflow PUT /api/dataflow/update-dataflow/{dataflow_id} DELETE /api/dataflow/delete-dataflow/{dataflow_id} POST /api/dataflow/execute-dataflow/{dataflow_id} GET /api/dataflow/get-dataflow-status/{dataflow_id} GET /api/dataflow/get-dataflow-logs/{dataflow_id} GET /api/dataflow/get-BD-list GET /api/dataflow/get-script/{dataflow_id} ``` ### A.4 data_interface ```text POST /api/interface/data/standard/add POST /api/interface/data/standard/detail POST /api/interface/data/standard/code POST /api/interface/data/standard/update POST /api/interface/data/standard/list POST /api/interface/data/standard/graph/all POST /api/interface/data/label/add POST /api/interface/data/label/detail POST /api/interface/data/label/list POST /api/interface/labellist POST /api/interface/graphall POST /api/interface/data/label/dynamic/identify POST /api/interface/data/label/graph/all POST /api/interface/metric/label/standard/delete POST /api/interface/data/label/delete ``` ### A.5 data_service ```text GET /api/dataservice/products GET /api/dataservice/products/{product_id} GET /api/dataservice/products/{product_id}/preview POST /api/dataservice/products/{product_id}/lineage-visualization GET /api/dataservice/products/{product_id}/download POST /api/dataservice/products/{product_id}/viewed POST /api/dataservice/products/{product_id}/refresh DELETE /api/dataservice/products/{product_id} POST /api/dataservice/products GET /api/dataservice/orderlist GET /api/dataservice/orders/{order_id}/detail POST /api/dataservice/neworder PUT /api/dataservice/orders/{order_id}/update POST /api/dataservice/orders/{order_id}/analyze POST /api/dataservice/orders/{order_id}/approve POST /api/dataservice/orders/{order_id}/reject POST /api/dataservice/orders/{order_id}/onboard POST /api/dataservice/orders/{order_id}/complete PUT /api/dataservice/orders/{order_id}/delete ``` ### A.6 data_source ```text POST /api/datasource/save POST /api/datasource/list POST /api/datasource/delete POST /api/datasource/parse POST /api/datasource/valid POST /api/datasource/conntest POST /api/datasource/graph ``` ### A.7 graph ```text POST /api/graph/query POST /api/graph/node/create POST /api/graph/relationship/create POST /api/graph/subgraph ``` ### A.8 meta_data ```text POST /api/meta/node/list POST /api/meta/node/graph POST /api/meta/node/delete POST /api/meta/node/edit GET /api/meta/check POST /api/meta/node/add GET /api/meta/search POST /api/meta/full/text/query POST /api/meta/unstructure/text/query POST /api/meta/resource/upload POST /api/meta/resource/display GET /api/meta/resource/download POST /api/meta/resource/translate POST /api/meta/resource/node POST /api/meta/unstructured/process POST /api/meta/text/graph GET /api/meta/config POST /api/meta/node/update POST /api/meta/review/list POST /api/meta/review/create GET /api/meta/review/detail POST /api/meta/review/resolve ``` ### A.9 system ```text GET /api/system/health GET /api/system/config GET /api/system/info GET /api/system/config/validate POST /api/system/auth/register POST /api/system/auth/login GET /api/system/auth/user/{username} POST /api/system/translate ``` ## 附录 B:2026-07-16 历史代码清理实施回填 > 本附录记录依据本报告和产品确认结论完成的第一轮代码瘦身。附录 A 仍保留清理前的 107 路由基线,便于追溯对比。 ### B.1 恢复点 - 清理前完整归档:`/Users/maxiaolong/Documents/Codex/2026-07-06/g-i/DataOps-platform-backup-before-cleanup-20260716-170321.tar.gz` - 归档大小:11 MB。 - SHA-256:`866c6c4aff127f88497a5ddf39ac8d8da93008cc784ae6f276f80a7cd17d4ef0`。 - 归档包含 `.git/`、`app/`、`frontend/`、`database/`、`deployment/`、分析报告及清理前未提交工作树,可直接用于逐文件恢复。 ### B.2 已完成清理 - 删除 216 个已跟踪历史文件,净删除约 3.5 万行;包含 Vanna/DataChart、ModelSystem、数据资产原型、问卷薪酬、图表定制、数据资源/模型/指标、旧数据来源、旧系统管理、旧数据工厂非 n8n 页面、不可达工作台动态图表组件和 `mcp-servers/task-manager/`。 - 前端 API 定义由清理前 430 个调用收敛为 79 个实际 HTTP 调用,删除 351 个(81.6%);`dataFactory.js` 仅保留 10 个 n8n 适配调用。 - DataFlow 后端删除执行、状态、日志 3 条 mock 路由和对应服务方法;后端路由由 107 条降为 103 条,额外删除了与产品权限边界冲突的公开自助注册路由。 - 数据安全保留可见占位入口;数据治理知识库入口改正名称并明确增量同步、每日一致性巡检、Qwen Embedding 与 DeepSeek 问答的后续边界。 - 工作台收敛为待处理审核、数据订单状态、数据产品统计、数据源健康度、n8n 执行状态 5 个标准组件,支持按当前用户名保存显示和排序。 - 删除日历、微信用户、名片、酒店品牌和酒店职位相关 Python 迁移代码及 14 个初始化/迁移 SQL;保留订单、产品、审核、版本和任务 6 个核心 SQL。本轮未执行任何生产表删除。 - 将 `deployment/app/` 中 12 处有效的 DeepSeek、DDL 解析、环境加载、日志、时区和健康检查修复回并到 `app/`,删除 Airflow 与 Qwen 生成式配置,再通过 `deployment/sync_release.sh` 单向刷新部署副本;`app/`、`database/` 与部署副本当前无差异。 - 前端运行时从固定 Node 14.7.0 升级为 Node 24 LTS 范围 `>=24 <25`,增加 `.nvmrc` 并更新锁文件;Vue 2 保持不变。 ### B.3 验证结果 - 清理契约:8 项通过,覆盖保留入口、删除目录、API 收敛、DataFlow/n8n 边界、HOPMS 样例、Node LTS 和历史 SQL。 - Python:`compileall` 通过;最终隔离环境执行 `pytest` 共 38 项通过。 - 前端:Node `v24.14.0`、npm `10.9.8` 下依赖安装成功,生产构建成功,无缺失模块或 ESLint 错误。 - 部署一致性:`diff -qr app deployment/app` 和 `diff -qr database deployment/database` 均为空。 - 仍需后续处理的已知技术债:Vue 2 及部分前端依赖已停止维护,安装审计报告 72 个依赖漏洞,构建仍有 console、CSS 顺序和大包体警告;这些应与 Vue 3 迁移和依赖治理一并规划,不在本轮业务边界清理中升级。 ### B.4 下一轮明确待实现项 - 正式的管理员、编辑者、查看者三级 RBAC;初始化首个管理员,并仅允许管理员创建用户。本轮已经关闭前后端自助注册入口,但未新增用户管理功能。 - DataFlow 与 n8n Workflow 多版本映射:一个 DataFlow 可关联多个 Workflow 版本,同一环境仅一个当前生效版本。 - 数据治理知识库的数据模型、增量同步、每日全量一致性巡检、Qwen Embedding 检索和 DeepSeek 问答。 - 工作台 5 个标准组件的真实业务数据接口与服务端用户布局持久化。目前布局按用户保存在浏览器本地,适合作为第一阶段交互基线。 ### B.5 本地隔离环境与架构产物回填 - 已在 `deploy/docker/` 建立全本地隔离测试栈,包含 PostgreSQL 16、Neo4j 5、MinIO、n8n、Flask 后端和 Vue/Nginx 前端,使用独立网络、命名卷与本地端口。 - 后端配置已移除提交在代码中的生产 n8n 回退地址和 Token;前端 n8n、助手、MinIO 预览和 DataFlow 默认数据源也改为显式环境配置或本地安全默认值。缺少配置时失败关闭,不再静默连接线上环境。 - 2026-07-16 冒烟验证结果:6 个常驻服务均 healthy,MinIO 初始化容器退出码 0;前端、后端健康和 n8n 健康接口均返回 200;PostgreSQL、Neo4j 和 MinIO 数据初始化验证通过。 - 架构产物已补充到 `docs/architecture/`:总览、103 路由 OpenAPI、前端删除清单、数据模型、部署源真相、认证 ADR、工作流引擎 ADR、跨存储一致性 ADR 和下一轮路线图。 - 下一轮待实现项已拆为 5 份逐任务计划:平台契约/一致性基线、RBAC、DataFlow–n8n Workflow 版本、工作台持久化、数据治理知识库。