普通推送

This commit is contained in:
En 2026-03-11 17:57:08 +08:00
parent 6d62195a1f
commit 97fec4f450
7 changed files with 132 additions and 118 deletions

View File

@ -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`),但功能完整。
---

View File

@ -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<Void> batchDeleteItems(@RequestBody List<String> ids) {
resourceService.batchDeleteItems(ids);
return Result.success();
}
@Operation(summary = "获取全平台资源统计")
@GetMapping("/stats")
public Result<List<ResourceStatsResponse>> getStats() {
return Result.success(resourceService.getAdminStats());
}
}

View File

@ -78,7 +78,12 @@ public interface ResourceService {
void batchDeleteItems(List<String> ids);
/**
* 获取资源统计
* 获取资源统计按租户
*/
List<ResourceStatsResponse> getStats(String tenantId);
/**
* 获取全平台资源统计
*/
List<ResourceStatsResponse> getAdminStats();
}

View File

@ -170,4 +170,30 @@ public class ResourceServiceImpl implements ResourceService {
log.info("获取资源统计tenantId={}, 资源库数量={}", tenantId, libraries.size());
return stats;
}
@Override
public List<ResourceStatsResponse> getAdminStats() {
List<ResourceStatsResponse> 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;
}
}

View File

@ -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

View File

@ -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 字段

View File

@ -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,