Sfoglia il codice sorgente

feat:教务端学员云教练数据统计

Joburgess 3 anni fa
parent
commit
471a759d78

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentQueryInfo.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
 
 import java.util.List;
 
@@ -20,6 +21,12 @@ public class StudentQueryInfo extends QueryInfo {
 
     private List<String> organIdList;
 
+    @ApiModelProperty("排序字段:cloudStudyUseTime(总时长),cloudStudyRunningDays(连续天数)")
+    private String orderField = "cloudStudyUseTime";
+
+    @ApiModelProperty("排序方式:ASC(正序),DESC(倒序)")
+    private String orderType = "ASC";
+
     public String getGroupType() {
         return groupType;
     }
@@ -59,4 +66,20 @@ public class StudentQueryInfo extends QueryInfo {
     public void setOrganIdList(List<String> organIdList) {
         this.organIdList = organIdList;
     }
+
+    public String getOrderField() {
+        return orderField;
+    }
+
+    public void setOrderField(String orderField) {
+        this.orderField = orderField;
+    }
+
+    public String getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(String orderType) {
+        this.orderType = orderType;
+    }
 }

+ 4 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -382,11 +382,6 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             List<Map<Integer, String>> studentGroupNamesMapList = studentRegistrationDao.queryStudentMusicGroupNamesMap(studentIds);
             Map<Integer, String> studentGroupNamesMap = MapUtil.convertIntegerMap(studentGroupNamesMapList);
             Set<Integer> hasVipCourseStudentIds = courseScheduleStudentPaymentDao.getHasVipCourseStudentIds(studentIds);
-            List<EduOrganStudentListDto> eduOrganStudentListDtos = sysMusicCompareRecordDao.queryStudentTrainData(studentIds);
-            Map<Integer, EduOrganStudentListDto> studentTrainDataMap = new HashMap<>();
-            if(!CollectionUtils.isEmpty(eduOrganStudentListDtos)){
-                studentTrainDataMap = eduOrganStudentListDtos.stream().collect(Collectors.toMap(EduOrganStudentListDto::getStudentId, e -> e, (e1, e2) -> e1));
-            }
 
             for (EduOrganStudentListDto eduOrganStudentListDto : dataList) {
                 if(studentGroupNamesMap.containsKey(eduOrganStudentListDto.getStudentId())){
@@ -395,9 +390,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
                 if(hasVipCourseStudentIds.contains(eduOrganStudentListDto.getSubjectId())){
                     eduOrganStudentListDto.setHasVipGroup(1);
                 }
-                if(studentTrainDataMap.containsKey(eduOrganStudentListDto.getStudentId())){
-                    eduOrganStudentListDto.setCloudStudyUseNum(studentTrainDataMap.get(eduOrganStudentListDto.getSubjectId()).getCloudStudyUseNum());
-                    eduOrganStudentListDto.setCloudStudyUseTime(studentTrainDataMap.get(eduOrganStudentListDto.getSubjectId()).getCloudStudyUseTime());
+                if(eduOrganStudentListDto.getCloudStudyUseNum()>0 && eduOrganStudentListDto.getCloudStudyUseTime()>0){
                     eduOrganStudentListDto.setCloudStudyUseAvgTime(eduOrganStudentListDto.getCloudStudyUseTime()/eduOrganStudentListDto.getCloudStudyUseNum());
                 }
             }
@@ -409,6 +402,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             EduOrganStudentDataDto organStudentVipData = studentDao.getOrganStudentVipData(queryInfo.getOrganId());
             organStudentVipData.setCloudStudyUseStudentNum(studentDao.getCloudStudyStudentNum(queryInfo.getOrganId()));
             organStudentVipData.setCloudStudyLivelyStudentNum(studentDao.getCloudStudyLivelyStudentNum(queryInfo.getOrganId()));
+            if(organStudentVipData.getVipStudentNum()>0&&organStudentVipData.getTotalStudentNum()>0){
+                organStudentVipData.setVipStudentDuty(organStudentVipData.getVipStudentNum()/organStudentVipData.getTotalStudentNum());
+            }
             result.setHead(organStudentVipData);
         }
         result.setDetail(pageInfo);

+ 10 - 6
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -814,13 +814,17 @@
             tea.real_name_ teacherName,
             sub.name_	subjectName,
             stu.cloud_study_sequence_days_ cloudStudyRunningDays,
+            COUNT(DISTINCT smcr.behavior_id_) cloudStudyUseNum,
+            SUM(CASE WHEN smcr.play_time_ IS NULL THEN 0 ELSE play_time_ END) cloudStudyUseTime,
             DATE_FORMAT(stu.membership_end_time_, '%Y-%m-%d') membershipEndTime
         FROM student stu
-             LEFT JOIN sys_user su ON stu.user_id_=su.id_
-             LEFT JOIN sys_user tea ON stu.teacher_id_=tea.id_
-             LEFT JOIN `subject` sub ON stu.subject_id_list_ = sub.id_
+            LEFT JOIN sys_user su ON stu.user_id_=su.id_
+            LEFT JOIN sys_user tea ON stu.teacher_id_=tea.id_
+            LEFT JOIN `subject` sub ON stu.subject_id_list_ = sub.id_
+            LEFT JOIN sys_music_compare_record smcr ON stu.user_id_ = smcr.user_id_
         <include refid="queryCloudStudyStudentDataCondition" />
-        ORDER BY stu.user_id_
+        GROUP BY stu.user_id_
+        ORDER BY ${orderField} ${orderType}
         <include refid="global.limit"></include>
     </select>
     <select id="countCloudStudyStudentData" resultType="int">
@@ -855,7 +859,7 @@
     </update>
 
     <update id="addStudentCloudStudySequenceDays">
-        UPDATE student SET cloud_study_sequence_days_=cloud_study_sequence_days_+1,cloud_study_use_last_day_=curdate() WHERE user_id_=#{userId} AND (cloud_study_use_last_day_ IS NULL OR cloud_study_use_last_day_&lt;curdate())
+        UPDATE student SET cloud_study_sequence_days_=cloud_study_sequence_days_+1,cloud_study_use_last_day_=curdate() WHERE user_id_=#{userId} AND (cloud_study_use_last_day_ IS NULL OR cloud_study_use_last_day_=date_sub(curdate(), interval 1 day))
     </update>
 
     <update id="updateStudentsCloudStudySequenceDays">
@@ -863,6 +867,6 @@
     </update>
 
     <update id="cleanStudentCloudStudySequenceDays">
-        UPDATE student SET cloud_study_sequence_days_=0 WHERE cloud_study_use_last_day_&lt;date_sub(curdate(), interval 1 day)
+        UPDATE student SET cloud_study_sequence_days_=0,cloud_study_use_last_day_=date_sub(curdate(), interval 1 day) WHERE cloud_study_use_last_day_&lt;date_sub(curdate(), interval 1 day)
     </update>
 </mapper>