Quellcode durchsuchen

查询考试列表时检查是否参与过考试;考前预览时检查是否达到考试限制次数,检查是否有考试记录,有记录则可以查看成绩;获取用户考试成绩接口;

yangfeng vor 1 Jahr
Ursprung
Commit
5600e6e3c9

+ 24 - 0
web/src/main/java/com/ynfy/buss/exam/exam/controller/ExamController.java

@@ -266,4 +266,28 @@ public class ExamController extends JeecgController<Exam, IExamService> {
     public Result<?> getCacheAnswer(@RequestParam(name = "userExamId") String userExamId) {
         return Result.ok(examService.getCacheAnswer(userExamId));
     }
+
+    /**
+     * 检查是否达到考试限制次数
+     *
+     * @param examId
+     * @return
+     */
+    @GetMapping(value = "/checkToLimit")
+    public Result<?> checkToLimit(@RequestParam(name = "examId") String examId) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        return Result.ok(examService.checkToLimit(user.getId(), examId));
+    }
+
+    /**
+     * 检查是否有考试记录
+     *
+     * @param examId
+     * @return
+     */
+    @GetMapping(value = "/examRecordExist")
+    public Result<?> examRecordExist(@RequestParam(name = "examId") String examId) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        return Result.ok(examService.examRecordExist(user.getId(), examId));
+    }
 }

+ 6 - 0
web/src/main/java/com/ynfy/buss/exam/exam/entity/Exam.java

@@ -171,6 +171,12 @@ public class Exam implements Serializable {
     @TableField(exist = false)
     private List<QuestionTypeCountDTO> questionTypeCountList;
 
+    /**
+     * 用户考试次数
+     */
+    @TableField(exist = false)
+    private Integer tryCount;
+
     /**
      * 图片
      */

+ 2 - 10
web/src/main/java/com/ynfy/buss/exam/exam/mapper/xml/ExamMapper.xml

@@ -78,7 +78,8 @@
 
     <select id="selectExamList"  resultType="com.ynfy.buss.exam.exam.entity.Exam">
         SELECT
-            tmp1.*
+            tmp1.* ,
+            tmp2.try_count
         FROM
         (
             SELECT
@@ -118,15 +119,6 @@
         ) tmp2
         ON tmp1.ID = tmp2.exam_id
         <where>
-            (
-                CASE WHEN
-                    tmp1.limit_count IS NOT NULL AND tmp2.try_count IS NOT NULL
-                THEN
-                    tmp2.try_count &lt; tmp1.limit_count
-                ELSE
-                    1 = 1
-                END
-            )
             <if test="exam.title!=null and exam.title!=''">
                 AND tmp1.title like concat('%', #{exam.title}, '%')
             </if>

+ 18 - 0
web/src/main/java/com/ynfy/buss/exam/exam/service/IExamService.java

@@ -89,4 +89,22 @@ public interface IExamService extends IService<Exam> {
      * @return
      */
     void deleteCacheAnswer(String userExamId);
+
+    /**
+     * 检查是否达到考试限制次数
+     *
+     * @param userId
+     * @param examId
+     * @return
+     */
+    Boolean checkToLimit(String userId, String examId);
+
+
+    /**
+     * 检查是否有考试记录
+     *
+     * @param examId
+     * @return
+     */
+    Boolean examRecordExist(String userId, String examId);
 }

+ 30 - 0
web/src/main/java/com/ynfy/buss/exam/exam/service/impl/ExamServiceImpl.java

@@ -1074,4 +1074,34 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         redisUtil.del(userExamId);
     }
 
+    /**
+     * 检查是否达到考试限制次数
+     *
+     * @param userId
+     * @param examId
+     * @return
+     */
+    @Override
+    public Boolean checkToLimit(String userId, String examId) {
+        Exam exam = getById(examId);
+        if (!Objects.isNull(exam.getLimitCount())) {
+            long userExamNum = userExamService.countUserExam(userId, examId);
+            if (userExamNum >= exam.getLimitCount()) { //考试次数达到上限
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 检查是否有考试记录
+     *
+     * @param examId
+     * @return
+     */
+    @Override
+    public Boolean examRecordExist(String userId, String examId) {
+        long userExamNum = userExamService.countUserExam(userId, examId);
+        return userExamNum > 0;
+    }
 }

+ 14 - 0
web/src/main/java/com/ynfy/buss/exam/userexamresult/controller/UserExamResultController.java

@@ -7,10 +7,12 @@ import com.ynfy.buss.exam.userexamresult.service.IUserExamResultService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.vo.LoginUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -154,4 +156,16 @@ public class UserExamResultController extends JeecgController<UserExamResult, IU
         return super.importExcel(request, response, UserExamResult.class);
     }
 
+	 /**
+	  * 获取用户考试成绩
+	  *
+	  * @param examId
+	  * @return
+	  */
+	 @GetMapping(value = "/examScore")
+	 public Result<?> examScore(@RequestParam(name = "examId") String examId) {
+		 LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		 return Result.ok(userExamResultService.examScore(user.getId(), examId));
+	 }
+
 }

+ 44 - 0
web/src/main/java/com/ynfy/buss/exam/userexamresult/entity/vo/UserExamScoreVO.java

@@ -0,0 +1,44 @@
+package com.ynfy.buss.exam.userexamresult.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 学习时长计算vo
+ */
+@Data
+public class UserExamScoreVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 考试次数
+     */
+    private Integer tryCount;
+
+    /**
+     * 最高得分
+     */
+    private Integer maxScore;
+
+    /**
+     * 是否通过
+     */
+    private Integer passed;
+
+
+    /**
+     * 试卷总分
+     */
+    private Integer totalScore;
+
+    /**
+     * 及格分
+     */
+    private Integer qualifyScore;
+
+    /**
+     * 试题总数
+     */
+    private Integer questionCount;
+}

+ 3 - 0
web/src/main/java/com/ynfy/buss/exam/userexamresult/mapper/UserExamResultMapper.java

@@ -3,6 +3,7 @@ package com.ynfy.buss.exam.userexamresult.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ynfy.buss.exam.userexamresult.entity.UserExamResult;
+import com.ynfy.buss.exam.userexamresult.entity.vo.UserExamScoreVO;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -13,4 +14,6 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface UserExamResultMapper extends BaseMapper<UserExamResult> {
     IPage<UserExamResult> selectPageList(IPage<UserExamResult> page, @Param("userExamResult") UserExamResult userExamResult);
+
+    UserExamScoreVO getUserExamScore(@Param("userId") String userId, @Param("examId") String examId);
 }

+ 15 - 0
web/src/main/java/com/ynfy/buss/exam/userexamresult/mapper/xml/UserExamResultMapper.xml

@@ -22,4 +22,19 @@
             </if>
         </where>
     </select>
+
+    <select id="getUserExamScore" resultType="com.ynfy.buss.exam.userexamresult.entity.vo.UserExamScoreVO">
+        SELECT
+            u.try_count,
+            u.max_score,
+            u.passed,
+            e.total_score,
+            e.qualify_score,
+            p.question_count
+        FROM user_exam_result u
+        LEFT JOIN exam e on u.exam_id = e.id
+        LEFT JOIN paper p on e.paper_id=p.id
+        WHERE
+            u.user_id = #{userId} AND u.exam_id = #{examId}
+    </select>
 </mapper>

+ 10 - 0
web/src/main/java/com/ynfy/buss/exam/userexamresult/service/IUserExamResultService.java

@@ -3,6 +3,7 @@ package com.ynfy.buss.exam.userexamresult.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ynfy.buss.exam.userexamresult.entity.UserExamResult;
+import com.ynfy.buss.exam.userexamresult.entity.vo.UserExamScoreVO;
 
 import java.util.List;
 
@@ -32,4 +33,13 @@ public interface IUserExamResultService extends IService<UserExamResult> {
 
 
     List<UserExamResult> listByExamId(String examId);
+
+
+    /**
+     * 获取考试成绩
+     *
+     * @param examId
+     * @return
+     */
+    UserExamScoreVO examScore(String userId, String examId);
 }

+ 12 - 1
web/src/main/java/com/ynfy/buss/exam/userexamresult/service/impl/UserExamResultServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ynfy.buss.exam.userexamresult.entity.UserExamResult;
+import com.ynfy.buss.exam.userexamresult.entity.vo.UserExamScoreVO;
 import com.ynfy.buss.exam.userexamresult.mapper.UserExamResultMapper;
 import com.ynfy.buss.exam.userexamresult.service.IUserExamResultService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +23,6 @@ import java.util.Objects;
 @Service
 public class UserExamResultServiceImpl extends ServiceImpl<UserExamResultMapper, UserExamResult> implements IUserExamResultService {
 
-
     @Autowired
     private UserExamResultMapper userExamResultMapper;
 
@@ -73,4 +73,15 @@ public class UserExamResultServiceImpl extends ServiceImpl<UserExamResultMapper,
         wrapper.lambda().eq(UserExamResult::getExamId, examId);
         return this.list(wrapper);
     }
+
+    /**
+     * 获取考试成绩
+     *
+     * @param examId
+     * @return
+     */
+    @Override
+    public UserExamScoreVO examScore(String userId, String examId) {
+        return userExamResultMapper.getUserExamScore(userId, examId);
+    }
 }