xiangpei
2025-05-14 47cd9ecc0eff38ffe6b3b794b2bf197e958f4403
src/main/java/com/mindskip/xzs/controller/admin/EducationController.java
@@ -1,27 +1,34 @@
package com.mindskip.xzs.controller.admin;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.ExamPaperSubject;
import com.mindskip.xzs.domain.Subject;
import com.mindskip.xzs.domain.SubjectDept;
import com.mindskip.xzs.domain.form.AddSubjectForm;
import com.mindskip.xzs.domain.form.EditSubjectForm;
import com.mindskip.xzs.domain.vo.CascaderDataVO;
import com.mindskip.xzs.domain.vo.DeptSubjectCascaderVO;
import com.mindskip.xzs.domain.vo.SubjectDeptVO;
import com.mindskip.xzs.repository.DepartmentMapper;
import com.mindskip.xzs.repository.SubjectDeptMapper;
import com.mindskip.xzs.repository.SubjectMapper;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.admin.education.SubjectEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.education.SubjectResponseVM;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.vo.SubjectVO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController("AdminEducationController")
@@ -30,11 +37,14 @@
public class EducationController extends BaseApiController {
    private final SubjectService subjectService;
    private final SubjectMapper subjectMapper;
    private final SubjectDeptMapper subjectDeptMapper;
    private final QuestionSubjectService questionSubjectService;
    private final ExamPaperSubjectService examPaperSubjectService;
    private final ExamPaperDepartmentService examPaperDepartmentService;
    private final ExamPaperService examPaperService;
    private final DepartmentService departmentService;
    private final DepartmentMapper departmentMapper;
    @RequestMapping(value = "/subject/list", method = RequestMethod.POST)
@@ -43,43 +53,120 @@
        return RestResponse.ok(subjects);
    }
    @RequestMapping(value = "/subject/page", method = RequestMethod.POST)
    public RestResponse<PageInfo<SubjectResponseVM>> pageList(@RequestBody SubjectPageRequestVM model) {
        PageInfo<Subject> pageInfo = subjectService.page(model);
        PageInfo<SubjectResponseVM> page = PageInfoHelper.copyMap(pageInfo, item -> {
            SubjectResponseVM vo = new SubjectResponseVM();
            BeanUtils.copyProperties(item, vo);
            List<SubjectDeptVO> subjectDeptVOS = subjectDeptMapper.deptBySubjectId(item.getId());
            List<Integer> deptIds = subjectDeptVOS.stream().map(SubjectDeptVO::getDeptId).collect(Collectors.toList());
            String deptNames = subjectDeptVOS.stream().map(SubjectDeptVO::getDeptName).collect(Collectors.joining("、"));
            vo.setDeptIds(deptIds);
            vo.setDeptNames(deptNames);
            return vo;
        });
    @PostMapping("/subject/add")
    public RestResponse<Object> add(@RequestBody @Validated AddSubjectForm form) {
        return subjectService.add(form);
    }
    @PostMapping("/subject/save")
    public RestResponse<Object> save(@RequestBody @Validated Subject form) {
        form.setDeleted(Boolean.FALSE);
        try {
            subjectMapper.insert(form);
        } catch (Exception e) {
            return RestResponse.fail(500, "课目名不能重复");
        }
        return RestResponse.ok();
    }
    @PostMapping("/subject/edit")
    public RestResponse<Object> edit(@RequestBody @Validated EditSubjectForm form) {
        subjectService.edit(form);
        return RestResponse.ok();
    }
    @PostMapping("/subject/edit1")
    @Transactional(rollbackFor = Exception.class)
    public RestResponse<Object> edit1(@RequestBody Subject form) {
        form.setDeleted(Boolean.FALSE);
        try {
            subjectService.updateById(form);
        } catch (Exception e) {
            return RestResponse.fail(500, "课目名不能重复");
        }
        return RestResponse.ok();
    }
    @RequestMapping(value = "/subject/select/dept/{deptId}", method = RequestMethod.GET)
    public RestResponse<List<Subject>> listByDeptId(@PathVariable("deptId") Integer deptId) {
        List<Subject> subjects = subjectService.listByDeptId(deptId);
        return RestResponse.ok(subjects);
    }
    @RequestMapping(value = "/subject/page1", method = RequestMethod.POST)
    public RestResponse<Object> page(@RequestBody SubjectPageRequestVM model) {
        PageInfo<SubjectVO> page = PageHelper.startPage(model.getPageIndex(), model.getPageSize(), "id desc").doSelectPageInfo(() ->
                departmentMapper.page1(model));
        return RestResponse.ok(page);
    }
    @Transactional(rollbackFor = Exception.class)
    @RequestMapping(value = "/subject/edit", method = RequestMethod.POST)
    public RestResponse edit(@RequestBody @Valid SubjectEditRequestVM model) {
        Subject subject = modelMapper.map(model, Subject.class);
        if (model.getId() == null) {
            subject.setDeleted(false);
            subjectService.insertByFilter(subject);
        } else {
            subjectService.updateByIdFilter(subject);
        }
        // 处理部门
        subjectDeptMapper.removeBySubjectId(subject.getId());
        List<SubjectDept> subjectDeptList = model.getDeptIds().stream().map(deptId -> {
            SubjectDept subjectDept = new SubjectDept();
            subjectDept.setSubjectId(subject.getId());
            subjectDept.setDeptId(deptId);
            return subjectDept;
    @RequestMapping(value = "/subject/page", method = RequestMethod.POST)
    public RestResponse<Object> pageList(@RequestBody SubjectPageRequestVM model) {
        List<CascaderDataVO> deptList = departmentMapper.list();
        List<DeptSubjectCascaderVO> data = deptList.stream().map(dept -> {
            DeptSubjectCascaderVO deptCascaderVO = new DeptSubjectCascaderVO();
            deptCascaderVO.setId(dept.getValue());
            deptCascaderVO.setName(dept.getLabel());
            deptCascaderVO.setParentId(dept.getParentId());
            List<SubjectVO> subjectDeptVOS = subjectDeptMapper.getByDeptId(dept.getValue());
            List<Long> subjectIds = subjectDeptVOS.stream().map(SubjectVO::getId).collect(Collectors.toList());
            deptCascaderVO.setSubjectIds(subjectIds);
            String subjectNames = subjectDeptVOS.stream().map(SubjectVO::getSubjectName).collect(Collectors.joining(","));
            deptCascaderVO.setSubjectNames(subjectNames);
            return deptCascaderVO;
        }).collect(Collectors.toList());
        subjectDeptMapper.add(subjectDeptList);
        return RestResponse.ok();
        // 构建树
        return RestResponse.ok(this.buildTree(data));
    }
    public List<DeptSubjectCascaderVO> buildTree(List<DeptSubjectCascaderVO> departments) {
        // 用于存储已经放入树的节点,以value为键
        Map<Integer, DeptSubjectCascaderVO> map = new HashMap<>();
        List<DeptSubjectCascaderVO> rootNodes = new ArrayList<>();
        // 第一步:将所有节点放入map中,并初始化children列表
        for (DeptSubjectCascaderVO dept : departments) {
            map.put(dept.getId(), dept);
            dept.setChildren(new ArrayList<>());
        }
        // 第二步:构建树形结构
        for (DeptSubjectCascaderVO dept : departments) {
            if (dept.getParentId() == null) { // 假设顶级部门的parentId为null或0
                rootNodes.add(dept);
            } else {
                DeptSubjectCascaderVO parent = map.get(dept.getParentId());
                if (parent != null) {
                    parent.getChildren().add(dept);
                }
            }
        }
        return rootNodes;
    }
//    @Transactional(rollbackFor = Exception.class)
//    @RequestMapping(value = "/subject/edit", method = RequestMethod.POST)
//    public RestResponse edit(@RequestBody @Valid SubjectEditRequestVM model) {
//        Subject subject = modelMapper.map(model, Subject.class);
//        if (model.getId() == null) {
//            subject.setDeleted(false);
//            subjectService.insertByFilter(subject);
//        } else {
//            subjectService.updateByIdFilter(subject);
//        }
//        // 处理部门
//        subjectDeptMapper.removeBySubjectId(subject.getId());
//        List<SubjectDept> subjectDeptList = model.getDeptIds().stream().map(deptId -> {
//            SubjectDept subjectDept = new SubjectDept();
//            subjectDept.setSubjectId(subject.getId());
//            subjectDept.setDeptId(deptId);
//            return subjectDept;
//        }).collect(Collectors.toList());
//        subjectDeptMapper.add(subjectDeptList);
//        return RestResponse.ok();
//    }
    @RequestMapping(value = "/subject/select/{id}", method = RequestMethod.POST)
    public RestResponse<SubjectEditRequestVM> select(@PathVariable Integer id) {
@@ -91,16 +178,18 @@
        return RestResponse.ok(vm);
    }
    @Transactional(rollbackFor = Exception.class)
    @RequestMapping(value = "/subject/delete/{id}", method = RequestMethod.POST)
    public RestResponse delete(@PathVariable Integer id) {
        Subject subject = subjectService.selectById(id);
        subject.setDeleted(true);
        subjectService.updateByIdFilter(subject);
        subjectService.deleteById(id);
        questionSubjectService.removeSubjectId(id);
        Integer[] ids = examPaperSubjectService.getBySubjectId(id)
                .stream().map(ExamPaperSubject::getExamPaperId).toArray(Integer[]::new);
        examPaperService.removeByIds(ids);
        examPaperDepartmentService.removeByExamPaperIds(ids);
        if (ids.length > 0) {
            examPaperService.removeByIds(ids);
            examPaperDepartmentService.removeByExamPaperIds(ids);
        }
        examPaperSubjectService.removeBySubjectId(id);
        return RestResponse.ok();
    }