Browse Source

Merge remote-tracking branch 'origin/music_score' into music_score

zouxuan 3 years ago
parent
commit
ebd4b838fe

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.enums.GroupType;
@@ -360,5 +361,5 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      */
     List<BaseMapDto<Integer,Long>> getOrganCloudNewStudentNum(@Param("musicGroupIds") List<String> musicGroupIds, @Param("userIds") List<Integer> userIds);
 
-    List<Map<Long, Long>> groupOrganId(@Param("organIds") List<Integer> organIds, @Param("userIds") List<Integer> userIds);
+    List<IndexBaseMonthData> groupOrganId(@Param("organIds") List<Integer> organIds, @Param("userIds") List<Integer> userIds);
 }

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

@@ -677,10 +677,10 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<Map<Integer, String>> queryStudentMusicGroupNamesMap(@Param("studentIds") List<Integer> studentIds);
 
     /**
-     * 获取在读并且进行中的乐团编号
+     * 获取进行中在读的学员列表
      * @return
      */
-    List<String> findMusicGroupIds();
-
     List<Integer> findStudentIds();
+
+    List<Integer> findNoCourseStudentIds();
 }

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

@@ -75,6 +75,7 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     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),
     CLOUD_STUDY_NEW_STUDENT_NUM("CLOUD_STUDY_NEW_STUDENT_NUM", "云教练新增用户", false, false),
+    CLOUD_NEW_STUDENT_NUM("CLOUD_NEW_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),

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

@@ -540,6 +540,24 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			saveData(indexBaseMonthDataDao.getCloudStudyNewStudentNumData(dayStr), dayStr, IndexDataType.CLOUD_STUDY_NEW_STUDENT_NUM);
 		}
 
+		//云教练新用户人数
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_NEW_STUDENT_NUM)) {
+			//获取新增人数占比(已上乐团课小于等于4)
+			//获取有在读学员的乐团编号
+			//获取有在读学员的学员编号
+			List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
+//			List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
+//			//获取有乐团没排课的数据
+//			List<Integer> noCourseStudentIdList = studentRegistrationDao.findNoCourseStudentIds();
+//			List<Integer> userIdList = new ArrayList<>();
+//			if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
+//				List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
+//				userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
+//			}
+//			userIdList.addAll(noCourseStudentIdList);
+			saveData(studentDao.groupOrganId(null,studentIdList),LocalDate.now().toString(),IndexDataType.CLOUD_NEW_STUDENT_NUM);
+		}
+
 	}
 
 	/**

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

@@ -36,7 +36,7 @@ import java.util.concurrent.ConcurrentHashMap;
 @Service
 public class SoundCheckHandler implements WebSocketEventHandler {
 
-    private static final double COMPARE_FREQUENCY = 442;
+    private static final double COMPARE_FREQUENCY = 525;
 
     /** 校音数据 */
     private Map<String, Integer> userSoundCheckInfo = new ConcurrentHashMap<>();

+ 50 - 29
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -27,10 +27,13 @@ import org.springframework.util.CollectionUtils;
 import sun.nio.cs.ext.Big5;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.IndexDataType.CLOUD_NEW_STUDENT_NUM;
+
 @Service
 public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implements StudentService {
 
@@ -68,6 +71,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private OrganizationDao organizationDao;
 
+    @Autowired
+    private IndexBaseMonthDataDao indexBaseMonthDataDao;
+
     @Override
     public BaseDAO<Integer, Student> getDAO() {
         return studentDao;
@@ -542,19 +548,24 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if(!CollectionUtils.isEmpty(organsNewCloudStudyNumMapList)){
             organsNewCloudStudyNumMap = MapUtil.convertIntegerMap(organsNewCloudStudyNumMapList);
         }
-        //获取新增人数占比(已上乐团课小于等于4)
-        //获取有在读学员的乐团编号
-        //获取有在读学员的学员编号
-        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
-        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
-        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
-        Map<String, Long> organsNewCloudNewStudentNumMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
-            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
-            List<Integer> userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
-            List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
-            organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
-        }
+//        //获取新增人数占比(已上乐团课小于等于4)
+//        //获取有在读学员的乐团编号
+//        //获取有在读学员的学员编号
+//        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
+//        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
+//        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
+//        //获取有乐团没排课的数据
+//        List<Integer> noCourseStudentIdList = studentRegistrationDao.findNoCourseStudentIds();
+//        List<Integer> userIdList = new ArrayList<>();
+//        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
+//            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
+//            userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
+//        }
+//        userIdList.addAll(noCourseStudentIdList);
+//        List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
+//        Map<String, Long> organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
+        List<IndexBaseMonthData> withDayAndDataType = indexBaseMonthDataDao.getWithDayAndDataType(LocalDate.now().toString(), CLOUD_NEW_STUDENT_NUM);
+        Map<Integer, Integer> organsNewCloudNewStudentNumMap = withDayAndDataType.stream().collect(Collectors.toMap(IndexBaseMonthData::getOrganId, e -> e.getActivateNum().intValue(), (e1, e2) -> e1));
 
         List<EduOrganStudentDataDto> result = new ArrayList<>();
 
@@ -586,9 +597,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(organsNewCloudStudyNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setNewCloudStudyStudentNum(organsNewCloudStudyNumMap.get(organ.getId().toString()).intValue());
             }
-            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId().toString())){
-                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId().toString()).intValue());
-                organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId())){
+                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId()));
+                if(organStudentVipData.getNewStudentNum() > 0 && organStudentVipData.getTotalStudentNum()>0){
+                    organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+                }
             }
             result.add(organStudentVipData);
         }
@@ -644,16 +657,22 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         //获取新增人数占比(已上乐团课小于等于4)
         //获取有在读学员的乐团编号
         //获取有在读学员的学员编号
-        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
-        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
-        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
-        Map<String, Long> organsNewCloudNewStudentNumMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
-            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
-            List<Integer> userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
-            List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
-            organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
-        }
+//        List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
+//        List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
+//        List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
+//        //获取有乐团没排课的数据
+//        List<Integer> noCourseStudentIdList = studentRegistrationDao.findNoCourseStudentIds();
+//        List<Integer> userIdList = new ArrayList<>();
+//        if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
+//            List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
+//            userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
+//        }
+//        userIdList.addAll(noCourseStudentIdList);
+//        List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
+//        Map<String, Long> organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
+
+        List<IndexBaseMonthData> withDayAndDataType = indexBaseMonthDataDao.getWithDayAndDataType(LocalDate.now().toString(), CLOUD_NEW_STUDENT_NUM);
+        Map<Integer, Integer> organsNewCloudNewStudentNumMap = withDayAndDataType.stream().collect(Collectors.toMap(IndexBaseMonthData::getOrganId, e -> e.getActivateNum().intValue(), (e1, e2) -> e1));
 
         List<EduOrganStudentDataDto> result = new ArrayList<>();
 
@@ -685,9 +704,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(organsNewCloudStudyNumMap.containsKey(organ.getId().toString())){
                 organStudentVipData.setNewCloudStudyStudentNum(organsNewCloudStudyNumMap.get(organ.getId().toString()).intValue());
             }
-            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId().toString())){
-                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId().toString()).intValue());
-                organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId())){
+                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId()));
+                if(organStudentVipData.getNewStudentNum() > 0 && organStudentVipData.getTotalStudentNum()>0){
+                    organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+                }
             }
             result.add(organStudentVipData);
         }

+ 21 - 20
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -827,33 +827,30 @@
     </select>
 
     <select id="getOrgansStudentNum" resultType="map">
-        SELECT t.organ_id_ 'key',COUNT(DISTINCT user_id_) 'value'
-        FROM ((SELECT su.organ_id_,sr.user_id_
+        SELECT su.organ_id_ 'key',COUNT(DISTINCT user_id_) 'value'
+        FROM ((SELECT sr.user_id_
         FROM student_registration sr
         LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
-        LEFT JOIN sys_user su ON sr.user_id_=su.id_
-        WHERE su.del_flag_=0
-        AND mg.status_='PROGRESS'
+        WHERE mg.status_='PROGRESS'
         AND sr.music_group_status_='NORMAL')
         UNION ALL
         (SELECT
-        su.organ_id_,cssp.user_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)) t
-        WHERE 1=1
-        <if test="organIds!=null and organIds.size()>0">
-            AND t.organ_id_ IN
-            <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-                #{organId}
-            </foreach>
-        </if>
-        GROUP BY t.organ_id_
+        AND cs.status_='NOT_START')) t
+        LEFT JOIN sys_user su ON t.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 su.organ_id_
     </select>
 
     <select id="getOrganTeacherStudentNum" resultType="map">
@@ -1191,7 +1188,7 @@
     </select>
     <select id="getOrganCloudNewStudentNum" resultType="com.ym.mec.biz.dal.dto.BaseMapDto">
         SELECT cssp.`user_id_` 'key',count(cs.`id_`) 'value' FROM `course_schedule_student_payment` cssp
-        STRAIGHT_JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+        LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
         WHERE cs.`status_` = 'OVER' AND cs.`group_type_` = 'MUSIC' AND cs.`del_flag_` = 0
         <if test="musicGroupIds != null and musicGroupIds.size() > 0">
             AND cs.music_group_id_ IN
@@ -1207,8 +1204,12 @@
         </if>
         GROUP BY cssp.`user_id_`
     </select>
-    <select id="groupOrganId" resultType="java.util.Map">
-        SELECT su.organ_id_ 'key',COUNT(DISTINCT su.id_) 'value' FROM sys_user su
+    <select id="groupOrganId" resultMap="com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao.IndexBaseMonthData">
+        SELECT su.organ_id_,CURDATE() month_,
+               COUNT(DISTINCT su.id_) total_num_ ,
+               COUNT(DISTINCT su.id_) activate_num_ ,
+               COUNT(DISTINCT su.id_) percent_
+        FROM sys_user su
         WHERE 1 = 1
         <if test="userIds!=null and userIds.size() > 0">
             AND su.id_ IN

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

@@ -1678,7 +1678,7 @@
         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
+        WHERE mg.status_='PROGRESS'
         <if test="studentIds!=null and studentIds.size()>0">
             AND sr.user_id_ IN
             <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
@@ -1687,14 +1687,21 @@
         </if>
         GROUP BY sr.user_id_
     </select>
-    <select id="findMusicGroupIds" resultType="java.lang.String">
-        SELECT DISTINCT sr.music_group_id_ FROM student_registration sr
-        LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
-        WHERE sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS'
-    </select>
     <select id="findStudentIds" resultType="java.lang.Integer">
         SELECT DISTINCT sr.user_id_ FROM student_registration sr
-        LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+                                             LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
         WHERE sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS'
+          AND sr.user_id_ NOT IN (SELECT DISTINCT(cssp.`user_id_`)  FROM `course_schedule_student_payment` cssp
+                                                                             LEFT JOIN course_schedule cs on cssp.`course_schedule_id_` = cs.`id_`
+                                                                             LEFT JOIN `music_group` mg on mg.`id_` = cssp.`music_group_id_`
+                                  WHERE cs.`group_type_` = 'MUSIC' AND cs.`status_` = 'OVER' AND mg.`status_` = 'PROGRESS'
+                                  GROUP BY cssp.`user_id_` HAVING COUNT(cs.`id_`) > 4)
+    </select>
+    <select id="findNoCourseStudentIds" resultType="java.lang.Integer">
+        SELECT DISTINCT sr.user_id_ FROM student_registration sr
+                                             LEFT JOIN sys_user su ON su.id_ = sr.user_id_
+        WHERE sr.music_group_id_ IN (SELECT mg.id_ FROM music_group mg
+                                     WHERE mg.id_ NOT IN (SELECT DISTINCT music_group_id_ FROM course_schedule WHERE group_type_ = 'MUSIC')
+                                       AND mg.status_ = 'PROGRESS') AND sr.music_group_status_ = 'NORMAL'
     </select>
 </mapper>