kindergarten_java/start-all.sh

134 lines
3.8 KiB
Bash
Raw Normal View History

2026-02-28 16:41:39 +08:00
#!/bin/bash
# 统一启动脚本 - 启动前后端服务
refactor: 完成代码重构规范化 - 2026-03-12 后端重构: - 添加统一响应格式 ResultDto<T> 和 PageResultDto<T> - 添加分页查询 DTO 基类 PageQueryDto - 添加响应转换拦截器 TransformInterceptor - 添加公共工具函数(JSON 解析、分页计算) - 配置 Swagger/OpenAPI 文档(访问路径:/api-docs) - Tenant 模块 DTO 规范化示例(添加 @ApiProperty 装饰器) - CourseLesson 控制器重构 - 移除类级路径参数,修复 Orval 验证错误 - 后端 DTO 规范化 - 为 Course、Lesson、TeacherCourse、SchoolCourse 控制器添加完整的 Swagger 装饰器 前端重构: - 配置 Orval 从后端 OpenAPI 自动生成 API 客户端 - 生成 API 客户端代码(带完整参数定义) - 创建 API 客户端统一入口 (src/api/client.ts) - 创建 API 适配层 (src/api/teacher.adapter.ts) - 配置文件路由 (unplugin-vue-router) - 课程模块迁移到新 API 客户端 - 修复 PrepareModeView.vue API 调用错误 - 教师模块迁移到新 API 客户端 - 修复 school-course.ts 类型错误 - 清理 teacher.adapter.ts 未使用导入 - 修复 client.ts API 客户端结构 - 创建文件路由目录结构 Bug 修复: - 修复路由配置问题 - 移除 top-level await,改用手动路由配置 - 修复响应拦截器 - 正确解包 { code, message, data } 格式的响应 - 清理 teacher.adapter.ts 未使用导入 - 修复 client.ts API 客户端结构 - 创建文件路由目录结构 系统测试: - 后端 API 测试通过 (7/7) - 前端路由测试通过 (4/4) - 数据库完整性验证通过 - Orval API 客户端验证通过 - 超管端功能测试通过 (97.8% 通过率) 新增文件: - reading-platform-backend/src/common/dto/result.dto.ts - reading-platform-backend/src/common/dto/page-query.dto.ts - reading-platform-backend/src/common/interceptors/transform.interceptor.ts - reading-platform-backend/src/common/utils/json.util.ts - reading-platform-backend/src/common/utils/pagination.util.ts - reading-platform-frontend/orval.config.ts - reading-platform-frontend/src/api/generated/mutator.ts - reading-platform-frontend/src/api/client.ts - reading-platform-frontend/src/api/teacher.adapter.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 17:27:13 +08:00
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="$SCRIPT_DIR/lesingle-edu-reading-platform-backend"
FRONTEND_DIR="$SCRIPT_DIR/lesingle-edu-reading-platform-frontend"
2026-02-28 16:41:39 +08:00
echo "======================================"
echo " 少儿智慧阅读"
2026-02-28 16:41:39 +08:00
echo " 统一启动脚本"
echo "======================================"
echo ""
# 函数:检查端口是否被占用
check_port() {
local port=$1
local name=$2
if lsof -ti:$port > /dev/null 2>&1; then
echo "⚠️ 端口 $port 已被占用 ($name)"
read -p "是否停止并重启?(y/n) " -n 1 -r
2026-02-28 16:41:39 +08:00
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
lsof -ti:$port | xargs kill -9 2>/dev/null
echo "✅ 已停止占用端口 $port 的进程"
return 0
else
return 1
fi
fi
return 0
}
# 检查并停止占用端口的进程
check_port 8481 "后端"
2026-02-28 16:41:39 +08:00
if [ $? -eq 1 ]; then
echo "❌ 后端启动取消"
exit 1
fi
check_port 5174 "前端"
2026-02-28 16:41:39 +08:00
if [ $? -eq 1 ]; then
echo "❌ 前端启动取消"
exit 1
fi
# 启动后端
echo ""
echo "📦 [1/2] 启动后端服务 (Spring Boot)..."
2026-02-28 16:41:39 +08:00
cd "$BACKEND_DIR" || exit 1
echo "📂 后端目录:$(pwd)"
2026-02-28 16:41:39 +08:00
# 检查 JAVA_HOME 是否设置
if [ -z "$JAVA_HOME" ]; then
echo "⚠️ 未设置 JAVA_HOME尝试使用默认 JDK 17 路径..."
if [ -d "/f/Java/jdk-17" ]; then
export JAVA_HOME="/f/Java/jdk-17"
echo "✅ 设置 JAVA_HOME=$JAVA_HOME"
else
echo "⚠️ 请确保已安装 JDK 17 并设置 JAVA_HOME"
fi
2026-02-28 16:41:39 +08:00
fi
echo "☕ Java 版本:$(java -version 2>&1 | head -n 1)"
# 后台启动后端 (Maven)
nohup mvn spring-boot:run -Dspring-boot.run.forked > /tmp/lesingle-edu-reading-platform-backend.log 2>&1 &
2026-02-28 16:41:39 +08:00
BACKEND_PID=$!
echo "✅ 后端启动成功 (PID: $BACKEND_PID)"
echo "📄 日志文件:/tmp/lesingle-edu-reading-platform-backend.log"
2026-02-28 16:41:39 +08:00
# 等待后端启动
echo "⏳ 等待后端服务启动..."
for i in {1..60}; do
if curl -s http://localhost:8080/actuator/health > /dev/null 2>&1; then
2026-02-28 16:41:39 +08:00
echo "✅ 后端服务就绪"
break
fi
if [ $i -eq 60 ]; then
2026-02-28 16:41:39 +08:00
echo "❌ 后端服务启动超时"
echo "📄 请查看日志tail -f /tmp/lesingle-edu-reading-platform-backend.log"
2026-02-28 16:41:39 +08:00
exit 1
fi
sleep 2
2026-02-28 16:41:39 +08:00
done
# 启动前端
echo ""
echo "📦 [2/2] 启动前端服务..."
cd "$FRONTEND_DIR" || exit 1
echo "📂 前端目录:$(pwd)"
2026-02-28 16:41:39 +08:00
if [ ! -d "node_modules" ]; then
echo "📦 正在安装前端依赖..."
npm install
fi
# 后台启动前端
nohup npm run dev > /tmp/lesingle-edu-reading-platform-frontend.log 2>&1 &
2026-02-28 16:41:39 +08:00
FRONTEND_PID=$!
echo "✅ 前端启动成功 (PID: $FRONTEND_PID)"
echo "📄 日志文件:/tmp/lesingle-edu-reading-platform-frontend.log"
2026-02-28 16:41:39 +08:00
# 等待前端启动
echo "⏳ 等待前端服务启动..."
for i in {1..30}; do
if curl -s http://localhost:5173 > /dev/null 2>&1; then
echo "✅ 前端服务就绪"
break
fi
if [ $i -eq 30 ]; then
echo "⚠️ 前端服务可能需要更多时间启动"
echo "📄 请查看日志tail -f /tmp/lesingle-edu-reading-platform-frontend.log"
2026-02-28 16:41:39 +08:00
break
fi
sleep 1
done
echo ""
echo "======================================"
echo " ✅ 所有服务启动成功!"
echo "======================================"
echo ""
echo "📍 后端 API: http://localhost:8080"
echo "📍 前端页面: http://localhost:5173"
echo "📍 API 文档: http://localhost:8080/api/v1"
2026-02-28 16:41:39 +08:00
echo ""
echo "📊 查看后端日志tail -f /tmp/lesingle-edu-reading-platform-backend.log"
echo "📊 查看前端日志tail -f /tmp/lesingle-edu-reading-platform-frontend.log"
2026-02-28 16:41:39 +08:00
echo ""
echo "🛑 停止所有服务pkill -f 'spring-boot:run' && pkill -f 'vite'"
2026-02-28 16:41:39 +08:00
echo ""