Kaynağa Gözat

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

 Conflicts:
	mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
zouxuan 4 yıl önce
ebeveyn
işleme
2b802388ed

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

@@ -242,4 +242,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * 清空学员会员
      */
     void cleanStudentMember();
+
+    void cleanMember(Integer userId);
 }

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

@@ -88,4 +88,7 @@ public interface StudentService extends BaseService<Integer, Student> {
     List<String> getStudentNames(List<Integer> studentIdList);
 
     Student getLocked(Integer userId);
+
+    void cleanMember(Integer userId);
+
 }

+ 115 - 108
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -420,134 +420,141 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	@Override
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
-		Map<CourseSchedule.CourseScheduleType, Map<Integer, Integer>> courseTypeCourseDurationMap = new HashMap<>();
-		Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
-
-		List<CourseScheduleStudentPayment> css = courseScheduleStudentPaymentDao.getWithGroup(musicGroupId, GroupType.MUSIC, studentIds);
-		Map<Integer, Set<Long>> studentCourseIdsMap = new HashMap<>();
-		if(!CollectionUtils.isEmpty(css)){
-			studentCourseIdsMap = css.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getUserId, Collectors.mapping(CourseScheduleStudentPayment::getCourseScheduleId, Collectors.toSet())));
-		}
-
-		for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
-			Map<Integer, Integer> sdMap = new HashMap<>();
-			for (Integer studentId : studentIds) {
-				int totalCourseDuration = 0;
-				for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
-					if(courseSchedule.getMemberFlag() == 1){
-						continue;
+		Map<Integer, List<CourseSchedule>> memberCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getMemberFlag));
+		for (Integer memberFlag : memberCourseMap.keySet()) {
+			List<CourseSchedule> courseScheduleList = memberCourseMap.get(memberFlag);
+			if(courseScheduleList != null && courseScheduleList.size() > 0){
+				if(memberFlag == 1){
+					createForMemberMusicGroup(musicGroupId,courseScheduleList,studentIds);
+				}else {
+					Map<CourseSchedule.CourseScheduleType, Map<Integer, Integer>> courseTypeCourseDurationMap = new HashMap<>();
+					Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseScheduleList.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
+
+					List<CourseScheduleStudentPayment> css = courseScheduleStudentPaymentDao.getWithGroup(musicGroupId, GroupType.MUSIC, studentIds);
+					Map<Integer, Set<Long>> studentCourseIdsMap = new HashMap<>();
+					if(!CollectionUtils.isEmpty(css)){
+						studentCourseIdsMap = css.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getUserId, Collectors.mapping(CourseScheduleStudentPayment::getCourseScheduleId, Collectors.toSet())));
 					}
-					//课程时长
-					int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-					totalCourseDuration += courseDuration;
-				}
-				sdMap.put(studentId, totalCourseDuration);
-			}
-			courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), sdMap);
-		}
 
-		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
-
-		List<String> allBatchNos = new ArrayList<>();
-
-		for (Integer studentId : studentIds) {
-			Set<Long> existCourseIds = new HashSet<>();
-			if(studentCourseIdsMap.containsKey(studentId)){
-				existCourseIds = studentCourseIdsMap.get(studentId);
-			}
-			for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> courseScheduleTypeListEntry : typeCourseMap.entrySet()) {
-				//当前课程类型总课程时长
-				Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey()).get(studentId);
+					for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
+						Map<Integer, Integer> sdMap = new HashMap<>();
+						for (Integer studentId : studentIds) {
+							int totalCourseDuration = 0;
+							for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
+								if(courseSchedule.getMemberFlag() == 1){
+									continue;
+								}
+								//课程时长
+								int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+								totalCourseDuration += courseDuration;
+							}
+							sdMap.put(studentId, totalCourseDuration);
+						}
+						courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), sdMap);
+					}
 
-				String batchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, studentId, courseScheduleTypeListEntry.getKey(),null);
+					List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
 
-				List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(batchNo, studentId, courseScheduleTypeListEntry.getKey());
-				int totalCourseMinutes = musicGroupPaymentStudentCourseDetails.stream().mapToInt(MusicGroupPaymentStudentCourseDetail::getTotalCourseMinutes).reduce(0, Integer::sum);
-				if(CollectionUtils.isEmpty(musicGroupPaymentStudentCourseDetails) || totalCourseMinutes < typeCourseDuration){
-					SysUser user = teacherDao.getUser(studentId);
-					throw new BizException("{}在{}课程类型上的课程时长不足", user.getUsername(), courseScheduleTypeListEntry.getKey().getMsg());
-				}
+					List<String> allBatchNos = new ArrayList<>();
 
-				Set<Long> calenderIds = musicGroupPaymentStudentCourseDetails.stream().map(MusicGroupPaymentStudentCourseDetail::getMusicGroupPaymentCalenderId).collect(Collectors.toSet());
+					for (Integer studentId : studentIds) {
+						Set<Long> existCourseIds = new HashSet<>();
+						if(studentCourseIdsMap.containsKey(studentId)){
+							existCourseIds = studentCourseIdsMap.get(studentId);
+						}
+						for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> courseScheduleTypeListEntry : typeCourseMap.entrySet()) {
+							//当前课程类型总课程时长
+							Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey()).get(studentId);
 
-				List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.queryByIds(calenderIds);
-				if(CollectionUtils.isEmpty(musicGroupPaymentCalenders)||musicGroupPaymentCalenders.size()!=calenderIds.size()){
-					throw new BizException("缴费设置异常");
-				}
+							String batchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, studentId, courseScheduleTypeListEntry.getKey(),null);
 
-				List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalendersAndCourseType(calenderIds, courseScheduleTypeListEntry.getKey());
-				int originalCourseTotalMinutes = musicGroupPaymentCalenderCourseSettings.stream().mapToInt(MusicGroupPaymentCalenderCourseSettings::getCourseTotalMinuties).reduce(0, Integer::sum);
-				if(Objects.isNull(musicGroupPaymentCalenderCourseSettings)||originalCourseTotalMinutes!=totalCourseMinutes){
-					throw new BizException("缴费设置异常");
-				}
+							List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(batchNo, studentId, courseScheduleTypeListEntry.getKey());
+							int totalCourseMinutes = musicGroupPaymentStudentCourseDetails.stream().mapToInt(MusicGroupPaymentStudentCourseDetail::getTotalCourseMinutes).reduce(0, Integer::sum);
+							if(CollectionUtils.isEmpty(musicGroupPaymentStudentCourseDetails) || totalCourseMinutes < typeCourseDuration){
+								SysUser user = teacherDao.getUser(studentId);
+								throw new BizException("{}在{}课程类型上的课程时长不足", user.getUsername(), courseScheduleTypeListEntry.getKey().getMsg());
+							}
 
-				allBatchNos.add(batchNo);
+							Set<Long> calenderIds = musicGroupPaymentStudentCourseDetails.stream().map(MusicGroupPaymentStudentCourseDetail::getMusicGroupPaymentCalenderId).collect(Collectors.toSet());
 
-				BigDecimal totalCourseOriginalPrice = musicGroupPaymentCalenderCourseSettings.stream().map(MusicGroupPaymentCalenderCourseSettings::getCourseOriginalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-				BigDecimal totalCourseCurrentPrice = musicGroupPaymentCalenderCourseSettings.stream().map(MusicGroupPaymentCalenderCourseSettings::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+							List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.queryByIds(calenderIds);
+							if(CollectionUtils.isEmpty(musicGroupPaymentCalenders)||musicGroupPaymentCalenders.size()!=calenderIds.size()){
+								throw new BizException("缴费设置异常");
+							}
 
-				//课程每分钟原价
-				BigDecimal unitMinuteOriginalPrice = totalCourseOriginalPrice.divide(new BigDecimal(originalCourseTotalMinutes), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-				//课程每分钟现价
-				BigDecimal unitMinuteCurrentPrice = totalCourseCurrentPrice.divide(new BigDecimal(originalCourseTotalMinutes), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+							List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalendersAndCourseType(calenderIds, courseScheduleTypeListEntry.getKey());
+							int originalCourseTotalMinutes = musicGroupPaymentCalenderCourseSettings.stream().mapToInt(MusicGroupPaymentCalenderCourseSettings::getCourseTotalMinuties).reduce(0, Integer::sum);
+							if(Objects.isNull(musicGroupPaymentCalenderCourseSettings)||originalCourseTotalMinutes!=totalCourseMinutes){
+								throw new BizException("缴费设置异常");
+							}
 
-				if(MusicGroupPaymentCalender.PayUserType.SCHOOL.equals(musicGroupPaymentCalenders.get(0).getPayUserType())){
-					unitMinuteCurrentPrice = new BigDecimal("0");
-				}
+							allBatchNos.add(batchNo);
 
-				List<CourseScheduleStudentPayment> typeCourseStudentPayments = new ArrayList<>();
-				courseScheduleTypeListEntry.getValue().sort(Comparator.comparing(CourseSchedule::getStartClassTime));
-				BigDecimal typeCourseTotalOriginalPrice = new BigDecimal("0"), typeCourseTotalCurrentPrice = new BigDecimal("0");
-				for (CourseSchedule courseSchedule : courseScheduleTypeListEntry.getValue()) {
-					if(existCourseIds.contains(courseSchedule.getId())){
-						throw new BizException("该学员已在此班级{}课程中", courseSchedule.getId());
-					}
-					//课程时长
-					int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+							BigDecimal totalCourseOriginalPrice = musicGroupPaymentCalenderCourseSettings.stream().map(MusicGroupPaymentCalenderCourseSettings::getCourseOriginalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal totalCourseCurrentPrice = musicGroupPaymentCalenderCourseSettings.stream().map(MusicGroupPaymentCalenderCourseSettings::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 
-					//课程原价
-					BigDecimal courseOriginalPrice = unitMinuteOriginalPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
-					typeCourseTotalOriginalPrice = typeCourseTotalOriginalPrice.add(courseOriginalPrice);
+							//课程每分钟原价
+							BigDecimal unitMinuteOriginalPrice = totalCourseOriginalPrice.divide(new BigDecimal(originalCourseTotalMinutes), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+							//课程每分钟现价
+							BigDecimal unitMinuteCurrentPrice = totalCourseCurrentPrice.divide(new BigDecimal(originalCourseTotalMinutes), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 
-					//课程现价
-					BigDecimal courseCurrentPrice = unitMinuteCurrentPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
-					typeCourseTotalCurrentPrice = typeCourseTotalCurrentPrice.add(courseCurrentPrice);
+							if(MusicGroupPaymentCalender.PayUserType.SCHOOL.equals(musicGroupPaymentCalenders.get(0).getPayUserType())){
+								unitMinuteCurrentPrice = new BigDecimal("0");
+							}
 
-					CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
-					cssp.setGroupType(courseSchedule.getGroupType());
-					cssp.setMusicGroupId(courseSchedule.getMusicGroupId());
-					cssp.setCourseScheduleId(courseSchedule.getId());
-					cssp.setClassGroupId(courseSchedule.getClassGroupId());
-					cssp.setBatchNo(batchNo);
-					cssp.setUserId(studentId);
-					cssp.setOriginalPrice(courseOriginalPrice);
-					cssp.setExpectPrice(courseCurrentPrice);
-					cssp.setActualPrice(BigDecimal.ZERO);
-					cssp.setBeMerged(false);
-					typeCourseStudentPayments.add(cssp);
-				}
+							List<CourseScheduleStudentPayment> typeCourseStudentPayments = new ArrayList<>();
+							courseScheduleTypeListEntry.getValue().sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+							BigDecimal typeCourseTotalOriginalPrice = new BigDecimal("0"), typeCourseTotalCurrentPrice = new BigDecimal("0");
+							for (CourseSchedule courseSchedule : courseScheduleTypeListEntry.getValue()) {
+								if(existCourseIds.contains(courseSchedule.getId())){
+									throw new BizException("该学员已在此班级{}课程中", courseSchedule.getId());
+								}
+								//课程时长
+								int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+
+								//课程原价
+								BigDecimal courseOriginalPrice = unitMinuteOriginalPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
+								typeCourseTotalOriginalPrice = typeCourseTotalOriginalPrice.add(courseOriginalPrice);
+
+								//课程现价
+								BigDecimal courseCurrentPrice = unitMinuteCurrentPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
+								typeCourseTotalCurrentPrice = typeCourseTotalCurrentPrice.add(courseCurrentPrice);
+
+								CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
+								cssp.setGroupType(courseSchedule.getGroupType());
+								cssp.setMusicGroupId(courseSchedule.getMusicGroupId());
+								cssp.setCourseScheduleId(courseSchedule.getId());
+								cssp.setClassGroupId(courseSchedule.getClassGroupId());
+								cssp.setBatchNo(batchNo);
+								cssp.setUserId(studentId);
+								cssp.setOriginalPrice(courseOriginalPrice);
+								cssp.setExpectPrice(courseCurrentPrice);
+								cssp.setActualPrice(BigDecimal.ZERO);
+								cssp.setBeMerged(false);
+								typeCourseStudentPayments.add(cssp);
+							}
 
-				typeCourseStudentPayments.get(0).setOriginalPrice(typeCourseStudentPayments.get(0).getOriginalPrice().add(totalCourseOriginalPrice.subtract(typeCourseTotalOriginalPrice)));
-				if(MusicGroupPaymentCalender.PayUserType.STUDENT.equals(musicGroupPaymentCalenders.get(0).getPayUserType())) {
-					typeCourseStudentPayments.get(0).setExpectPrice(typeCourseStudentPayments.get(0).getExpectPrice().add(totalCourseCurrentPrice.subtract(typeCourseTotalCurrentPrice)));
-				}
-				courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
-				for (MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail : musicGroupPaymentStudentCourseDetails) {
-					if(typeCourseDuration>musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes()){
-						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes());
-						typeCourseDuration = typeCourseDuration-musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes();
-					}else{
-						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(typeCourseDuration);
-						typeCourseDuration = 0;
+							typeCourseStudentPayments.get(0).setOriginalPrice(typeCourseStudentPayments.get(0).getOriginalPrice().add(totalCourseOriginalPrice.subtract(typeCourseTotalOriginalPrice)));
+							if(MusicGroupPaymentCalender.PayUserType.STUDENT.equals(musicGroupPaymentCalenders.get(0).getPayUserType())) {
+								typeCourseStudentPayments.get(0).setExpectPrice(typeCourseStudentPayments.get(0).getExpectPrice().add(totalCourseCurrentPrice.subtract(typeCourseTotalCurrentPrice)));
+							}
+							courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
+							for (MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail : musicGroupPaymentStudentCourseDetails) {
+								if(typeCourseDuration>musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes()){
+									musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes());
+									typeCourseDuration = typeCourseDuration-musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes();
+								}else{
+									musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(typeCourseDuration);
+									typeCourseDuration = 0;
+								}
+							}
+							musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);
+						}
 					}
+					courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 				}
-				musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);
 			}
 		}
-		courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
-//		for (String batchNo : allBatchNos) {
-//			updateForMusicGroupWithPaymentCalender(batchNo);
-//		}
 	}
 
 	@Override

+ 19 - 85
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -2,9 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.STUDENT;
-import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
-import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.DRAFT;
-import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.REJECT;
+import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.*;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.ADD_COURSE;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.ADD_STUDENT;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY;
@@ -13,19 +11,17 @@ import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.SP
 import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSONObject;
+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.event.source.GroupEventSource;
+import com.ym.mec.biz.service.*;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,83 +33,13 @@ import com.alibaba.fastjson.JSON;
 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.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
-import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.MemberFeeSettingDao;
-import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
-import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupOrganizationCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupOrganizationCourseSettingsDetailDao;
-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.MusicGroupPaymentCalenderStudentDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSchoolTermCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSchoolTermStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentClassAdjustDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.OrganizationCourseUnitPriceSettingsDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-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.dto.CalenderPushDto;
-import com.ym.mec.biz.dal.dto.ClassGroup4MixDto;
-import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDetailDto;
-import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDto;
-import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
-import com.ym.mec.biz.dal.entity.MemberFeeSetting;
-import com.ym.mec.biz.dal.entity.MemberRankSetting;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
-import com.ym.mec.biz.dal.entity.MusicGroupOrganizationCourseSettings;
-import com.ym.mec.biz.dal.entity.MusicGroupOrganizationCourseSettingsDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermCourseDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermStudentCourseDetail;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust;
-import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.OrganizationCourseUnitPriceSettings;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
-import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PeriodEnum;
-import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
-import com.ym.mec.biz.event.source.GroupEventSource;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.ImGroupMemberService;
-import com.ym.mec.biz.service.ImUserFriendService;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -200,7 +126,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	private StudentRegistrationDao studentRegistrationDao;
 	@Autowired
 	private GroupEventSource groupEventSource;
-	
+
 	@Autowired
 	private MemberFeeSettingDao memberFeeSettingDao;
 	@Autowired
@@ -209,7 +135,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	private StudentService studentService;
 	@Autowired
 	private CloudTeacherOrderDao cloudTeacherOrderDao;
-	
+
 	@Autowired
 	private StudentPaymentOrderDao studentPaymentOrderDao;
 
@@ -1621,6 +1547,14 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) {
 			throw new BizException("缴费项目中已存在学员,不能删除");
 		}
+		if (calender.getStatus() != PaymentCalenderStatusEnum.AUDITING && calender.getStatus() != PaymentCalenderStatusEnum.NO
+				&& calender.getStatus() != PaymentCalenderStatusEnum.REJECT && calender.getStatus() != DRAFT) {
+			throw new BizException("删除失败,{} 的缴费项目不允许删除");
+		}
+		MusicGroupStudentClassAdjust byBatchNo = musicGroupStudentClassAdjustDao.findByBatchNo(calender.getBatchNo());
+		if(byBatchNo != null){
+			throw new BizException("删除失败,班级调整的缴费项目不允许删除");
+		}
 
 		if (calender.getPaymentType() == PaymentType.MUSIC_APPLY) {
 			// 是否存在缴费中的

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -2031,6 +2031,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0 && studentCloudTeacherOrder != null) {
                     cloudTeacherOrderService.quitCloudTeacherOrder(studentCloudTeacherOrder, cloudTeacherAmount);
                 }
+                //清除学员云教练
+                studentService.cleanMember(userId);
             }
 
             if (amount.doubleValue() > 0) {
@@ -2276,6 +2278,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             if (cloudTeacherAmount.compareTo(BigDecimal.ZERO) > 0 && studentCloudTeacherOrder != null) {
                 cloudTeacherOrderService.quitCloudTeacherOrder(studentCloudTeacherOrder, cloudTeacherAmount);
             }
+            //清除学员云教练
+            studentService.cleanMember(userId);
         }
 
         if (amount.doubleValue() > 0) {

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

@@ -1081,8 +1081,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentRegistration.setTemporaryCourseFee(new BigDecimal(0));
             }
             studentRegistration.setPaymentStatus(YES);
-            studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
-
+            
             if (studentPaymentOrder.getClassGroupId() == null || !studentPaymentOrder.getClassGroupId().equals(206)) {
                 studentRegistration.setPayingStatus(0);
             }
@@ -1097,6 +1096,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     .filter(o -> !o.getType().getCode().equals("CLOUD_TEACHER_PLUS"))
                     .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
+            
+            //已购买内容
+            List<OrderDetailTypeEnum> orderTypeList = allDetails.stream().map(t -> t.getType()).collect(Collectors.toList());
+            
+			if (studentRegistration.getNoneNeedCloudTeacher() == 1 || orderTypeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER)
+					|| orderTypeList.contains(OrderDetailTypeEnum.CLOUD_TEACHER_PLUS)) {
+				studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+			}
 
             //累加充值金额
             studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(courseFee));
@@ -1915,6 +1922,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             throw new BizException("该学生状态已更新,请刷新查看");
         }
         studentRegistration.setPayingStatus(0);
+        studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
         studentRegistrationDao.update(studentRegistration);
         StudentPaymentOrder order = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentRegistration.getUserId(), studentRegistration.getMusicGroupId(), DealStatusEnum.SUCCESS);
         order.setPaymentAccountNo("200");

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -386,4 +386,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 	public Student getLocked(Integer userId) {
 		return studentDao.getLocked(userId);
 	}
+
+    @Override
+    public void cleanMember(Integer userId) {
+        studentDao.cleanMember(userId);
+    }
 }

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -756,4 +756,8 @@
         UPDATE student SET member_rank_setting_id_ = NULL,membership_start_time_ = NULL,membership_end_time_ = NULL
         WHERE DATEDIFF(NOW(),membership_end_time_) > 0
     </update>
+    <update id="cleanMember">
+        UPDATE student SET member_rank_setting_id_ = NULL,membership_start_time_ = NULL,membership_end_time_ = NULL
+        WHERE user_id_ = #{userId}
+    </update>
 </mapper>