Browse Source

课程学习统计

wangchangsheng 2 years ago
parent
commit
b81c059b85

+ 21 - 0
exam-06173-api/src/main/java/com/yf/exam/modules/course/dto/CourseDTO.java

@@ -1,5 +1,7 @@
 package com.yf.exam.modules.course.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.yf.boot.base.api.annon.Dict;
 import com.yf.exam.modules.course.enums.CourseState;
 import io.swagger.annotations.ApiModel;
@@ -136,6 +138,25 @@ public class CourseDTO implements Serializable {
     private Integer dataFlag;
 
 
+
+    /**
+     * 需要学习时长
+     */
+    @TableField(exist = false)
+    private Double needLearnCount;
+
+    /**
+     * 已学习时长
+     */
+    @TableField(exist = false)
+    private Double learnMinCount;
+
+    /**
+     * 学习时长比例
+     */
+    @TableField(exist = false)
+    private Double proportion;
+
     /**
      * 判断状态
      * @return

+ 14 - 0
exam-06173-api/src/main/java/com/yf/exam/modules/course/dto/response/UserCourseProcessDTO.java

@@ -0,0 +1,14 @@
+package com.yf.exam.modules.course.dto.response;
+
+
+import lombok.Data;
+
+@Data
+public class UserCourseProcessDTO {
+
+    private String id;
+    private String title;
+    private Double needLearn;
+    private Double learnMin;
+    private Double proportion;
+}

+ 6 - 0
exam-06173-api/src/main/java/com/yf/exam/modules/course/mapper/CourseMapper.java

@@ -5,10 +5,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yf.exam.modules.course.dto.ext.CourseDetailExtDTO;
 import com.yf.exam.modules.course.dto.request.UserCourseReqDTO;
+import com.yf.exam.modules.course.dto.response.UserCourseProcessDTO;
 import com.yf.exam.modules.course.dto.response.UserCourseRespDTO;
 import com.yf.exam.modules.course.entity.Course;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
 * <p>
 * 课程信息Mapper
@@ -34,4 +37,7 @@ public interface CourseMapper extends BaseMapper<Course> {
      * @return
      */
     IPage<UserCourseRespDTO> userPaging(Page page, @Param("query") UserCourseReqDTO reqDTO);
+
+
+    List<UserCourseProcessDTO> userPagingToal(Page page, @Param("query") UserCourseReqDTO reqDTO);
 }

+ 12 - 1
exam-06173-api/src/main/java/com/yf/exam/modules/course/service/impl/CourseServiceImpl.java

@@ -15,6 +15,7 @@ import com.yf.exam.modules.course.dto.ext.CourseDetailExtDTO;
 import com.yf.exam.modules.course.dto.ext.CourseRefDirExtDTO;
 import com.yf.exam.modules.course.dto.ext.CourseRefFileExtDTO;
 import com.yf.exam.modules.course.dto.request.UserCourseReqDTO;
+import com.yf.exam.modules.course.dto.response.UserCourseProcessDTO;
 import com.yf.exam.modules.course.dto.response.UserCourseRespDTO;
 import com.yf.exam.modules.course.entity.Course;
 import com.yf.exam.modules.course.entity.CourseRefDir;
@@ -34,6 +35,8 @@ import org.springframework.util.CollectionUtils;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -215,7 +218,15 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
 
     @Override
     public IPage<UserCourseRespDTO> userPaging(PagingReqDTO<UserCourseReqDTO> reqDTO) {
-        return baseMapper.userPaging(reqDTO.toPage(), reqDTO.getParams());
+        IPage<UserCourseRespDTO>  page = baseMapper.userPaging(reqDTO.toPage(), reqDTO.getParams());
+        Map<String,UserCourseProcessDTO> map = baseMapper.userPagingToal(reqDTO.toPage(), reqDTO.getParams()).stream().collect(Collectors.toMap(UserCourseProcessDTO::getId,userCourseProcessDTO -> userCourseProcessDTO));
+        page.getRecords().stream().forEach(i->{
+            i.setNeedLearnCount(map.get(i.getId()).getNeedLearn());
+            i.setLearnMinCount(map.get(i.getId()).getLearnMin());
+            i.setProportion(map.get(i.getId()).getProportion());
+
+        });
+        return page;
     }
 
     @Override

+ 17 - 0
exam-06173-api/src/main/resources/mapper/course/CourseMapper.xml

@@ -127,6 +127,23 @@
 
     </select>
 
+    <select id="userPagingToal" resultType="com.yf.exam.modules.course.dto.response.UserCourseProcessDTO">
+
+        SELECT
+        cs.id,
+        cs.title,
+        SUM(rf.need_learn) needLearn,
+        SUM(fl.learn_min) learnMin,
+        CASE WHEN Round(SUM(fl.learn_min)/SUM(rf.need_learn),2) >1 THEN  1 ELSE Round(SUM(fl.learn_min)/SUM(rf.need_learn),2) END AS proportion
+        FROM el_course  cs
+        LEFT JOIN el_course_ref_dir rd on cs.id = rd.course_id
+        LEFT JOIN el_course_ref_file rf on rf.dir_id = rd.id
+        LEFT JOIN el_course_file_unlock lk ON rf.file_id = lk.file_id AND lk.course_id = rf.course_id
+        left JOIN el_course_file_learn fl on fl.file_id = rf.file_id 	AND fl.course_id = rf.course_id	AND fl.user_id ='{{userId}}'
+        GROUP BY cs.id
+
+    </select>
+
 
     <select id="selectDir" resultMap="DirResultMap">
         SELECT dir.*,'${stepLock}' AS step_lock FROM el_course_ref_dir dir WHERE dir.course_id=#{id} ORDER BY dir.`sort` ASC