소스 검색

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

zouxuan 3 년 전
부모
커밋
0e7aee89f3
17개의 변경된 파일284개의 추가작업 그리고 341개의 파일을 삭제
  1. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  2. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  3. 13 13
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java
  4. 18 7
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudStudyStudentDataDto.java
  5. 36 15
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexCloudStudyListDto.java
  6. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentOrganDto.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  8. 10 10
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  9. 12 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  10. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  11. 45 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  12. 9 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java
  13. 11 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  14. 3 13
      mec-biz/src/main/resources/config/mybatis/StudentBasicInfoMapper.xml
  15. 11 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  16. 32 237
      mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml
  17. 42 2
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

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

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
 import com.ym.mec.biz.dal.entity.CourseScheduleStudentPaymentDto;
 import com.ym.mec.biz.dal.entity.CourseScheduleStudentPaymentDto;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
+
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -599,4 +600,11 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<BaseNameDto> queryFirstNotStartTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
     List<BaseNameDto> queryFirstNotStartTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
 
 
     List<ExportVipStudentCourseManageDto> queryVipStudentCourseManage(@Param("organId") String organId, @Param("tenantId") Integer tenantId);
     List<ExportVipStudentCourseManageDto> queryVipStudentCourseManage(@Param("organId") String organId, @Param("tenantId") Integer tenantId);
+    
+    /**
+     * 查询有剩余课程学生列表
+     * @param organIds
+     * @return
+     */
+    List<StudentOrganDto> queryRemainCourseStudent(@Param("organIds") List<Integer> organIds);
 }
 }

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

@@ -21,6 +21,7 @@ import com.ym.mec.biz.dal.dto.StudentFeeDetailDto;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.dto.StudentMusicDetailDto;
 import com.ym.mec.biz.dal.dto.StudentMusicDetailDto;
 import com.ym.mec.biz.dal.dto.StudentMusicGroupDto;
 import com.ym.mec.biz.dal.dto.StudentMusicGroupDto;
+import com.ym.mec.biz.dal.dto.StudentOrganDto;
 import com.ym.mec.biz.dal.dto.StudentRegisterInstrumentsDetailDto;
 import com.ym.mec.biz.dal.dto.StudentRegisterInstrumentsDetailDto;
 import com.ym.mec.biz.dal.dto.StudentRegisterPerDto;
 import com.ym.mec.biz.dal.dto.StudentRegisterPerDto;
 import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
 import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
@@ -769,4 +770,6 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<Map<Integer,String>> getLastMusicGroupName(@Param("userIds") List<Integer> userIds);
     List<Map<Integer,String>> getLastMusicGroupName(@Param("userIds") List<Integer> userIds);
     
     
     List<StudentRegistration> queryServiceStudentByMusicGroupStatus(@Param("nextMonday") String nextMonday,@Param("tenantId") Integer tenantId);
     List<StudentRegistration> queryServiceStudentByMusicGroupStatus(@Param("nextMonday") String nextMonday,@Param("tenantId") Integer tenantId);
+    
+    List<StudentOrganDto> queryEffectiveStudent(@Param("organIds") List<Integer> organIds);
 }
 }

+ 13 - 13
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java

@@ -1,9 +1,10 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
+import com.ym.mec.biz.dal.dto.StudentOrganDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsSumDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsSumDto;
-import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.StudentStatistics;
 import com.ym.mec.biz.dal.entity.StudentStatistics;
+import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
@@ -12,33 +13,30 @@ import java.util.Map;
 public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {
 public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {
 
 
     //更新乐团主管、指导老师
     //更新乐团主管、指导老师
-    List<StudentStatistics> queryStatisticsTeacherAndEdu();
-
-    //更新乐团主管、指导老师
-    List<StudentStatistics> queryStatisticsTeacherAndEdu2();
+    void updateTeacherAndEdu();
 
 
     //更新总课时数、已完成、剩余课时数、最近30天课耗
     //更新总课时数、已完成、剩余课时数、最近30天课耗
-    List<StudentStatistics> queryStatisticsCourseNum();
+    void updateCourseNum();
 
 
     //更新未排课总数
     //更新未排课总数
-    List<StudentStatistics> queryStatisticsNoCourseNum();
+    void updateNoCourseNum();
 
 
     //更新未开始价值
     //更新未开始价值
-    List<StudentStatistics> queryStatisticsNotStartCourseFee();
+    void updateNotStartCourseFee();
 
 
     //更新未排课课程价值
     //更新未排课课程价值
-    List<StudentStatistics> queryStatisticsNoCourseFee();
+    void updateNoCourseFee();
 
 
     //更新第一次课的时间\最近一次课时间
     //更新第一次课的时间\最近一次课时间
-    List<StudentStatistics> queryStatisticsFirstAndLastCourseTime();
+    void updateFirstAndLastCourseTime();
+
+    //更新进行中课程组数量
+    void updateNormalGroupNum();
 
 
     int countStatistics(Map<String, Object> params);
     int countStatistics(Map<String, Object> params);
 
 
     List<StudentStatisticsDto> queryStatistics(Map<String, Object> params);
     List<StudentStatisticsDto> queryStatistics(Map<String, Object> params);
 
 
-    //更新进行中课程组数量
-    List<StudentStatistics> queryStatisticsNormalGroupNum();
-
     //汇总小课数据
     //汇总小课数据
     StudentStatisticsSumDto studentSmallClassStatisticsSum(@Param("groupType") String groupType, @Param("organIdList") List<Integer> organIdList);
     StudentStatisticsSumDto studentSmallClassStatisticsSum(@Param("groupType") String groupType, @Param("organIdList") List<Integer> organIdList);
 
 
@@ -63,4 +61,6 @@ public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics
     void clean();
     void clean();
 
 
     void batchUpdate(@Param("statisticsList") List<StudentStatistics> statisticsList);
     void batchUpdate(@Param("statisticsList") List<StudentStatistics> statisticsList);
+
+    List<StudentOrganDto> queryNoScheduleNumStudent(@Param("organIds") List<Integer> organIds);
 }
 }

+ 18 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudStudyStudentDataDto.java

@@ -13,15 +13,18 @@ public class CloudStudyStudentDataDto {
     @ApiModelProperty("分部名称")
     @ApiModelProperty("分部名称")
     private String organName;
     private String organName;
 
 
-    @ApiModelProperty("学员总数")
+    @ApiModelProperty("注册学员总数")
     private int totalStudentNum;
     private int totalStudentNum;
+    
+    @ApiModelProperty("有效学员总数")
+    private int effectiveStudentNum; 
 
 
     @ApiModelProperty("付费会员数")
     @ApiModelProperty("付费会员数")
     private int vipStudentNum;
     private int vipStudentNum;
     
     
-	private Integer effectiveVipStudentNum;
+	private int effectiveVipStudentNum;
 	
 	
-	private Integer waitActivateVipStudentNum;
+	private int waitActivateVipStudentNum;
 
 
     @ApiModelProperty("试用会员数")
     @ApiModelProperty("试用会员数")
     private int eVipStudentNum;
     private int eVipStudentNum;
@@ -132,19 +135,27 @@ public class CloudStudyStudentDataDto {
         this.newCloudStudyStudentNum = newCloudStudyStudentNum;
         this.newCloudStudyStudentNum = newCloudStudyStudentNum;
     }
     }
 
 
-	public Integer getEffectiveVipStudentNum() {
+	public int getEffectiveVipStudentNum() {
 		return effectiveVipStudentNum;
 		return effectiveVipStudentNum;
 	}
 	}
 
 
-	public void setEffectiveVipStudentNum(Integer effectiveVipStudentNum) {
+	public void setEffectiveVipStudentNum(int effectiveVipStudentNum) {
 		this.effectiveVipStudentNum = effectiveVipStudentNum;
 		this.effectiveVipStudentNum = effectiveVipStudentNum;
 	}
 	}
 
 
-	public Integer getWaitActivateVipStudentNum() {
+	public int getWaitActivateVipStudentNum() {
 		return waitActivateVipStudentNum;
 		return waitActivateVipStudentNum;
 	}
 	}
 
 
-	public void setWaitActivateVipStudentNum(Integer waitActivateVipStudentNum) {
+	public void setWaitActivateVipStudentNum(int waitActivateVipStudentNum) {
 		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
 		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
 	}
 	}
+
+	public int getEffectiveStudentNum() {
+		return effectiveStudentNum;
+	}
+
+	public void setEffectiveStudentNum(int effectiveStudentNum) {
+		this.effectiveStudentNum = effectiveStudentNum;
+	}
 }
 }

+ 36 - 15
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexCloudStudyListDto.java

@@ -6,15 +6,19 @@ public class IndexCloudStudyListDto {
 	
 	
 	private String organName;
 	private String organName;
 	
 	
-	private Integer totalStudentNum;
+	private int totalStudentNum;
 	
 	
-	private Integer vipStudentNum;
+	private int effectiveStudentNum;
 	
 	
-	private Integer effectiveVipStudentNum;
+	private int vipStudentNum;
 	
 	
-	private Integer waitActivateVipStudentNum;
+	private double vipStudentRate;
 	
 	
-	private Integer activeStudentNum;
+	private int effectiveVipStudentNum;
+	
+	private int waitActivateVipStudentNum;
+	
+	private int activeStudentNum;
 
 
 	public Integer getOrganId() {
 	public Integer getOrganId() {
 		return organId;
 		return organId;
@@ -32,43 +36,60 @@ public class IndexCloudStudyListDto {
 		this.organName = organName;
 		this.organName = organName;
 	}
 	}
 
 
-	public Integer getTotalStudentNum() {
+	public int getTotalStudentNum() {
 		return totalStudentNum;
 		return totalStudentNum;
 	}
 	}
 
 
-	public void setTotalStudentNum(Integer totalStudentNum) {
+	public void setTotalStudentNum(int totalStudentNum) {
 		this.totalStudentNum = totalStudentNum;
 		this.totalStudentNum = totalStudentNum;
 	}
 	}
 
 
-	public Integer getVipStudentNum() {
+	public int getEffectiveStudentNum() {
+		return effectiveStudentNum;
+	}
+
+	public void setEffectiveStudentNum(int effectiveStudentNum) {
+		this.effectiveStudentNum = effectiveStudentNum;
+	}
+
+	public int getVipStudentNum() {
 		return vipStudentNum;
 		return vipStudentNum;
 	}
 	}
 
 
-	public void setVipStudentNum(Integer vipStudentNum) {
+	public void setVipStudentNum(int vipStudentNum) {
 		this.vipStudentNum = vipStudentNum;
 		this.vipStudentNum = vipStudentNum;
 	}
 	}
 
 
-	public Integer getEffectiveVipStudentNum() {
+	public double getVipStudentRate() {
+		return vipStudentRate;
+	}
+
+	public void setVipStudentRate(double vipStudentRate) {
+		this.vipStudentRate = vipStudentRate;
+	}
+
+	public int getEffectiveVipStudentNum() {
 		return effectiveVipStudentNum;
 		return effectiveVipStudentNum;
 	}
 	}
 
 
-	public void setEffectiveVipStudentNum(Integer effectiveVipStudentNum) {
+	public void setEffectiveVipStudentNum(int effectiveVipStudentNum) {
 		this.effectiveVipStudentNum = effectiveVipStudentNum;
 		this.effectiveVipStudentNum = effectiveVipStudentNum;
 	}
 	}
 
 
-	public Integer getWaitActivateVipStudentNum() {
+	public int getWaitActivateVipStudentNum() {
 		return waitActivateVipStudentNum;
 		return waitActivateVipStudentNum;
 	}
 	}
 
 
-	public void setWaitActivateVipStudentNum(Integer waitActivateVipStudentNum) {
+	public void setWaitActivateVipStudentNum(int waitActivateVipStudentNum) {
 		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
 		this.waitActivateVipStudentNum = waitActivateVipStudentNum;
 	}
 	}
 
 
-	public Integer getActiveStudentNum() {
+	public int getActiveStudentNum() {
 		return activeStudentNum;
 		return activeStudentNum;
 	}
 	}
 
 
-	public void setActiveStudentNum(Integer activeStudentNum) {
+	public void setActiveStudentNum(int activeStudentNum) {
 		this.activeStudentNum = activeStudentNum;
 		this.activeStudentNum = activeStudentNum;
 	}
 	}
+
 }
 }

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentOrganDto.java

@@ -0,0 +1,24 @@
+package com.ym.mec.biz.dal.dto;
+
+public class StudentOrganDto {
+
+	private Integer userId;
+	
+	private Integer organId;
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+}

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

@@ -10,7 +10,7 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     ADD_STUDENT("ADD_STUDENT", "乐团报名"),
     ADD_STUDENT("ADD_STUDENT", "乐团报名"),
     RENEW("RENEW", "乐团续费"),
     RENEW("RENEW", "乐团续费"),
     SPORADIC("SPORADIC", "缴费"),
     SPORADIC("SPORADIC", "缴费"),
-    OTHER("OTHER", "其他"),
+    OTHER("OTHER", "其他订单"),
     SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "VIP课报名"),
     SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "VIP课报名"),
     PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY", "网管课报名"),
     PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY", "网管课报名"),
     PRACTICE_GROUP_RENEW("PRACTICE_GROUP_RENEW", "网管课续费"),
     PRACTICE_GROUP_RENEW("PRACTICE_GROUP_RENEW", "网管课续费"),

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

@@ -278,23 +278,23 @@ public interface ExportService {
     //保存下载记录
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
 
 
-    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
 
 
-    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
 
 
-    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception;
 
 
-    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
 
 
-    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+    void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws Exception;
 
 
-    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws Exception;
 
 
-    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException;
+    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws Exception;
 
 
-    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
 
 
-    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException;
+    void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception;
 
 
-    void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException;
+    void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo) throws Exception;
 }
 }

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

@@ -1601,7 +1601,7 @@ public class ExportServiceImpl implements ExportService {
 
 
 
 
     @Override
     @Override
-    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         long i = 1;
         long i = 1;
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
@@ -1933,7 +1933,7 @@ public class ExportServiceImpl implements ExportService {
                                 subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
                                 subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
                                 subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
                                 subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
                                 subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
                                 subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
-                    } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                    } else if (row.getGroupType().equals(OrderTypeEnum.REPAIR)) {
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                     }else if (row.getGroupType() == GroupType.OUTORDER) {
                     }else if (row.getGroupType() == GroupType.OUTORDER) {
                         //销售收入
                         //销售收入
@@ -2028,7 +2028,7 @@ public class ExportServiceImpl implements ExportService {
     }
     }
 
 
     @Override
     @Override
-    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception{
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         //获取机构费率
         //获取机构费率
         Integer tenantId = (Integer) params.get("tenantId");
         Integer tenantId = (Integer) params.get("tenantId");
@@ -2211,7 +2211,7 @@ public class ExportServiceImpl implements ExportService {
                                 subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
                                 subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
                                 subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
                                 subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
                                 subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
                                 subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
-                    } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                    } else if (row.getGroupType().equals(OrderTypeEnum.REPAIR)) {
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                         row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                     }else if (row.getGroupType() == GroupType.OUTORDER) {
                     }else if (row.getGroupType() == GroupType.OUTORDER) {
                         //销售收入
                         //销售收入
@@ -2291,7 +2291,7 @@ public class ExportServiceImpl implements ExportService {
     }
     }
 
 
     @Override
     @Override
-    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws Exception {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
 
 
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
         Map<Integer, String> cooperationOrganMap = new HashMap<>();
@@ -2817,7 +2817,7 @@ public class ExportServiceImpl implements ExportService {
     }
     }
 
 
     @Override
     @Override
-    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
         List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
         List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
         for (CourseScheduleEndDto row : rows) {
         for (CourseScheduleEndDto row : rows) {
             row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
             row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
@@ -2831,7 +2831,7 @@ public class ExportServiceImpl implements ExportService {
     }
     }
 
 
     @Override
     @Override
-    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+    public void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws Exception{
         List<StudentVipPracticeExportDto> studentVipPracticeExportDtos = courseScheduleStudentPaymentDao.exportStudentVipPractice(organId, tenantId);
         List<StudentVipPracticeExportDto> studentVipPracticeExportDtos = courseScheduleStudentPaymentDao.exportStudentVipPractice(organId, tenantId);
         if(studentVipPracticeExportDtos != null && studentVipPracticeExportDtos.size() > 0){
         if(studentVipPracticeExportDtos != null && studentVipPracticeExportDtos.size() > 0){
             List<Integer> studentIds = studentVipPracticeExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
             List<Integer> studentIds = studentVipPracticeExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
@@ -2903,21 +2903,21 @@ public class ExportServiceImpl implements ExportService {
     }
     }
 
 
     @Override
     @Override
-    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws Exception {
         List<ExportStudentCourseInfoDto> rows = courseScheduleStudentPaymentDao.queryStudentCourseInfo(organId,tenantId,groupType);
         List<ExportStudentCourseInfoDto> rows = courseScheduleStudentPaymentDao.queryStudentCourseInfo(organId,tenantId,groupType);
         HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
         HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
         exportManagerDownload(workbook,managerDownload);
         exportManagerDownload(workbook,managerDownload);
     }
     }
 
 
     @Override
     @Override
-    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
+    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws Exception{
         List<ExportVipStudentCourseManageDto> rows = courseScheduleStudentPaymentDao.queryVipStudentCourseManage(organId,tenantId);
         List<ExportVipStudentCourseManageDto> rows = courseScheduleStudentPaymentDao.queryVipStudentCourseManage(organId,tenantId);
         HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
         HSSFWorkbook workbook = getHSSFWorkbook(rows,headColumns,exportEnum);
         exportManagerDownload(workbook,managerDownload);
         exportManagerDownload(workbook,managerDownload);
     }
     }
 
 
     @Override
     @Override
-    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
         List<StudentStatisticsDto> rows = studentStatisticsService.queryStatisticsPage(queryInfo).getRows();
         List<StudentStatisticsDto> rows = studentStatisticsService.queryStatisticsPage(queryInfo).getRows();
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生姓名", "学员编号","联系电话", "声部", "学校", "年级", "学员状态", "未排课时", "总课时", "已完成课时",
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生姓名", "学员编号","联系电话", "声部", "学校", "年级", "学员状态", "未排课时", "总课时", "已完成课时",
                         "剩余课时","预收金额","第一次课时间","最近上课时间","指导老师编号","指导老师","乐团主管编号","乐团主管","声部课老师编号","声部课老师","近30天课耗","回访次数",
                         "剩余课时","预收金额","第一次课时间","最近上课时间","指导老师编号","指导老师","乐团主管编号","乐团主管","声部课老师编号","声部课老师","近30天课耗","回访次数",
@@ -2934,7 +2934,7 @@ public class ExportServiceImpl implements ExportService {
     }
     }
 
 
     @Override
     @Override
-    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws IOException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+    public void exportMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) throws Exception{
         List<MusicGroupCourseScheduleDto> rows = classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo).getRows();
         List<MusicGroupCourseScheduleDto> rows = classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo).getRows();
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课程编号", "课程开始时间", "课程结束时间", "课程名称","课程类型", "课程状态", "老师签到", "老师签退", "指导老师",
         HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课程编号", "课程开始时间", "课程结束时间", "课程名称","课程类型", "课程状态", "老师签到", "老师签退", "指导老师",
                         "出勤率", "达标率", "是否服务", "是否布置课后作业", "作业提交率", "结算状态", "是否点名", "备注"},
                         "出勤率", "达标率", "是否服务", "是否布置课后作业", "作业提交率", "结算状态", "是否点名", "备注"},
@@ -2947,7 +2947,7 @@ public class ExportServiceImpl implements ExportService {
         exportManagerDownload(workbook,managerDownload);
         exportManagerDownload(workbook,managerDownload);
     }
     }
 
 
-    public HSSFWorkbook getHSSFWorkbook(List rows, List<String> headColumns, ExportEnum exportEnum) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, IOException {
+    public HSSFWorkbook getHSSFWorkbook(List rows, List<String> headColumns, ExportEnum exportEnum) throws Exception{
         Map<String, String> headMap = getExportMap(new ExportDto(exportEnum, headColumns));
         Map<String, String> headMap = getExportMap(new ExportDto(exportEnum, headColumns));
         String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
         String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
         String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
         String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);

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

@@ -417,7 +417,12 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
                             sb.append("第" + rowNum).append("行数据导入失败:订单类型不可为空;");
                             sb.append("第" + rowNum).append("行数据导入失败:订单类型不可为空;");
                             continue valueIsNull;
                             continue valueIsNull;
                         } else {
                         } else {
-                            objectMap.put("type", row.get(s));
+                            for (OrderTypeEnum orderTypeEnum : OrderTypeEnum.values()) {
+                                if (orderTypeEnum.getMsg().equals(row.get(s).toString())) {
+                                    objectMap.put(columnValue, orderTypeEnum);
+                                    break;
+                                }
+                            }
                         }
                         }
                     }
                     }
                     if (columnValue.equals("transNo")) {
                     if (columnValue.equals("transNo")) {

+ 45 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -13,6 +13,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.Set;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -41,6 +42,7 @@ import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.PracticeGroupDao;
 import com.ym.mec.biz.dal.dao.PracticeGroupDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
@@ -56,6 +58,7 @@ import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.dto.StudentClassInfoDto;
 import com.ym.mec.biz.dal.dto.StudentClassInfoDto;
 import com.ym.mec.biz.dal.dto.StudentCourseTimesDto;
 import com.ym.mec.biz.dal.dto.StudentCourseTimesDto;
+import com.ym.mec.biz.dal.dto.StudentOrganDto;
 import com.ym.mec.biz.dal.dto.StudentTeacherCourseDto;
 import com.ym.mec.biz.dal.dto.StudentTeacherCourseDto;
 import com.ym.mec.biz.dal.entity.BaseStudentDto;
 import com.ym.mec.biz.dal.entity.BaseStudentDto;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
@@ -105,6 +108,8 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     @Autowired
     private StudentRegistrationDao studentRegistrationDao;
     private StudentRegistrationDao studentRegistrationDao;
     @Autowired
     @Autowired
+    private StudentStatisticsDao studentStatisticsDao;
+    @Autowired
     private MusicGroupDao musicGroupDao;
     private MusicGroupDao musicGroupDao;
     @Autowired
     @Autowired
     private PracticeGroupDao practiceGroupDao;
     private PracticeGroupDao practiceGroupDao;
@@ -1036,14 +1041,15 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     public CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds) {
     public CloudStudyStudentDataDto getCloudStudyStudentOverView(List<Integer> organIds) {
         CloudStudyStudentDataDto result = new CloudStudyStudentDataDto();
         CloudStudyStudentDataDto result = new CloudStudyStudentDataDto();
         
         
-        IndexCloudStudyListDto dto = studentDao.getOrgansCloudTeacherStudent(organIds);
+        /*IndexCloudStudyListDto dto = studentDao.getOrgansCloudTeacherStudent(organIds);
         result.setTotalStudentNum(dto.getTotalStudentNum());
         result.setTotalStudentNum(dto.getTotalStudentNum());
         result.setEffectiveVipStudentNum(dto.getEffectiveVipStudentNum());
         result.setEffectiveVipStudentNum(dto.getEffectiveVipStudentNum());
         result.setWaitActivateVipStudentNum(dto.getWaitActivateVipStudentNum());
         result.setWaitActivateVipStudentNum(dto.getWaitActivateVipStudentNum());
-        result.setVipStudentNum(cloudTeacherDao.getOrgansTotalVipStudentNum(organIds));
+        
+        result.setVipStudentNum(cloudTeacherDao.getOrgansTotalVipStudentNum(organIds));*/
 //        result.seteVipStudentNum(studentDao.getOrgansTotalEVipStudentNum(organIds));
 //        result.seteVipStudentNum(studentDao.getOrgansTotalEVipStudentNum(organIds));
         result.setCloudStudyUseStudentNum(studentDao.getOrgansTotalCloudStudyStudentNum(organIds));
         result.setCloudStudyUseStudentNum(studentDao.getOrgansTotalCloudStudyStudentNum(organIds));
-        //result.setCloudStudyTodayUseStudentNum(studentDao.getOrgansTodayTotalCloudStudyStudentNum(organIds));
+        result.setCloudStudyTodayUseStudentNum(studentDao.getOrgansTodayTotalCloudStudyStudentNum(organIds));
         
         
         Calendar cal = Calendar.getInstance();    
         Calendar cal = Calendar.getInstance();    
         cal.setTime(new Date());    
         cal.setTime(new Date());    
@@ -1056,7 +1062,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
         cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
         Date startTime = cal.getTime();
         Date startTime = cal.getTime();
         
         
-        result.setCloudStudyLivelyStudentNum(studentDao.getOrganTotalCloudStudyLivelyStudentNum(organIds, startTime, endTime));
+        //result.setCloudStudyLivelyStudentNum(studentDao.getOrganTotalCloudStudyLivelyStudentNum(organIds, startTime, endTime));
         //result.setNewCloudStudyStudentNum(sysMusicCompareRecordDao.getOrgansTotalNewCloudStudyNum(organIds));
         //result.setNewCloudStudyStudentNum(sysMusicCompareRecordDao.getOrgansTotalNewCloudStudyNum(organIds));
 //        if(result.getVipStudentNum()>0&&result.getTotalStudentNum()>0){
 //        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());
 //            result.setVipStudentDuty(new BigDecimal(result.getVipStudentNum()).divide(new BigDecimal(result.getTotalStudentNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).floatValue());
@@ -1092,10 +1098,43 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         for(Mapper mapper : organCloudTeacherStudentNum){
         for(Mapper mapper : organCloudTeacherStudentNum){
         	organCloudTeacherStudentNumMap.put(Integer.parseInt(mapper.getKey().toString()), Integer.parseInt(mapper.getValue().toString()));
         	organCloudTeacherStudentNumMap.put(Integer.parseInt(mapper.getKey().toString()), Integer.parseInt(mapper.getValue().toString()));
         }
         }
+
+        List<StudentOrganDto> set1 = studentRegistrationDao.queryEffectiveStudent(organIds);
+        List<StudentOrganDto> set2 = courseScheduleStudentPaymentDao.queryRemainCourseStudent(organIds);
+        List<StudentOrganDto> set3 = studentStatisticsDao.queryNoScheduleNumStudent(organIds);
+        
+        Map<Integer,Set<Integer>> map1= set1.stream().collect(Collectors.groupingBy(StudentOrganDto :: getOrganId, Collectors.mapping(StudentOrganDto :: getUserId, Collectors.toSet())));
+        Map<Integer,Set<Integer>> map2= set2.stream().collect(Collectors.groupingBy(StudentOrganDto :: getOrganId, Collectors.mapping(StudentOrganDto :: getUserId, Collectors.toSet())));
+        Map<Integer,Set<Integer>> map3= set3.stream().collect(Collectors.groupingBy(StudentOrganDto :: getOrganId, Collectors.mapping(StudentOrganDto :: getUserId, Collectors.toSet())));
+        
+        Map<Integer,Set<Integer>> organStudentMap = new HashMap<Integer, Set<Integer>>(map1);
+        Set<Integer> temp = null;
+        for(Entry<Integer, Set<Integer>> entry : map2.entrySet()){
+        	temp = organStudentMap.get(entry.getKey());
+        	if(temp == null){
+        		organStudentMap.put(entry.getKey(), entry.getValue());
+        	}else{
+        		temp.addAll(entry.getValue());
+        		organStudentMap.put(entry.getKey(), temp);
+        	}
+        }
+        for(Entry<Integer, Set<Integer>> entry : map3.entrySet()){
+        	temp = organStudentMap.get(entry.getKey());
+        	if(temp == null){
+        		organStudentMap.put(entry.getKey(), entry.getValue());
+        	}else{
+        		temp.addAll(entry.getValue());
+        		organStudentMap.put(entry.getKey(), temp);
+        	}
+        }
         
         
         for(IndexCloudStudyListDto ics : list){
         for(IndexCloudStudyListDto ics : list){
-        	ics.setActiveStudentNum(organActiveNum.get(ics.getOrganId()));
-        	ics.setVipStudentNum(organCloudTeacherStudentNumMap.get(ics.getOrganId()));
+        	ics.setActiveStudentNum(organActiveNum.get(ics.getOrganId()) == null ? 0 : organActiveNum.get(ics.getOrganId()));
+        	ics.setVipStudentNum(organCloudTeacherStudentNumMap.get(ics.getOrganId()) == null ? 0 : organCloudTeacherStudentNumMap.get(ics.getOrganId()));
+        	ics.setEffectiveStudentNum(organStudentMap.get(ics.getOrganId()) == null ? 0 : organStudentMap.get(ics.getOrganId()).size());
+        	if(ics.getEffectiveStudentNum() > 0){
+        		ics.setVipStudentRate(ics.getVipStudentNum() * 100d / ics.getEffectiveStudentNum());
+        	}
         }
         }
         
         
 		return list;
 		return list;

+ 9 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
-import com.google.common.collect.Lists;
 import com.ym.mec.biz.dal.dao.StudentBasicInfoDao;
 import com.ym.mec.biz.dal.dao.StudentBasicInfoDao;
 import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
 import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
@@ -18,12 +17,8 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 
 import java.util.*;
 import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @Service
 @Service
@@ -43,32 +38,22 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 
 
 	@Override
 	@Override
 	public void updateStudentStatistics() {
 	public void updateStudentStatistics() {
-		//获取声部班老师
+		//更新声部班老师
 		studentBasicInfoDao.updateSubjectTeacher();
 		studentBasicInfoDao.updateSubjectTeacher();
-		List<StudentStatistics> statisticsList = new ArrayList<>();
 		//更新乐团主管、指导老师
 		//更新乐团主管、指导老师
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu());
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu2());
-		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsCourseNum());
+		studentStatisticsDao.updateTeacherAndEdu();
 		//更新未排课总数
 		//更新未排课总数
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNoCourseNum());
+		studentStatisticsDao.updateNoCourseNum();
 		//更新未开始价值总和
 		//更新未开始价值总和
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNotStartCourseFee());
+		studentStatisticsDao.updateNotStartCourseFee();
 		//更新未排课价值
 		//更新未排课价值
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNoCourseFee());
+		studentStatisticsDao.updateNoCourseFee();
 		//更新第一次课的时间\最近一次课时间
 		//更新第一次课的时间\最近一次课时间
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsFirstAndLastCourseTime());
+		studentStatisticsDao.updateFirstAndLastCourseTime();
 		//更新进行中课程组数量
 		//更新进行中课程组数量
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNormalGroupNum());
-		statisticsList.removeAll(Collections.singleton(null));
-		if(CollectionUtils.isNotEmpty(statisticsList)){
-//			studentStatisticsDao.clean();
-			List<List<StudentStatistics>> partition = Lists.partition(statisticsList, 1000);
-			for (List<StudentStatistics> studentStatistics : partition) {
-				studentStatisticsDao.batchUpdate(studentStatistics);
-			}
-		}
+		studentStatisticsDao.updateNormalGroupNum();
+		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
+		studentStatisticsDao.updateCourseNum();
 	}
 	}
 
 
 	@Override
 	@Override

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

@@ -1071,4 +1071,15 @@
 		GROUP BY cssp.`user_id_` ,vg.`vip_group_category_id_`
 		GROUP BY cssp.`user_id_` ,vg.`vip_group_category_id_`
 		) d on b.user_id_ = d.user_id_ and a.vip_group_category_id_ = d.vip_group_category_id_
 		) d on b.user_id_ = d.user_id_ and a.vip_group_category_id_ = d.vip_group_category_id_
 	</select>
 	</select>
+	
+	<select id="queryRemainCourseStudent" resultType="com.ym.mec.biz.dal.dto.StudentOrganDto">
+		SELECT cssp.user_id_ userId, u.organ_id_ organId FROM `course_schedule_student_payment` cssp LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+		LEFT JOIN `sys_user` u on u.`id_` = cssp.`user_id_`
+		WHERE cs.`status_` = 'NOT_START'
+		AND u.organ_id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+        group by cssp.user_id_ , u.organ_id_
+	</select>
 </mapper>
 </mapper>

+ 3 - 13
mec-biz/src/main/resources/config/mybatis/StudentBasicInfoMapper.xml

@@ -100,17 +100,7 @@
     <select id="getMaxId" resultType="java.lang.Integer">
     <select id="getMaxId" resultType="java.lang.Integer">
 		SELECT MAX(id_) FROM student_basic_info
 		SELECT MAX(id_) FROM student_basic_info
 	</select>
 	</select>
-	<select id="updateSubjectTeacher" resultType="int">
-		UPDATE (
-		SELECT cm.user_id_,cgtm.user_id_ teacher_id_ FROM class_group_teacher_mapper cgtm
-		LEFT JOIN (SELECT cgsm.user_id_,MAX(cgtm.id_) id_ FROM class_group cg
-		LEFT JOIN class_group_student_mapper cgsm ON cgsm.class_group_id_ = cg.id_
-		LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cg.id_
-		WHERE cg.type_ = 'NORMAL' AND cgsm.status_ = 'NORMAL' AND cg.del_flag_ = 0 AND cgtm.teacher_role_ = 'BISHOP'
-		GROUP BY cgsm.user_id_) cm ON cm.id_ = cgtm.id_
-		) st
-		LEFT JOIN student_basic_info sbi ON st.user_id_ = sbi.user_id_
-			LEFT JOIN sys_user su ON su.id_ = st.teacher_id_
-			SET sbi.subject_teacher_id_ = st.teacher_id_,sbi.subject_teacher_name_ = su.real_name_;
-	</select>
+	<update id="updateSubjectTeacher">
+		SELECT updateSubjectTeacher()
+	</update>
 </mapper>
 </mapper>

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1822,4 +1822,15 @@
     	where s.service_tag_ = 1 AND (s.service_tag_update_time_ IS NULL OR s.service_tag_update_time_&lt;#{nextMonday})
     	where s.service_tag_ = 1 AND (s.service_tag_update_time_ IS NULL OR s.service_tag_update_time_&lt;#{nextMonday})
     	and sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS' and sr.tenant_id_ = #{tenantId}
     	and sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS' and sr.tenant_id_ = #{tenantId}
     </select>
     </select>
+    
+    <select id="queryEffectiveStudent" resultType="com.ym.mec.biz.dal.dto.StudentOrganDto">
+    	SELECT sr.user_id_ userId, u.organ_id_ organId FROM `student_registration` sr LEFT JOIN `music_group` mg on sr.`music_group_id_` = mg.`id_`
+		LEFT JOIN `sys_user` u on u.`id_` = sr.`user_id_`
+		WHERE mg.`status_` = 'PROGRESS' AND sr.`music_group_status_` = 'NORMAL'
+		AND u.organ_id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+        group by sr.user_id_ , u.organ_id_
+    </select>
 </mapper>
 </mapper>

+ 32 - 237
mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml

@@ -188,6 +188,27 @@
 	<select id="queryPage" resultMap="StudentStatistics" parameterType="map">
 	<select id="queryPage" resultMap="StudentStatistics" parameterType="map">
 		SELECT * FROM student_statistics ORDER BY id_ <include refid="global.limit"/>
 		SELECT * FROM student_statistics ORDER BY id_ <include refid="global.limit"/>
 	</select>
 	</select>
+	<update id="updateTeacherAndEdu">
+		SELECT updateTeacherAndEdu()
+	</update>
+	<update id="updateCourseNum">
+		SELECT updateCourseNum()
+	</update>
+	<update id="updateNoCourseNum">
+		SELECT updateNoCourseNum()
+	</update>
+	<update id="updateNotStartCourseFee">
+		SELECT updateNotStartCourseFee()
+	</update>
+	<update id="updateNoCourseFee">
+		SELECT updateNoCourseFee()
+	</update>
+	<update id="updateFirstAndLastCourseTime">
+		SELECT updateFirstAndLastCourseTime()
+	</update>
+	<update id="updateNormalGroupNum">
+		SELECT updateNormalGroupNum()
+	</update>
 	
 	
 	<!-- 查询当前表的总记录数 -->
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 	<select id="queryCount" resultType="int">
@@ -427,243 +448,6 @@
 	<select id="queryDirectorList" resultType="java.lang.Integer">
 	<select id="queryDirectorList" resultType="java.lang.Integer">
 		SELECT DISTINCT music_director_id_ FROM student_statistics WHERE group_type_ = #{groupType} AND music_director_id_ IS NOT NULL
 		SELECT DISTINCT music_director_id_ FROM student_statistics WHERE group_type_ = #{groupType} AND music_director_id_ IS NOT NULL
 	</select>
 	</select>
-	<select id="queryStatisticsTeacherAndEdu" resultMap="com.ym.mec.biz.dal.dao.StudentStatisticsDao.StudentStatistics">
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'PRACTICE' group_type_
-		FROM ( SELECT cs.actual_teacher_id_,ct.user_id_,pg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		WHERE cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		WHERE cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-		UNION ALL
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'THEORY' group_type_
-		FROM (SELECT cs.actual_teacher_id_,ct.user_id_,vg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-		UNION ALL
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'VIP' group_type_
-		FROM (SELECT cs.actual_teacher_id_,ct.user_id_,vg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-	</select>
-	<select id="queryStatisticsTeacherAndEdu2" resultMap="StudentStatistics">
-		SELECT ss.user_id_,pg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'PRACTICE' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		LEFT JOIN sys_user su ON su.id_ = pg.user_id_
-		WHERE cssp.group_type_ = 'PRACTICE' AND pg.group_status_ = 'NORMAL' AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,pg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'PRACTICE' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		LEFT JOIN sys_user su ON su.id_ = pg.educational_teacher_id_
-		WHERE cssp.group_type_ = 'PRACTICE' AND pg.group_status_ = 'NORMAL' AND ss.music_director_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,vg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'THEORY' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
-		WHERE vgc.name_ = '乐理课' AND cssp.group_type_ = 'THEORY' AND vg.group_status_ = 2 AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,vg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'THEORY' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.educational_teacher_id_
-		WHERE vgc.name_ = '乐理课' AND cssp.group_type_ = 'THEORY' AND vg.group_status_ = 2 AND ss.music_director_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,vg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'VIP' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
-		WHERE vgc.name_ != '乐理课' AND cssp.group_type_ = 'VIP' AND vg.group_status_ = 2 AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,vg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'VIP' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.educational_teacher_id_
-		WHERE vgc.name_ != '乐理课' AND cssp.group_type_ = 'VIP' AND vg.group_status_ = 2 AND ss.music_director_id_ IS NULL
-	</select>
-	<select id="queryStatisticsCourseNum" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNoCourseNum" resultMap="StudentStatistics">
-		SELECT aum.user_id_,SUM(CASE WHEN aum.practice_flag_ = 1 THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_practice_flag_ = 1 THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_,'PRACTICE' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		WHERE aum.return_fee_ = 0 AND (aum.practice_flag_ = 1 OR aum.give_practice_flag_ = 1)
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT a.user_id_,SUM(a.no_schedule_num_) no_schedule_num_,'THEORY' group_type_ FROM (
-		SELECT aum.user_id_,SUM(CASE WHEN aum.vip_flag_ = 1 AND vgc.name_ = '乐理课' THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_vip_flag_ = 1 AND vgc1.name_ = '乐理课' THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		LEFT JOIN vip_group_category vgc1 ON vgc1.id_ = vga.give_category_id_
-		WHERE aum.return_fee_ = 0 AND ((aum.vip_flag_ = 1 AND vgc.name_ = '乐理课') OR (aum.give_vip_flag_ = 1 AND vgc1.name_ = '乐理课'))
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT user_id_,10 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"music_theory": 1','%')) a
-		GROUP BY a.user_id_
-		UNION ALL
-		SELECT a.user_id_,SUM(a.no_schedule_num_) no_schedule_num_,'VIP' group_type_ FROM (
-		SELECT aum.user_id_,SUM(CASE WHEN aum.vip_flag_ = 1 AND vgc.name_ != '乐理课' THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_vip_flag_ = 1  AND vgc1.name_ != '乐理课' THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		LEFT JOIN vip_group_category vgc1 ON vgc1.id_ = vga.give_category_id_
-		WHERE aum.return_fee_ = 0 AND ((aum.vip_flag_ = 1 AND vgc.name_ != '乐理课') OR (aum.give_vip_flag_ = 1 AND vgc1.name_ != '乐理课'))
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT user_id_,12 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"vip1": 1','%')
-		UNION ALL
-		SELECT user_id_,12 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"vip2": 1','%')) a
-		GROUP BY a.user_id_
-	</select>
-	<select id="queryStatisticsNotStartCourseFee" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'PRACTICE' AND cs.status_ = 'NOT_START'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' AND vgc.name_ = '乐理课'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' AND vgc.name_ != '乐理课'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNoCourseFee" resultMap="StudentStatistics">
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'PRACTICE' group_type_ FROM activity_user_mapper aum
-		WHERE aum.practice_flag_ = 1 AND return_fee_ = 0
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'THEORY' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		WHERE aum.vip_flag_ = 1 AND return_fee_ = 0 AND vgc.name_ = '乐理课'
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'VIP' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		WHERE aum.vip_flag_ = 1 AND return_fee_ = 0 AND vgc.name_ != '乐理课'
-		GROUP BY aum.user_id_
-	</select>
-	<select id="queryStatisticsFirstAndLastCourseTime"
-			resultMap="StudentStatistics">
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'PRACTICE' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'THEORY' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.status_ = 'OVER' AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'VIP' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.status_ = 'OVER' AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNormalGroupNum" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,COUNT(DISTINCT pg.id_) normal_group_num_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		WHERE pg.group_status_ = 'NORMAL' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(DISTINCT vg.id_) normal_group_num_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND vg.group_status_ = 2 AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(DISTINCT vg.id_) normal_group_num_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND vg.group_status_ = 2 AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
 	<sql id="dateTypeSql">
 	<sql id="dateTypeSql">
 		WHERE data_type_ =
 		WHERE data_type_ =
 		<if test="groupType == 'VIP'">
 		<if test="groupType == 'VIP'">
@@ -676,4 +460,15 @@
 			'STUDENT_PRACTICE_ORDER_NUM'
 			'STUDENT_PRACTICE_ORDER_NUM'
 		</if>
 		</if>
 	</sql>
 	</sql>
+	
+	<select id="queryNoScheduleNumStudent" resultType="com.ym.mec.biz.dal.dto.StudentOrganDto">
+		SELECT ss.`user_id_` userId,u.organ_id_ organId FROM `student_statistics` ss 
+		LEFT JOIN `sys_user` u on u.`id_` = ss.`user_id_`
+		WHERE ss.`no_schedule_num_` > 0
+		AND u.organ_id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+        group by ss.user_id_ , u.organ_id_
+	</select>
 </mapper>
 </mapper>

+ 42 - 2
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -8,7 +8,10 @@ import io.swagger.annotations.ApiParam;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -404,7 +407,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "云教练学员数据预览")
     @ApiOperation(value = "云教练学员数据预览")
     @GetMapping("/getCloudStudyStudentOverView")
     @GetMapping("/getCloudStudyStudentOverView")
     @PreAuthorize("@pcs.hasPermissions('studentManage/getCloudStudyStudentOverView')")
     @PreAuthorize("@pcs.hasPermissions('studentManage/getCloudStudyStudentOverView')")
-    public HttpResponseResult<CloudStudyStudentDataDto> getCloudStudyStudentOverView(String organIds) throws Exception {
+    public HttpResponseResult<Object> getCloudStudyStudentOverView(String organIds) throws Exception {
         List<Integer> organIdsList;
         List<Integer> organIdsList;
         if(StringUtils.isNotBlank(organIds)){
         if(StringUtils.isNotBlank(organIds)){
             organIdsList = Arrays.stream(organIds.split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
             organIdsList = Arrays.stream(organIds.split(",")).map(id->Integer.valueOf(id)).collect(Collectors.toList());
@@ -415,7 +418,43 @@ public class StudentManageController extends BaseController {
             }
             }
             organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
             organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
         }
         }
-        return succeed(studentService.getCloudStudyStudentOverView(organIdsList));
+        
+        List<Integer> ingnoreOrganIdList = Arrays.asList(36,39,41,42,43,44,45,46,47,48,49,50,52,54,56);
+        
+        organIdsList.removeAll(ingnoreOrganIdList);
+        
+        Map<String,Object> result = new HashMap<String, Object>();
+        
+        List<IndexCloudStudyListDto> list = studentService.getCloudStudyStudentOverViewList(organIdsList);
+        Collections.sort(list, new Comparator<IndexCloudStudyListDto>() {
+
+			@Override
+			public int compare(IndexCloudStudyListDto o1, IndexCloudStudyListDto o2) {
+				if(o1.getVipStudentRate() == o2.getVipStudentRate()){
+					return 0;
+				}
+				if(o1.getVipStudentRate() > o2.getVipStudentRate()){
+					return -1;
+				}
+				return 1;
+			}
+        	
+		});
+        
+        result.put("list", list);
+        
+        CloudStudyStudentDataDto cloudStudyStudentDataDto = studentService.getCloudStudyStudentOverView(organIdsList);
+
+        cloudStudyStudentDataDto.setCloudStudyLivelyStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getActiveStudentNum)));
+        cloudStudyStudentDataDto.setTotalStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getTotalStudentNum)));
+        cloudStudyStudentDataDto.setEffectiveVipStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getEffectiveVipStudentNum)));
+        cloudStudyStudentDataDto.setWaitActivateVipStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getWaitActivateVipStudentNum)));
+        cloudStudyStudentDataDto.setEffectiveStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getEffectiveStudentNum)));
+        cloudStudyStudentDataDto.setVipStudentNum(list.stream().collect(Collectors.summingInt(IndexCloudStudyListDto :: getVipStudentNum)));
+
+        result.put("overView", cloudStudyStudentDataDto);
+        
+        return succeed(result);
     }
     }
 
 
     @ApiOperation(value = "云教练学员数据预览列表")
     @ApiOperation(value = "云教练学员数据预览列表")
@@ -432,6 +471,7 @@ public class StudentManageController extends BaseController {
             }
             }
             organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
             organIdsList = organizations.stream().map(Organization::getId).collect(Collectors.toList());
         }
         }
+        
         return succeed(studentService.getCloudStudyStudentOverViewList(organIdsList));
         return succeed(studentService.getCloudStudyStudentOverViewList(organIdsList));
     }
     }