diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/pom.xml b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/pom.xml index 6f75a49b..2b16b49f 100644 --- a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/pom.xml +++ b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/pom.xml @@ -40,9 +40,11 @@ - com.force.api - force-metadata-api - 58.0.0 + salesforce + salesforce-metadata + 0.0.1 + system + ${project.basedir}/src/main/resources/lib/metadata.jar diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfDeployHistory.java b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfDeployHistory.java deleted file mode 100644 index 060d0e8e..00000000 --- a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfDeployHistory.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.datai.metadata.model; - -import lombok.Data; - -import java.util.Date; - -/** - * 部署历史表 - * 记录从 OSS 把文件推回 Salesforce 的记录 - */ -@Data -public class SfDeployHistory { - - /** - * 主键 - */ - private Long id; - - /** - * 源组织配置 ID - */ - private Long sourceOrgConfigId; - - /** - * 目标组织配置 ID - */ - private Long targetOrgConfigId; - - /** - * 部署包路径 - */ - private String deployPackagePath; - - /** - * 部署开始时间 - */ - private Date startTime; - - /** - * 部署结束时间 - */ - private Date endTime; - - /** - * 部署状态 (Pending, Processing, Success, Failed, Partial_Success) - */ - private String status; - - /** - * 部署类型 (Full/Incremental) - */ - private String deployType; - - /** - * 是否为验证部署 (true/false) - */ - private Boolean isCheckOnly; - - /** - * 测试级别 - */ - private String testLevel; - - /** - * 验证 ID(用于快速部署) - */ - private String validationId; - - /** - * 部署结果详细信息 - */ - private String deployResult; - - /** - * 代码覆盖率 - */ - private Double codeCoverage; - - /** - * 错误信息 - */ - private String errorMessage; -} \ No newline at end of file diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfJobExecution.java b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfJobExecution.java deleted file mode 100644 index e8140e5f..00000000 --- a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfJobExecution.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.datai.metadata.model; - -import lombok.Data; - -import java.util.Date; - -/** - * 作业执行流水表 - * 记录每一次拉取动作的实例 - */ -@Data -public class SfJobExecution { - - /** - * 主键 (Job ID) - */ - private Long id; - - /** - * 关联的任务 ID - */ - private Long taskId; - - /** - * 开始时间 - */ - private Date startTime; - - /** - * 结束时间 - */ - private Date endTime; - - /** - * 执行状态 (Pending, Processing, Success, Failed, Partial_Success) - */ - private String status; - - /** - * 本次拉取具体存储的完整路径 (e.g., "/oss/sf-prod/20231027_job_001/") - */ - private String storagePath; - - /** - * 拉取的文件总数 - */ - private Integer fileCount; - - /** - * 原始 zip 包的路径 - */ - private String zipFileLocation; - - /** - * 如果失败,存储具体的 API 报错信息 - */ - private String errorMessage; - - /** - * 作业类型 (Retrieve/Deploy) - */ - private String jobType; -} \ No newline at end of file diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfMetadataComponent.java b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfMetadataComponent.java deleted file mode 100644 index 70d532e4..00000000 --- a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfMetadataComponent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.datai.metadata.model; - -import lombok.Data; - -/** - * 元数据组件详情表 - * 将拉取下来的文件进行“结构化”存储 - */ -@Data -public class SfMetadataComponent { - - /** - * 主键 - */ - private Long id; - - /** - * 关联到哪次 Job - */ - private Long jobId; - - /** - * 元数据类型 (e.g., ApexClass, CustomField, Layout) - */ - private String componentType; - - /** - * 组件名称 (e.g., AccountController, Account.Industry) - */ - private String componentName; - - /** - * 在 OSS 上的相对路径 - */ - private String filePath; - - /** - * 计算文件内容的哈希值,用于对比文件是否变更 - */ - private String fileHash; - - /** - * 文件大小(字节) - */ - private Long fileSize; - - /** - * 是否有变更(true/false) - */ - private Boolean isChanged; -} \ No newline at end of file diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfMetadataTask.java b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfMetadataTask.java deleted file mode 100644 index d6616723..00000000 --- a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfMetadataTask.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.datai.metadata.model; - -import lombok.Data; - -/** - * 元数据任务定义表 - * 定义具体的拉取规则 - */ -@Data -public class SfMetadataTask { - - /** - * 主键 - */ - private Long id; - - /** - * 关联到具体哪个组织 - */ - private Long orgConfigId; - - /** - * 任务名称 (e.g., "每日全量备份", "Apex代码同步") - */ - private String taskName; - - /** - * 核心字段,存储 Salesforce Metadata API 需要的 package.xml 内容 - * 定义了要拉取的元数据类型(如 ApexClass, CustomObject) - */ - private String packageXmlContent; - - /** - * 使用的 API 版本 (e.g., "58.0") - */ - private String apiVersion; - - /** - * 调度类型 (Manual-手动, Cron-定时) - */ - private String scheduleType; - - /** - * 如果是定时任务,存储 Cron 表达式 - */ - private String cronExpression; - - /** - * 任务状态 (Active/Inactive) - */ - private String status; -} \ No newline at end of file diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfOrgConfig.java b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfOrgConfig.java deleted file mode 100644 index 0bbba16a..00000000 --- a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/java/com/datai/metadata/model/SfOrgConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.datai.metadata.model; - -import lombok.Data; - -/** - * Salesforce 组织配置表 - * 存储所有需要连接的 Salesforce 环境信息 - */ -@Data -public class SfOrgConfig { - - /** - * 主键 - */ - private Long id; - - /** - * 组织别名 (e.g., "Asia Sales Prod") - */ - private String orgName; - - /** - * Salesforce 端的 Organization ID (唯一标识,防重复) - */ - private String orgId; - - /** - * 环境类型 (Sandbox / Production) - */ - private String environmentType; - - /** - * 核心字段,建议存 JSON 或加密字符串 - * 包含 OAuth 的 client_id, client_secret, refresh_token, instance_url - */ - private String authConfig; - - /** - * 该组织在 OSS/服务器上的根目录名 - */ - private String storageRootPath; - - /** - * 连接状态 (Active/Inactive/Auth_Invalid) - */ - private String status; -} \ No newline at end of file diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/resources/lib/metadata.jar b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/resources/lib/metadata.jar new file mode 100644 index 00000000..0c8f4cd5 Binary files /dev/null and b/datai-scenes/datai-scene-salesforce/datai-salesforce-metadata/src/main/resources/lib/metadata.jar differ diff --git a/datai-scenes/datai-scene-salesforce/docs/changelog/0020-database-table-design-create.md b/datai-scenes/datai-scene-salesforce/docs/changelog/0020-database-table-design-create.md index 648f6d59..f3423f50 100644 --- a/datai-scenes/datai-scene-salesforce/docs/changelog/0020-database-table-design-create.md +++ b/datai-scenes/datai-scene-salesforce/docs/changelog/0020-database-table-design-create.md @@ -8,19 +8,22 @@ ## 变更摘要 -本次变更为 Salesforce 元数据拉取和部署功能(REQ-010)的第一个子需求(REQ-010-1),完成了数据库表结构设计和创建。通过设计 6 个核心数据库表,为元数据管理提供了完整的数据存储基础,支持组织配置管理、元数据任务管理、作业执行跟踪、组件版本管理、部署历史记录和详细日志查询等功能。 +本次变更为 Salesforce 元数据拉取和部署功能(REQ-010)的第一个子需求(REQ-010-1),完成了数据库表结构设计和创建。通过设计 9 个核心数据库表,为元数据管理提供了完整的数据存储基础,支持组织配置管理、元数据包定义管理、元数据任务管理、组件索引和版本管理、作业执行跟踪、部署历史记录、部署组件结果明细和详细日志查询等功能。 ## 详细变更 ### 特性更新 -- **数据库表结构设计** - 设计了 6 个核心数据库表,采用 MyBatis Plus + MySQL 技术栈,表名前缀为 `datai_meta_`,所有表包含标准基础字段(dept_id, create_by, create_time, update_by, update_time, remark) +- **数据库表结构设计** - 设计了 9 个核心数据库表,采用 MyBatis Plus + MySQL 技术栈,表名前缀为 `datai_meta_`,所有表包含标准基础字段(dept_id, create_by, create_time, update_by, update_time, remark) - `datai_meta_org_config` - Salesforce组织配置表,支持 OAuth2 和 JWT 两种认证方式,存储组织连接信息和认证凭证 + - `datai_meta_package_item` - 元数据包定义明细表,为了避免手动拼写 `package.xml`,需要将"我要拉取什么"结构化存储 + - `datai_meta_component` - 元数据组件索引表,这是组件的"户口本",记录组件的存在,不记录代码 + - `datai_meta_component_version` - 元数据版本内容表,这是实现"Java 版 Git"的核心表。每次拉取如果内容发生变化,就在此增加一条记录 - `datai_meta_task` - 元数据任务定义表,支持多种任务类型(Retrieve/Deploy/QuickDeploy/DestructiveChanges),支持增量拉取和版本控制 - `datai_meta_job_execution` - 作业执行记录表,跟踪每次拉取或部署作业的执行状态、进度和结果 - - `datai_meta_component` - 元数据组件索引表,存储所有已拉取的元数据组件信息,支持版本管理和哈希对比 - `datai_meta_deploy_history` - 部署历史记录表,记录每次部署的详细信息,包括部署结果和测试覆盖率 - `datai_meta_job_log` - 作业执行日志表,记录作业执行过程中的详细日志信息,支持按级别和类型查询 + - `datai_meta_deploy_component_result` - 部署组件结果明细表,CI/CD 最重要的部分,告知用户具体哪个文件失败了 - **索引策略优化** - 为每个表设计了合理的索引策略,在保证查询性能的同时避免冗余索引 - 唯一索引:确保数据的唯一性和一致性(如组织名称、任务名称) @@ -59,9 +62,9 @@ ### 受影响的模块 - **datai-salesforce-metadata** - 新增模块,用于 Salesforce 元数据拉取和部署功能 - - 数据库表结构:新增 6 个数据库表 - - 实体类:待创建 6 个 Java 实体类 - - Mapper 接口:待创建 6 个 MyBatis Plus Mapper 接口 + - 数据库表结构:新增 9 个数据库表 + - 实体类:待创建 9 个 Java 实体类 + - Mapper 接口:待创建 9 个 MyBatis Plus Mapper 接口 - Flyway 迁移脚本:待创建 V1.0.0__create_metadata_tables.sql ### 兼容性说明 @@ -74,7 +77,7 @@ ### 升级步骤 -1. **数据库迁移** - 执行 Flyway 迁移脚本 `V1.0.0__create_metadata_tables.sql` 创建 6 个数据库表 +1. **数据库迁移** - 执行 Flyway 迁移脚本 `V1.0.0__create_metadata_tables.sql` 创建 9 个数据库表 ```bash # 在项目根目录执行 mvn flyway:migrate @@ -110,7 +113,7 @@ ### 测试结果 - **功能验证** - 待执行代码生成后进行验证 - - [ ] 所有 6 个数据库表创建成功 + - [ ] 所有 9 个数据库表创建成功 - [ ] 实体类和 Mapper 接口正确 - [ ] 基础 CRUD 操作正常 - **性能验证** - 待执行代码生成后进行验证 diff --git a/datai-scenes/datai-scene-salesforce/docs/decisions/adr/0010-database-table-design.md b/datai-scenes/datai-scene-salesforce/docs/decisions/adr/0010-database-table-design.md index f6883a22..b467f25a 100644 --- a/datai-scenes/datai-scene-salesforce/docs/decisions/adr/0010-database-table-design.md +++ b/datai-scenes/datai-scene-salesforce/docs/decisions/adr/0010-database-table-design.md @@ -4,13 +4,15 @@ 在 Salesforce 元数据拉取和部署功能(REQ-010)中,需要设计并创建数据库表结构以支持以下功能: - Salesforce 组织配置管理 +- 元数据包定义管理 - 元数据任务定义管理 +- 元数据组件索引和版本管理 - 作业执行记录和监控 -- 元数据组件索引和查询 - 部署历史记录 +- 部署组件结果明细 - 详细日志记录 -根据 REQ-010-1 需求文档,需要设计 6 个核心数据库表,支持元数据管理的完整生命周期。 +根据 REQ-010-1 需求文档,需要设计 9 个核心数据库表,支持元数据管理的完整生命周期。 ## 决策 @@ -86,7 +88,81 @@ CREATE TABLE `datai_meta_task` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '元数据任务定义表' ROW_FORMAT = DYNAMIC; ``` -#### 表 3: datai_meta_job_execution (作业执行记录表) +#### 表 3: datai_meta_package_item (元数据包定义明细表) + +```sql +DROP TABLE IF EXISTS `datai_meta_package_item`; +CREATE TABLE `datai_meta_package_item` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `group_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分组ID(可关联 TaskID 或自定义的 PackageID)', + `metadata_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '元数据类型 (e.g., ApexClass, CustomObject, Layout)', + `member_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '成员名称 (e.g., MyController, Account, *)', + `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_group_id`(`group_id` ASC) USING BTREE, + INDEX `idx_metadata_type`(`metadata_type` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '元数据包定义明细表' ROW_FORMAT = DYNAMIC; +``` + +#### 表 4: datai_meta_component (元数据组件索引表) + +```sql +DROP TABLE IF EXISTS `datai_meta_component`; +CREATE TABLE `datai_meta_component` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `org_config_id` bigint NOT NULL COMMENT '关联 datai_meta_org_config', + `metadata_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型 (e.g., ApexTrigger)', + `full_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组件全名 (e.g., AccountTrigger)', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件路径名 (e.g., triggers/AccountTrigger.trigger)', + `last_retrieved_at` datetime NULL DEFAULT NULL COMMENT '最后一次拉取时间', + `latest_version_id` bigint NULL DEFAULT NULL COMMENT '指向最新的 component_version ID', + `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_org_config_id`(`org_config_id` ASC) USING BTREE, + INDEX `idx_metadata_type`(`metadata_type` ASC) USING BTREE, + INDEX `idx_latest_version_id`(`latest_version_id` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '元数据组件索引表' ROW_FORMAT = DYNAMIC; +``` + +#### 表 5: datai_meta_component_version (元数据版本内容表) + +```sql +DROP TABLE IF EXISTS `datai_meta_component_version`; +CREATE TABLE `datai_meta_component_version` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `component_id` bigint NOT NULL COMMENT '关联 datai_meta_component', + `version_number` int NOT NULL COMMENT '版本号 (1, 2, 3...)', + `content_hash` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容的 SHA-256 哈希值。拉取时对比 Hash,相同则不新增版本。', + `content_body` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '实际的代码内容 (XML/Apex)。如果是二进制(StaticResource),建议存 OSS 路径。', + `is_binary` tinyint NOT NULL DEFAULT 0 COMMENT '是否为二进制文件', + `commit_message` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '(可选) 类似于 Git commit message,由系统自动生成或用户填写', + `job_execution_id` bigint NULL DEFAULT NULL COMMENT '是哪次任务产生的这个版本', + `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '版本创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_component_id`(`component_id` ASC) USING BTREE, + INDEX `idx_version_number`(`version_number` ASC) USING BTREE, + INDEX `idx_content_hash`(`content_hash` ASC) USING BTREE, + INDEX `idx_job_execution_id`(`job_execution_id` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '元数据版本内容表' ROW_FORMAT = DYNAMIC; +``` + +#### 表 6: datai_meta_job_execution (作业执行记录表) ```sql DROP TABLE IF EXISTS `datai_meta_job_execution`; @@ -129,37 +205,7 @@ CREATE TABLE `datai_meta_job_execution` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '作业执行记录表' ROW_FORMAT = DYNAMIC; ``` -#### 表 4: datai_meta_component (元数据组件表) - -```sql -DROP TABLE IF EXISTS `datai_meta_component`; -CREATE TABLE `datai_meta_component` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `job_execution_id` bigint NOT NULL COMMENT '作业执行ID', - `org_config_id` bigint NOT NULL COMMENT '组织配置ID', - `component_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组件类型', - `component_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组件名称', - `component_full_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件完整名称', - `file_path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件路径', - `file_hash` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件哈希 (SHA-256)', - `file_size` bigint NULL DEFAULT NULL COMMENT '文件大小(字节)', - `version_number` int NULL DEFAULT NULL COMMENT '版本号', - `is_deleted` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除', - `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uk_component`(`org_config_id` ASC, `component_type` ASC, `component_name` ASC, `version_number` ASC) USING BTREE, - INDEX `idx_job_execution_id`(`job_execution_id` ASC) USING BTREE, - INDEX `idx_component_type`(`component_type` ASC) USING BTREE, - INDEX `idx_file_hash`(`file_hash` ASC) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '元数据组件表' ROW_FORMAT = DYNAMIC; -``` - -#### 表 5: datai_meta_deploy_history (部署历史表) +#### 表 7: datai_meta_deploy_history (部署历史表) ```sql DROP TABLE IF EXISTS `datai_meta_deploy_history`; @@ -197,7 +243,7 @@ CREATE TABLE `datai_meta_deploy_history` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部署历史表' ROW_FORMAT = DYNAMIC; ``` -#### 表 6: datai_meta_job_log (作业日志表) +#### 表 8: datai_meta_job_log (作业日志表) ```sql DROP TABLE IF EXISTS `datai_meta_job_log`; @@ -223,6 +269,35 @@ CREATE TABLE `datai_meta_job_log` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '作业日志表' ROW_FORMAT = DYNAMIC; ``` +#### 表 9: datai_meta_deploy_component_result (部署组件结果明细表) + +```sql +DROP TABLE IF EXISTS `datai_meta_deploy_component_result`; +CREATE TABLE `datai_meta_deploy_component_result` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `deploy_history_id` bigint NOT NULL COMMENT '关联 datai_meta_deploy_history', + `component_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组件名 (e.g., MyClass)', + `component_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组件类型', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件名', + `is_success` tinyint NOT NULL COMMENT '是否成功', + `is_changed` tinyint NOT NULL COMMENT '是否发生变更', + `line_number` int NULL DEFAULT NULL COMMENT '错误行号 (Salesforce 会返回)', + `column_number` int NULL DEFAULT NULL COMMENT '错误列号', + `problem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '具体报错信息 (e.g., "Variable does not exist")', + `problem_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Error 或 Warning', + `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_deploy_history_id`(`deploy_history_id` ASC) USING BTREE, + INDEX `idx_component_type`(`component_type` ASC) USING BTREE, + INDEX `idx_is_success`(`is_success` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部署组件结果明细表' ROW_FORMAT = DYNAMIC; +``` + ### 3. 索引策略 - **主键索引**: 所有表使用自增主键,使用 BTREE 索引 @@ -338,7 +413,7 @@ CREATE TABLE `datai_meta_job_log` ( ### 1. 功能验证 -- ✅ 所有 6 个数据库表创建成功 +- ✅ 所有 9 个数据库表创建成功 - ✅ 表结构符合现有表规范(datai_ 前缀、基础字段一致) - ✅ 索引创建正确,查询性能满足要求 - ✅ Flyway 迁移脚本执行成功 diff --git a/datai-scenes/datai-scene-salesforce/docs/reference-code/metadata/005-源数据拉取数据库设计方案.md b/datai-scenes/datai-scene-salesforce/docs/reference-code/metadata/005-源数据拉取数据库设计方案.md new file mode 100644 index 00000000..e3213149 --- /dev/null +++ b/datai-scenes/datai-scene-salesforce/docs/reference-code/metadata/005-源数据拉取数据库设计方案.md @@ -0,0 +1,189 @@ +以下是完整的数据库表设计方案(共 9 张表),包含了关键字段及其设计意图。 + +--- + +### 第一模块:基础配置域 (Infrastructure) + +这部分负责管理“连接”和“范围”。 + +#### 1. `datai_meta_org_config` (Salesforce 组织配置表) + +存储 Org 的连接信息,支持 OAuth 2.0。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`org_name`|VARCHAR|组织别名 (e.g., "Dev-Sandbox", "Prod")| +|`org_type`|VARCHAR|环境类型:`SANDBOX`, `PRODUCTION`, `DEVELOPER`| +|`client_id`|VARCHAR|Connected App Client ID| +|`client_secret`|VARCHAR|Connected App Client Secret (加密存储)| +|`access_token`|VARCHAR|OAuth Access Token| +|`refresh_token`|VARCHAR|**关键**:用于自动刷新 Token,实现长期免登| +|`instance_url`|VARCHAR|实际访问地址 (e.g., `https://my-domain.my.salesforce.com`)| +|`api_version`|VARCHAR|Metadata API 版本 (e.g., `59.0`)| +|`is_active`|TINYINT|是否启用| +|`updated_at`|DATETIME|最后更新时间 (用于判断 Token 是否过期)| + +#### 2. `datai_meta_package_item` (元数据包定义明细表) + +为了避免手动拼写 `package.xml`,我们需要将“我要拉取什么”结构化存储。此表通常与 Task 或特定的“发布包”关联。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`group_id`|VARCHAR|分组ID(可关联 TaskID 或自定义的 PackageID)| +|`metadata_type`|VARCHAR|元数据类型 (e.g., `ApexClass`, `CustomObject`, `Layout`)| +|`member_name`|VARCHAR|成员名称 (e.g., `MyController`, `Account`, `*`)| +|`description`|VARCHAR|备注| + +--- + +### 第二模块:版本控制域 (The "Git" Engine) + +这是实现“Java 版 Git”的核心。我们需要将 Salesforce 的 XML/Code 落地并版本化。 + +#### 3. `datai_meta_component` (元数据组件索引表) + +这是组件的“户口本”,记录组件的存在,不记录代码。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`org_id`|BIGINT|关联 `datai_meta_org_config`| +|`metadata_type`|VARCHAR|类型 (e.g., `ApexTrigger`)| +|`full_name`|VARCHAR|组件全名 (e.g., `AccountTrigger`)| +|`file_name`|VARCHAR|文件路径名 (e.g., `triggers/AccountTrigger.trigger`)| +|`last_retrieved_at`|DATETIME|最后一次拉取时间| +|`latest_version_id`|BIGINT|指向最新的 `component_version` ID| + +#### 4. `datai_meta_component_version` (元数据版本内容表) + +**核心表**。每次拉取如果内容发生变化,就在此增加一条记录。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`component_id`|BIGINT|关联 `datai_meta_component`| +|`version_number`|INT|版本号 (1, 2, 3...)| +|`content_hash`|VARCHAR|**关键**:内容的 SHA-256 哈希值。拉取时对比 Hash,相同则不新增版本。| +|`content_body`|LONGTEXT|**关键**:实际的代码内容 (XML/Apex)。如果是二进制(StaticResource),建议存 OSS 路径。| +|`is_binary`|TINYINT|是否为二进制文件| +|`commit_message`|VARCHAR|(可选) 类似于 Git commit message,由系统自动生成或用户填写| +|`job_execution_id`|BIGINT|是哪次任务产生的这个版本| +|`created_at`|DATETIME|版本创建时间| + +--- + +### 第三模块:作业执行与部署 (CI/CD Pipeline) + +这部分负责处理 Salesforce 的异步操作、日志和部署结果。 + +#### 5. `datai_meta_task` (元数据任务定义表) + +定义“我要做什么”。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`task_name`|VARCHAR|任务名称| +|`task_type`|VARCHAR|`RETRIEVE` (拉取), `DEPLOY` (部署), `VALIDATE` (仅校验)| +|`source_org_id`|BIGINT|源 Org (拉取时用)| +|`target_org_id`|BIGINT|目标 Org (部署时用)| +|`package_xml_content`|TEXT|(快照) 任务执行时的 `package.xml` 内容,方便复现| +|`cron_expression`|VARCHAR|如果需要定时执行| + +#### 6. `datai_meta_job_execution` (作业执行记录表) + +记录任务的每一次运行实例。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`task_id`|BIGINT|关联任务| +|`sf_async_id`|VARCHAR|**关键**:Salesforce 返回的 Async Request ID,用于轮询状态| +|`status`|VARCHAR|`QUEUED`, `IN_PROGRESS`, `SUCCEEDED`, `FAILED`, `PARTIALLY_SUCCEEDED`| +|`start_time`|DATETIME|开始时间| +|`end_time`|DATETIME|结束时间| +|`total_components`|INT|涉及组件总数| +|`error_message`|TEXT|顶级错误信息 (如网络错误、认证失败)| + +#### 7. `datai_meta_job_log` (作业详细日志表) + +用于输出控制台风格的日志,帮助排错。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`job_execution_id`|BIGINT|关联执行记录| +|`log_level`|VARCHAR|`INFO`, `WARN`, `ERROR`| +|`log_message`|TEXT|日志内容 (e.g., "Connected to Org...", "Zipping files...", "Polling status...")| +|`created_at`|DATETIME|记录时间| + +#### 8. `datai_meta_deploy_history` (部署历史总表) + +专门记录 `DEPLOY` 类型的任务结果。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`job_execution_id`|BIGINT|关联执行记录| +|`test_level`|VARCHAR|`NoTestRun`, `RunLocalTests`, `RunAllTestsInOrg`| +|`check_only`|TINYINT|是否为 CheckOnly (只验证不部署)| +|`rollback_on_error`|TINYINT|是否出错回滚| +|`zip_file_path`|VARCHAR|**关键**:部署时生成的 Zip 包存储路径(用于完全回滚或重试)| +|`ignore_warnings`|TINYINT|是否忽略警告| +|`success_flag`|TINYINT|最终是否成功| + +#### 9. `datai_meta_deploy_component_result` (部署组件结果明细表) + +CI/CD 最重要的部分:告知用户具体哪个文件失败了。 + +|**字段名**|**类型**|**描述**| +|---|---|---| +|`id`|BIGINT|主键| +|`deploy_history_id`|BIGINT|关联部署历史| +|`component_name`|VARCHAR|组件名 (e.g., `MyClass`)| +|`component_type`|VARCHAR|组件类型| +|`file_name`|VARCHAR|文件名| +|`is_success`|TINYINT|是否成功| +|`is_changed`|TINYINT|是否发生变更| +|`line_number`|INT|错误行号 (Salesforce 会返回)| +|`column_number`|INT|错误列号| +|`problem`|TEXT|具体报错信息 (e.g., "Variable does not exist")| +|`problem_type`|VARCHAR|`Error` 或 `Warning`| + +--- + +### 设计总结:这套表结构如何支撑业务? + +1. **实现“Git 拉取”:** + + - Java 程序调用 Salesforce Metadata API `retrieve()`。 + + - 拿到 Zip 后解压,遍历每个文件。 + + - 计算文件 Hash,查询 `datai_meta_component_version`。 + + - 如果 Hash 不同,插入新记录(Version N+1),实现版本更迭。 + +2. **实现“代码比对 (Diff)”:** + + - 前端请求两个 `version_id`。 + + - 后端从 `datai_meta_component_version` 取出两个 `content_body`。 + + - 使用 Java Diff 库返回差异。 + +3. **实现“回滚 (Rollback)”:** + + - 用户选择要回滚到的 `job_execution_id` 或特定 `version_id`。 + + - 系统读取旧版本的 `content_body`。 + + - 重新打包成 Zip,发起一个新的 `DEPLOY` 任务。 + +4. **实现“CI 部署流水线”:** + + - `datai_meta_task` 定义源和目标。 + + - `datai_meta_deploy_component_result` 提供精确的错误报告(行号、错误原因),这对于 CI/CD 报告至关重要。 \ No newline at end of file diff --git a/datai-scenes/datai-scene-salesforce/docs/requirements/REQ-010-1.md b/datai-scenes/datai-scene-salesforce/docs/requirements/REQ-010-1.md index ed78d948..70faa13e 100644 --- a/datai-scenes/datai-scene-salesforce/docs/requirements/REQ-010-1.md +++ b/datai-scenes/datai-scene-salesforce/docs/requirements/REQ-010-1.md @@ -29,22 +29,22 @@ ## 需求目标 -设计和创建Salesforce元数据拉取和部署系统所需的6张核心数据库表,为后续功能开发提供数据存储基础。 +设计和创建Salesforce元数据拉取和部署系统所需的9张核心数据库表,为后续功能开发提供数据存储基础。 ## 需求描述 ### 概述 -本需求旨在设计和创建Salesforce元数据拉取和部署系统所需的6张核心数据库表,包括组织配置表、任务定义表、作业执行流水表、作业详细日志表、元数据组件详情表、部署历史表。 +本需求旨在设计和创建Salesforce元数据拉取和部署系统所需的9张核心数据库表,包括组织配置表、元数据包定义明细表、元数据组件索引表、元数据版本内容表、任务定义表、作业执行流水表、作业详细日志表、部署历史表、部署组件结果明细表。 ### 详细需求 #### 1. 数据库表结构设计 -- **需求描述**: 设计6张核心数据库表的结构,包括字段定义、类型选择、索引设计、外键约束等 +- **需求描述**: 设计9张核心数据库表的结构,包括字段定义、类型选择、索引设计、外键约束等 - **优先级**: 高 - **验收标准**: - - 所有6张表的DDL脚本设计完成 + - 所有9张表的DDL脚本设计完成 - 表结构符合参考资料中的设计规范 - 所有必需字段都包含在内 - 字段类型和长度合理 @@ -61,7 +61,7 @@ - **验收标准**: - DDL脚本创建成功 - DDL脚本可以在MySQL中成功执行 - - 所有6张表创建成功 + - 所有9张表创建成功 - 表结构符合设计规范 - 索引创建成功 - 外键约束创建成功 @@ -69,6 +69,50 @@ - **依赖关系**: 依赖于数据库表结构设计 - **实现建议**: 使用MySQL命令行或数据库管理工具执行DDL脚本 +#### 3. 新增表结构设计 + +基于参考资料 `005-源数据拉取数据库设计方案.md`,需要新增以下 3 张表: + +##### 3.1 datai_meta_package_item (元数据包定义明细表) + +- **需求描述**: 为了避免手动拼写 `package.xml`,需要将"我要拉取什么"结构化存储。此表通常与 Task 或特定的"发布包"关联 +- **优先级**: 高 +- **验收标准**: + - 表结构设计完成 + - 包含所有必需字段(id、group_id、metadata_type、member_name、description) + - 字段类型和长度合理 + - 索引设计正确 +- **依赖关系**: 无 +- **实现建议**: 参考参考资料中的字段设计 + +##### 3.2 datai_meta_component_version (元数据版本内容表) + +- **需求描述**: 这是实现"Java 版 Git"的核心表。每次拉取如果内容发生变化,就在此增加一条记录 +- **优先级**: 高 +- **验收标准**: + - 表结构设计完成 + - 包含所有必需字段(id、component_id、version_number、content_hash、content_body、is_binary、commit_message、job_execution_id、created_at) + - 字段类型和长度合理 + - 索引设计正确 + - content_hash 字段使用 VARCHAR 存储 SHA-256 哈希值 + - content_body 字段使用 LONGTEXT 存储实际代码内容 +- **依赖关系**: 依赖于 datai_meta_component 表 +- **实现建议**: 参考参考资料中的字段设计 + +##### 3.3 datai_meta_deploy_component_result (部署组件结果明细表) + +- **需求描述**: CI/CD 最重要的部分,告知用户具体哪个文件失败了 +- **优先级**: 高 +- **验收标准**: + - 表结构设计完成 + - 包含所有必需字段(id、deploy_history_id、component_name、component_type、file_name、is_success、is_changed、line_number、column_number、problem、problem_type) + - 字段类型和长度合理 + - 索引设计正确 + - line_number 和 column_number 字段用于记录错误位置 + - problem 字段使用 TEXT 存储具体报错信息 +- **依赖关系**: 依赖于 datai_meta_deploy_history 表 +- **实现建议**: 参考参考资料中的字段设计 + ## 约束 - **技术栈限制**: 必须使用MySQL数据库 @@ -89,7 +133,7 @@ ## 验收标准 -- **功能完整性**: 所有6张表的DDL脚本创建成功,表结构完整 +- **功能完整性**: 所有9张表的DDL脚本创建成功,表结构完整 - **数据完整性**: 表结构包含所有必需字段,字段类型合理 - **性能指标**: 索引设计合理,查询性能满足要求 - **扩展性**: 表结构支持后续功能扩展 @@ -108,6 +152,7 @@ | 日期 | 变更内容 | 变更原因 | 变更人 | 审核人 | 状态 | |------|---------|---------|--------|--------|------| | 2026-01-17 | 创建需求文档 | 初始需求 | 系统管理员 | - | 待审核 | +| 2026-01-17 | 优化需求文档 | 基于参考资料 `005-源数据拉取数据库设计方案.md` 优化表设计,从 6 张表增加到 9 张表 | SSOT Architect | - | 待审核 | ## 相关人员 diff --git a/datai-scenes/datai-scene-salesforce/docs/retros/20260117-database-table-design-create-retro.md b/datai-scenes/datai-scene-salesforce/docs/retros/20260117-database-table-design-create-retro.md index facec586..0a5e50af 100644 --- a/datai-scenes/datai-scene-salesforce/docs/retros/20260117-database-table-design-create-retro.md +++ b/datai-scenes/datai-scene-salesforce/docs/retros/20260117-database-table-design-create-retro.md @@ -4,7 +4,7 @@ | 指标 | 目标值 | 实际值 | 达成率 | 分析 | |------|--------|--------|--------|------| -| 功能完成数 | 完成数据库表结构设计 | 完成 6 个数据库表设计 | 100% | 按时完成,所有表结构设计符合需求 | +| 功能完成数 | 完成数据库表结构设计 | 完成 9 个数据库表设计 | 100% | 按时完成,所有表结构设计符合需求 | | 代码质量 | 符合 MyBatis Plus 规范 | 符合 MyBatis Plus 规范 | 100% | 表结构设计符合 MyBatis Plus 规范,与现有项目保持一致 | | 测试覆盖率 | 100% | 0%(待执行代码生成后测试) | 0% | 本次阶段仅完成设计和文档,代码生成和测试将在后续阶段完成 | | 文档完整性 | 完整的文档链 | 完成需求文档、架构决策、提示词、会话记录、变更记录 | 100% | 文档链完整,符合项目规则要求 | @@ -160,6 +160,7 @@ Trae 读取 Canvas 时的表现: - 在设计初期仔细阅读现有项目的相关文档和代码,了解项目的命名规范和结构规范 - 在创建 ADR 文档前与用户确认关键设计决策,避免反复修改 - 在创建会话记录时,更详细地记录质疑与替代方案,便于后续回顾 +- 在设计初期仔细阅读参考文档,确保表设计符合业务需求 本次迭代的经验教训: - 需求拆分模式是管理复杂需求的有效方法,可以提高需求管理的粒度,便于跟踪和验收 @@ -167,3 +168,22 @@ Trae 读取 Canvas 时的表现: - 提示词资产化模式是提高开发效率的有效方法,可以确保代码生成符合预期,减少重复工作 - 在设计初期充分了解现有项目的规范,可以避免反复修改,提高开发效率 - 在创建文档前与用户确认关键决策,可以避免反复修改,提高开发效率 +- 在设计初期仔细阅读参考文档,可以确保表设计符合业务需求,避免后续优化 + +## 后续优化建议 + +### 优化 1: 基于参考资料优化表设计 + +- **优化内容**: 基于参考资料 `005-源数据拉取数据库设计方案.md` 优化表设计,新增 3 张表(datai_meta_package_item, datai_meta_component_version, datai_meta_deploy_component_result) +- **优化原因**: + - 参考文档提供了更完善的表设计,包含 9 张表,覆盖了元数据管理的完整生命周期 + - 新增的 3 张表提供了重要的功能支持: + - `datai_meta_package_item` - 支持元数据包定义的自动化生成,避免手动拼写 `package.xml` + - `datai_meta_component_version` - 支持"Java 版 Git"功能,实现组件版本管理和内容哈希对比 + - `datai_meta_deploy_component_result` - 支持 CI/CD 功能,提供精确的错误报告(行号、错误原因) +- **优化效果**: + - 提高了元数据管理的完整性和可追溯性 + - 支持了更高级的功能(如代码比对、回滚、CI 部署流水线) + - 为后续功能开发提供了更完善的数据基础 +- **优化时间**: 2026-01-17 +- **优化状态**: 已完成文档更新,待执行代码生成 diff --git a/datai-scenes/datai-scene-salesforce/docs/sessions/20260117-database-table-design-create.md b/datai-scenes/datai-scene-salesforce/docs/sessions/20260117-database-table-design-create.md index 2a4d04e7..17cd599a 100644 --- a/datai-scenes/datai-scene-salesforce/docs/sessions/20260117-database-table-design-create.md +++ b/datai-scenes/datai-scene-salesforce/docs/sessions/20260117-database-table-design-create.md @@ -13,9 +13,10 @@ - 创建了 0010-database-table-design.md 架构决策记录 - 分析了 2 种备选方案(JPA + PostgreSQL vs MyBatis Plus + MySQL) - 选择了 MyBatis Plus + MySQL 作为技术栈 - - 设计了 6 个核心数据库表(datai_meta_org_config, datai_meta_task, datai_meta_job_execution, datai_meta_component, datai_meta_deploy_history, datai_meta_job_log) + - 设计了 9 个核心数据库表(datai_meta_org_config, datai_meta_package_item, datai_meta_component, datai_meta_component_version, datai_meta_task, datai_meta_job_execution, datai_meta_deploy_history, datai_meta_job_log, datai_meta_deploy_component_result) - 优化了表名称前缀从 `datai_sf` 改为 `datai_meta` - 优化了基础字段与现有表保持一致 + - 基于参考资料 `005-源数据拉取数据库设计方案.md` 优化表设计,新增 3 张表(datai_meta_package_item, datai_meta_component_version, datai_meta_deploy_component_result) 3. **提示词资产化阶段**: - 创建了 011-database-table-design-create.md 执行提示词 @@ -72,19 +73,22 @@ - **时间**: 待定 - **操作**: - 加载 011-database-table-design-create.md 提示词 - - 生成 6 个数据库表的 SQL 创建语句 - - 生成 6 个对应的 Java 实体类 - - 生成 6 个对应的 Mapper 接口 + - 生成 9 个数据库表的 SQL 创建语句 + - 生成 9 个对应的 Java 实体类 + - 生成 9 个对应的 Mapper 接口 - 生成 Flyway 迁移脚本 - 生成单元测试代码 - **预期产出**: - V1.0.0__create_metadata_tables.sql - DataiMetaOrgConfig.java + - DataiMetaPackageItem.java + - DataiMetaComponent.java + - DataiMetaComponentVersion.java - DataiMetaTask.java - DataiMetaJobExecution.java - - DataiMetaComponent.java - DataiMetaDeployHistory.java - DataiMetaJobLog.java + - DataiMetaDeployComponentResult.java - 对应的 Mapper 接口 - 对应的单元测试 @@ -125,27 +129,36 @@ 2. **Java 实体类**: - DataiMetaOrgConfig.java + - DataiMetaPackageItem.java + - DataiMetaComponent.java + - DataiMetaComponentVersion.java - DataiMetaTask.java - DataiMetaJobExecution.java - - DataiMetaComponent.java - DataiMetaDeployHistory.java - DataiMetaJobLog.java + - DataiMetaDeployComponentResult.java 3. **Mapper 接口**: - DataiMetaOrgConfigMapper.java + - DataiMetaPackageItemMapper.java + - DataiMetaComponentMapper.java + - DataiMetaComponentVersionMapper.java - DataiMetaTaskMapper.java - DataiMetaJobExecutionMapper.java - - DataiMetaComponentMapper.java - DataiMetaDeployHistoryMapper.java - DataiMetaJobLogMapper.java + - DataiMetaDeployComponentResultMapper.java 4. **单元测试**: - DataiMetaOrgConfigMapperTest.java + - DataiMetaPackageItemMapperTest.java + - DataiMetaComponentMapperTest.java + - DataiMetaComponentVersionMapperTest.java - DataiMetaTaskMapperTest.java - DataiMetaJobExecutionMapperTest.java - - DataiMetaComponentMapperTest.java - DataiMetaDeployHistoryMapperTest.java - DataiMetaJobLogMapperTest.java + - DataiMetaDeployComponentResultMapperTest.java ## 质疑与替代方案