kindergarten_java/docs/数据库迁移指南.md
Claude Opus 4.6 081fac9d97 feat: Java后端迁移完成 - 资源管理API修复与文档更新
完成从Node.js/NestJS到Java Spring Boot的后端迁移,修复资源管理API错误。

**核心修复:**
- 修复资源库API 500错误 - ResourceLibrary/ResourceItem实体与数据库表结构对齐
- 更新ID类型从Long改为String,匹配数据库varchar(32)
- 修正字段映射(libraryType → type)

**新增Java实体(7个):**
- CoursePackage, CoursePackageCourse, TenantPackage
- CourseLesson, LessonStep, LessonStepResource
- Theme

**新增API控制器(5个):**
- AdminResourceController - 资源库管理
- AdminPackageController - 课程套餐管理
- AdminCourseLessonController - 课程环节管理
- AdminThemeController - 主题字典管理
- SchoolPackageController - 学校套餐管理

**新增服务层(5个):**
- ResourceLibraryService, CoursePackageService, CourseLessonService
- ThemeService, FileStorageService

**文档更新:**
- 新增 Java环境配置与启动指南.md
- 新增 Java后端启动完整指南.md
- 新增 数据库迁移指南.md
- 更新 CHANGELOG.md 和开发日志

**前端修复:**
- 解决package.json合并冲突

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 19:49:48 +08:00

7.4 KiB
Raw Blame History

数据库迁移指南

数据库配置

服务器地址: 8.148.151.56:3306 数据库名: reading_platform 用户名: root 密码: reading_platform_pwd


需要创建的表

本次迁移需要创建以下 7 个新表:

  1. course_package - 课程套餐表
  2. course_package_course - 套餐课程关联表
  3. tenant_package - 租户套餐关联表
  4. course_lesson - 课程环节表
  5. lesson_step - 教学环节表
  6. lesson_step_resource - 环节资源关联表
  7. theme - 主题字典表

执行方式

方式 1使用数据库管理工具推荐

  1. 打开 Navicat、phpMyAdmin、DBeaver 等数据库管理工具
  2. 连接到数据库:8.148.151.56:3306
  3. 选择数据库:reading_platform
  4. 打开 SQL 执行窗口
  5. 复制下面的 SQL 脚本并执行

方式 2使用 MySQL 命令行

mysql -h 8.148.151.56 -P 3306 -u root -preading_platform_pwd reading_platform < V20260312__create_new_tables.sql

方式 3在线执行如果没有本地工具

访问在线 SQL 执行工具或使用 SSH 连接到服务器后执行。


SQL 脚本

1. 课程套餐表

CREATE TABLE IF NOT EXISTS `course_package` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL COMMENT '套餐名称',
  `description` TEXT COMMENT '套餐描述',
  `price` BIGINT NOT NULL COMMENT '价格(分)',
  `discount_price` BIGINT COMMENT '折后价格(分)',
  `discount_type` VARCHAR(50) COMMENT '折扣类型',
  `grade_levels` VARCHAR(500) COMMENT '适用年级',
  `course_count` INT NOT NULL DEFAULT 0 COMMENT '课程数量',
  `status` VARCHAR(50) NOT NULL DEFAULT 'DRAFT' COMMENT '状态',
  `submitted_at` DATETIME COMMENT '提交时间',
  `submitted_by` BIGINT COMMENT '提交人ID',
  `reviewed_at` DATETIME COMMENT '审核时间',
  `reviewed_by` BIGINT COMMENT '审核人ID',
  `review_comment` TEXT COMMENT '审核意见',
  `published_at` DATETIME COMMENT '发布时间',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程套餐表';

2. 套餐课程关联表

CREATE TABLE IF NOT EXISTS `course_package_course` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `package_id` BIGINT NOT NULL COMMENT '套餐ID',
  `course_id` BIGINT NOT NULL COMMENT '课程ID',
  `grade_level` VARCHAR(50) COMMENT '适用年级',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_package_course` (`package_id`, `course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐课程关联表';

3. 租户套餐关联表

CREATE TABLE IF NOT EXISTS `tenant_package` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
  `package_id` BIGINT NOT NULL COMMENT '套餐ID',
  `start_date` DATE NOT NULL COMMENT '开始日期',
  `end_date` DATE NOT NULL COMMENT '结束日期',
  `price_paid` BIGINT NOT NULL DEFAULT 0 COMMENT '实付价格',
  `status` VARCHAR(50) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_package_id` (`package_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户套餐关联表';

4. 课程环节表

CREATE TABLE IF NOT EXISTS `course_lesson` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `course_id` BIGINT NOT NULL COMMENT '课程ID',
  `lesson_type` VARCHAR(50) NOT NULL COMMENT '课程类型',
  `name` VARCHAR(255) NOT NULL COMMENT '课程名称',
  `description` TEXT COMMENT '课程描述',
  `duration` INT COMMENT '时长(分钟)',
  `video_path` VARCHAR(500) COMMENT '视频路径',
  `video_name` VARCHAR(255) COMMENT '视频名称',
  `ppt_path` VARCHAR(500) COMMENT 'PPT路径',
  `ppt_name` VARCHAR(255) COMMENT 'PPT名称',
  `pdf_path` VARCHAR(500) COMMENT 'PDF路径',
  `pdf_name` VARCHAR(255) COMMENT 'PDF名称',
  `objectives` TEXT COMMENT '教学目标',
  `preparation` TEXT COMMENT '教学准备',
  `extension` TEXT COMMENT '教学延伸',
  `reflection` TEXT COMMENT '教学反思',
  `assessment_data` TEXT COMMENT '评测数据',
  `use_template` TINYINT(1) DEFAULT 0 COMMENT '是否使用模板',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_course_id` (`course_id`),
  UNIQUE KEY `uk_course_lesson_type` (`course_id`, `lesson_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程环节表';

5. 教学环节表

CREATE TABLE IF NOT EXISTS `lesson_step` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `lesson_id` BIGINT NOT NULL COMMENT '课程环节ID',
  `name` VARCHAR(255) NOT NULL COMMENT '环节名称',
  `content` TEXT COMMENT '环节内容',
  `duration` INT NOT NULL DEFAULT 5 COMMENT '时长(分钟)',
  `objective` TEXT COMMENT '教学目标',
  `resource_ids` TEXT COMMENT '资源ID列表',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_lesson_id` (`lesson_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教学环节表';

6. 环节资源关联表

CREATE TABLE IF NOT EXISTS `lesson_step_resource` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `step_id` BIGINT NOT NULL COMMENT '环节ID',
  `resource_id` BIGINT NOT NULL COMMENT '资源ID',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  PRIMARY KEY (`id`),
  KEY `idx_step_id` (`step_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='环节资源关联表';

7. 主题字典表

CREATE TABLE IF NOT EXISTS `theme` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL COMMENT '主题名称',
  `description` TEXT COMMENT '主题描述',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `status` VARCHAR(50) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主题字典表';

验证表创建

执行完成后,运行以下 SQL 验证:

-- 查看所有表
SHOW TABLES;

-- 查看新创建的表
SELECT TABLE_NAME, TABLE_COMMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'reading_platform'
AND TABLE_NAME IN ('course_package', 'course_package_course', 'tenant_package',
                   'course_lesson', 'lesson_step', 'lesson_step_resource', 'theme');

注意事项

  1. 执行前备份: 建议先备份数据库
  2. 字符集: 所有表使用 utf8mb4 字符集
  3. 引擎: 使用 InnoDB 存储引擎
  4. 索引: 已创建必要的索引以提高查询性能

下一步

表创建完成后,可以:

  1. 启动 Java 后端应用
  2. 访问 Swagger 文档测试 APIhttp://localhost:8080/swagger-ui.html
  3. 进行功能测试

创建时间: 2026-03-12