Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 5 năm trước cách đây
mục cha
commit
072a384421
27 tập tin đã thay đổi với 512 bổ sung142 xóa
  1. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 15 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  3. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  4. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java
  5. 12 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentManageDao.java
  6. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDao.java
  7. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  8. 79 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  9. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  10. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  11. 60 46
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  12. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolServiceImpl.java
  14. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  15. 52 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  16. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  17. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  18. 8 3
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  19. 1 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  20. 10 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  21. 19 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  22. 8 0
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  23. 90 25
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  24. 18 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  25. 2 2
      mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java
  26. 2 1
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  27. 68 22
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -637,4 +637,11 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      */
     int deleteByGroup(@Param("groupId") String groupId,
                       @Param("groupType")GroupType groupType);
+
+    /**
+     * 获取vip所有班级列表
+     * @param vipGroupIds
+     * @return
+     */
+    Set<Integer> queryClassGroupIds(@Param("vipGroupIds") Set<Long> vipGroupIds);
 }

+ 15 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java

@@ -85,29 +85,38 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
     String queryTeachingNames(Long classGroupId);
 
     /**
+     * @param classGroupIds: 班级编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper>
      * @describe 根据班级编号获取教师班级关联记录
      * @author Joburgess
      * @date 2020/1/3
-     * @param classGroupIds: 班级编号列表
-     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper>
      */
     List<ClassGroupTeacherMapDto> findByClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds);
 
     /**
      * 修改老师
+     *
      * @param classGroupIds
      * @param teacherId
      */
     void updateTeacher(@Param("classGroupIds") Set<Integer> classGroupIds, @Param("teacherId") Integer teacherId);
 
     /**
-     * @describe 根据团体删除班级
-     * @author Joburgess
-     * @date 2020/2/17
      * @param groupId:
      * @param groupType:
      * @return int
+     * @describe 根据团体删除班级
+     * @author Joburgess
+     * @date 2020/2/17
      */
     int deleteByGroup(@Param("groupId") String groupId,
-                      @Param("groupType")GroupType groupType);
+                      @Param("groupType") GroupType groupType);
+
+    /**
+     * 获取班级主教老师
+     * @param classGroupIds
+     * @param teacherRole
+     * @return
+     */
+    List<ClassGroupTeacherMapper> findByClassGroupIdsAndType(@Param("classGroupIds") List<Integer> classGroupIds, @Param("teacherRole") String teacherRole);
 }

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

@@ -210,4 +210,18 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return
      */
     MusicGroup findByClassId(Integer groupId);
+
+    /**
+     * 获取用户所在乐团名
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer,String>> queryUserMusicNames(@Param("userIds") Set<Integer> userIds);
+
+    /**
+     * 获取用户再乐团的状态
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer,String>> queryUserMusicStatus(@Param("userIds") Set<Integer> userIds);
 }

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

@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface OrganizationDao extends BaseDAO<Integer, Organization> {
 
@@ -38,6 +39,13 @@ public interface OrganizationDao extends BaseDAO<Integer, Organization> {
     List<Map<Integer,String>> findOrganNameMap(String organIds);
 
     /**
+     * 根据分部编号获取分部名称map
+     * @param organIds
+     * @return
+     */
+    List<Map<Integer,String>> findOrganNameMapList(@Param("organIds") Set<Integer> organIds);
+
+    /**
      * 获取分部名称
      * @param organId
      * @return

+ 12 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentManageDao.java

@@ -206,14 +206,14 @@ public interface StudentManageDao {
      * 获取未激活,有课的列表
      * @return
      */
-    List<StudentHasCourseDto> queryHasCourseStudent(@Param("organId") String organId);
+    List<StudentManageListDto> queryHasCourseStudent(Map<String, Object> params);
 
     /**
      * 当前用户是否有课
      * @param userId
      * @return
      */
-    Long getHasCourse(Integer userId);
+    Integer getHasCourse(Integer userId);
 
     /**
      * 获取签到学员数
@@ -258,19 +258,26 @@ public interface StudentManageDao {
      * @param userIds
      * @return
      */
-    List<Map<Integer,Integer>> getHasPracticeCourse(@Param("userIds") List<Integer> userIds);
+    List<Map<Integer,Integer>> getHasPracticeCourse(@Param("userIds") Set<Integer> userIds);
 
     /**
      * 是否激活
      * @param userIds
      * @return
      */
-    List<Map<Integer,Integer>> getIsActive(@Param("userIds") List<Integer> userIds);
+    List<Map<Integer,Integer>> getIsActive(@Param("userIds") Set<Integer> userIds);
 
     /**
      * 是否预约陪练课
      * @param userIds
      * @return
      */
-    List<Map<Integer,Integer>> getIsMake(@Param("userIds") List<Integer> userIds);
+    List<Map<Integer,Integer>> getIsMake(@Param("userIds") Set<Integer> userIds);
+
+    /**
+     * 获取用户所属声部
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer,Integer>> querySubjectNames(@Param("userIds") Set<Integer> userIds);
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDao.java

@@ -5,6 +5,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 public interface SysUserCashAccountDao extends BaseDAO<Integer, SysUserCashAccount> {
 	
@@ -22,6 +23,6 @@ public interface SysUserCashAccountDao extends BaseDAO<Integer, SysUserCashAccou
 	 * @param userIds: 用户编号列表
 	 * @return java.util.List<com.ym.mec.biz.dal.entity.SysUserCashAccount>
 	 */
-	List<SysUserCashAccount> findByUserIds(@Param("userIds") List<Integer> userIds);
+	List<SysUserCashAccount> findByUserIds(@Param("userIds") Set<Integer> userIds);
 
 }

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

@@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 
@@ -321,4 +322,17 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 
     VipGroup findVipGroupInfo(@Param("id") Integer id, @Param("classGroupId") Integer classGroupId);
 
+    /**
+     * 获取用户所在vip名
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer,String>> queryUserVipNames(@Param("userIds") Set<Integer> userIds);
+
+    /**
+     * 获取用户所在vip状态
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer,String>> queryUserVipStatus(@Param("userIds") Set<Integer> userIds);
 }

+ 79 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -45,15 +45,85 @@ public class StudentManageListDto {
     @ApiModelProperty(value = "课程余额")
     private BigDecimal courseBalance;
     
-    private Boolean isActive;
+    private YesOrNoEnum isActive;
 
-    private Boolean isMake;
+    private YesOrNoEnum isMake;
 
-    private Long hasCourse;
+    private YesOrNoEnum hasCourse;
 
     @ApiModelProperty(value = "是否有陪练课")
     private YesOrNoEnum hasPracticeCourse;
 
+    private String musicGroupName;
+
+    private Integer organId;
+
+    private String organName;
+
+    private String subjectName;
+
+    private String musicGroupStatus;
+
+    private String vipGroupName;
+
+    private String vipGroupStatus;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getMusicGroupStatus() {
+        return musicGroupStatus;
+    }
+
+    public void setMusicGroupStatus(String musicGroupStatus) {
+        this.musicGroupStatus = musicGroupStatus;
+    }
+
+    public String getVipGroupName() {
+        return vipGroupName;
+    }
+
+    public void setVipGroupName(String vipGroupName) {
+        this.vipGroupName = vipGroupName;
+    }
+
+    public String getVipGroupStatus() {
+        return vipGroupStatus;
+    }
+
+    public void setVipGroupStatus(String vipGroupStatus) {
+        this.vipGroupStatus = vipGroupStatus;
+    }
+
     public YesOrNoEnum getHasPracticeCourse() {
         return hasPracticeCourse;
     }
@@ -62,19 +132,19 @@ public class StudentManageListDto {
         this.hasPracticeCourse = hasPracticeCourse;
     }
 
-    public Boolean getIsMake() {
+    public YesOrNoEnum getIsMake() {
         return isMake;
     }
 
-    public void setIsMake(Boolean make) {
+    public void setIsMake(YesOrNoEnum make) {
         isMake = make;
     }
 
-    public Long getHasCourse() {
+    public YesOrNoEnum getHasCourse() {
         return hasCourse;
     }
 
-    public void setHasCourse(Long hasCourse) {
+    public void setHasCourse(YesOrNoEnum hasCourse) {
         this.hasCourse = hasCourse;
     }
 
@@ -166,11 +236,11 @@ public class StudentManageListDto {
         this.parentsName = parentsName;
     }
 
-	public Boolean getIsActive() {
+	public YesOrNoEnum getIsActive() {
 		return isActive;
 	}
 
-	public void setIsActive(Boolean isActive) {
+	public void setIsActive(YesOrNoEnum isActive) {
 		this.isActive = isActive;
 	}
 }

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

@@ -20,7 +20,7 @@ public interface StudentManageService {
      * @Date: 2019/9/19
      * 根据员工分页获取该员工所属部门下所有学生
      */
-    PageInfo findStudentsByOrganId(StudentManageQueryInfo queryInfo);
+    PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo);
 
     /**
      * @Author: Joburgess
@@ -137,7 +137,7 @@ public interface StudentManageService {
      * 获取有课没有激活的列表(变更为所有有课学生)
      * @return
      */
-    List<StudentHasCourseDto> queryHasCourseStudent(String organId);
+    List<StudentManageListDto> queryHasCourseStudent(StudentManageQueryInfo queryInfo);
 
     /**
      * 课表列表签到详情统计接口

+ 7 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -908,13 +908,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<Map<Long, Integer>> vipGroupOverCourses = courseScheduleDao.countGroupOverCourse(musicGroupIds,"VIP");
         Map<Long, Integer> vipGroupOverCourseMaps = MapUtil.convertIntegerMap(vipGroupOverCourses);
 
-//        List<ClassGroup> byClassGroupIds = classGroupDao.findByClassGroupIds(classGroupIds);
+        List<ClassGroupTeacherMapper> bishopTeachers = classGroupTeacherMapperDao.findByClassGroupIdsAndType(classGroupIds, "BISHOP");
+        Map<Integer, Integer> classGroupTeacherMap = bishopTeachers.stream().collect(Collectors.toMap(ClassGroupTeacherMapper::getClassGroupId, ClassGroupTeacherMapper::getUserId));
 //        Map<Integer, ClassGroup> classGorupIdMap = byClassGroupIds.stream().collect(Collectors.toMap(ClassGroup::getId, classGroup -> classGroup));
 
         //统计班级人数
         List<Map<Integer, Integer>> classGroupStudentNumMaps = classGroupStudentMapperDao.countClassGroupsStudentNum(classGroupIds,null);
         Map<Integer, Long> classGroupStudentNumMap = MapUtil.convertIntegerMap(classGroupStudentNumMaps);
         Map<Integer, Long> currentClassTimes = MapUtil.convertIntegerMap(courseScheduleDao.countCurrentNumByClassGroupId(classGroupIds,user.getId()));
+        Map<Integer, Long> noStartClassTimes = MapUtil.convertIntegerMap(courseScheduleDao.countCurrentNumByClassGroupId(classGroupIds,null));
+
         teacherMusicClassGroup.forEach(teacherClassGroupDto -> {
             if(teacherClassGroupDto.getType() == ClassGroupTypeEnum.PRACTICE){
                 String[] studentNums = classGroupStudentMapperDao.findStudentNumByClassGroupId(teacherClassGroupDto.getClassGroupId());
@@ -953,6 +956,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 //            teacherClassGroupDto.setSurplusClassTimes(classGroup.getTotalClassTimes() - classGroup.getCurrentClassTimes());
             Long aLong = currentClassTimes.get(teacherClassGroupDto.getClassGroupId().intValue());
             teacherClassGroupDto.setSurplusClassTimes(aLong==null?0:aLong.intValue());
+            Long classGroupNoStartClassTimes = noStartClassTimes.get(teacherClassGroupDto.getClassGroupId().intValue());
+            classGroupNoStartClassTimes = classGroupNoStartClassTimes==null?0:classGroupNoStartClassTimes;
             Long studentNum = classGroupStudentNumMap.get(teacherClassGroupDto.getClassGroupId().intValue());
             teacherClassGroupDto.setStudentNum(Objects.isNull(studentNum) ? 0 : studentNum.intValue());
 
@@ -970,7 +975,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
             //剩余课程为显示陪练报告入口rul
             if(teacherClassGroupDto.getType() == ClassGroupTypeEnum.PRACTICE){
-               if(teacherClassGroupDto.getSurplusClassTimes().equals(0)){
+               if(classGroupNoStartClassTimes.intValue()==0 && classGroupTeacherMap.get(teacherClassGroupDto.getClassGroupId().intValue()).equals(user.getId())){
                    String studyReportUrl = sysConfigDao.findConfigValue(SysConfigService.TEACHER_STUDY_REPORT_URL);
                    teacherClassGroupDto.setStudyReportUrl(studyReportUrl+teacherClassGroupDto.getClassGroupId());
                }

+ 60 - 46
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -1621,12 +1621,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             	throw new BizException("已结束的课程需要调整课程状态");
             }
             
-			if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-				if (newCourseSchedule.getTeachMode() != oldCourseSchedule.getTeachMode() && newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
-					throw new BizException("不允许将线上课调整为线下课");
-				}
-			}
-            
             /*if (oldCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.VIP)) {
                 VipGroup vipGroup = vipGroupDao.get(Long.valueOf(oldCourseSchedule.getMusicGroupId()));
                 if(Objects.isNull(vipGroup)){
@@ -1639,6 +1633,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             if (Objects.isNull(newCourseSchedule.getGroupType())) {
                 newCourseSchedule.setGroupType(oldCourseSchedule.getGroupType());
             }
+            
+			if (newCourseSchedule.getGroupType() == GroupType.VIP) {
+				if (newCourseSchedule.getTeachMode() != oldCourseSchedule.getTeachMode() && newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
+					throw new BizException("不允许将线上课调整为线下课");
+				}
+			}
+			
             if (Objects.isNull(newCourseSchedule.getActualTeacherId())) {
                 newCourseSchedule.setActualTeacherId(oldCourseSchedule.getActualTeacherId());
             }
@@ -1833,58 +1834,71 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					// 重新生成课酬
 					if (newCourseSchedule.getGroupType() == GroupType.MUSIC) {
 						Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = musicGroupSalaryMap.get(teacherId);
+
+						if (map == null) {
+							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+						}
+
 						TeacherDefaultMusicGroupSalary tdms = map.get(newCourseSchedule.getType());
-						if (tdms != null) {
-							// 乐团结算方式
-							String settlementType = musicGroupSettlementsMap.get(courseScheduleId);
-							int unitMinutes = 30;
-
-							// 如果当前教师是在指定日期之后入职的,则按照3.0的方式结算
-							Teacher teacher = teacherMap.get(teacherId);
-							if (Objects.nonNull(teacher.getEntryDate())
-									&& (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-								settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
+						if (tdms == null) {
+							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+						}
+
+						// 乐团结算方式
+						String settlementType = musicGroupSettlementsMap.get(courseScheduleId);
+						int unitMinutes = 30;
+
+						// 如果当前教师是在指定日期之后入职的,则按照3.0的方式结算
+						Teacher teacher = teacherMap.get(teacherId);
+						if (Objects.nonNull(teacher.getEntryDate())
+								&& (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
+							settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
+						}
+						if (StringUtils.equals(settlementType, "TEACHER_DEFAULT")) {
+							if (newCourseSchedule.getType() == CourseScheduleType.CLASSROOM) {
+								unitMinutes = 40;
+							} else if (newCourseSchedule.getType() == CourseScheduleType.HIGH) {
+								unitMinutes = 45;
+							}
+							if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
+								ts.setExpectSalary(new BigDecimal(tdms.getMainTeacher30MinSalary().doubleValue() * newMinutes / unitMinutes));
+							} else {
+								ts.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher30MinSalary().doubleValue() * newMinutes / unitMinutes));
 							}
-							if (StringUtils.equals(settlementType, "TEACHER_DEFAULT")) {
-								if (newCourseSchedule.getType() == CourseScheduleType.CLASSROOM) {
-									unitMinutes = 40;
-								} else if (newCourseSchedule.getType() == CourseScheduleType.HIGH) {
-									unitMinutes = 45;
-								}
-								if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
-									ts.setExpectSalary(new BigDecimal(tdms.getMainTeacher30MinSalary().doubleValue() * newMinutes / unitMinutes));
-								} else {
-									ts.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher30MinSalary().doubleValue() * newMinutes / unitMinutes));
-								}
-							} else if (StringUtils.equals(settlementType, "GRADIENT_SALARY")) {
-								unitMinutes = 90;
-								if (newCourseSchedule.getType() == CourseScheduleType.CLASSROOM) {
-									unitMinutes = 40;
-								} else if (newCourseSchedule.getType() == CourseScheduleType.HIGH) {
-									unitMinutes = 45;
-								}
-								if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
-									ts.setExpectSalary(new BigDecimal(tdms.getMainTeacher90MinSalary().doubleValue() * newMinutes / unitMinutes));
-								} else {
-									ts.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher90MinSalary().doubleValue() * newMinutes / unitMinutes));
-								}
+						} else if (StringUtils.equals(settlementType, "GRADIENT_SALARY")) {
+							unitMinutes = 90;
+							if (newCourseSchedule.getType() == CourseScheduleType.CLASSROOM) {
+								unitMinutes = 40;
+							} else if (newCourseSchedule.getType() == CourseScheduleType.HIGH) {
+								unitMinutes = 45;
+							}
+							if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
+								ts.setExpectSalary(new BigDecimal(tdms.getMainTeacher90MinSalary().doubleValue() * newMinutes / unitMinutes));
+							} else {
+								ts.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher90MinSalary().doubleValue() * newMinutes / unitMinutes));
 							}
 						}
+					
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
 						Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(teacherId);
+						if (map == null) {
+							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+						}
 						if (vipGroup == null) {
 							throw new BizException("课程[{}]记录存在异常,请联系管理员", courseScheduleId);
 						}
 						TeacherDefaultVipGroupSalary tdvs = map.get(vipGroup.getVipGroupCategoryId());
-						if (tdvs != null) {
-							if (newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
-								ts.setExpectSalary(tdvs.getOfflineClassesSalary());
-							} else {
-								ts.setExpectSalary(tdvs.getOfflineClassesSalary());
-							}
+						if (tdvs == null) {
+							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+						}
+						if (newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
+							ts.setExpectSalary(tdvs.getOfflineClassesSalary());
+						} else {
+							ts.setExpectSalary(tdvs.getOnlineClassesSalary());
 						}
 					} else if (newCourseSchedule.getGroupType() == GroupType.PRACTICE) {
-						List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+						List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
+								.queryByUserId(teacherId);
 						if (teacherDefaultPracticeGroupSalaryList != null && teacherDefaultPracticeGroupSalaryList.size() > 0) {
 							ts.setExpectSalary(teacherDefaultPracticeGroupSalaryList.get(0).getMainTeacherSalary());
 						} else {

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

@@ -2007,7 +2007,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             dataList = practiceGroupDao.findAllByOrgan(params);
             if (dataList != null && dataList.size() > 0) {
                 List<Integer> subjectIds = dataList.stream().map(practiceGroup -> practiceGroup.getSubjectId()).distinct().collect(Collectors.toList());
-                List<Integer> organIds = dataList.stream().map(practiceGroup -> practiceGroup.getOrganId()).distinct().collect(Collectors.toList());
+                Set<Integer> organIds = dataList.stream().map(practiceGroup -> practiceGroup.getOrganId()).collect(Collectors.toSet());
                 List<String> practiceGroupIds = dataList.stream().map(e -> String.valueOf(e.getId())).distinct().collect(Collectors.toList());
 
                 List<ClassGroup> classGroupsByVipGroups = classGroupDao
@@ -2020,7 +2020,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 Map<String, Long> currentClassTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.countCourseScheduleNum(practiceGroupIds, GroupType.PRACTICE.getCode()));
                 //声部名称列表
                 Map<Long, String> subjectNames = MapUtil.convertMybatisMap(subjectDao.findBySubjecIds(StringUtils.join(subjectIds, ",")));
-                Map<Integer, String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds, ",")));
+                Map<Integer, String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
                 dataList.forEach(e -> {
                     e.setSubjectName(subjectNames.get(e.getSubjectId().intValue()));
                     e.setOrganName(organNames.get(e.getOrganId()));

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

@@ -64,7 +64,7 @@ public class SchoolServiceImpl extends BaseServiceImpl<Integer, School>  impleme
 		PageInfo<School> schoolPageInfo = queryPage(queryInfo);
 		List<School> rows = schoolPageInfo.getRows();
 		Set<Integer> organIds = rows.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
-		Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds,",")));
+		Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
 		rows.forEach(e->{
 			e.setOrganName(organNames.get(e.getOrganId()));
 		});

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

@@ -144,7 +144,7 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
                 userIds = new ArrayList<>();
             }
             Set<Integer> operatorIds = rows.stream().map(e -> e.getOperatorId()).collect(Collectors.toSet());
-            Map<Integer, String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds, ",")));
+            Map<Integer, String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
             Map<Integer, String> operatorNames = MapUtil.convertMybatisMap(teacherDao.queryNameByIds(StringUtils.join(operatorIds, ",")));
             Map<Integer, String> userNames = MapUtil.convertMybatisMap(teacherDao.queryUsernameByIds(userIds));
             rows.forEach(e -> {

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

@@ -4,8 +4,12 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.StudentManageService;
@@ -33,12 +37,16 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Autowired
     private StudentManageDao studentManageDao;
     @Autowired
+    private OrganizationDao organizationDao;
+    @Autowired
     private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
     @Autowired
     private CourseScheduleStudentPaymentDao scheduleStudentPaymentDao;
     @Autowired
     private TeacherDao teacherDao;
     @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
     private StudentRegistrationDao studentRegistrationDao;
     @Autowired
     private ImFeignService imFeignService;
@@ -54,7 +62,7 @@ public class StudentManageServiceImpl implements StudentManageService {
     private SysUserCashAccountDao sysUserCashAccountDao;
 
     @Override
-    public PageInfo findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
+    public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
         PageInfo<StudentManageListDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Boolean hasCourse = queryInfo.getHasCourse();
         Boolean hasPracticeCourse = queryInfo.getHasPracticeCourse();
@@ -95,24 +103,54 @@ public class StudentManageServiceImpl implements StudentManageService {
         if (count > 0) {
             pageInfo.setTotal(count);
             dataList = studentManageDao.findStudentsByOrganId(params);
-            List<Integer> userIds = dataList.stream()
-                    .map(StudentManageListDto::getUserId).collect(Collectors.toList());
+            Set<Integer> userIds = dataList.stream().map(StudentManageListDto::getUserId).collect(Collectors.toSet());
+//            Set<Integer> organIds = dataList.stream().map(StudentManageListDto::getOrganId).collect(Collectors.toSet());
             List<SysUserCashAccount> byUserIds = sysUserCashAccountDao.findByUserIds(userIds);
-//            Map<Integer,Long> hasCourseMap = MapUtil.convertIntegerMap(studentManageDao.queryStudentHasCourse(userIds));
             Map<Integer, SysUserCashAccount> collect = byUserIds.stream()
                     .collect(Collectors.toMap(SysUserCashAccount::getUserId, sysUserCashAccount -> sysUserCashAccount));
             Map<Integer,Integer> hasPracticeCourseMap = MapUtil.convertIntegerMap(studentManageDao.getHasPracticeCourse(userIds));
+            //获取用户分部
+            /*Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
+            //获取所在乐团
+            Map<Integer,String> musicGroupNames = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicNames(userIds));
+            //获取所在vip
+            Map<Integer,String> vipGroupNames = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipNames(userIds));
+            //获取所在乐团状态
+            Map<Integer,String> musicGroupStatus = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicStatus(userIds));
+            //获取所在vip状态
+            Map<Integer,String> vipGroupStatus = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipStatus(userIds));
+            //获取所在声部
+            Map<Integer,String> subjectNames = MapUtil.convertMybatisMap(studentManageDao.querySubjectNames(userIds));*/
             dataList.forEach(e -> {
+                /*e.setOrganName(organNames.get(e.getOrganId()));
+                e.setMusicGroupName(musicGroupNames.get(e.getUserId()));
+                e.setVipGroupName(vipGroupNames.get(e.getUserId()));
+                e.setSubjectName(subjectNames.get(e.getUserId()));
+                String musicStatus = musicGroupStatus.get(e.getUserId());
+                if(StringUtils.isNotEmpty(musicStatus)){
+                    String[] split = musicStatus.split(",");
+                    for (int i = 0;i < split.length;i++){
+                        e.setMusicGroupStatus(ClassGroupStudentStatusEnum.valueOf(split[i]).getMsg()+" ");
+                    }
+                }
+                String vipStatus = vipGroupStatus.get(e.getUserId());
+                if(StringUtils.isNotEmpty(vipStatus)){
+                    String[] split = vipStatus.split(",");
+                    for (int i = 0;i < split.length;i++){
+                        e.setVipGroupStatus(ClassGroupStudentStatusEnum.valueOf(split[i]).getMsg()+" ");
+                    }
+                }*/
                 if(hasCourse == null){
-                    e.setHasCourse(studentManageDao.getHasCourse(e.getUserId()));
+                    Integer course = studentManageDao.getHasCourse(e.getUserId());
+                    e.setHasCourse(course==null?YesOrNoEnum.NO:course==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
                 }else {
                     if(hasCourse){
-                        e.setHasCourse(1L);
+                        e.setHasCourse(YesOrNoEnum.YES);
                     }else {
-                        e.setHasCourse(0L);
+                        e.setHasCourse(YesOrNoEnum.NO);
                     }
                 }
-                e.setHasPracticeCourse(hasPracticeCourseMap.get(e.getUserId()) == null? YesOrNoEnum.NO:YesOrNoEnum.YES);
+                e.setHasPracticeCourse(hasPracticeCourseMap.get(e.getUserId()) == null?YesOrNoEnum.NO:YesOrNoEnum.YES);
                 if(collect.get(e.getUserId()) != null){
                     e.setCourseBalance(collect.get(e.getUserId()).getCourseBalance());
                 }
@@ -376,9 +414,11 @@ public class StudentManageServiceImpl implements StudentManageService {
     }
 
     @Override
-    public List<StudentHasCourseDto> queryHasCourseStudent(String organId) {
-        List<StudentHasCourseDto> studentHasCourseDtos = studentManageDao.queryHasCourseStudent(organId);
-        List<Integer> userIds = studentHasCourseDtos.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+    public List<StudentManageListDto> queryHasCourseStudent(StudentManageQueryInfo queryInfo) {
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        List<StudentManageListDto> studentHasCourseDtos = studentManageDao.queryHasCourseStudent(params);
+        /*Set<Integer> userIds = studentHasCourseDtos.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
         Map<Integer,Integer> hasPracticeCourseMap = MapUtil.convertIntegerMap(studentManageDao.getHasPracticeCourse(userIds));
         Map<Integer,Integer> isActiveMap = MapUtil.convertIntegerMap(studentManageDao.getIsActive(userIds));
         Map<Integer,Integer> isMakeMap = MapUtil.convertIntegerMap(studentManageDao.getIsMake(userIds));
@@ -386,7 +426,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             e.setHasPracticeCourse(hasPracticeCourseMap.get(e.getUserId()) == null?YesOrNoEnum.NO:YesOrNoEnum.YES);
             e.setIsActive(isActiveMap.get(e.getUserId()) == null?YesOrNoEnum.YES:YesOrNoEnum.NO);
             e.setIsMake(isMakeMap.get(e.getUserId()) == null?YesOrNoEnum.NO:YesOrNoEnum.YES);
-        });
+        });*/
         return studentHasCourseDtos;
     }
 

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

@@ -392,7 +392,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 			Map<Integer,Integer> demoNumMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(demoGroupDao.countTeacherDemoGroupNum(teacherIds))),HashMap.class);
 
 			Set<Integer> organIds = rows.stream().map(e -> e.getTeacherOrganId()).collect(Collectors.toSet());
-			Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds,",")));
+			Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
 			rows.forEach(e->{
 //				e.setSubjectName(subjectDao.findBySubIds(e.getSubjectId()));
 				e.setOrganName(organNames.get(e.getTeacherOrganId()));

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -2638,6 +2638,15 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				vipGroup.setUpdateTime(date);
 			}
 			vipGroupDao.batchUpdate(vipGroupList);
+			Set<Long> collect = vipGroupList.stream().map(e -> e.getId()).collect(Collectors.toSet());
+			Set<Integer> classGroupIds = classGroupDao.queryClassGroupIds(collect);
+			//解散群
+			List<ImGroupModel> imGroupModels = new ArrayList<>();
+			ImGroupMember[] imGroupMember = {new ImGroupMember("")};
+			for (Integer classGroupId : classGroupIds) {
+				imGroupModels.add(new ImGroupModel(classGroupId + "", imGroupMember, ""));
+			}
+			imFeignService.groupBatchDismiss(imGroupModels);
 		}
 		List<VipGroup> normalVipGroupList = vipGroupDao.queryNormalStatusList();
 		if (!CollectionUtils.isEmpty(normalVipGroupList)){

+ 8 - 3
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -1107,7 +1107,12 @@
         </foreach>
         GROUP BY cs.id_
     </select>
-
-
-
+    <select id="queryClassGroupIds" resultType="java.lang.Integer">
+        SELECT cg.id_ FROM class_group cg
+        WHERE cg.music_group_id_ IN
+        <foreach collection="vipGroupIds" item="groupId" open="(" close=")" separator=",">
+            #{groupId}
+        </foreach>
+        AND cg.group_type_ = 'VIP'
+    </select>
 </mapper>

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

@@ -388,6 +388,6 @@
     <select id="queryNewStudentListByCourseScheduleId" resultMap="ClassGroupStudentMapper">
       	SELECT cgsm.* FROM class_group_student_mapper cgsm LEFT JOIN course_schedule cs ON cgsm.class_group_id_= cs.class_group_id_
 		LEFT JOIN course_schedule_student_payment cssp on cssp.course_schedule_id_ = cs.id_ and cssp.user_id_ = cgsm.user_id_
-		WHERE cssp.id_ IS NULL AND cgsm.status_ != 'QUIT' and cssp.course_schedule_id_ = #{courseScheduleId}
+		WHERE cssp.id_ IS NULL AND cgsm.status_ != 'QUIT' and cs.id_ = #{courseScheduleId}
     </select>
 </mapper>

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml

@@ -188,4 +188,14 @@
     <delete id="deleteByGroup">
         DELETE FROM class_group_teacher_mapper WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </delete>
+
+    <select id="findByClassGroupIdsAndType" resultMap="ClassGroupTeacherMapper">
+        SELECT * FROM class_group_teacher_mapper WHERE class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+            #{classGroupId}
+        </foreach>
+        <if test="teacherRole != null ">
+            AND teacher_role_ = #{teacherRole}
+        </if>
+    </select>
 </mapper>

+ 19 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -391,4 +391,23 @@
 		WHERE cg.id_ = #{groupId} AND cg.group_type_ = 'MUSIC'
 		AND mg.status_ = 'PROGRESS' AND cg.del_flag_ = 0
 	</select>
+    <select id="queryUserMusicNames" resultType="java.util.Map">
+		SELECT sr.user_id_ 'key',GROUP_CONCAT(mg.name_) 'value' FROM student_registration sr
+		LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+		WHERE mg.status_ = 'PROGRESS' AND sr.user_id_ IN
+		<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+			#{userId}
+		</foreach>
+		GROUP BY sr.user_id_
+	</select>
+	<select id="queryUserMusicStatus" resultType="java.util.Map">
+		SELECT sr.user_id_ 'key',GROUP_CONCAT(sr.music_group_status_) 'value'
+		FROM student_registration sr
+		LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+		WHERE mg.status_ = 'PROGRESS' AND sr.user_id_ IN
+		<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+			#{userId}
+		</foreach>
+		GROUP BY sr.user_id_
+	</select>
 </mapper>

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

@@ -121,6 +121,14 @@
         SELECT o.id_ 'key',o.name_ 'value' FROM organization o WHERE FIND_IN_SET(o.id_,#{organIds})
     </select>
 
+    <select id="findOrganNameMapList" resultType="java.util.Map">
+        SELECT o.id_ 'key',o.name_ 'value' FROM organization o
+        WHERE o.id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+    </select>
+
     <select id="getOrganName" resultType="java.lang.String">
         SELECT GROUP_CONCAT(name_) FROM organization WHERE FIND_IN_SET(id_,#{organId})
     </select>

+ 90 - 25
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -2,21 +2,6 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.ym.mec.biz.dal.dao.StudentManageDao">
 
-    <resultMap id="studentManageListDto" type="com.ym.mec.biz.dal.dto.StudentManageListDto">
-        <result property="userId" column="user_id_"/>
-        <result property="realName" column="real_name_"/>
-        <result property="nation" column="nation_"/>
-        <result property="parentsPhone" column="parents_phone_"/>
-        <result property="parentsName" column="real_name_"/>
-        <result property="gender" column="gender_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result property="username" column="username_"/>
-        <result property="birthdate" column="birthdate_"/>
-        <result property="currentGrade" column="current_grade_"/>
-        <result property="currentClass" column="current_class_"/>
-        <result property="isActive" column="isActive_"/>
-        <result property="isMake" column="isMake_"/>
-        <!--<collection property="musicGroups" resultMap="musicGroup" javaType="list"/>-->
-    </resultMap>
 
     <resultMap id="studentManageCourseListDto" type="com.ym.mec.biz.dal.dto.StudentManageCourseListDto">
         <result property="classGroupId" column="class_group_id_" />
@@ -123,7 +108,7 @@
 
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
         SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,
-        su.birthdate_,su.nation_,
+        su.birthdate_,su.nation_,su.organ_id_,
         CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_,
         CASE WHEN pla.id_ IS NULL THEN 0 ELSE 1 END isMake_
         FROM sys_user su
@@ -135,7 +120,7 @@
     <sql id="findStudentsByOrganIdSql">
         <where>
                 su.user_type_ LIKE '%STUDENT%' AND su.del_flag_ = 0
-            <if test="organId != null">
+            <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(su.organ_id_,#{organId})
             </if>
             <if test="search != null and search != ''">
@@ -578,7 +563,7 @@
                 #{item}
             </foreach>
         </if>
-        <if test="organId != null">
+        <if test="organId != null and organId != ''">
             AND FIND_IN_SET(su.organ_id_,#{organId})
         </if>
         <if test="search != null and search != ''">
@@ -701,25 +686,95 @@
             #{item}
         </foreach>
     </select>
-    <select id="queryHasCourseStudent" resultMap="StudentHasCourseDtoMap">
-        SELECT su.id_,GROUP_CONCAT(DISTINCT su.username_) username_,GROUP_CONCAT(DISTINCT mg.name_) music_group_name_,
-        GROUP_CONCAT(DISTINCT vg.name_) vip_group_name_,GROUP_CONCAT(DISTINCT o.name_) organ_name_,GROUP_CONCAT(DISTINCT s.name_) music_group_subject_
+    <resultMap id="studentManageListDto" type="com.ym.mec.biz.dal.dto.StudentManageListDto">
+        <result property="userId" column="user_id_"/>
+        <result property="realName" column="real_name_"/>
+        <result property="nation" column="nation_"/>
+        <result property="parentsPhone" column="parents_phone_"/>
+        <result property="parentsName" column="real_name_"/>
+        <result property="gender" column="gender_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="username" column="username_"/>
+        <result property="birthdate" column="birthdate_"/>
+        <result property="currentGrade" column="current_grade_"/>
+        <result property="currentClass" column="current_class_"/>
+        <result property="isActive" column="isActive_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="isMake" column="isMake_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="hasCourse" column="hasCourse_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="hasPracticeCourse" column="hasPracticeCourse_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="musicGroupStatus" column="music_group_status_"/>
+        <result property="vipGroupName" column="vip_group_name_"/>
+        <result property="vipGroupStatus" column="vip_group_status_"/>
+        <result property="organName" column="organ_name_"/>
+        <result property="subjectName" column="music_group_subject_"/>
+        <result property="courseBalance" column="balance_"/>
+    </resultMap>
+    <select id="queryHasCourseStudent" resultMap="studentManageListDto">
+        SELECT su.id_ user_id_,su.username_,su.gender_,GROUP_CONCAT(DISTINCT sr.parents_name_)parents_name_,
+        GROUP_CONCAT(DISTINCT sr.parents_phone_)parents_phone_,
+        GROUP_CONCAT(DISTINCT mg.name_) music_group_name_,
+        GROUP_CONCAT(DISTINCT CASE WHEN sr.music_group_status_ = 'NORMAL' THEN '在读'
+        WHEN sr.music_group_status_ = 'LEAVE' THEN '请假'
+        WHEN sr.music_group_status_ = 'QUIT' THEN '退班'
+        WHEN sr.music_group_status_ = 'QUIT_SCHOOL' THEN '休学' ELSE NULL END) music_group_status_,
+        GROUP_CONCAT(DISTINCT vg.name_) vip_group_name_,
+        GROUP_CONCAT(DISTINCT CASE WHEN cgsm.status_ = 'NORMAL' THEN '在读'
+        WHEN cgsm.status_ = 'LEAVE' THEN '请假'
+        WHEN cgsm.status_ = 'QUIT' THEN '退班'
+        WHEN cgsm.status_ = 'QUIT_SCHOOL' THEN '休学' ELSE NULL END) vip_group_status_,
+        GROUP_CONCAT(DISTINCT o.name_) organ_name_,
+        GROUP_CONCAT(DISTINCT s.name_) music_group_subject_,
+        CASE WHEN GROUP_CONCAT(DISTINCT cs.id_) IS NULL THEN 0 ELSE 1 END hasCourse_,
+        CASE WHEN GROUP_CONCAT(DISTINCT pla.id_) IS NULL THEN 0 ELSE 1 END isMake_,
+        CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_,
+        CASE WHEN GROUP_CONCAT(DISTINCT cssp1.id_) IS NULL THEN 0 ELSE 1 END hasPracticeCourse_,
+        suca.balance_
         FROM sys_user su
         LEFT JOIN course_schedule_student_payment cssp ON su.id_ = cssp.user_id_
+        LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_ AND cs.status_ != 'OVER'
         LEFT JOIN music_group mg ON cssp.music_group_id_ = mg.id_ AND cssp.group_type_ = 'MUSIC'
         LEFT JOIN vip_group vg ON cssp.music_group_id_ = vg.id_ AND cssp.group_type_ = 'VIP'
         LEFT JOIN organization o ON su.organ_id_ = o.id_
         LEFT JOIN student_registration sr ON su.id_ = sr.user_id_ AND cssp.music_group_id_ = sr.music_group_id_
         LEFT JOIN `subject` s ON s.id_ = sr.actual_subject_id_
-        WHERE cssp.id_ IS NOT NULL AND su.user_type_ LIKE '%STUDENT%'
-        AND (sr.music_group_status_ != 'QUIT' OR sr.id_ IS NULL)
-        AND (mg.status_ = 'PROGRESS' OR vg.group_status_ IN (2,4))
+        LEFT JOIN practice_lesson_apply pla on pla.user_id_ = su.id_
+        LEFT JOIN course_schedule_student_payment cssp1 ON su.id_ = cssp1.user_id_ AND cssp1.group_type_ = 'PRACTICE'
+        LEFT JOIN class_group_student_mapper cgsm ON su.id_ = cgsm.user_id_ AND cgsm.group_type_ = 'VIP'
+        LEFT JOIN sys_user_cash_account suca ON su.id_ = suca.user_id_
+        WHERE su.user_type_ LIKE '%STUDENT%'
+        <if test="hasPracticeCourse != null and hasPracticeCourse == true">
+            AND cssp1.id_ IS NOT NULL
+        </if>
+        <if test="hasPracticeCourse != null and hasPracticeCourse == false">
+            AND cssp1.id_ IS NULL
+        </if>
+        <if test="hasCourse != null and hasCourse == true">
+            AND cs.id_ IS NOT NULL
+        </if>
+        <if test="hasCourse != null and hasCourse == false">
+            AND cs.id_ IS NULL
+        </if>
+        <if test="isActive != null and isActive == true">
+            AND su.password_ IS NOT NULL
+        </if>
+        <if test="isActive != null and isActive == false">
+            AND su.password_ IS NULL
+        </if>
         <if test="organId != null and organId != ''">
             AND FIND_IN_SET(su.organ_id_,#{organId})
         </if>
+        <if test="search != null and search != ''">
+            AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ LIKE CONCAT('%',#{search},'%'))
+        </if>
+        <if test="isMake != null and isMake == true">
+            AND pla.id_ IS NOT NULL
+        </if>
+        <if test="isMake != null and isMake == false">
+            AND pla.id_ IS NULL
+        </if>
         GROUP BY su.id_
     </select>
-    <select id="getHasCourse" resultType="java.lang.Long">
+    <select id="getHasCourse" resultType="java.lang.Integer">
         SELECT COUNT(DISTINCT su.id_) FROM sys_user su
         LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = su.id_
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
@@ -785,5 +840,15 @@
             #{item}
         </foreach>
     </select>
+    <select id="querySubjectNames" resultType="java.util.Map">
+        SELECT sr.user_id_ 'key',GROUP_CONCAT(s.name_) 'value' FROM student_registration sr
+		LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+		LEFT JOIN `subject` s ON sr.actual_subject_id_ = s.id_
+		WHERE mg.status_ = 'PROGRESS' AND sr.user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+		GROUP BY sr.user_id_
+    </select>
 
 </mapper>

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

@@ -890,4 +890,22 @@
         LEFT JOIN school s2 on vg.teacher_school_id_ = s2.id_
         WHERE vg.id_ = #{id} AND cg.id_=#{classGroupId} AND cg.group_type_='VIP'
     </select>
+    <select id="queryUserVipNames" resultType="java.util.Map">
+        SELECT cgsm.user_id_ 'key',GROUP_CONCAT(vg.name_)'value' FROM class_group_student_mapper cgsm
+        LEFT JOIN vip_group vg ON cgsm.music_group_id_ = vg.id_
+        WHERE vg.group_status_ IN (2,4) AND cgsm.user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY cgsm.user_id_
+    </select>
+    <select id="queryUserVipStatus" resultType="java.util.Map">
+        SELECT cgsm.user_id_ 'key',GROUP_CONCAT(cgsm.status_)'value' FROM class_group_student_mapper cgsm
+        LEFT JOIN vip_group vg ON cgsm.music_group_id_ = vg.id_
+        WHERE vg.group_status_ IN (2,4) AND cgsm.user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY cgsm.user_id_
+    </select>
 </mapper>

+ 2 - 2
mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java

@@ -193,9 +193,9 @@ public class POIUtil {
 		if (dataset == null) {
 			throw new UtilException("数据集不能为空");
 		}
-		if (dataset.size() > MAX_DATA_SIZE) {
+		/*if (dataset.size() > MAX_DATA_SIZE) {
 			throw new UtilException("数据集太大,不能导出.最大数据集不能超过" + MAX_DATA_SIZE);
-		}
+		}*/
 		HSSFWorkbook workbook = new HSSFWorkbook();
 		HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
 		/************** 设置单元格样式 *************/

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

@@ -228,6 +228,7 @@ public class ExportController extends BaseController {
             e.printStackTrace();
         }
     }
+/*
 
     @ApiOperation(value = "导出学员是否有课")
     @PostMapping("export/studentHasCourse")
@@ -253,7 +254,7 @@ public class ExportController extends BaseController {
         } catch (Exception e) {
             e.printStackTrace();
         }
-    }
+    }*/
 
 
     @ApiOperation(value = "导出乐器采购清单")

+ 68 - 22
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dto.StudentManageListDto;
 import com.ym.mec.biz.dal.dto.UpdateStudentFeeDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.page.*;
@@ -13,19 +14,23 @@ import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
 @Api(tags = "学生管理")
-@RequestMapping("studentManage")
 @RestController
 public class StudentManageController extends BaseController {
 
@@ -43,9 +48,50 @@ public class StudentManageController extends BaseController {
     private EmployeeDao employeeDao;
 
     private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
+    @ApiOperation(value = "导出学员是否有课")
+    @PostMapping("export/studentHasCourse")
+    @PreAuthorize("@pcs.hasPermissions('export/studentHasCourse')")
+    public void studentHasCourse(HttpServletResponse response, StudentManageQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+                throw new BizException("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                    throw new BizException("非法请求");
+                }
+            }
+        }
+        List<StudentManageListDto> rows = studentManageService.queryHasCourseStudent(queryInfo);
+        if(rows.size() > 50000){
+            throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
+        }
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
+                    "家长联系电话", "是否激活", "是否有课", "是否预约陪练课","是否有陪练课", "课程余额(元)",
+                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态"}, new String[]{
+                    "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone",
+                    "isActive.msg","hasCourse.msg","isMake.msg","hasPracticeCourse.msg","courseBalance","musicGroupName",
+                    "subjectName","musicGroupStatus","vipGroupName","vipGroupStatus"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            workbook.write(response.getOutputStream());
+            workbook.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
     @ApiOperation(value = "获取学生列表")
-    @GetMapping("/queryStudentList")
+    @GetMapping("studentManage/queryStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentList')")
     public Object queryStudentList(StudentManageQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -69,14 +115,14 @@ public class StudentManageController extends BaseController {
     }
 
     @ApiOperation(value = "学员注册")
-    @PostMapping("/register")
+    @PostMapping("studentManage/register")
     @PreAuthorize("@pcs.hasPermissions('studentManage/register')")
     public Object studentRegister(SysUser sysUser){
         return succeed(studentManageService.studentRegister(sysUser));
     }
 
     @ApiOperation(value = "修改学员信息")
-    @PostMapping("/studentUpdate")
+    @PostMapping("studentManage/studentUpdate")
     @PreAuthorize("@pcs.hasPermissions('studentManage/studentUpdate')")
     public Object studentUpdate(Integer id, String phone, String username, Integer gender, String realName, Date birthdate,String nation){
         SysUser sysUser = new SysUser();
@@ -91,14 +137,14 @@ public class StudentManageController extends BaseController {
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--获取学员列表")
-    @GetMapping("/queryMusicGroupStudent")
+    @GetMapping("studentManage/queryMusicGroupStudent")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryMusicGroupStudent')")
     public Object queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo){
         return succeed(studentManageService.queryMusicGroupStudent(queryInfo));
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--学员列表--查看班级")
-    @GetMapping("/queryStudentClassGroup")
+    @GetMapping("studentManage/queryStudentClassGroup")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentClassGroup')")
     @ApiImplicitParams({@ApiImplicitParam(name = "teacherId", value = "学生编号", required = true, dataType = "Integer"),
             @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
@@ -110,70 +156,70 @@ public class StudentManageController extends BaseController {
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--学员列表,汇总数据接口")
-    @GetMapping("/musicGroupStudentsSum")
+    @GetMapping("studentManage/musicGroupStudentsSum")
     @PreAuthorize("@pcs.hasPermissions('studentManage/musicGroupStudentsSum')")
     public Object musicGroupStudentsSum(String musicGroupId){
         return succeed(studentManageService.musicGroupStudentsSum(musicGroupId));
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--点名总览")
-    @GetMapping("/queryMusicGroupStudentsSign")
+    @GetMapping("studentManage/queryMusicGroupStudentsSign")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryMusicGroupStudentsSign')")
     public Object queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo){
         return succeed(studentManageService.queryMusicGroupStudentsSign(queryInfo));
     }
 
     @ApiOperation(value = "根据学生ID获取学生基本报名信息")
-    @GetMapping("/findStudentBaseInfo")
+    @GetMapping("studentManage/findStudentBaseInfo")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentBaseInfo')")
     public Object findStudentBaseInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
         return succeed(studentManageService.findStudentManageBaseInfo(userId));
     }
 
     @ApiOperation(value = "根据学生ID获取其所在的乐团")
-    @GetMapping("/findStudentMusicGroups")
+    @GetMapping("studentManage/findStudentMusicGroups")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentMusicGroups')")
     public Object findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) Integer userId){
         return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
     }
 
     @ApiOperation(value = "根据乐团获取排课列表")
-    @GetMapping("/findStudentCourses")
+    @GetMapping("studentManage/findStudentCourses")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentCourses')")
     public Object findStudentCourses(StudentManageCourseQueryInfo queryInfo){
         return succeed(studentManageService.findStudentCourseList(queryInfo));
     }
 
     @ApiOperation(value = "获取学生签到列表")
-    @GetMapping("/findStudentAttendances")
+    @GetMapping("studentManage/findStudentAttendances")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentAttendances')")
     public Object findStudentAttendances(StudentManageAttendanceQueryInfo queryInfo){
         return succeed(studentManageService.findStudentAttendances(queryInfo));
     }
 
     @ApiOperation(value = "获取学生vip课程")
-    @GetMapping("/findStudentVipGroups")
+    @GetMapping("studentManage/findStudentVipGroups")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentVipGroups')")
     public Object findStudentVipGroups(StudentManageCourseQueryInfo queryInfo){
         return succeed(studentManageService.findStudentVipGroups(queryInfo));
     }
 
     @ApiOperation(value = "获取学生vip班级列表")
-    @GetMapping("/findStudentVipGroupClass")
+    @GetMapping("studentManage/findStudentVipGroupClass")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentVipGroupClass')")
     public Object findStudentVipGroupClass(StudentManageVipClassQueryInfo queryInfo){
         return succeed(studentManageService.findStudentVipGroupClass(queryInfo));
     }
 
     @ApiOperation(value = "获取用户默认账户基本信息")
-    @GetMapping("/getUserCashAccountBaseInfo")
+    @GetMapping("studentManage/getUserCashAccountBaseInfo")
     @PreAuthorize("@pcs.hasPermissions('studentManage/getUserCashAccountBaseInfo')")
     public Object getUserCashAccountBaseInfo(Integer userId){
         return succeed(studentManageService.getStudentAccountBaseInfo(userId));
     }
 
     @ApiOperation(value = "获取学员扣费记录列表")
-    @GetMapping("/queryStudentPayment")
+    @GetMapping("studentManage/queryStudentPayment")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentPayment')")
     public Object queryStudentPayment(TeacherPaymentRecordInfo queryInfo){
         return succeed(studentManageService.queryStudentPayment(queryInfo));
@@ -184,7 +230,7 @@ public class StudentManageController extends BaseController {
      * @param mobile
      * @return
      */
-    @GetMapping(value = "/queryUserByPhone")
+    @GetMapping(value = "studentManage/queryUserByPhone")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryUserByPhone')")
     public Object queryUserByPhone(String mobile) {
         return succeed(studentRegistrationService.queryUserByPhone(mobile));
@@ -194,7 +240,7 @@ public class StudentManageController extends BaseController {
      * 修改学员缴费金额和缴费周期
      * @return
      */
-    @PostMapping(value = "/updateStudentFee")
+    @PostMapping(value = "studentManage/updateStudentFee")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFee')")
     public Object updateStudentFee(UpdateStudentFeeDto studentFeeDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -210,7 +256,7 @@ public class StudentManageController extends BaseController {
      * 修改学员缴费周期锁定状态
      * @return
      */
-    @PostMapping(value = "/updateStudentFeeIsLock")
+    @PostMapping(value = "studentManage/updateStudentFeeIsLock")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFeeIsLock')")
     public Object updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -226,7 +272,7 @@ public class StudentManageController extends BaseController {
      * 获取学员缴费日历信息
      * @return
      */
-    @GetMapping(value = "/findMusicGroupStudentFee")
+    @GetMapping(value = "studentManage/findMusicGroupStudentFee")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findMusicGroupStudentFee')")
     public Object findMusicGroupStudentFee(Integer studentId,String musicGroupId) {
         if(studentId == null || StringUtils.isEmpty(musicGroupId)){
@@ -243,7 +289,7 @@ public class StudentManageController extends BaseController {
      * 获取课程学员作业列表
      * @return
      */
-    @GetMapping(value = "/findStudentCourseHomeworks")
+    @GetMapping(value = "studentManage/findStudentCourseHomeworks")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentCourseHomeworks')")
     public Object findStudentCourseHomeworks(QueryInfo queryInfo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -257,7 +303,7 @@ public class StudentManageController extends BaseController {
      * 获取课程学员作业列表
      * @return
      */
-    @GetMapping(value = "/sumStudentAttendance")
+    @GetMapping(value = "studentManage/sumStudentAttendance")
     @PreAuthorize("@pcs.hasPermissions('studentManage/sumStudentAttendance')")
     public Object sumStudentAttendance(Integer courseScheduleId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();