ソースを参照

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

Joburgess 3 年 前
コミット
1ba7db6ded

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -532,4 +532,14 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @param musicGroupId
      */
     void deletePreCourse(String musicGroupId);
+
+    /**
+     * @describe 查询出指定学员中有小课的学员
+     * @author Joburgess
+     * @date 2021/8/17 0017
+     * @param studentIds:
+     * @return java.util.Set<java.lang.String>
+     */
+    Set<Integer> getHasVipCourseStudentIds(@Param("studentIds") List<Integer> studentIds);
+
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -262,4 +262,14 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
 
     int getCloudStudyLivelyStudentNum(@Param("organId") Integer organId);
+
+    /**
+     * @describe 查询云教练学员列表数据
+     * @author Joburgess
+     * @date 2021/8/17 0017
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.EduOrganStudentListDto>
+     */
+    List<EduOrganStudentListDto> queryCloudStudyStudentData(Map<String, Object> params);
+    int countCloudStudyStudentData(Map<String, Object> params);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -666,4 +666,13 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     List<Map<String,String>> queryAutoCreateStudentMap(@Param("pushMemberRenew") String pushMemberRenew);
+
+    /**
+     * @describe 查询学员乐团名称字典
+     * @author Joburgess
+     * @date 2021/8/17 0017
+     * @param studentIds:
+     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.String>>
+     */
+    List<Map<Integer, String>> queryStudentMusicGroupNamesMap(@Param("studentIds") List<Integer> studentIds);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.EduOrganStudentListDto;
 import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
 import com.ym.mec.biz.dal.dto.StudentTrainChartDto;
 import com.ym.mec.biz.dal.dto.StudentTrainOverviewDto;
@@ -47,5 +48,7 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
 
     List<MusicCompareRankingDto> queryMusicGroupStudentTrainData(Map<String, Object> params);
     int countMusicGroupStudentTrainData(Map<String, Object> params);
+
+    List<EduOrganStudentListDto> queryStudentTrainData(@Param("studentIds") List<Integer> studentIds);
 	
 }

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

@@ -41,6 +41,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private PracticeGroupDao practiceGroupDao;
 
+    @Autowired
+    private SysMusicCompareRecordDao sysMusicCompareRecordDao;
+
     @Override
     public BaseDAO<Integer, Student> getDAO() {
         return studentDao;
@@ -365,26 +368,49 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 
     @Override
     public StatDto organStudentData(StudentQueryInfo queryInfo) {
-        EduOrganStudentDataDto organStudentVipData = studentDao.getOrganStudentVipData(queryInfo.getOrganId());
-        organStudentVipData.setCloudStudyUseStudentNum(studentDao.getCloudStudyStudentNum(queryInfo.getOrganId()));
-        organStudentVipData.setCloudStudyLivelyStudentNum(studentDao.getCloudStudyLivelyStudentNum(queryInfo.getOrganId()));
-
         PageInfo<EduOrganStudentListDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);
 
         List<EduOrganStudentListDto> dataList = new ArrayList<>();
-        int count = 1;
+        int count = studentDao.countCloudStudyStudentData(params);
         if (count > 0) {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
-//            dataList = this.getDAO().queryPage(params);
+            dataList = studentDao.queryCloudStudyStudentData(params);
+            List<Integer> studentIds = dataList.stream().map(EduOrganStudentListDto::getStudentId).collect(Collectors.toList());
+            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())){
+                    eduOrganStudentListDto.setMusicGroupNames(studentGroupNamesMap.get(eduOrganStudentListDto.getStudentId()));
+                }
+                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());
+                    eduOrganStudentListDto.setCloudStudyUseAvgTime(eduOrganStudentListDto.getCloudStudyUseTime()/eduOrganStudentListDto.getCloudStudyUseNum());
+                }
+            }
         }
-        dataList.add(new EduOrganStudentListDto());
         pageInfo.setRows(dataList);
 
         StatDto result = new StatDto();
-        result.setHead(organStudentVipData);
+        if(queryInfo.getPage()==1){
+            EduOrganStudentDataDto organStudentVipData = studentDao.getOrganStudentVipData(queryInfo.getOrganId());
+            organStudentVipData.setCloudStudyUseStudentNum(studentDao.getCloudStudyStudentNum(queryInfo.getOrganId()));
+            organStudentVipData.setCloudStudyLivelyStudentNum(studentDao.getCloudStudyLivelyStudentNum(queryInfo.getOrganId()));
+            result.setHead(organStudentVipData);
+        }
         result.setDetail(pageInfo);
 
         return result;

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -765,4 +765,16 @@
 		AND vg.group_status_ IN (0,1,2)
 		ORDER BY vg.create_time_ DESC LIMIT 1
 	</select>
+
+    <select id="getHasVipCourseStudentIds" resultType="map">
+		SELECT cssp.user_id_ FROM course_schedule_student_payment cssp
+		LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
+		WHERE cssp.group_type_='VIP' AND cs.del_flag_=0
+		<if test="studentIds!=null and studentIds.size()>0">
+			AND cssp.user_id_ IN
+			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				#{studentId}
+			</foreach>
+		</if>
+	</select>
 </mapper>

+ 37 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -794,6 +794,43 @@
             GROUP BY smcr.user_id_) t WHERE t.days>=5
     </select>
 
+    <sql id="queryCloudStudyStudentDataCondition">
+        <where>
+            su.del_flag_=0
+            <if test="organId!=null">
+                AND su.organ_id_=#{organId}
+            </if>
+            <if test="search!=null and search!=''">
+                AND (stu.user_id_=#{search} OR su.username_ LIKE CONCAT('%', #{search}, '%'))
+            </if>
+        </where>
+    </sql>
+
+    <select id="queryCloudStudyStudentData" resultType="com.ym.mec.biz.dal.dto.EduOrganStudentListDto">
+        SELECT
+            stu.user_id_ studentId,
+            su.username_ studentName,
+            stu.teacher_id_ teacherId,
+            tea.real_name_ teacherName,
+            sub.name_	subjectName,
+            stu.cloud_study_sequence_days_ cloudStudyRunningDays,
+            stu.membership_end_time_ 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_
+        <include refid="queryCloudStudyStudentDataCondition" />
+        ORDER BY stu.user_id_
+        <include refid="global.limit"></include>
+    </select>
+    <select id="countCloudStudyStudentData" resultType="int">
+        SELECT
+            COUNT(stu.user_id_)
+        FROM student stu
+        LEFT JOIN sys_user su ON stu.user_id_=su.id_
+        <include refid="queryCloudStudyStudentDataCondition" />
+    </select>
+
     <update id="updateGrade"><![CDATA[
         UPDATE student SET current_grade_num_=current_grade_num_+1
         WHERE current_grade_num_>=1

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1674,4 +1674,18 @@
         WHERE sr.membership_end_time_ IS NOT NULL AND DATEDIFF(sr.membership_end_time_,NOW()) + 1 = #{pushMemberRenew}
         GROUP BY sr.music_group_id_
     </select>
+
+    <select id="queryStudentMusicGroupNamesMap" resultType="java.util.Map">
+        SELECT sr.user_id_ 'key',GROUP_CONCAT(mg.name_) 'value'
+        FROM student_registration sr
+             LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
+        WHERE 1=1
+        <if test="studentIds!=null and studentIds.size()>0">
+            AND sr.user_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+        </if>
+        GROUP BY sr.user_id_
+    </select>
 </mapper>

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -222,4 +222,15 @@
 		LEFT JOIN student_registration sr ON sr.user_id_=smcr.user_id_
 		<include refid="queryMusicGroupStudentTrainDataConditon"></include>
 	</select>
+
+	<select id="queryStudentTrainData" resultType="com.ym.mec.biz.dal.dto.EduOrganStudentListDto">
+		SELECT
+			user_id_ studentId,
+			COUNT(DISTINCT behavior_id_) cloudStudyUseNum,
+			SUM(play_time_) cloudStudyUseTime
+		FROM
+			sys_music_compare_record
+		GROUP BY
+			user_id_
+	</select>
 </mapper>