feat(exam): 支持按单个学生和考试类型生成考试试题
- 修改生成试题按钮仅在选中特定一个学生时可用,避免多选时误操作 - 在考试生成对话框新增“类型”选择项,支持“摸底”和“期中|期末”类型 - 调整后台接口,使用单个学生ID和考试类型替代学生ID列表参数 - 优化考试生成服务,新增摸底考试生成逻辑,按年级分区随机抽词汇 - 考试相关数据对象新增类型字段,保持数据完整性和一致性 - 修改考试判卷服务,将错误信息字段统一为msg,避免字段混淆 - 调整数据库操作,支持单个学生考试与词汇随机获取 - 同步更新测试用例和词汇库数据插入逻辑,确保环境一致性 - 修复界面生成按钮状态和对话框提交按钮的校验逻辑,提升用户体验
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -26,7 +26,7 @@ public class ExamTest {
|
||||
private VocabularyService vocabularyService;
|
||||
@Test
|
||||
public void test() {
|
||||
ExamWordsDO examWordsDO = examWordsService.generateExamWords(5, 0, List.of(1));
|
||||
ExamWordsDO examWordsDO = examWordsService.generateExamWords(5, 0, 1, 0);
|
||||
log.info("{}", examWordsDO);
|
||||
List<VocabularyBankDO> vocabularyBankDOS = vocabularyService.findVocabularyBankDOListById(examWordsDO.getWordIds());
|
||||
List<Word> assessmentWords = vocabularyBankDOS.stream().map(vocabularyBankDO -> Word.builder()
|
||||
|
||||
Reference in New Issue
Block a user