Quellcode durchsuchen

设置课程学习进度

yangfeng vor 1 Jahr
Ursprung
Commit
b3aa804b19

+ 23 - 0
web/src/main/java/com/ynfy/buss/course/course/controller/CourseController.java

@@ -1,28 +1,37 @@
 package com.ynfy.buss.course.course.controller;
 package com.ynfy.buss.course.course.controller;
 
 
+import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ynfy.buss.course.course.entity.Course;
 import com.ynfy.buss.course.course.entity.Course;
 import com.ynfy.buss.course.course.service.ICourseService;
 import com.ynfy.buss.course.course.service.ICourseService;
 import com.ynfy.buss.course.coursecatalog.service.ICourseCatalogService;
 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 io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.system.service.ISysPositionService;
 import org.jeecg.modules.system.service.ISysPositionService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.ModelAndView;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @Description: course
  * @Description: course
@@ -44,6 +53,10 @@ public class CourseController extends JeecgController<Course, ICourseService> {
     @Autowired
     @Autowired
     private ISysPositionService sysPositionService;
     private ISysPositionService sysPositionService;
 
 
+    @Autowired
+    private IUserCourseCatalogService userCourseCatalogService;
+
+
     /**
     /**
      * 分页列表查询
      * 分页列表查询
      *
      *
@@ -176,7 +189,17 @@ public class CourseController extends JeecgController<Course, ICourseService> {
         Result<IPage<Course>> result = new Result<>();
         Result<IPage<Course>> result = new Result<>();
         Page<Course> page = new Page<>(pageNo, pageSize);
         Page<Course> page = new Page<>(pageNo, pageSize);
         IPage<Course> pageList = courseService.selectCourseList(page, course);
         IPage<Course> pageList = courseService.selectCourseList(page, course);
+
+        //设置课程分类
         courseService.setCategory(pageList);
         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));
+            }
+        }
         result.setSuccess(true);
         result.setSuccess(true);
         result.setResult(pageList);
         result.setResult(pageList);
         return result;
         return result;

+ 18 - 0
web/src/main/java/com/ynfy/buss/course/course/entity/Course.java

@@ -236,4 +236,22 @@ public class Course implements Serializable {
      */
      */
     @TableField(exist = false)
     @TableField(exist = false)
     private List<CourseCatalog> catalogList;
     private List<CourseCatalog> catalogList;
+
+    /**
+     * 任务数
+     */
+    @TableField(exist = false)
+    private Integer taskNum;
+
+    /**
+     * 已经学完的
+     */
+    @TableField(exist = false)
+    private Integer finishNum;
+
+    /**
+     * 课程学习进度
+     */
+    @TableField(exist = false)
+    private Double courseStudyProcess;
 }
 }

+ 3 - 1
web/src/main/java/com/ynfy/buss/course/course/mapper/xml/CourseMapper.xml

@@ -3,7 +3,8 @@
 <mapper namespace="com.ynfy.buss.course.course.mapper.CourseMapper">
 <mapper namespace="com.ynfy.buss.course.course.mapper.CourseMapper">
     <select id="selectCourseList"  resultType="com.ynfy.buss.course.course.entity.Course">
     <select id="selectCourseList"  resultType="com.ynfy.buss.course.course.entity.Course">
         SELECT
         SELECT
-                tmp1.*
+                tmp1.*,
+                u.realname AS teacherName
         FROM
         FROM
         (
         (
             SELECT
             SELECT
@@ -30,6 +31,7 @@
                 open_type = 3
                 open_type = 3
                 AND learner like concat('%', #{user.username}, '%')
                 AND learner like concat('%', #{user.username}, '%')
         ) tmp1
         ) tmp1
+        LEFT JOIN sys_user u on tmp1.teacher_id=u.id
         <where>
         <where>
             <if test="course.name!=null and course.name!=''">
             <if test="course.name!=null and course.name!=''">
                 AND tmp1.name like concat('%', #{course.name}, '%')
                 AND tmp1.name like concat('%', #{course.name}, '%')

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

@@ -3,6 +3,9 @@ package com.ynfy.buss.course.course.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ynfy.buss.course.course.entity.Course;
 import com.ynfy.buss.course.course.entity.Course;
+import com.ynfy.buss.course.usercoursecatalog.entity.vo.UserCourseStudyVO;
+
+import java.util.List;
 
 
 /**
 /**
  * @Description: course
  * @Description: course
@@ -24,4 +27,13 @@ public interface ICourseService extends IService<Course> {
     void setCategory(IPage<Course> pageList);
     void setCategory(IPage<Course> pageList);
 
 
     Course queryById(String id);
     Course queryById(String id);
+
+
+    /**
+     * 设置课程学习进度
+     *
+     * @param studyList
+     * @param course
+     */
+    void setCourseStudyProcess(List<UserCourseStudyVO> studyList, Course course);
 }
 }

+ 21 - 0
web/src/main/java/com/ynfy/buss/course/course/service/impl/CourseServiceImpl.java

@@ -1,11 +1,13 @@
 package com.ynfy.buss.course.course.service.impl;
 package com.ynfy.buss.course.course.service.impl;
 
 
+import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ynfy.buss.course.course.entity.Course;
 import com.ynfy.buss.course.course.entity.Course;
 import com.ynfy.buss.course.course.mapper.CourseMapper;
 import com.ynfy.buss.course.course.mapper.CourseMapper;
 import com.ynfy.buss.course.course.service.ICourseService;
 import com.ynfy.buss.course.course.service.ICourseService;
 import com.ynfy.buss.course.coursecatalog.service.ICourseCatalogService;
 import com.ynfy.buss.course.coursecatalog.service.ICourseCatalogService;
+import com.ynfy.buss.course.usercoursecatalog.entity.vo.UserCourseStudyVO;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.system.vo.LoginUser;
@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
+import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
 
 
 /**
 /**
@@ -84,4 +87,22 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     public Course queryById(String id) {
     public Course queryById(String id) {
         return courseMapper.queryById(id);
         return courseMapper.queryById(id);
     }
     }
+
+
+    /**
+     * 设置课程学习进度
+     *
+     * @param studyList
+     * @param course
+     */
+    @Override
+    public void setCourseStudyProcess(List<UserCourseStudyVO> studyList, Course course) {
+        UserCourseStudyVO studyVO = studyList.stream().filter(o1 -> o1.getCourseId().equals(course.getId())).findFirst().get();
+        course.setTaskNum(studyVO.getTaskNum());
+        course.setFinishNum(studyVO.getFinishNum());
+        if (!Objects.isNull(studyVO.getTaskNum())) {
+            //课程学习进度
+            course.setCourseStudyProcess(NumberUtil.div(studyVO.getFinishNum(), studyVO.getTaskNum()).doubleValue());
+        }
+    }
 }
 }

+ 24 - 0
web/src/main/java/com/ynfy/buss/course/usercoursecatalog/entity/vo/UserCourseStudyVO.java

@@ -0,0 +1,24 @@
+package com.ynfy.buss.course.usercoursecatalog.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UserCourseStudyVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String courseId;
+
+
+    /**
+     * 任务数
+     */
+    private Integer taskNum;
+
+    /**
+     * 已经学完的
+     */
+    private Integer finishNum;
+
+}

+ 15 - 4
web/src/main/java/com/ynfy/buss/course/usercoursecatalog/mapper/UserCourseCatalogMapper.java

@@ -1,17 +1,28 @@
 package com.ynfy.buss.course.usercoursecatalog.mapper;
 package com.ynfy.buss.course.usercoursecatalog.mapper;
 
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ynfy.buss.course.usercoursecatalog.entity.UserCourseCatalog;
 import com.ynfy.buss.course.usercoursecatalog.entity.UserCourseCatalog;
+import com.ynfy.buss.course.usercoursecatalog.entity.vo.UserCourseStudyVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
 
 
 /**
 /**
  * @Description: 用户课程任务学习情况
  * @Description: 用户课程任务学习情况
  * @Author: jeecg-boot
  * @Author: jeecg-boot
- * @Date:   2023-10-25
+ * @Date: 2023-10-25
  * @Version: V1.0
  * @Version: V1.0
  */
  */
 public interface UserCourseCatalogMapper extends BaseMapper<UserCourseCatalog> {
 public interface UserCourseCatalogMapper extends BaseMapper<UserCourseCatalog> {
 
 
+
+    /**
+     * 获取用户课程学习情况
+     *
+     * @param courseIds
+     * @param userId
+     * @return
+     */
+    List<UserCourseStudyVO> getUserCourseStudy(@Param("courseIds") List<String> courseIds, @Param("userId") String userId);
+
 }
 }

+ 30 - 0
web/src/main/java/com/ynfy/buss/course/usercoursecatalog/mapper/xml/UserCourseCatalogMapper.xml

@@ -1,5 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ynfy.buss.course.usercoursecatalog.mapper.UserCourseCatalogMapper">
 <mapper namespace="com.ynfy.buss.course.usercoursecatalog.mapper.UserCourseCatalogMapper">
+    <resultMap id="studyMap" type="com.ynfy.buss.course.usercoursecatalog.entity.vo.UserCourseStudyVO">
+        <result column="course_id" property="courseId" jdbcType="VARCHAR"/>
+        <result column="task_num" property="taskNum" jdbcType="INTEGER"/>
+        <result column="finish_num" property="finishNum" jdbcType="INTEGER"/>
+    </resultMap>
 
 
+    <select id="getUserCourseStudy" resultMap="studyMap">
+        SELECT
+        cc.course_id,
+        count(*) AS task_num,
+        sum(
+        CASE
+
+        WHEN ucc.learn_process IS NOT NULL
+        AND ucc.learn_process >= 1 THEN
+        1 ELSE 0
+        END
+        ) AS finish_num
+        FROM
+        course_catalog cc
+        LEFT JOIN user_course_catalog ucc ON cc.id = ucc.course_catalog_id
+        AND ucc.user_id = #{userId}
+        WHERE
+        cc.course_id IN
+        <foreach collection="courseIds" index="index" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        AND cc.type = 2
+        GROUP BY
+        cc.course_id
+    </select>
 </mapper>
 </mapper>

+ 11 - 0
web/src/main/java/com/ynfy/buss/course/usercoursecatalog/service/IUserCourseCatalogService.java

@@ -1,6 +1,7 @@
 package com.ynfy.buss.course.usercoursecatalog.service;
 package com.ynfy.buss.course.usercoursecatalog.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ynfy.buss.course.usercoursecatalog.entity.vo.UserCourseStudyVO;
 import com.ynfy.buss.course.usercoursecatalog.entity.UserCourseCatalog;
 import com.ynfy.buss.course.usercoursecatalog.entity.UserCourseCatalog;
 import com.ynfy.buss.course.usercoursecatalog.entity.vo.CatalogTimeVO;
 import com.ynfy.buss.course.usercoursecatalog.entity.vo.CatalogTimeVO;
 
 
@@ -30,4 +31,14 @@ public interface IUserCourseCatalogService extends IService<UserCourseCatalog> {
      * @return
      * @return
      */
      */
     List<UserCourseCatalog> getCourseStudyProcess(String courseId);
     List<UserCourseCatalog> getCourseStudyProcess(String courseId);
+
+
+    /**
+     * 获取用户课程学习情况
+     *
+     * @param courseIds
+     * @param userId
+     * @return
+     */
+    List<UserCourseStudyVO> getUserCourseStudy(List<String> courseIds, String userId);
 }
 }

+ 16 - 0
web/src/main/java/com/ynfy/buss/course/usercoursecatalog/service/impl/UserCourseCatalogServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ynfy.buss.course.usercoursecatalog.entity.vo.UserCourseStudyVO;
 import com.ynfy.buss.course.coursecatalog.entity.CourseCatalog;
 import com.ynfy.buss.course.coursecatalog.entity.CourseCatalog;
 import com.ynfy.buss.course.coursecatalog.service.ICourseCatalogService;
 import com.ynfy.buss.course.coursecatalog.service.ICourseCatalogService;
 import com.ynfy.buss.course.usercoursecatalog.entity.UserCourseCatalog;
 import com.ynfy.buss.course.usercoursecatalog.entity.UserCourseCatalog;
@@ -32,6 +33,9 @@ import java.util.stream.Collectors;
 @Service
 @Service
 public class UserCourseCatalogServiceImpl extends ServiceImpl<UserCourseCatalogMapper, UserCourseCatalog> implements IUserCourseCatalogService {
 public class UserCourseCatalogServiceImpl extends ServiceImpl<UserCourseCatalogMapper, UserCourseCatalog> implements IUserCourseCatalogService {
 
 
+    @Autowired
+    private UserCourseCatalogMapper userCourseCatalogMapper;
+
     @Lazy
     @Lazy
     @Autowired
     @Autowired
     private ICourseCatalogService courseCatalogService;
     private ICourseCatalogService courseCatalogService;
@@ -97,4 +101,16 @@ public class UserCourseCatalogServiceImpl extends ServiceImpl<UserCourseCatalogM
                 .in(UserCourseCatalog::getCourseCatalogId, courseCatalogIdList);
                 .in(UserCourseCatalog::getCourseCatalogId, courseCatalogIdList);
         return list(query);
         return list(query);
     }
     }
+
+    /**
+     * 获取用户课程学习情况
+     *
+     * @param courseIds
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<UserCourseStudyVO> getUserCourseStudy(List<String> courseIds, String userId) {
+        return userCourseCatalogMapper.getUserCourseStudy(courseIds, userId);
+    }
 }
 }