Ver Fonte

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

Joburgess há 3 anos atrás
pai
commit
e479fdb321

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

@@ -270,6 +270,8 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     List<Map<Integer, Integer>> getOrganTeacherStudentNum(@Param("teacherIds") List<Integer> teacherIds,
                                                           @Param("organId") Integer organId);
 
+    int getOrganOrganTeacherStudentNum(@Param("organId") Integer organId);
+
     /**
      * @describe 统计云教练试用人数
      * @author Joburgess
@@ -281,6 +283,9 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     int getOrgansTotalCloudStudyStudentNum(@Param("organIds") List<Integer> organIds);
     List<Map<Integer, Integer>> getOrganCloudStudyStudentNum(@Param("organIds") List<Integer> organIds);
 
+    List<Map<Integer, Integer>> getOrganTeacherCloudStudyStudentNum(@Param("teacherIds") List<Integer> teacherIds,
+                                                                    @Param("organId") Integer organId);
+
     /**
      * @describe 统计云教练今日使用人数
      * @author Joburgess

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherStudentDataDto.java

@@ -26,6 +26,12 @@ public class TeacherStudentDataDto {
     @ApiModelProperty("付费会员占比")
     private float vipStudentDuty;
 
+    @ApiModelProperty("云教练试用人数")
+    private int cloudStudyUseStudentNum;
+
+    @ApiModelProperty("云教练使用人数占比")
+    private float cloudStudyUseStudentDuty;
+
     public Integer getTeacherId() {
         return teacherId;
     }
@@ -73,4 +79,20 @@ public class TeacherStudentDataDto {
     public void setVipStudentDuty(float vipStudentDuty) {
         this.vipStudentDuty = vipStudentDuty;
     }
+
+    public int getCloudStudyUseStudentNum() {
+        return cloudStudyUseStudentNum;
+    }
+
+    public void setCloudStudyUseStudentNum(int cloudStudyUseStudentNum) {
+        this.cloudStudyUseStudentNum = cloudStudyUseStudentNum;
+    }
+
+    public float getCloudStudyUseStudentDuty() {
+        return cloudStudyUseStudentDuty;
+    }
+
+    public void setCloudStudyUseStudentDuty(float cloudStudyUseStudentDuty) {
+        this.cloudStudyUseStudentDuty = cloudStudyUseStudentDuty;
+    }
 }

+ 6 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1238,7 +1238,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		}
 		Set<String> dataTypes = new HashSet<String>(){{
 			add(CLOUD_STUDY_LIVELY_STUDENT_NUM.getCode());add(MEMBER_STUDENT_NUM.getCode());add(NEW_MEMBER_STUDENT_NUM.getCode());
-			add(ORGAN_TOTAL_STUDENT_NUM.getCode());add(CLOUD_STUDY_NEW_STUDENT_NUM.getCode());}};
+			add(ORGAN_TOTAL_STUDENT_NUM.getCode());add(CLOUD_STUDY_NEW_STUDENT_NUM.getCode());add(CLOUD_STUDY_DAY_USE_STUDENT_NUM.getCode());}};
 
 
 		List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getAllIndexBaseData(new HashSet<>(organIds), dataTypes, queryInfo.getDate(), queryInfo.getDate());
@@ -1255,6 +1255,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 
 		Map<Integer, Integer> organsNewCloudStudyStudentNumMap = indexBaseDatas.stream().filter(i->CLOUD_STUDY_NEW_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
 
+		Map<Integer, Integer> organsCloudStudyDayUseStudentNumMap = indexBaseDatas.stream().filter(i->CLOUD_STUDY_DAY_USE_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
+
 		List<EduOrganStudentDataDto> result = new ArrayList<>();
 
 		for (Organization organ : organs) {
@@ -1273,6 +1275,9 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			if(organsNewMemberStudentNumMap.containsKey(organ.getId())){
 				organStudentVipData.setNewMemberStudentNum(organsNewMemberStudentNumMap.get(organ.getId()));
 			}
+			if(organsCloudStudyDayUseStudentNumMap.containsKey(organ.getId())){
+				organStudentVipData.setCloudStudyUseStudentNum(organsCloudStudyDayUseStudentNumMap.get(organ.getId()));
+			}
 			if(organsNewCloudStudyStudentNumMap.containsKey(organ.getId())){
 				organStudentVipData.setNewCloudStudyStudentNum(organsNewCloudStudyStudentNumMap.get(organ.getId()));
 			}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -801,6 +801,11 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 			if(!CollectionUtils.isEmpty(teacherExperienceMemberStudentNumMapList)){
 				teacherExperienceMemberStudentNumMap = MapUtil.convertIntegerMap(teacherExperienceMemberStudentNumMapList);
 			}
+			List<Map<Integer, Integer>> organTeacherCloudStudyStudentNumMapList = studentDao.getOrganTeacherCloudStudyStudentNum(teacherIds, Integer.valueOf(queryInfo.getOrganId()));
+			Map<String, Long> organTeacherCloudStudyStudentNumMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(organTeacherCloudStudyStudentNumMapList)){
+				organTeacherCloudStudyStudentNumMap = MapUtil.convertIntegerMap(organTeacherCloudStudyStudentNumMapList);
+			}
 			for (TeacherStudentDataDto teacherStudentDataDto : dataList) {
 				if(teachersStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
 					teacherStudentDataDto.setTotalStudentNum(teachersStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
@@ -814,8 +819,15 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 				if(teacherStudentDataDto.getVipStudentNum()>0&&teacherStudentDataDto.getTotalStudentNum()>0){
 					teacherStudentDataDto.setVipStudentDuty(new BigDecimal(teacherStudentDataDto.getVipStudentNum()).divide(new BigDecimal(teacherStudentDataDto.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
 				}
+				if(organTeacherCloudStudyStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
+					teacherStudentDataDto.setCloudStudyUseStudentNum(organTeacherCloudStudyStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
+				}
+				if(teacherStudentDataDto.getCloudStudyUseStudentNum()>0&&teacherStudentDataDto.getTotalStudentNum()>0){
+					teacherStudentDataDto.setCloudStudyUseStudentDuty(new BigDecimal(teacherStudentDataDto.getCloudStudyUseStudentNum()).divide(new BigDecimal(teacherStudentDataDto.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+				}
 			}
 		}
+		pageInfo.setStatInfo(new HashMap<String, Object>(){{put("noTeacherStudentNum", studentDao.getOrganOrganTeacherStudentNum(Integer.valueOf(queryInfo.getOrganId())));}});
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}

+ 49 - 3
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -876,13 +876,14 @@
         course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
         WHERE
-        cssp.group_type_ IN ('VIP', 'PRACTICE')
-        AND cs.status_='NOT_START')) t
+            cssp.group_type_ IN ('VIP', 'PRACTICE')
+            AND cs.status_='NOT_START')) t
         LEFT JOIN student stu ON t.user_id_=stu.user_id_
         LEFT JOIN sys_user su ON t.user_id_ = su.id_
+        LEFT JOIN teacher tea ON stu.teacher_id_=tea.id_
         WHERE su.del_flag_=0
         <if test="organId!=null">
-            AND su.organ_id_=#{organId}
+            AND tea.organ_id_=#{organId}
         </if>
         <if test="teacherIds!=null and teacherIds.size()>0">
             AND stu.teacher_id_ IN
@@ -893,6 +894,30 @@
         GROUP BY stu.teacher_id_
     </select>
 
+    <select id="getOrganOrganTeacherStudentNum" resultType="int">
+        SELECT COUNT(DISTINCT t.user_id_)
+        FROM ((SELECT sr.user_id_
+        FROM student_registration sr
+        LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
+        WHERE mg.status_='PROGRESS' AND sr.music_group_status_='NORMAL')
+        UNION ALL
+        (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_ IN ('VIP', 'PRACTICE')
+        AND cs.status_='NOT_START')) t
+        LEFT JOIN student stu ON t.user_id_=stu.user_id_
+        LEFT JOIN sys_user su ON t.user_id_ = su.id_
+        LEFT JOIN teacher tea ON stu.teacher_id_=tea.id_
+        WHERE su.del_flag_=0 AND stu.teacher_id_ IS NULL
+        <if test="organId!=null">
+            AND su.organ_id_=#{organId}
+        </if>
+    </select>
+
     <select id="getCloudStudyStudentNum" resultType="int">
         SELECT
             COUNT(DISTINCT smcr.user_id_)
@@ -950,6 +975,27 @@
         GROUP BY su.organ_id_
     </select>
 
+    <select id="getOrganTeacherCloudStudyStudentNum" resultType="map">
+        SELECT
+        stu.teacher_id_ 'key',
+        COUNT(DISTINCT smcr.user_id_) 'value'
+        FROM sys_music_compare_record smcr
+        LEFT JOIN sys_user su ON smcr.user_id_=su.id_
+        LEFT JOIN student stu ON smcr.user_id_=stu.user_id_
+        LEFT JOIN teacher tea ON stu.teacher_id_=tea.id_
+        WHERE su.del_flag_=0 AND stu.user_id_ IS NOT NULL
+        <if test="organId!=null">
+            AND tea.organ_id_=#{organId}
+        </if>
+        <if test="teacherIds!=null and teacherIds.size()>0">
+            AND stu.teacher_id_ IN
+            <foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">
+                #{teacherId}
+            </foreach>
+        </if>
+        GROUP BY stu.teacher_id_
+    </select>
+
     <select id="getCloudStudyLivelyStudentNum" resultType="int">
         SELECT COUNT(user_id_)
         FROM (SELECT