package com.zd.exam.service.impl;

import java.util.Date;
import java.util.List;

import com.zd.common.core.exception.ServiceException;
import com.zd.common.core.utils.DateUtils;
import com.zd.common.datascope.annotation.DataScope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zd.exam.mapper.ElUserExamMapper;
import com.zd.exam.domain.ElUserExam;
import com.zd.exam.service.IElUserExamService;

/**
 * 考试记录Service业务层处理
 *
 * @author zd
 * @date 2021-09-01
 */
@Service
public class ElUserExamServiceImpl implements IElUserExamService {
    @Autowired
    private ElUserExamMapper elUserExamMapper;

    /**
     * 查询考试记录
     *
     * @param id 考试记录主键
     * @return 考试记录
     */
    @Override
    public ElUserExam selectElUserExamById(Long id) {
        return elUserExamMapper.selectElUserExamById(id);
    }

    /**
     * 查询考试记录列表
     *
     * @param elUserExam 考试记录
     * @return 考试记录
     */
    @Override
    @DataScope(deptAlias = "ue")
    public List<ElUserExam> selectElUserExamList(ElUserExam elUserExam) {
        return elUserExamMapper.selectElUserExamList(elUserExam);
    }

    /**
     * 新增考试记录
     *
     * @param elUserExam 考试记录
     * @return 结果
     */
    @Override
    public int insertElUserExam(ElUserExam elUserExam) {
        elUserExam.setCreateTime(DateUtils.getNowDate());
        elUserExam.setUpdateTime(DateUtils.getNowDate());
        return elUserExamMapper.insertElUserExam(elUserExam);
    }

    /**
     * 修改考试记录
     *
     * @param elUserExam 考试记录
     * @return 结果
     */
    @Override
    public int updateElUserExam(ElUserExam elUserExam) {
        elUserExam.setUpdateTime(DateUtils.getNowDate());
        return elUserExamMapper.updateElUserExam(elUserExam);
    }

    /**
     * 批量删除考试记录
     *
     * @param ids 需要删除的考试记录主键
     * @return 结果
     */
    @Override
    public int deleteElUserExamByIds(Long[] ids) {
        return elUserExamMapper.deleteElUserExamByIds(ids);
    }

    /**
     * 删除考试记录信息
     *
     * @param id 考试记录主键
     * @return 结果
     */
    @Override
    public int deleteElUserExamById(Long id) {
        return elUserExamMapper.deleteElUserExamById(id);
    }

    @Override
    public void joinResult(Long userId, Long examId, int score, boolean passed) {

        //查询条件
        ElUserExam elUserExam = new ElUserExam();
        elUserExam.setExamId(examId);
        elUserExam.setUserId(userId);
        elUserExam.setJoinUserId(userId);
        List<ElUserExam> elUserExams = elUserExamMapper.selectElUserExamList(elUserExam);
        // 同一个人，同一个考试只产生一条数据
        if (elUserExams.size() > 1) {
            throw new ServiceException("数据异常");
        } else if (elUserExams.size() == 1) {
            elUserExam = elUserExams.get(0);
            // 修复低分数不加入统计问题
            elUserExam.setTryCount(elUserExam.getTryCount() + 1);
            elUserExam.setUpdateTime(DateUtils.getNowDate());

            if (elUserExam.getMaxScore() < score) {
                elUserExam.setMaxScore(score);
                elUserExam.setPassed(passed ? 1 : 0);
            }

            elUserExamMapper.updateElUserExam(elUserExam);
        } else {
            elUserExam.setCreateTime(DateUtils.getNowDate());
            elUserExam.setUpdateTime(DateUtils.getNowDate());
            elUserExam.setTryCount(1);
            elUserExam.setMaxScore(score);
            elUserExam.setPassed(passed ? 1 : 0);
            elUserExamMapper.insertElUserExam(elUserExam);
        }

    }
}
