基线日期:2026-07-16 产品决策复核:2026-07-16 分析对象:当前
master工作树中的主源码、前端、数据库脚本、部署包、测试与现有技术文档 目标:为下一轮迭代提供可追溯的架构、代码逻辑、页面—接口—存储映射和风险优先级基线
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 文件 |
最重要的判断如下:
/authentication、/vanna、/dataFactory、/digitizationData 等历史服务的功能。经产品确认,这 348 个未匹配调用基本属于后端服务已经下线后的前端遗留,后续默认按删除和瘦身处理,而不是补建同名后端。app/ 与 deployment/app/ 有 12 个文件不同,且部署副本包含较新的 DeepSeek、运行时环境加载、日志和生产端口修复。此时执行 deployment/sync_release.sh 会用较旧的 app/ 覆盖部署副本,存在生产回退风险。data.token,后端登录接口只返回用户信息;前端之后发送 Authorization: Bearer undefined。同时绝大多数后端路由没有认证装饰器,所以“前端路由守卫”并没有形成后端安全边界。cursorssh-143,主配置中还包含 LLM、n8n、MinIO、Neo4j、PostgreSQL 等硬编码凭据或回退值。docs/CODE_DOCUMENTATION.md 对技术栈、LLM 和部分模块的描述已落后于部署副本,且没有覆盖真实前端页面、外部 API 和源码漂移。以下内容已由产品侧于 2026-07-16 确认,可直接作为代码瘦身依据:
dataChart、modelSystem 及 api/dataChart.js 等依赖 Vanna 的页面和调用进入删除范围。onboard 回调;n8n 与 DataFlow mock 运行接口是两条不同链路,清理时不得误删 n8n 适配层。DataFlow 表示平台内的数据流程定义、输入输出关系、脚本元信息和血缘节点;n8n Workflow 表示 n8n 的执行编排对象。代码和 API 中继续使用 n8n 原生 workflow 命名,前端统一展示为“n8n 工作流”或“执行编排”,不将其改名为 dataflow。一个 DataFlow 可以关联多个有明确版本标识的 Workflow,同一环境只允许一个当前生效版本。app/ 是唯一后端源码。先将 deployment/app/ 中仍有效的修复合并回 app/,再将部署目录改为单向生成产物。mcp-servers/task-manager/ 已确认不再使用,进入整体删除范围;HOPMS 数据导入脚本、测试、源文档和 docs/generated/*.json 验收样例保留。dataGovernance/dataSource 能力。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、前端路由或主部署链中注册,已确认不再使用并整体删除。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
HTTP 请求
-> app/api/<domain>/routes.py 参数解析、响应包装、异常转译
-> app/core/<domain>/*.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,导致事务、测试和复用边界不统一。
routes.js
-> defaultRoute.js 动态 import 页面
-> views/**/*.vue
-> api/*.js
-> utils/request.js (Axios, baseURL=/api)
-> 本仓库 Flask 或外部网关服务
前端当前使用静态路由。store/modules/menu.js 的远程菜单调用已注释,权限信息直接取自 routes.js;因此路由上的 roles 字段并未形成真正的动态授权。
app/__init__.py 创建 Flask 应用、初始化 SQLAlchemy/CORS、注册 9 个 Blueprint、配置日志和全局异常处理。app/models/result.py 的 {code, message, data} 结构。code,HTTP 状态仍为 200;前端依赖响应体 code 判断成功。这不利于网关、监控、重试和标准客户端处理。meta_data主要职责:
DataMeta 节点列表、详情、图谱、创建、更新、删除和搜索。metadata_review_records。DataMeta/Tag 图节点。metadata_version_history。主要存储:Neo4j DataMeta、DataLabel、Tag、master_data;PostgreSQL 审核与版本表;MinIO 文件对象。
business_domain主要职责:
BusinessDomain 列表、详情、保存、更新、删除和图谱展示。INCLUDES 连接 DataMeta,通过 LABEL 连接 DataLabel,通过 COME_FROM 连接 DataSource。DDLParser 解析表和字段。该模块是最大的图谱写入入口之一,business_domain.py 约 1,979 行,已混合查询、规则、序列化、审核、创建与更新逻辑,建议拆分为 Repository、MatchingPolicy、ReviewService 和 DomainService。
data_interface主要职责:
data_standard 节点的新增、详情、更新、列表、代码生成和图谱。DataLabel 节点的新增、详情、列表、动态识别、图谱和删除。需要注意:数据标准标签使用小写 data_standard,其他主要标签使用 PascalCase;图模型命名不一致会增加查询和迁移成本。
data_source主要职责:
DataSource 节点。/graph 路由仍为 TODO,当前没有实际实现。连接测试可接受用户提供的主机、端口和凭据;在后端无认证的情况下,它相当于一个可访问内网数据库的探测入口,必须纳入 P0 安全治理。
data_flow主要职责:
DataFlow 图节点 CRUD。INPUT、OUTPUT、LABEL、child 关系。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 |
数据流程定义、输入输出关系、加工要求、脚本元信息和血缘 | /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,链路仍不完整。
data_factory这是对 n8n 公共 API 的适配层:
N8nClient 负责 URL、鉴权、HTTP 请求和异常封装。N8nService 将 n8n 的 workflow/execution 结构转为前端格式。它不负责前端 dataFactory.js 中旧版生产线、接入、加工、集成、日志等约 98 个接口;这些非 n8n 旧数据工厂页面和调用已确认整体删除。保留范围仅包括 n8n 客户端、适配服务、/api/datafactory/workflows*、执行记录、健康检查、订单生成 n8n workflow JSON 和 onboard 回调。
data_servicedata_products 保存产品元信息和目标物理表定位。information_schema,再动态读取目标表并合并 Neo4j 字段标签。DataFlow -> BusinessDomain -> DataMeta/DataSource 追踪生产链。风险:目标 schema/table 来自产品注册参数,随后拼接进动态 SQL。虽然使用双引号,但没有白名单校验,仍应按 SQL 标识符注入风险治理。
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: 驳回
审批通过后会依次:
BusinessDomain、DataMeta、DataFlow 以及 INPUT/OUTPUT/INCLUDES/LABEL 关系。data_products。task_list。processing,等待 /orders/{id}/onboard 回调。这条链路跨越多个不可共同提交的存储,没有 Saga/Outbox、幂等键或补偿清理。任何中途失败都可能留下孤立图节点、重复产品或无效任务。
system 提供健康、配置、系统信息、配置校验、注册、登录、用户查询和翻译。require_auth 比较整个 Authorization 头与 SECRET_KEY,但当前业务路由没有普遍使用该装饰器。/api/graph/query 可执行任意 Cypher;在无认证状态下风险极高。id(node) 作为跨表引用。Neo4j 内部 ID 不适合作为稳定业务主键,应逐步迁移为 UUID/业务 ID。DataCleaner 支持空值、重复、类型转换和离群值处理。DataValidator 提供必填、类型、正则、邮箱、电话和自定义规则。DDLParser 支持 SQL/Excel/Word/PDF,优先本地 SQL 解析,再调用 LLM。app/,删除 Qwen 对话/生成回退和硬编码配置;Qwen Embedding 使用独立客户端、独立模型配置和独立用途凭据,不能重新演变为通用 LLM 回退。共 107 个路由。以下路径均含 /api 前缀。
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/本地回退翻译 |
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 |
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 |
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 |
datasource:7 个全部为 POST:/datasource/save、list、delete、parse、valid、conntest、graph。
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} |
datafactory:10 个| 方法 | 路径 |
|---|---|
| GET | /datafactory/workflows、/workflows/{id}、/workflows/{id}/status、/workflows/{id}/executions、/executions、/executions/{id}、/health |
| POST | /datafactory/workflows/{id}/activate、deactivate、execute |
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 |
graph:4 个全部为 POST:/graph/query、/graph/node/create、/graph/relationship/create、/graph/subgraph。
| 页面路由 | 页面组件 | 主要 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 | 已确认删除 |
以下功能在 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 导入工具,以及当前已经闭环的数据治理/地图/服务/审核能力。
| 前端 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 的组件做一次可达性复核;只有产品明确要求保留的少量模块才进入重新实现或外部服务映射。
| 表 | 代码模型/入口 | 页面/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 链。data_orders.data_source 依赖额外脚本。result_product_id、result_dataflow_id 等跨 PostgreSQL/Neo4j 引用没有数据库外键,也没有应用级一致性审计。users 同时绕过 SQLAlchemy,自建 psycopg2 池,连接与事务管理不统一。核心节点:
| 节点标签 | 含义 | 主要入口 |
|---|---|---|
DataMeta |
字段/元数据 | 元数据、业务域、订单生成 |
BusinessDomain |
业务表/业务域/输出数据产品域 | 业务域、数据订单 |
DataSource |
数据库连接与来源 | 数据源、业务域 |
DataFlow |
加工流程 | 数据流程、数据订单 |
DataLabel |
标签 | 数据标签、元数据、业务域、流程 |
data_standard |
数据标准 | 数据标准 |
DataResource、DataModel |
旧版资源/模型 | 路由已关闭或依赖外部接口 |
Tag、master_data |
非结构化标签/主数据 | 元数据扩展能力 |
核心关系:
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 和部分查询注释/旧逻辑中的其他方向假设,下一轮应建立唯一图模型约束、关系方向和索引定义。
data_products,而是由 target_schema + target_table 指向 PostgreSQL 物理表。datafactory/workflows/ 生成 n8n Workflow JSON,在 datafactory/scripts/ 约定任务脚本路径。scripts/import_hopms_dataset.py、对应测试和源 DOCX;docs/generated/*.json 作为验收样例一并保留,不随本轮历史模块删除。前端上传文件
-> /bd/ddlparse
-> DDLParser 本地解析或 LLM
-> 前端确认表/字段
-> /bd/save 或 /bd/update
-> Neo4j BusinessDomain + DataMeta + LABEL/INCLUDES/COME_FROM
-> 命中重复规则时写 metadata_review_records
-> /dataReview 人工处理
-> metadata_version_history + Neo4j 合并/新建
创建 data_orders
-> LLM 提取业务域/字段/用途/标签
-> Neo4j 匹配和连通性分析
-> 人工审批
-> 创建输出 BusinessDomain/DataMeta/DataFlow
-> 注册 data_products
-> 创建 task_list
-> 生成 n8n workflow JSON
-> n8n 执行脚本
-> onboard 回调
-> 用户确认 completed
data_products 定位 schema/table
-> information_schema 读取列
-> 动态 SELECT 读取样例/统计
-> Neo4j 根据 source_dataflow_id 查目标业务域和字段标签
-> 前端表格/血缘图展示
现有 /knowledge-base-product 页面仍使用产品资料字段和已下线的 /text/product/list、历史 RAG 对比组件,不能直接作为新功能后端契约。建议保留页面入口但重构名称、数据模型和交互:
业务域 / DataFlow / DataMeta / 数据标准 / 数据标签等治理定义
-> 按实体类型、业务域、版本、责任人和权限抽取标准知识文档
-> 治理对象变更后增量同步,并每日执行一次全量一致性巡检
-> 保存来源实体 ID、版本、内容哈希和更新时间
-> 使用 Qwen Embedding 建立语义索引,同时保留关键词检索
-> 检索结果携带来源、实体类型和版本引用
-> DeepSeek 基于检索上下文回答
-> 用户可回跳原始治理对象核验答案
首期至少需要:变更增量同步、每日一致性巡检、统一搜索、问答、来源引用、权限过滤和索引状态;不得直接复用 Vanna、旧 /rag/* 或 /text/product/* 契约。知识库应以现有治理实体为事实源,不维护另一套无法追溯的手工副本。DeepSeek 负责生成式问答,Qwen Embedding 只负责向量化,两类模型配置和调用适配必须解耦。
现有 /home/edit 调用已下线的 /authentication/user/menu/*,且标准组件清单基本被注释。首期标准组件确认为:待审核数、订单状态、数据产品统计、数据源健康和 n8n 执行状态。后端按用户保存组件 ID、布局、尺寸和必要配置;组件能力由三级 RBAC 过滤,不开放任意前端组件路径或脚本配置。
app/ 已确认为唯一后端源码;将 deployment/ 改为生成产物,先逐项审查并把部署副本中仍有效的修复合并回 app/,再执行单向同步,禁止当前脚本直接覆盖。id()。/interface 前缀的问题。console.error,接入统一前端错误上报。app/ 与 deployment/app/,建立一致性 CI。退出条件: 可以明确回答每个活跃页面调用哪个服务、部署哪份代码、读写哪些数据。
退出条件: 未登录无法访问业务 API;数据库变更可版本化、可回滚。
workflow 原生命名,前端统一显示“n8n 工作流/执行编排”;实现一个 DataFlow 对多个有版本标识的 Workflow,并保证同一环境只有一个当前生效版本,同时升级部署、执行追踪、失败重试和 onboard 回调可靠性。退出条件: 任一步骤失败可重试或补偿,不留下不可解释的半成品。
退出条件: 活跃菜单中不再出现静态演示页或无所有者接口。
| 领域 | 指标 |
|---|---|
| API 闭环 | 活跃页面 API 100% 有明确服务 owner;无 owner 调用为 0 |
| 安全 | 仓库密钥扫描为 0;危险接口认证覆盖 100% |
| 数据库 | ORM/DDL/生产 schema 差异为 0;所有变更有 migration revision |
| 可靠性 | 订单跨存储步骤可重试、可补偿;重复审批不产生重复资源 |
| 测试 | 核心后端服务、API 契约和活跃页面 E2E 纳入 CI |
| 发布 | app/ 与发布包一致性自动校验;部署可回滚 |
| 可观测性 | 订单、任务、流程、n8n 执行可用同一关联 ID 查询 |
已完成:
frontend/src/router/routes.js 菜单隐藏修改,未覆盖该改动。未完成且需要后续环境支持:
frontend/node_modules 不存在,未执行前端构建或浏览器 E2E。OPENAPI.yaml:本仓库 107 个路由的正式契约。FRONTEND_REMOVAL_INVENTORY.md:348 个历史调用对应的页面、组件、API 定义、删除批次和少量保留例外。DATA_MODEL.md:PostgreSQL ER 图、Neo4j 标签/关系约束、跨存储 ID 规则。DEPLOYMENT_SOURCE_OF_TRUTH.md:源码到发布包、前端静态包、Nginx/Gunicorn 的唯一发布链。ADR-001-authentication.md、ADR-002-workflow-engine.md、ADR-003-cross-store-consistency.md。完成以上基线后,再排具体功能需求,能显著降低下一轮迭代在认证、接口归属、数据库迁移和部署回退上的返工。
以下边界已由产品侧确认,后续设计和开发计划直接以此为准:
docs/generated/*.json 作为验收样例保留,同时保留源 DOCX、导入脚本和自动化测试。本附录记录瘦身实施前的当前代码基线,由 app/api/*/routes.py 的 Blueprint 前缀和路由装饰器逐项核对。已确认删除的 DataFlow 运行时路由仍列在这里,便于后续通过路由数量变化验证清理结果。
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
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
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}
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
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
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
POST /api/graph/query
POST /api/graph/node/create
POST /api/graph/relationship/create
POST /api/graph/subgraph
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
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
本附录记录依据本报告和产品确认结论完成的第一轮代码瘦身。附录 A 仍保留清理前的 107 路由基线,便于追溯对比。
/Users/maxiaolong/Documents/Codex/2026-07-06/g-i/DataOps-platform-backup-before-cleanup-20260716-170321.tar.gz866c6c4aff127f88497a5ddf39ac8d8da93008cc784ae6f276f80a7cd17d4ef0。.git/、app/、frontend/、database/、deployment/、分析报告及清理前未提交工作树,可直接用于逐文件恢复。mcp-servers/task-manager/。dataFactory.js 仅保留 10 个 n8n 适配调用。deployment/app/ 中 12 处有效的 DeepSeek、DDL 解析、环境加载、日志、时区和健康检查修复回并到 app/,删除 Airflow 与 Qwen 生成式配置,再通过 deployment/sync_release.sh 单向刷新部署副本;app/、database/ 与部署副本当前无差异。>=24 <25,增加 .nvmrc 并更新锁文件;Vue 2 保持不变。compileall 通过;最终隔离环境执行 pytest 共 38 项通过。v24.14.0、npm 10.9.8 下依赖安装成功,生产构建成功,无缺失模块或 ESLint 错误。diff -qr app deployment/app 和 diff -qr database deployment/database 均为空。deploy/docker/ 建立全本地隔离测试栈,包含 PostgreSQL 16、Neo4j 5、MinIO、n8n、Flask 后端和 Vue/Nginx 前端,使用独立网络、命名卷与本地端口。docs/architecture/:总览、103 路由 OpenAPI、前端删除清单、数据模型、部署源真相、认证 ADR、工作流引擎 ADR、跨存储一致性 ADR 和下一轮路线图。