diff --git a/ruoyi-cms/src/main/java/com/ruoyi/cms/controller/CmsExaminationController.java b/ruoyi-cms/src/main/java/com/ruoyi/cms/controller/CmsExaminationController.java index 6d0514cc5..74735b38b 100644 --- a/ruoyi-cms/src/main/java/com/ruoyi/cms/controller/CmsExaminationController.java +++ b/ruoyi-cms/src/main/java/com/ruoyi/cms/controller/CmsExaminationController.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.ruoyi.common.base.AjaxResult; import com.ruoyi.exam.domain.*; import com.ruoyi.exam.service.*; +import com.ruoyi.exam.service.impl.ExamExaminationServiceImpl; import com.ruoyi.framework.jwt.JwtUtil; import com.ruoyi.framework.web.exception.base.BaseException; import com.ruoyi.framework.web.util.ShiroUtils; @@ -12,10 +13,7 @@ import com.ruoyi.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import java.util.*; @@ -145,5 +143,18 @@ public class CmsExaminationController { return prefix+"detail"; } + @RequestMapping("/examination/finish/{examUserExaminationId}/{examinationId}/{paperId}") + @ResponseBody + public AjaxResult finish(@RequestBody List examUserExaminationQuestion, + @PathVariable Integer examUserExaminationId, @PathVariable Integer examinationId, @PathVariable Integer paperId,ModelMap map) { + SysUser sysUser = ShiroUtils.getSysUser(); + //交卷然后返回考试记录id + Integer id = examExaminationService.finshExamination(examUserExaminationQuestion,sysUser,examUserExaminationId,examinationId,paperId); + ExamUserExaminationVO data = examUserExaminationService.selectDetailById( id ); + AjaxResult success = AjaxResult.success( "报名成功" ); + success.put("id",id); + return success; + } + } diff --git a/ruoyi-cms/src/main/resources/templates/web/examination/detail.html b/ruoyi-cms/src/main/resources/templates/web/examination/detail.html index 1eb069733..1a48dd55b 100644 --- a/ruoyi-cms/src/main/resources/templates/web/examination/detail.html +++ b/ruoyi-cms/src/main/resources/templates/web/examination/detail.html @@ -14,12 +14,14 @@
-
+
- [[${examExamination.name}]] + [[${examExamination.name}]]
+
+
[[${questionStat.index+1}]]: (单选) @@ -47,15 +49,14 @@
-
- -
+
+
@@ -84,18 +85,29 @@ document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Csc function endPaper() { var data = []; $(".question").each(function(){ + var examQuestionId = $(this).find(".questionId").eq(0).val() + var userAnswer = ""; + $(this).find("."+examQuestionId+"useranswer:checked").each(function(){ + userAnswer+=$(this).val()+","; + }) + userAnswer = userAnswer.substring(0,userAnswer.length-1) + data.push({examQuestionId:examQuestionId,userAnswer:userAnswer}) }) $.ajax({ type: 'post', - url: "/api/v1/examination/finish/"+[[${examUserExaminationId}]]+"/"+[[${examExamination.id}]]+"/"+[[${paperId}]], + url: "/web/examination/finish/"+[[${examUserExaminationId}]]+"/"+[[${examExamination.id}]]+"/"+[[${paperId}]], contentType: "application/json", data: JSON.stringify(data), success: function (result) { if (result.code != web_status.SUCCESS) { - $.modal.msgError(result.msg); + layer.msg(result.msg, {icon: 2}) + }else{ + layer.msg("已交卷", {icon: 1}) + location.href="/web/user/myuserexamination/detail/"+result.id; } } + }); } diff --git a/ruoyi-cms/src/main/resources/templates/web/examination/list.html b/ruoyi-cms/src/main/resources/templates/web/examination/list.html index c7f9981b1..c10722104 100644 --- a/ruoyi-cms/src/main/resources/templates/web/examination/list.html +++ b/ruoyi-cms/src/main/resources/templates/web/examination/list.html @@ -40,6 +40,14 @@ + +
@@ -84,6 +92,7 @@ document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Csc {checkbox: true} , {field: 'name', title: '考试名称'} , {field: 'trainCourseName', title: '课程名称'} + ,{field: 'type', title: '考试类型',templet: '#type'} , {field: 'timeLength', title: '考试时长'} , {field: 'passMark', title: '及格分数'} , {title: '操作', toolbar: '#barDemo'} @@ -162,6 +171,7 @@ document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Csc {checkbox: true} , {field: 'name', title: '考试名称'} , {field: 'trainCourseName', title: '课程名称'} + ,{field: 'type', title: '考试类型',templet: '#type'} , {field: 'timeLength', title: '考试时长'} , {field: 'passMark', title: '及格分数'} , {title: '操作', toolbar: '#signup'} diff --git a/ruoyi-cms/src/main/resources/templates/web/user/orders.html b/ruoyi-cms/src/main/resources/templates/web/user/orders.html new file mode 100644 index 000000000..6d81dfd87 --- /dev/null +++ b/ruoyi-cms/src/main/resources/templates/web/user/orders.html @@ -0,0 +1,92 @@ + + + + + + + +
+
+ +
+
+
+ +
+
+ 我的支付记录 +
+
+ + + + + +
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-cms/src/main/resources/templates/web/user/userexamination.html b/ruoyi-cms/src/main/resources/templates/web/user/userexamination.html new file mode 100644 index 000000000..d06ff5eef --- /dev/null +++ b/ruoyi-cms/src/main/resources/templates/web/user/userexamination.html @@ -0,0 +1,100 @@ + + + + + + + +
+
+ +
+
+
+ +
+
+ 我的考试记录 +
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-cms/src/main/resources/templates/web/user/userexamination_detail.html b/ruoyi-cms/src/main/resources/templates/web/user/userexamination_detail.html new file mode 100644 index 000000000..753d2c7b4 --- /dev/null +++ b/ruoyi-cms/src/main/resources/templates/web/user/userexamination_detail.html @@ -0,0 +1,76 @@ + + + + + + + +
+
+ +
+
+
+ +
+
+ 该试卷无法查看 +
+
+ 得分:[[${data.score}]] +
+
+
+

[[${itemStat.index+1}]]:[[${item.title}]] + ✔️回答正确 + ✘回答错误 +

+ +
+

[[${qItem.number}]]:[[${qItem.content}]]

+

正确答案[[${item.answer}]]

+
+
+
+ + + +
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ApiExaminationController.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ApiExaminationController.java index ab8bba725..35c967ebd 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ApiExaminationController.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ApiExaminationController.java @@ -261,13 +261,13 @@ public class ApiExaminationController extends BaseController { //如果是模拟考试,考试记录新增数据 if (examUserExaminationId == -1) { ExamUserExamination insert = new ExamUserExamination(); - insert.setExamExaminationId( examinationId ); - insert.setVipUserId( Integer.parseInt( userId.toString() ) ); - insert.setCreateDate( new Date() ); - insert.setExamPaperId( paperId ); - insert.setDelFlag( "0" ); - insert.setScore( 0 ); - examUserExaminationService.insertOne( insert ); + insert.setExamExaminationId(examinationId); + insert.setVipUserId(Integer.parseInt(userId.toString())); + insert.setCreateDate(new Date()); + insert.setExamPaperId(paperId); + insert.setDelFlag("0"); + insert.setScore(0); + examUserExaminationService.insertOne(insert); examUserExaminationId = insert.getId(); } @@ -276,39 +276,39 @@ public class ApiExaminationController extends BaseController { HashMap returnItem = new HashMap<>(); String userAnswer = item.getUserAnswer(); //存入用户回答 - if (StrUtil.isNotBlank( userAnswer )) { - returnItem.put( "userAnswer", userAnswer ); + if (StrUtil.isNotBlank(userAnswer)) { + returnItem.put("userAnswer", userAnswer); } Integer examQuestionId = item.getExamQuestionId(); - ExamQuestion examQuestion = examQuestionService.selectById( examQuestionId ); + ExamQuestion examQuestion = examQuestionService.selectById(examQuestionId); //存入正确答案 - if (StrUtil.isNotBlank( examQuestion.getAnswer() )) { - returnItem.put( "answer", examQuestion.getAnswer() ); + if (StrUtil.isNotBlank(examQuestion.getAnswer())) { + returnItem.put("answer", examQuestion.getAnswer()); } - returnItem.put( "title", examQuestion.getTitle() ); - returnItem.put( "rightWrong", "错误" ); - if (examQuestion.getAnswer().equals( userAnswer )) { + returnItem.put("title", examQuestion.getTitle()); + returnItem.put("rightWrong", "错误"); + if (examQuestion.getAnswer().equals(userAnswer)) { ExamPaperQuestion examPaperQuestion = new ExamPaperQuestion(); - examPaperQuestion.setExamPaperId( paperId ); - examPaperQuestion.setExamQuestionId( examQuestionId ); - score += examPaperQuestionService.selectExamPaperQuestionList( examPaperQuestion ).get( 0 ).getScore(); - returnItem.put( "rightWrong", "正确" ); + examPaperQuestion.setExamPaperId(paperId); + examPaperQuestion.setExamQuestionId(examQuestionId); + score += examPaperQuestionService.selectExamPaperQuestionList(examPaperQuestion).get(0).getScore(); + returnItem.put("rightWrong", "正确"); } - item.setExamUserExaminationId( examUserExaminationId ); - item.setCreateDate( new Date() ); - item.setCreateBy( user.getLoginName() ); - item.setDelFlag( "0" ); - item.setId( null ); - examUserExaminationQuestionService.insertOne( item ); - data.add( returnItem ); + item.setExamUserExaminationId(examUserExaminationId); + item.setCreateDate(new Date()); + item.setCreateBy(user.getLoginName()); + item.setDelFlag("0"); + item.setId(null); + examUserExaminationQuestionService.insertOne(item); + data.add(returnItem); } - ExamUserExamination examUserExamination = examUserExaminationService.selectById( examUserExaminationId ); - examUserExamination.setScore( score ); - examUserExamination.setUpdateDate( new Date() ); - examUserExamination.setCreateBy( user.getLoginName() ); - examUserExaminationService.updateOneSelectiveById( examUserExamination ); + ExamUserExamination examUserExamination = examUserExaminationService.selectById(examUserExaminationId); + examUserExamination.setScore(score); + examUserExamination.setUpdateDate(new Date()); + examUserExamination.setCreateBy(user.getLoginName()); + examUserExaminationService.updateOneSelectiveById(examUserExamination); - ExamExamination examExamination = examExaminationService.selectById( examinationId ); + ExamExamination examExamination = examExaminationService.selectById(examinationId); String finishedPaper = examExamination.getFinishedPaper(); diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamExaminationService.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamExaminationService.java index add91e741..45bbfd13a 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamExaminationService.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamExaminationService.java @@ -5,7 +5,10 @@ import java.util.List; import java.util.Map; import com.ruoyi.exam.domain.ExamQuestionVO; +import com.ruoyi.exam.domain.ExamUserExaminationQuestion; import com.ruoyi.framework.web.base.AbstractBaseService; +import com.ruoyi.system.domain.SysUser; + /** * 考试 服务层 * @@ -44,4 +47,6 @@ public interface IExamExaminationService extends AbstractBaseService selectEnterNameListFromWeb(Map map); List queryExaminationQuestion(ExamExamination examExamination,Integer examUserExaminationId); + + Integer finshExamination(List examUserExaminationQuestion, SysUser user, Integer examUserExaminationId, Integer examinationId, Integer paperId); } diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamExaminationServiceImpl.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamExaminationServiceImpl.java index 4bc4d7691..9835b1d35 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamExaminationServiceImpl.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamExaminationServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.exam.service.impl; import java.util.*; +import cn.hutool.core.util.StrUtil; import com.ruoyi.exam.domain.*; import com.ruoyi.exam.service.*; import com.ruoyi.framework.web.exception.base.BaseException; @@ -9,6 +10,7 @@ import com.ruoyi.framework.web.util.ShiroUtils; import com.ruoyi.system.domain.SysUser; import com.ruoyi.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.stereotype.Service; import com.ruoyi.exam.mapper.ExamExaminationMapper; import com.ruoyi.common.support.Convert; @@ -25,6 +27,9 @@ public class ExamExaminationServiceImpl extends AbstractBaseServiceImpl examUserExaminationQuestion,SysUser user ,Integer examUserExaminationId, Integer examinationId, Integer paperId) { + + ArrayList> data = new ArrayList<>(); + Integer userId = user.getUserId().intValue(); + //如果是模拟考试,考试记录新增数据 + if (examUserExaminationId == -1) { + ExamUserExamination insert = new ExamUserExamination(); + insert.setExamExaminationId(examinationId); + insert.setVipUserId(Integer.parseInt(userId.toString())); + insert.setCreateDate(new Date()); + insert.setExamPaperId(paperId); + insert.setDelFlag("0"); + insert.setScore(0); + examUserExaminationService.insertOne(insert); + examUserExaminationId = insert.getId(); + } + + Integer score = 0; + for (ExamUserExaminationQuestion item : examUserExaminationQuestion) { + HashMap returnItem = new HashMap<>(); + String userAnswer = item.getUserAnswer(); + //存入用户回答 + if (StrUtil.isNotBlank(userAnswer)) { + returnItem.put("userAnswer", userAnswer); + } + Integer examQuestionId = item.getExamQuestionId(); + ExamQuestion examQuestion = examQuestionService.selectById(examQuestionId); + //存入正确答案 + if (StrUtil.isNotBlank(examQuestion.getAnswer())) { + returnItem.put("answer", examQuestion.getAnswer()); + } + returnItem.put("title", examQuestion.getTitle()); + returnItem.put("rightWrong", "错误"); + if (examQuestion.getAnswer().equals(userAnswer)) { + ExamPaperQuestion examPaperQuestion = new ExamPaperQuestion(); + examPaperQuestion.setExamPaperId(paperId); + examPaperQuestion.setExamQuestionId(examQuestionId); + score += examPaperQuestionService.selectExamPaperQuestionList(examPaperQuestion).get(0).getScore(); + returnItem.put("rightWrong", "正确"); + } + item.setExamUserExaminationId(examUserExaminationId); + item.setCreateDate(new Date()); + item.setCreateBy(user.getLoginName()); + item.setDelFlag("0"); + item.setId(null); + examUserExaminationQuestionService.insertOne(item); + data.add(returnItem); + } + ExamUserExamination examUserExamination = examUserExaminationService.selectById(examUserExaminationId); + examUserExamination.setScore(score); + examUserExamination.setUpdateDate(new Date()); + examUserExamination.setCreateBy(user.getLoginName()); + examUserExaminationService.updateOneSelectiveById(examUserExamination); + + return examUserExaminationId; + } + /** * 查询考试分页列表 * @@ -180,4 +255,7 @@ public class ExamExaminationServiceImpl extends AbstractBaseServiceImpl - + + + + diff --git a/ruoyi-vip/src/main/resources/mapper/vip/VipUserOrdersMapper.xml b/ruoyi-vip/src/main/resources/mapper/vip/VipUserOrdersMapper.xml index 6ea30cfd4..86bd3aad8 100644 --- a/ruoyi-vip/src/main/resources/mapper/vip/VipUserOrdersMapper.xml +++ b/ruoyi-vip/src/main/resources/mapper/vip/VipUserOrdersMapper.xml @@ -32,6 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" join train_course c on c.id=o.train_course_id and o.id = #{id} + and o.vip_user_id = #{vipUserId} and u.user_name like CONCAT('%',#{vipUserName},'%') and c.name like CONCAT('%',#{trainCourseName},'%') and o.del_flag = #{delFlag}