|  | @@ -60,6 +60,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  	private SysUserCashAccountDao sysUserCashAccountDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |  	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +	private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	public BaseDAO<Long, VipGroup> getDAO() {
 | 
	
	
		
			
				|  | @@ -88,8 +94,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //获取活动信息
 | 
	
		
			
				|  |  |          VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
 | 
	
		
			
				|  |  | +		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //生成vip课信息
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//生成vip课信息
 | 
	
		
			
				|  |  |  		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
 | 
	
		
			
				|  |  |  		vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
 | 
	
		
			
				|  |  |  				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
 | 
	
	
		
			
				|  | @@ -116,16 +124,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		//创建班级老师关联记录
 | 
	
		
			
				|  |  |  		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
 | 
	
		
			
				|  |  | -		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.TEACHING);
 | 
	
		
			
				|  |  | +		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
 | 
	
		
			
				|  |  |  		classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
 | 
	
		
			
				|  |  |  		classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		//创建班级与老师课酬记录
 | 
	
		
			
				|  |  |  		ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
 | 
	
		
			
				|  |  | -		classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.TEACHING);
 | 
	
		
			
				|  |  | +		classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
 | 
	
		
			
				|  |  |  		classGroupTeacherSalary.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
 | 
	
		
			
				|  |  |  		classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +		classGroupTeacherSalary.setOnlineClassesSalary(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary());
 | 
	
		
			
				|  |  | +		classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		//课程信息调整
 | 
	
		
			
				|  |  |  		vipGroup.getCourseSchedules().forEach(courseSchedule -> {
 | 
	
	
		
			
				|  | @@ -138,11 +147,125 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  		courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		//创建老师与学生费用相关记录
 | 
	
		
			
				|  |  | +		TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroupApplyBaseInfoDto.getUserId().longValue(),
 | 
	
		
			
				|  |  | +				vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>();
 | 
	
		
			
				|  |  | +		List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
 | 
	
		
			
				|  |  |  		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
 | 
	
		
			
				|  |  | -		vipGroup.getCourseSchedules().forEach(courseSchedule -> {
 | 
	
		
			
				|  |  | -			CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
 | 
	
		
			
				|  |  | -		});
 | 
	
		
			
				|  |  | +		for(TeachModeEnum teachModeEnum:courseScheduleGroupByTeachMode.keySet()){
 | 
	
		
			
				|  |  | +			List<CourseSchedule> courseSchedules = courseScheduleGroupByTeachMode.get(teachModeEnum)
 | 
	
		
			
				|  |  | +					.stream()
 | 
	
		
			
				|  |  | +					.sorted(Comparator.comparing(CourseSchedule::getStartClassTime)).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +			for(int i=0;i<courseSchedules.size();i++){
 | 
	
		
			
				|  |  | +				//创建教师课程薪水记录
 | 
	
		
			
				|  |  | +				CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setUserId(vipGroupApplyBaseInfoDto.getUserId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//创建学生课程应缴费记录
 | 
	
		
			
				|  |  | +				CourseScheduleStudentPayment courseScheduleStudentPayment=new CourseScheduleStudentPayment();
 | 
	
		
			
				|  |  | +				courseScheduleStudentPayment.setCourseScheduleId(courseSchedules.get(i).getId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if(teachModeEnum==TeachModeEnum.ONLINE){
 | 
	
		
			
				|  |  | +					if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
 | 
	
		
			
				|  |  | +							&&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
 | 
	
		
			
				|  |  | +							&&i>=Integer.parseInt(vipGroupActivity.getAttribute1())
 | 
	
		
			
				|  |  | +							&&"0".equals(vipGroupActivity.getGiveClassPaySalaryFlag())){
 | 
	
		
			
				|  |  | +						courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(0));
 | 
	
		
			
				|  |  | +					}else {
 | 
	
		
			
				|  |  | +						//教师课酬线上单课酬计算
 | 
	
		
			
				|  |  | +						switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 | 
	
		
			
				|  |  | +							case TEACHER_DEFAULT:
 | 
	
		
			
				|  |  | +								courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOnlineClassesSalary());
 | 
	
		
			
				|  |  | +								break;
 | 
	
		
			
				|  |  | +							case RATIO_DISCOUNT:
 | 
	
		
			
				|  |  | +								courseScheduleTeacherSalary.setExpectSalary(vipGroupApplyBaseInfoDto
 | 
	
		
			
				|  |  | +										.getOnlineTeacherSalary()
 | 
	
		
			
				|  |  | +										.multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()));
 | 
	
		
			
				|  |  | +								break;
 | 
	
		
			
				|  |  | +							case FIXED_SALARY:
 | 
	
		
			
				|  |  | +								courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue());
 | 
	
		
			
				|  |  | +								break;
 | 
	
		
			
				|  |  | +							default:
 | 
	
		
			
				|  |  | +								throw new BizException("未指定课酬结算标准!");
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					//学生线上单节课应缴费计算
 | 
	
		
			
				|  |  | +					switch (vipGroupActivity.getType()){
 | 
	
		
			
				|  |  | +						case BASE_ACTIVITY:
 | 
	
		
			
				|  |  | +							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
 | 
	
		
			
				|  |  | +							break;
 | 
	
		
			
				|  |  | +						case DISCOUNT:
 | 
	
		
			
				|  |  | +							courseScheduleStudentPayment.setExpectPrice(
 | 
	
		
			
				|  |  | +									vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().multiply(
 | 
	
		
			
				|  |  | +											new BigDecimal(vipGroupActivity.getAttribute1())
 | 
	
		
			
				|  |  | +									)
 | 
	
		
			
				|  |  | +							);
 | 
	
		
			
				|  |  | +							break;
 | 
	
		
			
				|  |  | +						case GIVE_CLASS:
 | 
	
		
			
				|  |  | +							if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
 | 
	
		
			
				|  |  | +									&&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
 | 
	
		
			
				|  |  | +									&&i>=Integer.parseInt(vipGroupActivity.getAttribute1())){
 | 
	
		
			
				|  |  | +								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
 | 
	
		
			
				|  |  | +							}else {
 | 
	
		
			
				|  |  | +								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +							break;
 | 
	
		
			
				|  |  | +						default:
 | 
	
		
			
				|  |  | +							throw new BizException("活动类型错误!");
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}else{
 | 
	
		
			
				|  |  | +					//教师线下单课酬计算
 | 
	
		
			
				|  |  | +					switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
 | 
	
		
			
				|  |  | +						case TEACHER_DEFAULT:
 | 
	
		
			
				|  |  | +							courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOfflineClassesSalary());
 | 
	
		
			
				|  |  | +							break;
 | 
	
		
			
				|  |  | +						case RATIO_DISCOUNT:
 | 
	
		
			
				|  |  | +							courseScheduleTeacherSalary.setExpectSalary(vipGroupApplyBaseInfoDto
 | 
	
		
			
				|  |  | +									.getOfflineTeacherSalary()
 | 
	
		
			
				|  |  | +									.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()));
 | 
	
		
			
				|  |  | +							break;
 | 
	
		
			
				|  |  | +						case FIXED_SALARY:
 | 
	
		
			
				|  |  | +							courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue());
 | 
	
		
			
				|  |  | +							break;
 | 
	
		
			
				|  |  | +						default:
 | 
	
		
			
				|  |  | +							throw new BizException("未指定课酬结算标准!");
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//学生线下单节课应缴费计算
 | 
	
		
			
				|  |  | +				switch (vipGroupActivity.getType()){
 | 
	
		
			
				|  |  | +					case BASE_ACTIVITY:
 | 
	
		
			
				|  |  | +						courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					case DISCOUNT:
 | 
	
		
			
				|  |  | +						courseScheduleStudentPayment.setExpectPrice(
 | 
	
		
			
				|  |  | +								vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().multiply(
 | 
	
		
			
				|  |  | +										new BigDecimal(vipGroupActivity.getAttribute1())
 | 
	
		
			
				|  |  | +								)
 | 
	
		
			
				|  |  | +						);
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					case GIVE_CLASS:
 | 
	
		
			
				|  |  | +						if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
 | 
	
		
			
				|  |  | +								&&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
 | 
	
		
			
				|  |  | +								&&i>=Integer.parseInt(vipGroupActivity.getAttribute1())){
 | 
	
		
			
				|  |  | +							courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
 | 
	
		
			
				|  |  | +						}else {
 | 
	
		
			
				|  |  | +							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					default:
 | 
	
		
			
				|  |  | +						throw new BizException("活动类型错误!");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
 | 
	
		
			
				|  |  | +				courseScheduleStudentPayments.add(courseScheduleStudentPayment);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 | 
	
		
			
				|  |  | +		courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
	
		
			
				|  | @@ -358,7 +481,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |       * @Date: 2019/10/2
 | 
	
		
			
				|  |  |       * 计算VIP课程预计收费
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
 | 
	
		
			
				|  |  |  		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
 | 
	
		
			
				|  |  |  		if(Objects.isNull(vipGroup)){
 | 
	
		
			
				|  |  |  			throw new BizException("该课未指定活动方案");
 | 
	
	
		
			
				|  | @@ -367,7 +491,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
 | 
	
		
			
				|  |  |  		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
 | 
	
		
			
				|  |  |  		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 | 
	
		
			
				|  |  | -		BigDecimal totalPrice=null;
 | 
	
		
			
				|  |  | +		BigDecimal totalPrice;
 | 
	
		
			
				|  |  |  		switch (vipGroupActivity.getType()){
 | 
	
		
			
				|  |  |  			case BASE_ACTIVITY:
 | 
	
		
			
				|  |  |  				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
 | 
	
	
		
			
				|  | @@ -378,7 +502,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 | 
	
		
			
				|  |  |  				totalPrice=totalPrice.multiply(discount);
 | 
	
		
			
				|  |  |  				break;
 | 
	
		
			
				|  |  |  			case GIVE_CLASS:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +				if(vipGroup.getGiveTeachMode()==TeachModeEnum.OFFLINE){
 | 
	
		
			
				|  |  | +					if(offlineClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 | 
	
		
			
				|  |  | +						offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 | 
	
		
			
				|  |  | +				}else{
 | 
	
		
			
				|  |  | +					if(onlineClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 | 
	
		
			
				|  |  | +						onlineClassNum=onlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
 | 
	
		
			
				|  |  |  				break;
 | 
	
		
			
				|  |  |  			default:
 | 
	
		
			
				|  |  |  				throw new BizException("活动类型错误!");
 |