kindergarten_java/docs/dev-logs/2026-03-13.md
En 6e11c874d2 chore: 忽略 target 目录和 .class 文件
- 添加 target/ 到 .gitignore
- 从 git 暂存区移除已追踪的 target 目录

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:50:54 +08:00

258 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开发日志 - 2026-03-13
**开发者**: Claude
**日期**: 2026-03-13
---
## 今日工作内容
### 1. 学校端 API 调试与修复
#### 问题发现
- 学校端大部分 API 返回 500 错误
- 用户登录失败(密码哈希不匹配)
- 缺少统计 API 和课程 API
#### 修复过程
**1. 密码问题修复**
- 发现数据库中的密码哈希与测试密码 `123456` 不匹配
- 创建 `reset_passwords.py` 脚本,使用 BCrypt 生成新哈希
- 更新所有用户表admin_users, tenants, teachers, parents的密码
**2. 创建 School Stats API**
- 创建 `SchoolStatsController.java`
- 实现以下接口:
- `/api/school/stats` - 基础统计
- `/api/school/stats/teachers` - 活跃教师排行
- `/api/school/stats/courses` - 课程使用统计
- `/api/school/stats/activities` - 近期活动
- `/api/school/stats/lesson-trend` - 授课趋势
- `/api/school/stats/course-distribution` - 课程分布
**3. 创建 School Course API**
- 创建 `SchoolCourseController.java`
- 实现以下接口:
- `/api/school/courses` - 课程列表
- `/api/school/courses/{id}` - 课程详情
**4. 修复 API 响应格式不匹配**
- 后端返回:`{list, total, pageNum, pageSize, pages}`
- 前端期望:`{items, total, page, pageSize}`
- 更新 `src/api/school.ts` 的类型定义
- 批量更新所有视图文件:`result.items` → `result.list`
**5. 修复 SchoolPackageController 路径**
-`/api/v1/school/packages` 改为 `/api/school/packages`
---
## 测试结果
### 学校端功能测试
- ✅ 登录功能正常
- ✅ Dashboard 加载正常,统计 API 响应正常
- ✅ 教师管理页面加载正常
- ✅ 学生管理页面加载正常
- ✅ 班级管理页面加载正常
- ✅ 课程管理页面加载正常
### API 状态汇总
| API | 状态 |
|-----|------|
| `/api/auth/login` | ✅ |
| `/api/school/stats` | ✅ |
| `/api/school/teachers` | ✅ |
| `/api/school/students` | ✅ |
| `/api/school/classes` | ✅ |
| `/api/school/parents` | ✅ |
| `/api/school/tasks` | ✅ |
| `/api/school/courses` | ✅ |
| `/api/school/growth-records` | ✅ |
| `/api/school/packages` | ✅ |
---
## 新增文件
### 后端
- `SchoolStatsController.java` - 统计数据控制器
- `SchoolCourseController.java` - 课程管理控制器
### 脚本
- `reset_passwords.py` - 密码重置脚本
- `test_db_query.py` - 数据库查询测试脚本
- `verify_password.py` - 密码哈希验证脚本
### 文档
- `/docs/test-logs/school/2026-03-13.md` - 学校端测试记录
- `/docs/dev-logs/2026-03-13.md` - 今日开发日志
---
## 技术要点
### BCrypt 密码哈希
```python
import bcrypt
# 生成哈希
salt = bcrypt.gensalt(rounds=10)
password_hash = bcrypt.hashpw(password.encode('utf-8'), salt)
# 验证密码
bcrypt.checkpw(password.encode('utf-8'), hash_bytes)
```
### MyBatis-Plus 分页查询
```java
Page<Clazz> page = classService.getClassPage(tenantId, pageNum, pageSize, keyword, grade, status);
return Result.success(PageResult.of(page));
```
---
## 待完成工作
1. 测试教师/学生添加功能
2. 测试班级创建功能
3. 测试任务创建功能
4. 测试家长管理功能
5. 完善统计数据计算逻辑
---
### 2. 教师端 API 调试与修复
#### 问题发现
- 前端 API 导入错误:`getApi` 函数不存在(应为 `getReadingPlatformAPI`
- 教师端 Dashboard API 返回 500 错误
- 缺少教师端统计相关的 API 端点
#### 修复过程
**1. 修复 API 客户端导入**
- 更新 `src/api/client.ts``getApi` → `getReadingPlatformAPI`
- 更新 `src/api/teacher.ts`:修正导入函数名
- 更新 `src/api/school-course.ts`:批量修正导入
**2. 创建 Teacher Stats API**
- 创建 `TeacherStatsController.java`
- 实现以下接口:
- `/api/teacher/dashboard` - 教师端首页统计
- `/api/teacher/today-lessons` - 今日课程
- `/api/teacher/recommended-courses` - 推荐课程
- `/api/teacher/weekly-stats` - 本周统计
- `/api/teacher/lesson-trend` - 授课趋势
- `/api/teacher/course-usage` - 课程使用统计
- 使用 try-catch 处理缺失的 `lessons` 表(远程数据库未同步)
**3. 更新前端 API 调用**
- 修正 `teacher.ts` 中的方法名:
- `api.teacherCourseControllerGetDashboard()``api.getDashboard()`
- `api.teacherCourseControllerGetTodayLessons()``api.getTodayLessons()`
- `api.teacherCourseControllerGetRecommendedCourses()``api.getRecommendedCourses()`
- `api.teacherCourseControllerGetWeeklyStats()``api.getWeeklyStats()`
- `api.teacherCourseControllerGetLessonTrend()``api.getLessonTrend()`
- `api.teacherCourseControllerGetCourseUsage()``api.getCourseUsage()`
- 移除未使用的类型导入 `TeacherCourseControllerGetLessonTrendParams`
**4. 添加教师班级端点**
-`TeacherCourseController.java` 中添加 `/api/teacher/classes` 端点
---
## 测试结果
### 教师端功能测试(晚间)
- ✅ 登录功能正常
- ✅ Dashboard 加载成功,显示 25 个统计卡片
- ✅ Dashboard API 调用成功(不再返回 500 错误)
- ✅ 今日课程、推荐课程、本周统计 API 正常响应
- ✅ 授课趋势、课程使用统计 API 正常响应
- ⚠️ 班级管理页面需要进一步测试classes 端点已添加)
### API 状态汇总(新增)
| API | 状态 |
|-----|------|
| `/api/teacher/dashboard` | ✅ |
| `/api/teacher/today-lessons` | ✅ |
| `/api/teacher/recommended-courses` | ✅ |
| `/api/teacher/weekly-stats` | ✅ |
| `/api/teacher/lesson-trend` | ✅ |
| `/api/teacher/course-usage` | ✅ |
| `/api/teacher/classes` | ⚠️ 已添加,待测试 |
---
## 新增文件
### 后端
- `TeacherStatsController.java` - 教师端统计数据控制器
- 修改 `TeacherCourseController.java` - 添加班级端点
### 脚本
- `create_lessons_table.py` - 创建缺失数据库表的脚本(未执行,远程数据库访问受限)
---
## 备注
- Java 后端运行在 port 8080
- 前端 Vite 运行在 port 5173
- 远程数据库8.148.151.56:3306/reading_platform
- 远程数据库缺少 `lessons` 表,已使用 try-catch 优雅处理
---
### 3. 课程包三端全链路测试与修复
#### 测试目标
围绕课程包业务,从超管端创建到学校端查看、教师端备课的完整链路测试。
#### Bug 修复记录
**Bug 1: 登录 API 路径错误**
- 测试脚本使用 `/api/v1/auth/login`,实际是 `/api/auth/login`
**Bug 2: 角色名称大小写错误**
- 测试脚本使用 `"role": "ADMIN"`,枚举要求小写 `"admin"`
**Bug 3: 测试账号密码错误**
- 测试脚本使用 `123456`,数据库是 `123456`
**Bug 4: 套餐提交审核必须包含课程**
- 提交审核时报错 "套餐必须包含至少一个课程包"
- 修复:先创建课程,再添加到套餐
**Bug 5: 学校端 API 路径错误**
- 测试脚本使用 `/api/v1/school/packages`,实际是 `/api/school/packages`
**Bug 6: 教师端无法看到系统课程**
- `getCoursePage``getCoursesByTenantId` 只查租户课程
- 修复:同时查询租户课程和系统课程 (`isSystem = 1`)
**Bug 7: 创建系统课程未设置 isSystem 标志**
- `AdminCourseController.createCourse` 设置了但未保存
- 修复:添加 `courseMapper.updateById(course)`
**Bug 8: 课程需要发布才能被教师端看到**
- 教师端查询 `status = 'published'`
- 修复:创建后调用发布接口
#### 新增功能
- 新增套餐授权接口:`POST /api/v1/admin/packages/{id}/grant`
- 请求参数tenantId, endDate, pricePaid
#### 测试结果
- ✅ 超管端:登录、创建/发布课程、创建套餐、添加课程、提交审核、审核通过、发布套餐、授权给租户
- ✅ 学校端:登录、查看授权套餐
- ✅ 教师端:登录、查看可用课程
#### 测试脚本
- `test_package_full_api.py` - 完整套餐 API 测试
- `test_three_ends.py` - 三端全链路测试
- `/docs/test-logs/package/2026-03-13-full-flow.md` - 详细测试记录