瀏覽代碼

首页查询考试和课程

yangfeng 1 年之前
父節點
當前提交
0fd3609f64

+ 4 - 0
core/src/main/java/org/jeecg/common/system/util/JwtUtil.java

@@ -18,6 +18,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
@@ -280,6 +281,9 @@ public class JwtUtil {
      * @return
      */
     public static String getFieldValue(String token, String fieldName) {
+        if (StringUtils.isBlank(token)) {
+            return null;
+        }
         try {
             DecodedJWT jwt = JWT.decode(token);
             return jwt.getClaim(fieldName).asString();

+ 26 - 4
web/src/main/java/com/ynfy/app/api/v1/controller/ApiIndexController.java

@@ -1,19 +1,28 @@
 package com.ynfy.app.api.v1.controller;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ynfy.app.api.v1.annoation.IgnoreAuth;
+import com.ynfy.app.api.v1.util.TokenUtil;
 import com.ynfy.buss.banner.service.IBannerService;
 import com.ynfy.buss.course.course.service.ICourseService;
+import com.ynfy.buss.exam.exam.entity.Exam;
+import com.ynfy.buss.exam.exam.service.IExamService;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+import java.util.Objects;
+
 @Slf4j
 @RestController
 @RequestMapping("/api/v1/index")
@@ -28,6 +37,11 @@ public class ApiIndexController extends ApiBaseController {
     @Autowired
     private ICourseService courseService;
 
+
+    @Autowired
+    private IExamService examService;
+
+    @IgnoreAuth
     @PostMapping("/banner/list")
     public Result<?> list() {
         return Result.OK(bannerService.list());
@@ -38,6 +52,7 @@ public class ApiIndexController extends ApiBaseController {
      *
      * @return
      */
+    @IgnoreAuth
     @PostMapping("/announcement/list")
     public Result<?> announcementList() {
         LambdaQueryWrapper<SysAnnouncement> query = new LambdaQueryWrapper<>();
@@ -50,9 +65,10 @@ public class ApiIndexController extends ApiBaseController {
      *
      * @return
      */
+    @IgnoreAuth
     @GetMapping("/listHotCourse")
-    public Result<?> listHotCourse() {
-        return Result.OK(courseService.listHotCourse(5));
+    public Result<?> listHotCourse(Integer limit) {
+        return Result.OK(courseService.listHotCourse(limit));
     }
 
     /**
@@ -60,9 +76,15 @@ public class ApiIndexController extends ApiBaseController {
      *
      * @return
      */
+    @IgnoreAuth
     @GetMapping("/listLatestExam")
-    public Result<?> listLatestExam() {
-        return Result.OK();
+    public Result<?> listLatestExam(Integer limit) {
+        List<Exam> examList = examService.listLatestExam(limit, TokenUtil.getUserId(TokenUtil.getToken(request)));
+        if (!CollectionUtils.isEmpty(examList)) {
+            examList.forEach(item -> item.setAppShowTime(DateUtil.parseDate(DateUtil.formatDate(!Objects.isNull(item.getUpdateTime())
+                    ? item.getUpdateTime() : item.getCreateTime()))));
+        }
+        return Result.OK(examList);
     }
 
 }

+ 1 - 4
web/src/main/java/com/ynfy/app/api/v1/util/TokenUtil.java

@@ -1,11 +1,8 @@
 package com.ynfy.app.api.v1.util;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.authc.AuthenticationException;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.util.JwtUtil;
-import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.common.util.TokenUtils;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -32,7 +29,7 @@ public class TokenUtil {
         }
         //token为空
         if (StringUtils.isBlank(token)) {
-            throw new JeecgBootException("请先登录");
+            return null;
         }
         return token;
     }

+ 2 - 6
web/src/main/java/com/ynfy/buss/course/course/controller/CourseController.java

@@ -217,12 +217,8 @@ public class CourseController extends JeecgController<Course, ICourseService> {
         //设置课程分类
         courseService.setCategory(pageList);
         if (!CollectionUtils.isEmpty(pageList.getRecords())) {
-            LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-            List<String> courseIdList = pageList.getRecords().stream().map(Course::getId).collect(Collectors.toList());
-            List<UserCourseStudyVO> studyList = userCourseCatalogService.getUserCourseStudy(courseIdList, sysUser.getId());
-            if (!CollectionUtils.isEmpty(studyList)) {
-                pageList.getRecords().forEach((o) -> courseService.setCourseStudyProcess(studyList, o));
-            }
+            //设置用户学习情况
+            courseService.setUserStudyInfo(pageList.getRecords(), user.getId());
         }
         result.setSuccess(true);
         result.setResult(pageList);

+ 8 - 0
web/src/main/java/com/ynfy/buss/course/course/service/ICourseService.java

@@ -45,4 +45,12 @@ public interface ICourseService extends IService<Course> {
      * @return
      */
     List<Course> listHotCourse(Integer limit);
+
+    /**
+     * 设置用户学习情况
+     *
+     * @param courseList
+     * @param userId
+     */
+    void setUserStudyInfo(List<Course> courseList, String userId);
 }

+ 20 - 1
web/src/main/java/com/ynfy/buss/course/course/service/impl/CourseServiceImpl.java

@@ -8,8 +8,8 @@ import com.ynfy.buss.course.course.mapper.CourseMapper;
 import com.ynfy.buss.course.course.service.ICourseService;
 import com.ynfy.buss.course.coursecatalog.service.ICourseCatalogService;
 import com.ynfy.buss.course.usercoursecatalog.entity.vo.UserCourseStudyVO;
+import com.ynfy.buss.course.usercoursecatalog.service.IUserCourseCatalogService;
 import org.apache.commons.lang.StringUtils;
-import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.service.ISysCategoryService;
@@ -21,6 +21,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @Description: course
@@ -43,6 +44,9 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     @Autowired
     private ISysCategoryService sysCategoryService;
 
+    @Autowired
+    private IUserCourseCatalogService userCourseCatalogService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveCourse(Course course) {
@@ -116,4 +120,19 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     public List<Course> listHotCourse(Integer limit) {
         return courseMapper.listHotCourse(limit);
     }
+
+    /**
+     * 设置用户学习情况
+     *
+     * @param courseList
+     * @param userId
+     */
+    @Override
+    public void setUserStudyInfo(List<Course> courseList, String userId) {
+        List<String> courseIdList = courseList.stream().map(Course::getId).collect(Collectors.toList());
+        List<UserCourseStudyVO> studyList = userCourseCatalogService.getUserCourseStudy(courseIdList, userId);
+        if (!CollectionUtils.isEmpty(studyList)) {
+            courseList.forEach((o) -> setCourseStudyProcess(studyList, o));
+        }
+    }
 }

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

@@ -190,6 +190,18 @@ public class Exam implements Serializable {
     @ApiModelProperty(value = "展示截止时间")
     private Integer showDeadline;
 
+    /**
+     * app端展示时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date appShowTime;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "是否通过")
+    private Integer passed;
+
     /**
      * 是否结束
      *

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

@@ -3,6 +3,7 @@ package com.ynfy.buss.exam.exam.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ynfy.buss.exam.exam.entity.Exam;
+import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.common.system.vo.LoginUser;
 
@@ -27,4 +28,6 @@ public interface ExamMapper extends BaseMapper<Exam> {
      * @return
      */
     List<String> listExamIng();
+
+    List<Exam> listLatestExam(@Param("limit") Integer limit, @Param("userId") String userId);
 }

+ 32 - 0
web/src/main/java/com/ynfy/buss/exam/exam/mapper/xml/ExamMapper.xml

@@ -137,4 +137,36 @@
             start_time &lt; now()
           AND now() &lt; DATE_ADD(end_time , INTERVAL 3 HOUR)
     </select>
+
+    <select id="listLatestExam" resultType="com.ynfy.buss.exam.exam.entity.Exam">
+        SELECT
+            e.*,
+            IFNULL( update_time, create_time ) AS time_sort
+        <choose>
+            <when test="userId !=null and userId != ''">
+               ,tmp.try_count, tmp.passed
+            </when>
+        </choose>
+        FROM
+            exam e
+        <choose>
+           <when test="userId !=null and userId != ''">
+              LEFT JOIN (
+                   SELECT
+                       exam_id,
+                       try_count,
+                       passed
+                   FROM
+                    user_exam_result uer
+                   WHERE
+                    uer.user_id = #{userId}
+              ) tmp ON e.id = tmp.exam_id
+           </when>
+        </choose>
+        ORDER BY
+            time_sort DESC
+        <if test="limit !=null">
+            LIMIT #{limit}
+        </if>
+    </select>
 </mapper>

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

@@ -125,4 +125,12 @@ public interface IExamService extends IService<Exam> {
      * @return
      */
     String generateQuestionAnswerTag(String userAnswer, Question question);
+
+
+    /**
+     * 最新考试
+     *
+     * @return
+     */
+    List<Exam> listLatestExam(Integer limit, String userId);
 }

+ 10 - 1
web/src/main/java/com/ynfy/buss/exam/exam/service/impl/ExamServiceImpl.java

@@ -38,7 +38,6 @@ import com.ynfy.common.utils.CharUtil;
 import com.ynfy.common.utils.CronUtils;
 import com.ynfy.common.utils.ThreadPoolUtil;
 import org.apache.commons.lang.StringUtils;
-import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
@@ -1091,4 +1090,14 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         long userExamNum = userExamService.countUserExam(userId, examId);
         return userExamNum > 0;
     }
+
+    /**
+     * 最新考试
+     *
+     * @return
+     */
+    @Override
+    public List<Exam> listLatestExam(Integer limit, String userId) {
+        return examMapper.listLatestExam(limit, userId);
+    }
 }