# dataplatform **Repository Path**: liang-hydrology/dataplatform ## Basic Information - **Project Name**: dataplatform - **Description**: 中小企业数据中台,可接入结构非结构数据,数据清洗,质量检测,转发 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-09 - **Last Updated**: 2026-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据中台 ## 简介 **数据中台** 是一个基于 [RuoYi-Vue-Plus](https://plus-doc.dromara.org/) 框架构建的企业级数据管理平台,提供数据主题管理、数据质量监控、数据开发任务调度、多数据源管理等核心功能,帮助企业实现数据资产化、数据质量可控化、数据开发高效化。 ## 特性 ### 数据主题管理 - 业务数据主题的定义和管理 - 物理表结构自动创建和维护 - 字段定义(字段名、类型、长度、是否必填等) - 数据的增删改查操作 - 主题发布、停用生命周期管理 ### 数据质量监控 - **6种内置质量检查器**: - 完整性检查(必填字段不为空) - 准确性检查(符合业务规则) - 一致性检查(数据格式一致) - 及时性检查(数据更新及时) - 唯一性检查(数据不重复) - 自定义SQL规则 - 质量规则配置(阈值设置、字段选择) - 质量任务调度和执行 - 质量报告生成和趋势分析 - 问题数据详情记录 ### 数据开发任务 - Groovy脚本数据开发 - 任务生命周期管理(创建、编辑、删除、执行) - 脚本模板库 - 任务调度和执行监控 - MQTT实时数据订阅 - 脚本测试和调试 ### 数据转换 - SQL语法验证 - SQL执行预览 - 查询结果保存到数据主题 - 部门数据权限自动过滤 ### 多数据源支持 - **关系型数据库**:MySQL、PostgreSQL、Oracle、SQL Server、达梦、人大金仓等 - **NoSQL数据库**:Elasticsearch、MongoDB - **其他数据源**:API、文件、MQTT - 连接池管理 - 连接测试 - 数据预览 ### 动态API - 通过Groovy脚本快速创建RESTful API - API密钥管理 - API调用日志 - 无需重新编译部署 ### 其他特性 - **租户隔离**:完整的多租户支持,数据安全隔离 - **权限控制**:基于角色的细粒度权限控制 - **数据权限**:支持部门级数据权限过滤 - **操作日志**:完整的操作审计日志 ## 技术栈 | 类别 | 技术选型 | 说明 | |------|---------|------| | **后端框架** | Spring Boot 3.x | 应用框架 | | **持久层** | MyBatis Plus | ORM框架 | | **权限控制** | Sa-Token | 权限认证框架 | | **脚本引擎** | Groovy | 动态脚本执行 | | **任务调度** | SnailJob | 分布式任务调度 | | **连接池** | HikariCP | 数据库连接池 | | **前端框架** | Vue 3 | 渐进式JavaScript框架 | | **前端UI** | Element Plus | Vue 3组件库 | | **类型安全** | TypeScript | JavaScript超集 | | **构建工具** | Vite | 前端构建工具 | ## 项目结构 ``` product/ ├── ry-vue/ # 后端项目 │ ├── ruoyi-admin/ # 系统入口、安全配置 │ ├── ruoyi-common/ # 通用工具类、基础组件 │ │ ├── ruoyi-common-core/ # 核心工具 │ │ ├── ruoyi-common-mybatis/ # MyBatis Plus配置 │ │ ├── ruoyi-common-satoken/ # Sa-Token权限 │ │ └── ruoyi-common-web/ # Web相关 │ ├── ruoyi-modules/ │ │ └── ruoyi-dataplatform/ # 核心数据中台模块 │ │ ├── src/main/java/org/dromara/dataplatform/ │ │ │ ├── checker/ # 数据质量检查器 │ │ │ ├── controller/ # REST接口控制器 │ │ │ ├── domain/ # 领域模型(Entity/Bo/Vo) │ │ │ ├── executor/ # 任务执行器 │ │ │ ├── mapper/ # MyBatis数据访问层 │ │ │ ├── pool/ # 连接池管理 │ │ │ ├── script/ # 脚本执行引擎 │ │ │ ├── service/ # 业务服务层 │ │ │ └── util/ # 工具类 │ ├── ruoyi-extend/ # 扩展功能模块 │ └── script/sql/ # 数据库脚本 └── ry-ui/ # 前端项目 └── src/ ├── api/dataplatform/ # 数据中台API封装 │ ├── dataasset/ # 数据资产API │ ├── dataquality/ # 数据质量API │ ├── datadev/ # 数据开发API │ ├── datasource/ # 数据源API │ ├── datatransform/# 数据转换API │ └── dynamicapi/ # 动态API └── views/dataplatform/ # 数据中台前端页面 ├── dataasset/ # 数据主题、字段管理 ├── dataquality/ # 数据质量(规则、任务、报告) ├── datadev/ # 数据开发(任务、模板) ├── datasource/ # 数据源管理 ├── datatransform/# 数据转换 └── dynamicapi/ # 动态API管理 ``` ## 快速开始 ### 环境要求 - **JDK**: 17+ - **Node.js**: 18+ - **MySQL**: 8.0+ - **Maven**: 3.6+ - **Redis**: 5.0+ (可选,用于缓存) ### 后端启动 1. **克隆项目** ```bash git clone cd product/ry-vue ``` 2. **创建数据库** ```sql CREATE DATABASE ry-vue-plus DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` 3. **修改数据库配置** 编辑 `ruoyi-admin/src/main/resources/application-druid.yml` 中的数据库连接信息: ```yaml spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ry-vue-plus?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: your-password ``` 4. **初始化数据库** 按顺序执行 `script/sql/` 目录下的SQL脚本: - `ry-vue-plus.sql` (核心系统表) - `dataplatform.sql` (数据中台表) 5. **启动后端服务** ```bash mvn clean install mvn spring-boot:run -pl ruoyi-admin ``` 后端服务默认启动在 `http://localhost:8080` ### 前端启动 1. **安装依赖** ```bash cd product/ry-ui npm install ``` 2. **修改API地址** 编辑 `src/utils/request.ts` 中的 `baseURL` 配置(如需要) 3. **启动开发服务** ```bash npm run dev ``` 4. **访问系统** 打开浏览器访问 `http://localhost:5173` 默认账号:`admin` / `admin123` ## 功能模块详解 ### 1. 数据主题管理 数据主题是业务数据的逻辑组织单元,每个数据主题对应一个物理数据库表。 #### 核心操作流程 1. **创建数据主题** - 填写主题基本信息(名称、编码、描述) - 定义字段(字段名、类型、长度、是否必填、默认值等) - 保存为草稿状态 2. **发布数据主题** - 系统自动在数据库中创建物理表 - 状态变为"已发布" - 可开始数据录入 3. **数据管理** - 支持单条数据录入 - 支持批量导入 - 支持数据编辑和删除 #### 数据类型支持 | 数据类型 | 说明 | 示例 | |---------|------|------| | VARCHAR | 字符串 | `VARCHAR(50)` | | TEXT | 长文本 | `TEXT` | | INT | 整数 | `INT` | | BIGINT | 长整数 | `BIGINT` | | DECIMAL | 小数 | `DECIMAL(18,2)` | | DATETIME | 日期时间 | `DATETIME` | | DATE | 日期 | `DATE` | ### 2. 数据质量管理 #### 质量规则类型 | 规则类型 | 说明 | 适用场景 | |---------|------|---------| | **COMPLETENESS** | 完整性检查 | 检查必填字段是否为空 | | **ACCURACY** | 准确性检查 | 检查数据是否符合业务规则(如:年龄在0-150之间) | | **CONSISTENCY** | 一致性检查 | 检查数据格式是否一致(如:手机号格式) | | **TIMELINESS** | 及时性检查 | 检查数据是否及时更新 | | **UNIQUENESS** | 唯一性检查 | 检查数据是否重复 | | **CUSTOM** | 自定义SQL规则 | 使用自定义SQL实现复杂检查逻辑 | #### 质量任务执行 1. **创建质量规则** - 选择数据主题和字段 - 选择规则类型 - 配置规则参数 - 设置警告阈值和错误阈值(0-100) 2. **创建质量任务** - 关联多个质量规则 - 配置执行计划(立即执行或定时执行) - 保存任务 3. **查看质量报告** - 查看整体质量得分 - 查看每个规则的执行结果 - 查看问题数据详情 - 查看质量趋势 ### 3. 数据开发任务 #### Groovy脚本API 在数据开发任务的Groovy脚本中,可以使用 `ctx` 对象访问以下API: ```groovy // ==================== 数据源查询 ==================== // 通用查询方法(根据数据源类型自动选择) def params = [:] params.tableName = "sales_data" params.limit = 100 def data = ctx.query(params) // 关系数据库查询 def tableData = ctx.queryTable("table_name", "where id > 0", 100) // Elasticsearch查询 def esData = ctx.queryEs("index_name", "{\"match_all\": {}}") // MongoDB查询 def mongoData = ctx.queryMongo("collection_name", "{\"age\": {\"\$gt\": 18}}") // API查询 def apiData = ctx.queryApi("https://api.example.com/data", [:]) // ==================== 数据写入 ==================== // 写入数据主题(自动判断 insert/update) ctx.writeToTheme(data) // 强制插入 ctx.insertToTheme(data) // 强制更新 ctx.updateToTheme( data) // ==================== 状态管理 ==================== // 保存状态(跨批次持久化) ctx.setState("lastProcessTime", System.currentTimeMillis()) // 获取状态 def lastTime = ctx.getState("lastProcessTime") // ==================== 工具函数 ==================== // 判空 ctx.utils.isEmpty("") // 当前时间 ctx.utils.now() // JSON转换 ctx.utils.toJson([:]) // ==================== 日志 ==================== ctx.log.info("信息") ctx.log.warn("警告") ctx.log.error("错误") ``` #### 脚本示例 **示例1:简单的数据清洗和导入** ```groovy // 从数据源查询数据 def params = [:] params.tableName = "raw_sales_data" params.limit = 1000 def rawData = ctx.query(params) ctx.log.info("获取到 " + rawData.size() + " 条原始数据") // 数据清洗 def cleanedData = [] rawData.each { row -> def cleaned = [:] // 去除空格 cleaned.user_name = row.user_name?.trim() // 转换金额 cleaned.amount = new BigDecimal(row.amount ?: "0") // 设置默认值 cleaned.status = row.status ?: "0" cleanedData.add(cleaned) } // 写入数据主题 ctx.writeToTheme("销售数据主题", cleanedData) ctx.log.info("数据清洗完成,共处理 " + cleanedData.size() + " 条数据") ``` **示例2:增量数据处理** ```groovy // 获取上次处理时间 def lastTime = ctx.getState("lastProcessTime") ?: 0 // 构建查询条件 def params = [:] params.tableName = "event_log" if (lastTime > 0) { params.where = "create_time > " + lastTime } params.limit = 10000 def newData = ctx.query(params) if (newData.isEmpty()) { ctx.log.info("没有新数据需要处理") return } ctx.log.info("获取到 " + newData.size() + " 条新数据") // 处理数据... ctx.writeToTheme("事件日志主题", newData) // 更新上次处理时间 def maxTime = newData.max { it.create_time }?.create_time if (maxTime) { ctx.setState("lastProcessTime", maxTime) } ctx.log.info("增量数据处理完成") ``` ### 4. 数据转换 数据转换模块允许用户直接执行SQL查询,并将结果保存到数据主题。 #### 权限说明 - **超级管理员/租户管理员**:可以执行任意SELECT语句,无权限限制 - **普通用户**:执行的SQL会自动添加部门权限过滤,只能查询本部门及子部门创建的数据 #### SQL自动权限过滤示例 **原始SQL(用户输入):** ```sql SELECT * FROM dp_sales_data WHERE amount > 1000 ``` **自动添加权限后的SQL(实际执行):** ```sql SELECT * FROM dp_sales_data WHERE amount > 1000 AND create_dept IN (100, 101, 102) ``` ### 5. 数据源管理 支持多种数据源类型的统一管理: | 数据源类型 | 配置参数 | 说明 | |-----------|---------|------| | MySQL/MariaDB | host, port, database, username, password | 关系型数据库 | | PostgreSQL | host, port, database, username, password | 关系型数据库 | | Oracle | host, port, serviceName, username, password | 关系型数据库 | | SQL Server | host, port, database, username, password | 关系型数据库 | | Elasticsearch | hosts, port, username, password, apiKey | 搜索引擎 | | MongoDB | connectionString, database, collection | NoSQL数据库 | | API | baseUrl, url, method, headers, params | HTTP接口 | | MQTT | broker, port, topic, username, password | 消息队列 | ## 核心API接口 ### 数据主题接口 | 方法 | 路径 | 说明 | 权限标识 | |------|------|------|---------| | GET | `/dataplatform/dataasset/theme/list` | 查询主题列表 | `dataplatform:dataasset:theme:list` | | GET | `/dataplatform/dataasset/theme/{id}` | 获取主题详情 | `dataplatform:dataasset:theme:query` | | POST | `/dataplatform/dataasset/theme` | 新增主题 | `dataplatform:dataasset:theme:add` | | PUT | `/dataplatform/dataasset/theme` | 修改主题 | `dataplatform:dataasset:theme:edit` | | DELETE | `/dataplatform/dataasset/theme/{ids}` | 删除主题 | `dataplatform:dataasset:theme:remove` | | POST | `/dataplatform/dataasset/theme/publish/{id}` | 发布主题 | `dataplatform:dataasset:theme:edit` | | POST | `/dataplatform/dataasset/theme/deactivate/{id}` | 停用主题 | `dataplatform:dataasset:theme:edit` | | POST | `/dataplatform/dataasset/theme/createTable/{id}` | 创建物理表 | `dataplatform:dataasset:theme:edit` | ### 数据质量接口 | 方法 | 路径 | 说明 | 权限标识 | |------|------|------|---------| | GET | `/dataplatform/dataquality/rule/list` | 查询规则列表 | `dataplatform:dataquality:rule:list` | | POST | `/dataplatform/dataquality/rule` | 新增规则 | `dataplatform:dataquality:rule:add` | | PUT | `/dataplatform/dataquality/rule` | 修改规则 | `dataplatform:dataquality:rule:edit` | | DELETE | `/dataplatform/dataquality/rule/{ids}` | 删除规则 | `dataplatform:dataquality:rule:remove` | | POST | `/dataplatform/dataquality/rule/testSql` | 测试自定义SQL | `dataplatform:dataquality:rule:query` | | GET | `/dataplatform/dataquality/task/list` | 查询任务列表 | `dataplatform:dataquality:task:list` | | POST | `/dataplatform/dataquality/task/execute/{id}` | 执行任务 | `dataplatform:dataquality:task:edit` | ### 数据开发接口 | 方法 | 路径 | 说明 | 权限标识 | |------|------|------|---------| | GET | `/dataplatform/datadev/task/list` | 查询任务列表 | `dataplatform:datadev:task:list` | | POST | `/dataplatform/datadev/task` | 新增任务 | `dataplatform:datadev:task:add` | | PUT | `/dataplatform/datadev/task` | 修改任务 | `dataplatform:datadev:task:edit` | | DELETE | `/dataplatform/datadev/task/{ids}` | 删除任务 | `dataplatform:datadev:task:remove` | | POST | `/dataplatform/datadev/task/script/test` | 测试脚本 | `dataplatform:datadev:task:query` | | POST | `/dataplatform/datadev/task/execute/{id}` | 执行任务 | `dataplatform:datadev:task:edit` | ### 数据转换接口 | 方法 | 路径 | 说明 | 权限标识 | |------|------|------|---------| | POST | `/dataplatform/datatransform/validate` | 验证SQL | `dataplatform:datatransform:query` | | POST | `/dataplatform/datatransform/preview` | 预览SQL结果 | `dataplatform:datatransform:query` | | POST | `/dataplatform/datatransform/save` | 保存SQL结果到主题 | `dataplatform:datatransform:edit` | 更多API接口详情请参考 [数据平台模块API文档](./dataplatform-api.md) ## 开发指南 ### 后端开发规范 #### 1. 分层架构 严格遵循MVC分层架构: ``` Controller (控制器层) ↓ Service (业务服务层) ↓ Mapper (数据访问层) ``` #### 2. 实体命名规范 - **数据库实体**:放在 `domain` 包下,使用 `@TableName` 注解 - **业务对象(Bo)**:放在 `domain/bo` 包下,用于接收前端参数 - **视图对象(Vo)**:放在 `domain/vo` 包下,用于返回前端数据 #### 3. 权限控制 - **接口权限**:使用 `@SaCheckPermission` 注解 ```java @SaCheckPermission("dataplatform:dataasset:theme:add") @PostMapping public R add(@Validated(AddGroup.class) @RequestBody DataThemeBo bo) { return toAjax(dataThemeService.insertByBo(bo)); } ``` - **数据权限**:使用 `@DataPermission` 注解 ```java @DataPermission({ @DataColumn(key = "deptName", value = "create_dept") }) default List selectThemeList(Wrapper queryWrapper) { return this.selectVoList(queryWrapper); } ``` ### 前端开发规范 #### 1. API封装 所有API调用统一在 `src/api/dataplatform/` 目录下封装: ```typescript // src/api/dataplatform/dataasset/index.ts import request from '@/utils/request'; const BASE_URL = '/dataplatform/dataasset'; // 查询数据主题列表 export function listDataTheme(query: any) { return request.get(`${BASE_URL}/theme/list`, { params: query }); } // 新增数据主题 export function addDataTheme(data: any) { return request.post(`${BASE_URL}/theme`, data); } // 修改数据主题 export function updateDataTheme(data: any) { return request.put(`${BASE_URL}/theme`, data); } // 删除数据主题 export function delDataTheme(ids: string) { return request.delete(`${BASE_URL}/theme/${ids}`); } ``` #### 2. 页面组件 页面组件放在 `src/views/dataplatform/` 对应模块目录: ```vue ``` #### 3. 权限按钮控制 使用 `v-hasPermi` 指令控制按钮显隐: ```vue 新增 修改 ``` ## 常见问题 ### Q: 如何添加新的数据源类型? A: 在 `DatasourcePreviewUtil` 中添加对应数据源的预览逻辑,并在 `DatasourceConnectUtil` 中添加连接配置。参考现有数据源的实现方式。 ### Q: 如何自定义数据质量检查规则? A: 在 `checker/` 目录下创建新的检查器实现类,实现相应的检查逻辑,并在规则类型枚举中注册新类型。 ### Q: 数据主题发布后可以修改字段吗? A: 已发布的主题如需修改字段,需要先停用主题,修改后重新发布。 ### Q: Groovy脚本中如何访问Spring Bean? A: 目前脚本沙箱环境中不直接访问Spring Bean。建议通过 `ctx` 对象提供的API完成所需操作,或者在 `ScriptContext` 中添加新的方法。 ### Q: 如何配置多租户? A: 数据中台模块基于RuoYi-Vue-Plus框架,已内置完整的多租户支持。在系统设置中启用多租户功能即可。 ## 许可证 本项目基于 RuoYi-Vue-Plus 框架开发,遵循相应的开源许可证。 ## 致谢 感谢 [RuoYi-Vue-Plus](https://plus-doc.dromara.org/) 提供的优秀框架支持! ## 联系方式 如有问题或建议,欢迎提交 Issue 或 Pull Request。 --- **祝您使用愉快!**