| 
														
															@@ -24,10 +24,7 @@ import org.springframework.stereotype.Service; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import org.springframework.transaction.annotation.Transactional; 
														 | 
														
														 | 
														
															 import org.springframework.transaction.annotation.Transactional; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.math.BigDecimal; 
														 | 
														
														 | 
														
															 import java.math.BigDecimal; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import java.util.ArrayList; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import java.util.HashMap; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import java.util.List; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import java.util.Map; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import java.util.*; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.stream.Collectors; 
														 | 
														
														 | 
														
															 import java.util.stream.Collectors; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 @Service 
														 | 
														
														 | 
														
															 @Service 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -73,6 +70,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	@Override 
														 | 
														
														 | 
														
															 	@Override 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	public void createVipGroup(VipGroupApplyDto vipGroup) { 
														 | 
														
														 | 
														
															 	public void createVipGroup(VipGroupApplyDto vipGroup) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		if (Objects.isNull(vipGroup.getVipGroupApplyBaseInfo().getUserId())){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			throw new BizException("请选择指导老师"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	    if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){ 
														 | 
														
														 | 
														
															 	    if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	        throw new BizException("课时总数不匹配!"); 
														 | 
														
														 | 
														
															 	        throw new BizException("课时总数不匹配!"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -85,10 +86,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             throw new BizException("线上课课时数量安排有误!"); 
														 | 
														
														 | 
														
															             throw new BizException("线上课课时数量安排有误!"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        //获取活动信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue()); 
														 | 
														
														 | 
														
															         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        //生成vip课信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo(); 
														 | 
														
														 | 
														
															 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice())); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		vipGroupDao.insert(vipGroupApplyBaseInfoDto); 
														 | 
														
														 | 
														
															 		vipGroupDao.insert(vipGroupApplyBaseInfoDto); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//获取vip课类型信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue()); 
														 | 
														
														 | 
														
															 		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//创建班级信息 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		ClassGroup classGroup=new ClassGroup(); 
														 | 
														
														 | 
														
															 		ClassGroup classGroup=new ClassGroup(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum()); 
														 | 
														
														 | 
														
															 		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroup.setName(vipGroupApplyBaseInfoDto.getName()); 
														 | 
														
														 | 
														
															 		classGroup.setName(vipGroupApplyBaseInfoDto.getName()); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -96,15 +107,27 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroup.setType(ClassGroupTypeEnum.VIP); 
														 | 
														
														 | 
														
															 		classGroup.setType(ClassGroupTypeEnum.VIP); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroup.setDelFlag(YesOrNoEnum.NO); 
														 | 
														
														 | 
														
															 		classGroup.setDelFlag(YesOrNoEnum.NO); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroupDao.insert(classGroup); 
														 | 
														
														 | 
														
															 		classGroupDao.insert(classGroup); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//创建vip课班级关联记录 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		VipGroupClassGroupMapper vipGroupClassGroupMapper=new VipGroupClassGroupMapper(); 
														 | 
														
														 | 
														
															 		VipGroupClassGroupMapper vipGroupClassGroupMapper=new VipGroupClassGroupMapper(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		vipGroupClassGroupMapper.setVipGroupId(vipGroupApplyBaseInfoDto.getId()); 
														 | 
														
														 | 
														
															 		vipGroupClassGroupMapper.setVipGroupId(vipGroupApplyBaseInfoDto.getId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		vipGroupClassGroupMapper.setClassGroupId(classGroup.getId()); 
														 | 
														
														 | 
														
															 		vipGroupClassGroupMapper.setClassGroupId(classGroup.getId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		vipGroupClassGroupMapperDao.insert(vipGroupClassGroupMapper); 
														 | 
														
														 | 
														
															 		vipGroupClassGroupMapperDao.insert(vipGroupClassGroupMapper); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//创建班级老师关联记录 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper(); 
														 | 
														
														 | 
														
															 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.TEACHING); 
														 | 
														
														 | 
														
															 		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.TEACHING); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString())); 
														 | 
														
														 | 
														
															 		classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString())); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		classGroupTeacherMapper.setSalary(vipGroupApplyBaseInfoDto.getSalary()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		classGroupTeacherMapperDao.insert(classGroupTeacherMapper); 
														 | 
														
														 | 
														
															 		classGroupTeacherMapperDao.insert(classGroupTeacherMapper); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//创建班级与老师课酬记录 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.TEACHING); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		classGroupTeacherSalary.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString())); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//课程信息调整 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		vipGroup.getCourseSchedules().forEach(courseSchedule -> { 
														 | 
														
														 | 
														
															 		vipGroup.getCourseSchedules().forEach(courseSchedule -> { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		    if(courseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime()) 
														 | 
														
														 | 
														
															 		    if(courseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){ 
														 | 
														
														 | 
														
															                 &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){ 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -113,6 +136,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			courseSchedule.setClassGroupId(classGroup.getId()); 
														 | 
														
														 | 
														
															 			courseSchedule.setClassGroupId(classGroup.getId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules()); 
														 | 
														
														 | 
														
															 		courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//创建老师与学生费用相关记录 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		vipGroup.getCourseSchedules().forEach(courseSchedule -> { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	@Override 
														 | 
														
														 | 
														
															 	@Override 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -329,11 +359,31 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      * 计算VIP课程预计收费 
														 | 
														
														 | 
														
															      * 计算VIP课程预计收费 
														 | 
													
												
											
												
													
														| 
														 | 
														
															      */ 
														 | 
														
														 | 
														
															      */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){ 
														 | 
														
														 | 
														
															     private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        return onlineVipGroupCharge.add(offlineVipGroupCharge); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		if(Objects.isNull(vipGroup)){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			throw new BizException("该课未指定活动方案"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		BigDecimal totalPrice=null; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		switch (vipGroupActivity.getType()){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			case BASE_ACTIVITY: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				break; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			case DISCOUNT: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				BigDecimal discount=new BigDecimal(vipGroupActivity.getAttribute1()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				totalPrice=totalPrice.multiply(discount); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				break; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			case GIVE_CLASS: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				break; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			default: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				throw new BizException("活动类型错误!"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        return totalPrice; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	@Override 
														 | 
														
														 | 
														
															 	@Override 
														 |