龚焕茏
2024-07-03 3ec909b27b3eba956aa9d00cc7a94c179bd04bbf
src/main/java/com/mindskip/xzs/service/impl/ExamTemplatesServiceImpl.java
@@ -4,27 +4,24 @@
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.repository.*;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.convert.ExamTemplatesClassConvert;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVO;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperTitleItemVM;
import com.mindskip.xzs.viewmodel.admin.exam.QuestionTypeVM;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
public class ExamTemplatesServiceImpl extends BaseServiceImpl<ExamTemplates> implements ExamTemplatesService {
    private final ExamTemplatesMapper examTemplatesMapper;
@@ -33,8 +30,10 @@
    private final DepartmentService departmentService;
    private final ExamPaperService examPaperService;
    private final ExamTemplatesUserCountService examTemplatesUserCountService;
    private final ExamTemplatesUserMapper examTemplatesUserMapper;
    private final ExamTemplatesConfigService examTemplatesConfigService;
    public ExamTemplatesServiceImpl(BaseMapper<ExamTemplates> baseMapper, ExamTemplatesMapper examTemplatesMapper, ExamTemplatesQuestionMapper examTemplatesQuestionMapper, ExamTemplatesSubjectMapper examTemplatesSubjectMapper, DepartmentService departmentService, ExamPaperService examPaperService, ExamTemplatesUserCountService examTemplatesUserCountService) {
    public ExamTemplatesServiceImpl(BaseMapper<ExamTemplates> baseMapper, ExamTemplatesMapper examTemplatesMapper, ExamTemplatesQuestionMapper examTemplatesQuestionMapper, ExamTemplatesSubjectMapper examTemplatesSubjectMapper, DepartmentService departmentService, ExamPaperService examPaperService, ExamTemplatesUserCountService examTemplatesUserCountService, ExamTemplatesUserMapper examTemplatesUserMapper, ExamTemplatesConfigService examTemplatesConfigService) {
        super(baseMapper);
        this.examTemplatesMapper = examTemplatesMapper;
        this.examTemplatesQuestionMapper = examTemplatesQuestionMapper;
@@ -42,6 +41,8 @@
        this.departmentService = departmentService;
        this.examPaperService = examPaperService;
        this.examTemplatesUserCountService = examTemplatesUserCountService;
        this.examTemplatesUserMapper = examTemplatesUserMapper;
        this.examTemplatesConfigService = examTemplatesConfigService;
    }
    @Transactional(rollbackFor = Exception.class)
@@ -50,18 +51,29 @@
        if (model.getId() != null) {
            removes(model.getId());
        }
        ExamTemplates examTemplates = ExamTemplatesClassConvert.INSTANCE.ExamPaperEditRequestVMToExamTemplates(model);
        if (!CollectionUtils.isEmpty(model.getLimitDateTime())) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date startTime = null;
            Date endTime = null;
            try {
                startTime = dateFormat.parse(model.getLimitDateTime().get(0));
                endTime = dateFormat.parse(model.getLimitDateTime().get(1));
            } catch (Exception e) {
                log.info(e.getMessage());
            }
            examTemplates.setStartTime(startTime);
            examTemplates.setEndTime(endTime);
        }
        examTemplates.setCtime(new Date());
        examTemplates.setTitleName(model.getTitleItems().get(0).getName());
        examTemplates.setStatus(model.getStatus());
        examTemplates.setMenuIds(model.getMenuIds());
        examTemplates.setCreateUser(model.getCreateUser());
        examTemplatesMapper.add(examTemplates);
        List<ExamTemplatesQuestion> examTemplatesQuestions = ExamTemplatesClassConvert.INSTANCE.QuestionTypeVMListToExamTemplatesQuestionList(model.getQuestionTypeVMS())
                .stream().map(e -> {
                    e.setTemplatesId(examTemplates.getId());
                    return e;
                }).collect(Collectors.toList());
        examTemplatesQuestionMapper.saves(examTemplatesQuestions);
        // 随机时间题目配置
        examTemplatesQuestionMapper.add(getExamTemplatesQuestion(examTemplates.getId()));
        List<ExamTemplatesSubject> subjects = new ArrayList<>();
        for (Integer e : model.getSubjectId()) {
@@ -71,6 +83,30 @@
            subjects.add(examTemplatesSubject);
        }
        examTemplatesSubjectMapper.saves(subjects);
        if ("0".equals(model.getStatus())) {
            Object[] obj = Arrays.stream(model.getUserIds()).sorted().distinct().toArray();
            Integer[] userIds = new Integer[obj.length];
            for (int i = 0; i < obj.length; i++) {
                userIds[i] = (Integer) obj[i];
            }
            for (Integer userId : userIds) {
                ExamTemplatesUser templatesUser = new ExamTemplatesUser();
                templatesUser.setTemplatesId(examTemplates.getId().toString());
                templatesUser.setUserId(userId.toString());
                examTemplatesUserMapper.add(templatesUser);
            }
        }
    }
    private ExamTemplatesQuestion getExamTemplatesQuestion(Integer templatesId) {
        ExamTemplatesConfig examTemplatesConfig = examTemplatesConfigService.getConfig();
        if (Objects.isNull(examTemplatesConfig)) { throw new RuntimeException("请先配置试卷模板"); }
        ExamTemplatesQuestion examTemplatesQuestion = new ExamTemplatesQuestion();
        examTemplatesQuestion.setSingleChoice(examTemplatesConfig.getRadioNum().toString());
        examTemplatesQuestion.setMultipleChoice(examTemplatesConfig.getCheckNum().toString());
        examTemplatesQuestion.setTrueFalse(examTemplatesConfig.getJudgingNum().toString());
        examTemplatesQuestion.setTemplatesId(templatesId);
        return examTemplatesQuestion;
    }
    @Override
@@ -81,7 +117,13 @@
    @Override
    public PageInfo<ExamTemplates> gets(ExamTemplatesVO templatesVO) {
        return PageHelper.startPage(templatesVO.getPageIndex(), templatesVO.getPageSize(), "id desc").doSelectPageInfo(() ->
                examTemplatesMapper.gets());
                examTemplatesMapper.gets(templatesVO));
    }
    @Override
    public PageInfo<ExamTemplates> getByadmins(ExamTemplatesVO templatesVO) {
        return PageHelper.startPage(templatesVO.getPageIndex(), templatesVO.getPageSize(), "id desc").doSelectPageInfo(() ->
                examTemplatesMapper.getByadmins(templatesVO));
    }
    @Override
@@ -106,7 +148,7 @@
        vm.setType("1");
        vm.setId(null);
        ExamPaper examPaper = examPaperService.savePaperFromVM(vm, user);
        ExamPaperEditRequestVM newVM = examPaperService.examPaperToVM(examPaper.getId());
        ExamPaperEditRequestVO newVM = examPaperService.examPaperToVM(examPaper.getId());
        count.setExamPaperId(examPaper.getId());
        count.setUserId(user.getId());
        examTemplatesUserCountService.add(count);
@@ -114,17 +156,50 @@
    }
    @Override
    public Integer randomExam1(User user, Integer templatesId) throws Exception {
//        ExamTemplatesUserCount count = new ExamTemplatesUserCount();
        ExamPaperEditRequestVM vm = restore(templatesId);
//        count.setExamTemplatesId(vm.getId());
        Integer[] id = {user.getId()};
        vm.setUserIds(id);
        vm.setType("1");
        vm.setId(null);
        ExamPaper examPaper = examPaperService.savePaperFromVM(vm, user);
        ExamPaperEditRequestVO newVM = examPaperService.examPaperToVM(examPaper.getId());
//        count.setExamPaperId(examPaper.getId());
//        count.setUserId(user.getId());
//        examTemplatesUserCountService.add(count);
        return examPaper.getId();
    }
    @Override
    public void remove(Integer id) {
        removes(id);
    }
    public ExamPaperEditRequestVM restore(Integer id){
        if(id == null){
    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);
        vm.setMenuIds(examTemplates.getMenuIds());
        List<String> limitDateTime = new ArrayList<>();
        Date startTime = examTemplates.getStartTime();
        Date endTime = examTemplates.getEndTime();
        if (startTime != null && endTime != null) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String start = dateFormat.format(startTime);
            String end = dateFormat.format(endTime);
            limitDateTime.add(start);
            limitDateTime.add(end);
            vm.setLimitDateTime(limitDateTime);
        }
        Integer[] ids = examTemplatesSubjectMapper.getTemplatesId(id)
                .stream().map(ExamTemplatesSubject::getSubjectId).toArray(Integer[]::new);
        vm.setSubjectId(ids);
@@ -137,9 +212,19 @@
        list.add(examPaperTitleItemVM);
        vm.setTitleItems(list);
        vm.setAggregateSource(100);
        if ("0".equals(examTemplates.getStatus())) {
            List<ExamTemplatesUser> byId = examTemplatesUserMapper.getById(id);
            List<String> collect = byId.stream().map(ExamTemplatesUser::getUserId).collect(Collectors.toList());
            Integer[] userIds = new Integer[collect.size()];
            for (int i = 0; i < collect.size(); i++) {
                userIds[i] = Integer.parseInt(collect.get(i));
            }
            vm.setUserIds(userIds);
        }
        return vm;
    }
    public void removes(Integer id){
    public void removes(Integer id) {
        examTemplatesMapper.removeById(id);
        examTemplatesQuestionMapper.removeByTemplatesId(id);
        examTemplatesSubjectMapper.removeByTemplatesId(id);