From 49cd146bc35f465b1ae57a75c92617f5e9b25eee Mon Sep 17 00:00:00 2001 From: lbw <1192299468@qq.com> Date: Wed, 17 Dec 2025 11:47:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(plan):=20=E6=B7=BB=E5=8A=A0=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=AD=A6=E6=A1=88=E5=8A=9F=E8=83=BD=E5=8F=8A=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 AddLessonPlanReqVO 数据模型用于生成学案请求参数封装 - 新增 LessonPlanController 提供生成学案的后端接口,支持异步任务执行 - 新增 LessonPlanDialog 组件,实现前端学案生成弹窗及交互逻辑 - 在班级页面添加生成学案按钮,支持单个学生选择后调用弹窗 - 添加 plan.js 接口调用封装,调用后端生成学案接口 - 完成前后端联动,实现生成学案操作的完整流程和提示信息 --- .../controller/LessonPlanController.java | 41 +++++++++ .../model/vo/plan/AddLessonPlanReqVO.java | 16 ++++ .../service/plan/LessonPlansServiceImpl.java | 2 + enlish-vue/src/api/plan.js | 8 ++ .../layouts/components/LessonPlanDialog.vue | 88 +++++++++++++++++++ enlish-vue/src/pages/class.vue | 10 +++ 6 files changed, 165 insertions(+) create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/AddLessonPlanReqVO.java create mode 100644 enlish-vue/src/api/plan.js create mode 100644 enlish-vue/src/layouts/components/LessonPlanDialog.vue 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 new file mode 100644 index 0000000..abda158 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java @@ -0,0 +1,41 @@ +package com.yinlihupo.enlish.service.controller; + +import com.yinlihupo.enlish.service.model.vo.plan.AddLessonPlanReqVO; +import com.yinlihupo.enlish.service.service.LessonPlansService; +import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog; +import com.yinlihupo.framework.common.response.Response; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.concurrent.Executor; + +@RequestMapping("/plan/") +@RestController +@Slf4j +public class LessonPlanController { + + @Resource + private LessonPlansService lessonPlanService; + + @Resource(name = "taskExecutor") + private Executor taskExecutor; + + @PostMapping("generate") + @ApiOperationLog(description = "生成学案") + public Response generateLessonPlan(@RequestBody AddLessonPlanReqVO addLessonPlanReqVO) { + Integer studentId = addLessonPlanReqVO.getStudentId(); + Integer unitId = addLessonPlanReqVO.getUnitId(); + try { + taskExecutor.execute(() -> lessonPlanService.generateLessonPlans(studentId, unitId)); + return Response.success("生成学案成功,请等待 10 分钟"); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail("生成学案失败" + e.getMessage()); + } + + } +} 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 new file mode 100644 index 0000000..ea61616 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/AddLessonPlanReqVO.java @@ -0,0 +1,16 @@ +package com.yinlihupo.enlish.service.model.vo.plan; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Data +public class AddLessonPlanReqVO { + + private Integer studentId; + private Integer unitId; +} 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 b587d83..ae52a3d 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 @@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.nullness.qual.NonNull; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.*; @@ -43,6 +44,7 @@ public class LessonPlansServiceImpl implements LessonPlansService { @Override + @Transactional(rollbackFor = Exception.class) public void generateLessonPlans(Integer studentId, Integer unitId) { List vocabularyBankDOS = vocabularyBankDOMapper.selectVocabularyBankDOAllByUnitId(unitId); UnitDO unitDO = unitDOMapper.selectByPrimaryKey(unitId); diff --git a/enlish-vue/src/api/plan.js b/enlish-vue/src/api/plan.js new file mode 100644 index 0000000..74443f1 --- /dev/null +++ b/enlish-vue/src/api/plan.js @@ -0,0 +1,8 @@ +import axios from "@/axios"; + +export function generateLessonPlan(studentId, unitId) { + return axios.post('/plan/generate', { + studentId: studentId, + unitId: unitId + }) +} \ No newline at end of file diff --git a/enlish-vue/src/layouts/components/LessonPlanDialog.vue b/enlish-vue/src/layouts/components/LessonPlanDialog.vue new file mode 100644 index 0000000..3f9b9a4 --- /dev/null +++ b/enlish-vue/src/layouts/components/LessonPlanDialog.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/enlish-vue/src/pages/class.vue b/enlish-vue/src/pages/class.vue index bb3b161..58e47ba 100644 --- a/enlish-vue/src/pages/class.vue +++ b/enlish-vue/src/pages/class.vue @@ -49,6 +49,10 @@ @click="showGenerateDialog = true"> 生成试题 + + 生成学案 + @@ -79,6 +83,10 @@ :default-grade-id="selectedGradeId" @success="fetchStudents" /> +
@@ -156,6 +164,7 @@ import ExamGenerateDialog from '@/layouts/components/ExamGenerateDialog.vue' import AddClassDialog from '@/layouts/components/AddClassDialog.vue' import AddGradeDialog from '@/layouts/components/AddGradeDialog.vue' import AddStudentDialog from '@/layouts/components/AddStudentDialog.vue' +import LessonPlanDialog from '@/layouts/components/LessonPlanDialog.vue' import { getUnitList, deleteUnit } from '@/api/unit' import AddUnitDialog from '@/layouts/components/AddUnitDialog.vue' @@ -189,6 +198,7 @@ const studentTableRef = ref(null) const selectedStudentIds = ref([]) const showGenerateDialog = ref(false) const showAddStudentDialog = ref(false) +const showLessonPlanDialog = ref(false) const units = ref([]) const unitPageNo = ref(1)