package com.example.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONObject;
import com.example.dao.NxQuestionInfoDao;
import com.example.dao.NxTestpaperInfoDao;
import com.example.entity.NxTestpaperInfo;
import com.example.exception.CustomException;
import com.example.vo.NxQuestionInfoVo;
import com.example.vo.NxTestpaperInfoVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class NxTestpaperInfoService {
@Resource
private NxQuestionInfoDao nxQuestionInfoDao;
@Resource
private NxTestpaperInfoDao nxTestpaperInfoDao;
public NxTestpaperInfo add(NxTestpaperInfo nxTestpaperInfo) {
nxTestpaperInfoDao.insertSelective(nxTestpaperInfo);
return nxTestpaperInfo;
}
/**
* 生成试卷
*
* @param nxTestpaperInfoVo
* @return
*/
public NxTestpaperInfo generatePaper(NxTestpaperInfoVo nxTestpaperInfoVo) {
// 试卷的type
String type = nxTestpaperInfoVo.getType();
List<NxQuestionInfoVo> finalSelectQuestions = CollUtil.newArrayList();
if (nxTestpaperInfoVo.getSelectQuestion() != null) {
List<NxQuestionInfoVo> selectQuestions = nxQuestionInfoDao.findByQuestionType("单选题", type);
if (nxTestpaperInfoVo.getSelectQuestion() <= 0) {
throw new CustomException("-1", "单选题设置需大于0");
}
if (nxTestpaperInfoVo.getSelectQuestion() > selectQuestions.size()) {
throw new CustomException("-1", "单选题库数量不足");
}
// 选择题题目集合
List<Integer> selectIndexList = getIndexList(selectQuestions.size(), nxTestpaperInfoVo.getSelectQuestion());
selectIndexList.forEach(i -> finalSelectQuestions.add(selectQuestions.get(i)));
}
List<NxQuestionInfoVo> finalJudgeQuestions = CollUtil.newArrayList();
if (nxTestpaperInfoVo.getJudgeQuestion() != null) {
List<NxQuestionInfoVo> judgeQuestions = nxQuestionInfoDao.findByQuestionType("判断题", type);
if (nxTestpaperInfoVo.getJudgeQuestion() <= 0) {
throw new CustomException("-1", "判断题设置需大于0");
}
if (nxTestpaperInfoVo.getJudgeQuestion() > judgeQuestions.size()) {
throw new CustomException("-1", "判断题库数量不足");
}
// 判断题题目集合
List<Integer> judgeIndexList = getIndexList(judgeQuestions.size(), nxTestpaperInfoVo.getJudgeQuestion());
judgeIndexList.forEach(i -> finalJudgeQuestions.add(judgeQuestions.get(i)));
}
List<NxQuestionInfoVo> finalAnswerQuestions = CollUtil.newArrayList();
if (nxTestpaperInfoVo.getAnswerQuestion() != null) {
List<NxQuestionInfoVo> answerQuestions = nxQuestionInfoDao.findByQuestionType("简答题", type);
if (nxTestpaperInfoVo.getAnswerQuestion() <= 0) {
throw new CustomException("-1", "简答题设置需大于0");
}
if (nxTestpaperInfoVo.getAnswerQuestion() > answerQuestions.size()) {
throw new CustomException("-1", "简答题库数量不足");
}
// 简答题题题目集合
List<Integer> answerIndexList = getIndexList(answerQuestions.size(), nxTestpaperInfoVo.getAnswerQuestion());
answerIndexList.forEach(i -> finalAnswerQuestions.add(answerQuestions.get(i)));
}
// 多选题
List<NxQuestionInfoVo> finalMulSelectQuestions = CollUtil.newArrayList();
if (nxTestpaperInfoVo.getMulSelectQuestion() != null) {
List<NxQuestionInfoVo> mulSelectQuestions = nxQuestionInfoDao.findByQuestionType("多选题", type);
if (nxTestpaperInfoVo.getMulSelectQuestion() <= 0) {
throw new CustomException("-1", "多选题设置需大于0");
}
if (nxTestpaperInfoVo.getMulSelectQuestion() > mulSelectQuestions.size()) {
throw new CustomException("-1", "多选题库数量不足");
}
// 多选题题题目集合
List<Integer> answerIndexList = getIndexList(mulSelectQuestions.size(), nxTestpaperInfoVo.getMulSelectQuestion());
answerIndexList.forEach(i -> finalMulSelectQuestions.add(mulSelectQuestions.get(i)));
}
// 填空题
List<NxQuestionInfoVo> finalFillQuestions = CollUtil.newArrayList();
if (nxTestpaperInfoVo.getFillQuestion() != null) {
List<NxQuestionInfoVo> fillQuestions = nxQuestionInfoDao.findByQuestionType("填空题", type);
if (nxTestpaperInfoVo.getFillQuestion() <= 0) {
throw new CustomException("-1", "填空题设置需大于0");
}
if (nxTestpaperInfoVo.getFillQuestion() > fillQuestions.size()) {
throw new CustomException("-1", "填空题库数量不足");
}
// 填空题题题目集合
List<Integer> answerIndexList = getIndexList(fillQuestions.size(), nxTestpaperInfoVo.getFillQuestion());
answerIndexList.forEach(i -> finalFillQuestions.add(fillQuestions.get(i)));
}
// 校验,不能全部为空
if (CollectionUtil.isEmpty(finalSelectQuestions) && CollectionUtil.isEmpty(finalJudgeQuestions) && CollectionUtil.isEmpty(finalAnswerQuestions)
&& CollectionUtil.isEmpty(finalMulSelectQuestions) && CollectionUtil.isEmpty(finalFillQuestions)) {
throw new CustomException("-1", "请至少确定一种题型数量");
}
// 生成试卷html
Map<String, String> map = getPaperHtml(nxTestpaperInfoVo, finalSelectQuestions, finalJudgeQuestions, finalAnswerQuestions,
finalMulSelectQuestions, finalFillQuestions);
nxTestpaperInfoVo.setContent(map.get("page"));
nxTestpaperInfoVo.setAnswer(map.get("answer"));
//插入表
add(nxTestpaperInfoVo);
return nxTestpaperInfoVo;
}
/**
* 生成试卷html
*
* @param selects
* @param judges
* @param answers
* @return
*/
private Map<String, String> getPaperHtml(NxTestpaperInfoVo nxTestpaperInfoVo, List<NxQuestionInfoVo> selects,
List<NxQuestionInfoVo> judges, List<NxQuestionInfoVo> answers,
List<NxQuestionInfoVo> mulSelect, List<NxQuestionInfoVo> fill) {
Map<String, String> map = new HashMap<>();
StringBuilder pageBuilder = new StringBuilder();
JSONObject answerBuilder = new JSONObject();
pageBuilder.append("<div class=\"panel-heading\">\n")
.append("<span style=\"font-size: 14px\">试卷名称:</span><span style=\"color: orangered\">" + nxTestpaperInfoVo.getName() + "</span>\n")
.append("<span style=\"font-size: 14px; margin-left: 20px\">试卷编号:</span><span style=\"color: orangered\">" + nxTestpaperInfoVo.getCode() + "</span>\n")
.append("<span style=\"font-size: 14px; margin-left: 20px\">考试剩余时间:</span><span id=\"time\" style=\"color: orangered\">" + nxTestpaperInfoVo.getTime() + "分</span>\n")
.append("</div>\n")
.append("<div class=\"panel-body\">\n")
.append("<div style=\"border: 1px solid #1E9FFF;\">
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1用户: 登录注册(账号密码登录) 普通用户:增删改查个人信息,答题 管理员: 1)基本管理增删改查 全部用户信息 2)系统公告信息的增删改查,支持富文本编辑器 3)新闻资讯管理:管理员实现增添删改功能,用户不要需要登陆就可以浏览 4)试卷类型管理:比如政治试卷、语文试卷等 5)题型管理:比如单选、多选、填空、判断、简答 6)题目管理:管理员可以出各种题型的题目,相当于一个题库 7)试卷管理:管理员可以出试卷,指定试卷类型,以及每种题型的数量,自动在题库里抽题组成一套试卷。用户登录后可以点击开始答题,自动倒计时,提交试卷后不能再答题,时间到后也不能再答题 8)成绩管理:管理员可以对用户做完的题,进行打分,客观题自动打分,主观题手动给分 9)个人信息管理 10)修改密码
资源推荐
资源详情
资源评论
收起资源包目录
基于java的答题系统设计与实现+毕业论文 (575个子文件)
$PRODUCT_WORKSPACE_FILE$ 489B
NxTestpaperInfoService.class 14KB
NxTestpaperInfoService.class 14KB
AccountController.class 12KB
AccountController.class 12KB
AdminInfoController.class 8KB
AdminInfoController.class 8KB
UserInfoController.class 8KB
UserInfoController.class 8KB
EchartsController.class 8KB
EchartsController.class 8KB
NxTestpaperInfoController.class 8KB
NxTestpaperInfoController.class 8KB
NxSystemFileController.class 8KB
NxSystemFileController.class 8KB
AdvertiserInfoController.class 8KB
AdvertiserInfoController.class 8KB
NxQuestionTypeInfoController.class 7KB
NxQuestionTypeInfoController.class 7KB
NxQuestionInfoController.class 7KB
NxQuestionInfoController.class 7KB
NxTypeInfoController.class 7KB
NxTypeInfoController.class 7KB
MenuController.class 5KB
MenuController.class 5KB
NxScoreInfoController.class 4KB
NxScoreInfoController.class 4KB
ZixunInfoCommentService.class 4KB
ZixunInfoCommentService.class 4KB
AdminInfoService.class 4KB
AdminInfoService.class 4KB
UserInfoService.class 4KB
UserInfoService.class 4KB
ZixunInfoCommentController.class 4KB
ZixunInfoCommentController.class 4KB
NxScoreInfoService.class 4KB
NxScoreInfoService.class 4KB
MessageInfoService.class 4KB
MessageInfoService.class 4KB
NxQuestionInfoService.class 3KB
NxQuestionInfoService.class 3KB
MessageInfoController.class 3KB
MessageInfoController.class 3KB
ZixunInfoController.class 3KB
ZixunInfoController.class 3KB
AdminInfo.class 3KB
AdminInfo.class 3KB
AdvertiserInfoService.class 3KB
AdvertiserInfoService.class 3KB
UserInfo.class 3KB
UserInfo.class 3KB
NxQuestionTypeInfoService.class 3KB
NxQuestionTypeInfoService.class 3KB
NxScoreInfo.class 3KB
NxScoreInfo.class 3KB
NxTypeInfoService.class 3KB
NxTypeInfoService.class 3KB
ZixunInfoService.class 3KB
ZixunInfoService.class 3KB
Account.class 3KB
Account.class 3KB
NxSystemFileInfoService.class 3KB
NxSystemFileInfoService.class 3KB
Result.class 2KB
Result.class 2KB
NxQuestionInfo.class 2KB
NxQuestionInfo.class 2KB
NxTestpaperInfo.class 2KB
NxTestpaperInfo.class 2KB
EchartsData.class 2KB
EchartsData.class 2KB
ResultCode.class 2KB
ResultCode.class 2KB
ZixunInfoComment.class 2KB
ZixunInfoComment.class 2KB
MyInterceptor.class 2KB
MyInterceptor.class 2KB
GlobalExceptionHandler.class 2KB
GlobalExceptionHandler.class 2KB
MessageInfo.class 2KB
MessageInfo.class 2KB
LoginFilter.class 2KB
LoginFilter.class 2KB
WebMvcConfig.class 2KB
WebMvcConfig.class 2KB
EchartsData$Data.class 1KB
EchartsData$Data.class 1KB
AdvertiserInfo.class 1KB
AdvertiserInfo.class 1KB
NxTestpaperInfoVo.class 1KB
NxTestpaperInfoVo.class 1KB
EchartsData$Series.class 1KB
EchartsData$Series.class 1KB
AuthorityInfo.class 1KB
AuthorityInfo.class 1KB
NxQuestionTypeInfo.class 1KB
NxQuestionTypeInfo.class 1KB
NxSystemFileInfo.class 1KB
NxSystemFileInfo.class 1KB
NxTypeInfo.class 1KB
共 575 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
- m0_744156752024-04-24资源内容详尽,对我有使用价值,谢谢资源主的分享。
- 2301_773215762024-03-18怎么能有这么好的资源!只能用感激涕零来形容TAT...
code.song
- 粉丝: 1094
- 资源: 1285
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于SpringBoot的学生心理咨询评估平台
- 开题报告springboot005学生心理咨询评估系统开题.doc
- Java-springboot大学生心理咨询管理系统计算机毕业设计程序.zip
- 第二届阿里巴巴大数据智能云上编程大赛冠军解决方案.zip
- 开题报告springboot019高校心理教育辅导设计与实现开题报告
- STM32 定时器的使用
- 掌上客网页小程序前端+后端 开源版本.zip
- 线上迁移大表数据.zip
- EPSON-L3110 清零软件
- 2、Python量化交易-三剑客之pandas ==== 对应的jupyter笔记
- linux-lite-7.0下载种子文件
- 2023.1-2024.4城市空气质量指数数据(月度)(含PM2.5、PM10、SO2、CO、NO2、O3)
- java 小游戏,个人学习整理,仅供参考
- java实现2048小游戏的代码
- 佳能打印机通用清零软件
- 小功率调幅发射机(仿真+报告)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功