Browse Source

Merge remote-tracking branch 'origin/2021-04-28' into 2021-04-28

zouxuan 4 years ago
parent
commit
3417dc1f52

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
+import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.enums.*;
@@ -38,6 +39,11 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
                                               @Param("startMonth") String startMonth,
                                               @Param("startMonth") String startMonth,
                                               @Param("endMonth") String endMonth);
                                               @Param("endMonth") String endMonth);
 
 
+    List<IndexBaseMonthData> getIndexBaseDataList(@Param("organIds") Set<Integer> organIds,
+                                              @Param("dataTypes") Set<String> dataTypes,
+                                              @Param("startMonth") String startMonth,
+                                              @Param("endMonth") String endMonth);
+
 	List<IndexBaseMonthData> getWithDayAndDataType(@Param("day") String day,
 	List<IndexBaseMonthData> getWithDayAndDataType(@Param("day") String day,
                                                    @Param("dataType")IndexDataType dataType);
                                                    @Param("dataType")IndexDataType dataType);
 
 
@@ -140,7 +146,13 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
 
     List<IndexBaseMonthData> getGroupCourseDataWithGroup(@Param("dayStr") String dayStr,
     List<IndexBaseMonthData> getGroupCourseDataWithGroup(@Param("dayStr") String dayStr,
                                                 @Param("groupType")GroupType groupType,
                                                 @Param("groupType")GroupType groupType,
-                                                @Param("courseStatus") CourseStatusEnum courseStatus);
+                                                @Param("courseStatus") CourseStatusEnum courseStatus,
+                                                         @Param("teachMode") TeachModeEnum teachMode);
+
+    List<OrganVipGroupCategoryCourseNumDto> getVipGroupCategoryCourseData(@Param("dayStr") String dayStr,
+                                                                          @Param("groupType")GroupType groupType,
+                                                                          @Param("courseStatus") CourseStatusEnum courseStatus,
+                                                                          @Param("teachMode") TeachModeEnum teachMode);
 
 
     int countLessThenThreeClassGroupNum(@Param("organIds") Set<Integer> organIds, @Param("educationUserId") Integer educationUserId);
     int countLessThenThreeClassGroupNum(@Param("organIds") Set<Integer> organIds, @Param("educationUserId") Integer educationUserId);
 
 

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganVipGroupCategoryCourseNumDto.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.dto;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/4/25 0025
+ */
+public class OrganVipGroupCategoryCourseNumDto {
+
+    private Integer organId;
+
+    private String categoryName;
+
+    private Integer courseNum;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getCategoryName() {
+        return categoryName;
+    }
+
+    public void setCategoryName(String categoryName) {
+        this.categoryName = categoryName;
+    }
+
+    public Integer getCourseNum() {
+        return courseNum;
+    }
+
+    public void setCourseNum(Integer courseNum) {
+        this.courseNum = courseNum;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java

@@ -32,6 +32,8 @@ public class IndexBaseMonthData {
 
 
 	private IndexDataType dataType;
 	private IndexDataType dataType;
 
 
+	private String extendInfo;
+
 	private Date createTime;
 	private Date createTime;
 
 
 	private Date updateTime;
 	private Date updateTime;
@@ -126,4 +128,12 @@ public class IndexBaseMonthData {
 	public void setTitle(String title) {
 	public void setTitle(String title) {
 		this.title = title;
 		this.title = title;
 	}
 	}
+
+	public String getExtendInfo() {
+		return extendInfo;
+	}
+
+	public void setExtendInfo(String extendInfo) {
+		this.extendInfo = extendInfo;
+	}
 }
 }

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

@@ -50,6 +50,8 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     //课程数据
     //课程数据
     MUSIC_GROUP_COURSE("MUSIC_GROUP_COURSE","乐团课", false, true),
     MUSIC_GROUP_COURSE("MUSIC_GROUP_COURSE","乐团课", false, true),
     VIP_GROUP_COURSE("VIP_GROUP_COURSE","VIP课", false, true),
     VIP_GROUP_COURSE("VIP_GROUP_COURSE","VIP课", false, true),
+    VIP_GROUP_ONLINE_COURSE("VIP_GROUP_ONLINE_COURSE","VIP课", false, true),
+    VIP_GROUP_OFFLINE_COURSE("VIP_GROUP_OFFLINE_COURSE","VIP课", false, true),
     PRACTICE_GROUP_COURSE("PRACTICE_GROUP_COURSE","网管课", false, true),
     PRACTICE_GROUP_COURSE("PRACTICE_GROUP_COURSE","网管课", false, true),
 
 
     //学员变动
     //学员变动

+ 57 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1,11 +1,13 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
 import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
+import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.enums.*;
@@ -35,6 +37,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import static com.ym.mec.biz.dal.enums.IndexDataType.FINANCE_AMOUNT;
 import static com.ym.mec.biz.dal.enums.IndexDataType.FINANCE_AMOUNT;
+import static com.ym.mec.biz.dal.enums.IndexDataType.VIP_GROUP_ONLINE_COURSE;
 import static com.ym.mec.biz.dal.enums.IndexErrorType.WAIT_CREATE_PAYMENT_CALENDER;
 import static com.ym.mec.biz.dal.enums.IndexErrorType.WAIT_CREATE_PAYMENT_CALENDER;
 
 
 @Service
 @Service
@@ -107,6 +110,9 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			indexBaseDatas = new ArrayList<>();
 			indexBaseDatas = new ArrayList<>();
 		}
 		}
 
 
+		List<IndexBaseMonthData> indexBaseDataList = indexBaseMonthDataDao.getIndexBaseDataList(organIds, dataTypes, startDate.toString(), endDate.toString());
+//		Map<Date, Map<String, Integer>> vipCategory
+
 		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().filter(d->Objects.nonNull(d.getDataType())).collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
 		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().filter(d->Objects.nonNull(d.getDataType())).collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
 		List<IndexBaseMonthData> financePayDataWithTimely = indexBaseMonthDataDao.getFinancePayDataWithTimely(startDate.toString(), endDate.toString(), new ArrayList<>(organIds));
 		List<IndexBaseMonthData> financePayDataWithTimely = indexBaseMonthDataDao.getFinancePayDataWithTimely(startDate.toString(), endDate.toString(), new ArrayList<>(organIds));
 		typeDateMap.put(IndexDataType.FINANCE_PAY,financePayDataWithTimely);
 		typeDateMap.put(IndexDataType.FINANCE_PAY,financePayDataWithTimely);
@@ -208,6 +214,13 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 					IndexDataType.TOTAL_AMOUNT.equals(typeDateMapEntry.getKey())){
 					IndexDataType.TOTAL_AMOUNT.equals(typeDateMapEntry.getKey())){
 				indexBaseData.setPercent(typeDateMapEntry.getValue().stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add));
 				indexBaseData.setPercent(typeDateMapEntry.getValue().stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add));
 			}
 			}
+//			if(IndexDataType.VIP_GROUP_COURSE.equals(typeDateMapEntry.getKey()) || VIP_GROUP_ONLINE_COURSE.equals(typeDateMapEntry.getKey()) ||
+//					IndexDataType.VIP_GROUP_OFFLINE_COURSE.equals(typeDateMapEntry.getKey())){
+//				List<OrganVipGroupCategoryCourseNumDto> extendInfos = indexBaseData.getIndexMonthData().stream().filter(d -> StringUtils.isNotBlank(d.getExtendInfo())).map(d -> JSON.parseObject(d.getExtendInfo(), OrganVipGroupCategoryCourseNumDto.class)).collect(Collectors.toList());
+//				if(!CollectionUtils.isEmpty(extendInfos)){
+//					extendInfos.stream().
+//				}
+//			}
 			result.add(indexBaseData);
 			result.add(indexBaseData);
 		}
 		}
 		return result;
 		return result;
@@ -275,9 +288,50 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE);
 		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE);
 
 
 		//课程数据
 		//课程数据
-		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.MUSIC, null), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null), dayStr, IndexDataType.VIP_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.PRACTICE, null), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
+		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.MUSIC, null, null), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
+
+		List<IndexBaseMonthData> vipCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, null);
+		List<OrganVipGroupCategoryCourseNumDto> vipGroupCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, null);
+		Map<Integer, Map<String, Integer>> organCategoryCourseMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(vipGroupCategoryCourseData)){
+			organCategoryCourseMap = vipGroupCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
+		}
+		for (IndexBaseMonthData vipCourseDatum : vipCourseData) {
+			if(organCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
+				vipCourseDatum.setExtendInfo(JSON.toJSONString(organCategoryCourseMap.get(vipCourseDatum.getOrganId())));
+			}
+		}
+		saveData(vipCourseData, dayStr, IndexDataType.VIP_GROUP_COURSE);
+
+
+		List<IndexBaseMonthData> vipOnlineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, null);
+		List<OrganVipGroupCategoryCourseNumDto> vipGroupOnlineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, null);
+		Map<Integer, Map<String, Integer>> organOnlineCategoryCourseMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(vipGroupOnlineCategoryCourseData)){
+			organOnlineCategoryCourseMap = vipGroupOnlineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
+		}
+		for (IndexBaseMonthData vipCourseDatum : vipOnlineCourseData) {
+			if(organOnlineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
+				vipCourseDatum.setExtendInfo(JSON.toJSONString(organOnlineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
+			}
+		}
+		saveData(vipOnlineCourseData, dayStr, IndexDataType.VIP_GROUP_ONLINE_COURSE);
+
+
+		List<IndexBaseMonthData> vipOfflineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, null);
+		List<OrganVipGroupCategoryCourseNumDto> vipGroupOfflineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, null);
+		Map<Integer, Map<String, Integer>> organOfflineCategoryCourseMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(vipGroupOfflineCategoryCourseData)){
+			organOfflineCategoryCourseMap = vipGroupOfflineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
+		}
+		for (IndexBaseMonthData vipCourseDatum : vipOfflineCourseData) {
+			if(organOfflineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
+				vipCourseDatum.setExtendInfo(JSON.toJSONString(organOfflineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
+			}
+		}
+		saveData(vipOfflineCourseData, dayStr, IndexDataType.VIP_GROUP_OFFLINE_COURSE);
+
+		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.PRACTICE, null, null), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
 
 
 		//学员变动
 		//学员变动
 		saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM);
 		saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM);

+ 68 - 6
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -14,6 +14,7 @@
 		<result column="activate_num_" property="activateNum" />
 		<result column="activate_num_" property="activateNum" />
 		<result column="percent_" property="percent" />
 		<result column="percent_" property="percent" />
 		<result column="data_type_" property="dataType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="data_type_" property="dataType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="extend_info_" property="extendInfo"/>
 		<result column="create_time_" property="createTime" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
 	</resultMap>
@@ -39,25 +40,25 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		</selectKey>
 		-->
 		-->
-		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,create_time_,update_time_)
-		VALUES(#{month},#{organId},#{totalNum},#{activateNum},#{percent},#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW(),NOW())
+		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,extend_info_,create_time_,update_time_)
+		VALUES(#{month},#{organId},#{totalNum},#{activateNum},#{percent},#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{extendInfo},NOW(),NOW())
 	</insert>
 	</insert>
 
 
 	<insert id="batchInsertWithDataType" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 	<insert id="batchInsertWithDataType" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,create_time_,update_time_)
+		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,extend_info_,create_time_,update_time_)
 		VALUES
 		VALUES
 		<foreach collection="datas" item="data" separator=",">
 		<foreach collection="datas" item="data" separator=",">
 			(#{data.month},#{data.organId},#{data.totalNum},#{data.activateNum},#{data.percent},
 			(#{data.month},#{data.organId},#{data.totalNum},#{data.activateNum},#{data.percent},
-			#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW(),NOW())
+			#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.extendInfo},NOW(),NOW())
 		</foreach>
 		</foreach>
 	</insert>
 	</insert>
 
 
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,create_time_,update_time_)
+		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,extend_info_,create_time_,update_time_)
 		VALUES
 		VALUES
 		<foreach collection="datas" item="data" separator=",">
 		<foreach collection="datas" item="data" separator=",">
 			(#{data.month},#{data.organId},#{data.totalNum},#{data.activateNum},#{data.percent},
 			(#{data.month},#{data.organId},#{data.totalNum},#{data.activateNum},#{data.percent},
-			#{data.dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW(),NOW())
+			#{data.dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.extendInfo},NOW(),NOW())
 		</foreach>
 		</foreach>
 	</insert>
 	</insert>
 
 
@@ -86,6 +87,9 @@
 			<if test="dataType != null">
 			<if test="dataType != null">
 				data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 				data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
 			</if>
+			<if test="extendInfo != null">
+				extend_info_ = #{extendInfo},
+			</if>
 			update_time_ = NOW()
 			update_time_ = NOW()
 		</set>
 		</set>
 		WHERE id_ = #{id}
 		WHERE id_ = #{id}
@@ -144,6 +148,32 @@
 		GROUP BY month_,data_type_
 		GROUP BY month_,data_type_
 	</select>
 	</select>
 
 
+	<select id="getIndexBaseDataList" resultMap="IndexBaseMonthData">
+		SELECT
+			*
+		FROM index_base_month_data
+			<where>
+				<if test="dataTypes!=null and dataTypes.size()>0">
+					AND data_type_ IN
+					<foreach collection="dataTypes" item="dataType" open="(" close=")" separator=",">
+						#{dataType}
+					</foreach>
+				</if>
+				<if test="organIds!=null and organIds.size()>0">
+					AND organ_id_ IN
+					<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+						#{organId}
+					</foreach>
+				</if>
+				<if test="startMonth!=null and startMonth!=''">
+					AND month_&gt;=#{startMonth}
+				</if>
+				<if test="endMonth!=null and endMonth!=''">
+					AND month_&lt;=#{endMonth}
+				</if>
+			</where>
+	</select>
+
 	<select id="getWithDayAndDataType" resultMap="IndexBaseMonthData">
 	<select id="getWithDayAndDataType" resultMap="IndexBaseMonthData">
 		SELECT
 		SELECT
 			*
 			*
@@ -467,12 +497,44 @@
 		<if test="dayStr!=null and dayStr!=''">
 		<if test="dayStr!=null and dayStr!=''">
 			AND m.class_date_ = #{dayStr}
 			AND m.class_date_ = #{dayStr}
 		</if>
 		</if>
+		<if test="teachMode!=null">
+			AND m.teach_mode_ = #{teachMode, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		</if>
 		GROUP BY
 		GROUP BY
 			m.organ_id_
 			m.organ_id_
 		ORDER BY
 		ORDER BY
 			m.organ_id_;
 			m.organ_id_;
 	</select>
 	</select>
 
 
+	<select id="getVipGroupCategoryCourseData" resultType="com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto">
+		SELECT
+		m.organ_id_ organId,
+		vgc.name_ categoryName,
+		COUNT( m.id_ ) courseNum
+		FROM
+		course_schedule m
+		LEFT JOIN vip_group vg ON m.music_group_id_=vg.id_
+		LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
+		WHERE
+		m.del_flag_ = 0
+		AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
+		AND (m.new_course_id_ IS NULL OR m.new_course_id_=m.id_)
+		AND m.organ_id_ IS NOT NULL
+		<if test="groupType!=null">
+			AND m.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		</if>
+		<if test="dayStr!=null and dayStr!=''">
+			AND m.class_date_ &gt;= #{dayStr}
+		</if>
+		<if test="teachMode!=null">
+			AND m.teach_mode_ = #{teachMode, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		</if>
+		GROUP BY
+		m.organ_id_,vgc.name_
+		ORDER BY
+		m.organ_id_;
+	</select>
+
 	<select id="getOtherStudentData" resultMap="IndexBaseMonthData">
 	<select id="getOtherStudentData" resultMap="IndexBaseMonthData">
 		SELECT
 		SELECT
 			su.organ_id_,
 			su.organ_id_,