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)