From 494ab77486d45a5feb0f8af5b768e09b3505b3ea Mon Sep 17 00:00:00 2001 From: lbw <1192299468@qq.com> Date: Sat, 27 Dec 2025 17:21:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(plan):=20=E6=94=AF=E6=8C=81=E5=AD=A6?= =?UTF-8?q?=E6=A1=88=E7=94=9F=E6=88=90=E6=97=B6=E6=8C=87=E5=AE=9A=E5=8D=95?= =?UTF-8?q?=E8=AF=8D=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 AddLessonPlanReqVO 中新增 wordSize 字段 - 修改 LessonPlansService 接口及实现,支持 wordSize 参数 - 优化学案生成逻辑,按指定单词数切分词汇列表 - 更新前端 LessonPlanDialog,添加单词数输入框 - 修改生成学案接口及调用,传递 wordSize 参数 - 增加查询学生词汇掌握详情接口及实现 - 添加学生词汇统计展示组件及页面集成 - 调整词汇相关 Mapper,修正记忆强度条件范围 - 更新权限配置,允许访问学生单词详情接口 --- .../service/config/SaTokenConfigure.java | 1 + .../controller/LessonPlanController.java | 3 +- .../controller/VocabularyController.java | 9 ++++++ .../domain/mapper/WordMasteryLogDOMapper.java | 4 +++ .../model/vo/plan/AddLessonPlanReqVO.java | 1 + .../FindStudentWordDetailReqVO.java | 15 ++++++++++ .../FindStudentWordDetailRspVO.java | 27 +++++++++++++++++ .../service/service/LessonPlansService.java | 2 +- .../service/service/VocabularyService.java | 3 ++ .../service/plan/LessonPlansServiceImpl.java | 18 ++++++----- .../vocabulary/VocabularyServiceImpl.java | 12 ++++++++ .../main/resources/config/application-dev.yml | 2 +- .../mapper/VocabularyBankDOMapper.xml | 2 +- .../mapper/WordMasteryLogDOMapper.xml | 19 ++++++++++++ .../templates/tem_study_plan_v2.docx | Bin 0 -> 16172 bytes .../enlish/service/service/plan/PlanTest.java | 2 +- enlish-vue/src/api/plan.js | 5 ++-- enlish-vue/src/api/words.js | 8 ++++- .../layouts/components/LessonPlanDialog.vue | 6 +++- enlish-vue/src/pages/student.vue | 28 ++++++++++++++++-- 20 files changed, 148 insertions(+), 19 deletions(-) create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailReqVO.java create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailRspVO.java create mode 100644 enlish-service/src/main/resources/templates/tem_study_plan_v2.docx diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/config/SaTokenConfigure.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/config/SaTokenConfigure.java index 8d2bb3a..42db809 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/config/SaTokenConfigure.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/config/SaTokenConfigure.java @@ -37,6 +37,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { .notMatch("/student/mastery/detail") .notMatch("/unit/list") .notMatch("/vocabulary/list") + .notMatch("/vocabulary/student/detail") .notMatch("/plan/download") .notMatch("/login/**") .check(r -> StpUtil.checkLogin()); diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java index 971581e..600ed99 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java @@ -41,8 +41,9 @@ public class LessonPlanController { public Response generateLessonPlan(@RequestBody AddLessonPlanReqVO addLessonPlanReqVO) { Integer studentId = addLessonPlanReqVO.getStudentId(); Integer unitId = addLessonPlanReqVO.getUnitId(); + Integer wordSize = addLessonPlanReqVO.getWordSize(); try { - taskExecutor.execute(() -> lessonPlanService.generateLessonPlans(studentId, unitId)); + taskExecutor.execute(() -> lessonPlanService.generateLessonPlans(studentId, unitId, wordSize)); return Response.success("生成学案成功,请等待 10 分钟"); } catch (Exception e) { log.error(e.getMessage()); diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/VocabularyController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/VocabularyController.java index b7bbcf4..ec34f18 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/VocabularyController.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/VocabularyController.java @@ -1,6 +1,8 @@ package com.yinlihupo.enlish.service.controller; import com.yinlihupo.enlish.service.domain.dataobject.VocabularyBankDO; +import com.yinlihupo.enlish.service.model.vo.vocabulary.FindStudentWordDetailReqVO; +import com.yinlihupo.enlish.service.model.vo.vocabulary.FindStudentWordDetailRspVO; import com.yinlihupo.enlish.service.model.vo.vocabulary.FindWordTitleReqVO; import com.yinlihupo.enlish.service.model.vo.vocabulary.FindWordTitleRspVO; import com.yinlihupo.enlish.service.service.VocabularyService; @@ -30,4 +32,11 @@ public class VocabularyController { .build(); return Response.success(findWordTitleRspVO); } + + @PostMapping("student/detail") + @ApiOperationLog(description = "查询学生单词详情") + public Response findStudentWordDetail(@RequestBody FindStudentWordDetailReqVO vo) { + return Response.success(vocabularyService.findStudentWordDetail(vo.getId())); + } + } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/WordMasteryLogDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/WordMasteryLogDOMapper.java index 67d78e8..202c4fd 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/WordMasteryLogDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/WordMasteryLogDOMapper.java @@ -20,4 +20,8 @@ public interface WordMasteryLogDOMapper { List selectByStudentIdAndLimitTime(@Param("studentId") Integer studentId); List selectAllByStudentId(@Param("studentId") Integer studentId); + + Integer selectMasteryCount(@Param("studentId") Integer studentId); + + Integer selectNotMasteryCount(@Param("studentId") Integer studentId); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/AddLessonPlanReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/AddLessonPlanReqVO.java index ea61616..7c6a6c9 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/AddLessonPlanReqVO.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/AddLessonPlanReqVO.java @@ -13,4 +13,5 @@ public class AddLessonPlanReqVO { private Integer studentId; private Integer unitId; + private Integer wordSize; } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailReqVO.java new file mode 100644 index 0000000..c355b33 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailReqVO.java @@ -0,0 +1,15 @@ +package com.yinlihupo.enlish.service.model.vo.vocabulary; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class FindStudentWordDetailReqVO { + + private Integer id; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailRspVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailRspVO.java new file mode 100644 index 0000000..ca51246 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/vocabulary/FindStudentWordDetailRspVO.java @@ -0,0 +1,27 @@ +package com.yinlihupo.enlish.service.model.vo.vocabulary; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Data +public class FindStudentWordDetailRspVO { + /** + * 已掌握单词数 + */ + private Integer masteredWordCount; + + /** + * 未掌握单词数 + */ + private Integer unmasteredWordCount; + + /** + * 待审查单词数(推荐使用,简洁通用) + */ + private Integer pendingReviewWordCount; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java index a9431ed..f06db4f 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java @@ -5,7 +5,7 @@ import com.yinlihupo.enlish.service.domain.dataobject.LessonPlansDO; import java.util.List; public interface LessonPlansService { - void generateLessonPlans(Integer studentId, Integer unitId); + void generateLessonPlans(Integer studentId, Integer unitId, Integer wordSize); List findLessonPlans(List ids); diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/VocabularyService.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/VocabularyService.java index 41f1a23..10f58ab 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/VocabularyService.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/VocabularyService.java @@ -2,10 +2,13 @@ package com.yinlihupo.enlish.service.service; import com.yinlihupo.enlish.service.domain.dataobject.VocabularyBankDO; +import com.yinlihupo.enlish.service.model.vo.vocabulary.FindStudentWordDetailRspVO; import java.util.List; public interface VocabularyService { List findVocabularyBankDOListById(List ids); + + FindStudentWordDetailRspVO findStudentWordDetail(Integer 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 b3c80a7..80b02c8 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 @@ -37,15 +37,10 @@ public class LessonPlansServiceImpl implements LessonPlansService { @Resource private DifyArticleClient difyArticleClient; - @Value("${templates.plan.weekday}") - private String planWeekday; - @Value("${templates.plan.weekend}") - private String planWeekend; - @Override @Transactional(rollbackFor = Exception.class) - public void generateLessonPlans(Integer studentId, Integer unitId) { + public void generateLessonPlans(Integer studentId, Integer unitId, Integer wordSize) { List vocabularyBankDOS = vocabularyBankDOMapper.selectVocabularyBankDOAllByUnitId(unitId); UnitDO unitDO = unitDOMapper.selectByPrimaryKey(unitId); GradeUnitDO gradeUnitDO = gradeUnitDOMapper.selectByUnitId(unitId); @@ -58,12 +53,19 @@ public class LessonPlansServiceImpl implements LessonPlansService { int countGap = gapSize / 5; int syncSize = vocabularyBankDOS.size(); - int countSync = syncSize / 5; + wordSize = wordSize <= 0 ? syncSize / 5 : wordSize; int checkTotal = 50; List> weeksSync = new ArrayList<>(); List> weeksGap = new ArrayList<>(); for (int i = 0; i < 5; i++) { - List syncVocabList = vocabularyBankDOS.subList(i * countSync, Math.min((i + 1) * countSync, syncSize)); + List syncVocabList; + if ((i + 1) * wordSize < syncSize) { + syncVocabList = vocabularyBankDOS.subList(i * wordSize, (i + 1) * wordSize); + } else if (i == 4) { + syncVocabList = vocabularyBankDOS.subList(i * wordSize, syncSize); + } else { + syncVocabList = vocabularyBankDOS.subList((syncSize - i) * wordSize, Math.min((syncSize - i + 1) * wordSize, syncSize)); + } List gapVocabList = vocabularyBankListStudentNotMaster.subList(i * countGap, Math.min(i * countGap + countGap, gapSize)); weeksSync.add(syncVocabList); weeksGap.add(gapVocabList); diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/vocabulary/VocabularyServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/vocabulary/VocabularyServiceImpl.java index 7e52bb5..9aed2be 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/vocabulary/VocabularyServiceImpl.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/vocabulary/VocabularyServiceImpl.java @@ -2,6 +2,8 @@ package com.yinlihupo.enlish.service.service.vocabulary; import com.yinlihupo.enlish.service.domain.dataobject.VocabularyBankDO; import com.yinlihupo.enlish.service.domain.mapper.VocabularyBankDOMapper; +import com.yinlihupo.enlish.service.domain.mapper.WordMasteryLogDOMapper; +import com.yinlihupo.enlish.service.model.vo.vocabulary.FindStudentWordDetailRspVO; import com.yinlihupo.enlish.service.service.VocabularyService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -14,9 +16,19 @@ public class VocabularyServiceImpl implements VocabularyService { @Resource private VocabularyBankDOMapper vocabularyBankDOMapper; + @Resource + private WordMasteryLogDOMapper wordMasteryLogDOMapper; @Override public List findVocabularyBankDOListById(List ids) { return vocabularyBankDOMapper.selectVocabularyBankDOListByIds(ids); } + + @Override + public FindStudentWordDetailRspVO findStudentWordDetail(Integer studentId) { + Integer wordMastery = wordMasteryLogDOMapper.selectMasteryCount(studentId); + Integer wordNotMastery = wordMasteryLogDOMapper.selectNotMasteryCount(studentId); + Integer total = vocabularyBankDOMapper.selectWordTotal(); + return FindStudentWordDetailRspVO.builder().masteredWordCount(wordMastery).unmasteredWordCount(wordNotMastery).pendingReviewWordCount(total - wordMastery - wordNotMastery).build(); + } } diff --git a/enlish-service/src/main/resources/config/application-dev.yml b/enlish-service/src/main/resources/config/application-dev.yml index 99f6bd8..86fc7de 100644 --- a/enlish-service/src/main/resources/config/application-dev.yml +++ b/enlish-service/src/main/resources/config/application-dev.yml @@ -26,7 +26,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_v1.docx + weekday: C:\project\java\enlish_edu\enlish\enlish-service\src\main\resources\templates\tem_study_plan_v2.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/mapper/VocabularyBankDOMapper.xml b/enlish-service/src/main/resources/mapper/VocabularyBankDOMapper.xml index 04acfc1..4d5ec67 100644 --- a/enlish-service/src/main/resources/mapper/VocabularyBankDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/VocabularyBankDOMapper.xml @@ -94,7 +94,7 @@ and id in ( select word_id from word_mastery_log - where memory_strength < 0 + where memory_strength <= 0 and student_id = #{studentId} ) ]]> diff --git a/enlish-service/src/main/resources/mapper/WordMasteryLogDOMapper.xml b/enlish-service/src/main/resources/mapper/WordMasteryLogDOMapper.xml index 5250858..4e5c58e 100644 --- a/enlish-service/src/main/resources/mapper/WordMasteryLogDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/WordMasteryLogDOMapper.xml @@ -22,6 +22,7 @@ order by memory_strength desc limit #{limit} + + + + + + + \ No newline at end of file diff --git a/enlish-service/src/main/resources/templates/tem_study_plan_v2.docx b/enlish-service/src/main/resources/templates/tem_study_plan_v2.docx new file mode 100644 index 0000000000000000000000000000000000000000..4365beb214fb39531e0fdec16ffc677280ca06ca GIT binary patch literal 16172 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 QnHGfbnO6_S@f-Ai0DG5Lz5oCK literal 0 HcmV?d00001 diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/plan/PlanTest.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/plan/PlanTest.java index 371b8eb..02cd806 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/plan/PlanTest.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/plan/PlanTest.java @@ -13,6 +13,6 @@ public class PlanTest { @Test public void test() { - lessonPlansService.generateLessonPlans(2, 146); + } } diff --git a/enlish-vue/src/api/plan.js b/enlish-vue/src/api/plan.js index b192194..44aa105 100644 --- a/enlish-vue/src/api/plan.js +++ b/enlish-vue/src/api/plan.js @@ -1,9 +1,10 @@ import axios from "@/axios"; -export function generateLessonPlan(studentId, unitId) { +export function generateLessonPlan(studentId, unitId, wordSize = 0) { return axios.post('/plan/generate', { studentId: studentId, - unitId: unitId + unitId: unitId, + wordSize: wordSize }) } diff --git a/enlish-vue/src/api/words.js b/enlish-vue/src/api/words.js index 97cffa7..acdb396 100644 --- a/enlish-vue/src/api/words.js +++ b/enlish-vue/src/api/words.js @@ -4,4 +4,10 @@ export function getWordsListByIds(ids) { return axios.post('/vocabulary/list', { ids: ids }) -} \ No newline at end of file +} + +export function getWordStudentDetail(studentId) { + return axios.post('/vocabulary/student/detail', { + id: studentId + }) +} diff --git a/enlish-vue/src/layouts/components/LessonPlanDialog.vue b/enlish-vue/src/layouts/components/LessonPlanDialog.vue index 3f9b9a4..3932be0 100644 --- a/enlish-vue/src/layouts/components/LessonPlanDialog.vue +++ b/enlish-vue/src/layouts/components/LessonPlanDialog.vue @@ -12,6 +12,9 @@ /> + + +
学生ID:{{ studentId }} @@ -45,6 +48,7 @@ const visible = computed({ const loading = ref(false) const unitId = ref(null) +const wordSize = ref(0) const unitOptions = ref([]) async function fetchUnits() { @@ -63,7 +67,7 @@ async function fetchUnits() { async function handleGenerate() { if (!unitId.value || !props.studentId) return - const res = await generateLessonPlan(Number(props.studentId), Number(unitId.value)) + const res = await generateLessonPlan(Number(props.studentId), Number(unitId.value), Number(wordSize.value)) const d = res?.data if (d.success) { ElMessage.success('生成学案任务已提交,请等待十分钟') diff --git a/enlish-vue/src/pages/student.vue b/enlish-vue/src/pages/student.vue index 13cdf0b..a29a9cb 100644 --- a/enlish-vue/src/pages/student.vue +++ b/enlish-vue/src/pages/student.vue @@ -6,8 +6,7 @@ -
+
学生详情
+
+
学生词汇统计
+ + +
+
学生考试记录
@@ -63,6 +76,7 @@ import { ref, onMounted, computed } from 'vue' import { useRoute } from 'vue-router' import { getStudentDetail, getStudentStudyAnalyze } from '@/api/student' import { getStudentExamHistory } from '@/api/exam' +import { getWordStudentDetail } from '@/api/words' import ExamHistoryChart from '@/layouts/components/student/ExamHistoryChart.vue' import PlanHistoryChart from '@/layouts/components/student/PlanHistoryChart.vue' import WordMasteryHeatmap from '@/layouts/components/student/WordMasteryHeatmap.vue' @@ -74,6 +88,7 @@ const route = useRoute() const history = ref([]) const analyzeLoading = ref(false) const analysisText = ref('') +const wordStat = ref(null) const md = new MarkdownIt({ html: false, linkify: true, @@ -122,8 +137,17 @@ async function fetchStudyAnalyze() { } } +async function fetchWordStat() { + const id = route.params.id + if (!id) return + const res = await getWordStudentDetail(Number(id)) + const d = res.data + wordStat.value = d?.data || null +} + onMounted(() => { fetchDetail() fetchExamHistory() + fetchWordStat() })