| | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springblade.modules.FTP.FtpUtil; |
| | | import org.springblade.modules.exam.entity.ExamAnswerRecord; |
| | | import org.springblade.modules.exam.entity.ExamSubjectChoices; |
| | | import org.springblade.modules.exam.entity.ExamSubjectOption; |
| | | import org.springblade.modules.exam.excel.ExamSubjectExcel; |
| | | import org.springblade.modules.exam.mapper.ExamSubjectChoicesMapper; |
| | | import org.springblade.modules.exam.service.ExamAnswerRecordService; |
| | | import org.springblade.modules.exam.service.ExamSubjectChoicesService; |
| | | import org.springblade.modules.exam.service.ExamSubjectOptionService; |
| | | import org.springblade.modules.exam.vo.ExamSubjectChoicesVO; |
| | | import org.springblade.modules.simulateexam.entity.SimulateExamAnswerRecord; |
| | | import org.springblade.modules.simulateexam.service.SimulateExamAnswerRecordService; |
| | | import org.springblade.modules.system.service.MyAsyncService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 选择题服务实现类 |
| | | * |
| | | * @author zhongrj |
| | | */ |
| | | @Service |
| | | public class ExamSubjectChoicesServiceImpl extends ServiceImpl<ExamSubjectChoicesMapper, ExamSubjectChoices> implements ExamSubjectChoicesService { |
| | | |
| | | @Autowired |
| | | private ExamSubjectOptionService examSubjectOptionService; |
| | | |
| | | @Autowired |
| | | private ExamAnswerRecordService examAnswerRecordService; |
| | | |
| | | @Autowired |
| | | private SimulateExamAnswerRecordService simulateExamAnswerRecordService; |
| | | @Autowired |
| | | private MyAsyncService myAsyncService; |
| | | |
| | | |
| | | @Override |
| | | public IPage<ExamSubjectChoicesVO> selectExamSubjectChoicesPage(IPage<ExamSubjectChoicesVO> page, ExamSubjectChoicesVO examSubjectChoices) { |
| | |
| | | |
| | | /** |
| | | * 详情 |
| | | * |
| | | * @param examSubjectChoices 选择题信息对象 |
| | | */ |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public boolean updateChoicesValue(String id, String value) { |
| | | return baseMapper.updateChoicesValue(id,value); |
| | | return baseMapper.updateChoicesValue(id, value); |
| | | } |
| | | |
| | | /** |
| | | * 新增题目及选项信息 |
| | | * |
| | | * @param examSubjectChoices 题目信息对象 |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean saveSubjectChoicesAndOption(ExamSubjectChoicesVO examSubjectChoices) { |
| | | boolean status = false; |
| | | //新增 |
| | | if (null == examSubjectChoices.getId()) { |
| | | ExamSubjectChoices subjectChoices = new ExamSubjectChoices(); |
| | | subjectChoices.setCreateDate(new Date()); |
| | | subjectChoices.setDelFlag(0); |
| | | subjectChoices.setAnswer(examSubjectChoices.getAnswer()); |
| | | if (null != examSubjectChoices.getAnalysis() && examSubjectChoices.getAnalysis() != "") { |
| | | subjectChoices.setAnalysis(examSubjectChoices.getAnalysis()); |
| | | } |
| | | subjectChoices.setCreator(examSubjectChoices.getCreator()); |
| | | subjectChoices.setChoicesType(examSubjectChoices.getChoicesType()); |
| | | subjectChoices.setSubjectName(examSubjectChoices.getSubjectName()); |
| | | subjectChoices.setScore(examSubjectChoices.getScore()); |
| | | subjectChoices.setTktype(examSubjectChoices.getTktype()); |
| | | //题目新增 |
| | | status = this.save(subjectChoices); |
| | | //判断类型,单选,多选,实操 |
| | | if (examSubjectChoices.getChoicesType() == 0 || examSubjectChoices.getChoicesType() == 1 || examSubjectChoices.getChoicesType() == 3) { |
| | | //选项新增 |
| | | List<ExamSubjectOption> examSubjectOptions = examSubjectChoices.getExamSubjectOptions(); |
| | | examSubjectOptions.forEach(examSubjectOption -> { |
| | | examSubjectOption.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption.setCreateDate(new Date()); |
| | | examSubjectOption.setDelFlag(0); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption); |
| | | }); |
| | | return true; |
| | | } |
| | | } else { |
| | | //修改 |
| | | ExamSubjectChoices subjectChoices = new ExamSubjectChoices(); |
| | | subjectChoices.setId(examSubjectChoices.getId()); |
| | | subjectChoices.setModifyDate(new Date()); |
| | | subjectChoices.setAnswer(examSubjectChoices.getAnswer()); |
| | | if (null != examSubjectChoices.getAnalysis() && examSubjectChoices.getAnalysis() != "") { |
| | | subjectChoices.setAnalysis(examSubjectChoices.getAnalysis()); |
| | | } |
| | | subjectChoices.setModifier(examSubjectChoices.getCreator()); |
| | | subjectChoices.setChoicesType(examSubjectChoices.getChoicesType()); |
| | | subjectChoices.setSubjectName(examSubjectChoices.getSubjectName()); |
| | | subjectChoices.setScore(examSubjectChoices.getScore()); |
| | | subjectChoices.setTktype(examSubjectChoices.getTktype()); |
| | | //题目修改 |
| | | status = this.updateById(subjectChoices); |
| | | //判断类型,单选,多选 |
| | | if (examSubjectChoices.getChoicesType() == 0 || examSubjectChoices.getChoicesType() == 1) { |
| | | //选项修改 |
| | | List<ExamSubjectOption> examSubjectOptions = examSubjectChoices.getExamSubjectOptions(); |
| | | examSubjectOptions.forEach(examSubjectOption -> { |
| | | examSubjectOption.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption.setModifyDate(new Date()); |
| | | examSubjectOption.setModifier(examSubjectChoices.getCreator()); |
| | | //修改 |
| | | examSubjectOptionService.updateById(examSubjectOption); |
| | | }); |
| | | return true; |
| | | } |
| | | //实操 |
| | | if (examSubjectChoices.getChoicesType() == 3) { |
| | | //先将选项删除 |
| | | baseMapper.removeBySubjectId(examSubjectChoices.getId()); |
| | | //选项新增 |
| | | List<ExamSubjectOption> examSubjectOptions = examSubjectChoices.getExamSubjectOptions(); |
| | | examSubjectOptions.forEach(examSubjectOption -> { |
| | | examSubjectOption.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption.setCreateDate(new Date()); |
| | | examSubjectOption.setDelFlag(0); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption); |
| | | }); |
| | | return true; |
| | | } |
| | | } |
| | | return status; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 题库导入 |
| | | * |
| | | * @param data 导入数据 |
| | | * @param isCovered |
| | | */ |
| | | @Override |
| | | public void importSubject(List<ExamSubjectExcel> data, Boolean isCovered) { |
| | | data.forEach(examSubjectExcel -> { |
| | | //题目对象 |
| | | ExamSubjectChoices subjectChoices = new ExamSubjectChoices(); |
| | | subjectChoices.setCreateDate(new Date()); |
| | | subjectChoices.setDelFlag(0); |
| | | subjectChoices.setAnswer(examSubjectExcel.getAnswer()); |
| | | if (null != examSubjectExcel.getAnalysis() && examSubjectExcel.getAnalysis() != "") { |
| | | subjectChoices.setAnalysis(examSubjectExcel.getAnalysis()); |
| | | } |
| | | subjectChoices.setChoicesType(examSubjectExcel.getChoicesType()); |
| | | subjectChoices.setSubjectName(examSubjectExcel.getSubjectName()); |
| | | subjectChoices.setScore(examSubjectExcel.getScore()); |
| | | subjectChoices.setTktype(examSubjectExcel.getTktype()); |
| | | //题目新增 |
| | | this.save(subjectChoices); |
| | | |
| | | |
| | | //判断类型,单选,多选选项新增 |
| | | if (examSubjectExcel.getChoicesType() == 0 || examSubjectExcel.getChoicesType() == 1) { |
| | | //A选项新增 |
| | | ExamSubjectOption examSubjectOption = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption.setCreateDate(new Date()); |
| | | examSubjectOption.setDelFlag(0); |
| | | examSubjectOption.setOptionName("A"); |
| | | examSubjectOption.setOptionContent(examSubjectExcel.getOptionContentA()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption); |
| | | |
| | | //B选项新增 |
| | | ExamSubjectOption examSubjectOption1 = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption1.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption1.setCreateDate(new Date()); |
| | | examSubjectOption1.setDelFlag(0); |
| | | examSubjectOption1.setOptionName("B"); |
| | | examSubjectOption1.setOptionContent(examSubjectExcel.getOptionContentB()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption1); |
| | | |
| | | //C选项新增 |
| | | ExamSubjectOption examSubjectOption2 = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption2.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption2.setCreateDate(new Date()); |
| | | examSubjectOption2.setDelFlag(0); |
| | | examSubjectOption2.setOptionName("C"); |
| | | examSubjectOption2.setOptionContent(examSubjectExcel.getOptionContentC()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption2); |
| | | |
| | | //D选项新增 |
| | | ExamSubjectOption examSubjectOption3 = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption3.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption3.setCreateDate(new Date()); |
| | | examSubjectOption3.setDelFlag(0); |
| | | examSubjectOption3.setOptionName("D"); |
| | | examSubjectOption3.setOptionContent(examSubjectExcel.getOptionContentD()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption3); |
| | | } |
| | | |
| | | |
| | | //多选选项新增 |
| | | if (examSubjectExcel.getChoicesType() == 3) { |
| | | //1选项新增 |
| | | if (null != examSubjectExcel.getOptionContentA() && examSubjectExcel.getOptionContentA() != "") { |
| | | ExamSubjectOption examSubjectOption = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption.setCreateDate(new Date()); |
| | | examSubjectOption.setDelFlag(0); |
| | | examSubjectOption.setOptionName("1"); |
| | | examSubjectOption.setOptionContent(examSubjectExcel.getOptionContentA()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption); |
| | | } |
| | | |
| | | //2选项新增 |
| | | if (null != examSubjectExcel.getOptionContentB() && examSubjectExcel.getOptionContentB() != "") { |
| | | ExamSubjectOption examSubjectOption1 = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption1.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption1.setCreateDate(new Date()); |
| | | examSubjectOption1.setDelFlag(0); |
| | | examSubjectOption1.setOptionName("2"); |
| | | examSubjectOption1.setOptionContent(examSubjectExcel.getOptionContentB()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption1); |
| | | } |
| | | |
| | | //3选项新增 |
| | | if (null != examSubjectExcel.getOptionContentC() && examSubjectExcel.getOptionContentC() != "") { |
| | | ExamSubjectOption examSubjectOption2 = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption2.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption2.setCreateDate(new Date()); |
| | | examSubjectOption2.setDelFlag(0); |
| | | examSubjectOption2.setOptionName("3"); |
| | | examSubjectOption2.setOptionContent(examSubjectExcel.getOptionContentC()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption2); |
| | | } |
| | | |
| | | //4选项新增 |
| | | if (null != examSubjectExcel.getOptionContentD() && examSubjectExcel.getOptionContentD() != "") { |
| | | ExamSubjectOption examSubjectOption3 = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption3.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption3.setCreateDate(new Date()); |
| | | examSubjectOption3.setDelFlag(0); |
| | | examSubjectOption3.setOptionName("4"); |
| | | examSubjectOption3.setOptionContent(examSubjectExcel.getOptionContentD()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption3); |
| | | } |
| | | |
| | | |
| | | //5选项新增 |
| | | if (null != examSubjectExcel.getOptionContentE() && examSubjectExcel.getOptionContentE() != "") { |
| | | ExamSubjectOption examSubjectOption4 = new ExamSubjectOption(); |
| | | //选项新增 |
| | | examSubjectOption4.setSubjectChoicesId(subjectChoices.getId()); |
| | | examSubjectOption4.setCreateDate(new Date()); |
| | | examSubjectOption4.setDelFlag(0); |
| | | examSubjectOption4.setOptionName("5"); |
| | | examSubjectOption4.setOptionContent(examSubjectExcel.getOptionContentE()); |
| | | //新增 |
| | | examSubjectOptionService.save(examSubjectOption4); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 判断当前题目的答题结果 |
| | | * |
| | | * @param preSubJectId 题目Id |
| | | * @param preResult 提交的结果 |
| | | * @param scoreId 成绩id |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Integer getAnswerResult(Long preSubJectId, String preResult, Long scoreId) { |
| | | //查询题目信息 |
| | | ExamSubjectChoices choices = this.getById(preSubJectId); |
| | | //对比答案 |
| | | if (choices.getChoicesType() == 2 || choices.getChoicesType() == 3) { |
| | | //保存答题记录 |
| | | boolean result = preResult.equals(choices.getAnswer()); |
| | | int status = 0; |
| | | //判断题逻辑 |
| | | if (result) { |
| | | status = 1; |
| | | } else { |
| | | status = 2; |
| | | } |
| | | //新增答题记录 |
| | | saveExamAns(choices, preSubJectId, preResult, scoreId, result); |
| | | //返回 |
| | | return status; |
| | | } else if (choices.getChoicesType() == 0 || choices.getChoicesType() == 1) { |
| | | //处理多选题的答案排序 |
| | | String[] split = preResult.split(","); |
| | | StringBuilder builder = new StringBuilder(); |
| | | for (String s : split) { |
| | | builder.append(s); |
| | | } |
| | | char[] arrayCh = builder.toString().toCharArray(); |
| | | //利用数组帮助类自动排序 |
| | | Arrays.sort(arrayCh); |
| | | String sub0 = Arrays.toString(arrayCh); |
| | | String sub = sub0.substring(1, sub0.length() - 1).replaceAll(" ", ""); |
| | | |
| | | //保存答题记录 |
| | | boolean result = sub.equals(choices.getAnswer()); |
| | | int status = 0; |
| | | //判断题逻辑 |
| | | if (result) { |
| | | status = 1; |
| | | } else { |
| | | status = 2; |
| | | } |
| | | //新增答题记录 |
| | | saveExamAns(choices, preSubJectId, preResult, scoreId, result); |
| | | //返回 |
| | | return status; |
| | | } |
| | | return 2; |
| | | } |
| | | |
| | | /** |
| | | * 新增答题记录 |
| | | * |
| | | * @param choices 题目 |
| | | * @param preSubJectId 上一题题目id |
| | | * @param preResult 上一题答题结果 |
| | | * @param scoreId 成绩 id |
| | | * @param result 答题是否正确 |
| | | */ |
| | | private void saveExamAns(ExamSubjectChoices choices, Long preSubJectId, String preResult, Long scoreId, boolean result) { |
| | | ExamAnswerRecord examAnswerRecord = new ExamAnswerRecord(); |
| | | examAnswerRecord.setScoreId(scoreId); |
| | | examAnswerRecord.setAnswerOption(preResult); |
| | | examAnswerRecord.setSubjectChoicesId(preSubJectId); |
| | | examAnswerRecord.setAnswer(choices.getAnswer()); |
| | | examAnswerRecord.setSubjectChoicesType(choices.getChoicesType()); |
| | | examAnswerRecord.setAnswerTime(new Date()); |
| | | int status = 0; |
| | | //判断题逻辑 |
| | | if (result) { |
| | | status = 1; |
| | | examAnswerRecord.setAnswerScore(choices.getScore()); |
| | | } else { |
| | | status = 2; |
| | | examAnswerRecord.setAnswerScore(0); |
| | | } |
| | | examAnswerRecord.setAnswerResult(status); |
| | | //新增 |
| | | examAnswerRecordService.save(examAnswerRecord); |
| | | |
| | | //内网数据同步... |
| | | String s = "insert into exam_answer_record(id,subject_choices_id,subject_choices_type,answer_option,answer" + |
| | | ",answer_time,answer_score,answer_result,score_id) " + |
| | | "values(" + "'" + examAnswerRecord.getId() + "'" + |
| | | "," + "'" + examAnswerRecord.getSubjectChoicesId() + "'" + |
| | | "," + "'" + examAnswerRecord.getSubjectChoicesType() + "'" + |
| | | "," + "'" + examAnswerRecord.getAnswerOption() + "'" + |
| | | "," + "'" + examAnswerRecord.getAnswer() + "'" + |
| | | "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(examAnswerRecord.getAnswerTime()) + "'" + |
| | | "," + "'" + examAnswerRecord.getAnswerScore() + "'" + |
| | | "," + "'" + examAnswerRecord.getAnswerResult() + "'" + |
| | | "," + "'" + examAnswerRecord.getScoreId() + "'" + ")"; |
| | | //FtpUtil.sqlFileUpload(s); |
| | | myAsyncService.dataSync(s); |
| | | } |
| | | |
| | | /** |
| | | * 随机查询题库120道 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<String> getExamSubjectChoicesList() { |
| | | return baseMapper.getExamSubjectChoicesList(); |
| | | } |
| | | |
| | | /** |
| | | * 判断当前题目的答题结果 |
| | | * |
| | | * @param preSubJectId 题目 id |
| | | * @param preResult 提交的结果 |
| | | * @param simulateExamId 模拟考试记录 id |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Integer getAnswerResultBySimulate(Long preSubJectId, String preResult, Long simulateExamId) { |
| | | //查询题目信息 |
| | | ExamSubjectChoices choices = this.getById(preSubJectId); |
| | | //对比答案 |
| | | if (choices.getChoicesType() == 2 || choices.getChoicesType() == 3) { |
| | | //保存答题记录 |
| | | boolean result = preResult.equals(choices.getAnswer()); |
| | | int status = 0; |
| | | //判断题逻辑 |
| | | if (result) { |
| | | status = 1; |
| | | } else { |
| | | status = 2; |
| | | } |
| | | //新增模拟考试答题记录 |
| | | saveSimulateExamAns(choices, preSubJectId, preResult, simulateExamId, result); |
| | | //返回 |
| | | return status; |
| | | } else if (choices.getChoicesType() == 0 || choices.getChoicesType() == 1) { |
| | | //处理多选题的答案排序 |
| | | String[] split = preResult.split(","); |
| | | StringBuilder builder = new StringBuilder(); |
| | | for (String s : split) { |
| | | builder.append(s); |
| | | } |
| | | char[] arrayCh = builder.toString().toCharArray(); |
| | | //利用数组帮助类自动排序 |
| | | Arrays.sort(arrayCh); |
| | | String sub0 = Arrays.toString(arrayCh); |
| | | String sub = sub0.substring(1, sub0.length() - 1).replaceAll(" ", ""); |
| | | |
| | | //保存模拟考试答题记录 |
| | | boolean result = sub.equals(choices.getAnswer()); |
| | | int status = 0; |
| | | //判断题逻辑 |
| | | if (result) { |
| | | status = 1; |
| | | } else { |
| | | status = 2; |
| | | } |
| | | //新增模拟考试答题记录 |
| | | saveSimulateExamAns(choices, preSubJectId, preResult, simulateExamId, result); |
| | | //返回 |
| | | return status; |
| | | } |
| | | return 2; |
| | | } |
| | | |
| | | /** |
| | | * 新增模拟考试答题记录 |
| | | * |
| | | * @param choices 题目信息 |
| | | * @param preSubJectId 题目id |
| | | * @param preResult 提交的答案 |
| | | * @param simulateExamId 模拟考试id |
| | | * @param result 答题的结果 |
| | | */ |
| | | private void saveSimulateExamAns(ExamSubjectChoices choices, Long preSubJectId, String preResult, Long simulateExamId, boolean result) { |
| | | SimulateExamAnswerRecord simulateExamAnswerRecord = new SimulateExamAnswerRecord(); |
| | | simulateExamAnswerRecord.setSimulateExamId(simulateExamId); |
| | | simulateExamAnswerRecord.setAnswerOption(preResult); |
| | | simulateExamAnswerRecord.setSubjectChoicesId(preSubJectId); |
| | | simulateExamAnswerRecord.setAnswer(choices.getAnswer()); |
| | | simulateExamAnswerRecord.setSubjectChoicesType(choices.getChoicesType()); |
| | | simulateExamAnswerRecord.setAnswerTime(new Date()); |
| | | int status = 0; |
| | | //判断题逻辑 |
| | | if (result) { |
| | | status = 1; |
| | | simulateExamAnswerRecord.setAnswerScore(choices.getScore()); |
| | | } else { |
| | | status = 2; |
| | | simulateExamAnswerRecord.setAnswerScore(0); |
| | | } |
| | | simulateExamAnswerRecord.setAnswerResult(status); |
| | | //新增 |
| | | simulateExamAnswerRecordService.save(simulateExamAnswerRecord); |
| | | } |
| | | } |