Compare commits
3 Commits
5f55aadb75
...
de264d3298
| Author | SHA1 | Date | |
|---|---|---|---|
| de264d3298 | |||
| 40589f59e7 | |||
| af5b050651 |
@ -31,11 +31,11 @@ export VITE_APP_PORT=5174
|
|||||||
# 方式二:分别启动
|
# 方式二:分别启动
|
||||||
# 后端(端口 8481)
|
# 后端(端口 8481)
|
||||||
export SERVER_PORT=8481
|
export SERVER_PORT=8481
|
||||||
cd reading-platform-java && mvn spring-boot:run
|
cd lesingle-edu-reading-platform-backend && mvn spring-boot:run
|
||||||
|
|
||||||
# 前端(端口 5174,新终端)
|
# 前端(端口 5174,新终端)
|
||||||
export PORT=5174
|
export PORT=5174
|
||||||
cd reading-platform-frontend && npm run dev
|
cd lesingle-edu-reading-platform-frontend && npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
### 启动服务
|
### 启动服务
|
||||||
@ -51,7 +51,7 @@ cd reading-platform-frontend && npm run dev
|
|||||||
./stop-all.sh
|
./stop-all.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### 前端命令 (reading-platform-frontend/)
|
### 前端命令 (lesingle-edu-reading-platform-frontend/)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run dev # 开发服务器
|
npm run dev # 开发服务器
|
||||||
@ -61,7 +61,7 @@ npm run test:e2e # 端到端测试 (Playwright)
|
|||||||
npm run api:update # 从 OpenAPI 生成 TypeScript 类型
|
npm run api:update # 从 OpenAPI 生成 TypeScript 类型
|
||||||
```
|
```
|
||||||
|
|
||||||
### 后端命令 (reading-platform-java/)
|
### 后端命令 (lesingle-edu-reading-platform-backend/)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 运行后端(使用 JDK 17)
|
# 运行后端(使用 JDK 17)
|
||||||
@ -107,7 +107,7 @@ javac -version
|
|||||||
### 配置文件目录结构
|
### 配置文件目录结构
|
||||||
|
|
||||||
```
|
```
|
||||||
reading-platform-java/src/main/resources/
|
lesingle-edu-reading-platform-backend/src/main/resources/
|
||||||
├── application.yml # 主配置文件(共用配置)
|
├── application.yml # 主配置文件(共用配置)
|
||||||
├── application-dev.yml # 开发环境配置
|
├── application-dev.yml # 开发环境配置
|
||||||
├── application-test.yml # 测试环境配置
|
├── application-test.yml # 测试环境配置
|
||||||
@ -136,17 +136,17 @@ reading-platform-java/src/main/resources/
|
|||||||
```bash
|
```bash
|
||||||
# Linux/Mac
|
# Linux/Mac
|
||||||
export SPRING_PROFILES_ACTIVE=prod
|
export SPRING_PROFILES_ACTIVE=prod
|
||||||
java -jar reading-platform.jar
|
java -jar lesingle-edu-reading-platform-backend.jar
|
||||||
|
|
||||||
# Windows (Git Bash)
|
# Windows (Git Bash)
|
||||||
export SPRING_PROFILES_ACTIVE=prod
|
export SPRING_PROFILES_ACTIVE=prod
|
||||||
java -jar reading-platform.jar
|
java -jar lesingle-edu-reading-platform-backend.jar
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 方式二:命令行参数
|
#### 方式二:命令行参数
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
java -jar reading-platform.jar --spring.profiles.active=prod
|
java -jar lesingle-edu-reading-platform-backend.jar --spring.profiles.active=prod
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 方式三:Maven 启动
|
#### 方式三:Maven 启动
|
||||||
@ -219,7 +219,7 @@ mvn spring-boot:run -Dspring-boot.run.profiles=prod
|
|||||||
|
|
||||||
## 核心原则
|
## 核心原则
|
||||||
|
|
||||||
1. **后端只写 Java** - ⚠️ **所有后端开发必须基于 `reading-platform-java/` (Spring Boot),严禁使用 Node.js/NestJS**
|
1. **后端只写 Java** - ⚠️ **所有后端开发必须基于 `lesingle-edu-reading-platform-backend/` (Spring Boot),严禁使用 Node.js/NestJS**
|
||||||
2. **OpenAPI 规范驱动** - 前后端通过接口规范对齐,零沟通成本
|
2. **OpenAPI 规范驱动** - 前后端通过接口规范对齐,零沟通成本
|
||||||
3. **类型安全优先** - TypeScript 强制类型校验,早发现早修复
|
3. **类型安全优先** - TypeScript 强制类型校验,早发现早修复
|
||||||
4. **约定大于配置** - 统一代码风格和目录结构,降低认知负担
|
4. **约定大于配置** - 统一代码风格和目录结构,降低认知负担
|
||||||
@ -242,8 +242,8 @@ kindergarten_java/
|
|||||||
│ │ ├── teacher/ # 教师端测试
|
│ │ ├── teacher/ # 教师端测试
|
||||||
│ │ └── parent/ # 家长端测试
|
│ │ └── parent/ # 家长端测试
|
||||||
│ └── design/ # 设计文档
|
│ └── design/ # 设计文档
|
||||||
├── reading-platform-frontend/ # 前端项目 (Vue 3)
|
├── lesingle-edu-reading-platform-frontend/ # 前端项目 (Vue 3)
|
||||||
├── reading-platform-java/ # 后端项目 (Spring Boot) ← 唯一后端
|
├── lesingle-edu-reading-platform-backend/ # 后端项目 (Spring Boot) ← 唯一后端
|
||||||
├── reading-platform-backend/ # ⚠️ 已弃用 (NestJS,不再维护)
|
├── reading-platform-backend/ # ⚠️ 已弃用 (NestJS,不再维护)
|
||||||
├── start-all.sh # 统一启动
|
├── start-all.sh # 统一启动
|
||||||
└── stop-all.sh # 统一停止
|
└── stop-all.sh # 统一停止
|
||||||
@ -252,8 +252,8 @@ kindergarten_java/
|
|||||||
### 后端目录结构(Spring Boot)
|
### 后端目录结构(Spring Boot)
|
||||||
|
|
||||||
```
|
```
|
||||||
reading-platform-java/
|
lesingle-edu-reading-platform-backend/
|
||||||
├── src/main/java/com/reading/platform/
|
├── src/main/java/com/lesingle/edu/
|
||||||
│ ├── ReadingPlatformApplication.java # 启动类
|
│ ├── ReadingPlatformApplication.java # 启动类
|
||||||
│ ├── common/ # 公共模块
|
│ ├── common/ # 公共模块
|
||||||
│ │ ├── config/ # 配置类
|
│ │ ├── config/ # 配置类
|
||||||
@ -302,7 +302,7 @@ reading-platform-java/
|
|||||||
### 前端目录结构(Vue 3)
|
### 前端目录结构(Vue 3)
|
||||||
|
|
||||||
```
|
```
|
||||||
reading-platform-frontend/
|
lesingle-edu-reading-platform-frontend/
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── main.ts # 入口文件
|
│ ├── main.ts # 入口文件
|
||||||
│ ├── App.vue # 根组件
|
│ ├── App.vue # 根组件
|
||||||
@ -683,7 +683,7 @@ taskkill //F //PID <PID>
|
|||||||
|
|
||||||
## 变更边界(必须遵守)
|
## 变更边界(必须遵守)
|
||||||
|
|
||||||
> ⚠️ **最高优先级**: 所有后端开发必须基于 `reading-platform-java/` (Spring Boot + Java 17)
|
> ⚠️ **最高优先级**: 所有后端开发必须基于 `lesingle-edu-reading-platform-backend/` (Spring Boot + Java 17)
|
||||||
|
|
||||||
- **不做无关重构** - 只改与需求相关的文件
|
- **不做无关重构** - 只改与需求相关的文件
|
||||||
- **不引入新依赖** - 除非需求明确且必要
|
- **不引入新依赖** - 除非需求明确且必要
|
||||||
@ -765,18 +765,18 @@ taskkill //F //PID <PID>
|
|||||||
|------|---------|------|
|
|------|---------|------|
|
||||||
| 测试框架 | **Playwright Test** | 端到端浏览器自动化测试 |
|
| 测试框架 | **Playwright Test** | 端到端浏览器自动化测试 |
|
||||||
| 浏览器 | **Chromium** | 可自动打开浏览器模拟用户操作 |
|
| 浏览器 | **Chromium** | 可自动打开浏览器模拟用户操作 |
|
||||||
| 配置文件 | `reading-platform-frontend/playwright.config.ts` | Playwright 配置 |
|
| 配置文件 | `lesingle-edu-reading-platform-frontend/playwright.config.ts` | Playwright 配置 |
|
||||||
| 测试文件 | `reading-platform-frontend/tests/` | E2E 测试脚本 |
|
| 测试文件 | `lesingle-edu-reading-platform-frontend/tests/` | E2E 测试脚本 |
|
||||||
|
|
||||||
### 快速开始
|
### 快速开始
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. 启动后端服务
|
# 1. 启动后端服务
|
||||||
cd reading-platform-java
|
cd lesingle-edu-reading-platform-backend
|
||||||
mvn spring-boot:run
|
mvn spring-boot:run
|
||||||
|
|
||||||
# 2. 启动前端服务(新终端窗口)
|
# 2. 启动前端服务(新终端窗口)
|
||||||
cd reading-platform-frontend
|
cd lesingle-edu-reading-platform-frontend
|
||||||
npm run dev
|
npm run dev
|
||||||
|
|
||||||
# 3. 运行 E2E 测试(无头模式 - 不显示浏览器)
|
# 3. 运行 E2E 测试(无头模式 - 不显示浏览器)
|
||||||
@ -823,9 +823,9 @@ npm run test:e2e:ui
|
|||||||
|
|
||||||
| 文件/目录 | 路径 |
|
| 文件/目录 | 路径 |
|
||||||
|----------|------|
|
|----------|------|
|
||||||
| 前端 E2E 测试 | `reading-platform-frontend/tests/` |
|
| 前端 E2E 测试 | `lesingle-edu-reading-platform-frontend/tests/` |
|
||||||
| Playwright 配置 | `reading-platform-frontend/playwright.config.ts` |
|
| Playwright 配置 | `lesingle-edu-reading-platform-frontend/playwright.config.ts` |
|
||||||
| 后端测试(待创建) | `reading-platform-java/src/test/` |
|
| 后端测试(待创建) | `lesingle-edu-reading-platform-backend/src/test/` |
|
||||||
| 启动脚本 | `start-all.sh` |
|
| 启动脚本 | `start-all.sh` |
|
||||||
|
|
||||||
*本规范最后更新于 2026-03-18*
|
*本规范最后更新于 2026-03-18*
|
||||||
|
|||||||
@ -54,7 +54,7 @@ export REMOTE_USER=root
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 本地构建
|
# 本地构建
|
||||||
cd /f/LesingleProject/lesingle-kindergarten-course/kindergarten_java/reading-platform-java
|
cd /f/LesingleProject/lesingle-kindergarten-course/kindergarten_java/lesingle-edu-reading-platform-backend
|
||||||
mvn clean package -DskipTests
|
mvn clean package -DskipTests
|
||||||
|
|
||||||
# 上传到服务器
|
# 上传到服务器
|
||||||
@ -122,7 +122,7 @@ tail -f logs/app.log
|
|||||||
### 4.1 本地构建
|
### 4.1 本地构建
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /f/LesingleProject/lesingle-kindergarten-course/kindergarten_java/reading-platform-frontend
|
cd /f/LesingleProject/lesingle-kindergarten-course/kindergarten_java/lesingle-edu-reading-platform-frontend
|
||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ ps aux | grep reading-platform
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 本地重新构建并上传
|
# 本地重新构建并上传
|
||||||
cd reading-platform-frontend
|
cd lesingle-edu-reading-platform-frontend
|
||||||
npm run build
|
npm run build
|
||||||
scp -r dist/* root@你的 IP:/www/wwwroot/你的域名/
|
scp -r dist/* root@你的 IP:/www/wwwroot/你的域名/
|
||||||
```
|
```
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# 幼儿阅读教学服务平台 - 服务启动指南
|
# 少儿智慧阅读 - 服务启动指南
|
||||||
|
|
||||||
## 📋 概述
|
## 📋 概述
|
||||||
|
|
||||||
@ -25,10 +25,10 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 启动后端
|
# 启动后端
|
||||||
./reading-platform-backend/start-backend.sh
|
./lesingle-edu-reading-platform-backend/start-backend.sh
|
||||||
|
|
||||||
# 启动前端
|
# 启动前端
|
||||||
./reading-platform-frontend/start-frontend.sh
|
./lesingle-edu-reading-platform-frontend/start-frontend.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🛑 停止服务
|
## 🛑 停止服务
|
||||||
@ -63,13 +63,13 @@ lsof -ti:5173 | xargs kill -9
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 实时查看后端日志
|
# 实时查看后端日志
|
||||||
tail -f /tmp/reading-platform-backend.log
|
tail -f /tmp/lesingle-edu-reading-platform-backend.log
|
||||||
|
|
||||||
# 实时查看前端日志
|
# 实时查看前端日志
|
||||||
tail -f /tmp/reading-platform-frontend.log
|
tail -f /tmp/lesingle-edu-reading-platform-frontend.log
|
||||||
|
|
||||||
# 查看所有日志
|
# 查看所有日志
|
||||||
tail -f /tmp/reading-platform-*.log
|
tail -f /tmp/lesingle-edu-reading-platform-*.log
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🔍 检查服务状态
|
## 🔍 检查服务状态
|
||||||
@ -91,11 +91,11 @@ curl http://localhost:3000/api/v1/courses
|
|||||||
/Users/retirado/ccProgram/
|
/Users/retirado/ccProgram/
|
||||||
├── start-all.sh # 统一启动脚本 ⭐
|
├── start-all.sh # 统一启动脚本 ⭐
|
||||||
├── stop-all.sh # 统一停止脚本 ⭐
|
├── stop-all.sh # 统一停止脚本 ⭐
|
||||||
├── reading-platform-backend/ # 后端目录
|
├── lesingle-edu-reading-platform-backend/ # 后端目录
|
||||||
│ ├── start-backend.sh # 后端启动脚本
|
│ ├── start-backend.sh # 后端启动脚本
|
||||||
│ ├── package.json
|
│ ├── package.json
|
||||||
│ └── src/
|
│ └── src/
|
||||||
└── reading-platform-frontend/ # 前端目录
|
└── lesingle-edu-reading-platform-frontend/ # 前端目录
|
||||||
├── start-frontend.sh # 前端启动脚本
|
├── start-frontend.sh # 前端启动脚本
|
||||||
├── package.json
|
├── package.json
|
||||||
└── src/
|
└── src/
|
||||||
@ -112,8 +112,8 @@ A: 先运行 `./stop-all.sh` 停止服务,再运行 `./start-all.sh` 启动。
|
|||||||
### Q: 服务启动失败怎么办?
|
### Q: 服务启动失败怎么办?
|
||||||
A: 查看日志文件排查问题:
|
A: 查看日志文件排查问题:
|
||||||
```bash
|
```bash
|
||||||
tail -f /tmp/reading-platform-backend.log
|
tail -f /tmp/lesingle-edu-reading-platform-backend.log
|
||||||
tail -f /tmp/reading-platform-frontend.log
|
tail -f /tmp/lesingle-edu-reading-platform-frontend.log
|
||||||
```
|
```
|
||||||
|
|
||||||
### Q: 如何在开发模式下启动?
|
### Q: 如何在开发模式下启动?
|
||||||
|
|||||||
@ -15,7 +15,7 @@ set -e
|
|||||||
|
|
||||||
# 配置
|
# 配置
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BACKEND_DIR="$SCRIPT_DIR/reading-platform-java"
|
BACKEND_DIR="$SCRIPT_DIR/lesingle-edu-reading-platform-backend"
|
||||||
REMOTE_BASE_DIR="/www/wwwroot/reading-platform"
|
REMOTE_BASE_DIR="/www/wwwroot/reading-platform"
|
||||||
|
|
||||||
# SSH 配置
|
# SSH 配置
|
||||||
|
|||||||
@ -15,7 +15,7 @@ set -e
|
|||||||
|
|
||||||
# 配置
|
# 配置
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
FRONTEND_DIR="$SCRIPT_DIR/reading-platform-frontend"
|
FRONTEND_DIR="$SCRIPT_DIR/lesingle-edu-reading-platform-frontend"
|
||||||
REMOTE_DIR="/www/wwwroot/reading.ycapp.cn"
|
REMOTE_DIR="/www/wwwroot/reading.ycapp.cn"
|
||||||
|
|
||||||
# SSH 配置(可通过环境变量覆盖)
|
# SSH 配置(可通过环境变量覆盖)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
# 幼儿阅读教学服务平台 - 一键部署到宝塔面板
|
# 少儿智慧阅读 - 一键部署到宝塔面板
|
||||||
#
|
#
|
||||||
# 使用前请配置:
|
# 使用前请配置:
|
||||||
# 1. 远程服务器信息(IP、用户名、密码/密钥)
|
# 1. 远程服务器信息(IP、用户名、密码/密钥)
|
||||||
@ -77,14 +77,14 @@ check_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 检查本地是否有 JAR 包
|
# 检查本地是否有 JAR 包
|
||||||
JAR_FILE="reading-platform-java/target/reading-platform-1.0.0.jar"
|
JAR_FILE="lesingle-edu-reading-platform-backend/target/reading-platform-1.0.0.jar"
|
||||||
if [ ! -f "$JAR_FILE" ]; then
|
if [ ! -f "$JAR_FILE" ]; then
|
||||||
log_warn "未找到 JAR 包,将先执行构建..."
|
log_warn "未找到 JAR 包,将先执行构建..."
|
||||||
BUILD_NEEDED=true
|
BUILD_NEEDED=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 检查前端是否有 dist
|
# 检查前端是否有 dist
|
||||||
if [ ! -d "reading-platform-frontend/dist" ]; then
|
if [ ! -d "lesingle-edu-reading-platform-frontend/dist" ]; then
|
||||||
log_warn "未找到前端构建文件,将先执行构建..."
|
log_warn "未找到前端构建文件,将先执行构建..."
|
||||||
BUILD_FRONTEND_NEEDED=true
|
BUILD_FRONTEND_NEEDED=true
|
||||||
fi
|
fi
|
||||||
@ -97,7 +97,7 @@ build_backend() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
log_step "构建后端服务..."
|
log_step "构建后端服务..."
|
||||||
cd "reading-platform-java"
|
cd "lesingle-edu-reading-platform-backend"
|
||||||
|
|
||||||
# 检查 JDK 版本
|
# 检查 JDK 版本
|
||||||
if command -v java &> /dev/null; then
|
if command -v java &> /dev/null; then
|
||||||
@ -151,7 +151,7 @@ build_frontend() {
|
|||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
if [ -d "reading-platform-frontend/dist" ]; then
|
if [ -d "lesingle-edu-reading-platform-frontend/dist" ]; then
|
||||||
log_info "前端构建成功"
|
log_info "前端构建成功"
|
||||||
else
|
else
|
||||||
log_error "前端构建失败"
|
log_error "前端构建失败"
|
||||||
@ -190,7 +190,7 @@ ENDSSH
|
|||||||
# 上传 JAR 包
|
# 上传 JAR 包
|
||||||
log_info "上传后端 JAR 包..."
|
log_info "上传后端 JAR 包..."
|
||||||
scp -o StrictHostKeyChecking=no -P "$REMOTE_PORT" \
|
scp -o StrictHostKeyChecking=no -P "$REMOTE_PORT" \
|
||||||
"reading-platform-java/target/reading-platform-1.0.0.jar" \
|
"lesingle-edu-reading-platform-backend/target/reading-platform-1.0.0.jar" \
|
||||||
"$REMOTE_USER@$REMOTE_HOST:/www/wwwroot/reading-platform/app.jar"
|
"$REMOTE_USER@$REMOTE_HOST:/www/wwwroot/reading-platform/app.jar"
|
||||||
|
|
||||||
# 上传启动脚本
|
# 上传启动脚本
|
||||||
@ -299,7 +299,7 @@ upload_frontend() {
|
|||||||
# 上传 dist 目录
|
# 上传 dist 目录
|
||||||
log_info "上传前端构建文件..."
|
log_info "上传前端构建文件..."
|
||||||
scp -o StrictHostKeyChecking=no -r -P "$REMOTE_PORT" \
|
scp -o StrictHostKeyChecking=no -r -P "$REMOTE_PORT" \
|
||||||
"reading-platform-frontend/dist/" \
|
"lesingle-edu-reading-platform-frontend/dist/" \
|
||||||
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_FRONTEND_DIR/"
|
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_FRONTEND_DIR/"
|
||||||
|
|
||||||
log_info "前端文件上传完成"
|
log_info "前端文件上传完成"
|
||||||
@ -389,7 +389,7 @@ show_deploy_info() {
|
|||||||
main() {
|
main() {
|
||||||
echo ""
|
echo ""
|
||||||
echo "=============================================="
|
echo "=============================================="
|
||||||
echo " 幼儿阅读教学服务平台"
|
echo " 少儿智慧阅读"
|
||||||
echo " 一键部署到宝塔面板"
|
echo " 一键部署到宝塔面板"
|
||||||
echo "=============================================="
|
echo "=============================================="
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
# 幼儿阅读教学服务平台 - 一键部署到宝塔面板
|
# 少儿智慧阅读 - 一键部署到宝塔面板
|
||||||
#
|
#
|
||||||
# 使用方法:
|
# 使用方法:
|
||||||
# ./deploy.sh your-server-ip
|
# ./deploy.sh your-server-ip
|
||||||
@ -29,7 +29,7 @@ log_step() { echo -e "${BLUE}[STEP]${NC} $1"; }
|
|||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo "=============================================="
|
echo "=============================================="
|
||||||
echo " 幼儿阅读教学服务平台"
|
echo " 少儿智慧阅读"
|
||||||
echo " 一键部署到宝塔面板"
|
echo " 一键部署到宝塔面板"
|
||||||
echo "=============================================="
|
echo "=============================================="
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
245
docs/LOGBACK_CONFIG.md
Normal file
245
docs/LOGBACK_CONFIG.md
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
# Logback 日志配置说明
|
||||||
|
|
||||||
|
## 配置位置
|
||||||
|
|
||||||
|
- **配置文件**: `reading-platform-java/src/main/resources/logback-spring.xml`
|
||||||
|
- **日志目录**: `logs/`(应用启动时自动创建)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 日志滚动策略
|
||||||
|
|
||||||
|
### 保留策略
|
||||||
|
| 配置项 | 值 | 说明 |
|
||||||
|
|--------|-----|------|
|
||||||
|
| 保留天数 | 30 天 | 自动删除 30 天前的日志 |
|
||||||
|
| 单文件大小 | 100MB | 单个日志文件最大 100MB |
|
||||||
|
| 总大小上限 | 2GB | 所有日志文件总计不超过 2GB |
|
||||||
|
|
||||||
|
### 滚动规则
|
||||||
|
1. **按天滚动**: 每天生成一个新的日志文件
|
||||||
|
2. **按大小滚动**: 当单个文件超过 100MB 时自动切分
|
||||||
|
3. **自动清理**: 超过 30 天的日志自动删除
|
||||||
|
4. **总量控制**: 当日志总量达到 2GB 时,删除最旧的日志
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 日志文件分类
|
||||||
|
|
||||||
|
| 日志类型 | 文件名 | 说明 | 大小上限 |
|
||||||
|
|---------|--------|------|---------|
|
||||||
|
| 主日志 | `reading-platform.log` | 业务日志、系统日志 | 2GB |
|
||||||
|
| 错误日志 | `reading-platform-error.log` | 仅记录 ERROR 级别日志 | 500MB |
|
||||||
|
| 请求日志 | `reading-platform-request.log` | 所有 API 请求日志 | 500MB |
|
||||||
|
| SQL 日志 | `reading-platform-sql.log` | 仅记录慢 SQL 和错误 SQL | 300MB |
|
||||||
|
|
||||||
|
### 日志文件命名示例
|
||||||
|
|
||||||
|
```
|
||||||
|
logs/
|
||||||
|
├── reading-platform.log # 当前主日志
|
||||||
|
├── reading-platform.2026-03-26.1.log # 按天滚动
|
||||||
|
├── reading-platform.2026-03-26.2.log # 按大小滚动
|
||||||
|
├── reading-platform-error.log # 当前错误日志
|
||||||
|
├── reading-platform-error.2026-03-26.1.log
|
||||||
|
├── reading-platform-request.log # 当前请求日志
|
||||||
|
├── reading-platform-request.2026-03-26.1.log
|
||||||
|
└── reading-platform-sql.log # 当前 SQL 日志
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 日志级别配置
|
||||||
|
|
||||||
|
### 生产环境 (prod)
|
||||||
|
|
||||||
|
| 日志类别 | 日志级别 | 输出目标 | 说明 |
|
||||||
|
|---------|---------|---------|------|
|
||||||
|
| 根日志 | INFO | FILE, ERROR_FILE | 基础日志级别 |
|
||||||
|
| 业务日志 | INFO | FILE | `com.reading.platform` 包 |
|
||||||
|
| **请求日志** | **INFO** | **REQUEST_FILE** | **所有 API 请求单独输出** |
|
||||||
|
| **SQL 日志** | **WARN** | **SQL_FILE** | **仅记录慢 SQL 和错误 SQL** |
|
||||||
|
| Spring 框架 | WARN | - | 框架日志 |
|
||||||
|
|
||||||
|
### 开发环境 (dev)
|
||||||
|
|
||||||
|
| 日志类别 | 日志级别 | 说明 |
|
||||||
|
|---------|---------|------|
|
||||||
|
| 业务日志 | DEBUG | 详细业务日志 |
|
||||||
|
| 请求日志 | INFO | 所有 API 请求单独输出 |
|
||||||
|
| SQL 日志 | DEBUG | 全量 SQL 日志 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 请求日志格式
|
||||||
|
|
||||||
|
每个 API 请求会记录以下信息:
|
||||||
|
|
||||||
|
```
|
||||||
|
===== 请求开始 =====
|
||||||
|
接口地址:POST /api/v1/teacher/courses
|
||||||
|
请求方法:com.reading.platform.controller.teacher.CourseController.createCourse
|
||||||
|
请求参数:{"name":"新课程","gradeId":1}
|
||||||
|
响应时间:156ms
|
||||||
|
响应结果:{"code":"SUCCESS","data":123}
|
||||||
|
===== 请求结束 =====
|
||||||
|
```
|
||||||
|
|
||||||
|
异常请求:
|
||||||
|
|
||||||
|
```
|
||||||
|
===== 请求异常 =====
|
||||||
|
接口地址:POST /api/v1/teacher/courses
|
||||||
|
执行时间:45ms
|
||||||
|
异常信息:参数校验失败
|
||||||
|
异常类型:com.reading.platform.common.exception.BusinessException
|
||||||
|
堆栈信息:...
|
||||||
|
===== 请求异常结束 =====
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SQL 日志策略
|
||||||
|
|
||||||
|
### 生产环境(推荐)
|
||||||
|
|
||||||
|
**只记录慢 SQL 和错误 SQL**,通过设置 `WARN` 级别实现:
|
||||||
|
- `DEBUG` 级别:所有 SQL(开发环境)
|
||||||
|
- `INFO` 级别:SQL 摘要(测试环境)
|
||||||
|
- `WARN` 级别:**仅慢 SQL 和错误 SQL**(生产环境)
|
||||||
|
- `ERROR` 级别:仅错误 SQL
|
||||||
|
|
||||||
|
### 慢 SQL 配置(可选)
|
||||||
|
|
||||||
|
如需记录执行时间超过指定阈值的 SQL,可在 MyBatis-Plus 配置中设置:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# application-prod.yml
|
||||||
|
mybatis-plus:
|
||||||
|
configuration:
|
||||||
|
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 常用命令
|
||||||
|
|
||||||
|
### 查看实时请求日志
|
||||||
|
```bash
|
||||||
|
tail -f logs/reading-platform-request.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### 查看实时错误日志
|
||||||
|
```bash
|
||||||
|
tail -f logs/reading-platform-error.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### 查看实时 SQL 日志
|
||||||
|
```bash
|
||||||
|
tail -f logs/reading-platform-sql.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### 查看指定日期的日志
|
||||||
|
```bash
|
||||||
|
cat logs/reading-platform-request.2026-03-26.1.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### 搜索特定接口日志
|
||||||
|
```bash
|
||||||
|
grep "/api/v1/teacher/courses" logs/reading-platform-request.*.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### 搜索错误日志
|
||||||
|
```bash
|
||||||
|
grep "ERROR" logs/reading-platform-error.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### 查看日志目录大小
|
||||||
|
```bash
|
||||||
|
du -sh logs/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 手动清理日志(可选)
|
||||||
|
```bash
|
||||||
|
# 删除 7 天前的日志
|
||||||
|
find logs/ -name "*.log" -mtime +7 -delete
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 配置修改
|
||||||
|
|
||||||
|
### 调整日志保留天数
|
||||||
|
|
||||||
|
修改 `logback-spring.xml`:
|
||||||
|
```xml
|
||||||
|
<property name="LOG_MAX_HISTORY" value="30"/> <!-- 修改这里的数字 -->
|
||||||
|
```
|
||||||
|
|
||||||
|
### 调整单个文件大小限制
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<property name="LOG_MAX_FILE_SIZE" value="100MB"/> <!-- 修改文件大小 -->
|
||||||
|
```
|
||||||
|
|
||||||
|
### 调整总日志大小上限
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<property name="LOG_TOTAL_CAP" value="2GB"/> <!-- 修改总大小 -->
|
||||||
|
```
|
||||||
|
|
||||||
|
### 修改后重启服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /www/wwwroot/reading-platform
|
||||||
|
./stop.sh
|
||||||
|
./start.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 环境切换
|
||||||
|
|
||||||
|
### 开发环境
|
||||||
|
```bash
|
||||||
|
export SPRING_PROFILES_ACTIVE=dev
|
||||||
|
java -jar reading-platform.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
### 生产环境
|
||||||
|
```bash
|
||||||
|
export SPRING_PROFILES_ACTIVE=prod
|
||||||
|
java -jar reading-platform.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
1. **请求日志独立输出**: 所有 API 请求日志输出到 `request.log`,不影响主日志
|
||||||
|
2. **SQL 日志精简**: 生产环境仅记录 WARN 和 ERROR 级别 SQL,避免日志爆炸
|
||||||
|
3. **错误日志单独记录**: 所有 ERROR 级别日志输出到 `error.log`,便于问题排查
|
||||||
|
4. **日志目录权限**: 确保 `logs` 目录有写权限(chmod 755)
|
||||||
|
5. **磁盘空间监控**: 建议设置磁盘告警,当日志目录接近总上限时收到通知
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 故障排查
|
||||||
|
|
||||||
|
### 请求日志不输出
|
||||||
|
- 检查 `RequestLogAspect` 切面是否生效
|
||||||
|
- 确认日志级别配置为 `INFO`
|
||||||
|
- 检查 `additivity="false"` 是否配置
|
||||||
|
|
||||||
|
### SQL 日志不输出
|
||||||
|
- 生产环境只记录 WARN 和 ERROR 级别(慢 SQL 和错误 SQL)
|
||||||
|
- 如需查看全量 SQL,临时改为 `DEBUG` 级别
|
||||||
|
|
||||||
|
### 日志文件丢失
|
||||||
|
- 检查是否达到 `maxHistory`(30 天)
|
||||||
|
- 检查是否达到 `totalSizeCap`(总大小上限)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**配置日期**: 2026-03-26
|
||||||
|
**最后更新**: 2026-03-26
|
||||||
@ -1,4 +1,4 @@
|
|||||||
# 幼儿阅读教学服务平台
|
# 少儿智慧阅读
|
||||||
|
|
||||||
> 面向幼儿园的B2B2C阅读教学服务平台,将优质绘本资源包装成教学课程,帮助幼儿园老师更好地完成教学工作。
|
> 面向幼儿园的B2B2C阅读教学服务平台,将优质绘本资源包装成教学课程,帮助幼儿园老师更好地完成教学工作。
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
# 幼儿阅读教学服务平台 - 项目概览
|
# 少儿智慧阅读 - 项目概览
|
||||||
|
|
||||||
> 创建时间:2025-01-29
|
> 创建时间:2025-01-29
|
||||||
> 最后更新:2025-01-29
|
> 最后更新:2025-01-29
|
||||||
|
|
||||||
## 项目定位
|
## 项目定位
|
||||||
|
|
||||||
面向幼儿园客户提供的一站式幼儿阅读教学服务平台,将优质绘本资源包装成教学课程,帮助幼儿园老师更好地完成教学工作。
|
面向幼儿园客户提供的一站式少儿智慧阅读,将优质绘本资源包装成教学课程,帮助幼儿园老师更好地完成教学工作。
|
||||||
|
|
||||||
## 平台架构
|
## 平台架构
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
│ 幼儿阅读教学服务平台 │
|
│ 少儿智慧阅读 │
|
||||||
├─────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────┤
|
||||||
│ │
|
│ │
|
||||||
│ ┌──────────┐ │
|
│ ┌──────────┐ │
|
||||||
|
|||||||
@ -988,7 +988,7 @@ FRONTEND_URL="http://localhost:5173"
|
|||||||
```bash
|
```bash
|
||||||
# frontend/.env.development
|
# frontend/.env.development
|
||||||
VITE_API_BASE_URL=http://localhost:3000/api/v1
|
VITE_API_BASE_URL=http://localhost:3000/api/v1
|
||||||
VITE_APP_TITLE=幼儿阅读教学服务平台
|
VITE_APP_TITLE=少儿智慧阅读
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# 幼儿阅读教学服务平台 - 项目总览
|
# 少儿智慧阅读 - 项目总览
|
||||||
|
|
||||||
> 更新时间:2026-02-27
|
> 更新时间:2026-02-27
|
||||||
> 项目状态:需求重构中 - 课程包与套餐结构重构
|
> 项目状态:需求重构中 - 课程包与套餐结构重构
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
## 📋 项目简介
|
## 📋 项目简介
|
||||||
|
|
||||||
**幼儿阅读教学服务平台**是一个面向幼儿园的B2B2C阅读教学服务平台,将优质绘本资源包装成教学课程,帮助幼儿园老师更好地完成教学工作。
|
**少儿智慧阅读**是一个面向幼儿园的B2B2C阅读教学服务平台,将优质绘本资源包装成教学课程,帮助幼儿园老师更好地完成教学工作。
|
||||||
|
|
||||||
### 核心价值
|
### 核心价值
|
||||||
|
|
||||||
|
|||||||
@ -108,7 +108,7 @@ const doc = new Document({
|
|||||||
headers: {
|
headers: {
|
||||||
default: new Header({ children: [new Paragraph({
|
default: new Header({ children: [new Paragraph({
|
||||||
alignment: AlignmentType.RIGHT,
|
alignment: AlignmentType.RIGHT,
|
||||||
children: [new TextRun({ text: "幼儿阅读教学服务平台 - 产品介绍", size: 20, color: "888888" })]
|
children: [new TextRun({ text: "少儿智慧阅读 - 产品介绍", size: 20, color: "888888" })]
|
||||||
})] })
|
})] })
|
||||||
},
|
},
|
||||||
footers: {
|
footers: {
|
||||||
@ -124,7 +124,7 @@ const doc = new Document({
|
|||||||
new Paragraph({ spacing: { before: 2000 } }),
|
new Paragraph({ spacing: { before: 2000 } }),
|
||||||
new Paragraph({
|
new Paragraph({
|
||||||
alignment: AlignmentType.CENTER,
|
alignment: AlignmentType.CENTER,
|
||||||
children: [new TextRun({ text: "幼儿阅读教学服务平台", size: 72, bold: true, color: "1E3A5F", font: "Microsoft YaHei" })]
|
children: [new TextRun({ text: "少儿智慧阅读", size: 72, bold: true, color: "1E3A5F", font: "Microsoft YaHei" })]
|
||||||
}),
|
}),
|
||||||
new Paragraph({ spacing: { before: 400 } }),
|
new Paragraph({ spacing: { before: 400 } }),
|
||||||
new Paragraph({
|
new Paragraph({
|
||||||
@ -154,7 +154,7 @@ const doc = new Document({
|
|||||||
new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("1.1 产品定位")] }),
|
new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("1.1 产品定位")] }),
|
||||||
new Paragraph({
|
new Paragraph({
|
||||||
spacing: { after: 200 },
|
spacing: { after: 200 },
|
||||||
children: [new TextRun({ text: "幼儿阅读教学服务平台是一款面向幼儿园的B2B2C综合性阅读教学管理系统,致力于为幼儿园、教师和家长提供全方位的绘本阅读教学服务。平台采用多端协同架构,打通超管、学校、教师、家长四方角色,实现从课程创作、教学管理到家校互动的完整闭环。" })]
|
children: [new TextRun({ text: "少儿智慧阅读是一款面向幼儿园的B2B2C综合性阅读教学管理系统,致力于为幼儿园、教师和家长提供全方位的绘本阅读教学服务。平台采用多端协同架构,打通超管、学校、教师、家长四方角色,实现从课程创作、教学管理到家校互动的完整闭环。" })]
|
||||||
}),
|
}),
|
||||||
|
|
||||||
new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("1.2 目标用户")] }),
|
new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun("1.2 目标用户")] }),
|
||||||
@ -399,7 +399,7 @@ const doc = new Document({
|
|||||||
|
|
||||||
// 生成文档
|
// 生成文档
|
||||||
Packer.toBuffer(doc).then(buffer => {
|
Packer.toBuffer(doc).then(buffer => {
|
||||||
fs.writeFileSync("/Users/retirado/ccProgram/docs/幼儿阅读教学服务平台-产品介绍与功能说明.docx", buffer);
|
fs.writeFileSync("/Users/retirado/ccProgram/docs/少儿智慧阅读-产品介绍与功能说明.docx", buffer);
|
||||||
console.log("文档生成成功!");
|
console.log("文档生成成功!");
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.error("生成文档失败:", err);
|
console.error("生成文档失败:", err);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""
|
"""
|
||||||
幼儿阅读教学服务平台 - 产品介绍与功能说明 PDF生成脚本
|
少儿智慧阅读 - 产品介绍与功能说明 PDF生成脚本
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from reportlab.lib.pagesizes import A4
|
from reportlab.lib.pagesizes import A4
|
||||||
@ -196,7 +196,7 @@ def add_image_with_caption(story, image_path, caption, styles, max_width=15*cm,
|
|||||||
|
|
||||||
def build_document():
|
def build_document():
|
||||||
"""构建PDF文档"""
|
"""构建PDF文档"""
|
||||||
output_path = '/Users/retirado/ccProgram/docs/幼儿阅读教学服务平台-产品介绍与功能说明.pdf'
|
output_path = '/Users/retirado/ccProgram/docs/少儿智慧阅读-产品介绍与功能说明.pdf'
|
||||||
screenshots_dir = '/Users/retirado/ccProgram/docs/screenshots'
|
screenshots_dir = '/Users/retirado/ccProgram/docs/screenshots'
|
||||||
|
|
||||||
doc = SimpleDocTemplate(
|
doc = SimpleDocTemplate(
|
||||||
@ -213,7 +213,7 @@ def build_document():
|
|||||||
|
|
||||||
# ===== 封面 =====
|
# ===== 封面 =====
|
||||||
story.append(Spacer(1, 4*cm))
|
story.append(Spacer(1, 4*cm))
|
||||||
story.append(Paragraph('幼儿阅读教学服务平台', styles['CoverTitle']))
|
story.append(Paragraph('少儿智慧阅读', styles['CoverTitle']))
|
||||||
story.append(Paragraph('产品介绍与功能说明', styles['CoverSubtitle']))
|
story.append(Paragraph('产品介绍与功能说明', styles['CoverSubtitle']))
|
||||||
story.append(Spacer(1, 3*cm))
|
story.append(Spacer(1, 3*cm))
|
||||||
story.append(Paragraph('版本:v1.0', styles['CoverSubtitle']))
|
story.append(Paragraph('版本:v1.0', styles['CoverSubtitle']))
|
||||||
@ -225,7 +225,7 @@ def build_document():
|
|||||||
|
|
||||||
story.append(Paragraph('1.1 产品定位', styles['SectionTitle']))
|
story.append(Paragraph('1.1 产品定位', styles['SectionTitle']))
|
||||||
story.append(Paragraph(
|
story.append(Paragraph(
|
||||||
'幼儿阅读教学服务平台是一款面向幼儿园的B2B2C综合性阅读教学管理系统,致力于为幼儿园、教师和家长提供全方位的绘本阅读教学服务。平台采用多端协同架构,打通超管、学校、教师、家长四方角色,实现从课程创作、教学管理到家校互动的完整闭环。',
|
'少儿智慧阅读是一款面向幼儿园的B2B2C综合性阅读教学管理系统,致力于为幼儿园、教师和家长提供全方位的绘本阅读教学服务。平台采用多端协同架构,打通超管、学校、教师、家长四方角色,实现从课程创作、教学管理到家校互动的完整闭环。',
|
||||||
styles['ChineseBody']
|
styles['ChineseBody']
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|||||||
@ -79,8 +79,8 @@
|
|||||||
### 2.1 基本设置
|
### 2.1 基本设置
|
||||||
| 测试项 | 预期结果 | 实际结果 | 状态 |
|
| 测试项 | 预期结果 | 实际结果 | 状态 |
|
||||||
|--------|----------|----------|------|
|
|--------|----------|----------|------|
|
||||||
| 加载设置 | 显示已有设置值 | 成功加载"幼儿阅读教学服务平台"等默认值 | ✅ |
|
| 加载设置 | 显示已有设置值 | 成功加载"少儿智慧阅读"等默认值 | ✅ |
|
||||||
| 修改系统名称 | 保存成功 | 修改为"幼儿阅读教学服务平台 - 测试",PUT 200成功 | ✅ |
|
| 修改系统名称 | 保存成功 | 修改为"少儿智慧阅读 - 测试",PUT 200成功 | ✅ |
|
||||||
| 修改联系信息 | 保存成功 | 未详细测试 | ⏳ |
|
| 修改联系信息 | 保存成功 | 未详细测试 | ⏳ |
|
||||||
|
|
||||||
### 2.2 安全设置
|
### 2.2 安全设置
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# 幼儿阅读教学服务平台 - 系统测试方案
|
# 少儿智慧阅读 - 系统测试方案
|
||||||
|
|
||||||
> 版本: v1.0
|
> 版本: v1.0
|
||||||
> 创建时间: 2026-02-24
|
> 创建时间: 2026-02-24
|
||||||
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
### 1.1 项目背景
|
### 1.1 项目背景
|
||||||
|
|
||||||
幼儿阅读教学服务平台是一个面向幼儿园客户提供的一站式幼儿阅读教学服务平台,包含四个端:
|
少儿智慧阅读是一个面向幼儿园客户提供的一站式少儿智慧阅读,包含四个端:
|
||||||
- **超管端**:平台运营管理、课程包制作发布、租户数据监控
|
- **超管端**:平台运营管理、课程包制作发布、租户数据监控
|
||||||
- **学校端**:幼儿园管理(园长/教务管理员/教学主管)
|
- **学校端**:幼儿园管理(园长/教务管理员/教学主管)
|
||||||
- **教师端**:一线教师完成日常阅读教学
|
- **教师端**:一线教师完成日常阅读教学
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
# 幼儿阅读教学服务平台 - 产品介绍与功能说明
|
# 少儿智慧阅读 - 产品介绍与功能说明
|
||||||
|
|
||||||
## 一、产品概述
|
## 一、产品概述
|
||||||
|
|
||||||
### 1.1 产品定位
|
### 1.1 产品定位
|
||||||
|
|
||||||
**幼儿阅读教学服务平台**是一款面向幼儿园的B2B2C综合性阅读教学管理系统,致力于为幼儿园、教师和家长提供全方位的绘本阅读教学服务。平台采用多端协同架构,打通超管、学校、教师、家长四方角色,实现从课程创作、教学管理到家校互动的完整闭环。
|
**少儿智慧阅读**是一款面向幼儿园的B2B2C综合性阅读教学管理系统,致力于为幼儿园、教师和家长提供全方位的绘本阅读教学服务。平台采用多端协同架构,打通超管、学校、教师、家长四方角色,实现从课程创作、教学管理到家校互动的完整闭环。
|
||||||
|
|
||||||
### 1.2 目标用户
|
### 1.2 目标用户
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# 幼儿阅读教学服务平台
|
# 少儿智慧阅读
|
||||||
|
|
||||||
## 产品简介
|
## 产品简介
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@ Spring Boot + MyBatis-Plus backend for the Reading Platform.
|
|||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
reading-platform-java/
|
lesingle-edu-reading-platform-backend/
|
||||||
├── pom.xml # Maven dependencies
|
├── pom.xml # Maven dependencies
|
||||||
├── src/main/java/com/reading/platform/
|
├── src/main/java/com/reading/platform/
|
||||||
│ ├── ReadingPlatformApplication.java
|
│ ├── ReadingPlatformApplication.java
|
||||||
2
reading-platform-java/db-migrate.sh → lesingle-edu-reading-platform-backend/db-migrate.sh
Executable file → Normal file
2
reading-platform-java/db-migrate.sh → lesingle-edu-reading-platform-backend/db-migrate.sh
Executable file → Normal file
@ -6,7 +6,7 @@ echo "==========================================="
|
|||||||
echo "开始执行数据库迁移..."
|
echo "开始执行数据库迁移..."
|
||||||
echo "==========================================="
|
echo "==========================================="
|
||||||
|
|
||||||
cd /Users/retirado/Program/ccProgram_0312/reading-platform-java
|
cd /Users/retirado/Program/ccProgram_0312/lesingle-edu-reading-platform-backend
|
||||||
|
|
||||||
# 创建临时迁移 Java 文件
|
# 创建临时迁移 Java 文件
|
||||||
cat > /tmp/DbMigrate.java << 'EOF'
|
cat > /tmp/DbMigrate.java << 'EOF'
|
||||||
0
reading-platform-java/db_migrate.py → lesingle-edu-reading-platform-backend/db_migrate.py
Executable file → Normal file
0
reading-platform-java/db_migrate.py → lesingle-edu-reading-platform-backend/db_migrate.py
Executable file → Normal file
@ -11,11 +11,11 @@
|
|||||||
<relativePath/>
|
<relativePath/>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<groupId>com.reading</groupId>
|
<groupId>com.lesingle.edu</groupId>
|
||||||
<artifactId>reading-platform</artifactId>
|
<artifactId>lesingle-edu-reading-platform-backend</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<name>reading-platform</name>
|
<name>lesingle-edu-reading-platform-backend</name>
|
||||||
<description>Reading Platform Backend Service</description>
|
<description>Reading Platform Backend Service</description>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform;
|
package com.lesingle.edu;
|
||||||
|
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
@ -8,7 +8,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||||||
* Reading Platform Application
|
* Reading Platform Application
|
||||||
*/
|
*/
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@MapperScan("com.reading.platform.mapper")
|
@MapperScan("com.lesingle.edu.mapper")
|
||||||
public class ReadingPlatformApplication {
|
public class ReadingPlatformApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.annotation;
|
package com.lesingle.edu.common.annotation;
|
||||||
|
|
||||||
import com.reading.platform.common.enums.LogModule;
|
import com.lesingle.edu.common.enums.LogModule;
|
||||||
import com.reading.platform.common.enums.LogOperationType;
|
import com.lesingle.edu.common.enums.LogOperationType;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.reading.platform.common.annotation;
|
package com.lesingle.edu.common.annotation;
|
||||||
|
|
||||||
import com.reading.platform.common.enums.UserRole;
|
import com.lesingle.edu.common.enums.UserRole;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
@ -1,12 +1,12 @@
|
|||||||
package com.reading.platform.common.aspect;
|
package com.lesingle.edu.common.aspect;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.filter.ValueFilter;
|
import com.alibaba.fastjson2.filter.ValueFilter;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import com.reading.platform.common.annotation.Log;
|
import com.lesingle.edu.common.annotation.Log;
|
||||||
import com.reading.platform.common.security.SecurityUtils;
|
import com.lesingle.edu.common.security.SecurityUtils;
|
||||||
import com.reading.platform.entity.OperationLog;
|
import com.lesingle.edu.entity.OperationLog;
|
||||||
import com.reading.platform.service.OperationLogService;
|
import com.lesingle.edu.service.OperationLogService;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
package com.lesingle.edu.common.aspect;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.aspectj.lang.annotation.Around;
|
||||||
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
|
import org.aspectj.lang.reflect.MethodSignature;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求日志切面
|
||||||
|
* 记录所有 Controller 层的请求信息
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Aspect
|
||||||
|
@Component
|
||||||
|
public class RequestLogAspect {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义切点:Controller 层所有方法
|
||||||
|
*/
|
||||||
|
@Pointcut("execution(* com.lesingle.edu.controller..*.*(..))")
|
||||||
|
public void controllerPointcut() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 环绕通知:记录请求日志
|
||||||
|
*/
|
||||||
|
@Around("controllerPointcut()")
|
||||||
|
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||||
|
// 获取请求信息
|
||||||
|
ServletRequestAttributes attributes =
|
||||||
|
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||||
|
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
|
||||||
|
|
||||||
|
// 获取方法签名
|
||||||
|
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||||
|
Method method = signature.getMethod();
|
||||||
|
|
||||||
|
// 记录请求开始
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
String requestURI = request.getRequestURI();
|
||||||
|
String methodType = request.getMethod();
|
||||||
|
String className = joinPoint.getTarget().getClass().getName();
|
||||||
|
String methodName = method.getName();
|
||||||
|
String params = JSON.toJSONString(getRequestParams(joinPoint));
|
||||||
|
|
||||||
|
log.info("===== 请求开始 =====");
|
||||||
|
log.info("接口地址:{} {}", methodType, requestURI);
|
||||||
|
log.info("请求方法:{}.{}", className, methodName);
|
||||||
|
log.info("请求参数:{}", params);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 执行目标方法
|
||||||
|
Object result = joinPoint.proceed();
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
long duration = endTime - startTime;
|
||||||
|
|
||||||
|
// 记录响应结果
|
||||||
|
log.info("响应时间:{}ms", duration);
|
||||||
|
log.info("响应结果:{}", JSON.toJSONString(result));
|
||||||
|
log.info("===== 请求结束 =====");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch (Throwable e) {
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
long duration = endTime - startTime;
|
||||||
|
|
||||||
|
// 记录异常信息
|
||||||
|
log.error("===== 请求异常 =====");
|
||||||
|
log.error("接口地址:{} {}", methodType, requestURI);
|
||||||
|
log.error("执行时间:{}ms", duration);
|
||||||
|
log.error("异常信息:{}", e.getMessage());
|
||||||
|
log.error("异常类型:{}", e.getClass().getName());
|
||||||
|
log.error("堆栈信息:", e);
|
||||||
|
log.error("===== 请求异常结束 =====");
|
||||||
|
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取请求参数
|
||||||
|
*/
|
||||||
|
private Object getRequestParams(ProceedingJoinPoint joinPoint) {
|
||||||
|
Object[] args = joinPoint.getArgs();
|
||||||
|
if (args.length == 0) {
|
||||||
|
return null;
|
||||||
|
} else if (args.length == 1) {
|
||||||
|
return args[0];
|
||||||
|
} else {
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,10 +1,10 @@
|
|||||||
package com.reading.platform.common.aspect;
|
package com.lesingle.edu.common.aspect;
|
||||||
|
|
||||||
import com.reading.platform.common.annotation.RequireRole;
|
import com.lesingle.edu.common.annotation.RequireRole;
|
||||||
import com.reading.platform.common.enums.ErrorCode;
|
import com.lesingle.edu.common.enums.ErrorCode;
|
||||||
import com.reading.platform.common.enums.UserRole;
|
import com.lesingle.edu.common.enums.UserRole;
|
||||||
import com.reading.platform.common.exception.BusinessException;
|
import com.lesingle.edu.common.exception.BusinessException;
|
||||||
import com.reading.platform.common.security.SecurityUtils;
|
import com.lesingle.edu.common.security.SecurityUtils;
|
||||||
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Around;
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
@ -23,7 +23,7 @@ import java.util.stream.Collectors;
|
|||||||
@Component
|
@Component
|
||||||
public class RoleAspect {
|
public class RoleAspect {
|
||||||
|
|
||||||
@Around("@annotation(com.reading.platform.common.annotation.RequireRole)")
|
@Around("@annotation(com.lesingle.edu.common.annotation.RequireRole)")
|
||||||
public Object checkRole(ProceedingJoinPoint joinPoint) throws Throwable {
|
public Object checkRole(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||||
Method method = signature.getMethod();
|
Method method = signature.getMethod();
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||||
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.ReportingPolicy;
|
import org.mapstruct.ReportingPolicy;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||||||
@ -71,8 +71,8 @@ public class MybatisPlusConfig implements MetaObjectHandler {
|
|||||||
if (authentication != null && authentication.getPrincipal() != null) {
|
if (authentication != null && authentication.getPrincipal() != null) {
|
||||||
Object principal = authentication.getPrincipal();
|
Object principal = authentication.getPrincipal();
|
||||||
// JwtPayload 类型(JWT 认证)
|
// JwtPayload 类型(JWT 认证)
|
||||||
if (principal instanceof com.reading.platform.common.security.JwtPayload) {
|
if (principal instanceof com.lesingle.edu.common.security.JwtPayload) {
|
||||||
return ((com.reading.platform.common.security.JwtPayload) principal).getUsername();
|
return ((com.lesingle.edu.common.security.JwtPayload) principal).getUsername();
|
||||||
}
|
}
|
||||||
// 字符串类型
|
// 字符串类型
|
||||||
if (principal instanceof String) {
|
if (principal instanceof String) {
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import io.swagger.v3.oas.models.Components;
|
import io.swagger.v3.oas.models.Components;
|
||||||
import io.swagger.v3.oas.models.OpenAPI;
|
import io.swagger.v3.oas.models.OpenAPI;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import com.reading.platform.common.util.OssUtils;
|
import com.lesingle.edu.common.util.OssUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.ApplicationArguments;
|
import org.springframework.boot.ApplicationArguments;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||||
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.reading.platform.common.config;
|
package com.lesingle.edu.common.config;
|
||||||
|
|
||||||
import com.reading.platform.common.security.JwtAuthenticationFilter;
|
import com.lesingle.edu.common.security.JwtAuthenticationFilter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.reading.platform.common.enums;
|
package com.lesingle.edu.common.enums;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.reading.platform.common.exception;
|
package com.lesingle.edu.common.exception;
|
||||||
|
|
||||||
import com.reading.platform.common.enums.ErrorCode;
|
import com.lesingle.edu.common.enums.ErrorCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.exception;
|
package com.lesingle.edu.common.exception;
|
||||||
|
|
||||||
import com.reading.platform.common.enums.ErrorCode;
|
import com.lesingle.edu.common.enums.ErrorCode;
|
||||||
import com.reading.platform.common.response.Result;
|
import com.lesingle.edu.common.response.Result;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.validation.ConstraintViolation;
|
import jakarta.validation.ConstraintViolation;
|
||||||
import jakarta.validation.ConstraintViolationException;
|
import jakarta.validation.ConstraintViolationException;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.AdminUserResponse;
|
import com.lesingle.edu.dto.response.AdminUserResponse;
|
||||||
import com.reading.platform.entity.AdminUser;
|
import com.lesingle.edu.entity.AdminUser;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.ClassResponse;
|
import com.lesingle.edu.dto.response.ClassResponse;
|
||||||
import com.reading.platform.entity.Clazz;
|
import com.lesingle.edu.entity.Clazz;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.ClassTeacherResponse;
|
import com.lesingle.edu.dto.response.ClassTeacherResponse;
|
||||||
import com.reading.platform.entity.ClassTeacher;
|
import com.lesingle.edu.entity.ClassTeacher;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CourseActivityResponse;
|
import com.lesingle.edu.dto.response.CourseActivityResponse;
|
||||||
import com.reading.platform.entity.CourseActivity;
|
import com.lesingle.edu.entity.CourseActivity;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CourseLessonResponse;
|
import com.lesingle.edu.dto.response.CourseLessonResponse;
|
||||||
import com.reading.platform.entity.CourseLesson;
|
import com.lesingle.edu.entity.CourseLesson;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CoursePackageCourseResponse;
|
import com.lesingle.edu.dto.response.CoursePackageCourseResponse;
|
||||||
import com.reading.platform.entity.CoursePackageCourse;
|
import com.lesingle.edu.entity.CoursePackageCourse;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CourseResponse;
|
import com.lesingle.edu.dto.response.CourseResponse;
|
||||||
import com.reading.platform.entity.CoursePackage;
|
import com.lesingle.edu.entity.CoursePackage;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
import org.mapstruct.Mapping;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
@ -20,8 +20,8 @@ public interface CoursePackageMapper {
|
|||||||
/**
|
/**
|
||||||
* Entity 转 Response
|
* Entity 转 Response
|
||||||
*/
|
*/
|
||||||
@Mapping(target = "gradeTags", expression = "java(com.reading.platform.common.util.JsonUtils.parseStringArray(entity.getGradeTags()))")
|
@Mapping(target = "gradeTags", expression = "java(com.lesingle.edu.common.util.JsonUtils.parseStringArray(entity.getGradeTags()))")
|
||||||
@Mapping(target = "domainTags", expression = "java(com.reading.platform.common.util.JsonUtils.parseStringArray(entity.getDomainTags()))")
|
@Mapping(target = "domainTags", expression = "java(com.lesingle.edu.common.util.JsonUtils.parseStringArray(entity.getDomainTags()))")
|
||||||
CourseResponse toVO(CoursePackage entity);
|
CourseResponse toVO(CoursePackage entity);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,7 +32,7 @@ public interface CoursePackageMapper {
|
|||||||
/**
|
/**
|
||||||
* Response 转 Entity(用于创建/更新时)
|
* Response 转 Entity(用于创建/更新时)
|
||||||
*/
|
*/
|
||||||
@Mapping(target = "gradeTags", expression = "java(vo.getGradeTags() != null ? com.reading.platform.common.util.JsonUtils.toJson(vo.getGradeTags()) : null)")
|
@Mapping(target = "gradeTags", expression = "java(vo.getGradeTags() != null ? com.lesingle.edu.common.util.JsonUtils.toJson(vo.getGradeTags()) : null)")
|
||||||
@Mapping(target = "domainTags", expression = "java(vo.getDomainTags() != null ? com.reading.platform.common.util.JsonUtils.toJson(vo.getDomainTags()) : null)")
|
@Mapping(target = "domainTags", expression = "java(vo.getDomainTags() != null ? com.lesingle.edu.common.util.JsonUtils.toJson(vo.getDomainTags()) : null)")
|
||||||
CoursePackage toEntity(CourseResponse vo);
|
CoursePackage toEntity(CourseResponse vo);
|
||||||
}
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CourseResourceResponse;
|
import com.lesingle.edu.dto.response.CourseResourceResponse;
|
||||||
import com.reading.platform.entity.CourseResource;
|
import com.lesingle.edu.entity.CourseResource;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CourseScriptResponse;
|
import com.lesingle.edu.dto.response.CourseScriptResponse;
|
||||||
import com.reading.platform.entity.CourseScript;
|
import com.lesingle.edu.entity.CourseScript;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CourseScriptPageResponse;
|
import com.lesingle.edu.dto.response.CourseScriptPageResponse;
|
||||||
import com.reading.platform.entity.CourseScriptPage;
|
import com.lesingle.edu.entity.CourseScriptPage;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.CourseVersionResponse;
|
import com.lesingle.edu.dto.response.CourseVersionResponse;
|
||||||
import com.reading.platform.entity.CourseVersion;
|
import com.lesingle.edu.entity.CourseVersion;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.GrowthRecordResponse;
|
import com.lesingle.edu.dto.response.GrowthRecordResponse;
|
||||||
import com.reading.platform.entity.GrowthRecord;
|
import com.lesingle.edu.entity.GrowthRecord;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
import org.mapstruct.Mapping;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
@ -19,7 +19,7 @@ public interface GrowthRecordMapper {
|
|||||||
/**
|
/**
|
||||||
* Entity 转 Response(images 从 JSON 字符串解析为 List)
|
* Entity 转 Response(images 从 JSON 字符串解析为 List)
|
||||||
*/
|
*/
|
||||||
@Mapping(target = "images", expression = "java(java.util.Arrays.asList(com.reading.platform.common.util.JsonUtils.parseStringArray(entity.getImages())))")
|
@Mapping(target = "images", expression = "java(java.util.Arrays.asList(com.lesingle.edu.common.util.JsonUtils.parseStringArray(entity.getImages())))")
|
||||||
GrowthRecordResponse toVO(GrowthRecord entity);
|
GrowthRecordResponse toVO(GrowthRecord entity);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,6 +30,6 @@ public interface GrowthRecordMapper {
|
|||||||
/**
|
/**
|
||||||
* Response 转 Entity(images 从 List 转为 JSON 字符串)
|
* Response 转 Entity(images 从 List 转为 JSON 字符串)
|
||||||
*/
|
*/
|
||||||
@Mapping(target = "images", expression = "java(vo.getImages() != null ? com.reading.platform.common.util.JsonUtils.toJson(vo.getImages()) : null)")
|
@Mapping(target = "images", expression = "java(vo.getImages() != null ? com.lesingle.edu.common.util.JsonUtils.toJson(vo.getImages()) : null)")
|
||||||
GrowthRecord toEntity(GrowthRecordResponse vo);
|
GrowthRecord toEntity(GrowthRecordResponse vo);
|
||||||
}
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.LessonFeedbackResponse;
|
import com.lesingle.edu.dto.response.LessonFeedbackResponse;
|
||||||
import com.reading.platform.entity.LessonFeedback;
|
import com.lesingle.edu.entity.LessonFeedback;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.LessonResponse;
|
import com.lesingle.edu.dto.response.LessonResponse;
|
||||||
import com.reading.platform.entity.Lesson;
|
import com.lesingle.edu.entity.Lesson;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.LessonStepResponse;
|
import com.lesingle.edu.dto.response.LessonStepResponse;
|
||||||
import com.reading.platform.entity.LessonStep;
|
import com.lesingle.edu.entity.LessonStep;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.LessonStepResourceResponse;
|
import com.lesingle.edu.dto.response.LessonStepResourceResponse;
|
||||||
import com.reading.platform.entity.LessonStepResource;
|
import com.lesingle.edu.entity.LessonStepResource;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.NotificationResponse;
|
import com.lesingle.edu.dto.response.NotificationResponse;
|
||||||
import com.reading.platform.entity.Notification;
|
import com.lesingle.edu.entity.Notification;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.OperationLogResponse;
|
import com.lesingle.edu.dto.response.OperationLogResponse;
|
||||||
import com.reading.platform.entity.OperationLog;
|
import com.lesingle.edu.entity.OperationLog;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.ParentResponse;
|
import com.lesingle.edu.dto.response.ParentResponse;
|
||||||
import com.reading.platform.entity.Parent;
|
import com.lesingle.edu.entity.Parent;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.ParentStudentResponse;
|
import com.lesingle.edu.dto.response.ParentStudentResponse;
|
||||||
import com.reading.platform.entity.ParentStudent;
|
import com.lesingle.edu.entity.ParentStudent;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.ResourceItemResponse;
|
import com.lesingle.edu.dto.response.ResourceItemResponse;
|
||||||
import com.reading.platform.entity.ResourceItem;
|
import com.lesingle.edu.entity.ResourceItem;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
import org.mapstruct.Mapping;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.ResourceLibraryResponse;
|
import com.lesingle.edu.dto.response.ResourceLibraryResponse;
|
||||||
import com.reading.platform.entity.ResourceLibrary;
|
import com.lesingle.edu.entity.ResourceLibrary;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.SchedulePlanResponse;
|
import com.lesingle.edu.dto.response.SchedulePlanResponse;
|
||||||
import com.reading.platform.entity.SchedulePlan;
|
import com.lesingle.edu.entity.SchedulePlan;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.StudentClassHistoryResponse;
|
import com.lesingle.edu.dto.response.StudentClassHistoryResponse;
|
||||||
import com.reading.platform.entity.StudentClassHistory;
|
import com.lesingle.edu.entity.StudentClassHistory;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.StudentResponse;
|
import com.lesingle.edu.dto.response.StudentResponse;
|
||||||
import com.reading.platform.entity.Student;
|
import com.lesingle.edu.entity.Student;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.StudentRecordResponse;
|
import com.lesingle.edu.dto.response.StudentRecordResponse;
|
||||||
import com.reading.platform.entity.StudentRecord;
|
import com.lesingle.edu.entity.StudentRecord;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.SystemSettingResponse;
|
import com.lesingle.edu.dto.response.SystemSettingResponse;
|
||||||
import com.reading.platform.entity.SystemSetting;
|
import com.lesingle.edu.entity.SystemSetting;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TagResponse;
|
import com.lesingle.edu.dto.response.TagResponse;
|
||||||
import com.reading.platform.entity.Tag;
|
import com.lesingle.edu.entity.Tag;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TaskCompletionResponse;
|
import com.lesingle.edu.dto.response.TaskCompletionResponse;
|
||||||
import com.reading.platform.entity.TaskCompletion;
|
import com.lesingle.edu.entity.TaskCompletion;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TaskResponse;
|
import com.lesingle.edu.dto.response.TaskResponse;
|
||||||
import com.reading.platform.entity.Task;
|
import com.lesingle.edu.entity.Task;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TaskTargetResponse;
|
import com.lesingle.edu.dto.response.TaskTargetResponse;
|
||||||
import com.reading.platform.entity.TaskTarget;
|
import com.lesingle.edu.entity.TaskTarget;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TaskTemplateResponse;
|
import com.lesingle.edu.dto.response.TaskTemplateResponse;
|
||||||
import com.reading.platform.entity.TaskTemplate;
|
import com.lesingle.edu.entity.TaskTemplate;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TeacherResponse;
|
import com.lesingle.edu.dto.response.TeacherResponse;
|
||||||
import com.reading.platform.entity.Teacher;
|
import com.lesingle.edu.entity.Teacher;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TenantCourseResponse;
|
import com.lesingle.edu.dto.response.TenantCourseResponse;
|
||||||
import com.reading.platform.entity.TenantCourse;
|
import com.lesingle.edu.entity.TenantCourse;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.reading.platform.common.mapper;
|
package com.lesingle.edu.common.mapper;
|
||||||
|
|
||||||
import com.reading.platform.dto.response.TenantResponse;
|
import com.lesingle.edu.dto.response.TenantResponse;
|
||||||
import com.reading.platform.entity.Tenant;
|
import com.lesingle.edu.entity.Tenant;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user