From 504dd8d9643183d9897bcdb321303f026d5b4331 Mon Sep 17 00:00:00 2001 From: lbw <1192299468@qq.com> Date: Wed, 31 Dec 2025 14:16:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor(exam):=20=E9=87=8D=E6=9E=84=E8=80=83?= =?UTF-8?q?=E8=AF=95=E5=88=A4=E5=8D=B7=E4=BB=BB=E5=8A=A1=E4=B8=8E=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=95=99=E6=A1=88=E5=B0=8F=E6=B5=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将自动判卷任务类从job包迁移到task包并添加日志打印,增强可维护性 - 优化自动判卷逻辑,仅当有未完成试卷时触发判卷处理 - 修正判卷结果中学生姓名和考试标题的空值保护,防止空指针异常 - 扩展考试类型常量,新增教案小测类型常量EXAM_TYPE_TEST - 修改exam_words表插入语句,新增type字段支持不同考试类型 - 优化判卷逻辑:仅摸底考试计算等级,其他考试添加答题数提示信息 - 判卷完成后调用学案服务,自动完成学生对应学案计划 - 在教案计划生成中增加教案小测试卷的生成与存储 - 新增PlanExamDO数据对象及对应Mapper,实现学案与考试的关联映射 - 修改MySQL及Redis配置文件,完善环境配置 - 修正文档生成模板路径及生成逻辑,优化导出功能 - 屏蔽部分测试用例中的直接调用,防止无效执行和输出 - 清理部分测试代码中的硬编码和无用注释,提升代码整洁度 - 删除无用OMR测试代码,注释多余测试实现,简化测试类 - 统一二维码链接域名,指向正式环境地址 - 移除enlish-service中对词汇库插入的测试注释,避免误执行 --- .../service/constant/ExamWordsConstant.java | 19 +++ .../controller/ExamWordsController.java | 4 +- .../service/domain/dataobject/PlanExamDO.java | 21 ++++ .../domain/mapper/PlanExamDOMapper.java | 9 ++ .../judge/ExamWordsJudgeServiceImpl.java | 20 ++- .../service/plan/LessonPlansServiceImpl.java | 50 ++++++++ .../{job => task}/AutoJudgeExamWordsTask.java | 12 +- .../enlish/service/utils/WordExportUtil.java | 3 +- .../main/resources/config/application-dev.yml | 2 +- .../main/resources/config/application-pro.yml | 52 ++++++++ .../src/main/resources/generatorConfig.xml | 2 +- .../resources/mapper/ExamWordsDOMapper.xml | 4 +- .../mapper/ExamWordsJudgeResultDOMapper.xml | 2 + .../resources/mapper/PlanExamDOMapper.xml | 18 +++ .../resources/templates/assessment_v7.docx | Bin 0 -> 24843 bytes .../templates/tem_study_plan_v5.docx | Bin 0 -> 57550 bytes .../yinlihupo/enlish/service/ai/AITest.java | 3 - .../mapper/TestVocabularyBankInsert.java | 116 +++++++++--------- .../mapper/WordMasteryLogInsertTest.java | 4 +- .../yinlihupo/enlish/service/omr/TestOmr.java | 28 ++--- .../enlish/service/service/exam/ExamTest.java | 62 +++++----- .../exam/ExamWordsJudgeServiceTest.java | 56 ++++----- 22 files changed, 337 insertions(+), 150 deletions(-) create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/PlanExamDO.java create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/PlanExamDOMapper.java rename enlish-service/src/main/java/com/yinlihupo/enlish/service/{job => task}/AutoJudgeExamWordsTask.java (59%) create mode 100644 enlish-service/src/main/resources/config/application-pro.yml create mode 100644 enlish-service/src/main/resources/mapper/PlanExamDOMapper.xml create mode 100644 enlish-service/src/main/resources/templates/assessment_v7.docx create mode 100644 enlish-service/src/main/resources/templates/tem_study_plan_v5.docx diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/constant/ExamWordsConstant.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/constant/ExamWordsConstant.java index dcdc469..e8a27ef 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/constant/ExamWordsConstant.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/constant/ExamWordsConstant.java @@ -31,9 +31,15 @@ public class ExamWordsConstant { public static final int ZONE_F_SIZE = 7; + // 摸底 public static final int EXAM_TYPE_BASELINE = 1; + // 中期 public static final int EXAM_TYPE_MIDTERM = 2; + // 期末 public static final int EXAM_TYPE_FINAL = 3; + // 小测 + public static final int EXAM_TYPE_TEST = 4; + public static int getZoneA(int gradeId) { return switch (gradeId) { @@ -131,4 +137,17 @@ public class ExamWordsConstant { default -> ""; }; } + + public static String day2Chinese(int day) { + return switch (day) { + case 1 -> "一"; + case 2 -> "二"; + case 3 -> "三"; + case 4 -> "四"; + case 5 -> "五"; + case 6 -> "六"; + case 7 -> "七"; + default -> ""; + }; + } } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java index 90a7b56..2c2befa 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java @@ -113,8 +113,8 @@ public class ExamWordsController { .builder() .id(examWordsJudgeResultDO.getId()) .studentId(examWordsJudgeResultDO.getStudentId()) - .studentName(studentService.getStudentById(examWordsJudgeResultDO.getStudentId()).getName()) - .examWordsTitle(examWordsService.getExamWordsDOById(examWordsJudgeResultDO.getExamWordsId()).getTitle()) + .studentName(examWordsJudgeResultDO.getStudentId() != null ? studentService.getStudentById(examWordsJudgeResultDO.getStudentId()).getName() : "") + .examWordsTitle(examWordsJudgeResultDO.getExamWordsId() != null ? examWordsService.getExamWordsDOById(examWordsJudgeResultDO.getExamWordsId()).getTitle() : "") .examWordsId(examWordsJudgeResultDO.getExamWordsId()) .startDate(examWordsJudgeResultDO.getStartDate()) .correctWordCount(examWordsJudgeResultDO.getCorrectWordCount()) diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/PlanExamDO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/PlanExamDO.java new file mode 100644 index 0000000..b1baee5 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/dataobject/PlanExamDO.java @@ -0,0 +1,21 @@ +package com.yinlihupo.enlish.service.domain.dataobject; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class PlanExamDO { + + private Integer id; + + private Integer planId; + + private Integer examId; + + +} \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/PlanExamDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/PlanExamDOMapper.java new file mode 100644 index 0000000..261da67 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/PlanExamDOMapper.java @@ -0,0 +1,9 @@ +package com.yinlihupo.enlish.service.domain.mapper; + +import com.yinlihupo.enlish.service.domain.dataobject.PlanExamDO; + +public interface PlanExamDOMapper { + void insert(PlanExamDO record); + + PlanExamDO selectByExamId(Integer examId); +} \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/judge/ExamWordsJudgeServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/judge/ExamWordsJudgeServiceImpl.java index 9ed460c..9db5c05 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/judge/ExamWordsJudgeServiceImpl.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/judge/ExamWordsJudgeServiceImpl.java @@ -9,6 +9,7 @@ import com.yinlihupo.enlish.service.model.bo.exam.ActionType; import com.yinlihupo.enlish.service.model.bo.exam.DiagnosisResult; import com.yinlihupo.enlish.service.model.bo.exam.ZoneStats; import com.yinlihupo.enlish.service.service.ExamWordsJudgeService; +import com.yinlihupo.enlish.service.service.StudentLessonPlansService; import com.yinlihupo.enlish.service.utils.PngUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -40,6 +41,10 @@ public class ExamWordsJudgeServiceImpl implements ExamWordsJudgeService { private GradeUnitDOMapper gradeUnitDOMapper; @Resource private StudentDOMapper studentDOMapper; + @Resource + private PlanExamDOMapper planExamDOMapper; + @Resource + private StudentLessonPlansService studentLessonPlansService; @Value("${templates.data}") private String tessdataPath; @@ -56,6 +61,7 @@ public class ExamWordsJudgeServiceImpl implements ExamWordsJudgeService { StudentExamId studentExamId = PngUtil.analyzeExamWordsIdAndStudentId(ansSheetPath, tessdataPath, coordinatesXIES); Integer examWordsJudgeResultDOId = examWordsJudgeResultDO.getId(); if (studentExamId == null) { + log.info("未找到学生 id 和考试 id"); examWordsJudgeResultDOMapper.updateMsg(examWordsJudgeResultDOId, "未识别学生 id 和考试 id"); continue; } @@ -93,9 +99,13 @@ public class ExamWordsJudgeServiceImpl implements ExamWordsJudgeService { .wrongWordCount(unmemorizedWordIds.size()) .isFinished(1) .build(); - // 判断考试等级 - judgeExamActualGrade(wordsJudgeResultDO, examWordsDO); + if (examWordsDO.getType().equals(ExamWordsConstant.EXAM_TYPE_BASELINE)) { + // 判断考试等级 + judgeExamActualGrade(wordsJudgeResultDO, examWordsDO); + } else { + wordsJudgeResultDO.setMsg("此次考试" + examWordsDO.getTitle() + "答对单词数为" + memorizedWordIds.size()); + } int updated = examWordsJudgeResultDOMapper.updateExamWordsJudgeResultDO(wordsJudgeResultDO); if (updated != 1) { examWordsJudgeResultDOMapper.updateMsg(examWordsJudgeResultDOId, "更新考试记录失败"); @@ -103,6 +113,12 @@ public class ExamWordsJudgeServiceImpl implements ExamWordsJudgeService { } log.info("更新考试记录成功"); + PlanExamDO planExamDO = planExamDOMapper.selectByExamId(examWordsId); + if (planExamDO != null) { + studentLessonPlansService.finishStudentLessonPlan(studentId, planExamDO.getPlanId()); + log.info("完成学案成功, planId: {}", planExamDO.getPlanId()); + } + List wordMasteryLogDOS = new ArrayList<>(unmemorizedWordIds.stream().map(wordId -> WordMasteryLogDO.builder() .wordId(wordId) .studentId(studentId) diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java index 338b236..7ff086d 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java @@ -1,5 +1,6 @@ package com.yinlihupo.enlish.service.service.plan; +import com.yinlihupo.enlish.service.constant.ExamWordsConstant; import com.yinlihupo.enlish.service.constant.LessonPlanConstant; import com.yinlihupo.enlish.service.domain.dataobject.*; import com.yinlihupo.enlish.service.domain.mapper.*; @@ -36,6 +37,14 @@ public class LessonPlansServiceImpl implements LessonPlansService { private GradeDOMapper gradeDOMapper; @Resource private DifyClient difyClient; + @Resource + private ExamWordsDOMapper examWordsDOMapper; + @Resource + private StudentExamWordsDOMapper studentExamWordsDOMapper; + @Resource + private StudentDOMapper studentDOMapper; + @Resource + private PlanExamDOMapper planExamDOMapper; @Override @@ -116,6 +125,13 @@ public class LessonPlansServiceImpl implements LessonPlansService { .build(); studentLessonPlansDOMapper.insert(studentLessonPlansDO); + Integer examId = (Integer) lessonPlanMap.get("examId"); + PlanExamDO planExamDO = PlanExamDO.builder() + .planId(lessonPlansDO.getId()) + .examId(examId) + .build(); + planExamDOMapper.insert(planExamDO); + } catch (Exception e) { log.info("生成第{}天计划失败,失败原因 {}", i + 1, e.getMessage()); } @@ -244,6 +260,40 @@ public class LessonPlansServiceImpl implements LessonPlansService { data.put("sentences", sentences); data.put("sentencesAns", sentences); log.info( "生成连词成句成功"); + + + // 教案小测 + List words = new ArrayList<>(syncVocabList); + words.addAll(gapVocabList); + words.addAll(reviewVocabList); + if (words.size() < 100) { + words.addAll(vocabularyBankDOMapper.selectVocabularyBankListByGradeIdRandom(gradeDO.getId(), 100 - words.size())); + } else { + words = words.subList(0, 100); + } + words.forEach(word -> word.setDefinition(word.getDefinition().length() > 5 ? word.getDefinition().substring(0, 5) : word.getDefinition())); + List wordIds = words.stream().map(VocabularyBankDO::getId).toList(); + StudentDO studentDO = studentDOMapper.selectStudentById(studentId); + + String ExamTitle = gradeDO.getTitle() + unitDO.getTitle() + "教案小测 第" + ExamWordsConstant.day2Chinese(day) + "天" + studentDO.getName(); + ExamWordsDO examWordsDO = ExamWordsDO.builder() + .gradeId(gradeDO.getId()) + .level(1) + .wordIds(wordIds) + .type(ExamWordsConstant.EXAM_TYPE_TEST) + .title(ExamTitle) + .createdAt(LocalDateTime.now()) + .build(); + examWordsDOMapper.insert(examWordsDO); + studentExamWordsDOMapper.insertStudentsExam(studentId, examWordsDO.getId()); + + data.put("examId", examWordsDO.getId()); + data.put("studentId", studentId); + data.put("studentStr", studentDO.getName()); + data.put("examStr", ExamTitle); + data.put("words", words); + log.info("生成教案小测成功"); + // LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); // Configure config = Configure.builder() // .bind("syncVocabList", policy) diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/job/AutoJudgeExamWordsTask.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/task/AutoJudgeExamWordsTask.java similarity index 59% rename from enlish-service/src/main/java/com/yinlihupo/enlish/service/job/AutoJudgeExamWordsTask.java rename to enlish-service/src/main/java/com/yinlihupo/enlish/service/task/AutoJudgeExamWordsTask.java index 7bf889b..56d9d62 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/job/AutoJudgeExamWordsTask.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/task/AutoJudgeExamWordsTask.java @@ -1,13 +1,13 @@ -package com.yinlihupo.enlish.service.job; +package com.yinlihupo.enlish.service.task; import com.yinlihupo.enlish.service.service.ExamWordsJudgeService; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import java.time.LocalDateTime; - @Component +@Slf4j public class AutoJudgeExamWordsTask { @Resource @@ -15,7 +15,9 @@ public class AutoJudgeExamWordsTask { @Scheduled(fixedRate = 5000) public void autoJudgeExamWords() { - System.out.println("【固定频率】开始自动判卷,时间:" + LocalDateTime.now()); - examWordsJudgeService.judgeExamWords(5); + if (examWordsJudgeService.getExamWordsJudgeResultCount() != 0) { + log.info("有试卷待检测,开始检测"); + examWordsJudgeService.judgeExamWords(5); + } } } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/WordExportUtil.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/WordExportUtil.java index 169c809..89c86dd 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/WordExportUtil.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/WordExportUtil.java @@ -52,6 +52,7 @@ public class WordExportUtil { .bind("checkListAns", policyLessonPlanWeekday) .bind("sentences", policyLessonPlanWeekday) .bind("sentencesAns", policyLessonPlanWeekday) + .bind("words", policyLessonPlanWeekday) .build(); LoopRowTableRenderPolicy policyLessonPlan = new LoopRowTableRenderPolicy(); @@ -96,7 +97,7 @@ public class WordExportUtil { } else { template = XWPFTemplate.compile(inputStream, configLessonPlanWeekend); } - String url = "http://localhost:5173/#/plan/tts?planId=" + lessonPlan.getId(); + String url = "http://english.yinlihupo.cn/#/plan/tts?planId=" + lessonPlan.getId(); map.put("img", Pictures.ofBytes(generateQR(url), PictureType.PNG).create()); OutputStream out = response.getOutputStream(); template.render(map); diff --git a/enlish-service/src/main/resources/config/application-dev.yml b/enlish-service/src/main/resources/config/application-dev.yml index 10f2240..cda3cad 100644 --- a/enlish-service/src/main/resources/config/application-dev.yml +++ b/enlish-service/src/main/resources/config/application-dev.yml @@ -35,7 +35,7 @@ templates: count: 100 data: C:\project\tess plan: - weekday: C:\project\java\enlish_edu\enlish\enlish-service\src\main\resources\templates\tem_study_plan_v4.docx + weekday: C:\project\java\enlish_edu\enlish\enlish-service\src\main\resources\templates\tem_study_plan_v5.docx weekend: C:\project\java\enlish_edu\enlish\enlish-service\src\main\resources\templates\study_plan_review_v1.docx plan_day: 7 tmp: diff --git a/enlish-service/src/main/resources/config/application-pro.yml b/enlish-service/src/main/resources/config/application-pro.yml new file mode 100644 index 0000000..636b8e2 --- /dev/null +++ b/enlish-service/src/main/resources/config/application-pro.yml @@ -0,0 +1,52 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver # 指定数据库驱动类 + # 数据库连接信息 + url: jdbc:mysql://124.220.58.5:3306/enlish?allowMultiQueries=true + username: root # 数据库用户名 + password: YLHP@admin123 # 数据库密码 + data: + redis: + database: 6 # Redis 数据库索引(默认为 0) + host: 124.220.58.5 # Redis 服务器地址 + port: 6543 # Redis 服务器连接端口 + password: 741963 # Redis 服务器连接密码(默认为空) + timeout: 5s # 读超时时间 + connect-timeout: 5s # 链接超时时间 + lettuce: + pool: + max-active: 200 # 连接池最大连接数 + max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) + min-idle: 0 # 连接池中的最小空闲连接 + max-idle: 10 # 连接池中的最大空闲连接 + ai: + openai: + api-key: your_api_key_here + base-url: http://124.220.58.5:2233 + audio: + speech: + options: + model: tts-1 + voice: alloy + + +templates: + word: assessment_v5.docx + count: 100 + data: eng.traineddata + plan: + weekday: tem_study_plan_v4.docx + weekend: study_plan_review_v1.docx + plan_day: 7 +tmp: + png: tmp\png\ + +ai: + key: app-loC6IrJpj4cS54MAYp73QtGl + analyzeKey: app-hrUFcopdcpnflsvpHWRuBfCp + sentenceKey: app-Emk5YQBaD2YruRXuE5sK1vEU + url: https://chat.cosonggle.com/v1/chat-messages + +aliyun: + accessKeyId: + accessKeySecret: diff --git a/enlish-service/src/main/resources/generatorConfig.xml b/enlish-service/src/main/resources/generatorConfig.xml index f731f84..e55c440 100644 --- a/enlish-service/src/main/resources/generatorConfig.xml +++ b/enlish-service/src/main/resources/generatorConfig.xml @@ -45,7 +45,7 @@ targetProject="src/main/java"/> - - insert into exam_words (grade_id, level, title, word_ids, created_at) - VALUES (#{gradeId}, #{level}, #{title}, #{wordIds, typeHandler=com.yinlihupo.enlish.service.config.ListWordIdTypeHandler}, #{createdAt}) + insert into exam_words (grade_id, level, title, word_ids, type, created_at) + VALUES (#{gradeId}, #{level}, #{title}, #{wordIds, typeHandler=com.yinlihupo.enlish.service.config.ListWordIdTypeHandler}, #{type}, #{createdAt}) diff --git a/enlish-service/src/main/resources/mapper/ExamWordsJudgeResultDOMapper.xml b/enlish-service/src/main/resources/mapper/ExamWordsJudgeResultDOMapper.xml index 5e7acd9..bc8b5e2 100644 --- a/enlish-service/src/main/resources/mapper/ExamWordsJudgeResultDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/ExamWordsJudgeResultDOMapper.xml @@ -61,7 +61,9 @@ + + select * from plan_exam where exam_id = #{examId} + + + \ No newline at end of file diff --git a/enlish-service/src/main/resources/templates/assessment_v7.docx b/enlish-service/src/main/resources/templates/assessment_v7.docx new file mode 100644 index 0000000000000000000000000000000000000000..370ae0b8354baa203ff72c45e91d7061e9eb6dd9 GIT binary patch literal 24843 zcmb5VW0WXC(DW@dN3IlDhLPgP}|sK}EM@nmI2 zL{=$C1A{;T{HKJ;9SZ!X{$B<1-;IgAv4WGmgEPItKQ@$q1c?7)D+fxSF$M$xa03DW zK=|L;3>_TkJZx=plmz957!bON@53lwhhwt@1htEh_Ji}4fO(0gHrUW2Y&XCb_Kp;m zL#f+xFuhrJ8Ml34eIFubsf*Ap6P8#6X=SUP>=Jre;5T?=eGocPdluRyUjHs(`}u)U zo6~gW&yz0*eTr^|7}P=DHx3ED@l0}2X&-?h61i|2wQ7^z&yL3dx)MY$LI>&tx<=WW z#f6>^+2AM|ma^P}0(qNHo0oZq_1~>mTV!t%2t+ zFe}AHy@wb1iP_a%!|dj$YJO5})nuyJ5Uu8_y2x2ltp}9BC1~Ro^DtCVe}*!SGCG6z zd9wH40U_))k2d=UNZLO@5dU{TjP0FF|ARm;t?vUl7Tv>iM$n=qp|J=L zJ|}@Ep%Q1*!n?^a9)UPE8R!%gB%@ZK*pP`k`61~^NT9N6a=r}IW&=qDCB3nWt&Ak& z>KB$%DQ{JLD<`eWY&7i(Oj`6_J?4J@>#GA?D5M!iZGhbdqGA+Ew{U73l{G-1@i+mv zB?}qefW8(m)mk4`rks36nVIG$bBp7r%>et1T+h5Ed3EJv)gW2ujQrin+i^8#W!B_J zEk`~HQa7e}2auTn2buu;QEN`r-CqwTA<2Dk;4~0ALS+BE55VW|DhPYknm#Z)jSwlm zT)nkd_{+1g*R+(KJvDc?l~g%Je)-X6%&oNSQUbU%{|rB|$^GA6Qxv1?{sK zP{wYPUU1`YLAC;b5R0W4DiY}=yBI1RGU6F)C`Tc(Ox$^Iyw**ZV !^89b# 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 literal 0 HcmV?d00001 diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/ai/AITest.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/ai/AITest.java index c3b91cd..2c9fc7a 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/ai/AITest.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/ai/AITest.java @@ -27,9 +27,6 @@ public class AITest { try { - List vocabularyBankDOS = vocabularyBankDOMapper.selectVocabularyBankDOAllByUnitId(269); - List sentences = client.sendSentenceAnalyze(vocabularyBankDOS, "小学4年级"); - } catch (Exception e) { e.printStackTrace(); diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/TestVocabularyBankInsert.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/TestVocabularyBankInsert.java index 76590b8..5468809 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/TestVocabularyBankInsert.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/TestVocabularyBankInsert.java @@ -35,68 +35,68 @@ public class TestVocabularyBankInsert { private GradeUnitDOMapper gradeUnitDOMapper; @Test void test() { - String file = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\test\\java\\com\\yinlihupo\\enlish\\service\\mapper\\八下.xlsx"; - HashMap map = new HashMap<>(); - int gradeId = 8; - try (FileInputStream fis = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(fis)) { - - Sheet sheet = workbook.getSheetAt(0); - - for (int i = 1; i <= sheet.getLastRowNum(); i++) { - Row row = sheet.getRow(i); - if (row == null) { - continue; - } - - +// String file = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\test\\java\\com\\yinlihupo\\enlish\\service\\mapper\\八下.xlsx"; +// HashMap map = new HashMap<>(); +// int gradeId = 8; +// try (FileInputStream fis = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(fis)) { +// +// Sheet sheet = workbook.getSheetAt(0); +// +// for (int i = 1; i <= sheet.getLastRowNum(); i++) { +// Row row = sheet.getRow(i); +// if (row == null) { +// continue; +// } +// +// // String word = row.getCell(0).getStringCellValue(); // String pronunciation = row.getCell(1) != null ? row.getCell(1).getStringCellValue() : ""; // String pos = row.getCell(2) != null ? row.getCell(2).getStringCellValue() : ""; // String meaning = row.getCell(3) != null ? row.getCell(3).getStringCellValue() : ""; // String gradeUnit = row.getCell(4) != null ? row.getCell(4).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() : ""; - String pronunciation = ""; - String pos = ""; - if (word.contains("Unit")) { - continue; - } - - int gradeUnitId; - if (map.containsKey(gradeUnit)) { - gradeUnitId = map.get(gradeUnit); - } else { - UnitDO unitDO = unitDOMapper.selectByTitle(gradeUnit); - if (unitDO == null) { - unitDO = UnitDO.builder() - .title(gradeUnit) - .version("人教版") - .createAt(LocalDateTime.now()) - .build(); - unitDOMapper.insert(unitDO); - gradeUnitDOMapper.insert(GradeUnitDO.builder().unitId(unitDO.getId()).gradeId(gradeId).build()); - gradeUnitId = unitDO.getId(); - } else { - gradeUnitId = unitDO.getId(); - } - - map.put(gradeUnit, gradeUnitId); - } - VocabularyBankDO vocabularyBankDO = VocabularyBankDO.builder() - .word(word) - .definition(meaning) - .pronunciation(pronunciation) - .pos(pos) - .unitId(gradeUnitId) - .build(); - vocabularyBankMapper.insertSelective(vocabularyBankDO); - log.info("插入数据 {} ", vocabularyBankDO); - } - - } catch (IOException e) { - throw new RuntimeException(e); - } +// +// 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() : ""; +// String pronunciation = ""; +// String pos = ""; +// if (word.contains("Unit")) { +// continue; +// } +// +// int gradeUnitId; +// if (map.containsKey(gradeUnit)) { +// gradeUnitId = map.get(gradeUnit); +// } else { +// UnitDO unitDO = unitDOMapper.selectByTitle(gradeUnit); +// if (unitDO == null) { +// unitDO = UnitDO.builder() +// .title(gradeUnit) +// .version("人教版") +// .createAt(LocalDateTime.now()) +// .build(); +// unitDOMapper.insert(unitDO); +// gradeUnitDOMapper.insert(GradeUnitDO.builder().unitId(unitDO.getId()).gradeId(gradeId).build()); +// gradeUnitId = unitDO.getId(); +// } else { +// gradeUnitId = unitDO.getId(); +// } +// +// map.put(gradeUnit, gradeUnitId); +// } +// VocabularyBankDO vocabularyBankDO = VocabularyBankDO.builder() +// .word(word) +// .definition(meaning) +// .pronunciation(pronunciation) +// .pos(pos) +// .unitId(gradeUnitId) +// .build(); +// vocabularyBankMapper.insertSelective(vocabularyBankDO); +// log.info("插入数据 {} ", vocabularyBankDO); +// } +// +// } catch (IOException e) { +// throw new RuntimeException(e); +// } } } diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/WordMasteryLogInsertTest.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/WordMasteryLogInsertTest.java index d785d1d..05d23ec 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/WordMasteryLogInsertTest.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/mapper/WordMasteryLogInsertTest.java @@ -22,7 +22,7 @@ public class WordMasteryLogInsertTest { @Test void test() { - List integers = vocabularyBankMapper.selectAllIds(); - wordMasteryLogDOMapper.batchInsertInitialization(integers, 1); +// List integers = vocabularyBankMapper.selectAllIds(); +// wordMasteryLogDOMapper.batchInsertInitialization(integers, 1); } } diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java index b666dbf..ba2b4c9 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java @@ -24,25 +24,25 @@ public class TestOmr { public void testOmr(){ OpenCV.loadLocally(); - List knownIds = Arrays.asList(3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, - 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, - 3206, 3208, 3209, 3210, 3211, 3212, 3507, 3508, 3509, 3510, - 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3519, 3521, 3522, - 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, - 3533, 3535, 3536, 3537, 3538, 3539); - - List knowsIds = knownIds.stream().map(id -> id + "").toList(); - String path = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\p3.png"; - List coordinatesXIES = PngUtil.analysisXY(path); +// List knownIds = Arrays.asList(3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, +// 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, +// 3206, 3208, 3209, 3210, 3211, 3212, 3507, 3508, 3509, 3510, +// 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3519, 3521, 3522, +// 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, +// 3533, 3535, 3536, 3537, 3538, 3539); +// +// List knowsIds = knownIds.stream().map(id -> id + "").toList(); +// String path = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\p3.png"; +// List coordinatesXIES = PngUtil.analysisXY(path); } @Test public void testInteger(){ - String filePath = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\p3.png"; - List coordinatesXIES = PngUtil.analysisXY(filePath); - StudentExamId studentExamId = PngUtil.analyzeExamWordsIdAndStudentId(filePath, tessdataPath, coordinatesXIES); - log.info("studentExamId:{}",studentExamId); +// String filePath = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\p3.png"; +// List coordinatesXIES = PngUtil.analysisXY(filePath); +// StudentExamId studentExamId = PngUtil.analyzeExamWordsIdAndStudentId(filePath, tessdataPath, coordinatesXIES); +// log.info("studentExamId:{}",studentExamId); } } diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java index 8e6b80d..e7c295a 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java @@ -26,36 +26,36 @@ public class ExamTest { private VocabularyService vocabularyService; @Test public void test() { - ExamWordsDO examWordsDO = examWordsService.generateExamWords(5, 0); - log.info("{}", examWordsDO); - List vocabularyBankDOS = vocabularyService.findVocabularyBankDOListById(examWordsDO.getWordIds()); - List assessmentWords = vocabularyBankDOS.stream().map(vocabularyBankDO -> Word.builder() - .id(vocabularyBankDO.getId()) - .title(vocabularyBankDO.getWord()) - .definition(vocabularyBankDO.getDefinition()) - .build()).toList(); - - - LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); - Configure config = Configure.builder() - .bind("words", policy) - .build(); - - Map data = new HashMap<>(); - data.put("examId", examWordsDO.getId()); - data.put("studentId", 1); - data.put("studentStr","小明三班一年级"); - data.put("examStr", examWordsDO.getTitle()); - data.put("words", assessmentWords); - data.put("answer", assessmentWords); - - // 4. 渲染并输出 - try (XWPFTemplate template = XWPFTemplate.compile("C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\assessment_v5.docx", config)) { - template.render(data); - template.write(new FileOutputStream("学生单词测试卷.docx")); - System.out.println("文档生成成功!"); - } catch (Exception e) { - e.printStackTrace(); - } +// ExamWordsDO examWordsDO = examWordsService.generateExamWords(5, 0); +// log.info("{}", examWordsDO); +// List vocabularyBankDOS = vocabularyService.findVocabularyBankDOListById(examWordsDO.getWordIds()); +// List assessmentWords = vocabularyBankDOS.stream().map(vocabularyBankDO -> Word.builder() +// .id(vocabularyBankDO.getId()) +// .title(vocabularyBankDO.getWord()) +// .definition(vocabularyBankDO.getDefinition()) +// .build()).toList(); +// +// +// LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); +// Configure config = Configure.builder() +// .bind("words", policy) +// .build(); +// +// Map data = new HashMap<>(); +// data.put("examId", examWordsDO.getId()); +// data.put("studentId", 1); +// data.put("studentStr","小明三班一年级"); +// data.put("examStr", examWordsDO.getTitle()); +// data.put("words", assessmentWords); +// data.put("answer", assessmentWords); +// +// // 4. 渲染并输出 +// try (XWPFTemplate template = XWPFTemplate.compile("C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\assessment_v5.docx", config)) { +// template.render(data); +// template.write(new FileOutputStream("学生单词测试卷.docx")); +// System.out.println("文档生成成功!"); +// } catch (Exception e) { +// e.printStackTrace(); +// } } } diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamWordsJudgeServiceTest.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamWordsJudgeServiceTest.java index aa135ef..d6f3255 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamWordsJudgeServiceTest.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamWordsJudgeServiceTest.java @@ -36,22 +36,22 @@ public class ExamWordsJudgeServiceTest { @Test public void judgeExamWords() { - String ansSheetPath = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\3.png"; - List coordinatesXIES = PngUtil.analysisXY(ansSheetPath); - // 从图片中获取学生 id 和考试 id - String tessdataPath = "C:\\project\\tess"; - StudentExamId studentExamId = PngUtil.analyzeExamWordsIdAndStudentId(ansSheetPath, tessdataPath, coordinatesXIES); - Integer examWordsId = 41; - - ExamWordsDO examWordsDO = examWordsDOMapper.selectById(examWordsId); - - List wordIds = examWordsDO.getWordIds(); - List unmemorizedWordIds = PngUtil.analyzePngForUnmemorizedWordIds(ansSheetPath, wordIds, coordinatesXIES); - List memorizedWordIds = wordIds.stream().filter(wordId -> !unmemorizedWordIds.contains(wordId)).toList(); - List vocabularyBankDOS = vocabularyBankDOMapper.selectVocabularyBankDOListByIds(unmemorizedWordIds); - for (VocabularyBankDO vocabularyBankDO : vocabularyBankDOS) { - log.info("未掌握的单词:{}", vocabularyBankDO); - } +// String ansSheetPath = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\3.png"; +// List coordinatesXIES = PngUtil.analysisXY(ansSheetPath); +// // 从图片中获取学生 id 和考试 id +// String tessdataPath = "C:\\project\\tess"; +// StudentExamId studentExamId = PngUtil.analyzeExamWordsIdAndStudentId(ansSheetPath, tessdataPath, coordinatesXIES); +// Integer examWordsId = 41; +// +// ExamWordsDO examWordsDO = examWordsDOMapper.selectById(examWordsId); +// +// List wordIds = examWordsDO.getWordIds(); +// List unmemorizedWordIds = PngUtil.analyzePngForUnmemorizedWordIds(ansSheetPath, wordIds, coordinatesXIES); +// List memorizedWordIds = wordIds.stream().filter(wordId -> !unmemorizedWordIds.contains(wordId)).toList(); +// List vocabularyBankDOS = vocabularyBankDOMapper.selectVocabularyBankDOListByIds(unmemorizedWordIds); +// for (VocabularyBankDO vocabularyBankDO : vocabularyBankDOS) { +// log.info("未掌握的单词:{}", vocabularyBankDO); +// } } @Test @@ -60,16 +60,16 @@ public class ExamWordsJudgeServiceTest { log.info("examWordsJudgeResult:{}", examWordsJudgeResult); } - @Test - public void selectExamWordsJudgeResult2() { - String s = studentService.analyzeStudentStudy(1); - try { - DifyClient.DifyResponse difyResponse = difyClient.sendStudentAnalyze(s); - String answer = difyResponse.getAnswer(); - log.info("answer:{}", answer); - } catch (Exception e) { - throw new RuntimeException(e); - } - log.info("s:{}", s); - } +// @Test +// public void selectExamWordsJudgeResult2() { +// String s = studentService.analyzeStudentStudy(1); +// try { +// DifyClient.DifyResponse difyResponse = difyClient.sendStudentAnalyze(s); +// String answer = difyResponse.getAnswer(); +// log.info("answer:{}", answer); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// log.info("s:{}", s); +// } }