diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/UnitController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/UnitController.java new file mode 100644 index 0000000..64aafa9 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/UnitController.java @@ -0,0 +1,73 @@ +package com.yinlihupo.enlish.service.controller; + +import com.yinlihupo.enlish.service.domain.dataobject.UnitDO; +import com.yinlihupo.enlish.service.model.vo.unit.AddUnitReqVO; +import com.yinlihupo.enlish.service.model.vo.unit.DeleteUnitReqVO; +import com.yinlihupo.enlish.service.model.vo.unit.FindUnitListReqVO; +import com.yinlihupo.enlish.service.model.vo.unit.FindUnitListRspVO; +import com.yinlihupo.enlish.service.service.UnitService; +import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog; +import com.yinlihupo.framework.common.response.PageResponse; +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.List; + +@RequestMapping("/unit/") +@RestController +@Slf4j +public class UnitController { + + @Resource + private UnitService unitService; + + @PostMapping("/list") + @ApiOperationLog(description = "查询单元") + public PageResponse list(@RequestBody FindUnitListReqVO findUnitListReqVO) { + Integer page = findUnitListReqVO.getPage(); + Integer size = findUnitListReqVO.getSize(); + Integer unitDOListCount = unitService.findUnitDOListCount(); + + List unitDOList = unitService.findUnitDOList(page, size); + List findUnitListRspVOS = unitDOList.stream().map(unitDO -> FindUnitListRspVO.builder() + .id(unitDO.getId()) + .title(unitDO.getTitle()) + .version(unitDO.getVersion()) + .createAt(unitDO.getCreateAt()) + .build() + ).toList(); + + return PageResponse.success(findUnitListRspVOS, page, unitDOListCount, size); + } + + @PostMapping("/add") + @ApiOperationLog(description = "添加单元") + public Response add(@RequestBody AddUnitReqVO addUnitReqVO) { + try { + unitService.add(addUnitReqVO); + + return Response.success(); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(e.getMessage()); + } + } + + @PostMapping("/delete") + @ApiOperationLog(description = "删除单元") + public Response delete(@RequestBody DeleteUnitReqVO deleteUnitReqVO) { + try { + unitService.delete(deleteUnitReqVO.getId()); + + return Response.success(); + } catch (Exception e) { + log.error(e.getMessage()); + return Response.fail(e.getMessage()); + } + } +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/GradeUnitDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/GradeUnitDOMapper.java index 5d215e5..6334095 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/GradeUnitDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/GradeUnitDOMapper.java @@ -10,4 +10,8 @@ public interface GradeUnitDOMapper { List selectUnitIdsByGradeId(@Param("gradeId") Integer gradeId); GradeUnitDO selectByUnitId(@Param("unitId") Integer unitId); + + int insert(GradeUnitDO record); + + int deleteByUnitId(@Param("unitId") Integer unitId); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UnitDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UnitDOMapper.java index c09acf1..b148685 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UnitDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/UnitDOMapper.java @@ -1,6 +1,9 @@ package com.yinlihupo.enlish.service.domain.mapper; import com.yinlihupo.enlish.service.domain.dataobject.UnitDO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface UnitDOMapper { int deleteByPrimaryKey(Integer id); @@ -18,4 +21,8 @@ public interface UnitDOMapper { int updateByPrimaryKey(UnitDO record); UnitDO selectByTitle(String title); + + List selectUnitDOList(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize); + + Integer selectUnitDOListCount(); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/AddUnitReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/AddUnitReqVO.java new file mode 100644 index 0000000..297cbc3 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/AddUnitReqVO.java @@ -0,0 +1,16 @@ +package com.yinlihupo.enlish.service.model.vo.unit; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class AddUnitReqVO { + + private String title; + private Integer gradeId; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/DeleteUnitReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/DeleteUnitReqVO.java new file mode 100644 index 0000000..3f11b49 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/DeleteUnitReqVO.java @@ -0,0 +1,15 @@ +package com.yinlihupo.enlish.service.model.vo.unit; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class DeleteUnitReqVO { + + private Integer id; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/FindUnitListReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/FindUnitListReqVO.java new file mode 100644 index 0000000..9e643fd --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/FindUnitListReqVO.java @@ -0,0 +1,16 @@ +package com.yinlihupo.enlish.service.model.vo.unit; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class FindUnitListReqVO { + + private Integer page; + private Integer size; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/FindUnitListRspVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/FindUnitListRspVO.java new file mode 100644 index 0000000..bf8002c --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/unit/FindUnitListRspVO.java @@ -0,0 +1,35 @@ +package com.yinlihupo.enlish.service.model.vo.unit; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class FindUnitListRspVO { + + /** + * 主键 + */ + private Integer id; + + /** + * 年级/单元 + */ + private String title; + + /** + * 版本 + */ + private String version; + + /** + * 创建时间 + */ + private LocalDateTime createAt; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/UnitService.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/UnitService.java new file mode 100644 index 0000000..a8cd093 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/UnitService.java @@ -0,0 +1,17 @@ +package com.yinlihupo.enlish.service.service; + +import com.yinlihupo.enlish.service.domain.dataobject.UnitDO; +import com.yinlihupo.enlish.service.model.vo.unit.AddUnitReqVO; + +import java.util.List; + +public interface UnitService { + + List findUnitDOList(Integer page, Integer size); + + Integer findUnitDOListCount(); + + void add(AddUnitReqVO addUnitReqVO); + + void delete(Integer id); +} 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 79120af..b587d83 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,8 +1,5 @@ package com.yinlihupo.enlish.service.service.plan; -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.config.Configure; -import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; import com.yinlihupo.enlish.service.constant.LessonPlanConstant; import com.yinlihupo.enlish.service.domain.dataobject.*; import com.yinlihupo.enlish.service.domain.mapper.*; @@ -11,12 +8,12 @@ import com.yinlihupo.enlish.service.utils.DifyArticleClient; import com.yinlihupo.enlish.service.utils.StringToPlanMapUtil; import com.yinlihupo.framework.common.util.JsonUtils; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; 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 java.io.FileOutputStream; import java.io.IOException; import java.util.*; @@ -151,6 +148,8 @@ public class LessonPlansServiceImpl implements LessonPlansService { } } + + private Map generateWeekendPlans(List checkList, int day, GradeDO gradeDO, UnitDO unitDO, Integer studentId) throws IOException { @@ -158,14 +157,14 @@ public class LessonPlansServiceImpl implements LessonPlansService { Map data = new HashMap<>(); data.put("title", "第" + day + "天" + "复习" + gradeDO.getTitle() + unitDO.getTitle() + studentId); data.put("checkList", checkList); - LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); - Configure config = Configure.builder() - .bind("checkList", policy) - .build(); - - XWPFTemplate template = XWPFTemplate.compile(planWeekend, config); - template.render(data); - template.writeAndClose(new FileOutputStream("C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\tmp\\word" + "复习" + day + ".docx")); +// LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); +// Configure config = Configure.builder() +// .bind("checkList", policy) +// .build(); +// +// XWPFTemplate template = XWPFTemplate.compile(planWeekend, config); +// template.render(data); +// template.writeAndClose(new FileOutputStream("C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\tmp\\word" + "复习" + day + ".docx")); return data; } @@ -229,22 +228,22 @@ public class LessonPlansServiceImpl implements LessonPlansService { data.put("articleBans", mapB.get(LessonPlanConstant.ANSWER_KEY_EXPLANATION)); data.put("articleBtran", mapB.get(LessonPlanConstant.FULL_TRANSLATION)); - LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); - Configure config = Configure.builder() - .bind("syncVocabList", policy) - .bind("gapVocabList", policy) - .bind("reviewVocabList", policy) - .bind("drillRound1", policy) - .bind("drillRound2", policy) - .bind("drillRound3", policy) - .bind("mixedDrill", policy) - .bind("checkList", policy) - .bind("checkListAns", policy) - .build(); - - XWPFTemplate template = XWPFTemplate.compile(planWeekday, config); - template.render(data); - template.writeAndClose(new FileOutputStream("C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\tmp\\word" + title + ".docx")); +// LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); +// Configure config = Configure.builder() +// .bind("syncVocabList", policy) +// .bind("gapVocabList", policy) +// .bind("reviewVocabList", policy) +// .bind("drillRound1", policy) +// .bind("drillRound2", policy) +// .bind("drillRound3", policy) +// .bind("mixedDrill", policy) +// .bind("checkList", policy) +// .bind("checkListAns", policy) +// .build(); +// +// XWPFTemplate template = XWPFTemplate.compile(planWeekday, config); +// template.render(data); +// template.writeAndClose(new FileOutputStream("C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\tmp\\word" + title + ".docx")); return data; } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/unit/UnitServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/unit/UnitServiceImpl.java new file mode 100644 index 0000000..1d2e240 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/unit/UnitServiceImpl.java @@ -0,0 +1,51 @@ +package com.yinlihupo.enlish.service.service.unit; + +import com.yinlihupo.enlish.service.domain.dataobject.GradeUnitDO; +import com.yinlihupo.enlish.service.domain.dataobject.UnitDO; +import com.yinlihupo.enlish.service.domain.mapper.GradeUnitDOMapper; +import com.yinlihupo.enlish.service.domain.mapper.UnitDOMapper; +import com.yinlihupo.enlish.service.model.vo.unit.AddUnitReqVO; +import com.yinlihupo.enlish.service.service.UnitService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +public class UnitServiceImpl implements UnitService { + + @Resource + private UnitDOMapper unitDOMapper; + @Resource + private GradeUnitDOMapper gradeUnitDOMapper; + + @Override + public List findUnitDOList(Integer page, Integer size) { + return unitDOMapper.selectUnitDOList((page - 1) * size, size); + } + + @Override + public Integer findUnitDOListCount() { + return unitDOMapper.selectUnitDOListCount(); + } + + @Override + public void add(AddUnitReqVO addUnitReqVO) { + + UnitDO unitDO = UnitDO.builder() + .title(addUnitReqVO.getTitle()) + .createAt(LocalDateTime.now()) + .build(); + unitDOMapper.insertSelective(unitDO); + + Integer gradeId = addUnitReqVO.getGradeId(); + gradeUnitDOMapper.insert(GradeUnitDO.builder().gradeId(gradeId).unitId(unitDO.getId()).build()); + } + + @Override + public void delete(Integer id) { + unitDOMapper.deleteByPrimaryKey(id); + gradeUnitDOMapper.deleteByUnitId(id); + } +} diff --git a/enlish-service/src/main/resources/mapper/GradeUnitDOMapper.xml b/enlish-service/src/main/resources/mapper/GradeUnitDOMapper.xml index 9498bae..fe233ca 100644 --- a/enlish-service/src/main/resources/mapper/GradeUnitDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/GradeUnitDOMapper.xml @@ -19,5 +19,13 @@ where unit_id = #{unitId} + + insert into grade_unit (grade_id, unit_id) + values (#{gradeId}, #{unitId}) + + + delete from grade_unit + where unit_id = #{unitId} + \ No newline at end of file diff --git a/enlish-service/src/main/resources/mapper/UnitDOMapper.xml b/enlish-service/src/main/resources/mapper/UnitDOMapper.xml index 7eefcbf..f58a88e 100644 --- a/enlish-service/src/main/resources/mapper/UnitDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/UnitDOMapper.xml @@ -91,4 +91,15 @@ where title = #{title} + + + + \ No newline at end of file diff --git a/enlish-vue/src/api/unit.js b/enlish-vue/src/api/unit.js new file mode 100644 index 0000000..f3ffec1 --- /dev/null +++ b/enlish-vue/src/api/unit.js @@ -0,0 +1,21 @@ +import axios from "@/axios"; + +export function getUnitList(page, size) { + return axios.post('/unit/list', { + page: page, + size: size + }) +} + +export function addUnit(name, gradeId) { + return axios.post('/unit/add', { + title: name, + gradeId: gradeId + }) +} + +export function deleteUnit(id) { + return axios.post('/unit/delete', { + id: id + }) +} \ No newline at end of file diff --git a/enlish-vue/src/layouts/components/AddUnitDialog.vue b/enlish-vue/src/layouts/components/AddUnitDialog.vue new file mode 100644 index 0000000..142bd59 --- /dev/null +++ b/enlish-vue/src/layouts/components/AddUnitDialog.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/enlish-vue/src/pages/class.vue b/enlish-vue/src/pages/class.vue index 5049202..bb3b161 100644 --- a/enlish-vue/src/pages/class.vue +++ b/enlish-vue/src/pages/class.vue @@ -35,7 +35,7 @@ -
+
学生查询
@@ -105,6 +105,40 @@
+
+
单元列表
+ + + + + + + + + +
+ +
+
+ 新增单元 +
+ +
+
@@ -116,12 +150,14 @@ import Header from '@/layouts/components/Header.vue' import { ref, onMounted } from 'vue' import { getClassList, deleteClass } from '@/api/class' -import { getGradeList } from '@/api/grade' +import { getGradeList, deleteGrade } from '@/api/grade' import { getStudentList, deleteStudent } from '@/api/student' 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 { getUnitList, deleteUnit } from '@/api/unit' +import AddUnitDialog from '@/layouts/components/AddUnitDialog.vue' const classes = ref([]) const pageNo = ref(1) @@ -154,6 +190,14 @@ const selectedStudentIds = ref([]) const showGenerateDialog = ref(false) const showAddStudentDialog = ref(false) +const units = ref([]) +const unitPageNo = ref(1) +const unitPageSize = ref(10) +const unitTotalCount = ref(0) +const unitLoading = ref(false) +const unitTableRef = ref(null) +const showAddUnitDialog = ref(false) + async function fetchClasses() { loading.value = true try { @@ -303,9 +347,48 @@ async function onDeleteGrade(row) { } } +async function fetchUnits() { + unitLoading.value = true + try { + const res = await getUnitList(unitPageNo.value, unitPageSize.value) + const d = res.data + units.value = Array.isArray(d.data) ? d.data : [] + unitTotalCount.value = d.totalCount || 0 + unitPageNo.value = d.pageNo || unitPageNo.value + unitPageSize.value = d.pageSize || unitPageSize.value + } finally { + unitLoading.value = false + } +} +function handleUnitPageChange(p) { + unitPageNo.value = p + fetchUnits() +} +function handleUnitSizeChange(s) { + unitPageSize.value = s + unitPageNo.value = 1 + fetchUnits() +} +async function onDeleteUnit(row) { + try { + const res = await deleteUnit(row.id) + const data = res.data + console.log(data) + if (data.success) { + ElMessage.success('删除成功') + } else { + ElMessage.error(data.message || '删除失败') + } + await fetchUnits() + } catch (e) { + ElMessage.error('删除失败') + } +} + onMounted(() => { fetchClasses() fetchGrades() fetchStudents() + fetchUnits() })