Browse Source

学员信息

liujc 1 year ago
parent
commit
d7e2efb869
19 changed files with 608 additions and 77 deletions
  1. 2 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/enums/YesOrNoEnum.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  3. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  5. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EInGroupStatus.java
  6. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ELessonTrainingType.java
  7. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/YesOrNoEnum.java
  8. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/StudentPlusMapper.java
  9. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolActivityWrapper.java
  10. 56 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentWrapper.java
  11. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  12. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  13. 276 44
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  14. 20 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  15. 28 1
      mec-biz/src/main/resources/config/mybatis/SchoolActivityMapper.xml
  16. 28 0
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  17. 77 1
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  18. 9 16
      mec-biz/src/main/resources/config/mybatis/StudentPlusMapper.xml
  19. 38 11
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 2 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/enums/YesOrNoEnum.java

@@ -1,11 +1,13 @@
 package com.ym.mec.auth.api.enums;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum YesOrNoEnum implements BaseEnum<Integer, YesOrNoEnum> {
     NO(0,"否"),
     YES(1,"是");
 
+    @EnumValue
     private Integer code;
     private String msg;
 

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

@@ -536,4 +536,6 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     * @date 2023/5/5 17:08
     */
     List<String> findNormalByCooperationId(@Param("coopId") Integer coopId);
+
+    List<MusicGroup> userMusicGroup(@Param("studentId") Integer studentId, @Param("coopId") Integer coopId, @Param("statusList") List<StudentMusicGroupStatusEnum> statusList);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.biz.dal.school.dto.ClassesForDayDto;
 import com.ym.mec.biz.dal.school.dto.CourseStudentDto;
+import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Param;
@@ -372,4 +373,12 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
     * @date 2023/5/6 11:43
     */
     List<CourseStudentDto> queryCourseStudentList(@Param("courseId") Long courseId);
+
+    /**
+     * 学生考勤
+     *
+     * @param studentAttendanceQuery
+     * @return
+     */
+    List<StudentAttendance> getStudentAttendance(@Param("param") StudentWrapper.StudentAttendanceQuery studentAttendanceQuery);
 }

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

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.page.StudentCourseConsumerQueryInfo;
 import com.ym.mec.biz.dal.vo.TempCampUserTrainingSequenceVo;
+import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -365,4 +366,10 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
 
     List<TempCampUserTrainingSequenceVo> getStudentCloudStudySequenceDaysV2(@Param("studentIds") List<Integer> studentIds,@Param("campId") String campId);
+
+    /**
+     * 学生作业 完成信息
+     *
+     */
+    List<StudentWrapper.StudentHomework> getStudentHomework(@Param("param") StudentWrapper.StudentAttendanceQuery studentAttendanceQuery);
 }

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

@@ -10,6 +10,8 @@ public enum EInGroupStatus implements BaseEnum<String, EInGroupStatus> {
     // 在团状态 在团 IN 退团 OUT 申请退团 APPLY_OUT
     IN("IN", "在团"),
     OUT("OUT", "退团"),
+    QUIT_SCHOOL("QUIT_SCHOOL","休学"),
+    APPLY("APPLY","报名"),
     APPLY_OUT("APPLY_OUT", "申请退团");
 
     @EnumValue

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

@@ -27,7 +27,12 @@ public enum ELessonTrainingType implements BaseEnum<String, ELessonTrainingType>
     /**
      * 额外练习
      */
-    EXTRA( "额外练习")
+    EXTRA( "额外练习"),
+
+    /**
+     * 评测
+     */
+    EVALUATION( "评测"),
     ;
 
     private String desc;

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

@@ -1,11 +1,13 @@
 package com.ym.mec.biz.dal.enums;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum YesOrNoEnum implements BaseEnum<Integer, YesOrNoEnum> {
     NO(0,"否"),
     YES(1,"是");
 
+    @EnumValue
     private Integer code;
     private String msg;
 

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/StudentPlusMapper.java

@@ -15,5 +15,4 @@ public interface StudentPlusMapper extends BaseMapper<Student> {
 
     List<StudentWrapper.StudentList> userPage(@Param("page") IPage<StudentWrapper.StudentList> page, @Param("param") StudentWrapper.StudentQuery queryInfo);
 
-    List<Student> findStudentByIds(@Param("studentIds") List<Integer> studentIds);
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolActivityWrapper.java

@@ -51,6 +51,18 @@ public class SchoolActivityWrapper {
         @ApiModelProperty("合作单位")
         private Integer cooperationOrganId;
 
+        @ApiModelProperty("学生ID")
+        private Integer studentId;
+
+        @ApiModelProperty("乐团ID")
+        private Long musicGroupId;
+
+        @ApiModelProperty("开始时间")
+        private Date startTime;
+
+        @ApiModelProperty("结束时间")
+        private Date endTime;
+
 
         @ApiModelProperty("活动类型 开放日 OPEN_DAY 汇演 PERFORMANCE 音乐会 CONCERT 比赛 COMPETITION 讲座 LECTURE 校庆 SCHOOL_DAY 迎宾 WELCOME 其他 OTHER")
         private ESchoolActivityType type;

+ 56 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentWrapper.java

@@ -1,7 +1,11 @@
 package com.ym.mec.biz.dal.wrapper;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.biz.dal.enums.EInGroupStatus;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import com.ym.mec.biz.dal.enums.StandardEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
@@ -9,6 +13,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
 
 public class StudentWrapper {
 
@@ -41,11 +47,34 @@ public class StudentWrapper {
         @ApiModelProperty("学生ID")
         private Integer studentId;
 
-
+        @ApiModelProperty("学生乐团状态")
+        private List<StudentMusicGroupStatusEnum> statusList;
 
     }
 
 
+    @Data
+    @ApiModel("StudentAttendanceQuery-学生考勤查询")
+    public static class StudentAttendanceQuery {
+
+
+        @ApiModelProperty("乐团ID")
+        private Long musicGroupId;
+
+        @ApiModelProperty("乐团ID集合")
+        private List<Long> musicGroupIds;
+
+        @ApiModelProperty("学生ID集合")
+        private List<Integer> studentIds;
+
+        @ApiModelProperty("开始时间")
+        private Date startTime;
+
+        @ApiModelProperty("结束时间")
+        private Date  endTime;
+
+    }
+
 
     @Data
     @ApiModel("StudentStat-学生统计")
@@ -60,6 +89,23 @@ public class StudentWrapper {
     }
 
 
+
+    @Data
+    @ApiModel("StudentHomework-学生作业")
+    public static class StudentHomework{
+
+
+        @ApiModelProperty("学生ID")
+        private Integer studentId;
+
+        @ApiModelProperty("达标状态")
+        private StandardEnum standardFlag;
+
+        @ApiModelProperty("作业类型")
+        private ELessonTrainingType type;
+
+    }
+
     @Data
     @ApiModel("StudentList-学生列表")
     public static class StudentList{
@@ -70,6 +116,10 @@ public class StudentWrapper {
         @ApiModelProperty("学生姓名")
         private String studentName;
 
+        @ApiModelProperty("乐团ID")
+        @JsonIgnore
+        private String musicGroupIds;
+
         @ApiModelProperty("学生头像")
         private String studentAvatar;
 
@@ -136,7 +186,7 @@ public class StudentWrapper {
         @ApiModelProperty(value = "艺术实践次数")
         private Integer artPracticeCount;
 
-        @ApiModelProperty(value = "在团状态 在团 IN 退团 OUT 申请退团 APPLY_OUT")
+        @ApiModelProperty(value = "在团状态 在团 IN 退团 OUT 申请退团 APPLY_OUT 报名:APPLY 休学:QUIT_SCHOOL")
         private EInGroupStatus inGroupStatus;
 
     }
@@ -160,6 +210,10 @@ public class StudentWrapper {
         @ApiModelProperty(value = "学生ID")
         private Integer studentId;
 
+        @NotNull(message = "乐团ID不能为空")
+        @ApiModelProperty(value = "乐团ID")
+        private Long musicGroupId;
+
         @ApiModelProperty(value = "合作机构ID")
         private Integer cooperationOrganId;
 

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.common.page.PageInfo;
@@ -202,4 +203,31 @@ public interface StudentService extends BaseService<Integer, Student> {
      * 学校端-学员分页
      */
     IPage<StudentWrapper.StudentList> userPage(IPage<StudentWrapper.StudentList> page, StudentWrapper.StudentQuery queryInfo);
+
+    /**
+     * 学生端-学生详情
+     */
+    StudentWrapper.StudentDetail userDetail(StudentWrapper.StudentQuery queryInfo);
+
+    /**
+     *
+     * 查询学生的乐团
+     *
+     * @param studentId 学生id
+     * @param coopId   合作商id
+     * @param statusList 乐团状态
+     */
+    List<MusicGroup> userMusicGroup(Integer studentId, Integer coopId, List<StudentMusicGroupStatusEnum> statusList);
+
+    /**
+     * 跟新乐团班级/年级信息
+     *
+     * @param updateStudent 更新信息
+     */
+    Boolean updateGrade(StudentWrapper.UpdateStudent updateStudent);
+
+    /**
+     * 学校端-学生统计
+     */
+    StudentWrapper.StudentStat userCount(StudentWrapper.StudentQuery queryInfo);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -987,7 +987,10 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
             // 设置作业完成
             if (Boolean.TRUE.equals(finish)) {
                 studentCourseHomework.setStandardFlag(StandardEnum.STANDARD);
+            } else {
+                studentCourseHomework.setStandardFlag(StandardEnum.NOT_STANDARD);
             }
+            studentCourseHomework.setStatus(YesOrNoEnum.YES);
             studentCourseHomework.setUpdateTime(new Date());
             studentCourseHomework.setSubmitTime(new Date());
             studentCourseHomeworkDao.update(studentCourseHomework);
@@ -1023,7 +1026,10 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
             // 设置作业完成
             if (Boolean.TRUE.equals(finish)) {
                 exercisesReply.setStandardFlag(StandardEnum.STANDARD);
+            } else {
+                exercisesReply.setStandardFlag(StandardEnum.NOT_STANDARD);
             }
+            exercisesReply.setStatus(1);
             exercisesReply.setUpdateTime(new Date());
             exercisesReply.setSubmitTime(new Date());
             extracurricularExercisesReplyDao.update(exercisesReply);

+ 276 - 44
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -1,14 +1,20 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+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.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.mapper.SchoolActivityMapper;
 import com.ym.mec.biz.dal.mapper.StudentPlusMapper;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.wrapper.SchoolActivityWrapper;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
@@ -88,6 +94,21 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private StudentPlusMapper studentPlusMapper;
 
+    @Autowired
+    private StudentAttendanceDao studentAttendanceDao;
+
+    @Autowired
+    private StudentRegistrationService studentRegistrationService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private SchoolActivityMapper schoolActivityMapper;
+
+    @Autowired
+    private MusicGroupQuitDao musicGroupQuitDao;
+
     @Override
     public BaseDAO<Integer, Student> getDAO() {
         return studentDao;
@@ -100,20 +121,20 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-	public boolean register(StudentPreRegistration studentPreRegistration) {
+    public boolean register(StudentPreRegistration studentPreRegistration) {
         TenantContextHolder.setTenantId(studentPreRegistration.getTenantId());
         Date date = new Date();
-    	// 判断用户是否存在
+        // 判断用户是否存在
         SysUser user = teacherDao.getUserWithPhone(studentPreRegistration.getPhone());
         Integer userId = null;
 
         if(user != null && user.getId() != null){
-        	if (user.getUserType().contains("STUDENT")) {
-        		throw new BizException("您已注册,请直接下载APP!");
-        	} else { // 当前用户是 SYSTEM, TEACHER 添加学生
+            if (user.getUserType().contains("STUDENT")) {
+                throw new BizException("您已注册,请直接下载APP!");
+            } else { // 当前用户是 SYSTEM, TEACHER 添加学生
                 user.setUserType(user.getUserType() + ",STUDENT");
             }
-        	userId = user.getId();
+            userId = user.getId();
             if (studentPreRegistration.getOrganId() != null) {
                 user.setOrganId(studentPreRegistration.getOrganId());
             }
@@ -127,7 +148,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             user.setUpdateTime(date);
             teacherDao.updateUser(user);
         }else{
-        	user = new SysUser();
+            user = new SysUser();
             user.setPhone(studentPreRegistration.getPhone());
             user.setOrganId(studentPreRegistration.getOrganId());
             user.setRealName(studentPreRegistration.getParentName());
@@ -155,31 +176,31 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         TenantContextHolder.clearTenantId();
         
         if(studentPreRegistration.getOrganId() == 59){
-        	
-        	if(student.getMembershipEndTime() == null){
-        		student.setMembershipEndTime(date);
-        	}
-        	if(student.getMembershipStartTime() == null){
-        		student.setMembershipStartTime(date);
-        	}
-        	if(student.getMemberRankSettingId() == null){
-        		student.setMemberRankSettingId(1);
-        	}
-        	//赠送一个月的会员
-        	if(student.getMembershipEndTime().before(date)){
-        		student.setMembershipEndTime(DateUtil.addMonths(date, 1));
-        		student.setMembershipStartTime(date);
-        	}else{
-        		student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), 1));
-        	}
-        	student.setUpdateTime(date);
-        	studentDao.update(student);
+
+            if(student.getMembershipEndTime() == null){
+                student.setMembershipEndTime(date);
+            }
+            if(student.getMembershipStartTime() == null){
+                student.setMembershipStartTime(date);
+            }
+            if(student.getMemberRankSettingId() == null){
+                student.setMemberRankSettingId(1);
+            }
+            //赠送一个月的会员
+            if(student.getMembershipEndTime().before(date)){
+                student.setMembershipEndTime(DateUtil.addMonths(date, 1));
+                student.setMembershipStartTime(date);
+            }else{
+                student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), 1));
+            }
+            student.setUpdateTime(date);
+            studentDao.update(student);
         }
         
         return true;
-	}
+    }
 
-	@Override
+    @Override
     public PageInfo findStudentVipGroupList(StudentQueryInfo queryInfo) {
         PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<String, Object>();
@@ -401,8 +422,8 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-	public void updateMemberRank(Integer userId, PeriodEnum periodEnum, int times, Integer memberRankSettingId) {
-    	Student student = this.get(userId);
+    public void updateMemberRank(Integer userId, PeriodEnum periodEnum, int times, Integer memberRankSettingId) {
+        Student student = this.get(userId);
         if (student == null) {
             throw new BizException("学员信息不存在");
         }
@@ -413,16 +434,16 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             student.setMembershipStartTime(nowDate);
         }
         if(student.getMembershipEndTime() != null && student.getMembershipEndTime().after(nowDate)){
-        	nowDate = student.getMembershipEndTime();
+            nowDate = student.getMembershipEndTime();
         }
         Date membershipEndTime = getMembershipEndTime(periodEnum, nowDate, times);
         //所有购买会员的额外加一天时间
         student.setMembershipEndTime(DateUtil.addDays(membershipEndTime, 1));
         student.setMemberRankSettingId(memberRankSettingId);
         this.update(student);
-	}
+    }
 
-	@Override
+    @Override
     public void updateStudentServiceTag(Integer studentId,List<Integer> studentIds,Integer serviceTag) {
         studentDao.updateStudentServiceTag(studentId, studentIds, serviceTag);
     }
@@ -432,10 +453,10 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         return studentDao.getStudentNames(studentIdList);
     }
 
-	@Override
-	public Student getLocked(Integer userId) {
-		return studentDao.getLocked(userId);
-	}
+    @Override
+    public Student getLocked(Integer userId) {
+        return studentDao.getLocked(userId);
+    }
 
     @Override
     public void cleanMember(Integer userId) {
@@ -972,7 +993,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         return result;
     }
 
-	@Override
+    @Override
     public void cleanStudentCloudStudySequenceDays() {
         studentDao.cleanStudentCloudStudySequenceDays();
     }
@@ -1302,11 +1323,21 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Override
     public IPage<StudentWrapper.StudentList> userPage(IPage<StudentWrapper.StudentList> page, StudentWrapper.StudentQuery queryInfo) {
 
+        queryInfo.setStatusList(Arrays.asList(StudentMusicGroupStatusEnum.NORMAL, StudentMusicGroupStatusEnum.QUIT, StudentMusicGroupStatusEnum.QUIT_SCHOOL));
         List<StudentWrapper.StudentList> studentLists = studentPlusMapper.userPage(page, queryInfo);
 
         if (CollectionUtils.isEmpty(studentLists)) {
             return page;
         }
+
+        // 乐团ID集合
+        List<Long> musicGroupIds = studentLists.stream()
+                .map(o -> o.getMusicGroupIds())
+                .flatMap(o -> Arrays.stream(o.split(",")))
+                .filter(Objects::nonNull)
+                .map(Long::parseLong)
+                .collect(Collectors.toList());
+
         // 设置学生姓名/头像
         List<Integer> studentIds = studentLists.stream().map(StudentWrapper.StudentList::getStudentId).collect(Collectors.toList());
 
@@ -1320,28 +1351,229 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             }
         });
         // 时间为本学期
-//        DateUtil
+        String startTerm = DateUtil.getStartTerm(new Date());
+        String endTerm = DateUtil.getEndTerm(new Date());
         // 查询考勤
+        StudentWrapper.StudentAttendanceQuery studentAttendanceQuery = new StudentWrapper.StudentAttendanceQuery();
+        studentAttendanceQuery.setStudentIds(studentIds);
+        studentAttendanceQuery.setStartTime(DateUtil.toDate(startTerm));
+        studentAttendanceQuery.setEndTime(DateUtil.toDateTime(endTerm + " 23:59:59"));
+        studentAttendanceQuery.setMusicGroupId(queryInfo.getMusicGroupId());
+        studentAttendanceQuery.setMusicGroupIds(musicGroupIds);
+        studentAttendanceData(studentLists, studentAttendanceQuery);
 
+        // 查询作业
+        studentHomeworkData(studentLists, studentAttendanceQuery);
 
 
+        return page.setRecords(studentLists);
+    }
 
-        // 查询作业
+    /**
+     * 学生端-学生详情
+     */
+    @Override
+    public StudentWrapper.StudentDetail userDetail(StudentWrapper.StudentQuery queryInfo) {
+        IPage<StudentWrapper.StudentList> studentListIPage = userPage(new Page<>(1, 1), queryInfo);
+        if (CollectionUtils.isEmpty(studentListIPage.getRecords())) {
+            return null;
+        }
+        StudentWrapper.StudentList studentList = studentListIPage.getRecords().get(0);
+        StudentWrapper.StudentDetail studentDetail = JSON.parseObject(JSON.toJSONString(studentList), StudentWrapper.StudentDetail.class);
 
+        // 查询学生信息
+        StudentRegistration studentRegister = studentRegistrationService.getStudentRegister(queryInfo.getMusicGroupId().toString(), queryInfo.getStudentId());
+        if (studentRegister == null) {
+            return studentDetail;
+        }
 
-        return page.setRecords(studentLists);
+
+        SysUser sysUser = sysUserFeignService.queryUserById(studentDetail.getStudentId());
+        if (sysUser != null) {
+            studentDetail.setGender(sysUser.getGender());
+            studentDetail.setPhone(sysUser.getPhone());
+            Student student = studentDao.get(sysUser.getId());
+            studentDetail.setCurrentGrade(student.getCurrentGrade());
+            studentDetail.setCurrentGradeNum(student.getCurrentGradeNum());
+            studentDetail.setCurrentClass(student.getCurrentClass());
+        }
+
+        // 艺术实践次数
+        SchoolActivityWrapper.SchoolActivityQuery build = SchoolActivityWrapper.SchoolActivityQuery.builder()
+                .cooperationOrganId(queryInfo.getCooperationOrganId())
+                .studentId(queryInfo.getStudentId())
+                .musicGroupId(queryInfo.getMusicGroupId())
+                .startTime(DateUtil.toDate(DateUtil.getStartTerm(new Date())))
+                .endTime(DateUtil.toDateTime(DateUtil.getEndTerm(new Date()) + " 23:59:59"))
+                .build();
+        List<SchoolActivityWrapper.SchoolActivity> schoolActivities = schoolActivityMapper.selectPage(new Page<>(1, -1), build);
+        if (!CollectionUtils.isEmpty(schoolActivities)) {
+            studentDetail.setArtPracticeCount(schoolActivities.size());
+        }
+
+        // 在团状态
+        MusicGroupQuit musicGroupQuit = musicGroupQuitDao
+                .queryByUserIdAndMusicGroupId(queryInfo.getStudentId(), queryInfo.getMusicGroupId().toString());
+
+        if (StudentMusicGroupStatusEnum.APPLY.equals(studentRegister.getMusicGroupStatus())) {
+            studentDetail.setInGroupStatus(EInGroupStatus.APPLY);
+        } else if (StudentMusicGroupStatusEnum.QUIT.equals(studentRegister.getMusicGroupStatus())) {
+            studentDetail.setInGroupStatus(EInGroupStatus.OUT);
+        } else if (StudentMusicGroupStatusEnum.NORMAL.equals(studentRegister.getMusicGroupStatus())) {
+            studentDetail.setInGroupStatus(EInGroupStatus.IN);
+            if (musicGroupQuit != null && musicGroupQuit.getStatus().equals(ApprovalStatus.PROCESSING)) {
+                studentDetail.setInGroupStatus(EInGroupStatus.APPLY_OUT);
+            }
+        } else if (StudentMusicGroupStatusEnum.QUIT_SCHOOL.equals(studentRegister.getMusicGroupStatus())) {
+            studentDetail.setInGroupStatus(EInGroupStatus.QUIT_SCHOOL);
+        }
+
+        return studentDetail;
+    }
+
+    /**
+     * 查询学生的乐团
+     *
+     * @param studentId  学生id
+     * @param coopId     合作商id
+     * @param statusList 乐团状态
+     */
+    @Override
+    public List<MusicGroup> userMusicGroup(Integer studentId, Integer coopId, List<StudentMusicGroupStatusEnum> statusList) {
+        return musicGroupDao.userMusicGroup(studentId, coopId, statusList);
+    }
+
+    /**
+     * 跟新乐团班级/年级信息
+     *
+     * @param updateStudent 更新信息
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean updateGrade(StudentWrapper.UpdateStudent updateStudent) {
+
+        Student student = studentDao.get(updateStudent.getStudentId());
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        student.setCurrentClass(updateStudent.getCurrentClass());
+        student.setCurrentGrade(updateStudent.getCurrentGrade());
+        student.setCurrentGradeNum(updateStudent.getCurrentGradeNum());
+        studentDao.update(student);
+        return true;
+
+    }
+
+    /**
+     * 学校端-学生统计
+     *
+     * @param queryInfo
+     */
+    @Override
+    public StudentWrapper.StudentStat userCount(StudentWrapper.StudentQuery queryInfo) {
+        queryInfo.setStatusList(Lists.newArrayList(StudentMusicGroupStatusEnum.NORMAL));
+        List<StudentWrapper.StudentList> studentLists = studentPlusMapper.userPage(new Page<>(1,-1), queryInfo);
+        StudentWrapper.StudentStat studentStat = new StudentWrapper.StudentStat();
+        studentStat.setStudentCount(studentLists.size());
+        queryInfo.setStatusList(Lists.newArrayList(StudentMusicGroupStatusEnum.QUIT));
+        studentLists = studentPlusMapper.userPage(new Page<>(1,-1), queryInfo);
+        studentStat.setQuitCount(studentLists.size());
+        return studentStat;
+    }
+
+    private void studentHomeworkData(List<StudentWrapper.StudentList> studentLists, StudentWrapper.StudentAttendanceQuery studentAttendanceQuery) {
+        List<StudentWrapper.StudentHomework> studentHomework = studentDao.getStudentHomework(studentAttendanceQuery);
+        if (!CollectionUtils.isEmpty(studentHomework)) {
+            Map<Integer, List<StudentWrapper.StudentHomework>> studentHomeworkMap = studentHomework.stream().collect(Collectors.groupingBy(StudentWrapper.StudentHomework::getStudentId));
+            studentLists.forEach(studentList -> {
+                List<StudentWrapper.StudentHomework> studentHomeworks = studentHomeworkMap.get(studentList.getStudentId());
+                if (!CollectionUtils.isEmpty(studentHomeworks)) {
+                    studentList.setShouldSubmitCount(studentHomeworks.size());
+                    // 合格
+                    Integer qualified = 0;
+                    // 不合格
+                    Integer unqualified = 0;
+                    // 未提交
+                    Integer unsubmit = 0;
+                    for (StudentWrapper.StudentHomework studentHomework1 : studentHomeworks) {
+                        switch (studentHomework1.getStandardFlag()) {
+                            case STANDARD:
+                                qualified++;
+                                break;
+                            case NOT_STANDARD:
+                                unqualified++;
+                                break;
+                            case NOT_START:
+                                unsubmit++;
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    studentList.setQualifiedCount(qualified);
+                    studentList.setUnqualifiedCount(unqualified);
+                    studentList.setUnsubmitCount(unsubmit);
+                    studentList.setActualSubmitCount(qualified + unqualified);
+                }
+            });
+        }
+    }
+
+    private void studentAttendanceData(List<StudentWrapper.StudentList> studentLists, StudentWrapper.StudentAttendanceQuery studentAttendanceQuery) {
+        List<StudentAttendance> studentAttendance = studentAttendanceDao.getStudentAttendance(studentAttendanceQuery);
+
+        if (!CollectionUtils.isEmpty(studentAttendance)) {
+            Map<Integer, List<StudentAttendance>> studentAttendanceMap = studentAttendance.stream().collect(Collectors.groupingBy(StudentAttendance::getUserId));
+
+            studentLists.forEach(studentList -> {
+                List<StudentAttendance> studentAttendances = studentAttendanceMap.get(studentList.getStudentId());
+                if (!CollectionUtils.isEmpty(studentAttendances)) {
+                    studentList.setShouldAttendanceCount(studentAttendances.size());
+                    // 正常数
+                    Integer narmal = 0;
+                    // 迟到数
+                    Integer late = 0;
+                    // 旷课数
+                    Integer truant = 0;
+                    // 请假数
+                    Integer leave = 0;
+                    for (StudentAttendance studentAttendance1 : studentAttendances) {
+                        switch (studentAttendance1.getStatus()) {
+                            case NORMAL:
+                                narmal++;
+                                break;
+                            case LATE:
+                                late++;
+                                break;
+                            case TRUANT:
+                                truant++;
+                                break;
+                            case LEAVE:
+                                leave++;
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    studentList.setNormalAttendanceCount(narmal);
+                    studentList.setLateCount(late);
+                    studentList.setTruancyCount(truant);
+                    studentList.setLeaveCount(leave);
+                    studentList.setActualAttendanceCount(narmal + late);
+                }
+            });
+        }
     }
 
     private Map<Integer,Student> getMapByIds(List<Integer> studentIds) {
         if (CollectionUtils.isEmpty(studentIds)) {
             return Collections.emptyMap();
         }
-        List<Student> students = studentPlusMapper.findStudentByIds(studentIds);
+        List<Student> students = studentDao.findByStudentIds(studentIds);
         if (CollectionUtils.isEmpty(students)) {
             return Collections.emptyMap();
         }
-        Map<Integer, Student> studentMap = students.stream().collect(Collectors.toMap(Student::getUserId, Function.identity()));
-        return studentMap;
+        return students.stream().collect(Collectors.toMap(Student::getUserId, Function.identity()));
     }
 
     @Transactional(rollbackFor = Exception.class)

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

@@ -1250,4 +1250,24 @@
     <select id="findNormalByCooperationId" resultType="java.lang.String">
         SELECT id_ FROM music_group WHERE cooperation_organ_id_ = #{coopId} AND status_ = 'PROGRESS'
     </select>
+
+    <select id="userMusicGroup" resultMap="MusicGroup">
+        select *
+        from music_group
+            left join student_registration on music_group.id_ = student_registration.music_group_id_
+        <where>
+            <if test="statusList != null and statusList.size() != 0">
+                and student_registration.music_group_status_ in
+                <foreach collection="statusList" item="status" open="(" close=")" separator=",">
+                    #{status}
+                </foreach>
+            </if>
+            <if test="coopId != null">
+                and music_group.cooperation_organ_id_ = #{coopId}
+            </if>
+            <if test="studentId != null">
+                and student_registration.user_id_ = #{studentId}
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -4,8 +4,35 @@
     
     <select id="selectPage" resultType="com.ym.mec.biz.dal.wrapper.SchoolActivityWrapper$SchoolActivity">
 		SELECT         
-        	t.*
+        	distinct t.*
 		FROM school_activity t
+        <if test="param.studentId != null or param.musicGroupId != null">
+            left join school_activity_detail t1 on t.id_ = t1.school_activity_id_
+            left join school_activity_detail_user t2 on t1.id_ = t2.school_activity_detail_id_
+        </if>
+        <where>
+            <if test="param.keyword != null and param.keyword != ''">
+                AND (t.name_ LIKE CONCAT('%', #{param.keyword}, '%') )
+            </if>
+            <if test="param.cooperationOrganId != null">
+                AND t.cooperation_organ_id_ = #{param.cooperationOrganId}
+            </if>
+            <if test="param.studentId != null">
+                and t2.student_id_ = #{param.studentId}
+            </if>
+            <if test="param.musicGroupId != null">
+                and t1.music_group_id_ = #{param.musicGroupId}
+            </if>
+            <if test="param.startTime != null">
+                AND t.end_time_ &gt;= #{param.startTime}
+            </if>
+            <if test="param.endTime != null">
+                AND t.start_time_ &lt;= #{param.endTime}
+            </if>
+            <if test="param.type != null">
+                AND t.type_ = #{param.type}
+            </if>
+        </where>
 	</select>
     
 </mapper>

+ 28 - 0
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -698,4 +698,32 @@
         left join student s ON s.user_id_ = cssp.user_id_
         where cssp.course_schedule_id_ = #{courseId}
     </select>
+
+    <select id="getStudentAttendance" resultMap="StudentAttendance">
+        select  *
+        from student_attendance
+        <where>
+            <if test="param.musicGroupId != null">
+                and music_group_id_ = #{param.musicGroupId}
+            </if>
+            <if test="param.studentIds != null and param.studentIds.size() != 0">
+                and user_id_ in
+                <foreach collection="param.studentIds" item="studentId" separator="," open="(" close=")">
+                    #{studentId}
+                </foreach>
+            </if>
+            <if test="param.startTime != null">
+                and create_time_ &gt;= #{param.startTime}
+            </if>
+            <if test="param.endTime != null">
+                and create_time_ &lt;= #{param.endTime}
+            </if>
+            <if test="param.musicGroupIds != null and param.musicGroupIds.size() != 0">
+                and music_group_id_ in
+                <foreach collection="param.musicGroupIds" close=")" open="(" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -36,6 +36,28 @@
         <result column="ext_subject_ids_" property="extSubjectIds"/>
         <result column="tenant_id_" property="tenantId"/>
         <result column="course_teacher_" property="courseTeacher"/>
+
+        <result column="id_" property="id"/>
+        <result column="real_name_" property="realName"/>
+        <result column="password_" property="password"/>
+        <result column="salt_" property="salt"/>
+        <result column="avatar_" property="avatar"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="lock_flag_" property="lockFlag"/>
+        <result column="del_flag_" property="delFlag" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="wx_openid_" property="wxOpenid"/>
+        <result column="qq_openid_" property="qqOpenid"/>
+        <result column="user_type_" property="userType"/>
+        <result column="gender_" property="gender"/>
+        <result column="nation_" property="nation"/>
+        <result column="birthdate_" property="birthdate"/>
+        <result column="email_" property="email"/>
+        <result column="im_token_" property="imToken"/>
+        <result column="id_card_no_" property="idCardNo"/>
+        <result column="wechat_id_" property="wechatId"/>
+        <result column="is_super_admin_" property="isSuperAdmin"/>
+        <result column="current_grade_num_" property="currentGrade"/>
+        <result column="certificate_type_" property="certificateType"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -452,7 +474,9 @@
     </select>
 
     <select id="findByStudentIds" resultMap="Student">
-        SELECT * FROM student WHERE user_id_ IN
+        SELECT * FROM student
+        left join sys_user su on su.id_ = student.user_id_
+        WHERE user_id_ IN
         <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
             #{studentId}
         </foreach>
@@ -1305,4 +1329,56 @@
             </if>
         </where>
     </sql>
+
+    <sql id="homeworkSql">
+        <where>
+            <if test="param.musicGroupId != null">
+                and t2.music_group_id_ = #{param.musicGroupId}
+            </if>
+            <if test="param.studentIds != null and param.studentIds.size() != 0">
+                and t.user_id_ in
+                <foreach collection="param.studentIds" item="studentId" open="(" close=")" separator=",">
+                    #{studentId}
+                </foreach>
+            </if>
+            <if test="param.startTime != null">
+                and t.create_time_ &gt;= #{param.startTime}
+            </if>
+            <if test="param.endTime != null">
+                and t.create_time_ &lt;= #{param.endTime}
+            </if>
+
+            <if test="param.musicGroupIds != null and param.musicGroupIds.size() != 0">
+                and t2.music_group_id_ in
+                <foreach collection="param.musicGroupIds" close=")" open="(" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </sql>
+    <select id="getStudentHomework" resultType="com.ym.mec.biz.dal.wrapper.StudentWrapper$StudentHomework">
+        select
+        t.user_id_ as studentId
+        ,ifnull(t.standard_flag_,'NOT_START') as standardFlag
+        ,'HOMEWORK' as type
+        from student_course_homework t
+                 left join course_homework t2 on t2.id_ = t.course_homework_id_
+        <include refid="homeworkSql"/>
+        union all
+        select
+        t.user_id_ as studentId
+        ,ifnull(t.standard_flag_,'NOT_START') as standardFlag
+        ,t2.group_type_ as type
+        from extracurricular_exercises_reply t
+                 left join extracurricular_exercises t2 on t2.id_ = t.extracurricular_exercises_id_
+        <include refid="homeworkSql"/>
+        union all
+        select
+        t.user_id_ as studentId
+        ,if(t.training_flag_ =0,'NOT_START',if(t.training_flag_ = 1,'STANDARD','NOT_STANDARD')) as standardFlag
+        ,'EVALUATION' as type
+        from student_lesson_examination t
+                 left join lesson_examination t2 on t2.id_ = t.lesson_examination_id_
+        <include refid="homeworkSql"/>
+    </select>
 </mapper>

+ 9 - 16
mec-biz/src/main/resources/config/mybatis/StudentPlusMapper.xml

@@ -4,18 +4,20 @@
 
     <select id="userPage" resultType="com.ym.mec.biz.dal.wrapper.StudentWrapper$StudentList">
         select
-        s.user_id_ as studentId
-        ,if(s.member_rank_setting_id_ is not null, true, false) as vipFlag
+        distinct s.user_id_ as studentId
+        ,if(s.member_rank_setting_id_ is not null, true, false) as vipFlag,
+        group_concat(sr.music_group_id_) as musicGroupIds
         from student s
 
         <if test="param.keyword != null and param.keyword != ''">
             left join sys_user su on su.id_ = s.user_id_
         </if>
-
-        <if test="param.musicGroupId != null">
-            left join student_registration sr on sr.user_id_ = s.user_id_
-        </if>
+        left join student_registration sr on sr.user_id_ = s.user_id_
         <where>
+            sr.music_group_status_ in
+            <foreach collection="param.statusList" close=")" item="status" open="(" separator=",">
+                #{status}
+            </foreach>
             <if test="param.keyword != null and param.keyword != ''">
                 and (su.username_ like concat('%', #{param.keyword}, '%'))
             </if>
@@ -40,16 +42,7 @@
                 </if>
             </if>
         </where>
+        group by s.user_id_
     </select>
 
-    <select id="findStudentByIds" resultType="com.ym.mec.biz.dal.entity.Student">
-        select
-        *
-        from student s
-        left join sys_user su on su.id_ = s.user_id_
-        where s.user_id_ in
-        <foreach collection="studentIds" item="id" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </select>
 </mapper>

+ 38 - 11
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -2,8 +2,11 @@ package com.ym.mec.web.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
 import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.biz.dal.wrapper.TeachingPointWrapper;
@@ -43,6 +46,11 @@ public class StudentManageController extends BaseController {
     @Autowired
     private StudentService studentService;
 
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private MusicGroupService musicGroupService;
     @ApiOperation(value = "获取学生请假异常列表")
     @GetMapping("/queryStudentErrorLeaveList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentErrorLeaveList')")
@@ -422,8 +430,7 @@ public class StudentManageController extends BaseController {
         }
         queryInfo.setCooperationOrganId(coopId);
 
-
-        return succeed(null);
+        return succeed(studentService.userCount(queryInfo));
     }
 
 
@@ -437,26 +444,25 @@ public class StudentManageController extends BaseController {
         }
         queryInfo.setCooperationOrganId(coopId);
 
-
-
         IPage<StudentWrapper.StudentList> page = com.microsvc.toolkit.common.response.paging.QueryInfo.getPage(queryInfo);
-        studentService.userPage(page,queryInfo);
+        IPage<StudentWrapper.StudentList> studentListIPage = studentService.userPage(page, queryInfo);
 
-        return succeed(null);
+        return succeed(PageUtil.pageInfo(studentListIPage));
     }
 
 
     @ApiOperation(value = "学校端-学生所在乐团")
     @PostMapping("/userMusicGroup")
     public HttpResponseResult<List<MusicGroup>> userMusicGroup(@RequestParam Integer studentId,@RequestHeader Integer coopId) {
+        List<StudentMusicGroupStatusEnum> statusList = Arrays.asList(StudentMusicGroupStatusEnum.NORMAL, StudentMusicGroupStatusEnum.QUIT, StudentMusicGroupStatusEnum.QUIT_SCHOOL);
 
-        return succeed(null);
+        return succeed(studentService.userMusicGroup(studentId, coopId,statusList));
     }
 
     @ApiOperation(value = "学校端-学员详情")
     @PostMapping("/userDetail")
     public HttpResponseResult<StudentWrapper.StudentDetail> userDetail(@RequestBody StudentWrapper.StudentQuery queryInfo,@RequestHeader Integer coopId) {
-        if (queryInfo.getStudentId() == null) {
+        if (queryInfo.getStudentId() == null || queryInfo.getMusicGroupId() == null) {
             return failed("参数错误");
         }
 
@@ -465,17 +471,38 @@ public class StudentManageController extends BaseController {
         }
         queryInfo.setCooperationOrganId(coopId);
 
-
-        return succeed(null);
+        return succeed(studentService.userDetail(queryInfo));
     }
 
 
     @ApiOperation(value = "学校端-修改学员班级信息")
     @PostMapping("/updateGrade")
     public HttpResponseResult<Boolean> updateGrade(@Valid @RequestBody StudentWrapper.UpdateStudent updateStudent,@RequestHeader Integer coopId) {
+        if (coopId == null) {
+            return succeed();
+        }
+
         updateStudent.setCooperationOrganId(coopId);
 
-        return succeed(null);
+        return succeed(studentService.updateGrade(updateStudent));
     }
 
+
+
+    @ApiOperation(value = "申请退团")
+    @PostMapping("/quitMusicGroup")
+    @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "reasonEnum", value = "原因", required = true, dataType = "String")})
+    public HttpResponseResult quitMusicGroup(String musicGroupId,Integer userId, String reason, MusicGroupQuit.ReasonEnum reasonEnum) throws Exception {
+        Integer operatorId = sysUserService.getUserId();
+        MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
+        musicGroupQuit.setUserId(userId);
+        musicGroupQuit.setMusicGroupId(musicGroupId);
+        musicGroupQuit.setUserComment(reason);
+        musicGroupQuit.setReasonEnum(reasonEnum);
+        musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
+        musicGroupQuit.setOperatorId(operatorId);
+        return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit));
+    }
 }