Browse Source

添加练习统计

yuanliang 1 year ago
parent
commit
9fa210b270

+ 6 - 8
mec-application/src/main/java/com/ym/mec/web/controller/StudentCoursewarePlayRecordController.java

@@ -106,10 +106,9 @@ public class StudentCoursewarePlayRecordController extends BaseController {
      * 练习统计导出
      */
     @PostMapping("/exportStatList")
-//    @PreAuthorize("@pcs.hasPermissions('studentCoursewarePlayRecord/exportStatList')")
-    public HttpResponseResult<List<StudentCoursewarePlayRecordWrapper.StatQueryData>> exportStatList(@RequestBody StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
-        exportService.getExportManageFuncMap().get(ExportEnum.VIDEO_PLAY_STAT).apply(JSON.parseObject(JSON.toJSONString(statQuery), Map.class));
-        return succeed();
+    @PreAuthorize("@pcs.hasPermissions('studentCoursewarePlayRecord/exportStatList')")
+    public HttpResponseResult exportStatList(@RequestBody StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
+        return exportService.getExportManageFuncMap().get(ExportEnum.VIDEO_PLAY_STAT).apply(JSON.parseObject(JSON.toJSONString(statQuery), Map.class));
     }
 
 
@@ -126,11 +125,10 @@ public class StudentCoursewarePlayRecordController extends BaseController {
      * 练习统计详情导出
      */
     @PostMapping("/exportStatDetailPage")
-//    @PreAuthorize("@pcs.hasPermissions('studentCoursewarePlayRecord/exportStatDetailPage')")
-    public HttpResponseResult<List<StudentCoursewarePlayRecordWrapper.StatQueryData>> exportStatDetailPage(@RequestBody StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
+    @PreAuthorize("@pcs.hasPermissions('studentCoursewarePlayRecord/exportStatDetailPage')")
+    public HttpResponseResult exportStatDetailPage(@RequestBody StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
         statQuery.setPage(1);
         statQuery.setRows(9999);
-        exportService.getExportManageFuncMap().get(ExportEnum.VIDEO_PLAY_DETAIL_STAT).apply(JSON.parseObject(JSON.toJSONString(statQuery), Map.class));
-        return succeed();
+        return exportService.getExportManageFuncMap().get(ExportEnum.VIDEO_PLAY_DETAIL_STAT).apply(JSON.parseObject(JSON.toJSONString(statQuery), Map.class));
     }
 }

+ 6 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCoursewarePlayRecord.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 
@@ -34,7 +35,11 @@ public class StudentCoursewarePlayRecord implements Serializable {
 
     @ApiModelProperty("播放时长,单位为秒")
     @TableField(value = "play_time_")
-    private Float playTime;
+    private BigDecimal playTime;
+
+    @ApiModelProperty("创建的天")
+    @TableField(value = "create_date_")
+    private String createDate;
 
     @ApiModelProperty("更新时间")
     @TableField(value = "update_time_")

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentCoursewarePlayRecordWrapper.java

@@ -5,6 +5,7 @@ import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
@@ -92,7 +93,7 @@ public class StudentCoursewarePlayRecordWrapper {
 
         @ApiModelProperty("播放时长,单位为秒")
         @NotNull
-        private Float playTime;
+        private BigDecimal playTime;
 
     }
 
@@ -169,7 +170,7 @@ public class StudentCoursewarePlayRecordWrapper {
         private Integer playTimeRather240;
 
         @ApiModelProperty("平均练习时长")
-        private Float avgPlayTime;
+        private BigDecimal avgPlayTime;
 
     }
 

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCoursewarePlayRecordServiceImpl.java

@@ -20,8 +20,11 @@ import com.ym.mec.biz.dal.mapper.StudentCoursewarePlayRecordMapper;
 import com.ym.mec.biz.service.StudentCoursewarePlayRecordService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 
@@ -105,18 +108,22 @@ public class StudentCoursewarePlayRecordServiceImpl extends ServiceImpl<StudentC
         record.setOrganizationId(studentCoursewarePlayRecord.getOrganizationId());
         record.setUserId(studentCoursewarePlayRecord.getUserId());
         record.setPlayTime(studentCoursewarePlayRecord.getPlayTime());
+        record.setCreateDate(new SimpleDateFormat("yyyyMMdd").format(new Date()));
         baseMapper.save(record);
     }
 
     @Override
     public List<StudentCoursewarePlayRecordWrapper.StatQueryData> statList(StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
-        return baseMapper.statList(statQuery);
+        List<StudentCoursewarePlayRecordWrapper.StatQueryData> list = baseMapper.statList(statQuery);
+        list.forEach(n -> n.setAvgPlayTime(n.getAvgPlayTime().setScale(2, RoundingMode.HALF_UP)));
+        return list;
     }
 
     @Override
     public IPage<StudentCoursewarePlayRecordWrapper.StatQueryData> statDetailPage(StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
         IPage<StudentCoursewarePlayRecordWrapper.StatQueryData> page = QueryInfo.getPage(statQuery);
         List<StudentCoursewarePlayRecordWrapper.StatQueryData> statQueryData = baseMapper.statDetailPage(page, statQuery);
+        statQueryData.forEach(n -> n.setAvgPlayTime(n.getAvgPlayTime().setScale(2, RoundingMode.HALF_UP)));
         page.setRecords(statQueryData);
         return page;
     }

+ 33 - 30
mec-biz/src/main/resources/config/mybatis/StudentCoursewarePlayRecordMapper.xml

@@ -6,48 +6,51 @@
         FROM student_courseware_play_record t
     </select>
 
-    <insert id="save" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-        INSERT INTO student_courseware_play_record (organization_id_, user_id_, play_time_, update_time_, create_time_)
-        VALUES (#{record.organizationId},#{record.userId}, #{record.playTime}, NOW(), NOW())
+    <insert id="save">
+        INSERT INTO student_courseware_play_record (organization_id_, user_id_, play_time_, create_date_, update_time_, create_time_)
+        VALUES (#{record.organizationId}, #{record.userId}, #{record.playTime}, #{record.createDate}, NOW(), NOW())
         ON DUPLICATE KEY UPDATE play_time_ = (ifnull(play_time_, 0) + #{record.playTime})
     </insert>
 
     <select id="statList" resultType="com.ym.mec.biz.dal.wrapper.StudentCoursewarePlayRecordWrapper$StatQueryData">
-        select o.id_                                                                                         as organizationId
-             , o.name_                                                                                       as organizationName
-             , count(if(s.membership_end_time_ >= now(), 1, 0))                                              as memberNum
-             , (count(distinct s.user_id_) - count(distinct pr.user_id_))                                    as noPlayNum
-             , count(distinct if(10 * 60 >= pr.play_time_, pr.user_id_, null))                               as playTimeLess10
-             , count(distinct if(pr.play_time_ > 10 * 60 and 600 * 60 >= pr.play_time_, pr.user_id_, null))  as playTimeLess60
-             , count(distinct if(pr.play_time_ > 10 * 60 and 120 * 60 >= pr.play_time_, pr.user_id_, null))  as playTimeLess120
-             , count(distinct if(pr.play_time_ > 120 * 60 and 240 * 60 >= pr.play_time_, pr.user_id_, null)) as playTimeLess240
-             , count(distinct if(pr.play_time_ > 240 * 60, pr.user_id_, null))                               as playTimeRather240
-             , if(count(distinct pr.user_id_) = 0, 0, (sum(pr.play_time_) / (count(distinct pr.user_id_))))  as avgPlayTime
+        select o.id_                                                                                             as organizationId
+             , o.name_                                                                                           as organizationName
+             , count(s.user_id_)                                                                                 as memberNum
+             , (count(distinct s.user_id_) - count(distinct pr.user_id_))                                        as noPlayNum
+             , count(distinct if(10 * 60 >= pr.play_time_, pr.user_id_, null))                                   as playTimeLess10
+             , count(distinct if(pr.play_time_ > 10 * 60 and 600 * 60 >= pr.play_time_, pr.user_id_, null))      as playTimeLess60
+             , count(distinct if(pr.play_time_ > 10 * 60 and 120 * 60 >= pr.play_time_, pr.user_id_, null))      as playTimeLess120
+             , count(distinct if(pr.play_time_ > 120 * 60 and 240 * 60 >= pr.play_time_, pr.user_id_, null))     as playTimeLess240
+             , count(distinct if(pr.play_time_ > 240 * 60, pr.user_id_, null))                                   as playTimeRather240
+             , if(count(distinct pr.user_id_) = 0, 0, (sum(pr.play_time_) / (count(distinct pr.user_id_) * 60))) as avgPlayTime
         from organization o
-                 left join student s on s.cooperation_organ_id_ = o.id_
+                 left join sys_user su on o.id_ = su.organ_id_
+                 left join student s on s.user_id_ = su.id_
                  left join student_courseware_play_record pr on s.user_id_ = pr.user_id_ and pr.create_time_ > #{statQuery.startTime} and #{statQuery.endTime} > pr.create_time_
+        where s.membership_end_time_ >= now()
         group by o.id_
         order by #{statQuery.sortBy}
     </select>
     <select id="statDetailPage" resultType="com.ym.mec.biz.dal.wrapper.StudentCoursewarePlayRecordWrapper$StatQueryData">
-        select o.id_                                                                                         as organizationId
-             , o.name_                                                                                       as organizationName
-             , su.username_                                                                                  as teacherName
-             , count(distinct sr.user_id_)                                                                   as memberNum
-             , (count(distinct sr.user_id_) - count(distinct pr.user_id_))                                   as noPlayNum
-             , count(distinct if(10 * 60 >= pr.play_time_, pr.user_id_, null))                               as playTimeLess10
-             , count(distinct if(pr.play_time_ > 10 * 60 and 600 * 60 >= pr.play_time_, pr.user_id_, null))  as playTimeLess60
-             , count(distinct if(pr.play_time_ > 10 * 60 and 120 * 60 >= pr.play_time_, pr.user_id_, null))  as playTimeLess120
-             , count(distinct if(pr.play_time_ > 120 * 60 and 240 * 60 >= pr.play_time_, pr.user_id_, null)) as playTimeLess240
-             , count(distinct if(pr.play_time_ > 240 * 60, pr.user_id_, null))                               as playTimeRather240
-             , if(count(distinct pr.user_id_) = 0, 0, (sum(pr.play_time_) / (count(distinct pr.user_id_))))  as avgPlayTime
+        select o.id_                                                                                             as organizationId
+             , o.name_                                                                                           as organizationName
+             , su2.username_                                                                                     as teacherName
+             , count(s.user_id_)                                                                                 as memberNum
+             , (count(distinct s.user_id_) - count(distinct pr.user_id_))                                        as noPlayNum
+             , count(distinct if(10 * 60 >= pr.play_time_, pr.user_id_, null))                                   as playTimeLess10
+             , count(distinct if(pr.play_time_ > 10 * 60 and 600 * 60 >= pr.play_time_, pr.user_id_, null))      as playTimeLess60
+             , count(distinct if(pr.play_time_ > 10 * 60 and 120 * 60 >= pr.play_time_, pr.user_id_, null))      as playTimeLess120
+             , count(distinct if(pr.play_time_ > 120 * 60 and 240 * 60 >= pr.play_time_, pr.user_id_, null))     as playTimeLess240
+             , count(distinct if(pr.play_time_ > 240 * 60, pr.user_id_, null))                                   as playTimeRather240
+             , if(count(distinct pr.user_id_) = 0, 0, (sum(pr.play_time_) / (count(distinct pr.user_id_) * 60))) as avgPlayTime
         from organization o
-                 left join student s on s.cooperation_organ_id_ = o.id_
-                 left join student_registration sr on sr.user_id_ = s.user_id_
-                 left join student_teacher_mapper stm on stm.student_id_ = sr.user_id_
-                 left join sys_user su on su.id_ = stm.teacher_id_
-                 left join student_courseware_play_record pr on sr.user_id_ = pr.user_id_ and pr.create_time_ > #{statQuery.startTime} and #{statQuery.endTime} > pr.create_time_
+                 left join sys_user su on su.organ_id_ = o.id_
+                 left join student s on s.user_id_ = su.id_
+                 left join student_teacher_mapper stm on stm.student_id_ = s.user_id_
+                 left join sys_user su2 on su2.id_ = stm.teacher_id_
+                 left join student_courseware_play_record pr on s.user_id_ = pr.user_id_ and pr.create_time_ > #{statQuery.startTime} and #{statQuery.endTime} > pr.create_time_
         where o.id_ = #{statQuery.organizationId}
+          and s.membership_end_time_ >= now()
         group by stm.teacher_id_
         order by #{statQuery.sortBy}
     </select>