Browse Source

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

Joburgess 3 years ago
parent
commit
1f86e229f1

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

@@ -542,4 +542,14 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      */
     Set<Integer> getHasVipCourseStudentIds(@Param("studentIds") List<Integer> studentIds);
 
+    /**
+     * @describe 查询分部还有小课和网管课的学员数量
+     * @author Joburgess
+     * @date 2021/8/18 0018
+     * @param studentIds:
+     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Integer>>
+     */
+    int getHasVPCourseStudentNum(@Param("studentId") Integer studentId);
+    List<Map<Integer, Integer>> getOrganHasVPCourseStudentNum(@Param("studentIds") List<Integer> studentIds);
+
 }

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

@@ -50,5 +50,15 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     int countMusicGroupStudentTrainData(Map<String, Object> params);
 
     List<EduOrganStudentListDto> queryStudentTrainData(@Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * @describe 统计分部云教练新增人数
+     * @author Joburgess
+     * @date 2021/8/18 0018
+     * @param organId:
+     * @return int
+     */
+    int getOrganNewCloudStudyNum(@Param("organId") Integer organId);
+    List<Map<Integer, Integer>> getOrgansNewCloudStudyNum(@Param("organIds") List<Integer> organIds);
 	
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduOrganStudentDataDto.java

@@ -34,6 +34,9 @@ public class EduOrganStudentDataDto {
     @ApiModelProperty("活跃人数")
     private int cloudStudyLivelyStudentNum;
 
+    @ApiModelProperty("云教练新增人数")
+    private int newCloudStudyStudentNum;
+
     public Integer getOrganId() {
         return organId;
     }
@@ -105,4 +108,12 @@ public class EduOrganStudentDataDto {
     public void setCloudStudyLivelyStudentNum(int cloudStudyLivelyStudentNum) {
         this.cloudStudyLivelyStudentNum = cloudStudyLivelyStudentNum;
     }
+
+    public int getNewCloudStudyStudentNum() {
+        return newCloudStudyStudentNum;
+    }
+
+    public void setNewCloudStudyStudentNum(int newCloudStudyStudentNum) {
+        this.newCloudStudyStudentNum = newCloudStudyStudentNum;
+    }
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -412,10 +412,12 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if(queryInfo.getPage()==1){
             EduOrganStudentDataDto organStudentVipData = new EduOrganStudentDataDto();
             organStudentVipData.setTotalStudentNum(studentDao.getOrganStudentNum(queryInfo.getOrganId()));
+            organStudentVipData.setTotalStudentNum(organStudentVipData.getTotalStudentNum()+courseScheduleStudentPaymentDao.getHasVPCourseStudentNum(queryInfo.getOrganId()));
             organStudentVipData.setVipStudentNum(cloudTeacherDao.getOrganVipStudentNum(queryInfo.getOrganId()));
             organStudentVipData.seteVipStudentNum(studentDao.getOrganEVipStudentNum(queryInfo.getOrganId()));
             organStudentVipData.setCloudStudyUseStudentNum(studentDao.getCloudStudyStudentNum(queryInfo.getOrganId()));
             organStudentVipData.setCloudStudyLivelyStudentNum(studentDao.getCloudStudyLivelyStudentNum(queryInfo.getOrganId()));
+            organStudentVipData.setNewCloudStudyStudentNum(sysMusicCompareRecordDao.getOrganNewCloudStudyNum(queryInfo.getOrganId()));
             if(organStudentVipData.getVipStudentNum()>0&&organStudentVipData.getTotalStudentNum()>0){
                 organStudentVipData.setVipStudentDuty(new BigDecimal(organStudentVipData.getVipStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
             }
@@ -439,6 +441,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if(!CollectionUtils.isEmpty(organsStudentNumMapList)){
             organsStudentNumMap = MapUtil.convertIntegerMap(organsStudentNumMapList);
         }
+        List<Map<Integer, Integer>> organHasVPCourseStudentNumMapList = courseScheduleStudentPaymentDao.getOrganHasVPCourseStudentNum(organIds);
+        Map<String, Long> organHasVPCourseStudentNumMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(organHasVPCourseStudentNumMapList)){
+            organHasVPCourseStudentNumMap = MapUtil.convertIntegerMap(organHasVPCourseStudentNumMapList);
+        }
         List<Map<Integer, Integer>> organsVipStudentNumMapList = cloudTeacherDao.getOrgansVipStudentNum(organIds);
         Map<String, Long> organsVipStudentNumMap = new HashMap<>();
         if(!CollectionUtils.isEmpty(organsVipStudentNumMapList)){
@@ -459,6 +466,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         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);
+        }
 
         List<EduOrganStudentDataDto> result = new ArrayList<>();
 
@@ -469,6 +481,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(organsStudentNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setTotalStudentNum(organsStudentNumMap.get(organ.getId().toString()).intValue());
             }
+            if(organHasVPCourseStudentNumMap.containsKey(organ.getId().toString())){
+                organStudentVipData.setTotalStudentNum(organStudentVipData.getTotalStudentNum() + organHasVPCourseStudentNumMap.get(organ.getId().toString()).intValue());
+            }
             if(organsVipStudentNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId().toString()).intValue());
             }
@@ -487,6 +502,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(organStudentVipData.getCloudStudyUseStudentNum()>0&&organStudentVipData.getTotalStudentNum()>0){
                 organStudentVipData.setCloudStudyUseStudentDuty(new BigDecimal(organStudentVipData.getCloudStudyUseStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
             }
+            if(organsNewCloudStudyNumMap.containsKey(organ.getId().toString())){
+                organStudentVipData.setNewCloudStudyStudentNum(organsNewCloudStudyNumMap.get(organ.getId().toString()).intValue());
+            }
             result.add(organStudentVipData);
         }
         return result;

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

@@ -777,4 +777,40 @@
 			</foreach>
 		</if>
 	</select>
+
+	<select id="getHasVPCourseStudentNum" resultType="int">
+		SELECT
+			COUNT( DISTINCT 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
+			AND cssp.user_id_ = #{studentId}
+	</select>
+
+    <select id="getOrganHasVPCourseStudentNum" resultType="map">
+		SELECT
+			su.organ_id_ 'key',
+			COUNT( DISTINCT cssp.user_id_ ) 'value'
+		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="studentIds!=null and studentIds.size()>0">
+				AND cssp.user_id_ IN
+				<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+					#{studentId}
+				</foreach>
+			</if>
+		GROUP BY
+			su.organ_id_
+	</select>
 </mapper>

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

@@ -763,10 +763,11 @@
     </select>
 
     <select id="getOrganStudentNum" resultType="int">
-        SELECT COUNT(stu.user_id_) totalStudentNum
-        FROM student stu
-            LEFT JOIN sys_user su ON stu.user_id_=su.id_
+        SELECT COUNT(sr.user_id_) totalStudentNum
+        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="organId!=null">
             AND su.organ_id_=#{organId}
         </if>
@@ -775,10 +776,11 @@
     <select id="getOrgansStudentNum" resultType="map">
         SELECT
                su.organ_id_ 'key',
-               COUNT(stu.user_id_) 'value'
-        FROM student stu
-        LEFT JOIN sys_user su ON stu.user_id_=su.id_
+               COUNT(DISTINCT sr.user_id_) 'value'
+        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="organIds!=null and organIds.size()>0">
             AND su.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">

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

@@ -233,4 +233,57 @@
 		GROUP BY
 			user_id_
 	</select>
+
+	<select id="getOrganNewCloudStudyNum" resultType="int">
+		SELECT
+			COUNT( DISTINCT user_id_ )
+		FROM
+			(
+				SELECT
+					su.organ_id_,
+					smcr.user_id_
+				FROM
+					sys_music_compare_record smcr
+						LEFT JOIN sys_user su ON smcr.user_id_ = su.id_
+				WHERE
+					su.del_flag_ = 0
+					AND su.organ_id_ = #{organId}
+				GROUP BY
+					user_id_
+				HAVING
+						COUNT(
+								DISTINCT DATE( smcr.create_time_ ))= 1
+				   AND MAX(
+							   DATE( smcr.create_time_ ))= CURDATE()) t
+	</select>
+
+	<select id="getOrgansNewCloudStudyNum" resultType="map">
+		SELECT
+			organ_id_ 'key',
+			COUNT( DISTINCT user_id_ ) 'value'
+		FROM
+			(
+				SELECT
+					su.organ_id_,
+					smcr.user_id_
+				FROM
+					sys_music_compare_record smcr
+						LEFT JOIN sys_user su ON smcr.user_id_ = su.id_
+				WHERE
+					su.del_flag_ = 0
+					<if test="organIds!=null and organIds.size()>0">
+						AND su.organ_id_ IN
+						<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+							#{organId}
+						</foreach>
+					</if>
+				GROUP BY
+					user_id_
+				HAVING
+						COUNT(
+								DISTINCT DATE( smcr.create_time_ ))= 1
+				   AND MAX(
+							   DATE( smcr.create_time_ ))= CURDATE()) t
+		GROUP BY t.organ_id_
+	</select>
 </mapper>