Jelajahi Sumber

课表列表导出

zouxuan 1 tahun lalu
induk
melakukan
337830c5bb

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

@@ -1147,6 +1147,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     List<CourseScheduleEndDto> endFindCourseSchedules(Map<String, Object> params);
 
+    List<CourseScheduleEndDto> exportSuperCourseSchedules(Map<String, Object> params);
+
     int endCountCourseSchedules(Map<String, Object> params);
 
     /**

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

@@ -397,4 +397,6 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
     void updateStudentIdList(@Param("groupId") Long groupId, @Param("userId") Integer userId);
 
     void del(@Param("id") Integer id);
+
+    List<Map<String, String>> findVipGroupTypeMaps(@Param("vipGroupIds") List<Long> vipGroupIds);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -65,4 +66,10 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     @ApiModelProperty(value = "助教老师姓名")
     private String teachingUserNames;
+
+    private String courseScheduleType;
+
+    private BigDecimal expectSalary;
+
+    private BigDecimal expectPrice;
 }

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

@@ -32,6 +32,7 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	EXPORT_OPERATING_SUMMARY_INCOME(26,"经营报表收入汇总"),
 
 	CLOUD_COACH_ACTIVATION_DETAILS(27,"云教练激活明细"),
+	EXPORT_COURSE_INCOME(28,"课程收入明细导出"),
 	;
 
 	private Integer code;

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExportCourseScheduleQueryInfo.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ExportCourseScheduleQueryInfo extends BaseEntity {
+
+    @ApiModelProperty(value = "部门编号列表")
+    private String organIds;
+
+    @ApiModelProperty(value = "月份")
+    private String month;
+}

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

@@ -488,6 +488,16 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 */
 	PageInfo<CourseScheduleEndDto> endFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo);
 
+
+	/**
+	 * @describe 终极课表获取接口
+	 * @author Joburgess
+	 * @date 2019/12/27
+	 * @param queryInfo: 查询条件
+	 * @return java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleEndDto>
+	 */
+	List<CourseScheduleEndDto> exportSuperCourseSchedules(ExportCourseScheduleQueryInfo queryInfo);
+
 	/**
 	 * @describe 陪练课程调整
 	 * @author Joburgess

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

@@ -5,10 +5,7 @@ import com.ym.mec.biz.dal.dto.MusicGroupExportDto;
 import com.ym.mec.biz.dal.entity.ManagerDownload;
 import com.ym.mec.biz.dal.enums.ExportEnum;
 import com.ym.mec.biz.dal.enums.ExportTypeEnum;
-import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
-import com.ym.mec.biz.dal.page.ExportUserAccountQueryInfo;
-import com.ym.mec.biz.dal.page.StudentStatisticsQueryInfo;
-import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.entity.HttpResponseResult;
 import org.springframework.scheduling.annotation.Async;
 
@@ -279,6 +276,8 @@ public interface ExportService {
 
     void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload);
 
+    void exportSuperCourseSchedules(ExportCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload);
+
     void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId);
 
     void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload,ExportEnum exportEnum);

+ 139 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -4347,6 +4347,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
             Map<Long, String> eduName = null;
             Map<String, MusicGroupBasicDto> cooperationMap = new HashMap<>();
+			Map<String, String> vipGroupTypeMap = new HashMap<>();
             if (queryInfo.isExport()) {
                 List<Long> musicCourseIds = results.stream().filter(e -> e.getGroupType() == MUSIC).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
                 eduName = new HashMap<>(courseScheduleIds.size());
@@ -4358,7 +4359,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						cooperationMap.put(map.getId(), map);
 					}
                 }
-                List<Long> vipCourseIds = results.stream().filter(e -> e.getGroupType() == VIP).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+                List<Long> vipGroupIds = results.stream().filter(e -> e.getType() == CourseScheduleType.VIP)
+						.map(e->Long.parseLong(e.getMusicGroupId())).distinct().collect(Collectors.toList());
+				//获取vip课程具体课程类型
+				if (CollectionUtils.isNotEmpty(vipGroupIds)){
+					vipGroupTypeMap = MapUtil.convertMybatisMap(vipGroupDao.findVipGroupTypeMaps(vipGroupIds));
+				}
+				List<Long> vipCourseIds = results.stream().filter(e -> e.getGroupType() == VIP).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
                 if (vipCourseIds != null && vipCourseIds.size() > 0) {
                     eduName.putAll(MapUtil.convertMybatisMap(vipGroupDao.queryEduNameMapByCourseId(vipCourseIds)));
                 }
@@ -4369,6 +4376,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
 
             for (CourseScheduleEndDto result : results) {
+				if (queryInfo.isExport()) {
+					if(result.getType() == CourseScheduleType.VIP){
+						result.setCourseScheduleType(vipGroupTypeMap.get(result.getMusicGroupId()));
+					}else {
+						result.setCourseScheduleType(result.getType().getMsg());
+					}
+				}
 				if(StringUtils.isNotEmpty(result.getTeachingTeacherIds())){
 					List<String> ids = Arrays.stream(result.getTeachingTeacherIds().split(",")).collect(Collectors.toList());
 					StringBuffer sb = new StringBuffer();
@@ -4406,6 +4420,130 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     }
 
     @Override
+    public List<CourseScheduleEndDto> exportSuperCourseSchedules(ExportCourseScheduleQueryInfo queryInfo) {
+        Map<String, Object> params = new HashMap<>(16);
+		if (StringUtils.isNotEmpty(queryInfo.getMonth())) {
+			Date month = DateUtil.stringToDate(queryInfo.getMonth(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+			params.put("startTime", DateUtil.getFirstDayOfMonth(month));
+			params.put("endTime", DateUtil.getLastDayOfMonth(month));
+		}
+		if(StringUtils.isNotEmpty(queryInfo.getOrganIds())){
+			List<Integer> collect = Arrays.stream(queryInfo.getOrganIds().split(",")).map(Integer::parseInt).collect(Collectors.toList());
+			params.put("organIds", collect);
+		}
+		List<CourseScheduleEndDto> results = courseScheduleDao.exportSuperCourseSchedules(params);
+		if(CollectionUtils.isEmpty(results)){
+			return new ArrayList<>();
+		}
+		List<Integer> organIdList = results.stream().map(e -> e.getOrganId()).distinct().collect(Collectors.toList());
+		Map<Integer, String> organNameMap = new HashMap<>();
+		if(CollectionUtils.isNotEmpty(organIdList)){
+			organNameMap = this.getMap("organization","id_","name_",organIdList,queryInfo.getTenantId(),Integer.class,String.class);
+		}
+
+		List<Integer> schoolIdList = results.stream().map(e -> e.getSchoolId()).distinct().collect(Collectors.toList());
+
+		Map<Integer, String> schoolameMap = new HashMap<>();
+		if(CollectionUtils.isNotEmpty(schoolIdList)){
+			schoolameMap = this.getMap("school","id_","name_",schoolIdList,queryInfo.getTenantId(),Integer.class,String.class);
+		}
+
+		List<Long> courseScheduleIds = results.stream().map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+		List<Integer> teacherIds = results.stream().filter(t->Objects.nonNull(t.getActualTeacherId())).map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
+		List<Integer> teachingUserIdsList = results.stream()
+				.filter(u -> StringUtils.isNotEmpty(u.getTeachingTeacherIds()))
+				.flatMap(u -> Arrays.stream(u.getTeachingTeacherIds().split(",")))
+				.filter(StringUtils::isNotEmpty)
+				.map(Integer::parseInt)
+				.distinct()
+				.collect(Collectors.toList());
+		if(CollectionUtils.isNotEmpty(teachingUserIdsList)){
+			teacherIds.addAll(teachingUserIdsList);
+		}
+		List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIdList(teacherIds);
+		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(nameIdMaps);
+
+		List<Map<Long, Long>> courseMergeCourseNum = courseScheduleDao.countCourseMergeCourseNum(courseScheduleIds);
+		Map<Long, Long> courseMergeCourseNumMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(courseMergeCourseNum)){
+			courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
+		}
+		//获取课程的预计人数
+		List<CourseSchedule> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
+		Map<Long, Integer> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseSchedule::getId, CourseSchedule::getStudentNum));
+		//获取班级声部名称
+		List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
+		Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
+		Map<String, MusicGroupBasicDto> cooperationMap = new HashMap<>();
+		Map<String, String> vipGroupTypeMap = new HashMap<>();
+		List<Long> musicCourseIds = results.stream().filter(e -> e.getGroupType() == MUSIC).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+		Map<Long, String> eduName = new HashMap<>(courseScheduleIds.size());
+		if (musicCourseIds != null && musicCourseIds.size() > 0) {
+			eduName.putAll(MapUtil.convertMybatisMap(musicGroupDao.queryEduNameMapByCourseId(musicCourseIds)));
+			//获取合作单位,只有groupType是 MUSIC 的才有合作单位
+			List<MusicGroupBasicDto> maps = musicGroupDao.findMusicByCourseIds(musicCourseIds);
+			for (MusicGroupBasicDto map : maps) {
+				cooperationMap.put(map.getId(), map);
+			}
+		}
+		List<Long> vipGroupIds = results.stream().filter(e -> e.getType() == CourseScheduleType.VIP)
+				.map(e->Long.parseLong(e.getMusicGroupId())).distinct().collect(Collectors.toList());
+		//获取vip课程具体课程类型
+		if (CollectionUtils.isNotEmpty(vipGroupIds)){
+			vipGroupTypeMap = MapUtil.convertMybatisMap(vipGroupDao.findVipGroupTypeMaps(vipGroupIds));
+		}
+		List<Long> vipCourseIds = results.stream().filter(e -> e.getGroupType() == VIP).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+		if (vipCourseIds != null && vipCourseIds.size() > 0) {
+			eduName.putAll(MapUtil.convertMybatisMap(vipGroupDao.queryEduNameMapByCourseId(vipCourseIds)));
+		}
+		List<Long> practiceCourseIds = results.stream().filter(e -> e.getGroupType() == PRACTICE).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+		if (practiceCourseIds != null && practiceCourseIds.size() > 0) {
+			eduName.putAll(MapUtil.convertMybatisMap(practiceGroupDao.queryEduNameMapByCourseId(practiceCourseIds)));
+		}
+
+		for (CourseScheduleEndDto result : results) {
+			if(result.getType() == CourseScheduleType.VIP){
+				result.setCourseScheduleType(vipGroupTypeMap.get(result.getMusicGroupId()));
+			}else {
+				result.setCourseScheduleType(result.getType().getMsg());
+			}
+			result.setOrganName(organNameMap.get(result.getOrganId()));
+			result.setSchoolName(schoolameMap.get(result.getSchoolId()));
+			if(StringUtils.isNotEmpty(result.getTeachingTeacherIds())){
+				List<String> ids = Arrays.stream(result.getTeachingTeacherIds().split(",")).collect(Collectors.toList());
+				StringBuffer sb = new StringBuffer();
+				for (String teachingId : ids) {
+					String teachingName = nameIdMap.get(Integer.parseInt(teachingId));
+					if(StringUtils.isNotEmpty(teachingName)){
+						if(sb.length() > 0){
+							sb.append(",");
+						}
+						sb.append(teachingName);
+					}
+				}
+				result.setTeachingUserNames(sb.toString());
+			}
+			if (eduName != null) {
+				result.setEducationTeacherName(eduName.get(result.getId()));
+			}
+			result.setTeacher(null);
+			result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
+			result.setSubjectName(classGroupSubjectNameMap.get(result.getId()));
+			result.setIsSettlement(Objects.isNull(result.getSettlementTime()) ? 0 : 1);
+			if (courseMergeCourseNumMap.containsKey(result.getId())) {
+				result.setBeMerged(courseMergeCourseNumMap.get(result.getId()) > 0 ? true : false);
+			}
+			result.setStudentNum(courseScheduleStudentNumMap.getOrDefault(result.getId(), 0));
+
+			MusicGroupBasicDto musicGroupBasicDto = cooperationMap.get(result.getId().toString());
+			if(null != musicGroupBasicDto){
+				result.setCooperationOrgan(musicGroupBasicDto.getCooperationOrganName());
+			}
+		}
+		return results;
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void practiceCourseAdjust(CourseSchedule courseSchedule) {
         SysUser user = sysUserService.getUser();

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

@@ -186,6 +186,8 @@ public class ExportServiceImpl implements ExportService {
     private CloudTeacherOrderDao cloudTeacherOrderDao;
     @Autowired
     private OssPluginContext ossPluginContext;
+    @Autowired
+    private SysTenantConfigService sysTenantConfigService;
 
     private static final ExecutorService exportExecutorService = Executors.newFixedThreadPool(10);
     @Autowired
@@ -352,7 +354,6 @@ public class ExportServiceImpl implements ExportService {
         exportFuncMap.put(ExportEnum.EXPORT_STUDENT_SERVE_INFO, (info) -> exportStudentServeInfo(info));
         exportFuncMap.put(ExportEnum.EXPORT_OPERATING_REPORT_NEW, (info) -> exportOperatingNew(info));
         exportFuncMap.put(ExportEnum.EXPORT_INDEX_COOP, (info) -> exportIndexCoop(info));
-        exportFuncMap.put(ExportEnum.EXPORT_COURSE_INCOME, (info) -> exportCourseIncome(getQueryInfo(info, ExportCourseIncomeQueryInfo.class, false)));
         exportFuncMap.put(ExportEnum.CLOUD_COACH_ACTIVATION_DETAILS, info -> exportCloudCoachActivationDetails(info));
 
 
@@ -384,6 +385,7 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.EXPORT_OA_SUMMARY_EXPENSES, info -> exportOaSummaryExpenses(info));
         exportManageFuncMap.put(ExportEnum.EXPORT_OA_SUMMARY_EXPENSES_DETAIL, info -> exportOaSummaryExpensesDetail(info));
         exportManageFuncMap.put(ExportEnum.EXPORT_OPERATING_SUMMARY_INCOME, info -> exportOperatingSummaryIncome(info));
+        exportManageFuncMap.put(ExportEnum.EXPORT_COURSE_INCOME, (info) -> exportCourseIncome(info));
 
     }
 
@@ -405,6 +407,19 @@ public class ExportServiceImpl implements ExportService {
                 managerDownload.getName());
     }
 
+    private HttpResponseResult exportCourseIncome(Map<String, Object> info){
+        ExportCourseScheduleQueryInfo queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info), ExportCourseScheduleQueryInfo.class);
+        SysUser sysUser = sysUserService.getUser();
+        String organId = organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIds(),sysUser.getIsSuperAdmin());
+        queryInfo.setOrganIds(organId);
+        Integer tenantId = TenantContextHolder.getTenantId();
+        ManagerDownload managerDownload = this.saveManagerDownload(ExportTypeEnum.EXPORT_COURSE_INCOME, sysUser.getId());
+        TenantContextHolder.setTenantId(tenantId);
+        HttpResponseResult succeed = this.asyncExport(() -> this.exportSuperCourseSchedules(queryInfo, managerDownload), managerDownload.getName());
+        TenantContextHolder.clearTenantId();
+        return succeed;
+    }
+
     private HttpResponseResult exportOperatingSummaryIncome(Map<String, Object> info) {
         String month = getParam(info, "month", String.class);
         Map<String, Object> params = new HashMap<>(1);
@@ -465,10 +480,6 @@ public class ExportServiceImpl implements ExportService {
         return indexService.indexCoop(organId,startTime,endTime);
     }
 
-    private List<ExportCourseIncomeDto> exportCourseIncome(ExportCourseIncomeQueryInfo queryInfo){
-        return courseScheduleService.exportCourseIncome(queryInfo.getDate());
-    }
-
 
     //导出对账单
     @Override
@@ -2836,13 +2847,30 @@ public class ExportServiceImpl implements ExportService {
     public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) {
         try {
             List<CourseScheduleEndDto> rows = courseScheduleService.endFindCourseSchedules(queryInfo).getRows();
-            for (CourseScheduleEndDto row : rows) {
-                row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
-            }
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "乐团主管", "课程编号", "课程组编号", "开始时间", "结束时间","班级声部", "课程名称", "课程类型", "教学模式",
+//            for (CourseScheduleEndDto row : rows) {
+//                row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
+//            }
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "乐团主管", "课程编号", "课程组编号", "开始时间",
+                    "结束时间","班级声部", "课程名称", "课程类型", "教学模式",
                     "教学点", "课程状态", "指导老师",  "助教", "是否点名", "是否有考勤申诉", "预计上课人数", "合作单位"}, new String[]{
                     "organName", "educationTeacherName", "id", "musicGroupId", "startClassTime", "endClassTime", "subjectName", "name",
-                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName",  "teachingUserNames", "isCallNames.msg", "isComplaints", "studentNum", "cooperationOrgan"}, rows);
+                    "courseScheduleType", "teachMode.msg", "schoolName", "status.msg", "teacherName",  "teachingUserNames",
+                    "isCallNames.msg", "isComplaints != null && isComplaints == '1' ? '是':'否'", "studentNum", "cooperationOrgan"}, rows);
+            exportManagerDownload(workbook, managerDownload);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    @Override
+    public void exportSuperCourseSchedules(ExportCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload) {
+        try {
+            List<CourseScheduleEndDto> rows = courseScheduleService.exportSuperCourseSchedules(queryInfo);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "乐团主管", "课程编号", "课程组编号", "开始时间",
+                    "结束时间","班级声部", "课程名称", "课程类型", "教学模式",
+                    "教学点", "课程状态", "指导老师",  "助教", "是否点名", "是否有考勤申诉", "预计上课人数", "合作单位", "课酬", "课程收入"}, new String[]{
+                    "organName", "educationTeacherName", "id", "musicGroupId", "startClassTime", "endClassTime", "subjectName", "name",
+                    "courseScheduleType", "teachMode.msg", "schoolName", "status.msg", "teacherName",  "teachingUserNames",
+                    "isCallNames.msg", "isComplaints != null && isComplaints == '1' ? '是':'否'", "studentNum", "cooperationOrgan", "expectSalary", "expectPrice"}, rows);
             exportManagerDownload(workbook, managerDownload);
         } catch (Exception e) {
             e.printStackTrace();

+ 34 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -75,6 +75,8 @@
         <result column="is_complaints_" property="isComplaints"/>
         <result column="merged_course_ids_" property="mergedCourseIds"/>
         <result column="teachingTeacherIds" property="teachingTeacherIds"/>
+        <result column="expect_salary_" property="expectSalary"/>
+        <result column="expect_price_" property="expectPrice"/>
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.CourseScheduleDto" id="courseScheduleDto" extends="CourseSchedule">
@@ -2514,6 +2516,37 @@
           AND CONCAT(class_date_, ' ', end_class_time_) &lt; NOW() AND pre_course_flag_ = 0
     </select>
 
+    <select id="exportSuperCourseSchedules" resultMap="CourseScheduleEndDto">
+        SELECT
+        cs.id_ id_,cs.new_course_id_,cs.group_type_,cs.type_,cs.music_group_id_,cs.class_group_id_,
+        cs.status_,cs.name_,cs.class_date_,CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
+        CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
+        cs.actual_teacher_id_,cs.teach_mode_,cs.type_,cs.schoole_id_,cs.create_time_,cs.is_lock_,
+        cs.organ_id_,cs.member_flag_,cs.new_course_id_,
+        CASE WHEN COUNT(CASE WHEN sa.id_ IS NULL OR (sa.status_ = 'LEAVE' AND sa.remark_ IS NOT NULL) THEN NULL ELSE 1 END) > 0 THEN 1 ELSE 0 END isCallNames,
+        CASE WHEN COUNT(CASE WHEN ta.is_complaints_ = 1 THEN 1 ELSE NULL END) > 0 THEN '1' ELSE '0' END is_complaints_,
+        GROUP_CONCAT(distinct CASE WHEN csts.teacher_role_ = 'TEACHING' THEN csts.user_id_ END) teachingTeacherIds,
+        SUM(csts.expect_salary_) expect_salary_,SUM(cssp.expect_price_) expect_price_
+        FROM
+        course_schedule cs
+        LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
+        left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
+        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+        WHERE cs.del_flag_ = '0' AND cs.pre_course_flag_ = 0
+        <if test="startTime != null and startTime != ''">
+            AND cs.class_date_ BETWEEN #{startTime} AND #{endTime}
+        </if>
+        <if test="organIds != null and organIds.size > 0">
+            AND cs.organ_id_ IN
+            <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                #{organId}
+            </foreach>
+        </if>
+        GROUP BY cs.class_date_, cs.start_class_time_, cs.id_
+        ORDER BY cs.class_date_, cs.start_class_time_, cs.id_,cs.organ_id_
+    </select>
+
     <sql id="endFindCourseSchedulesCondition">
         <where>
             cs.del_flag_ = '0' AND cs.pre_course_flag_ = 0 and cs.tenant_id_ = #{tenantId}
@@ -2523,7 +2556,7 @@
 
     <select id="endFindCourseSchedules" resultMap="CourseScheduleEndDto">
         SELECT
-            cs.id_ id_,cs.new_course_id_,cs.group_type_,cs.music_group_id_,cs.class_group_id_,
+            cs.id_ id_,cs.new_course_id_,cs.group_type_,cs.type_,cs.music_group_id_,cs.class_group_id_,
             cs.status_,cs.name_,cs.class_date_,CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
             CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
             cs.actual_teacher_id_,cs.teach_mode_,cs.type_,cs.schoole_id_,cs.create_time_,cs.is_lock_,

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -1177,6 +1177,14 @@
     <select id="getCourseStudentNumsByGroupId" resultType="java.lang.Integer">
         SELECT t2.student_num_ FROM vip_group t1 JOIN vip_group_category t2 ON (t1.vip_group_category_id_ = t2.id_) WHERE t1.id_ = #{groupId}
     </select>
+    <select id="findVipGroupTypeMaps" resultType="java.util.Map">
+        select vg.id_ 'key',vgc.name_ 'value' from vip_group vg
+        left join vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
+        where vg.id_ IN
+        <foreach collection="vipGroupIds" item="groupId" open="(" close=")" separator=",">
+            #{groupId}
+        </foreach>
+    </select>
 
     <update id="del">
         UPDATE vip_group SET del_flag_ = 1 WHERE id_ = #{id}