|  | @@ -1081,7 +1081,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		results.put("totalPrice",totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		int normalStudentNum = 0;
 | 
	
		
			
				|  |  |  		if(Objects.nonNull(vipGroup.getId())){
 | 
	
		
			
				|  |  |  			normalStudentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(GroupType.VIP, vipGroup.getId().toString());
 | 
	
	
		
			
				|  | @@ -1181,6 +1180,188 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  | +	public <K extends VipGroup> Map<String,BigDecimal> countVipGroupCoursePredictFee(K vipGroup,
 | 
	
		
			
				|  |  | +																			   Integer teacherId,
 | 
	
		
			
				|  |  | +																					 Long courseId){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(Objects.isNull(teacherId)){
 | 
	
		
			
				|  |  | +			throw new BizException("请指定教师");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(Objects.isNull(vipGroup.getVipGroupCategoryId())){
 | 
	
		
			
				|  |  | +			throw new BizException("请指定课程形式");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
 | 
	
		
			
				|  |  | +		if(Objects.isNull(vipGroupCategory)){
 | 
	
		
			
				|  |  | +			throw new BizException("未找到课程形式");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(teacherId,
 | 
	
		
			
				|  |  | +				vipGroup.getVipGroupCategoryId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(Objects.isNull(teacherDefaultVipGroupSalary)){
 | 
	
		
			
				|  |  | +			throw new BizException("请设置教师课酬");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(Objects.isNull(vipGroup.getVipGroupActivityId())){
 | 
	
		
			
				|  |  | +			throw new BizException("请指定活动方案");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(Objects.isNull(vipGroupActivity)){
 | 
	
		
			
				|  |  | +			throw new BizException("指定的活动方案不存在");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(Objects.isNull(vipGroupSalarySettlementDto)){
 | 
	
		
			
				|  |  | +			throw new BizException("课酬结算方案错误");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		Map<String,BigDecimal> results=new HashMap<>(1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
 | 
	
		
			
				|  |  | +		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
 | 
	
		
			
				|  |  | +		BigDecimal onlineClassesUnitPrice=vipGroup.getOnlineClassesUnitPrice();
 | 
	
		
			
				|  |  | +		if(Objects.isNull(onlineClassesUnitPrice)){
 | 
	
		
			
				|  |  | +			onlineClassesUnitPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
 | 
	
		
			
				|  |  | +		BigDecimal offlineClassesUnitPrice=vipGroup.getOfflineClassesUnitPrice();
 | 
	
		
			
				|  |  | +		if(Objects.isNull(offlineClassesUnitPrice)){
 | 
	
		
			
				|  |  | +			offlineClassesUnitPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 | 
	
		
			
				|  |  | +		BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
 | 
	
		
			
				|  |  | +		BigDecimal teacherOnlineSalary=null,teacherOfflineSalary=null;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(Objects.isNull(vipGroupActivity.getType())){
 | 
	
		
			
				|  |  | +			throw new BizException("此活动未设置活动类型");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//课程购买费用计算
 | 
	
		
			
				|  |  | +		BigDecimal totalPrice;
 | 
	
		
			
				|  |  | +		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).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | +				break;
 | 
	
		
			
				|  |  | +			case GIVE_CLASS:
 | 
	
		
			
				|  |  | +				if(totalClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))<0){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				}else if(vipGroup.getGiveTeachMode()==TeachModeEnum.OFFLINE){
 | 
	
		
			
				|  |  | +					if(totalClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 | 
	
		
			
				|  |  | +						offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 | 
	
		
			
				|  |  | +				}else if(vipGroup.getGiveTeachMode()==TeachModeEnum.ONLINE){
 | 
	
		
			
				|  |  | +					if(totalClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 | 
	
		
			
				|  |  | +						onlineClassNum=onlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
 | 
	
		
			
				|  |  | +				}else{
 | 
	
		
			
				|  |  | +					throw new BizException("请指定赠送课程类型!");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
 | 
	
		
			
				|  |  | +				break;
 | 
	
		
			
				|  |  | +			default:
 | 
	
		
			
				|  |  | +				throw new BizException("活动类型错误!");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		results.put("totalPrice",totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		int normalStudentNum = 0;
 | 
	
		
			
				|  |  | +		if(Objects.nonNull(vipGroup.getId())){
 | 
	
		
			
				|  |  | +			normalStudentNum = courseScheduleStudentPaymentDao.countStudentNum(courseId.intValue());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//教师课酬线上单课酬计算
 | 
	
		
			
				|  |  | +		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
 | 
	
		
			
				|  |  | +			if(Objects.isNull(teacherOnlineSalary)){
 | 
	
		
			
				|  |  | +				switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 | 
	
		
			
				|  |  | +					case TEACHER_DEFAULT:
 | 
	
		
			
				|  |  | +						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
 | 
	
		
			
				|  |  | +							teacherOnlineSalary=new BigDecimal(0);
 | 
	
		
			
				|  |  | +						}else{
 | 
	
		
			
				|  |  | +							teacherOnlineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						results.put("onlineTeacherSalary",teacherOnlineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					case RATIO_DISCOUNT:
 | 
	
		
			
				|  |  | +						results.put("onlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum()))
 | 
	
		
			
				|  |  | +								.divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN)
 | 
	
		
			
				|  |  | +								.multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())
 | 
	
		
			
				|  |  | +								.divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN)
 | 
	
		
			
				|  |  | +								.setScale(0,BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					case FIXED_SALARY:
 | 
	
		
			
				|  |  | +						results.put("onlineTeacherSalary",vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					default:
 | 
	
		
			
				|  |  | +						throw new BizException("未指定课酬结算标准!");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//教师线下单课酬计算
 | 
	
		
			
				|  |  | +		if(Objects.nonNull(vipGroupSalarySettlementDto.getOfflineSalarySettlement())){
 | 
	
		
			
				|  |  | +			if(Objects.isNull(teacherOfflineSalary)){
 | 
	
		
			
				|  |  | +				switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
 | 
	
		
			
				|  |  | +					case TEACHER_DEFAULT:
 | 
	
		
			
				|  |  | +						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
 | 
	
		
			
				|  |  | +							teacherOfflineSalary=new BigDecimal(0);
 | 
	
		
			
				|  |  | +						}else{
 | 
	
		
			
				|  |  | +							teacherOfflineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						results.put("offlineTeacherSalary",teacherOfflineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					case RATIO_DISCOUNT:
 | 
	
		
			
				|  |  | +						results.put("offlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					case FIXED_SALARY:
 | 
	
		
			
				|  |  | +						results.put("offlineTeacherSalary",vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue().setScale(0, BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					default:
 | 
	
		
			
				|  |  | +						throw new BizException("未指定课酬结算标准!");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		BigDecimal ots = results.get("onlineTeacherSalary");
 | 
	
		
			
				|  |  | +		if(Objects.isNull(ots)){
 | 
	
		
			
				|  |  | +			ots = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if(Objects.isNull(ots)){
 | 
	
		
			
				|  |  | +			ots = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		BigDecimal ofts = results.get("offlineTeacherSalary");
 | 
	
		
			
				|  |  | +		if(Objects.isNull(ofts)){
 | 
	
		
			
				|  |  | +			ofts = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if(Objects.isNull(ofts)){
 | 
	
		
			
				|  |  | +			ofts = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		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);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		results.put("onlineTeacherSalary", ots);
 | 
	
		
			
				|  |  | +		results.put("offlineTeacherSalary", ofts);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return results;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Override
 | 
	
		
			
				|  |  |  	public void enableBuyVipGroup(Integer vipGroupId, Integer userId) {
 | 
	
		
			
				|  |  |  		if (Objects.isNull(vipGroupId)){
 | 
	
		
			
				|  |  |  			throw new BizException("请指定VIP课");
 |