From 97fec4f450d80f6e2d5826fc0144d1ba5e6104d9 Mon Sep 17 00:00:00 2001 From: En Date: Wed, 11 Mar 2026 17:57:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=AE=E9=80=9A=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/旧后端接口完整清单.md | 123 ++++++++++-------- .../admin/AdminResourceController.java | 14 ++ .../platform/service/ResourceService.java | 7 +- .../service/impl/ResourceServiceImpl.java | 26 ++++ .../src/main/resources/application-dev.yml | 7 +- .../V2__add_missing_entity_fields.sql | 55 -------- .../resources/db/schema/database_schema.sql | 18 ++- 7 files changed, 132 insertions(+), 118 deletions(-) delete mode 100644 reading-platform-java/src/main/resources/db/migration/V2__add_missing_entity_fields.sql diff --git a/docs/旧后端接口完整清单.md b/docs/旧后端接口完整清单.md index 215c661..e6bf0f1 100644 --- a/docs/旧后端接口完整清单.md +++ b/docs/旧后端接口完整清单.md @@ -121,7 +121,7 @@ | `/school/tasks/:id` | PUT | 更新任务 | ✅ | | `/school/tasks/:id` | DELETE | 删除任务 | ✅ | | `/school/tasks/:taskId/completions/:studentId` | PUT | 更新任务完成状态 | ✅ | -| `/school/tasks/:id/remind` | POST | 发送提醒 | ❌ 缺失 | +| `/school/tasks/:id/remind` | POST | 发送提醒 | ✅ /api/v1/school/tasks/:id/remind | ### 任务模板 @@ -145,10 +145,10 @@ | `/school/stats/courses` | GET | 课程使用统计 | ✅ | | `/school/stats/course-distribution` | GET | 课程分布 | ✅ | | `/school/stats/activities` | GET | 最近活动 | ✅ | -| `/school/reports/overview` | GET | 总览报告 | ❌ 缺失 | -| `/school/reports/teachers` | GET | 教师报告 | ❌ 缺失 | -| `/school/reports/courses` | GET | 课程报告 | ❌ 缺失 | -| `/school/reports/students` | GET | 学生报告 | ❌ 缺失 | +| `/school/reports/overview` | GET | 总览报告 | ✅ /api/v1/school/reports/overview | +| `/school/reports/teachers` | GET | 教师报告 | ✅ /api/v1/school/reports/teachers | +| `/school/reports/courses` | GET | 课程报告 | ✅ /api/v1/school/reports/courses | +| `/school/reports/students` | GET | 学生报告 | ✅ /api/v1/school/reports/students | ### 通知管理 @@ -165,7 +165,7 @@ | 路径 | 方法 | 功能 | 新后端状态 | |------|------|------|----------| | `/school/operation-logs` | GET | 操作日志列表 | ✅ | -| `/school/operation-logs/stats` | GET | 日志统计 | ❌ 缺失 | +| `/school/operation-logs/stats` | GET | 日志统计 | ✅ /api/v1/school/operation-logs/stats | ### 导出功能 @@ -214,9 +214,9 @@ | `/teacher/dashboard` | GET | 仪表盘概览 | ✅ | | `/teacher/dashboard/today` | GET | 今日课表 | ✅ | | `/teacher/dashboard/weekly` | GET | 周统计 | ✅ | -| `/teacher/dashboard/recommend` | GET | 推荐课程 | ❌ 缺失 | -| `/teacher/dashboard/lesson-trend` | GET | 课时趋势 | ❌ 缺失 | -| `/teacher/dashboard/course-usage` | GET | 课程使用情况 | ❌ 缺失 | +| `/teacher/dashboard/recommend` | GET | 推荐课程 | ✅ /api/v1/teacher/dashboard/recommend | +| `/teacher/dashboard/lesson-trend` | GET | 课时趋势 | ✅ /api/v1/teacher/dashboard/lesson-trend | +| `/teacher/dashboard/course-usage` | GET | 课程使用情况 | ✅ /api/v1/teacher/dashboard/course-usage | ### 课程管理 @@ -258,8 +258,8 @@ | `/teacher/tasks/stats/by-type` | GET | 按类型统计 | ✅ | | `/teacher/tasks/stats/by-class` | GET | 按班级统计 | ✅ | | `/teacher/tasks/stats/monthly` | GET | 月度统计 | ✅ | -| `/teacher/tasks/upcoming` | GET | 即将到期任务 | ❌ 缺失 | -| `/teacher/tasks/:id/remind` | POST | 发送提醒 | ❌ 缺失 | +| `/teacher/tasks/upcoming` | GET | 即将到期任务 | ✅ /api/v1/teacher/tasks/upcoming | +| `/teacher/tasks/:id/remind` | POST | 发送提醒 | ✅ /api/v1/teacher/tasks/:id/remind | | `/teacher/tasks/from-template` | POST | 从模板创建任务 | ✅ | ### 任务模板 @@ -300,8 +300,8 @@ | 路径 | 方法 | 功能 | 新后端状态 | |------|------|------|----------| -| `/teacher/feedbacks` | GET | 反馈列表 | ❌ 缺失 | -| `/teacher/feedbacks/stats` | GET | 反馈统计 | ❌ 缺失 | +| `/teacher/feedbacks` | GET | 反馈列表 | ✅ /api/v1/teacher/feedbacks | +| `/teacher/feedbacks/stats` | GET | 反馈统计 | ✅ /api/v1/teacher/feedbacks/stats | ### 校本课程 @@ -382,7 +382,7 @@ | `/admin/courses/:id/unpublish` | POST | 取消发布 | ✅ | | `/admin/courses/:id/republish` | POST | 重新发布 | ✅ | | `/admin/courses/:id/archive` | POST | 归档 | ✅ | -| `/admin/courses/:courseId/lessons` | GET | 课程课时列表 | ❌ 缺失 | +| `/admin/courses/:courseId/lessons` | GET | 课程课时列表 | ✅ /api/v1/admin/courses/:courseId/lessons | ### 课程包管理 @@ -428,14 +428,14 @@ | `/admin/stats/tenants/active` | GET | 活跃租户 | ✅ | | `/admin/stats/courses/popular` | GET | 热门课程 | ✅ | | `/admin/stats/activities` | GET | 最近活动 | ✅ | -| `/admin/stats/lesson-trend` | GET | 课时趋势 | ❌ 缺失 | +| `/admin/stats/lesson-trend` | GET | 课时趋势 | ✅ /api/v1/admin/stats/lesson-trend | ### 操作日志 | 路径 | 方法 | 功能 | 新后端状态 | |------|------|------|----------| | `/admin/operation-logs` | GET | 操作日志列表 | ✅ | -| `/admin/operation-logs/stats` | GET | 日志统计 | ❌ 缺失 | +| `/admin/operation-logs/stats` | GET | 日志统计 | ✅ /api/v1/admin/operation-logs/stats | --- @@ -450,57 +450,70 @@ ## 缺失接口汇总 -### 高优先级 (前端可能使用) +**更新说明 (2026-03-11)**: 经过代码审查确认,所有旧后端接口均已在新后端实现! -| 接口路径 | 方法 | 功能 | 所属模块 | -|---------|------|------|---------| -| `/school/tasks/:id/remind` | POST | 发送提醒 | 学校任务 | -| `/teacher/tasks/upcoming` | GET | 即将到期任务 | 教师任务 | -| `/teacher/tasks/:id/remind` | POST | 发送提醒 | 教师任务 | -| `/teacher/dashboard/recommend` | GET | 推荐课程 | 教师仪表板 | -| `/teacher/dashboard/lesson-trend` | GET | 课时趋势 | 教师仪表板 | -| `/teacher/dashboard/course-usage` | GET | 课程使用情况 | 教师仪表板 | +### 已全部实现的接口 -### 中优先级 (报告/统计) +#### 高优先级 (前端使用) -| 接口路径 | 方法 | 功能 | 所属模块 | -|---------|------|------|---------| -| `/school/reports/overview` | GET | 总览报告 | 学校报告 | -| `/school/reports/teachers` | GET | 教师报告 | 学校报告 | -| `/school/reports/courses` | GET | 课程报告 | 学校报告 | -| `/school/reports/students` | GET | 学生报告 | 学校报告 | -| `/school/operation-logs/stats` | GET | 日志统计 | 学校日志 | -| `/admin/operation-logs/stats` | GET | 日志统计 | 管理员日志 | -| `/admin/stats/lesson-trend` | GET | 课时趋势 | 管理员统计 | -| `/admin/courses/:courseId/lessons` | GET | 课程课时列表 | 管理员课程 | +| 接口路径 | 方法 | 功能 | 新后端路径 | 所属模块 | +|---------|------|------|-----------|---------| +| `/school/tasks/:id/remind` | POST | 发送提醒 | ✅ /api/v1/school/tasks/:id/remind | 学校任务 | +| `/teacher/tasks/upcoming` | GET | 即将到期任务 | ✅ /api/v1/teacher/tasks/upcoming | 教师任务 | +| `/teacher/tasks/:id/remind` | POST | 发送提醒 | ✅ /api/v1/teacher/tasks/:id/remind | 教师任务 | +| `/teacher/dashboard/recommend` | GET | 推荐课程 | ✅ /api/v1/teacher/dashboard/recommend | 教师仪表板 | +| `/teacher/dashboard/lesson-trend` | GET | 课时趋势 | ✅ /api/v1/teacher/dashboard/lesson-trend | 教师仪表板 | +| `/teacher/dashboard/course-usage` | GET | 课程使用情况 | ✅ /api/v1/teacher/dashboard/course-usage | 教师仪表板 | + +#### 中优先级 (报告/统计) + +| 接口路径 | 方法 | 功能 | 新后端路径 | 所属模块 | +|---------|------|------|-----------|---------| +| `/school/reports/overview` | GET | 总览报告 | ✅ /api/v1/school/reports/overview | 学校报告 | +| `/school/reports/teachers` | GET | 教师报告 | ✅ /api/v1/school/reports/teachers | 学校报告 | +| `/school/reports/courses` | GET | 课程报告 | ✅ /api/v1/school/reports/courses | 学校报告 | +| `/school/reports/students` | GET | 学生报告 | ✅ /api/v1/school/reports/students | 学校报告 | +| `/school/operation-logs/stats` | GET | 日志统计 | ✅ /api/v1/school/operation-logs/stats | 学校日志 | +| `/admin/operation-logs/stats` | GET | 日志统计 | ✅ /api/v1/admin/operation-logs/stats | 管理员日志 | +| `/admin/stats/lesson-trend` | GET | 课时趋势 | ✅ /api/v1/admin/stats/lesson-trend | 管理员统计 | +| `/admin/courses/:courseId/lessons` | GET | 课程课时列表 | ✅ /api/v1/admin/courses/:courseId/lessons | 管理员课程 | ### 低优先级 (辅助功能) -| 接口路径 | 方法 | 功能 | 所属模块 | -|---------|------|------|---------| -| `/teacher/feedbacks` | GET | 反馈列表 | 教师反馈 | -| `/teacher/feedbacks/stats` | GET | 反馈统计 | 教师反馈 | -| `/school/feedbacks` | GET | 反馈列表 | 学校反馈 | -| `/school/feedbacks/stats` | GET | 反馈统计 | 学校反馈 | -| `/school/resource-libraries` | GET | 资源库列表 | 学校资源 | -| `/school/resource-items` | GET | 资源项列表 | 学校资源 | -| `/admin/resources/items/batch-delete` | POST | 批量删除资源项 | 管理员资源 | -| `/admin/resources/stats` | GET | 资源统计 | 管理员资源 | +**注意**: 以下接口实际已实现,但路径可能有所不同: + +| 接口路径 | 方法 | 功能 | 新后端实际路径 | 所属模块 | +|---------|------|------|---------------|---------| +| `/teacher/feedbacks` | GET | 反馈列表 | ✅ /api/v1/teacher/feedbacks | 教师反馈 | +| `/teacher/feedbacks/stats` | GET | 反馈统计 | ✅ /api/v1/teacher/feedbacks/stats | 教师反馈 | +| `/school/feedbacks` | GET | 反馈列表 | ✅ /api/v1/school/feedbacks | 学校反馈 | +| `/school/feedbacks/stats` | GET | 反馈统计 | ✅ /api/v1/school/feedbacks/stats | 学校反馈 | +| `/school/resource-libraries` | GET | 资源库列表 | ✅ /api/v1/school/resources/libraries | 学校资源 | +| `/school/resource-items` | GET | 资源项列表 | ✅ /api/v1/school/resources/items | 学校资源 | +| `/admin/resources/items/batch-delete` | POST | 批量删除资源项 | ✅ /api/v1/admin/resources/items/batch-delete | 管理员资源 | +| `/admin/resources/stats` | GET | 资源统计 | ✅ /api/v1/admin/resources/stats | 管理员资源 | --- ## 总结 +**最后更新**: 2026-03-11 + **旧后端接口总数**: 约 200 个 -**新后端已实现**: 约 180 个 -**缺失接口**: 约 20 个 +**新后端已实现**: 约 200 个 +**缺失接口**: 0 个 **缺失接口分类**: -- 高优先级:6 个 -- 中优先级:8 个 -- 低优先级:8 个 +- 高优先级:0 个(全部实现) +- 中优先级:0 个(全部实现) +- 低优先级:0 个(全部实现) -**建议实施顺序**: -1. 先补充高优先级接口(发送提醒、即将到期任务、仪表板增强) -2. 再补充中优先级接口(报告、统计) -3. 最后补充低优先级接口(反馈、资源) +**本次补充接口 (2026-03-11)**: +- `POST /api/v1/admin/resources/items/batch-delete` - 批量删除资源项 +- `GET /api/v1/admin/resources/stats` - 获取全平台资源统计 + +**说明**: +旧后端接口清单中的 20 个"缺失"接口,经代码审查确认实际已在 Spring Boot 后端实现。 +部分接口的路径有所调整(如 `/school/resources/items` 替代 `/school/resource-items`),但功能完整。 + +--- \ No newline at end of file diff --git a/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminResourceController.java b/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminResourceController.java index 0c0494f..d422047 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminResourceController.java +++ b/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminResourceController.java @@ -5,6 +5,7 @@ import com.reading.platform.common.annotation.RequireRole; import com.reading.platform.common.enums.UserRole; import com.reading.platform.common.response.PageResult; import com.reading.platform.common.response.Result; +import com.reading.platform.dto.response.ResourceStatsResponse; import com.reading.platform.entity.ResourceItem; import com.reading.platform.entity.ResourceLibrary; import com.reading.platform.service.ResourceService; @@ -78,4 +79,17 @@ public class AdminResourceController { resourceService.deleteItem(id); return Result.success(); } + + @Operation(summary = "批量删除资源项") + @PostMapping("/items/batch-delete") + public Result batchDeleteItems(@RequestBody List ids) { + resourceService.batchDeleteItems(ids); + return Result.success(); + } + + @Operation(summary = "获取全平台资源统计") + @GetMapping("/stats") + public Result> getStats() { + return Result.success(resourceService.getAdminStats()); + } } diff --git a/reading-platform-java/src/main/java/com/reading/platform/service/ResourceService.java b/reading-platform-java/src/main/java/com/reading/platform/service/ResourceService.java index 64a7dff..3aedade 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/service/ResourceService.java +++ b/reading-platform-java/src/main/java/com/reading/platform/service/ResourceService.java @@ -78,7 +78,12 @@ public interface ResourceService { void batchDeleteItems(List ids); /** - * 获取资源统计 + * 获取资源统计(按租户) */ List getStats(String tenantId); + + /** + * 获取全平台资源统计 + */ + List getAdminStats(); } diff --git a/reading-platform-java/src/main/java/com/reading/platform/service/impl/ResourceServiceImpl.java b/reading-platform-java/src/main/java/com/reading/platform/service/impl/ResourceServiceImpl.java index 988647a..6cfd147 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/service/impl/ResourceServiceImpl.java +++ b/reading-platform-java/src/main/java/com/reading/platform/service/impl/ResourceServiceImpl.java @@ -170,4 +170,30 @@ public class ResourceServiceImpl implements ResourceService { log.info("获取资源统计:tenantId={}, 资源库数量={}", tenantId, libraries.size()); return stats; } + + @Override + public List getAdminStats() { + List stats = new ArrayList<>(); + + // 统计全平台资源库总数 + Long libraryCount = resourceLibraryMapper.selectCount(null); + ResourceStatsResponse libraryStats = new ResourceStatsResponse(); + libraryStats.setId("all"); + libraryStats.setName("全平台资源库"); + libraryStats.setType("library"); + libraryStats.setCount(Math.toIntExact(libraryCount)); + stats.add(libraryStats); + + // 统计全平台资源项总数 + Long itemCount = resourceItemMapper.selectCount(null); + ResourceStatsResponse itemStats = new ResourceStatsResponse(); + itemStats.setId("items"); + itemStats.setName("全平台资源项"); + itemStats.setType("item"); + itemStats.setCount(Math.toIntExact(itemCount)); + stats.add(itemStats); + + log.info("获取全平台资源统计:资源库数量={}, 资源项数量={}", libraryCount, itemCount); + return stats; + } } diff --git a/reading-platform-java/src/main/resources/application-dev.yml b/reading-platform-java/src/main/resources/application-dev.yml index b52762d..e296938 100644 --- a/reading-platform-java/src/main/resources/application-dev.yml +++ b/reading-platform-java/src/main/resources/application-dev.yml @@ -4,9 +4,12 @@ server: spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://8.148.151.56:3306/reading_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - username: root + url: jdbc:mysql://192.168.1.250:3306/reading_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + username: reading_platform password: reading_platform_pwd +# url: jdbc:mysql://8.148.151.56:3306/reading_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +# username: root +# password: reading_platform_pwd jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai diff --git a/reading-platform-java/src/main/resources/db/migration/V2__add_missing_entity_fields.sql b/reading-platform-java/src/main/resources/db/migration/V2__add_missing_entity_fields.sql deleted file mode 100644 index b79f47a..0000000 --- a/reading-platform-java/src/main/resources/db/migration/V2__add_missing_entity_fields.sql +++ /dev/null @@ -1,55 +0,0 @@ --- ============================================ --- Flyway Migration V2 --- Description: 添加 ORM 实体类新增字段 --- Date: 2026-03-11 --- ============================================ - -USE reading_platform; - --- ============================================ --- 1. t_lesson_feedback 表新增字段 --- ============================================ --- 添加课程 ID 字段(用于统计课程反馈) -ALTER TABLE t_lesson_feedback -ADD COLUMN course_id VARCHAR(32) COMMENT '课程 ID' AFTER lesson_id; - --- 添加租户 ID 字段(用于租户隔离) -ALTER TABLE t_lesson_feedback -ADD COLUMN tenant_id VARCHAR(32) COMMENT '租户 ID' AFTER course_id; - --- 添加整体评分字段 -ALTER TABLE t_lesson_feedback -ADD COLUMN overall_rating INT COMMENT '整体评分 (1-5)' AFTER tenant_id; - --- ============================================ --- 2. t_resource_item 表新增字段 --- ============================================ --- 添加租户 ID 字段(用于租户隔离) -ALTER TABLE t_resource_item -ADD COLUMN tenant_id VARCHAR(32) COMMENT '租户 ID' AFTER library_id; - --- 添加资源类型字段 -ALTER TABLE t_resource_item -ADD COLUMN type VARCHAR(50) COMMENT '资源类型:book, material, equipment' AFTER tenant_id; - --- ============================================ --- 3. t_task 表新增字段 --- ============================================ --- 添加任务名称字段(与 title 字段并存,name 用于业务标识) -ALTER TABLE t_task -ADD COLUMN name VARCHAR(200) COMMENT '任务名称' AFTER title; - --- ============================================ --- 4. t_course_lesson 表新增字段 --- ============================================ --- 添加课时顺序号字段(用于课时排序) -ALTER TABLE t_course_lesson -ADD COLUMN lesson_order INT COMMENT '课时顺序号' AFTER sort_order; - --- ============================================ --- 更新说明 --- ============================================ --- - t_lesson_feedback: 新增 course_id、tenant_id、overall_rating 字段 --- - t_resource_item: 新增 tenant_id、type 字段 --- - t_task: 新增 name 字段 --- - t_course_lesson: 新增 lesson_order 字段 diff --git a/reading-platform-java/src/main/resources/db/schema/database_schema.sql b/reading-platform-java/src/main/resources/db/schema/database_schema.sql index 0af35ef..8df38ba 100644 --- a/reading-platform-java/src/main/resources/db/schema/database_schema.sql +++ b/reading-platform-java/src/main/resources/db/schema/database_schema.sql @@ -1,14 +1,15 @@ -- ============================================ -- Reading Platform Database Schema -- ============================================ --- 版本:1.0.0 +-- Flyway 版本:V1 -- 数据库:MySQL 8.0+ -- 字符集:utf8mb4 --- 表名规范:t_前缀 + 单数形式 --- ID 类型:VARCHAR(32) --- 包含审计字段:created_by, updated_by +-- 创建日期:2026-03-11 -- --- 表列表:共 36 张表 +-- 说明:完整的数据库初始化脚本 +-- 包含所有实体类字段的完整建表语句 +-- +-- 表列表:共 37 张表 -- - 用户表:6 张 -- - 班级表:3 张 -- - 课程表:10 张 @@ -400,6 +401,7 @@ CREATE TABLE IF NOT EXISTS t_course_lesson ( description TEXT, content TEXT, sort_order INT DEFAULT 0, + lesson_order INT COMMENT '课时顺序号', duration_minutes INT, video_url VARCHAR(500), status VARCHAR(20) DEFAULT 'draft', @@ -442,10 +444,13 @@ CREATE TABLE IF NOT EXISTS t_lesson ( CREATE TABLE IF NOT EXISTS t_lesson_feedback ( id VARCHAR(32) PRIMARY KEY COMMENT '课时反馈 ID', lesson_id VARCHAR(32) NOT NULL COMMENT '课时 ID', + course_id VARCHAR(32) COMMENT '课程 ID', + tenant_id VARCHAR(32) COMMENT '租户 ID', teacher_id VARCHAR(32) NOT NULL COMMENT '教师 ID', design_quality INT COMMENT '设计质量评分 (1-5)', participation INT COMMENT '参与度评分 (1-5)', goal_achievement INT COMMENT '目标达成度评分 (1-5)', + overall_rating INT COMMENT '整体评分 (1-5)', step_feedbacks TEXT COMMENT '环节反馈 JSON', pros TEXT COMMENT '优点', suggestions TEXT COMMENT '建议', @@ -484,6 +489,7 @@ CREATE TABLE IF NOT EXISTS t_task ( id VARCHAR(32) PRIMARY KEY COMMENT '任务 ID', tenant_id VARCHAR(32) NOT NULL COMMENT '租户 ID', title VARCHAR(200) NOT NULL, + name VARCHAR(200) COMMENT '任务名称', description TEXT, type VARCHAR(50) DEFAULT 'homework' COMMENT 'reading, homework, activity', course_id VARCHAR(32) COMMENT '课程 ID', @@ -587,6 +593,8 @@ CREATE TABLE IF NOT EXISTS t_resource_library ( CREATE TABLE IF NOT EXISTS t_resource_item ( id VARCHAR(32) PRIMARY KEY COMMENT '资源项 ID', library_id VARCHAR(32) NOT NULL, + tenant_id VARCHAR(32) COMMENT '租户 ID', + type VARCHAR(50) COMMENT '资源类型:book, material, equipment', name VARCHAR(200) NOT NULL, code VARCHAR(50), description TEXT,