ExerciseDictServiceImpl.java 4.68 KB
package com.subsidy.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.dto.exercise.GetPaperExerciseDTO;
import com.subsidy.dto.exercise.SubmitDTO;
import com.subsidy.mapper.ExerciseDictMapper;
import com.subsidy.mapper.ExerciseDoneHistoryMapper;
import com.subsidy.mapper.ExerciseDoneResultMapper;
import com.subsidy.model.ExerciseDictDO;
import com.subsidy.model.ExerciseDoneHistoryDO;
import com.subsidy.model.ExerciseDoneResultDO;
import com.subsidy.service.ExerciseDictService;
import com.subsidy.util.ConstantUtils;
import com.subsidy.util.MathUtil;
import com.subsidy.vo.exercise.GetPaperExerciseVO;
import com.subsidy.vo.exercise.MemberExerciseVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 习题库 服务实现类
 * </p>
 *
 * @author DengMin
 * @since 2021-10-12
 */
@Service
public class ExerciseDictServiceImpl extends ServiceImpl<ExerciseDictMapper, ExerciseDictDO> implements ExerciseDictService {

    @Autowired
    private ExerciseDoneResultMapper exerciseDoneResultMapper;

    @Autowired
    private ExerciseDoneHistoryMapper exerciseDoneHistoryMapper;

    public String addExercise(ExerciseDictDO exerciseDictDO){

        Integer orderNoTmp = this.baseMapper.getMaximumNo(exerciseDictDO.getPaperId());

        int orderNo = 1;

        if (null!= orderNoTmp) {
            orderNo = orderNoTmp + 1;
        }
        exerciseDictDO.setOrderNo(orderNo);
        this.baseMapper.insert(exerciseDictDO);
        return ConstantUtils.ADD_SUCCESS;
    }

    public String deleteExercise(ExerciseDictDO exerciseDictDO) {
        this.baseMapper.deleteById(exerciseDictDO.getId());
        return ConstantUtils.DELETE_SUCCESS;
    }

    public String updateExercise(ExerciseDictDO exerciseDictDO) {
        this.baseMapper.updateById(exerciseDictDO);
        return ConstantUtils.SET_SUCCESS;
    }

    @Transactional(rollbackFor = Exception.class)
    public Long submit(SubmitDTO submitDTO) {

        ExerciseDoneResultDO exerciseDoneResultDO = new ExerciseDoneResultDO();

        List<MemberExerciseVO> memberExerciseVOS = submitDTO.getMemberExerciseVOS();

        int rightCounts = 0;

        for (MemberExerciseVO exerciseVO : memberExerciseVOS) {
            ExerciseDictDO exerciseDictDO = this.baseMapper.selectById(exerciseVO.getId());
            if (exerciseDictDO.getRightAnswer().equals(exerciseVO.getSelectAnswer())) {
                exerciseVO.setResult(1);
                rightCounts++;
            }else {
                exerciseVO.setResult(0);
            }
        }

        exerciseDoneResultDO.setClassId(submitDTO.getClassId());
        exerciseDoneResultDO.setRightCounts(rightCounts);
        exerciseDoneResultDO.setTotalCounts(memberExerciseVOS.size());
        exerciseDoneResultDO.setCourseId(submitDTO.getCourseId());
        exerciseDoneResultDO.setMemberId(submitDTO.getMemberId());
        exerciseDoneResultDO.setPaperId(submitDTO.getPaperId());
        exerciseDoneResultDO.setLength(submitDTO.getLength());
        int score = MathUtil.intDivFloorPercent(rightCounts, memberExerciseVOS.size());
        exerciseDoneResultDO.setScore(score);
        exerciseDoneResultDO.setResult(score>=60?"合格":"不合格");

        exerciseDoneResultMapper.insert(exerciseDoneResultDO);

        for (MemberExerciseVO memberExerciseVO : memberExerciseVOS){

            ExerciseDoneHistoryDO exerciseDoneHistoryDO = new ExerciseDoneHistoryDO();
            exerciseDoneHistoryDO.setPaperId(submitDTO.getPaperId());
            exerciseDoneHistoryDO.setDoneId(exerciseDoneResultDO.getId());
            exerciseDoneHistoryDO.setMemberId(submitDTO.getMemberId());
            exerciseDoneHistoryDO.setClassId(submitDTO.getClassId());
            exerciseDoneHistoryDO.setExerciseId(memberExerciseVO.getId());
            exerciseDoneHistoryDO.setAnswer(memberExerciseVO.getSelectAnswer());
            exerciseDoneHistoryDO.setResult(memberExerciseVO.getResult());
            exerciseDoneHistoryMapper.insert(exerciseDoneHistoryDO);
        }

        return exerciseDoneResultDO.getId();
    }

    public IPage<GetPaperExerciseVO> getPaperExercise(GetPaperExerciseDTO getPaperExerciseDTO) {
        Page pager = new Page(getPaperExerciseDTO.getPageNum(), getPaperExerciseDTO.getPageSize());
        return this.baseMapper.getPaperExercise(pager,getPaperExerciseDTO.getPaperId(),getPaperExerciseDTO.getDifficulty(),getPaperExerciseDTO.getExerciseType(),getPaperExerciseDTO.getTitle());
    }

}