kindergarten_java/docs/dev-logs/2026-03-24.md
En c935988188 feat(登录安全): 实现 RSA 密码加密传输
后端:
- 新增 RsaEncryptionUtil 工具类,支持 RSA 2048 位加解密
- 新增 RsaKeyRotationTask 定时任务,每月 1 日凌晨 2 点自动更换密钥
- 新增 EncryptedLoginRequest 和 PublicKeyResponse DTO
- AuthController 添加 /public-key 和 /login/encrypted 接口

前端:
- 添加 jsencrypt 依赖用于 RSA 加密
- 新增 encryption.ts 工具函数
- auth.ts 添加 getPublicKey 和 loginEncrypted API
- user.ts 修改 login 函数使用 RSA 加密流程

feat(操作日志): 添加请求参数和请求接口字段

- 数据库迁移 V50 添加 request_uri 字段
- LogAspect 记录请求 URI
- OperationLogResponse 新增 requestParams 和 requestUri 字段
- 前端 OperationLogView 详情弹窗展示新字段

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 18:06:19 +08:00

4.5 KiB
Raw Blame History

开发日志 - 2026-03-24

工作内容

租户管理详情页字段补充

背景

超管端租户管理查看详情时,前端页面期望展示以下数据:

  1. 使用统计:教师数、学生数、班级数授课数
  2. 最近教师列表(姓名、手机号、状态)
  3. 最近学生列表(姓名、性别、阅读数)
  4. 最近班级列表(名称、年级、学生数)

修改内容

1. 后端 DTO 扩展 (TenantResponse.java)

  • 新增 classCount 字段 - 班级数量
  • 新增 lessonCount 字段 - 授课数量
  • 新增 teachers 字段 - 最近教师列表(TeacherItem 内部类)
  • 新增 students 字段 - 最近学生列表(StudentItem 内部类)
  • 新增 classes 字段 - 最近班级列表(ClassItem 内部类)

2. 后端 Service 层修改 (TenantServiceImpl.java)

  • 新增 getTenantDetail() 方法 - 返回完整的租户详情响应
  • 新增 buildTenantResponse() 方法 - 构建包含统计信息和列表的响应数据
  • 新增 Mapper 依赖注入:
    • ClazzMapper - 班级数据访问
    • StudentRecordMapper - 学生阅读记录访问
    • StudentClassHistoryMapper - 学生班级关联访问

3. 后端 Controller 层修改 (AdminTenantController.java)

  • 修改 getTenant() 方法调用 tenantService.getTenantDetail(id) 返回完整详情

4. 前端类型定义更新 (admin.ts)

  • 扩展 TenantDetail 接口:
    • 添加 classCountlessonCount 字段
    • students[].classId 改为可选字段(因为学生班级关联是可选的)

5. 前端详情组件更新 (TenantListView.vue)

  • 修改统计数据显示使用 detailData.classCountdetailData.lessonCount

技术细节

  1. 学生班级 ID 获取:由于学生实体没有直接的 classId 字段,通过 student_class_history 关联表查询学生当前所在的班级 ID。

  2. 班级学生数统计:通过 student_class_history 表查询每个班级的 ACTIVE 状态学生数量。

  3. 学生阅读次数统计:通过 student_record 表统计每个学生的记录数。

  4. 教师授课次数统计:通过 schedule_plan 表统计每个教师的排课数量。

验证步骤

  1. 后端编译成功
  2. 启动服务测试(待用户验证)

文件清单

文件 修改内容
TenantResponse.java 新增字段和内部类
TenantServiceImpl.java 新增方法和 Mapper 依赖
AdminTenantController.java 修改详情查询方法
admin.ts 扩展类型定义
TenantListView.vue 更新详情展示

工作内容 - 学校端操作日志请求参数与接口展示

背景

在学校端操作日志页面,需要记录并返回以下三个信息:

  1. 操作人 - 谁执行的操作(已有 userIduserRole
  2. 请求参数 - 操作时传入的参数(requestParams
  3. 请求接口 - 执行的具体 API 接口路径(requestUri

当前后端已通过 LogAspect 自动记录这些信息到数据库,但未返回给前端展示。

修改内容

1. 数据库迁移

文件: V50__add_request_uri_to_operation_log.sql

  • 添加 request_uri 字段 - VARCHAR(500),记录请求接口路径

2. 后端实体修改

文件: OperationLog.java

  • 新增 requestUri 字段

3. 后端切面修改

文件: LogAspect.java

  • before() 方法中记录 requestURI

4. 后端 Response DTO 修改

文件: OperationLogResponse.java

  • 新增 requestParams 字段 - 请求参数 JSON
  • 新增 requestUri 字段 - 请求接口路径

5. 后端 Controller 修改

文件: SchoolOperationLogController.java

  • convertToResponse() 方法中添加字段映射

6. 前端类型定义更新

文件: school.ts

  • OperationLog 接口添加 requestParamsrequestUri 字段

7. 前端页面修改

文件: OperationLogView.vue

  • 详情弹窗新增"请求接口"展示项
  • 详情弹窗新增"请求参数"展示项JSON 格式化)

验证步骤

  1. 后端编译成功
  2. 数据库迁移待执行
  3. 启动服务测试

文件清单

文件 修改内容
V50__add_request_uri_to_operation_log.sql 新增数据库迁移
OperationLog.java 新增 requestUri 字段
LogAspect.java 记录 requestURI
OperationLogResponse.java 新增返回字段
SchoolOperationLogController.java 字段映射
school.ts 类型定义更新
OperationLogView.vue 详情展示新增字段