package com.mindskip.xzs.controller.admin; 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.vo.SubjectDeptVO; import com.mindskip.xzs.repository.SubjectDeptMapper; 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 lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; import java.util.stream.Collectors; @RestController("AdminEducationController") @RequestMapping(value = "/api/admin/education") @RequiredArgsConstructor public class EducationController extends BaseApiController { private final SubjectService subjectService; private final SubjectDeptMapper subjectDeptMapper; private final QuestionSubjectService questionSubjectService; private final ExamPaperSubjectService examPaperSubjectService; private final ExamPaperDepartmentService examPaperDepartmentService; private final ExamPaperService examPaperService; @RequestMapping(value = "/subject/list", method = RequestMethod.POST) public RestResponse> list() { List subjects = subjectService.allSubject(); return RestResponse.ok(subjects); } @RequestMapping(value = "/subject/select/dept/{deptId}", method = RequestMethod.GET) public RestResponse> listByDeptId(@PathVariable("deptId") Integer deptId) { List subjects = subjectService.listByDeptId(deptId); return RestResponse.ok(subjects); } @RequestMapping(value = "/subject/page", method = RequestMethod.POST) public RestResponse> pageList(@RequestBody SubjectPageRequestVM model) { PageInfo pageInfo = subjectService.page(model); PageInfo page = PageInfoHelper.copyMap(pageInfo, item -> { SubjectResponseVM vo = new SubjectResponseVM(); BeanUtils.copyProperties(item, vo); List subjectDeptVOS = subjectDeptMapper.deptBySubjectId(item.getId()); List 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); } @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 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 select(@PathVariable Integer id) { Subject subject = subjectService.selectById(id); SubjectEditRequestVM vm = modelMapper.map(subject, SubjectEditRequestVM.class); List subjectDeptVOS = subjectDeptMapper.deptBySubjectId(id); List deptIds = subjectDeptVOS.stream().map(SubjectDeptVO::getDeptId).collect(Collectors.toList()); vm.setDeptIds(deptIds); return RestResponse.ok(vm); } @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); questionSubjectService.removeSubjectId(id); Integer[] ids = examPaperSubjectService.getBySubjectId(id) .stream().map(ExamPaperSubject::getExamPaperId).toArray(Integer[]::new); examPaperService.removeByIds(ids); examPaperDepartmentService.removeByExamPaperIds(ids); examPaperSubjectService.removeBySubjectId(id); return RestResponse.ok(); } }