Переглянути джерело

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

Joburgess 4 роки тому
батько
коміт
e1fb2bd6eb

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

@@ -322,4 +322,14 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     List<Map<Integer, BigDecimal>> getStudentErrorLeaveNumMap(Map<String, Object> params);
 
     List<IndexBaseMonthData> getOrgansStudentNumData(@Param("dayStr") String dayStr);
+
+    List<IndexBaseMonthData> getMemberStudentNumData(@Param("dayStr") String dayStr);
+
+    List<IndexBaseMonthData> getNewMemberStudentNumData(@Param("dayStr") String dayStr);
+
+    List<IndexBaseMonthData> getExperienceMemberStudentNumData(@Param("dayStr") String dayStr);
+
+    List<IndexBaseMonthData> getCloudStudyDayUseStudentNumData(@Param("dayStr") String dayStr);
+
+    List<IndexBaseMonthData> getCloudStudyLivelyStudentNumData(@Param("dayStr") String dayStr);
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java

@@ -72,7 +72,8 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
 
     //活跃用户统计
     ORGAN_TOTAL_STUDENT_NUM("ORGAN_TOTAL_STUDENT_NUM", "分部学员总数", false, false),
-    CLOUD_STUDY_LIVELY_STUDENT_NUM("CLOUD_STUDY_LIVELY_STUDENT_NUM", "会员数量", false, false),
+    CLOUD_STUDY_LIVELY_STUDENT_NUM("CLOUD_STUDY_LIVELY_STUDENT_NUM", "活跃用户", false, false),
+    CLOUD_STUDY_DAY_USE_STUDENT_NUM("CLOUD_STUDY_DAY_USE_STUDENT_NUM", "云教练使用用户", false, false),
     MEMBER_STUDENT_NUM("MEMBER_STUDENT_NUM", "会员数量", false, false),
     EXPERIENCE_MEMBER_STUDENT_NUM("EXPERIENCE_MEMBER_STUDENT_NUM", "试用会员数量", false, false),
     NEW_MEMBER_STUDENT_NUM("NEW_MEMBER_STUDENT_NUM", "新增会员数量", false, false),

+ 29 - 30
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -505,36 +505,35 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		}
 
 		//云教练相关
-//		List<Map<Integer, Integer>> organsStudentNumMapList = studentDao.getOrgansStudentNum(organIds);
-//		Map<String, Long> organsStudentNumMap = new HashMap<>();
-//		if(!CollectionUtils.isEmpty(organsStudentNumMapList)){
-//			organsStudentNumMap = MapUtil.convertIntegerMap(organsStudentNumMapList);
-//		}
-//		List<Map<Integer, Integer>> organsVipStudentNumMapList = cloudTeacherDao.getOrgansVipStudentNum(organIds);
-//		Map<String, Long> organsVipStudentNumMap = new HashMap<>();
-//		if(!CollectionUtils.isEmpty(organsVipStudentNumMapList)){
-//			organsVipStudentNumMap = MapUtil.convertIntegerMap(organsVipStudentNumMapList);
-//		}
-//		List<Map<Integer, Integer>> organsEVipStudentNumMapList = studentDao.getOrgansEVipStudentNum(organIds);
-//		Map<String, Long> organsEVipStudentNumMap = new HashMap<>();
-//		if(!CollectionUtils.isEmpty(organsEVipStudentNumMapList)){
-//			organsEVipStudentNumMap = MapUtil.convertIntegerMap(organsEVipStudentNumMapList);
-//		}
-//		List<Map<Integer, Integer>> organCloudStudyStudentNumMapList = studentDao.getOrganCloudStudyStudentNum(organIds);
-//		Map<String, Long> organCloudStudyStudentNumMap = new HashMap<>();
-//		if(!CollectionUtils.isEmpty(organCloudStudyStudentNumMapList)){
-//			organCloudStudyStudentNumMap = MapUtil.convertIntegerMap(organCloudStudyStudentNumMapList);
-//		}
-//		List<Map<Integer, Integer>> organCloudStudyLivelyStudentNumMapList = studentDao.getOrganCloudStudyLivelyStudentNum(organIds);
-//		Map<String, Long> organCloudStudyLivelyStudentNumMap = new HashMap<>();
-//		if(!CollectionUtils.isEmpty(organCloudStudyLivelyStudentNumMapList)){
-//			organCloudStudyLivelyStudentNumMap = MapUtil.convertIntegerMap(organCloudStudyLivelyStudentNumMapList);
-//		}
-//		List<Map<Integer, Integer>> organsNewCloudStudyNumMapList = sysMusicCompareRecordDao.getOrgansNewCloudStudyNum(organIds);
-//		Map<String, Long> organsNewCloudStudyNumMap = new HashMap<>();
-//		if(!CollectionUtils.isEmpty(organsNewCloudStudyNumMapList)){
-//			organsNewCloudStudyNumMap = MapUtil.convertIntegerMap(organsNewCloudStudyNumMapList);
-//		}
+		//分部学员数量
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.ORGAN_TOTAL_STUDENT_NUM)) {
+			saveData(indexBaseMonthDataDao.getOrgansStudentNumData(dayStr), dayStr, IndexDataType.ORGAN_TOTAL_STUDENT_NUM);
+		}
+
+		//会员数量
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.MEMBER_STUDENT_NUM)) {
+			saveData(indexBaseMonthDataDao.getMemberStudentNumData(dayStr), dayStr, IndexDataType.MEMBER_STUDENT_NUM);
+		}
+
+		//新增会员数量
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.NEW_MEMBER_STUDENT_NUM)) {
+			saveData(indexBaseMonthDataDao.getNewMemberStudentNumData(dayStr), dayStr, IndexDataType.NEW_MEMBER_STUDENT_NUM);
+		}
+
+		//试用会员数量
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.EXPERIENCE_MEMBER_STUDENT_NUM)) {
+			saveData(indexBaseMonthDataDao.getExperienceMemberStudentNumData(dayStr), dayStr, IndexDataType.EXPERIENCE_MEMBER_STUDENT_NUM);
+		}
+
+		//云教练使用用户
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_STUDY_DAY_USE_STUDENT_NUM)) {
+			saveData(indexBaseMonthDataDao.getCloudStudyDayUseStudentNumData(dayStr), dayStr, IndexDataType.CLOUD_STUDY_DAY_USE_STUDENT_NUM);
+		}
+
+		//活跃用户
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_STUDY_LIVELY_STUDENT_NUM)) {
+			saveData(indexBaseMonthDataDao.getCloudStudyLivelyStudentNumData(dayStr), dayStr, IndexDataType.CLOUD_STUDY_LIVELY_STUDENT_NUM);
+		}
 
 	}
 

+ 118 - 16
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -1646,26 +1646,128 @@
 
 	<select id="getOrgansStudentNumData" resultMap="IndexBaseMonthData">
 		SELECT
+			t.organ_id_,
+			#{dayStr} month_,
+			COUNT( DISTINCT t.user_id_ ) total_num_,
+			COUNT( DISTINCT t.user_id_ ) activate_num_,
+			COUNT( DISTINCT t.user_id_ ) percent_
+		FROM((
+			SELECT
+				su.organ_id_,
+				sr.user_id_
+			FROM
+				student_registration sr
+				LEFT JOIN sys_user su ON sr.user_id_ = su.id_
+			WHERE
+				su.del_flag_ = 0
+				AND sr.music_group_status_ = 'NORMAL'
+				<if test="dayStr!=null and dayStr!=''">
+					AND DATE(sr.create_time_)&lt;= #{dayStr}
+				</if>)
+		UNION ALL
+		(
+			SELECT
+				su.organ_id_,
+				cssp.user_id_
+			FROM
+				course_schedule_student_payment cssp
+				LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
+				LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
+			WHERE
+				cssp.group_type_ IN ( 'VIP', 'PRACTICE' )
+				AND cs.status_ = 'NOT_START'
+				AND su.del_flag_ = 0
+				<if test="dayStr!=null and dayStr!=''">
+					AND DATE(cssp.create_time_)&lt;= #{dayStr}
+				</if>)) t
+		GROUP BY t.organ_id_
+	</select>
+
+	<select id="getMemberStudentNumData" resultMap="IndexBaseMonthData">
+		SELECT
+			su.organ_id_,
+			#{dayStr} month_,
+			COUNT(DISTINCT cto.student_id_) total_num_,
+			COUNT(DISTINCT cto.student_id_) activate_num_,
+			COUNT(DISTINCT cto.student_id_) percent_
+		FROM cloud_teacher_order cto
+			LEFT JOIN sys_user su ON cto.student_id_=su.id_
+		WHERE su.del_flag_=0 AND cto.status_ IN (1,2)
+			<if test="dayStr!=null and dayStr!=''">
+				AND DATE(cto.create_time_)&lt;= #{dayStr}
+			</if>
+		GROUP BY su.organ_id_
+	</select>
+
+	<select id="getNewMemberStudentNumData" resultMap="IndexBaseMonthData">
+		SELECT
 		su.organ_id_,
 		#{dayStr} month_,
-		COUNT( DISTINCT s.user_id_ ) total_num_,
-		COUNT( DISTINCT s.user_id_ ) activate_num_,
-		COUNT( DISTINCT s.user_id_ ) percent_
-		FROM
-		sys_user su
-		LEFT JOIN course_schedule_student_payment s ON su.id_=s.user_id_
-		LEFT JOIN course_schedule_student_payment cssp1 ON s.user_id_=cssp1.user_id_ AND cssp1.create_time_&lt;#{dayStr}
-		LEFT JOIN course_schedule m ON s.course_schedule_id_=m.id_
-		WHERE
-		m.del_flag_ = 0
-		AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
-		AND cssp1.id_ IS NULL
-		AND su.organ_id_ IS NOT NULL
-		AND m.group_type_ IN ('VIP', 'PRACTICE')
+		COUNT(DISTINCT cto.student_id_) total_num_,
+		COUNT(DISTINCT cto.student_id_) activate_num_,
+		COUNT(DISTINCT cto.student_id_) percent_
+		FROM cloud_teacher_order cto
+		LEFT JOIN sys_user su ON cto.student_id_=su.id_
+		WHERE su.del_flag_=0 AND cto.status_ IN (1,2)
 		<if test="dayStr!=null and dayStr!=''">
-			AND DATE_FORMAT(s.create_time_, '%Y-%m-%d') = #{dayStr}
+			AND DATE(cto.create_time_)= #{dayStr}
 		</if>
 		GROUP BY su.organ_id_
-		ORDER BY su.organ_id_;
+	</select>
+
+	<select id="getExperienceMemberStudentNumData" resultMap="IndexBaseMonthData">
+		SELECT
+		su.organ_id_,
+		#{dayStr} month_,
+		COUNT(DISTINCT stu.user_id_) total_num_,
+		COUNT(DISTINCT stu.user_id_) activate_num_,
+		COUNT(DISTINCT stu.user_id_) percent_
+		FROM student stu
+		LEFT JOIN cloud_teacher_order cto ON stu.user_id_=cto.student_id_
+		LEFT JOIN sys_user su ON su.id_=stu.user_id_
+		WHERE su.del_flag_=0 AND stu.experience_member_rank_setting_id_ IS NOT NULL AND (cto.id_ IS NULL OR cto.status_ NOT IN (1, 2))
+		<if test="dayStr!=null and dayStr!=''">
+			AND DATE(stu.experience_membership_start_time_)&lt;= #{dayStr}
+		</if>
+		GROUP BY su.organ_id_
+	</select>
+
+	<select id="getCloudStudyDayUseStudentNumData" resultMap="IndexBaseMonthData">
+		SELECT
+			su.organ_id_,
+			#{dayStr} month_,
+			COUNT(DISTINCT smcr.user_id_) total_num_,
+			COUNT(DISTINCT smcr.user_id_) activate_num_,
+			COUNT(DISTINCT smcr.user_id_) percent_
+		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_
+		WHERE su.del_flag_=0 AND stu.user_id_ IS NOT NULL
+			<if test="dayStr!=null and dayStr!=''">
+				AND DATE(smcr.create_time_)= #{dayStr}
+			</if>
+		GROUP BY su.organ_id_
+	</select>
+
+	<select id="getCloudStudyLivelyStudentNumData" resultMap="IndexBaseMonthData">
+		SELECT
+			t.organ_id_,
+			#{dayStr} month_,
+			COUNT(user_id_) total_num_,
+			COUNT(user_id_) activate_num_,
+			COUNT(user_id_) percent_
+		FROM (SELECT
+			su.organ_id_,
+			smcr.user_id_,
+			COUNT(DISTINCT(CASE WHEN DATEDIFF(NOW(), smcr.create_time_)&lt;=15 THEN DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') ELSE NULL END)) days
+			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_
+			WHERE su.del_flag_=0 AND stu.user_id_ IS NOT NULL
+			<if test="dayStr!=null and dayStr!=''">
+				AND DATE(smcr.create_time_) &lt;= #{dayStr}
+			</if>
+			GROUP BY smcr.user_id_) t WHERE t.days>=5
+		GROUP BY t.organ_id_
 	</select>
 </mapper>