|  | @@ -295,30 +295,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
 | 
	
		
			
				|  |  |  				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -//		BigDecimal offlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOfflineClassesNum());
 | 
	
		
			
				|  |  | -//		BigDecimal onlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOnlineClassesNum());
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//		if(vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.GIVE_CLASS)){
 | 
	
		
			
				|  |  | -//			if(vipGroupApplyBaseInfoDto.getGiveTeachMode()==TeachModeEnum.OFFLINE){
 | 
	
		
			
				|  |  | -//				if(new BigDecimal(totalClassTimes).compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 | 
	
		
			
				|  |  | -//					offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 | 
	
		
			
				|  |  | -//				}
 | 
	
		
			
				|  |  | -//			}else if(vipGroupApplyBaseInfoDto.getGiveTeachMode()==TeachModeEnum.ONLINE){
 | 
	
		
			
				|  |  | -//				if(new BigDecimal(totalClassTimes).compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 | 
	
		
			
				|  |  | -//					onlineClassNum=onlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 | 
	
		
			
				|  |  | -//				}
 | 
	
		
			
				|  |  | -//			}else{
 | 
	
		
			
				|  |  | -//				throw new BizException("请指定赠送课程类型!");
 | 
	
		
			
				|  |  | -//			}
 | 
	
		
			
				|  |  | -//		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//		BigDecimal tempFee = costInfo.get("totalPrice").multiply(new BigDecimal(0.6));
 | 
	
		
			
				|  |  | -//		BigDecimal totalSalary = vipGroupApplyBaseInfoDto.getOfflineTeacherSalary().multiply(offlineClassNum)
 | 
	
		
			
				|  |  | -//				.add(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary().multiply(onlineClassNum));
 | 
	
		
			
				|  |  | -//		if(totalSalary.compareTo(tempFee)>0){
 | 
	
		
			
				|  |  | -//			throw new BizException("教师总课酬不能高于课程总价60%");
 | 
	
		
			
				|  |  | -//		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		//如果默认课酬与实际课酬不匹配则需要审批
 | 
	
	
		
			
				|  | @@ -961,9 +937,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee(K vipGroup,
 | 
	
		
			
				|  |  | -																			   Integer teacherId,
 | 
	
		
			
				|  |  | -																			   BigDecimal onlineClassesUnitPrice,
 | 
	
		
			
				|  |  | -																			   BigDecimal offlineClassesUnitPrice){
 | 
	
		
			
				|  |  | +																			   Integer teacherId){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		if(Objects.isNull(teacherId)){
 | 
	
		
			
				|  |  |  			throw new BizException("请指定教师");
 | 
	
	
		
			
				|  | @@ -1006,12 +980,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  				vscp.setPaymentPrice(vscp.getOfflineClassesUnitPrice().multiply(new BigDecimal(vipGroup.getOfflineClassesNum())).add(vscp.getOnlineClassesUnitPrice().multiply(new BigDecimal(vipGroup.getOnlineClassesNum()))));
 | 
	
		
			
				|  |  |  				vipGroup.setTotalPrice(vipGroup.getTotalPrice().add(vscp.getPaymentPrice()));
 | 
	
		
			
				|  |  | +				results.put(vscp.getStudentId().toString(), vscp.getPaymentPrice());
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			BigDecimal ots = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 | 
	
		
			
				|  |  |  			BigDecimal ofts = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 | 
	
		
			
				|  |  |  			if(Objects.nonNull(vipGroup.getStatus())&&normalStudentNum!=vipGroupCategory.getStudentNum()){
 | 
	
		
			
				|  |  | -				ots = ots.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | -				ofts = ofts.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +				ots = ots.multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +				if(normalStudentNum>5){
 | 
	
		
			
				|  |  | +					normalStudentNum = 5;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				ofts = ofts.multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			results.put("totalPrice",vipGroup.getTotalPrice());
 | 
	
		
			
				|  |  |  			results.put("onlineTeacherSalary",ots);
 | 
	
	
		
			
				|  | @@ -1027,14 +1005,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
 | 
	
		
			
				|  |  |  		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
 | 
	
		
			
				|  |  | -		onlineClassesUnitPrice=Objects.isNull(onlineClassesUnitPrice)?vipGroup.getOnlineClassesUnitPrice():onlineClassesUnitPrice;
 | 
	
		
			
				|  |  | +		BigDecimal onlineClassesUnitPrice=vipGroup.getOnlineClassesUnitPrice();
 | 
	
		
			
				|  |  |  		if(Objects.isNull(onlineClassesUnitPrice)){
 | 
	
		
			
				|  |  | -			onlineClassesUnitPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +			throw new BizException("课程单价异常");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
 | 
	
		
			
				|  |  | -		offlineClassesUnitPrice=Objects.isNull(offlineClassesUnitPrice)?vipGroup.getOfflineClassesUnitPrice():offlineClassesUnitPrice;
 | 
	
		
			
				|  |  | +		BigDecimal offlineClassesUnitPrice=vipGroup.getOfflineClassesUnitPrice();
 | 
	
		
			
				|  |  |  		if(Objects.isNull(offlineClassesUnitPrice)){
 | 
	
		
			
				|  |  | -			offlineClassesUnitPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +			throw new BizException("课程单价异常");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 | 
	
		
			
				|  |  |  		BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
 | 
	
	
		
			
				|  | @@ -2836,10 +2814,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		List<VipGroupStudentCoursePrice> vipGroupStudentCoursePrices = vipGroupStudentCoursePriceDao.getVipGroupStudentCoursePrice(vipGroupId, null);
 | 
	
		
			
				|  |  |  		Map<Integer, VipGroupStudentCoursePrice> studentCoursePriceMap = new HashMap<>();
 | 
	
		
			
				|  |  | -		if(Objects.isNull(vipGroup.getVipGroupActivityId())){
 | 
	
		
			
				|  |  | -			List<VipGroupStudentCoursePrice> vipGroupStudentCoursePrice = vipGroupStudentCoursePriceDao.getVipGroupStudentCoursePrice(vipGroupId, null);
 | 
	
		
			
				|  |  | -			studentCoursePriceMap = vipGroupStudentCoursePrice.stream().collect(Collectors.toMap(VipGroupStudentCoursePrice::getStudentId, v->v, (v1, v2)->v1));
 | 
	
		
			
				|  |  | +		if(!CollectionUtils.isEmpty(vipGroupStudentCoursePrices)){
 | 
	
		
			
				|  |  | +			studentCoursePriceMap = vipGroupStudentCoursePrices.stream().collect(Collectors.toMap(VipGroupStudentCoursePrice::getStudentId, v->v, (v1, v2)->v1));
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroup(vipGroup.getId());
 | 
	
	
		
			
				|  | @@ -2948,7 +2926,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  			vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		BigDecimal surplusCourseNum = new BigDecimal(surplusCourses.size());
 | 
	
		
			
				|  |  |  		BigDecimal surplusCoursesPrice=new BigDecimal(0);
 | 
	
		
			
				|  |  |  		boolean hasGiveClass=false;
 | 
	
		
			
				|  |  |  		int onlineCourseTimes=0,
 | 
	
	
		
			
				|  | @@ -2962,7 +2939,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  			&&surplusCourses.size()>=Integer.parseInt(vipGroupActivity.getAttribute1())){
 | 
	
		
			
				|  |  |  			hasGiveClass=true;
 | 
	
		
			
				|  |  |  			giveClassTimes=Integer.parseInt(vipGroupActivity.getAttribute2());
 | 
	
		
			
				|  |  | -			surplusCourseNum=surplusCourseNum.subtract(new BigDecimal(giveClassTimes));
 | 
	
		
			
				|  |  |  			Map<TeachModeEnum, List<CourseSchedule>> teachModeCourseMap = surplusCourses.stream()
 | 
	
		
			
				|  |  |  					.collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
 | 
	
		
			
				|  |  |  			List<CourseSchedule> onlineCourses=teachModeCourseMap.get(TeachModeEnum.ONLINE);
 | 
	
	
		
			
				|  | @@ -2974,51 +2950,53 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  				offlineCourseTotalTimes=offlineCourses.size();
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		for (int i=0;i<surplusCourses.size();i++) {
 | 
	
		
			
				|  |  | -			CourseSchedule courseSchedule=surplusCourses.get(i);
 | 
	
		
			
				|  |  | -			if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
 | 
	
		
			
				|  |  | -				offlineCourseTimes+=1;
 | 
	
		
			
				|  |  | -			}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
 | 
	
		
			
				|  |  | -				onlineCourseTimes+=1;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			if(hasGiveClass
 | 
	
		
			
				|  |  | -					&&vipGroup.getGiveTeachMode() == courseSchedule.getTeachMode()){
 | 
	
		
			
				|  |  | -				if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)
 | 
	
		
			
				|  |  | -					&&offlineCourseTimes>(offlineCourseTotalTimes-giveClassTimes)){
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		//生成学生单课缴费信息
 | 
	
		
			
				|  |  | +		for (Integer studentId:studentIds) {
 | 
	
		
			
				|  |  | +			offlineCourseTimes=0;
 | 
	
		
			
				|  |  | +			onlineCourseTimes=0;
 | 
	
		
			
				|  |  | +			surplusCoursesPrice=new BigDecimal(0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if(studentCoursePriceMap.containsKey(studentId)){
 | 
	
		
			
				|  |  | +				VipGroupStudentCoursePrice vipGroupStudentCoursePrice = studentCoursePriceMap.get(studentId);
 | 
	
		
			
				|  |  | +				vipGroup.setOfflineClassesUnitPrice(vipGroupStudentCoursePrice.getOfflineClassesUnitPrice());
 | 
	
		
			
				|  |  | +				vipGroup.setOnlineClassesUnitPrice(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			for (int i=0;i<surplusCourses.size();i++) {
 | 
	
		
			
				|  |  | +				CourseSchedule courseSchedule=surplusCourses.get(i);
 | 
	
		
			
				|  |  | +				if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
 | 
	
		
			
				|  |  | +					offlineCourseTimes+=1;
 | 
	
		
			
				|  |  | +				}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
 | 
	
		
			
				|  |  | +					onlineCourseTimes+=1;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  |  				if(hasGiveClass
 | 
	
		
			
				|  |  |  						&&vipGroup.getGiveTeachMode() == courseSchedule.getTeachMode()){
 | 
	
		
			
				|  |  | -					if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)
 | 
	
		
			
				|  |  | -							&&onlineCourseTimes>(onlineCourseTotalTimes-giveClassTimes)){
 | 
	
		
			
				|  |  | +					if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)
 | 
	
		
			
				|  |  | +							&&offlineCourseTimes>(offlineCourseTotalTimes-giveClassTimes)){
 | 
	
		
			
				|  |  |  						continue;
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					if(hasGiveClass
 | 
	
		
			
				|  |  | +							&&vipGroup.getGiveTeachMode() == courseSchedule.getTeachMode()){
 | 
	
		
			
				|  |  | +						if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)
 | 
	
		
			
				|  |  | +								&&onlineCourseTimes>(onlineCourseTotalTimes-giveClassTimes)){
 | 
	
		
			
				|  |  | +							continue;
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
 | 
	
		
			
				|  |  | +					surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOfflineClassesUnitPrice());
 | 
	
		
			
				|  |  | +				}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
 | 
	
		
			
				|  |  | +					surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOnlineClassesUnitPrice());
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
 | 
	
		
			
				|  |  | -				surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOfflineClassesUnitPrice());
 | 
	
		
			
				|  |  | -			}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
 | 
	
		
			
				|  |  | -				surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOnlineClassesUnitPrice());
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        BigDecimal discount=null;
 | 
	
		
			
				|  |  | -		if(Objects.nonNull(vipGroupActivity)&&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.DISCOUNT)){
 | 
	
		
			
				|  |  | -            discount=new BigDecimal(vipGroupActivity.getAttribute1()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | -            surplusCoursesPrice=surplusCoursesPrice.multiply(discount).setScale(CommonConstants.DECIMAL_FINAL_PLACE,BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		//生成学生单课缴费信息
 | 
	
		
			
				|  |  | -		for (Integer studentId:studentIds) {
 | 
	
		
			
				|  |  | -			if(Objects.isNull(vipGroupActivity)){
 | 
	
		
			
				|  |  | -				VipGroupStudentCoursePrice vipGroupStudentCoursePrice = studentCoursePriceMap.get(studentId);
 | 
	
		
			
				|  |  | -				if(Objects.isNull(vipGroupStudentCoursePrice)||Objects.isNull(vipGroupStudentCoursePrice.getOfflineClassesUnitPrice())||Objects.isNull(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice())){
 | 
	
		
			
				|  |  | -					throw new BizException("学员缴费设置有误");
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				vipGroup.setOfflineClassesUnitPrice(vipGroupStudentCoursePrice.getOfflineClassesUnitPrice());
 | 
	
		
			
				|  |  | -				vipGroup.setOnlineClassesUnitPrice(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice());
 | 
	
		
			
				|  |  | -				surplusCoursesPrice = vipGroupStudentCoursePrice.getOfflineClassesUnitPrice().multiply(new BigDecimal(offlineCourseTimes)).add(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice().multiply(new BigDecimal(onlineCourseTimes)));
 | 
	
		
			
				|  |  | +			BigDecimal discount=null;
 | 
	
		
			
				|  |  | +			if(Objects.nonNull(vipGroupActivity)&&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.DISCOUNT)){
 | 
	
		
			
				|  |  | +				discount=new BigDecimal(vipGroupActivity.getAttribute1()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | +				surplusCoursesPrice=surplusCoursesPrice.multiply(discount).setScale(CommonConstants.DECIMAL_FINAL_PLACE,BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			sysUserCashAccountService.subtractFromCourseBalanceAndBalance(studentId,surplusCoursesPrice,PlatformCashAccountDetailTypeEnum.PAY_FEE, "后台添加学员扣减账户金额");
 |