feat(exam): 支持按单个学生和考试类型生成考试试题

- 修改生成试题按钮仅在选中特定一个学生时可用,避免多选时误操作
- 在考试生成对话框新增“类型”选择项,支持“摸底”和“期中|期末”类型
- 调整后台接口,使用单个学生ID和考试类型替代学生ID列表参数
- 优化考试生成服务,新增摸底考试生成逻辑,按年级分区随机抽词汇
- 考试相关数据对象新增类型字段,保持数据完整性和一致性
- 修改考试判卷服务,将错误信息字段统一为msg,避免字段混淆
- 调整数据库操作,支持单个学生考试与词汇随机获取
- 同步更新测试用例和词汇库数据插入逻辑,确保环境一致性
- 修复界面生成按钮状态和对话框提交按钮的校验逻辑,提升用户体验
This commit is contained in:
lbw
2025-12-18 17:21:37 +08:00
parent 7a66548aed
commit 065da854ee
21 changed files with 228 additions and 54 deletions

View File

@@ -1,7 +1,9 @@
package com.yinlihupo.enlish.service.mapper;
import com.yinlihupo.enlish.service.domain.dataobject.GradeUnitDO;
import com.yinlihupo.enlish.service.domain.dataobject.UnitDO;
import com.yinlihupo.enlish.service.domain.dataobject.VocabularyBankDO;
import com.yinlihupo.enlish.service.domain.mapper.GradeUnitDOMapper;
import com.yinlihupo.enlish.service.domain.mapper.UnitDOMapper;
import com.yinlihupo.enlish.service.domain.mapper.VocabularyBankDOMapper;
import com.yinlihupo.enlish.service.domain.mapper.WordMasteryLogDOMapper;
@@ -29,11 +31,13 @@ public class TestVocabularyBankInsert {
private UnitDOMapper unitDOMapper;
@Resource
private WordMasteryLogDOMapper wordMasteryLogDOMapper;
@Resource
private GradeUnitDOMapper gradeUnitDOMapper;
@Test
void test() {
String file = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\test\\java\\com\\yinlihupo\\enlish\\service\\mapper\\min.xlsx";
String file = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\test\\java\\com\\yinlihupo\\enlish\\service\\mapper\\3上.xlsx";
HashMap<String, Integer> map = new HashMap<>();
int gradeId = 3;
try (FileInputStream fis = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(fis)) {
Sheet sheet = workbook.getSheetAt(0);
@@ -44,10 +48,14 @@ public class TestVocabularyBankInsert {
continue;
}
String gradeUnit = row.getCell(0).getStringCellValue();
String word = row.getCell(1).getStringCellValue();
String phonetic = row.getCell(2) != null ? row.getCell(2).getStringCellValue() : "";
String meaning = row.getCell(3) != null ? row.getCell(3).getStringCellValue() : "";
String word = row.getCell(0).getStringCellValue();
String meaning = row.getCell(1) != null ? row.getCell(1).getStringCellValue() : "";
String gradeUnit = row.getCell(2) != null ? row.getCell(2).getStringCellValue() : "";
if (word.contains("Unit")) {
continue;
}
int gradeUnitId = 0;
if (map.containsKey(gradeUnit)) {
@@ -61,6 +69,7 @@ public class TestVocabularyBankInsert {
.createAt(LocalDateTime.now())
.build();
unitDOMapper.insert(unitDO);
gradeUnitDOMapper.insert(GradeUnitDO.builder().unitId(unitDO.getId()).gradeId(gradeId).build());
gradeUnitId = unitDO.getId();
} else {
gradeUnitId = unitDO.getId();
@@ -71,7 +80,7 @@ public class TestVocabularyBankInsert {
VocabularyBankDO vocabularyBankDO = VocabularyBankDO.builder()
.word(word)
.definition(meaning)
.pronunciation(phonetic)
.pronunciation("")
.unitId(gradeUnitId)
.build();
vocabularyBankMapper.insertSelective(vocabularyBankDO);