|  | @@ -18,9 +18,6 @@ import java.util.Objects;
 | 
	
		
			
				|  |  |  import java.util.Set;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.dao.*;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.dto.*;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.entity.*;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
	
		
			
				|  | @@ -33,7 +30,79 @@ 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.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.MusicGroupPaymentCalenderCourseSettingsDao;
 | 
	
		
			
				|  |  | +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.MusicGroupPaymentStudentCourseDetailDao;
 | 
	
		
			
				|  |  | +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.StudentVisitDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.SubjectChangeDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.SubjectDao;
 | 
	
		
			
				|  |  | +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.CloseMusicGroupDto;
 | 
	
		
			
				|  |  | +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.MusicGroupPaymentCalenderCourseSettings;
 | 
	
		
			
				|  |  | +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.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.Subject;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.SubjectChange;
 | 
	
		
			
				|  |  | +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;
 | 
	
	
		
			
				|  | @@ -69,12 +138,10 @@ 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;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.exception.BizException;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.page.PageInfo;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.service.IdGeneratorService;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.service.impl.BaseServiceImpl;
 | 
	
		
			
				|  |  | -import com.ym.mec.im.ImFeignService;
 | 
	
		
			
				|  |  |  import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.collection.MapUtil;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.date.DateUtil;
 | 
	
	
		
			
				|  | @@ -1609,6 +1676,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 | 
	
		
			
				|  |  |              throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		// 有进行中的课程不能退团
 | 
	
		
			
				|  |  | +		List<CourseSchedule> courseScheduleList = courseScheduleDao.findMusicGroupCourseSchedulesWithStudent(musicGroupId, GroupType.MUSIC.getCode(),
 | 
	
		
			
				|  |  | +				"UNDERWAY", userId);
 | 
	
		
			
				|  |  | +		if (courseScheduleList != null && courseScheduleList.size() > 0) {
 | 
	
		
			
				|  |  | +			throw new BizException("退团失败,存在[进行中]的课程");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          musicGroupQuit.setStatus(status);
 | 
	
		
			
				|  |  |          musicGroupQuit.setReason(reason);
 | 
	
		
			
				|  |  |          musicGroupQuit.setQuitDate(date);
 | 
	
	
		
			
				|  | @@ -1636,6 +1710,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 | 
	
		
			
				|  |  |              musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
 | 
	
		
			
				|  |  |              // 退团
 | 
	
		
			
				|  |  |              studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
 | 
	
		
			
				|  |  | +            studentRegistration.setSurplusCourseFee(BigDecimal.ZERO);
 | 
	
		
			
				|  |  |              studentRegistration.setUpdateTime(date);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              studentRegistrationDao.update(studentRegistration);
 | 
	
	
		
			
				|  | @@ -1756,14 +1831,21 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (musicGroup.getStatus() == MusicGroupStatusEnum.CANCELED || musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE) {
 | 
	
		
			
				|  |  | -            throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
 | 
	
		
			
				|  |  | +            throw new BizException("退团失败,乐团状态[已取消]或[已暂停]");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 判断乐器是否是租赁
 | 
	
		
			
				|  |  |          StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
 | 
	
		
			
				|  |  |          if (studentRegistration == null) {
 | 
	
		
			
				|  |  |              throw new BizException("用户注册信息不存在");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 有进行中的课程不能退团
 | 
	
		
			
				|  |  | +		List<CourseSchedule> courseScheduleList = courseScheduleDao.findMusicGroupCourseSchedulesWithStudent(musicGroupId, GroupType.MUSIC.getCode(),
 | 
	
		
			
				|  |  | +				"UNDERWAY", userId);
 | 
	
		
			
				|  |  | +		if (courseScheduleList != null && courseScheduleList.size() > 0) {
 | 
	
		
			
				|  |  | +			throw new BizException("退团失败,存在[进行中]的课程");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Date date = new Date();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1793,6 +1875,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 退团
 | 
	
		
			
				|  |  |          studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
 | 
	
		
			
				|  |  | +        studentRegistration.setSurplusCourseFee(BigDecimal.ZERO);
 | 
	
		
			
				|  |  |          studentRegistration.setUpdateTime(date);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          studentRegistrationDao.update(studentRegistration);
 |