package com.mindskip.xzs.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.mindskip.xzs.domain.*; import com.mindskip.xzs.domain.vo.ExamTemplatesVO; import com.mindskip.xzs.repository.BaseMapper; import com.mindskip.xzs.repository.ExamTemplatesMapper; import com.mindskip.xzs.repository.ExamTemplatesQuestionMapper; import com.mindskip.xzs.repository.ExamTemplatesSubjectMapper; import com.mindskip.xzs.service.DepartmentService; import com.mindskip.xzs.service.ExamPaperService; import com.mindskip.xzs.service.ExamTemplatesService; import com.mindskip.xzs.service.ExamTemplatesUserCountService; import com.mindskip.xzs.utility.convert.ExamTemplatesClassConvert; import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM; import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperTitleItemVM; import com.mindskip.xzs.viewmodel.admin.exam.QuestionTypeVM; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Service public class ExamTemplatesServiceImpl extends BaseServiceImpl implements ExamTemplatesService { private final ExamTemplatesMapper examTemplatesMapper; private final ExamTemplatesQuestionMapper examTemplatesQuestionMapper; private final ExamTemplatesSubjectMapper examTemplatesSubjectMapper; private final DepartmentService departmentService; private final ExamPaperService examPaperService; private final ExamTemplatesUserCountService examTemplatesUserCountService; public ExamTemplatesServiceImpl(BaseMapper baseMapper, ExamTemplatesMapper examTemplatesMapper, ExamTemplatesQuestionMapper examTemplatesQuestionMapper, ExamTemplatesSubjectMapper examTemplatesSubjectMapper, DepartmentService departmentService, ExamPaperService examPaperService, ExamTemplatesUserCountService examTemplatesUserCountService) { super(baseMapper); this.examTemplatesMapper = examTemplatesMapper; this.examTemplatesQuestionMapper = examTemplatesQuestionMapper; this.examTemplatesSubjectMapper = examTemplatesSubjectMapper; this.departmentService = departmentService; this.examPaperService = examPaperService; this.examTemplatesUserCountService = examTemplatesUserCountService; } @Transactional(rollbackFor = Exception.class) @Override public void add(ExamPaperEditRequestVM model) { if (model.getId() != null) { removes(model.getId()); } ExamTemplates examTemplates = ExamTemplatesClassConvert.INSTANCE.ExamPaperEditRequestVMToExamTemplates(model); examTemplates.setCtime(new Date()); examTemplates.setTitleName(model.getTitleItems().get(0).getName()); examTemplatesMapper.add(examTemplates); List examTemplatesQuestions = ExamTemplatesClassConvert.INSTANCE.QuestionTypeVMListToExamTemplatesQuestionList(model.getQuestionTypeVMS()) .stream().map(e -> { e.setTemplatesId(examTemplates.getId()); return e; }).collect(Collectors.toList()); examTemplatesQuestionMapper.saves(examTemplatesQuestions); List subjects = new ArrayList<>(); for (Integer e : model.getSubjectId()) { ExamTemplatesSubject examTemplatesSubject = new ExamTemplatesSubject(); examTemplatesSubject.setSubjectId(e); examTemplatesSubject.setTemplatesId(examTemplates.getId()); subjects.add(examTemplatesSubject); } examTemplatesSubjectMapper.saves(subjects); } @Override public List list(ExamTemplatesVO examTemplatesVO) { return null; } @Override public PageInfo gets(ExamTemplatesVO templatesVO) { return PageHelper.startPage(templatesVO.getPageIndex(), templatesVO.getPageSize(), "id desc").doSelectPageInfo(() -> examTemplatesMapper.gets()); } @Override public ExamPaperEditRequestVM getById(Integer id) { return restore(id); } @Override public ExamTemplates getByName(String name) { return examTemplatesMapper.getByName(name); } @Override public Integer randomExam(User user) throws Exception { ExamTemplatesUserCount count = new ExamTemplatesUserCount(); ExamPaperEditRequestVM vm = restore(null); count.setExamTemplatesId(vm.getId()); Integer[] id = {user.getId()}; vm.setUserIds(id); vm.setType("1"); vm.setId(null); ExamPaper examPaper = examPaperService.savePaperFromVM(vm, user); ExamPaperEditRequestVM newVM = examPaperService.examPaperToVM(examPaper.getId()); count.setExamPaperId(examPaper.getId()); count.setUserId(user.getId()); examTemplatesUserCountService.add(count); return count.getExamPaperId(); } @Override public void remove(Integer id) { removes(id); } public ExamPaperEditRequestVM restore(Integer id){ if(id == null){ ExamTemplates examTemplates = examTemplatesMapper.getTime(); id = examTemplates.getId(); } ExamTemplates examTemplates = examTemplatesMapper.getById(id); ExamPaperEditRequestVM vm = ExamTemplatesClassConvert.INSTANCE.ExamTemplatesToExamPaperEditRequestVM(examTemplates); Integer[] ids = examTemplatesSubjectMapper.getTemplatesId(id) .stream().map(ExamTemplatesSubject::getSubjectId).toArray(Integer[]::new); vm.setSubjectId(ids); List questions = examTemplatesQuestionMapper.getByTemplatesId(id); List questionTypeVMList = ExamTemplatesClassConvert.INSTANCE.ExamTemplatesQuestionListToQuestionTypeVMList(questions); vm.setQuestionTypeVMS(questionTypeVMList); ExamPaperTitleItemVM examPaperTitleItemVM = new ExamPaperTitleItemVM(); examPaperTitleItemVM.setName(examTemplates.getTitleName()); List list = new ArrayList<>(); list.add(examPaperTitleItemVM); vm.setTitleItems(list); vm.setAggregateSource(100); return vm; } public void removes(Integer id){ examTemplatesMapper.removeById(id); examTemplatesQuestionMapper.removeByTemplatesId(id); examTemplatesSubjectMapper.removeByTemplatesId(id); } }