# 考核功能"数据操作异常"问题修复方案 > 创建时间:2026-02-26 > 问题:陪伴员点击"开始考核"后显示"数据操作异常" --- ## 问题分析 ### 现象 1. 前端显示"数据操作异常" 2. 后端返回 200 状态码,但 `data` 为空对象 `{}` 3. 数据库日志显示查询成功(Total: 1) ### 根本原因 **数据库中没有考核题目数据**,导致 `startExam()` 方法中: ```java List allQuestions = examQuestionMapper.selectList(wrapper); // allQuestions 为空列表 Collections.shuffle(allQuestions); List selectedQuestions = allQuestions.stream() .limit(10) .collect(Collectors.toList()); // selectedQuestions 也为空,无法创建考核 ``` --- ## 解决方案 ### 方案1:添加考核题目数据(推荐) #### 步骤1:检查数据 执行SQL:`Archive/[一次性]检查考核题目数据-2026-02-26.sql` #### 步骤2:创建题目数据 如果题目不足,需要添加考核题目。每个等级至少需要 10 道题。 **示例SQL:** ```sql -- 插入金牌陪伴员考核题目 INSERT INTO exam_question (level, question_type, question_content, option_a, option_b, option_c, option_d, correct_answer, score, deleted) VALUES ('king', 'single', '陪伴员的首要职责是什么?', '完成教学任务', '关注学生身心健康', '提高学生成绩', '维护课堂纪律', 'B', 10, 0), ('king', 'single', '面对情绪低落的学生,应该如何处理?', '忽略情绪,继续上课', '耐心倾听,给予关怀', '批评学生不专心', '通知家长处理', 'B', 10, 0), ('king', 'single', '陪伴员应该如何与家长沟通?', '只报告问题', '定期反馈,积极沟通', '避免沟通', '只在家长询问时回复', 'B', 10, 0), -- ... 继续添加更多题目,至少10题 ; ``` ### 方案2:添加数据验证(临时方案) 修改 `ExamService.startExam()` 方法,添加数据验证: ```java @Transactional public Map startExam(Long teacherId, String targetLevel) { // 查询题目 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ExamQuestion::getLevel, targetLevel); wrapper.eq(ExamQuestion::getDeleted, 0); List allQuestions = examQuestionMapper.selectList(wrapper); // ✅ 添加数据验证 if (allQuestions == null || allQuestions.size() < 10) { throw new RuntimeException("考核题目不足,请联系管理员添加题目(当前题目数:" + (allQuestions == null ? 0 : allQuestions.size()) + ",需要:10)"); } // ... 后续代码 } ``` ### 方案3:前端优化错误提示 修改前端 `test.vue` 的错误处理: ```javascript async startExam() { try { this.loading = true const res = await examApi.start({ targetLevel: this.targetLevel }) if (res.code === 200 && res.data) { // 检查返回数据是否完整 if (!res.data.examRecordId) { uni.showModal({ title: '数据异常', content: '考核题目数据不完整,请联系管理员', showCancel: false, success: () => { uni.navigateBack() } }) return } this.examRecordId = res.data.examRecordId this.totalQuestions = res.data.totalQuestions this.remainingTime = res.data.duration // 开始倒计时 this.startTimer() // 加载第一题 await this.loadNextQuestion() } else { uni.showToast({ title: res.message || '开始考核失败', icon: 'none' }) setTimeout(() => { uni.navigateBack() }, 1500) } } catch (error) { console.error('开始考核失败:', error) uni.showToast({ title: error.message || '网络错误', icon: 'none', duration: 3000 }) setTimeout(() => { uni.navigateBack() }, 3000) } finally { this.loading = false } } ``` --- ## 实施步骤 ### 立即执行(推荐) 1. **检查数据** ```bash # 在数据库中执行 mysql -u root -p peidu < Archive/[一次性]检查考核题目数据-2026-02-26.sql ``` 2. **添加题目数据** - 如果题目不足,创建并执行插入SQL - 每个等级(king/gold)至少添加 10 道题 3. **重新测试** - 陪伴员登录 - 点击"开始考核" - 验证能否正常进入考核页面 ### 后续优化 1. **添加后端验证** - 在 `startExam()` 方法中添加题目数量检查 - 返回友好的错误提示 2. **前端优化** - 改进错误提示信息 - 添加数据完整性检查 3. **管理后台** - 添加题目管理功能 - 支持在线添加/编辑考核题目 --- ## 预期结果 修复后: - ✅ 陪伴员点击"开始考核"能正常进入考核页面 - ✅ 显示题目内容和选项 - ✅ 能够正常答题和提交 - ✅ 完成考核后显示成绩 --- ## 相关文件 - 后端Service:`peidu/backend/src/main/java/com/peidu/service/ExamService.java` - 后端Controller:`peidu/backend/src/main/java/com/peidu/controller/ExamController.java` - 前端页面:`peidu/uniapp/src/teacher-package/pages/exam/test.vue` - API接口:`peidu/uniapp/api/teacherLevel.js` - 检查SQL:`Archive/[一次性]检查考核题目数据-2026-02-26.sql` --- **修复优先级:** P0(紧急) **预计修复时间:** 30分钟(添加题目数据)