Forráskód Böngészése

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

zouxuan 4 éve
szülő
commit
1d053ba91f

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

@@ -19,8 +19,17 @@ public interface MusicGroupQuitDao extends BaseDAO<Long, MusicGroupQuit> {
 
     /**
      * 获取用户退出的乐团
+     *
      * @param userId
      * @return
      */
     List<MusicGroupQuit> getUserMusicQuit(@Param("userId") Integer userId);
+
+    /**
+     * 获取学生乐团最后一次退团记录
+     * @param musicGroupId
+     * @param userIds
+     * @return
+     */
+    List<MusicGroupQuit> getQuits(@Param("musicGroupId") String musicGroupId, @Param("userIds") List<Integer> userIds);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -41,6 +41,9 @@ public class MusicGroupStudentsDto{
     @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
     private String studentStatus;
 
+    @ApiModelProperty(value = "退团原因",required = false)
+    private String quitReason;
+
     private PaymentFlagEnum paymentStatus;
 
     @ApiModelProperty(value = "是否新增学员(1是0否)",required = false)
@@ -209,4 +212,12 @@ public class MusicGroupStudentsDto{
     public void setNextPaymentDateStr(String nextPaymentDateStr) {
         this.nextPaymentDateStr = nextPaymentDateStr;
     }
+
+    public String getQuitReason() {
+        return quitReason;
+    }
+
+    public void setQuitReason(String quitReason) {
+        this.quitReason = quitReason;
+    }
 }

+ 113 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1,19 +1,127 @@
 package com.ym.mec.biz.service.impl;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
-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.dao.ChargeTypeDao;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dao.CooperationOrganDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
+import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.SchoolDao;
+import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseFormDto;
+import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.HighClassGroupDto;
+import com.ym.mec.biz.dal.dto.MusicCardDto;
+import com.ym.mec.biz.dal.dto.RegisterPayDto;
+import com.ym.mec.biz.dal.dto.SporadicPayDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
+import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
+import com.ym.mec.biz.dal.entity.ChargeType;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.FeeType;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.School;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.ClassGroupStudentMapperService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -27,18 +135,6 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
 
@@ -1935,13 +2031,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             courseScheduleTeacherSalary.setUpdateTime(new Date());
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
         }
-        Teacher teacher = teacherDao.get(teacherId);
-        MusicGroup musicGroup = musicGroupDao.get(classGroupDao.findByCourseSchedule(courseScheduleId.intValue(), 0).getMusicGroupId());
-        Set<Integer> roleIds = new HashSet<>(1);
-        roleIds.add(SysUserRole.SECTION_MANAGER);
-
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_TEACHER_AMOUNT_CHANGE, "",
-                teacher.getRealName(), musicGroup.getName(), scope.equals("all") ? "所有" : "本次");
         return true;
     }
 

+ 96 - 84
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -121,55 +121,55 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
         PageInfo<StudentManageListDto> pageInfo = new PageInfo<StudentManageListDto>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		
-		List<StudentManageListDto> dataList = null;
-		int count = studentManageDao.countStudentByOrganId(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = studentManageDao.findStudentsByOrganId(params);
-		}
-		if (dataList == null) {
-			dataList = new ArrayList<StudentManageListDto>();
-		}
-		pageInfo.setRows(dataList);
-		
-		if(dataList.size() == 0){
-			return pageInfo;
-		}
-		
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<StudentManageListDto> dataList = null;
+        int count = studentManageDao.countStudentByOrganId(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentManageDao.findStudentsByOrganId(params);
+        }
+        if (dataList == null) {
+            dataList = new ArrayList<StudentManageListDto>();
+        }
+        pageInfo.setRows(dataList);
+
+        if (dataList.size() == 0) {
+            return pageInfo;
+        }
+
         Set<Integer> userIds = dataList.stream().map(StudentManageListDto::getUserId).collect(Collectors.toSet());
-		
-		List<StudentListCourseDto> studentListCourseDtoList = studentManageDao.queryStudentRemianCourse(userIds);
-		Map<Integer,StudentListCourseDto> StudentListCourseDtoMap = studentListCourseDtoList.stream().collect(Collectors.toMap(StudentListCourseDto::getUserId, studentListCourseDto -> studentListCourseDto));
-		
-		StudentListCourseDto studentListCourseDto = null;
-		for (StudentManageListDto dto : dataList) {
-			studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
-			if (studentListCourseDto != null) {
-				if (studentListCourseDto.getRemainCourseNum() > 0) {
-					dto.setHasCourse(YesOrNoEnum.YES);
-				} else {
-					dto.setHasCourse(YesOrNoEnum.NO);
-				}
-				if (studentListCourseDto.getRemainPracticeNum() > 0) {
-					dto.setHasPracticeCourse(YesOrNoEnum.YES);
-				} else {
-					dto.setHasPracticeCourse(YesOrNoEnum.NO);
-				}
-			} else {
-				dto.setHasCourse(YesOrNoEnum.NO);
-				dto.setHasPracticeCourse(YesOrNoEnum.NO);
-			}
-		}
-		
-		if (queryInfo.getIsExport()) {
-			if (count > 50000) {
-				throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
-			}
-			//获取所在乐团
+
+        List<StudentListCourseDto> studentListCourseDtoList = studentManageDao.queryStudentRemianCourse(userIds);
+        Map<Integer, StudentListCourseDto> StudentListCourseDtoMap = studentListCourseDtoList.stream().collect(Collectors.toMap(StudentListCourseDto::getUserId, studentListCourseDto -> studentListCourseDto));
+
+        StudentListCourseDto studentListCourseDto = null;
+        for (StudentManageListDto dto : dataList) {
+            studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
+            if (studentListCourseDto != null) {
+                if (studentListCourseDto.getRemainCourseNum() > 0) {
+                    dto.setHasCourse(YesOrNoEnum.YES);
+                } else {
+                    dto.setHasCourse(YesOrNoEnum.NO);
+                }
+                if (studentListCourseDto.getRemainPracticeNum() > 0) {
+                    dto.setHasPracticeCourse(YesOrNoEnum.YES);
+                } else {
+                    dto.setHasPracticeCourse(YesOrNoEnum.NO);
+                }
+            } else {
+                dto.setHasCourse(YesOrNoEnum.NO);
+                dto.setHasPracticeCourse(YesOrNoEnum.NO);
+            }
+        }
+
+        if (queryInfo.getIsExport()) {
+            if (count > 50000) {
+                throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
+            }
+            //获取所在乐团
             Map<Integer, String> musicGroupNames = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicNames(userIds));
             //获取所在vip
             Map<Integer, String> vipGroupNames = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipNames(userIds));
@@ -177,15 +177,15 @@ public class StudentManageServiceImpl implements StudentManageService {
             Map<Integer, String> musicGroupStatus = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicStatus(userIds));
             //获取所在vip状态
             Map<Integer, String> vipGroupStatus = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipStatus(userIds));
-            
+
             dataList.forEach(e -> {
                 e.setMusicGroupName(musicGroupNames.get(e.getUserId().longValue()));
                 e.setVipGroupName(vipGroupNames.get(e.getUserId()));
                 e.setMusicGroupStatus(musicGroupStatus.get(e.getUserId().longValue()));
                 e.setVipGroupStatus(vipGroupStatus.get(e.getUserId()));
             });
-		}
-		pageInfo.setRows(dataList);
+        }
+        pageInfo.setRows(dataList);
         return pageInfo;
     }
 
@@ -375,6 +375,18 @@ public class StudentManageServiceImpl implements StudentManageService {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = studentManageDao.queryMusicGroupStudent(params);
+            //退团的学生
+            List<Integer> quitUserIds = dataList.stream().filter(e -> e.getStudentStatus().equals("QUIT")).map(MusicGroupStudentsDto::getUserId).collect(Collectors.toList());
+
+            if (quitUserIds.size() > 0) {
+                List<MusicGroupQuit> quits = musicGroupQuitDao.getQuits(queryInfo.getMusicGroupId(), quitUserIds);
+                for (MusicGroupStudentsDto musicGroupStudentsDto : dataList) {
+                    for (MusicGroupQuit quit : quits) {
+                        if (!quit.getUserId().equals(musicGroupStudentsDto.getUserId())) continue;
+                        musicGroupStudentsDto.setQuitReason(quit.getReason());
+                    }
+                }
+            }
 //            Map<Integer,String> maps = MapUtil.convertIntegerMap(musicGroupStudentFeeDao.findPaymentStatusMap(queryInfo.getMusicGroupId()));
 //            dataList.forEach(e->{
 //                e.setPaymentStatus(maps.get(e.getUserId()));
@@ -465,39 +477,39 @@ public class StudentManageServiceImpl implements StudentManageService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-	public int studentRegister(Student student) {
-		if (student == null || StringUtils.isEmpty(student.getPhone())) {
-			throw new BizException("参数校验失败");
-		}
-		Date date = new Date();
-		SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-		if (sysUser != null) {
-			if (sysUser.getUserType().contains("STUDENT")) {
-				throw new BizException("手机号已被占用");
-			} else {
-				student.setId(sysUser.getId());
-				student.setUserType(sysUser.getUserType() + ",STUDENT");
-				student.setUpdateTime(date);
-				sysUserFeignService.updateSysUser(student);
-			}
-		} else {
-			student.setUpdateTime(date);
-			student.setCreateTime(date);
-			student.setUserType("STUDENT");
-			HttpResponseResult<Integer> result = sysUserFeignService.addUser(student);
-			student.setId(result.getData());
-
-			ImResult register = imFeignService.register(new ImUserModel(student.getId().toString(), student.getPhone(), null));
-			student.setImToken(register.getToken());
-			sysUserFeignService.updateSysUser(student);
-
-			sysUserCashAccountDao.insert(new SysUserCashAccount(student.getId(), "CNY"));
-		}
-		student.setUserId(student.getId());
-
-		studentService.upSet(student);
-		return student.getId();
-	}
+    public int studentRegister(Student student) {
+        if (student == null || StringUtils.isEmpty(student.getPhone())) {
+            throw new BizException("参数校验失败");
+        }
+        Date date = new Date();
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
+        if (sysUser != null) {
+            if (sysUser.getUserType().contains("STUDENT")) {
+                throw new BizException("手机号已被占用");
+            } else {
+                student.setId(sysUser.getId());
+                student.setUserType(sysUser.getUserType() + ",STUDENT");
+                student.setUpdateTime(date);
+                sysUserFeignService.updateSysUser(student);
+            }
+        } else {
+            student.setUpdateTime(date);
+            student.setCreateTime(date);
+            student.setUserType("STUDENT");
+            HttpResponseResult<Integer> result = sysUserFeignService.addUser(student);
+            student.setId(result.getData());
+
+            ImResult register = imFeignService.register(new ImUserModel(student.getId().toString(), student.getPhone(), null));
+            student.setImToken(register.getToken());
+            sysUserFeignService.updateSysUser(student);
+
+            sysUserCashAccountDao.insert(new SysUserCashAccount(student.getId(), "CNY"));
+        }
+        student.setUserId(student.getId());
+
+        studentService.upSet(student);
+        return student.getId();
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)

+ 104 - 85
mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml

@@ -3,97 +3,116 @@
 <!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.MusicGroupQuitDao">
 
-	<resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit"
-		id="MusicGroupQuit">
-		<result column="id_" property="id" />
-		<result column="user_id_" property="userId" />
-		<result column="music_group_id_" property="musicGroupId" />
-		<result column="join_date_" property="joinDate" />
-		<result column="quit_date_" property="quitDate" />
-		<result column="create_time_" property="createTime" />
-		<result column="reason_" property="reason" />
-		<result column="status_" property="status"
-			typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
-	</resultMap>
+    <resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+               id="MusicGroupQuit">
+        <result column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="music_group_id_" property="musicGroupId"/>
+        <result column="join_date_" property="joinDate"/>
+        <result column="quit_date_" property="quitDate"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="reason_" property="reason"/>
+        <result column="status_" property="status"
+                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+    </resultMap>
 
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="MusicGroupQuit">
-		SELECT * FROM
-		music_group_quit WHERE id_ = #{id}
-	</select>
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        WHERE id_ = #{id}
+    </select>
 
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="MusicGroupQuit">
-		SELECT * FROM music_group_quit
-		ORDER BY id_
-	</select>
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        ORDER BY id_
+    </select>
 
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
-		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
-			AS ID FROM DUAL </selectKey> -->
-		INSERT INTO music_group_quit
-		(id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,status_)
-		VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
-	</insert>
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        <!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval
+            AS ID FROM DUAL </selectKey> -->
+        INSERT INTO music_group_quit
+        (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,status_)
+        VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+    </insert>
 
-	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
-		UPDATE music_group_quit
-		<set>
-			<if test="userId != null">
-				user_id_ = #{userId},
-			</if>
-			<if test="id != null">
-				id_ = #{id},
-			</if>
-			<if test="joinDate != null">
-				join_date_ = #{joinDate},
-			</if>
-			<if test="reason != null">
-				reason_ = #{reason},
-			</if>
-			<if test="quitDate != null">
-				quit_date_ = #{quitDate},
-			</if>
-			<if test="musicGroupId != null">
-				music_group_id_ = #{musicGroupId},
-			</if>
-			<if test="createTime != null">
-				create_time_ = #{createTime},
-			</if>
-			<if test="status != null">
-				status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-			</if>
-		</set>
-		WHERE id_ = #{id}
-	</update>
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
+        UPDATE music_group_quit
+        <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="id != null">
+                id_ = #{id},
+            </if>
+            <if test="joinDate != null">
+                join_date_ = #{joinDate},
+            </if>
+            <if test="reason != null">
+                reason_ = #{reason},
+            </if>
+            <if test="quitDate != null">
+                quit_date_ = #{quitDate},
+            </if>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="status != null">
+                status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
 
-	<!-- 根据主键删除一条记录 -->
-	<delete id="delete">
-		DELETE FROM music_group_quit WHERE id_ =
-		#{id}
-	</delete>
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+        DELETE
+        FROM music_group_quit
+        WHERE id_ =
+              #{id}
+    </delete>
 
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="MusicGroupQuit" parameterType="map">
-		SELECT * FROM music_group_quit ORDER BY id_
-		<include refid="global.limit" />
-	</select>
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="MusicGroupQuit" parameterType="map">
+        SELECT * FROM music_group_quit ORDER BY id_
+        <include refid="global.limit"/>
+    </select>
 
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM
-		music_group_quit
-	</select>
-	<select id="countMusicGroupQuitNum" resultType="int">
-		SELECT COUNT( * )
-		FROM music_group_quit
-		WHERE music_group_id_=#{musicGroupId} AND status_='APPROVED'
-	</select>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM music_group_quit
+    </select>
+    <select id="countMusicGroupQuitNum" resultType="int">
+        SELECT COUNT(*)
+        FROM music_group_quit
+        WHERE music_group_id_ = #{musicGroupId}
+          AND status_ = 'APPROVED'
+    </select>
 
-	<select id="getUserMusicQuit" resultMap="MusicGroupQuit">
-		SELECT * FROM music_group_quit WHERE user_id_=#{userId} AND status_='APPROVED' ORDER BY id_ ASC
-	</select>
+    <select id="getUserMusicQuit" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        WHERE user_id_ = #{userId}
+          AND status_ = 'APPROVED'
+        ORDER BY id_ ASC
+    </select>
+
+    <select id="getQuits" resultMap="MusicGroupQuit">
+        SELECT * FROM music_group_quit WHERE id_ IN (
+        SELECT MAX(id_) FROM music_group_quit WHERE music_group_id_=#{musicGroupId} AND user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY user_id_
+        )
+    </select>
 </mapper>