# lowcode-platform **Repository Path**: wangdaoll/lowcode-platform ## Basic Information - **Project Name**: lowcode-platform - **Description**: 使用AI做一个低代码平台测试 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-21 - **Last Updated**: 2026-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 低代码平台 (Low-Code Platform) > 通过 Web API 动态定义 **租户 / 模型 / 实体 / 字段**,并基于实体定义运行时做业务数据 CRUD。 --- ## ✨ 功能特性 - **动态建模** — 通过 Web API 增删改查 `Tenant` / `Model` / `Entity` / `Field`,无需修改代码或重建服务 - **多租户隔离** — 基于 `X-Tenant-Id` / `X-Tenant-Code` 请求头,数据全链路按租户隔离 - **微服务架构** — 元数据服务 / 业务服务 / 网关服务独立部署,Nacos 服务发现 + 配置中心 - **EAV 业务数据存储** — 业务侧无需 DDL,数据按实体定义动态落到 `eav_instance` + `eav_value` 通用表 - **可视化管理** — React + Ant Design 5 前端,租户 / 模型 / 实体 / 字段全图形化操作 --- ## 🏗️ 架构 ``` ┌────────────────┐ │ React + AntD │ 前端 (端口 5173) └────────┬───────┘ │ HTTP /api/v1/* (请求头带 X-Tenant-Id) ┌────────▼───────────────────────────┐ │ Gateway-Service (端口 9080) │ │ - Nacos 服务发现 + 路由转发 │ └─────┬──────────────────────┬───────┘ │ │ ┌─────▼──────────┐ ┌───────▼─────────┐ │ metadata-service│ │ business-service │ │ (端口 8081) │ │ (端口 8082) │ │ - JPA + Postgres│ │ - JPA + MySQL │ │ - 元数据 CRUD │ │ - EAV 业务数据 │ └────────┬────────┘ └────────┬────────┘ │ │ ┌─────▼─────┐ ┌─────▼─────┐ │ Postgres │ │ MySQL │ │ metadata │ │ eav_* │ └───────────┘ └───────────┘ ┌─────────────────────┐ │ Nacos (端口 8848) │ └─────────────────────┘ ``` --- ## 🧰 技术栈 | 层 | 选型 | |---|---| | 后端语言 | Java 17 | | 后端框架 | Spring Boot 3.2.x + Spring Cloud 2023.0.x + Spring Cloud Alibaba 2023.0.1.x | | API 网关 | Spring Cloud Gateway (Nacos 服务发现 + `lb://` 路由) | | 元数据库 | PostgreSQL 15+ | | 业务库 | MySQL 8.0+ (EAV 模式) | | 服务治理 | Nacos 2.4.x (注册中心 + 配置中心) | | 前端 | React 18 + Vite 5 + TypeScript 5 + Ant Design 5 | | 容器化 | Docker Compose | --- ## 📁 目录结构 ``` lowcode-platform/ ├── docs/ # 设计文档 / 字段含义 / 任务规则 / 执行日志 ├── infra/ # docker-compose + SQL 初始化脚本 ├── backend/ │ ├── pom.xml # 父 POM │ ├── common/ # 共享 DTO / 异常 / 拦截器 / Feign 接口 │ ├── metadata-service/ # 元数据 CRUD (PostgreSQL) │ ├── business-service/ # 业务数据 CRUD (MySQL, EAV) │ └── gateway-service/ # API 网关 └── frontend/ # React + Vite + AntD 5 ``` --- ## 🚀 快速启动 ### 1. 启动基础设施 (PostgreSQL + MySQL + Nacos) ```bash cd infra docker compose up -d ``` 等待 3 个容器全部 `healthy`(约 30 秒)。 ### 2. 启动后端服务 需要 JDK 17 + Maven 3.9+。在 `backend/` 根目录: ```bash mvn -DskipTests clean package -T 4 ``` 分别启动 3 个服务(开 3 个终端或后台运行): ```bash # 终端 1: 元数据服务 java -jar metadata-service/target/metadata-service.jar # 终端 2: 业务服务 java -jar business-service/target/business-service.jar # 终端 3: 网关服务 java -jar gateway-service/target/gateway-service.jar ``` 服务启动后会自动注册到 Nacos。 ### 3. 启动前端 ```bash cd frontend npm install npm run dev ``` 浏览器访问 `http://localhost:5173`。 --- ## 🔌 API 路径 所有 API 前缀 `/api/v1/{module}/...`,请求头必须带 `X-Tenant-Id` 或 `X-Tenant-Code`。 ### 元数据 (metadata-service :8081) | 方法 | 路径 | 说明 | |---|---|---| | POST | `/api/v1/metadata/tenants` | 创建租户 | | GET | `/api/v1/metadata/tenants` | 列出租户 | | POST | `/api/v1/metadata/models` | 创建模型 | | GET | `/api/v1/metadata/models` | 列出模型 | | POST | `/api/v1/metadata/entities` | 创建实体 | | GET | `/api/v1/metadata/entities` | 列出实体 | | POST | `/api/v1/metadata/fields` | 创建字段 | | GET | `/api/v1/metadata/fields` | 列出字段 | ### 业务数据 (business-service :8082) | 方法 | 路径 | 说明 | |---|---|---| | POST | `/api/v1/business/entities/{entityCode}/records` | 创建记录 | | GET | `/api/v1/business/entities/{entityCode}/records` | 分页查询 | | GET | `/api/v1/business/entities/{entityCode}/records/{id}` | 查询单条 | | PUT | `/api/v1/business/entities/{entityCode}/records/{id}` | 更新记录 | | DELETE | `/api/v1/business/entities/{entityCode}/records/{id}` | 软删除 | 所有接口经网关 `localhost:9080` 转发。 --- ## 📚 文档 | 文档 | 内容 | |---|---| | [设计文档](docs/设计文档.md) | 架构 / 模块划分 / 数据流 | | [实体字段业务意义](docs/实体字段业务意义.md) | 库表字段含义 | | [任务规则](docs/任务规则.md) | 开发约定 / API 规范 / 错误码 | | [执行日志](docs/执行日志.md) | 实施进度与决策记录 | --- ## 📝 开发约定 - 所有时间戳用 `Asia/Shanghai` 时区 - 数据库列名 `snake_case`,Java 字段名 `camelCase` - 多租户通过请求头透传,服务内部走 `TenantContext` (ThreadLocal) - 软删除通过 `status` 字段,默认只查 `status=1` - 详细规范见 [任务规则](docs/任务规则.md)