xiangpei
2024-07-08 d69a9a79a82c8a2f93efcd2b43b0a03ca57a031c
src/main/java/com/mindskip/xzs/controller/admin/EducationController.java
@@ -6,7 +6,12 @@
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.service.*;
import com.mindskip.xzs.utility.PageInfoHelper;
@@ -14,14 +19,16 @@
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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@RestController("AdminEducationController")
@@ -35,12 +42,26 @@
    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)
    public RestResponse<List<Subject>> list() {
        List<Subject> subjects = subjectService.allSubject();
        return RestResponse.ok(subjects);
    }
    @PostMapping("/subject/add")
    public RestResponse<Object> add(@RequestBody @Validated AddSubjectForm form) {
        subjectService.add(form);
        return RestResponse.ok();
    }
    @PostMapping("/subject/edit")
    public RestResponse<Object> edit(@RequestBody @Validated EditSubjectForm form) {
        subjectService.edit(form);
        return RestResponse.ok();
    }
    @RequestMapping(value = "/subject/select/dept/{deptId}", method = RequestMethod.GET)
@@ -50,42 +71,69 @@
    }
    @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;
        });
        return RestResponse.ok(page);
    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());
        // 构建树
        return RestResponse.ok(this.buildTree(data));
    }
    @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);
    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 {
            subjectService.updateByIdFilter(subject);
                DeptSubjectCascaderVO parent = map.get(dept.getParentId());
                if (parent != null) {
                    parent.getChildren().add(dept);
        }
        // 处理部门
        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();
    }
        }
        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) {