瀏覽代碼

Merge branch 'music_score'

# Conflicts:
#	mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java
Joburgess 3 年之前
父節點
當前提交
50287bc1bb
共有 23 個文件被更改,包括 993 次插入73 次删除
  1. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherDao.java
  2. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  4. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  5. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduOrganStudentDataDto.java
  6. 76 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherStudentDataDto.java
  7. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  8. 137 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/OrganCloudStudyStudentDataQueryInfo.java
  9. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/IndexBaseMonthDataService.java
  10. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  11. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  12. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  13. 145 34
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  14. 141 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  15. 42 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  16. 17 0
      mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml
  17. 139 16
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  18. 17 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  19. 30 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  20. 145 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  21. 16 0
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java
  22. 9 5
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  23. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

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

@@ -23,4 +23,7 @@ public interface CloudTeacherDao extends BaseDAO<Long, CloudTeacher> {
     int getOrgansTotalVipStudentNum(@Param("organIds") List<Integer> organIds);
     List<Map<Integer, Integer>> getOrgansVipStudentNum(@Param("organIds") List<Integer> organId);
 
+
+    List<Map<Integer, Integer>> getTeachersMemberStudentNum(@Param("teacherIds") List<Integer> teacherIds);
+
 }

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

@@ -322,4 +322,16 @@ 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);
+
+    List<IndexBaseMonthData> getCloudStudyNewStudentNumData(@Param("dayStr") String dayStr);
 }

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

@@ -340,4 +340,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     int getOrganEVipStudentNum(@Param("organId") Integer organId);
     int getOrgansTotalEVipStudentNum(@Param("organIds") List<Integer> organIds);
     List<Map<Integer, Integer>> getOrgansEVipStudentNum(@Param("organIds") List<Integer> organIds);
+
+    List<Map<Integer, Integer>> getTeacherExperienceMemberStudentNum(@Param("teacherIds") List<Integer> teacherIds);
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -514,4 +514,12 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      */
     List<String> queryTeacherMusicIds(Map<String, Object> params);
     int countTeacherMusics(Map<String, Object> params);
+
+    /**
+     * 查询分部下教师关联的会员数据
+     * @param params
+     * @return
+     */
+    List<TeacherStudentDataDto> queryMemberStudentData(Map<String, Object> params);
+    int countMemberStudentData(Map<String, Object> params);
 }

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

@@ -22,6 +22,9 @@ public class EduOrganStudentDataDto {
     @ApiModelProperty("试用会员数")
     private int eVipStudentNum;
 
+    @ApiModelProperty("新增会员数")
+    private int newMemberStudentNum;
+
     @ApiModelProperty("付费会员占比")
     private float vipStudentDuty;
 
@@ -34,6 +37,9 @@ public class EduOrganStudentDataDto {
     @ApiModelProperty("活跃人数")
     private int cloudStudyLivelyStudentNum;
 
+    @ApiModelProperty("活跃人数占比")
+    private float cloudStudyLivelyStudentDuty;
+
     @ApiModelProperty("云教练新增人数")
     private int newCloudStudyStudentNum;
 
@@ -116,4 +122,20 @@ public class EduOrganStudentDataDto {
     public void setNewCloudStudyStudentNum(int newCloudStudyStudentNum) {
         this.newCloudStudyStudentNum = newCloudStudyStudentNum;
     }
+
+    public int getNewMemberStudentNum() {
+        return newMemberStudentNum;
+    }
+
+    public void setNewMemberStudentNum(int newMemberStudentNum) {
+        this.newMemberStudentNum = newMemberStudentNum;
+    }
+
+    public float getCloudStudyLivelyStudentDuty() {
+        return cloudStudyLivelyStudentDuty;
+    }
+
+    public void setCloudStudyLivelyStudentDuty(float cloudStudyLivelyStudentDuty) {
+        this.cloudStudyLivelyStudentDuty = cloudStudyLivelyStudentDuty;
+    }
 }

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

@@ -0,0 +1,76 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/16 0016
+ */
+public class TeacherStudentDataDto {
+
+    @ApiModelProperty("教师编号")
+    private Integer teacherId;
+
+    @ApiModelProperty("教师名称")
+    private String teacherName;
+
+    @ApiModelProperty("学员总数")
+    private int totalStudentNum;
+
+    @ApiModelProperty("付费会员数")
+    private int vipStudentNum;
+
+    @ApiModelProperty("试用会员数")
+    private int eVipStudentNum;
+
+    @ApiModelProperty("付费会员占比")
+    private float vipStudentDuty;
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public int getTotalStudentNum() {
+        return totalStudentNum;
+    }
+
+    public void setTotalStudentNum(int totalStudentNum) {
+        this.totalStudentNum = totalStudentNum;
+    }
+
+    public int getVipStudentNum() {
+        return vipStudentNum;
+    }
+
+    public void setVipStudentNum(int vipStudentNum) {
+        this.vipStudentNum = vipStudentNum;
+    }
+
+    public int geteVipStudentNum() {
+        return eVipStudentNum;
+    }
+
+    public void seteVipStudentNum(int eVipStudentNum) {
+        this.eVipStudentNum = eVipStudentNum;
+    }
+
+    public float getVipStudentDuty() {
+        return vipStudentDuty;
+    }
+
+    public void setVipStudentDuty(float vipStudentDuty) {
+        this.vipStudentDuty = vipStudentDuty;
+    }
+}

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

@@ -72,7 +72,9 @@ 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),
+    CLOUD_STUDY_NEW_STUDENT_NUM("CLOUD_STUDY_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),

+ 137 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/OrganCloudStudyStudentDataQueryInfo.java

@@ -0,0 +1,137 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class OrganCloudStudyStudentDataQueryInfo extends QueryInfo {
+
+    private String date;
+
+    private String organIds;
+
+    @ApiModelProperty("学员总数")
+    private String totalStudentNum;
+
+    @ApiModelProperty("付费会员数")
+    private String vipStudentNum;
+
+    @ApiModelProperty("试用会员数")
+    private String eVipStudentNum;
+
+    @ApiModelProperty("新增会员数")
+    private String newMemberStudentNum;
+
+    @ApiModelProperty("付费会员占比")
+    private String vipStudentDuty;
+
+    @ApiModelProperty("云教练试用人数")
+    private String cloudStudyUseStudentNum;
+
+    @ApiModelProperty("云教练使用人数占比")
+    private String cloudStudyUseStudentDuty;
+
+    @ApiModelProperty("活跃人数")
+    private String cloudStudyLivelyStudentNum;
+
+    @ApiModelProperty("活跃人数占比")
+    private String cloudStudyLivelyStudentDuty;
+
+    @ApiModelProperty("云教练新增人数")
+    private String newCloudStudyStudentNum;
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+
+    public String getOrganIds() {
+        return organIds;
+    }
+
+    public void setOrganIds(String organIds) {
+        this.organIds = organIds;
+    }
+
+    public String getTotalStudentNum() {
+        return totalStudentNum;
+    }
+
+    public void setTotalStudentNum(String totalStudentNum) {
+        this.totalStudentNum = totalStudentNum;
+    }
+
+    public String getVipStudentNum() {
+        return vipStudentNum;
+    }
+
+    public void setVipStudentNum(String vipStudentNum) {
+        this.vipStudentNum = vipStudentNum;
+    }
+
+    public String geteVipStudentNum() {
+        return eVipStudentNum;
+    }
+
+    public void seteVipStudentNum(String eVipStudentNum) {
+        this.eVipStudentNum = eVipStudentNum;
+    }
+
+    public String getNewMemberStudentNum() {
+        return newMemberStudentNum;
+    }
+
+    public void setNewMemberStudentNum(String newMemberStudentNum) {
+        this.newMemberStudentNum = newMemberStudentNum;
+    }
+
+    public String getVipStudentDuty() {
+        return vipStudentDuty;
+    }
+
+    public void setVipStudentDuty(String vipStudentDuty) {
+        this.vipStudentDuty = vipStudentDuty;
+    }
+
+    public String getCloudStudyUseStudentNum() {
+        return cloudStudyUseStudentNum;
+    }
+
+    public void setCloudStudyUseStudentNum(String cloudStudyUseStudentNum) {
+        this.cloudStudyUseStudentNum = cloudStudyUseStudentNum;
+    }
+
+    public String getCloudStudyUseStudentDuty() {
+        return cloudStudyUseStudentDuty;
+    }
+
+    public void setCloudStudyUseStudentDuty(String cloudStudyUseStudentDuty) {
+        this.cloudStudyUseStudentDuty = cloudStudyUseStudentDuty;
+    }
+
+    public String getCloudStudyLivelyStudentNum() {
+        return cloudStudyLivelyStudentNum;
+    }
+
+    public void setCloudStudyLivelyStudentNum(String cloudStudyLivelyStudentNum) {
+        this.cloudStudyLivelyStudentNum = cloudStudyLivelyStudentNum;
+    }
+
+    public String getCloudStudyLivelyStudentDuty() {
+        return cloudStudyLivelyStudentDuty;
+    }
+
+    public void setCloudStudyLivelyStudentDuty(String cloudStudyLivelyStudentDuty) {
+        this.cloudStudyLivelyStudentDuty = cloudStudyLivelyStudentDuty;
+    }
+
+    public String getNewCloudStudyStudentNum() {
+        return newCloudStudyStudentNum;
+    }
+
+    public void setNewCloudStudyStudentNum(String newCloudStudyStudentNum) {
+        this.newCloudStudyStudentNum = newCloudStudyStudentNum;
+    }
+}

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/IndexBaseMonthDataService.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
@@ -11,6 +12,9 @@ import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.enums.IndexDataType;
 import com.ym.mec.biz.dal.enums.IndexErrorType;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
+import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
+import com.ym.mec.biz.dal.page.OrganizationQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface IndexBaseMonthDataService extends BaseService<Long, IndexBaseMonthData> {
@@ -36,4 +40,6 @@ public interface IndexBaseMonthDataService extends BaseService<Long, IndexBaseMo
      * @return
      */
     Map<String,Boolean> hasIndexErrData(String organIds);
+
+    PageInfo<EduOrganStudentDataDto> organStudentOverView(List<Integer> organIds, OrganCloudStudyStudentDataQueryInfo queryInfo);
 }

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java

@@ -5,11 +5,12 @@ import com.ym.mec.biz.dal.page.OrganizationQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public interface OrganizationService extends BaseService<Integer, Organization> {
 
+    Set<Integer>  EXCLUDE_ORGAN_IDS = new HashSet<>(Arrays.asList(36,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56));
+
     /**
      * 获取节点树状结构
      * @param queryInfo
@@ -40,4 +41,4 @@ public interface OrganizationService extends BaseService<Integer, Organization>
      * @param id
      */
     Map<Integer, String> getGradeList(Integer id);
-}
+}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
@@ -110,6 +111,8 @@ public interface StudentService extends BaseService<Integer, Student> {
 
     List<EduOrganStudentDataDto> organStudentOverView(List<Integer> organIds);
 
+    PageInfo<EduOrganStudentDataDto> queryOrganStudentOverView(List<Integer> organIds, OrganCloudStudyStudentDataQueryInfo queryInfo);
+
     CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds);
 
     /**

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java

@@ -224,4 +224,11 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto>
      */
     PageInfo<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo);
+
+    /**
+     * 查询分部下教师关联的会员数据
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<TeacherStudentDataDto> queryMemberStudentData(TeacherServeQueryInfo queryInfo);
 }

+ 145 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -5,19 +5,19 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.IndexBaseDto;
-import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
-import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
-import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
+import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
+import com.ym.mec.biz.dal.page.OrganizationQueryInfo;
 import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
@@ -505,36 +505,40 @@ 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);
+		}
+
+		//云教练新增人数
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_STUDY_NEW_STUDENT_NUM)) {
+			saveData(indexBaseMonthDataDao.getCloudStudyLivelyStudentNumData(dayStr), dayStr, IndexDataType.CLOUD_STUDY_NEW_STUDENT_NUM);
+		}
 
 	}
 
@@ -1222,4 +1226,111 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 
 		return resultMap;
 	}
+
+	@Override
+	public PageInfo<EduOrganStudentDataDto> organStudentOverView(List<Integer> organIds, OrganCloudStudyStudentDataQueryInfo queryInfo) {
+		PageInfo<EduOrganStudentDataDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		List<Organization> organs = organizationDao.getOrgans(organIds);
+		pageInfo.setTotal(organs.size());
+
+		if(CollectionUtils.isEmpty(organs)){
+			return pageInfo;
+		}
+		Set<String> dataTypes = new HashSet<String>(){{
+			add(CLOUD_STUDY_LIVELY_STUDENT_NUM.getCode());add(MEMBER_STUDENT_NUM.getCode());add(EXPERIENCE_MEMBER_STUDENT_NUM.getCode());
+			add(NEW_MEMBER_STUDENT_NUM.getCode());add(ORGAN_TOTAL_STUDENT_NUM.getCode());add(CLOUD_STUDY_NEW_STUDENT_NUM.getCode());}};
+
+
+		List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getIndexBaseData(new HashSet<>(organIds), dataTypes, queryInfo.getDate(), queryInfo.getDate());
+
+		Map<Integer, Integer> organsStudentNumMap = indexBaseDatas.stream().filter(i->ORGAN_TOTAL_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
+
+		Map<Integer, Integer> organsVipStudentNumMap = indexBaseDatas.stream().filter(i->MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
+
+		Map<Integer, Integer> organsEVipStudentNumMap = indexBaseDatas.stream().filter(i->EXPERIENCE_MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
+
+		Map<Integer, Integer> organCloudStudyLivelyStudentNumMap =indexBaseDatas.stream().filter(i->CLOUD_STUDY_LIVELY_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
+
+		Map<Integer, Integer> organsNewMemberStudentNumMap = indexBaseDatas.stream().filter(i->NEW_MEMBER_STUDENT_NUM.equals(i.getDataType())).collect(Collectors.toMap(IndexBaseMonthData::getOrganId, i->i.getActivateNum().intValue(), (i1, i2)->i1));
+
+		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));
+
+		List<EduOrganStudentDataDto> result = new ArrayList<>();
+
+		for (Organization organ : organs) {
+			EduOrganStudentDataDto organStudentVipData = new EduOrganStudentDataDto();
+			organStudentVipData.setOrganId(organ.getId());
+			organStudentVipData.setOrganName(organ.getName());
+			if(organsStudentNumMap.containsKey(organ.getId())){
+				organStudentVipData.setTotalStudentNum(organsStudentNumMap.get(organ.getId()));
+			}
+			if(organsVipStudentNumMap.containsKey(organ.getId())){
+				organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId()));
+			}
+			if(organsEVipStudentNumMap.containsKey(organ.getId())){
+				organStudentVipData.seteVipStudentNum(organsEVipStudentNumMap.get(organ.getId()));
+			}
+			if(organCloudStudyLivelyStudentNumMap.containsKey(organ.getId())){
+				organStudentVipData.setCloudStudyLivelyStudentNum(organCloudStudyLivelyStudentNumMap.get(organ.getId()));
+			}
+			if(organsNewMemberStudentNumMap.containsKey(organ.getId())){
+				organStudentVipData.setNewMemberStudentNum(organsNewMemberStudentNumMap.get(organ.getId()));
+			}
+			if(organsNewCloudStudyStudentNumMap.containsKey(organ.getId())){
+				organStudentVipData.setNewCloudStudyStudentNum(organsNewCloudStudyStudentNumMap.get(organ.getId()));
+			}
+			if(organStudentVipData.getCloudStudyLivelyStudentNum()>0&&organStudentVipData.getTotalStudentNum()>0){
+				organStudentVipData.setCloudStudyLivelyStudentDuty(new BigDecimal(organStudentVipData.getCloudStudyLivelyStudentNum()).divide(new BigDecimal(organStudentVipData.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
+			}
+			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());
+			}
+			result.add(organStudentVipData);
+		}
+
+		Comparator<EduOrganStudentDataDto> comparing = null;
+		if(StringUtils.isNotBlank(queryInfo.getCloudStudyLivelyStudentNum())){
+			if(Objects.isNull(comparing)){
+				comparing = Comparator.comparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentNum, "ASC".equals(queryInfo.getCloudStudyLivelyStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}else{
+				comparing.thenComparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentNum, "ASC".equals(queryInfo.getCloudStudyLivelyStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}
+		}
+		if(StringUtils.isNotBlank(queryInfo.getVipStudentNum())){
+			if(Objects.isNull(comparing)){
+				comparing = Comparator.comparing(EduOrganStudentDataDto::getVipStudentNum, "ASC".equals(queryInfo.getVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}else{
+				comparing.thenComparing(EduOrganStudentDataDto::getVipStudentNum, "ASC".equals(queryInfo.getVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}
+		}
+		if(StringUtils.isNotBlank(queryInfo.geteVipStudentNum())){
+			if(Objects.isNull(comparing)){
+				comparing = Comparator.comparing(EduOrganStudentDataDto::geteVipStudentNum, "ASC".equals(queryInfo.geteVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}else{
+				comparing.thenComparing(EduOrganStudentDataDto::geteVipStudentNum, "ASC".equals(queryInfo.geteVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}
+		}
+		if(StringUtils.isNotBlank(queryInfo.getNewMemberStudentNum())){
+			if(Objects.isNull(comparing)){
+				comparing = Comparator.comparing(EduOrganStudentDataDto::getNewMemberStudentNum, "ASC".equals(queryInfo.getNewMemberStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}else{
+				comparing.thenComparing(EduOrganStudentDataDto::getNewMemberStudentNum, "ASC".equals(queryInfo.getNewMemberStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}
+		}
+		if(StringUtils.isNotBlank(queryInfo.getCloudStudyLivelyStudentDuty())){
+			if(Objects.isNull(comparing)){
+				comparing = Comparator.comparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentDuty, "ASC".equals(queryInfo.getCloudStudyLivelyStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}else{
+				comparing.thenComparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentDuty, "ASC".equals(queryInfo.getCloudStudyLivelyStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+			}
+		}
+
+		if(Objects.isNull(comparing)){
+			comparing = Comparator.comparing(EduOrganStudentDataDto::getOrganId);
+		}
+
+		result = result.stream().skip(pageInfo.getOffset()).limit(pageInfo.getLimit()).sorted(comparing).collect(Collectors.toList());
+		pageInfo.setRows(result);
+		return pageInfo;
+	}
 }

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

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.biz.service.SysConfigService;
@@ -578,6 +579,146 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     }
 
     @Override
+    public PageInfo<EduOrganStudentDataDto> queryOrganStudentOverView(List<Integer> organIds, OrganCloudStudyStudentDataQueryInfo queryInfo) {
+        PageInfo<EduOrganStudentDataDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        List<Organization> organs = organizationDao.getOrgans(organIds);
+        pageInfo.setTotal(organs.size());
+
+        if(CollectionUtils.isEmpty(organs)){
+            return pageInfo;
+        }
+
+        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);
+        }
+
+        List<EduOrganStudentDataDto> result = new ArrayList<>();
+
+        for (Organization organ : organs) {
+            EduOrganStudentDataDto organStudentVipData = new EduOrganStudentDataDto();
+            organStudentVipData.setOrganId(organ.getId());
+            organStudentVipData.setOrganName(organ.getName());
+            if(organsStudentNumMap.containsKey(organ.getId().toString())){
+                organStudentVipData.setTotalStudentNum(organsStudentNumMap.get(organ.getId().toString()).intValue());
+            }
+            if(organsVipStudentNumMap.containsKey(organ.getId().toString())){
+                organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId().toString()).intValue());
+            }
+            if(organsEVipStudentNumMap.containsKey(organ.getId().toString())){
+                organStudentVipData.seteVipStudentNum(organsEVipStudentNumMap.get(organ.getId().toString()).intValue());
+            }
+            if(organCloudStudyStudentNumMap.containsKey(organ.getId().toString())){
+                organStudentVipData.setCloudStudyUseStudentNum(organCloudStudyStudentNumMap.get(organ.getId().toString()).intValue());
+            }
+            if(organCloudStudyLivelyStudentNumMap.containsKey(organ.getId().toString())){
+                organStudentVipData.setCloudStudyLivelyStudentNum(organCloudStudyLivelyStudentNumMap.get(organ.getId().toString()).intValue());
+            }
+            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());
+            }
+            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);
+        }
+        Comparator<EduOrganStudentDataDto> comparing = null;
+        if(StringUtils.isNotBlank(queryInfo.getTotalStudentNum())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::getTotalStudentNum, "ASC".equals(queryInfo.getTotalStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::getTotalStudentNum, "ASC".equals(queryInfo.getTotalStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+        if(StringUtils.isNotBlank(queryInfo.getCloudStudyLivelyStudentNum())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentNum, "ASC".equals(queryInfo.getCloudStudyLivelyStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentNum, "ASC".equals(queryInfo.getCloudStudyLivelyStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+        if(StringUtils.isNotBlank(queryInfo.getCloudStudyUseStudentDuty())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::getCloudStudyUseStudentDuty, "ASC".equals(queryInfo.getCloudStudyUseStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::getCloudStudyUseStudentDuty, "ASC".equals(queryInfo.getCloudStudyUseStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+        if(StringUtils.isNotBlank(queryInfo.getVipStudentNum())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::getVipStudentNum, "ASC".equals(queryInfo.getVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::getVipStudentNum, "ASC".equals(queryInfo.getVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+        if(StringUtils.isNotBlank(queryInfo.getVipStudentDuty())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::getVipStudentDuty, "ASC".equals(queryInfo.getVipStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::getVipStudentDuty, "ASC".equals(queryInfo.getVipStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+        if(StringUtils.isNotBlank(queryInfo.geteVipStudentNum())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::geteVipStudentNum, "ASC".equals(queryInfo.geteVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::geteVipStudentNum, "ASC".equals(queryInfo.geteVipStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+        if(StringUtils.isNotBlank(queryInfo.getNewMemberStudentNum())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::getNewMemberStudentNum, "ASC".equals(queryInfo.getNewMemberStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::getNewMemberStudentNum, "ASC".equals(queryInfo.getNewMemberStudentNum())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+        if(StringUtils.isNotBlank(queryInfo.getCloudStudyLivelyStudentDuty())){
+            if(Objects.isNull(comparing)){
+                comparing = Comparator.comparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentDuty, "ASC".equals(queryInfo.getCloudStudyLivelyStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }else{
+                comparing.thenComparing(EduOrganStudentDataDto::getCloudStudyLivelyStudentDuty, "ASC".equals(queryInfo.getCloudStudyLivelyStudentDuty())?Comparator.naturalOrder():Comparator.reverseOrder());
+            }
+        }
+
+        if(Objects.isNull(comparing)){
+            comparing = Comparator.comparing(EduOrganStudentDataDto::getOrganId);
+        }
+
+        result = result.stream().skip(pageInfo.getOffset()).limit(pageInfo.getLimit()).sorted(comparing).collect(Collectors.toList());
+        pageInfo.setRows(result);
+        return pageInfo;
+    }
+
+    @Override
     public CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds) {
         CloudStudyStudentDataDto result = new CloudStudyStudentDataDto();
         result.setTotalStudentNum(studentDao.getOrgansTotalStudentNum(organIds));

+ 42 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -16,6 +16,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.page.*;
 import org.apache.commons.lang3.StringUtils;
@@ -30,20 +31,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.DemoGroupDao;
-import com.ym.mec.biz.dal.dao.ImGroupDao;
-import com.ym.mec.biz.dal.dao.ImUserFriendDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.SchoolDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentExtracurricularExercisesSituationDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.ImUserFriend;
 import com.ym.mec.biz.dal.entity.MusicGroup;
@@ -109,6 +96,8 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	private ImUserFriendDao imUserFriendDao;
 	@Autowired
 	private RedisTemplate<String,String> redisTemplate;
+	@Autowired
+	private CloudTeacherDao cloudTeacherDao;
 
 
 	@Override
@@ -781,4 +770,43 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+	@Override
+	public PageInfo<TeacherStudentDataDto> queryMemberStudentData(TeacherServeQueryInfo queryInfo) {
+		PageInfo<TeacherStudentDataDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<TeacherStudentDataDto> dataList = new ArrayList<>();
+		int count = teacherDao.countMemberStudentData(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = teacherDao.queryMemberStudentData(params);
+			List<Integer> teacherIds = dataList.stream().map(TeacherStudentDataDto::getTeacherId).collect(Collectors.toList());
+			List<Map<Integer, Integer>> teachersMemberStudentNumMapList = cloudTeacherDao.getTeachersMemberStudentNum(teacherIds);
+			Map<Integer, Long> teachersMemberStudentNumMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(teachersMemberStudentNumMapList)){
+				teachersMemberStudentNumMap = MapUtil.convertIntegerMap(teachersMemberStudentNumMapList);
+			}
+			List<Map<Integer, Integer>> teacherExperienceMemberStudentNumMapList = studentDao.getTeacherExperienceMemberStudentNum(teacherIds);
+			Map<Integer, Long> teacherExperienceMemberStudentNumMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(teacherExperienceMemberStudentNumMapList)){
+				teacherExperienceMemberStudentNumMap = MapUtil.convertIntegerMap(teacherExperienceMemberStudentNumMapList);
+			}
+			for (TeacherStudentDataDto teacherStudentDataDto : dataList) {
+				if(teachersMemberStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
+					teacherStudentDataDto.setVipStudentNum(teachersMemberStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
+				}
+				if(teacherExperienceMemberStudentNumMap.containsKey(teacherStudentDataDto.getTeacherId())){
+					teacherStudentDataDto.seteVipStudentNum(teacherExperienceMemberStudentNumMap.get(teacherStudentDataDto.getTeacherId()).intValue());
+				}
+				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());
+				}
+			}
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

+ 17 - 0
mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml

@@ -115,4 +115,21 @@
         </if>
         GROUP BY su.organ_id_
     </select>
+
+    <select id="getTeachersMemberStudentNum" resultType="map">
+        SELECT
+        stu.teacher_id_ 'key',
+        COUNT(DISTINCT cto.student_id_) 'value'
+        FROM cloud_teacher_order cto
+        LEFT JOIN student stu ON cto.student_id_=stu.user_id_
+        LEFT JOIN sys_user su ON cto.student_id_=su.id_
+        WHERE su.del_flag_=0 AND cto.status_ IN (1,2)
+        <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>
 </mapper>

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

@@ -1646,26 +1646,149 @@
 
 	<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>
+
+	<select id="getCloudStudyNewStudentNumData" resultMap="IndexBaseMonthData">
+		SELECT
+			organ_id_,
+			#{dayStr} month_,
+			COUNT( DISTINCT user_id_ ) total_num_,
+			COUNT( DISTINCT user_id_ ) activate_num_,
+			COUNT( DISTINCT user_id_ ) percent_
+		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
+		GROUP BY user_id_
+		HAVING MIN(DATE( smcr.create_time_ ))= #{dayStr}) t
+		GROUP BY t.organ_id_
 	</select>
 </mapper>

+ 17 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1057,6 +1057,23 @@
         GROUP BY su.organ_id_
     </select>
 
+    <select id="getTeacherExperienceMemberStudentNum" resultType="map">
+        SELECT
+        stu.teacher_id_ 'key',
+        COUNT(DISTINCT stu.user_id_) 'value'
+        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="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>
+
     <update id="updateGrade"><![CDATA[
         UPDATE student SET current_grade_num_=current_grade_num_+1
         WHERE current_grade_num_>=1

+ 30 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1394,4 +1394,34 @@
         LEFT JOIN music_group mg ON csts.music_group_id_=mg.id_
         <include refid="queryTeacherMusicIdsCondition"></include>
     </select>
+
+    <sql id="queryMemberStudentDataCondition">
+        <where>
+            su.del_flag_=0
+            <if test="organId!=null and organId!=''">
+                AND tea.organ_id_ = #{organId}
+            </if>
+        </where>
+    </sql>
+
+    <select id="queryMemberStudentData" resultType="com.ym.mec.biz.dal.dto.TeacherStudentDataDto">
+        select tea.id_ teacherId,
+               su.real_name_ teacherName,
+               count(stu.user_id_) totalStudentNum
+        from teacher tea
+        left join student stu on tea.id_ = stu.teacher_id_
+        LEFT JOIN sys_user su ON su.id_=tea.id_
+        <include refid="queryMemberStudentDataCondition"></include>
+        group by tea.id_
+        ORDER BY tea.id_
+        <include refid="global.limit"></include>
+    </select>
+
+    <select id="countMemberStudentData" resultType="int">
+        select count(tea.id_)
+        from teacher tea
+        LEFT JOIN sys_user su ON su.id_=tea.id_
+        <include refid="queryMemberStudentDataCondition"></include>
+        <include refid="global.limit"></include>
+    </select>
 </mapper>

+ 145 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -137,6 +137,8 @@ public class ExportController extends BaseController {
     private IndexErrDataRecordService indexErrDataRecordService;
     @Autowired
     private EmployeeInfoService employeeInfoService;
+    @Autowired
+    private StudentService studentService;
 
     @ApiOperation(value = "21年暑期考级活动统计页面详情导出")
     @PostMapping("export/statisticsDetail")
@@ -3098,4 +3100,147 @@ public class ExportController extends BaseController {
             }
         }
     }
+
+    @ApiOperation(value = "分部下教师关联的会员数据导出")
+    @RequestMapping("export/organTeacherMemberStudentData")
+    @PreAuthorize("@pcs.hasPermissions('export/organTeacherMemberStudentData')")
+    public void exportEmployeeInfo(TeacherServeQueryInfo queryInfo,HttpServletResponse response) throws IOException {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        List<TeacherStudentDataDto> rows = teacherService.queryMemberStudentData(queryInfo).getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = {"老师编号", "老师姓名", "学员总数", "付费学员数量",
+                    "试用会员", "会员占比"};
+            String[] body = {"teacherId", "teacherName", "totalStudentNum", "vipStudentNum", "eVipStudentNum", "vipStudentDuty"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @ApiOperation(value = "分部云教练学员数据预览导出")
+    @RequestMapping("export/organStudentOverView")
+    @PreAuthorize("@pcs.hasPermissions('export/organStudentOverView')")
+    public void organStudentOverView(OrganCloudStudyStudentDataQueryInfo queryInfo,HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+
+        List<Integer> organIds = new ArrayList<>();
+        if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
+            organIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }else if(StringUtils.isNotBlank(employee.getOrganIdList())){
+            organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }
+
+        List<EduOrganStudentDataDto> rows = studentService.queryOrganStudentOverView(organIds, queryInfo).getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = {"分部", "老师姓名", "学员总数", "付费学员数量",
+                    "试用会员", "会员占比"};
+            String[] body = {"teacherId", "teacherName", "totalStudentNum", "vipStudentNum", "eVipStudentNum", "vipStudentDuty"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @ApiOperation(value = "分部云教练学员数据预览导出")
+    @RequestMapping("export/cloudStudyStudentOverView")
+    @PreAuthorize("@pcs.hasPermissions('export/cloudStudyStudentOverView')")
+    public void cloudStudyStudentOverView(OrganCloudStudyStudentDataQueryInfo queryInfo,HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+
+        List<Integer> organIds = new ArrayList<>();
+        if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
+            organIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }else if(StringUtils.isNotBlank(employee.getOrganIdList())){
+            organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }
+
+        List<EduOrganStudentDataDto> rows = indexService.organStudentOverView(organIds, queryInfo).getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = {"分部", "老师姓名", "学员总数", "付费学员数量",
+                    "试用会员", "会员占比"};
+            String[] body = {"teacherId", "teacherName", "totalStudentNum", "vipStudentNum", "eVipStudentNum", "vipStudentDuty"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=employeeInfo-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 16 - 0
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -3,13 +3,16 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.enums.IndexErrorType;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
+import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
 import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.IndexBaseMonthDataService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -23,6 +26,7 @@ import org.springframework.web.bind.annotation.RestController;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Api(tags = "首页")
 @RequestMapping()
@@ -212,4 +216,16 @@ public class IndexController extends BaseController {
 			}
 		return succeed(indexService.getRemindMatterData(organId));
 	}
+
+	@ApiOperation("查询分部云教练学员汇总数据")
+	@GetMapping("/organStudentOverView")
+	public HttpResponseResult<PageInfo<EduOrganStudentDataDto>> organStudentOverView(OrganCloudStudyStudentDataQueryInfo queryInfo){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("用户信息获取失败");
+		}
+		Employee employee = employeeService.get(sysUser.getId());
+		List<Integer> organIds = Arrays.stream(employee.getOrganIdList().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+		return succeed(indexService.organStudentOverView(organIds, queryInfo));
+	}
 }

+ 9 - 5
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
@@ -448,17 +449,20 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "分部云教练学员数据预览")
     @GetMapping("/organStudentOverView")
     @PreAuthorize("@pcs.hasPermissions('studentManage/organStudentOverView')")
-    public HttpResponseResult<List<EduOrganStudentDataDto>> organStudentOverView() throws Exception {
+    public HttpResponseResult<PageInfo<EduOrganStudentDataDto>> organStudentOverView(OrganCloudStudyStudentDataQueryInfo queryInfo) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
         List<Organization> organizations = organizationService.queryEmployeeOrgan(sysUser.getId());
-        if(CollectionUtils.isEmpty(organizations)){
-            return succeed(Collections.emptyList());
+        List<Integer> organIds = new ArrayList<>();
+        if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
+            organIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }else if(!CollectionUtils.isEmpty(organizations)){
+            organIds = organizations.stream().map(Organization::getId).collect(Collectors.toList());
         }
-        List<Integer> organIds = organizations.stream().map(Organization::getId).collect(Collectors.toList());
-        return succeed(studentService.organStudentOverView(organIds));
+        List<Integer> ids = organIds.stream().filter(id -> !OrganizationService.EXCLUDE_ORGAN_IDS.contains(id)).collect(Collectors.toList());
+        return succeed(studentService.queryOrganStudentOverView(ids, queryInfo));
     }
 
     @ApiOperation(value = "云教练学员数据")

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dto.TeacherStudentDataDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.*;
@@ -10,6 +11,7 @@ import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.*;
@@ -234,4 +236,11 @@ public class TeacherController extends BaseController {
     public Object queryStudent(QueryInfo queryInfo){
         return succeed(teacherService.queryStudent(queryInfo));
     }
+
+    @ApiOperation(value = "查询分部下教师关联的会员数据")
+    @GetMapping("/queryMemberStudentData")
+    @PreAuthorize("@pcs.hasPermissions('teacher/queryMemberStudentData')")
+    public HttpResponseResult<PageInfo<TeacherStudentDataDto>> queryMemberStudentData(TeacherServeQueryInfo queryInfo){
+        return succeed(teacherService.queryMemberStudentData(queryInfo));
+    }
 }