浏览代码

首页新增 新增人数占比

zouxuan 3 年之前
父节点
当前提交
ad005926c8

+ 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);
 }

+ 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),

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

@@ -540,6 +540,25 @@ 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<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);
+			saveData(studentDao.groupOrganId(null,userIdList),LocalDate.now().toString(),IndexDataType.CLOUD_NEW_STUDENT_NUM);
+		}
+
 	}
 
 	/**

+ 44 - 33
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,22 +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);
-        //获取有乐团没排课的数据
-        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);
+//        //获取新增人数占比(已上乐团课小于等于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<>();
 
@@ -589,8 +597,8 @@ 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());
+            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId())){
+                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId()));
                 organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
             }
             result.add(organStudentVipData);
@@ -647,19 +655,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);
-        //获取有乐团没排课的数据
-        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<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<>();
 
@@ -691,8 +702,8 @@ 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());
+            if(organsNewCloudNewStudentNumMap.containsKey(organ.getId())){
+                organStudentVipData.setNewStudentNum(organsNewCloudNewStudentNumMap.get(organ.getId()));
                 organStudentVipData.setNewStudentDuty(new BigDecimal(organStudentVipData.getNewStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
             }
             result.add(organStudentVipData);

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

@@ -1207,8 +1207,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