kindergarten_java/docs/API 类型对比报告.md
En e501e17403 feat: 完善学校统计报告、资源服务及实体类字段
主要变更:
1. 新增学校报告服务 (SchoolReportService)
   - 学校概览统计 (getOverviewStats)
   - 教师统计报表 (getTeacherStats)
   - 课程统计报表 (getCourseStats)
   - 学生统计报表 (getStudentStats)
   - 课时趋势分析 (getLessonTrend)

2. 新增学校端 Controller
   - SchoolReportController: 学校统计报告接口
   - SchoolResourceController: 学校资源管理接口
   - SchoolFeedbackController: 学校反馈管理接口

3. 完善实体类字段
   - CourseLesson: 添加 lessonOrder 字段
   - ResourceItem: 添加 tenantId、type 字段
   - Task: 添加 name 字段
   - LessonFeedback: 添加 courseId、tenantId、overallRating 字段

4. 完善服务层实现
   - ResourceServiceImpl: 实现资源库和资源项管理方法
   - SchoolReportServiceImpl: 实现学校统计报表逻辑
   - TeacherDashboardServiceImpl: 修复时间类型转换
   - AdminStatsServiceImpl: 完善统计逻辑

5. 新增 Flyway 迁移脚本 (V2)
   - 添加 ORM 实体类缺失字段的数据库迁移

6. 修复路由冲突
   - 移除 AdminCourseController 中重复的 getCourseLessons 方法

7. 添加测试工具类
   - CheckDatabase, CheckClazzTable: 数据库检查工具
   - InitDatabase, InitClasses: 数据初始化工具
   - GeneratePasswordHash: 密码哈希生成工具

8. 配置 Maven Wrapper
   - 添加 maven-wrapper.properties 和 mvnw.cmd
   - 确保使用 Java 17 编译
2026-03-11 16:21:22 +08:00

134 lines
4.6 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.

# API 类型对比报告
生成日期2026-03-11
## 测试概述
### 1. API 生成测试 ✅
- **orval 版本**: v7.13.2
- **生成状态**: 成功
- **输出文件**: `src/api/generated/api.ts` + `src/api/generated/model/*.ts`
- **警告**: 未找到全局安装的 prettier不影响功能
### 2. 后端 API 导出测试 ⚠️
- **后端地址**: http://8.148.151.56:3002
- **测试结果**: 无法连接(服务器可能关闭)
- **本地规范**: `api-spec.yml` (408KB, 155 个接口)
### 3. TypeScript 编译检查 ⚠️
- **错误数量**: 88 个
- **主要问题**:
- 未使用的变量 (TS6133): 约 50 个
- 类型不匹配 (TS2322/TS2345): 约 20 个
- 类型定义缺失 (TS2304/TS2724): 约 10 个
- 其他类型错误:约 8 个
## 类型定义对比
### ChildInfo (家长端 - 孩子信息)
| 字段 | 手写类型 | 生成类型 | 后端定义 | 状态 |
|------|---------|---------|---------|------|
| id | `number` | `string` | `String` | ❌ 不一致 |
| name | `string` | `string` | `String` | ✅ |
| gender | `string` | `string` | `String` | ✅ |
| birthDate | `string` | `string` | `String` | ✅ |
| relationship | `string` (必填) | `string` (可选) | `String` | ⚠️ 可选性 |
| class | `{id, name, grade}` | `ClassInfo` | `ClassInfo` | ⚠️ 字段名 |
| readingCount | `number` (必填) | `number` (可选) | `Integer` | ⚠️ 可选性 |
| lessonCount | `number` (必填) | `number` (可选) | `Integer` | ⚠️ 可选性 |
**修复建议**:
```typescript
// 修改 src/api/parent.ts
export interface ChildInfo {
id: string; // 改为 string
name: string;
gender?: string;
birthDate?: string;
relationship?: string; // 改为可选
classInfo?: { // 改为 classInfo
id: string; // 改为 string
name: string;
grade: string;
};
readingCount?: number; // 改为可选
lessonCount?: number; // 改为可选
}
```
### Task (任务)
| 字段 | 手写类型 | 生成类型 | 后端定义 | 状态 |
|------|---------|---------|---------|------|
| id | `number` | `number` | `Long` | ✅ |
| title | `string` | `string` | `String` | ✅ |
| description | `string` | `string` | `String` | ✅ |
| taskType | `'READING' | 'ACTIVITY' | 'HOMEWORK'` | `string` | `String` | ⚠️ 生成类型缺少枚举约束 |
| status | `string` | `string` | `String` | ✅ |
### Teacher (教师)
| 字段 | 手写类型 | 生成类型 | 后端定义 | 状态 |
|------|---------|---------|---------|------|
| id | `number` | `number` | `Long` | ✅ |
| name | `string` | `string` | `String` | ✅ |
| phone | `string` | `string` | `String` | ✅ |
| loginAccount | `string` | - | - | ⚠️ 手写特有 |
| status | `string` | `string` | `String` | ✅ |
| classIds | `number[]` | - | - | ⚠️ 手写特有 |
| classNames | `string` | - | - | ⚠️ 手写特有 |
**说明**: 手写类型包含前端额外需要的字段(来自多个接口的组合)
## 主要问题总结
### 1. ID 类型不一致
- 后端部分 Entity 使用 `String` 类型作为 ID如 ChildInfoResponse
- 前端手写类型使用 `number`
- **影响**: 可能导致类型校验失败或运行时错误
### 2. 字段命名不一致
- 后端使用 `classInfo`,前端使用 `class`
- **影响**: 前端代码访问 `child.class` 会返回 undefined
### 3. 必填/可选不一致
- 后端所有字段都是可选的Java 对象默认)
- 前端手写类型部分字段为必填
- **影响**: 可能导致不必要的类型检查错误
### 4. 类型定义分散
- 同一个实体在不同接口有不同 Response 类型
- 例如 `Teacher``TeacherInfoResponse`, `Teacher`, `PageResultTeacher`
- **影响**: 前端需要维护多个类型定义
## 修复优先级
### 高优先级 (影响功能)
1.`ChildInfo.id` 类型错误 (number → string)
2.`ChildInfo.class` 字段名错误 (class → classInfo)
3.`Tenant.id` 类型检查
### 中优先级 (类型安全)
1. ⚠️ 统一 ID 类型为 string 或 number
2. ⚠️ 添加枚举类型约束(如 TaskType, UserRole
3. ⚠️ 更新可选字段标记
### 低优先级 (代码质量)
1. 📝 清理未使用的变量
2. 📝 修复 ESLint 警告
3. 📝 统一类型命名规范
## 测试结论
1. **orval 生成工作正常**,可以用于生成类型参考
2. **手写 API 类型需要更新**以匹配后端实际返回
3. **建议建立类型同步流程**
- 后端变更 → 更新 api-spec.yml → 重新生成 → 对比修复手写类型
## 下一步行动
1. 修复 `src/api/parent.ts` 中的 `ChildInfo` 类型
2. 检查其他 Response 类型的字段一致性
3. 添加运行时类型转换层(可选)