| 
					
				 | 
			
			
				@@ -24,10 +24,7 @@ import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,6 +70,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void createVipGroup(VipGroupApplyDto vipGroup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (Objects.isNull(vipGroup.getVipGroupApplyBaseInfo().getUserId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throw new BizException("请选择指导老师"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	    if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	        throw new BizException("课时总数不匹配!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -85,10 +86,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BizException("线上课课时数量安排有误!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取活动信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //生成vip课信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		vipGroupDao.insert(vipGroupApplyBaseInfoDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//获取vip课类型信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//创建班级信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ClassGroup classGroup=new ClassGroup(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroup.setName(vipGroupApplyBaseInfoDto.getName()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -96,15 +107,27 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroup.setType(ClassGroupTypeEnum.VIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroup.setDelFlag(YesOrNoEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroupDao.insert(classGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//创建vip课班级关联记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		VipGroupClassGroupMapper vipGroupClassGroupMapper=new VipGroupClassGroupMapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		vipGroupClassGroupMapper.setVipGroupId(vipGroupApplyBaseInfoDto.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		vipGroupClassGroupMapper.setClassGroupId(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		vipGroupClassGroupMapperDao.insert(vipGroupClassGroupMapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//创建班级老师关联记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.TEACHING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		classGroupTeacherMapper.setSalary(vipGroupApplyBaseInfoDto.getSalary()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		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 -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		    if(courseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -113,6 +136,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			courseSchedule.setClassGroupId(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		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 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -329,11 +359,31 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 计算VIP课程预计收费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     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 
			 |