| | |
| | | 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") |
| | |
| | | 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) |
| | |
| | | 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) { |
| | |
| | | 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(); |
| | | } |