Browse Source

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into saas_zouxuan_04_24_course

zouxuan 3 năm trước cách đây
mục cha
commit
2ad09eb5d3

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

@@ -508,5 +508,8 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     Integer countQuitNum(@Param("queryInfo") IndexDataQueryInfo queryInfo);
 
     //乐团统计数据导出
+    Integer countMusicGroupCourseList(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
+
+    //乐团统计数据导出
     List<MusicGroupExportDto> exportMusicGroupCourseList(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
 }

+ 24 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -1,17 +1,24 @@
 package com.ym.mec.biz.dal.dao;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.dto.EduOrganStudentListDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
+import com.ym.mec.biz.dal.dto.Mapper;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.dto.Student4operating;
+import com.ym.mec.biz.dal.dto.StudentServeCourseDto;
+import com.ym.mec.biz.dal.dto.StudentServeDto;
 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;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Student> {
 	
@@ -255,7 +262,9 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * @return com.ym.mec.biz.dal.dto.EduOrganStudentDataDto
      */
     int getOrganStudentNum(@Param("organId") Integer organId);
-    int getOrgansTotalStudentNum(@Param("organIds") List<Integer> organIds);
+    
+    IndexCloudStudyListDto getOrgansCloudTeacherStudent(@Param("organIds") List<Integer> organIds);
+    
     List<Map<Integer, Integer>> getOrgansStudentNum(@Param("organIds") List<Integer> organIds);
 
     List<Map<Integer, Integer>> getOrganTeacherStudentNum(@Param("teacherIds") List<Integer> teacherIds,
@@ -288,8 +297,14 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
 
     int getCloudStudyLivelyStudentNum(@Param("organId") Integer organId);
-    int getOrganTotalCloudStudyLivelyStudentNum(@Param("organIds") List<Integer> organIds);
+    int getOrganTotalCloudStudyLivelyStudentNum(@Param("organIds") List<Integer> organIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
     List<Map<Integer, Integer>> getOrganCloudStudyLivelyStudentNum(@Param("organIds") List<Integer> organIds);
+    
+    List<IndexCloudStudyListDto> getCloudStudyStudentOverViewList(@Param("organIds") List<Integer> organIds);
+    
+    List<Mapper> getOrganActiveCloudStudyStudentNum(@Param("organIds") List<Integer> organIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+    
+    List<Mapper> getOrganCloudTeacherStudentNum(@Param("organIds") List<Integer> organIds);
 
     /**
      * @describe 查询云教练学员列表数据

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudStudyStudentDataDto.java

@@ -18,6 +18,10 @@ public class CloudStudyStudentDataDto {
 
     @ApiModelProperty("付费会员数")
     private int vipStudentNum;
+    
+	private Integer effectiveVipStudentNum;
+	
+	private Integer waitActivateVipStudentNum;
 
     @ApiModelProperty("试用会员数")
     private int eVipStudentNum;
@@ -127,4 +131,20 @@ public class CloudStudyStudentDataDto {
     public void setNewCloudStudyStudentNum(int newCloudStudyStudentNum) {
         this.newCloudStudyStudentNum = newCloudStudyStudentNum;
     }
+
+	public Integer getEffectiveVipStudentNum() {
+		return effectiveVipStudentNum;
+	}
+
+	public void setEffectiveVipStudentNum(Integer effectiveVipStudentNum) {
+		this.effectiveVipStudentNum = effectiveVipStudentNum;
+	}
+
+	public Integer getWaitActivateVipStudentNum() {
+		return waitActivateVipStudentNum;
+	}
+
+	public void setWaitActivateVipStudentNum(Integer waitActivateVipStudentNum) {
+		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
+	}
 }

+ 74 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexCloudStudyListDto.java

@@ -0,0 +1,74 @@
+package com.ym.mec.biz.dal.dto;
+
+public class IndexCloudStudyListDto {
+
+	private Integer organId;
+	
+	private String organName;
+	
+	private Integer totalStudentNum;
+	
+	private Integer vipStudentNum;
+	
+	private Integer effectiveVipStudentNum;
+	
+	private Integer waitActivateVipStudentNum;
+	
+	private Integer activeStudentNum;
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
+	public Integer getTotalStudentNum() {
+		return totalStudentNum;
+	}
+
+	public void setTotalStudentNum(Integer totalStudentNum) {
+		this.totalStudentNum = totalStudentNum;
+	}
+
+	public Integer getVipStudentNum() {
+		return vipStudentNum;
+	}
+
+	public void setVipStudentNum(Integer vipStudentNum) {
+		this.vipStudentNum = vipStudentNum;
+	}
+
+	public Integer getEffectiveVipStudentNum() {
+		return effectiveVipStudentNum;
+	}
+
+	public void setEffectiveVipStudentNum(Integer effectiveVipStudentNum) {
+		this.effectiveVipStudentNum = effectiveVipStudentNum;
+	}
+
+	public Integer getWaitActivateVipStudentNum() {
+		return waitActivateVipStudentNum;
+	}
+
+	public void setWaitActivateVipStudentNum(Integer waitActivateVipStudentNum) {
+		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
+	}
+
+	public Integer getActiveStudentNum() {
+		return activeStudentNum;
+	}
+
+	public void setActiveStudentNum(Integer activeStudentNum) {
+		this.activeStudentNum = activeStudentNum;
+	}
+}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.ManagerDownload;
 import com.ym.mec.biz.dal.enums.ExportEnum;
 import com.ym.mec.biz.dal.enums.ExportTypeEnum;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.ExportUserAccountQueryInfo;
 import com.ym.mec.biz.dal.page.StudentStatisticsQueryInfo;
 import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -295,5 +296,5 @@ public interface ExportService {
 
     void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
 
-    void exportMusicGroupCourseList(ManagerDownload managerDownload, List<MusicGroupExportDto> exportDtoList) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException;
+    void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException;
 }

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -9,8 +9,13 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.CloudStudyStudentDataDto;
 import com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDetailDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
 import com.ym.mec.biz.dal.dto.StatDto;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.BaseStudentDto;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPreRegistration;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
@@ -131,6 +136,8 @@ public interface StudentService extends BaseService<Integer, Student> {
     PageInfo<EduOrganStudentDataDto> queryOrganStudentOverView(List<Integer> organIds, OrganCloudStudyStudentDataQueryInfo queryInfo);
 
     CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds);
+    
+    List<IndexCloudStudyListDto> getCloudStudyStudentOverViewList(List<Integer> organIds);
 
     /**
      * @describe 清理学员云教练连续使用天数

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

@@ -2984,7 +2984,8 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
-    public void exportMusicGroupCourseList(ManagerDownload managerDownload, List<MusicGroupExportDto> rows) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+    public void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+        List<MusicGroupExportDto> rows = musicGroupDao.exportMusicGroupCourseList(queryInfo);
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团编号", "乐团名称", "乐团主管","出勤率", "达标率", "作业提交率", "成团人数", "新增人数",
                         "退团人数", "在读人数","流失率"},
                 new String[]{"organName", "musicGroupId", "musicGroupName",

+ 73 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -6,6 +6,7 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
@@ -20,20 +21,14 @@ import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
 
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.common.entity.ImResult;
-import com.ym.mec.common.entity.ImUserModel;
-import com.ym.mec.im.ImFeignService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.JSONArray;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CloudTeacherDao;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
@@ -56,10 +51,22 @@ import com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentListDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentListExportDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
+import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.dto.StudentClassInfoDto;
 import com.ym.mec.biz.dal.dto.StudentCourseTimesDto;
 import com.ym.mec.biz.dal.dto.StudentTeacherCourseDto;
+import com.ym.mec.biz.dal.entity.BaseStudentDto;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
+import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPreRegistration;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
@@ -75,11 +82,13 @@ import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.SysTenantConfigService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.ImResult;
+import com.ym.mec.common.entity.ImUserModel;
 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.common.tenant.TenantContextHolder;
+import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
@@ -1026,13 +1035,29 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Override
     public CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds) {
         CloudStudyStudentDataDto result = new CloudStudyStudentDataDto();
-//        result.setTotalStudentNum(studentDao.getOrgansTotalStudentNum(organIds));
+        
+        IndexCloudStudyListDto dto = studentDao.getOrgansCloudTeacherStudent(organIds);
+        result.setTotalStudentNum(dto.getTotalStudentNum());
+        result.setEffectiveVipStudentNum(dto.getEffectiveVipStudentNum());
+        result.setWaitActivateVipStudentNum(dto.getWaitActivateVipStudentNum());
         result.setVipStudentNum(cloudTeacherDao.getOrgansTotalVipStudentNum(organIds));
 //        result.seteVipStudentNum(studentDao.getOrgansTotalEVipStudentNum(organIds));
         result.setCloudStudyUseStudentNum(studentDao.getOrgansTotalCloudStudyStudentNum(organIds));
-        result.setCloudStudyTodayUseStudentNum(studentDao.getOrgansTodayTotalCloudStudyStudentNum(organIds));
-        result.setCloudStudyLivelyStudentNum(studentDao.getOrganTotalCloudStudyLivelyStudentNum(organIds));
-        result.setNewCloudStudyStudentNum(sysMusicCompareRecordDao.getOrgansTotalNewCloudStudyNum(organIds));
+        //result.setCloudStudyTodayUseStudentNum(studentDao.getOrgansTodayTotalCloudStudyStudentNum(organIds));
+        
+        Calendar cal = Calendar.getInstance();    
+        cal.setTime(new Date());    
+        //cal.add(Calendar.WEEK_OF_YEAR, -1);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+        Date endTime = cal.getTime();
+        
+        cal.setTime(new Date());    
+        cal.add(Calendar.WEEK_OF_YEAR, -4);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        Date startTime = cal.getTime();
+        
+        result.setCloudStudyLivelyStudentNum(studentDao.getOrganTotalCloudStudyLivelyStudentNum(organIds, startTime, endTime));
+        //result.setNewCloudStudyStudentNum(sysMusicCompareRecordDao.getOrgansTotalNewCloudStudyNum(organIds));
 //        if(result.getVipStudentNum()>0&&result.getTotalStudentNum()>0){
 //            result.setVipStudentDuty(new BigDecimal(result.getVipStudentNum()).divide(new BigDecimal(result.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
 //        }
@@ -1040,6 +1065,43 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     }
 
     @Override
+	public List<IndexCloudStudyListDto> getCloudStudyStudentOverViewList(List<Integer> organIds) {
+    	
+    	List<IndexCloudStudyListDto> list = studentDao.getCloudStudyStudentOverViewList(organIds);
+    	
+    	Calendar cal = Calendar.getInstance();    
+        cal.setTime(new Date());    
+        //cal.add(Calendar.WEEK_OF_YEAR, -1);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+        Date endTime = cal.getTime();
+        
+        cal.setTime(new Date());    
+        cal.add(Calendar.WEEK_OF_YEAR, -4);// 一周    
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        Date startTime = cal.getTime();
+        
+        List<Mapper> mapperList = studentDao.getOrganActiveCloudStudyStudentNum(organIds, startTime, endTime);
+        
+        Map<Integer, Integer> organActiveNum = new HashMap<Integer, Integer>();
+        for(Mapper mapper : mapperList){
+        	organActiveNum.put(Integer.parseInt(mapper.getKey().toString()), Integer.parseInt(mapper.getValue().toString()));
+        }
+        
+        List<Mapper> organCloudTeacherStudentNum = studentDao.getOrganCloudTeacherStudentNum(organIds);
+        Map<Integer, Integer> organCloudTeacherStudentNumMap = new HashMap<Integer, Integer>();
+        for(Mapper mapper : organCloudTeacherStudentNum){
+        	organCloudTeacherStudentNumMap.put(Integer.parseInt(mapper.getKey().toString()), Integer.parseInt(mapper.getValue().toString()));
+        }
+        
+        for(IndexCloudStudyListDto ics : list){
+        	ics.setActiveStudentNum(organActiveNum.get(ics.getOrganId()));
+        	ics.setVipStudentNum(organCloudTeacherStudentNumMap.get(ics.getOrganId()));
+        }
+        
+		return list;
+	}
+
+	@Override
     public void cleanStudentCloudStudySequenceDays() {
         studentDao.cleanStudentCloudStudySequenceDays();
     }

+ 7 - 4
mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml

@@ -89,10 +89,13 @@
     </select>
 
     <select id="getOrgansTotalVipStudentNum" resultType="int">
-        SELECT COUNT(DISTINCT cto.student_id_)
-        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)
+        SELECT count(distinct a.user_id_) FROM 
+		(
+		SELECT s.`user_id_`  FROM `student` s WHERE s.`membership_end_time_` &gt; now()
+		union
+		SELECT cto.`student_id_`  FROM `cloud_teacher_order` cto WHERE cto.`status_` = 1
+		) a LEFT JOIN sys_user su ON a.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=",">

+ 39 - 17
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -1096,32 +1096,44 @@
     </resultMap>
     <select id="exportMusicGroupCourseList" resultMap="MusicGroupExportDto">
         SELECT o.name_ organ_name_,mg.id_ music_group_id_,mg.name_ music_group_name_,su.real_name_ educational_teacher_name_,
-        CONCAT(TRUNCATE((SUM(css.attendance_num_) + SUM(css.late_num_)) / SUM(css.course_student_total_num_) * 100,2),'%') attendance_rate_,
-        CONCAT(TRUNCATE(SUM(css.standard_num_) / SUM(css.course_student_total_num_) * 100,2),'%') standard_rate_,
-        CONCAT(TRUNCATE(SUM(css.homework_commit_num_) / SUM(CASE WHEN css.homework_flag_ = 1 THEN css.course_student_total_num_ ELSE 0 END) * 100,2),'%') homework_commit_rate_,
-        mg.group_member_num_,
-        COUNT(DISTINCT CASE WHEN sr.original_flag_ = 0 AND sr.music_group_status_ = 'NORMAL' THEN sr.id_ ELSE NULL END) add_stu_num_,
-        COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' AND sr1.music_group_status_ = 'QUIT' THEN mgq.apply_user_id_ ELSE NULL END) quit_stu_num_,
-        COUNT(DISTINCT CASE WHEN sr1.music_group_status_ = 'NORMAL' THEN sr1.id_ ELSE NULL END) normal_num_,
-        COUNT(DISTINCT CASE WHEN sr1.music_group_status_ != 'APPLY' THEN sr1.id_ ELSE NULL END) total_num_,
-        CONCAT(TRUNCATE(COUNT(DISTINCT CASE WHEN mgq.status_ = 'APPROVED' AND sr1.music_group_status_ = 'QUIT' THEN mgq.apply_user_id_ ELSE NULL END) /
-        COUNT(DISTINCT CASE WHEN sr1.music_group_status_ != 'APPLY' THEN sr1.id_ ELSE NULL END) * 100,2),'%') lost_rate_
+        CONCAT(TRUNCATE((css.attendance_num_ + css.late_num_) / css.course_student_total_num_ * 100,2),'%') attendance_rate_,
+        CONCAT(TRUNCATE(css.standard_num_ / css.course_student_total_num_ * 100,2),'%') standard_rate_,
+        CONCAT(TRUNCATE(css.homework_commit_num_ / css.homework_num_ * 100,2),'%') homework_commit_rate_,
+        mg.group_member_num_,sr3.add_stu_num_,sr1.quit_stu_num_,sr2.normal_num_,sr2.total_num_,
+        CONCAT(TRUNCATE(sr1.quit_stu_num_ /sr2.total_num_ * 100,2),'%') lost_rate_
         FROM music_group mg
-        LEFT JOIN course_schedule_statistics css ON mg.id_ = css.music_group_id_ AND css.course_status_ = 'OVER'
+        LEFT JOIN (SELECT music_group_id_,SUM(attendance_num_) attendance_num_,SUM(late_num_) late_num_,
+        SUM(course_student_total_num_) course_student_total_num_,SUM(standard_num_) standard_num_,SUM(homework_commit_num_) homework_commit_num_,
+        SUM(CASE WHEN homework_flag_ = 1 THEN course_student_total_num_ ELSE 0 END) homework_num_
+        FROM course_schedule_statistics
+        WHERE course_status_ = 'OVER'
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND css.class_date_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND class_date_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
+        GROUP BY music_group_id_) css ON css.music_group_id_ = mg.id_
         LEFT JOIN organization o ON o.id_ = mg.organ_id_
         LEFT JOIN sys_user su ON su.id_ = mg.educational_teacher_id_
-        LEFT JOIN student_registration sr1 ON sr1.music_group_id_ = mg.id_
-        LEFT JOIN student_registration sr ON sr.music_group_id_ = mg.id_
+        LEFT JOIN (SELECT sr.music_group_id_,COUNT(DISTINCT mgq.apply_user_id_) quit_stu_num_
+        FROM student_registration sr
+        LEFT JOIN music_group_quit mgq ON mgq.music_group_id_ = sr.music_group_id_
+        WHERE sr.music_group_status_ = 'QUIT' AND mgq.status_ = 'APPROVED'
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND DATE_FORMAT(sr.create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND DATE_FORMAT(mgq.create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
-        LEFT JOIN music_group_quit mgq ON mgq.music_group_id_ = mg.id_
+        GROUP BY sr.music_group_id_) sr1 ON sr1.music_group_id_ = mg.id_
+        LEFT JOIN (SELECT sr.music_group_id_,
+        COUNT(DISTINCT CASE WHEN sr.music_group_status_ = 'NORMAL' THEN sr.id_ ELSE NULL END) normal_num_,
+        COUNT(DISTINCT sr.id_) total_num_
+        FROM student_registration sr
+        WHERE sr.music_group_status_ != 'APPLY'
+        GROUP BY sr.music_group_id_)sr2 ON sr2.music_group_id_ = mg.id_
+        LEFT JOIN (SELECT music_group_id_,COUNT(DISTINCT CASE WHEN original_flag_ = 0 THEN id_ ELSE NULL END) add_stu_num_
+        FROM student_registration
+        WHERE music_group_status_ = 'NORMAL'
         <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
-            AND DATE_FORMAT(mgq.create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
+            AND DATE_FORMAT(create_time_,"%Y-%m-%d") BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
         </if>
+        GROUP BY music_group_id_) sr3 ON sr3.music_group_id_ = mg.id_
         <where>
             mg.status_ = 'PROGRESS'
             <if test="queryInfo.organId != null and queryInfo.organId != ''">
@@ -1131,4 +1143,14 @@
         GROUP BY mg.id_
         ORDER BY o.id_
     </select>
+    <select id="countMusicGroupCourseList" resultType="Integer">
+        SELECT COUNT(DISTINCT mg.id_)
+        FROM music_group mg
+        <where>
+            mg.status_ = 'PROGRESS'
+            <if test="queryInfo.organId != null and queryInfo.organId != ''">
+                AND FIND_IN_SET(mg.organ_id_,#{queryInfo.organId})
+            </if>
+        </where>
+    </select>
 </mapper>

+ 70 - 34
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -812,29 +812,36 @@
         WHERE t.user_id_ NOT IN (SELECT user_id_ FROM student WHERE subject_id_list_ REGEXP '21|25|26|27|28|29')
     </select>
 
-    <select id="getOrgansTotalStudentNum" resultType="int">
-        SELECT COUNT(DISTINCT user_id_)
-        FROM ((SELECT sr.user_id_
-               FROM student_registration sr
-                    LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
-               WHERE mg.status_='PROGRESS'
-                AND sr.music_group_status_='NORMAL')
-              UNION ALL
-              (SELECT
-                   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')) t
-        LEFT JOIN sys_user su ON t.user_id_=su.id_
-        WHERE su.del_flag_=0
-            AND su.organ_id_ IN
+    <select id="getOrgansCloudTeacherStudent" resultType="com.ym.mec.biz.dal.dto.IndexCloudStudyListDto">
+        SELECT count(s.`user_id_`) totalStudentNum,
+        sum(case when cto.student_id_ IS NULL then 0 else 1 end) waitActivateVipStudentNum,
+        sum(case when s.`membership_end_time_` > now() then 1 else 0 end) effectiveVipStudentNum 
+        FROM student s LEFT JOIN (
+		SELECT distinct cto.`student_id_`  FROM `cloud_teacher_order` cto WHERE cto.`status_` = 1
+		) cto on s.user_id_ = cto.student_id_
+		LEFT JOIN `sys_user` u on s.`user_id_` = u.`id_`
+		WHERE u.`del_flag_` = 0 
+        <if test="organIds!=null and organIds.size()>0">
+            AND u.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
                 #{organId}
             </foreach>
+        </if>
+    </select>
+    
+    <select id="getOrganCloudTeacherStudentNum" resultType="com.ym.mec.biz.dal.dto.Mapper">
+        SELECT u.organ_id_ `key`,sum(case when a.user_id_ IS NULL then 0 else 1 end) `value`  FROM student s 
+		LEFT JOIN (
+		SELECT s.`user_id_`  FROM `student` s WHERE s.`membership_end_time_` > now()
+		union
+		SELECT cto.`student_id_`  FROM `cloud_teacher_order` cto WHERE cto.`status_` = 1
+		) a on a.user_id_ = s.`user_id_` 
+		LEFT JOIN `sys_user` u on s.`user_id_` = u.`id_`
+		WHERE u.`del_flag_` = 0 AND u.`organ_id_` IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+		GROUP BY u.`organ_id_` 
     </select>
 
     <select id="getOrgansStudentNum" resultType="map">
@@ -928,7 +935,7 @@
         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
-        AND DATE(smcr.create_time_) = CURDATE()
+        AND smcr.create_time_ > date_sub(curdate(),INTERVAL 0 day)
             AND su.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
                 #{organId}
@@ -982,19 +989,48 @@
     </select>
 
     <select id="getOrganTotalCloudStudyLivelyStudentNum" resultType="int">
-        SELECT COUNT(user_id_)
-        FROM (SELECT
-                  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
-                    AND su.organ_id_ IN
-                    <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-                        #{organId}
-                    </foreach>
-              GROUP BY smcr.user_id_) t WHERE t.days>=5
+        SELECT count(a.user_id_) FROM 
+		(
+		SELECT wd.`user_id_` FROM `sys_music_compare_week_data` wd  
+		WHERE wd.`train_time_` >= 3600 AND wd.`monday_` BETWEEN date(#{startTime}) and date(#{endTime})  GROUP BY `user_id_` HAVING count(*) >= 3
+		    ) a 
+		LEFT JOIN `student` s on a.`user_id_` = s.`user_id_`
+		LEFT JOIN `sys_user` u on u.`id_` = s.`user_id_` 
+		WHERE u.`del_flag_` = 0 AND u.`organ_id_` IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+    </select>
+
+    <select id="getOrganActiveCloudStudyStudentNum" resultType="com.ym.mec.biz.dal.dto.Mapper">
+        SELECT u.`organ_id_` `key`,count(a.user_id_) `value` FROM 
+		(
+		SELECT wd.`user_id_` FROM `sys_music_compare_week_data` wd  
+		WHERE wd.`train_time_` >= 3600 AND wd.`monday_` BETWEEN date(#{startTime}) and date(#{endTime})  GROUP BY `user_id_` HAVING count(*) >= 3
+		    ) a 
+		LEFT JOIN `student` s on a.`user_id_` = s.`user_id_`
+		LEFT JOIN `sys_user` u on u.`id_` = s.`user_id_` 
+		WHERE u.`del_flag_` = 0 AND u.`organ_id_` IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+		GROUP BY u.`organ_id_` 
+    </select>
+
+    <select id="getCloudStudyStudentOverViewList" resultType="com.ym.mec.biz.dal.dto.IndexCloudStudyListDto">
+        SELECT o.`name_` organName,o.`id_` organId,count(s.`user_id_`) totalStudentNum,
+        sum(case when cto.student_id_ IS NULL then 0 else 1 end) waitActivateVipStudentNum,
+        sum(case when s.`membership_end_time_` > now() then 1 else 0 end) effectiveVipStudentNum 
+        FROM student s LEFT JOIN (
+		SELECT distinct cto.`student_id_`  FROM `cloud_teacher_order` cto WHERE cto.`status_` = 1
+		) cto on s.user_id_ = cto.student_id_
+		LEFT JOIN `sys_user` u on s.`user_id_` = u.`id_`
+		LEFT JOIN `organization` o on o.`id_` = u.`organ_id_` 
+		WHERE u.`del_flag_` = 0 AND u.`organ_id_` IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+		GROUP BY u.`organ_id_` 
     </select>
 
     <select id="getOrganCloudStudyLivelyStudentNum" resultType="map">

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

@@ -189,15 +189,15 @@ public class ExportController extends BaseController {
     public HttpResponseResult exportMusicGroupCourseList(ExportUserAccountQueryInfo queryInfo) throws IOException {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
-        List<MusicGroupExportDto> exportDtoList = musicGroupDao.exportMusicGroupCourseList(queryInfo);
-        if (CollectionUtils.isEmpty(exportDtoList)) {
+        Integer i = musicGroupDao.countMusicGroupCourseList(queryInfo);
+        if (Objects.isNull(i) || i <= 0) {
             throw new BizException("没有可导出的记录");
         }
         ManagerDownload managerDownload = exportService.saveManagerDownload(ExportTypeEnum.MUSIC_GROUP_DATA_EXPORT,sysUser.getId());
         ExecutorService executor = Executors.newCachedThreadPool();
         CompletableFuture.runAsync(()->{
             try {
-                exportService.exportMusicGroupCourseList(managerDownload,exportDtoList);
+                exportService.exportMusicGroupCourseList(managerDownload,queryInfo);
             } catch (Exception e) {
                 e.printStackTrace();
             }

+ 64 - 15
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -1,18 +1,18 @@
 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.dto.*;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.page.*;
-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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -24,8 +24,40 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.*;
-import java.util.stream.Collectors;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ActivityCourseDetailDto;
+import com.ym.mec.biz.dal.dto.CloudStudyStudentDataDto;
+import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
+import com.ym.mec.biz.dal.dto.IndexCloudStudyListDto;
+import com.ym.mec.biz.dal.dto.StatDto;
+import com.ym.mec.biz.dal.dto.UpdateStudentFeeDto;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
+import com.ym.mec.biz.dal.page.MusicGroupStudentQueryInfo;
+import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
+import com.ym.mec.biz.dal.page.StudentActivityQueryInfo;
+import com.ym.mec.biz.dal.page.StudentErrorLeaveQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageAttendanceQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageCourseQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
+import com.ym.mec.biz.dal.page.StudentManageVipClassQueryInfo;
+import com.ym.mec.biz.dal.page.StudentOperatingQueryInfo;
+import com.ym.mec.biz.dal.page.StudentQueryInfo;
+import com.ym.mec.biz.dal.page.StudentSignQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherPaymentRecordInfo;
+import com.ym.mec.biz.service.MusicGroupStudentFeeService;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.StudentCourseHomeworkService;
+import com.ym.mec.biz.service.StudentManageService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.StudentService;
+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;
 
 @Api(tags = "学生管理")
 @RestController
@@ -386,6 +418,23 @@ public class StudentManageController extends BaseController {
         return succeed(studentService.getCloudStudyStudentOverView(organIdsList));
     }
 
+    @ApiOperation(value = "云教练学员数据预览列表")
+    @GetMapping("/getCloudStudyStudentOverViewList")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/getCloudStudyStudentOverViewList')")
+    public HttpResponseResult<List<IndexCloudStudyListDto>> getCloudStudyStudentOverViewList(String organIds) throws Exception {
+        List<Integer> organIdsList;
+        if(StringUtils.isNotBlank(organIds)){
+            organIdsList = Arrays.stream(organIds.split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }else{
+            List<Organization> organizations = organizationService.queryEmployeeOrgan();
+            if(CollectionUtils.isEmpty(organizations)){
+                return succeed();
+            }
+            organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
+        }
+        return succeed(studentService.getCloudStudyStudentOverViewList(organIdsList));
+    }
+
     @ApiOperation(value = "分部云教练学员数据预览")
     @GetMapping("/organStudentOverView")
     @PreAuthorize("@pcs.hasPermissions('studentManage/organStudentOverView')")