# error_question **Repository Path**: wanzhouting/error_question ## Basic Information - **Project Name**: error_question - **Description**: error_question - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-19 - **Last Updated**: 2026-03-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 错题本管理系统 > 更新3:知识点已替换为“标签”体系,支持多标签选择与按标签查询;详情接口返回复习统计(次数、正确率)与标签列表。联调细节见 `docs/README-EXT.md` 与 `docs/apifox.md`。 ## 项目简介 错题本管理系统是一个基于Spring Boot开发的Web应用,旨在帮助学生管理和复习错题。系统支持通过拍照上传错题,利用OCR技术自动识别题目内容,并提供错题的添加、查询、修改、删除等功能。 ## 技术栈 - **后端**:Spring Boot 3.2.3 - **数据库**:MySQL - **ORM框架**:Spring Data JPA + MyBatis-Plus - **OCR技术**:百度OCR API - **其他**:Lombok, Validation, FastJSON ## 功能特点 1. **错题管理**:添加、查询、修改、删除错题 2. **图片上传**:支持上传错题图片 3. **OCR识别**:自动识别图片中的文字内容 4. **标签分类**:以“标签”替代原“知识点”,支持多标签与按标签查询 5. **熟练度标记**:支持0-10级熟练度标记,便于复习(含区间查询) ## 系统架构 项目采用经典的三层架构: - **控制层(Controller)**:处理HTTP请求,返回统一格式的响应 - **服务层(Service)**:实现业务逻辑 - **数据访问层(Repository/Mapper)**:与数据库交互 ## API接口说明 ### 错题管理 #### 添加错题 - **URL**: `/api/error-questions` - **方法**: POST - **参数**: - `file?`: 错题图片文件(可选,支持不上传图片纯文本添加) - `subject`: 学科(必填) - `tags?`: 标签列表(可选,多个值,如 `tags=易错题&tags=函数`) - `correctAnswer`: 正确答案(必填) - `wrongAnswer?`: 错误答案(可选) - `note?`: 笔记(可选) - `knowledgePoint`: 已弃用(保留兼容但不再使用) - `questionContent?`: 错题文本内容(可选;推荐先调用 `/api/error-questions/ocr` 获取初始文本,用户编辑排版后传入;新增接口不再触发OCR,未传则存空) - **返回**: `Result` #### 组合查询(V2) - **URL**: `/api/error-questions` - **方法**: GET - **Query**: - `notebookId?`: 错题本 - `subjectId?`: 学科(错题本下) - `typeId?`: 题型(错题本下) - `proficiencyRange?`: 熟练度区间枚举:`lt4`(<4)、`4to7`([4,7))、`ge7`(≥7) - `keyword?`: 模糊查询题目内容(支持关键字) - `page=1`、`size=10` - **返回**: `Result` #### 详情(含复习统计与标签) - **URL**: `/api/error-questions/{id}` - **方法**: GET - **返回**: `Result`,包含: - `reviewCount`: 复习次数 - `correctCount`: 正确次数 - `accuracyRate`: 正确率(0.0~1.0) - `tags`: 标签列表(字符串) #### 更新错题(V2:支持图片重传与OCR、内容覆盖、归属调整) - **URL**: `/api/error-questions/{id}` - **方法**: PUT - **参数**: - `file?`: 图片文件(会进行OCR识别) - `notebookId?`、`subjectId?`、`typeId?` - `myAnswer?`(旧字段:`wrongAnswer`)、`correctAnswer?`、`note?`、`proficiencyLevel?`、`questionContent?` - **返回**: `Result` #### 删除错题 - **URL**: `/api/error-questions/{id}` - **方法**: DELETE - **返回**: ```json { "code": 200, "message": "成功", "data": null } ``` ### 错题本/学科/题型管理 - 列出错题本:`GET /api/notebooks` - 创建错题本:`POST /api/notebooks`(参数:`name`) - 列出学科(错题本下):`GET /api/notebooks/{id}/subjects` - 创建学科(错题本下):`POST /api/notebooks/{id}/subjects`(参数:`name`) - 列出题型(错题本下):`GET /api/notebooks/{id}/types` - 创建题型(错题本下):`POST /api/notebooks/{id}/types`(参数:`name`) - 熟练度标签列表(0~10):`GET /api/notebooks/{id}/proficiency-levels` ### 统计(以错题本为单位) - 错题本统计:`GET /api/notebooks/{id}/stats` - 返回:`{ totalQuestions, averageProficiency, viewCount, masteredCount, lowCount, midCount, subjectDistribution: [{subject, count}] }` - 全部错题本统计:`GET /api/notebooks/stats/all` - 返回:`{ totalQuestions, averageProficiency, notebookCount, totalViewCount, masteredCount, lowCount, midCount, subjectDistribution: [{subject, count}] }` ### 标签管理 #### 查询所有标签 - URL: `/api/tags` - 方法: GET - 返回: `Result>` > 用途:前端在新建或更新错题时拉取标签列表,支持选择默认与自定义标签。 ## 标签体系说明 - 默认标签:易错题、重点题、难题、公式题、概念题、计算题、应用题、选择题、填空题、解答题、基础题、提高题、综合题。 - 可自定义新标签:新增错题或更新时传入未存在的标签,将自动创建。 - 多标签选择:在新增/更新接口使用多值参数 `tags`。 - 兼容性:旧的 `knowledgePoint` 字段不再使用,数据库字段仍保留以避免破坏旧数据。 ## 配置说明 ### 数据库配置 在`application.yml`中配置MySQL数据库连接信息: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/error_question?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: 123456 ``` ### OCR配置 在`application.yml`中配置百度OCR API信息: ```yaml baidu: ocr: app-id: 你的百度OCR AppID api-key: 你的百度OCR API Key secret-key: 你的百度OCR Secret Key ``` ### 文件上传配置 在`application.yml`中配置文件上传相关参数: ```yaml spring: servlet: multipart: max-file-size: 10MB max-request-size: 10MB file: upload-dir: ./uploads ``` ## 启动说明 1. 确保已安装JDK 17或更高版本 2. 确保已安装并启动MySQL数据库 3. 修改`application.yml`中的数据库连接信息和百度OCR API信息 4. 执行以下命令启动应用: ```bash ./mvnw spring-boot:run ``` 或者使用IDE直接运行`ErrorQuestionApplication`类 ## 项目结构 ``` error-question/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── errorbook/ │ │ │ ├── config/ # 配置类 │ │ │ ├── controller/ # 控制器 │ │ │ ├── entity/ # 实体类(含 Tag、ErrorQuestionTag) │ │ │ ├── mapper/ # MyBatis-Plus Mapper(含 TagMapper 等) │ │ │ ├── service/ # 服务接口 │ │ │ │ └── impl/ # 服务实现 │ │ │ └── ErrorQuestionApplication.java │ │ └── resources/ │ │ ├── application.yml # 应用配置文件 │ │ ├── schema.sql # 数据库初始化(含标签与关联表) │ │ ├── static/ # 静态资源 │ │ └── templates/ # 模板文件 │ └── test/ # 测试代码 ├── uploads/ # 上传文件存储目录 ├── pom.xml # Maven配置文件 └── README.md # 项目说明文档 ``` ## 注意事项 1. 首次运行时,系统会自动创建数据库表结构(包含标签与错题-标签关联表) 2. 使用前请确保已申请百度OCR API并正确配置 3. 默认图片上传目录为项目根目录下的`uploads`文件夹 4. 熟练度等级范围为0-10,0表示最不熟练,10表示最熟练;查询支持三段区间:`lt4`、`4to7`、`ge7` 5. 浏览量:每次查看题目详情 `GET /api/error-questions/{id}`,会为该题所属错题本的 `viewCount` 自动加一;全局统计的 `totalViewCount` 为所有错题本浏览量之和。 6. 统计阈值:`masteredCount` 为熟练度 `>= 7`;`midCount` 为区间 `[4, 7)`;`lowCount` 为 `< 4`。 ## 变更摘要(近期) - 新增:`PUT /api/error-questions/{id}/proficiency` 单独修改熟练度(0~10,自动夹紧) - 拆分:`PUT /api/error-questions/{id}/correct-answer`、`/my-answer`、`/note`、`/content` - 组合查询:入参改为错题本/学科/题型及 `proficiencyRange`