|  | @@ -685,12 +685,8 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			return sum;
 | 
	
		
			
				|  |  |  		})));
 | 
	
		
			
				|  |  | -		//获取学员付费排课资格
 | 
	
		
			
				|  |  | -		List<ActivityUserMapper> activityUserMappers = activityUserMapperDao.findByStudents(studentIdList,categoryId,classMinutes);
 | 
	
		
			
				|  |  | -		//获取学员赠送排课资格
 | 
	
		
			
				|  |  | -		List<ActivityUserMapper> freeActivityUserMappers = activityUserMapperDao.findByStudents1(studentIdList,categoryId,classMinutes);
 | 
	
		
			
				|  |  |  		//消耗排课资格(获取被使用的排课资格)
 | 
	
		
			
				|  |  | -		return this.use(activityUserMappers, freeActivityUserMappers, courseNum,groupId,studentIdList);
 | 
	
		
			
				|  |  | +		return this.use(categoryId,classMinutes, courseNum,groupId,studentIdList);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private void getStudentPayment(Integer userId,
 | 
	
	
		
			
				|  | @@ -730,81 +726,86 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  | -	public List<CourseScheduleStudentPayment> use(List<ActivityUserMapper> activityUserMappers,
 | 
	
		
			
				|  |  | -												  List<ActivityUserMapper> freeActivityUserMappers,
 | 
	
		
			
				|  |  | +	public List<CourseScheduleStudentPayment> use(Integer categoryId,Integer classMinutes,
 | 
	
		
			
				|  |  |  												  int courseNum,
 | 
	
		
			
				|  |  |  												  Long groupId,List<Integer> studentIdList) {
 | 
	
		
			
				|  |  | -		Map<Integer, List<ActivityUserMapper>> collect = activityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
 | 
	
		
			
				|  |  |  		Map<Integer,Integer> subCourseMap = new HashMap<>();
 | 
	
		
			
				|  |  |  		studentIdList.stream().forEach(e-> subCourseMap.put(e,courseNum));
 | 
	
		
			
				|  |  |  		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
 | 
	
		
			
				|  |  | -		List<ActivityUserMapper> useActivityUserMappers = new ArrayList<>();
 | 
	
		
			
				|  |  | -		one:for (Integer integer : collect.keySet()) {
 | 
	
		
			
				|  |  | -			Integer subCourseNum = courseNum;
 | 
	
		
			
				|  |  | -			List<ActivityUserMapper> activityUserMapperList = collect.get(integer);
 | 
	
		
			
				|  |  | -			for (ActivityUserMapper activityUserMapper : activityUserMapperList) {
 | 
	
		
			
				|  |  | -				if(subCourseNum == 0){
 | 
	
		
			
				|  |  | -					continue one;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				useActivityUserMappers.add(activityUserMapper);
 | 
	
		
			
				|  |  | -				//区分vip还是网管
 | 
	
		
			
				|  |  | -				this.modifyGroupId(activityUserMapper,groupId);
 | 
	
		
			
				|  |  | -				int num = activityUserMapper.getSubCourseNum();
 | 
	
		
			
				|  |  | -				//剩余课次不足
 | 
	
		
			
				|  |  | -				if(num <= subCourseNum){
 | 
	
		
			
				|  |  | -					subCourseNum = subCourseNum - num;
 | 
	
		
			
				|  |  | -					subCourseMap.put(integer, subCourseNum);
 | 
	
		
			
				|  |  | -					activityUserMapper.setSubCourseNum(0);
 | 
	
		
			
				|  |  | -					//生成学员课程支付记录
 | 
	
		
			
				|  |  | -					this.getStudentPayment(integer,activityUserMapper.getSubNoCoursePrice(),num,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | -					activityUserMapper.setCurrentCoursePrice(activityUserMapper.getSubNoCoursePrice());
 | 
	
		
			
				|  |  | -					activityUserMapper.setSubNoCoursePrice(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | -				}else {
 | 
	
		
			
				|  |  | -					subCourseMap.put(integer, 0);
 | 
	
		
			
				|  |  | -					activityUserMapper.setSubCourseNum(num - subCourseNum);
 | 
	
		
			
				|  |  | -					//单课价值
 | 
	
		
			
				|  |  | -					BigDecimal singlePrice = activityUserMapper.getActualPrice().divide(new BigDecimal(activityUserMapper.getTotalCourseNum()), RoundingMode.DOWN);
 | 
	
		
			
				|  |  | -					//消耗的课程总价值
 | 
	
		
			
				|  |  | -					BigDecimal divide = singlePrice.multiply(new BigDecimal(subCourseNum));
 | 
	
		
			
				|  |  | -					activityUserMapper.setSubNoCoursePrice(activityUserMapper.getSubNoCoursePrice().subtract(divide));
 | 
	
		
			
				|  |  | -					activityUserMapper.setCurrentCoursePrice(divide);
 | 
	
		
			
				|  |  | -					this.getStudentPayment(integer,subCourseNum,singlePrice,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | -					//剩余课次充足
 | 
	
		
			
				|  |  | -					continue one;
 | 
	
		
			
				|  |  | +		//获取学员付费排课资格
 | 
	
		
			
				|  |  | +		List<ActivityUserMapper> activityUserMappers = activityUserMapperDao.findByStudents(studentIdList,categoryId,classMinutes);
 | 
	
		
			
				|  |  | +		if(CollectionUtils.isNotEmpty(activityUserMappers)){
 | 
	
		
			
				|  |  | +			Map<Integer, List<ActivityUserMapper>> collect = activityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
 | 
	
		
			
				|  |  | +			one:for (Integer integer : collect.keySet()) {
 | 
	
		
			
				|  |  | +				Integer subCourseNum = courseNum;
 | 
	
		
			
				|  |  | +				List<ActivityUserMapper> activityUserMapperList = collect.get(integer);
 | 
	
		
			
				|  |  | +				for (ActivityUserMapper activityUserMapper : activityUserMapperList) {
 | 
	
		
			
				|  |  | +					if(subCourseNum == 0){
 | 
	
		
			
				|  |  | +						continue one;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//区分vip还是网管
 | 
	
		
			
				|  |  | +					this.modifyGroupId(activityUserMapper,groupId);
 | 
	
		
			
				|  |  | +					int num = activityUserMapper.getSubCourseNum();
 | 
	
		
			
				|  |  | +					//剩余课次不足
 | 
	
		
			
				|  |  | +					if(num <= subCourseNum){
 | 
	
		
			
				|  |  | +						subCourseNum = subCourseNum - num;
 | 
	
		
			
				|  |  | +						subCourseMap.put(integer, subCourseNum);
 | 
	
		
			
				|  |  | +						activityUserMapper.setSubCourseNum(0);
 | 
	
		
			
				|  |  | +						//生成学员课程支付记录
 | 
	
		
			
				|  |  | +						this.getStudentPayment(integer,activityUserMapper.getSubNoCoursePrice(),num,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | +						activityUserMapper.setCurrentCoursePrice(activityUserMapper.getSubNoCoursePrice());
 | 
	
		
			
				|  |  | +						activityUserMapper.setSubNoCoursePrice(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +					}else {
 | 
	
		
			
				|  |  | +						subCourseMap.put(integer, 0);
 | 
	
		
			
				|  |  | +						activityUserMapper.setSubCourseNum(num - subCourseNum);
 | 
	
		
			
				|  |  | +						//单课价值
 | 
	
		
			
				|  |  | +						BigDecimal singlePrice = activityUserMapper.getActualPrice().divide(new BigDecimal(activityUserMapper.getTotalCourseNum()), RoundingMode.DOWN);
 | 
	
		
			
				|  |  | +						//消耗的课程总价值
 | 
	
		
			
				|  |  | +						BigDecimal divide = singlePrice.multiply(new BigDecimal(subCourseNum));
 | 
	
		
			
				|  |  | +						activityUserMapper.setSubNoCoursePrice(activityUserMapper.getSubNoCoursePrice().subtract(divide));
 | 
	
		
			
				|  |  | +						activityUserMapper.setCurrentCoursePrice(divide);
 | 
	
		
			
				|  |  | +						this.getStudentPayment(integer,subCourseNum,singlePrice,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | +						//剩余课次充足
 | 
	
		
			
				|  |  | +						continue one;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			activityUserMapperDao.batchUpdate(activityUserMappers);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		Map<Integer, List<ActivityUserMapper>> collect1 = freeActivityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
 | 
	
		
			
				|  |  | -		one:for (Integer integer : subCourseMap.keySet()) {
 | 
	
		
			
				|  |  | -			Integer subCourseNum = subCourseMap.get(integer);
 | 
	
		
			
				|  |  | -			if(subCourseNum == 0){
 | 
	
		
			
				|  |  | -				continue;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			List<ActivityUserMapper> activityUserMapperList = collect1.get(integer);
 | 
	
		
			
				|  |  | -			for (ActivityUserMapper activityUserMapper : activityUserMapperList) {
 | 
	
		
			
				|  |  | +		//获取学员赠送排课资格
 | 
	
		
			
				|  |  | +		List<ActivityUserMapper> freeActivityUserMappers = activityUserMapperDao.findByStudents1(studentIdList,categoryId,classMinutes);
 | 
	
		
			
				|  |  | +		if(CollectionUtils.isNotEmpty(freeActivityUserMappers)){
 | 
	
		
			
				|  |  | +			Map<Integer, List<ActivityUserMapper>> collect1 = freeActivityUserMappers.stream().collect(Collectors.groupingBy(ActivityUserMapper::getUserId));
 | 
	
		
			
				|  |  | +			one:for (Integer integer : subCourseMap.keySet()) {
 | 
	
		
			
				|  |  | +				Integer subCourseNum = subCourseMap.get(integer);
 | 
	
		
			
				|  |  |  				if(subCourseNum == 0){
 | 
	
		
			
				|  |  | -					continue one;
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				List<ActivityUserMapper> activityUserMapperList = collect1.get(integer);
 | 
	
		
			
				|  |  | +				for (ActivityUserMapper activityUserMapper : activityUserMapperList) {
 | 
	
		
			
				|  |  | +					if(subCourseNum == 0){
 | 
	
		
			
				|  |  | +						continue one;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//区分vip还是网管
 | 
	
		
			
				|  |  | +					this.modifyGiveGroupId(activityUserMapper,groupId);
 | 
	
		
			
				|  |  | +					int num = activityUserMapper.getSubGiveCourseNum();
 | 
	
		
			
				|  |  | +					//剩余课次不足
 | 
	
		
			
				|  |  | +					if(num <= subCourseNum){
 | 
	
		
			
				|  |  | +						activityUserMapper.setSubGiveCourseNum(0);
 | 
	
		
			
				|  |  | +						subCourseNum = subCourseNum - num;
 | 
	
		
			
				|  |  | +						this.getStudentPayment(integer,num,BigDecimal.ZERO,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | +					}else {
 | 
	
		
			
				|  |  | +						activityUserMapper.setSubGiveCourseNum(num - subCourseNum);
 | 
	
		
			
				|  |  | +						this.getStudentPayment(integer,subCourseNum,BigDecimal.ZERO,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | +						continue one;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				useActivityUserMappers.add(activityUserMapper);
 | 
	
		
			
				|  |  | -				//区分vip还是网管
 | 
	
		
			
				|  |  | -				this.modifyGiveGroupId(activityUserMapper,groupId);
 | 
	
		
			
				|  |  | -				int num = activityUserMapper.getSubGiveCourseNum();
 | 
	
		
			
				|  |  | -				//剩余课次不足
 | 
	
		
			
				|  |  | -				if(num <= subCourseNum){
 | 
	
		
			
				|  |  | -					activityUserMapper.setSubGiveCourseNum(0);
 | 
	
		
			
				|  |  | -					subCourseNum = subCourseNum - num;
 | 
	
		
			
				|  |  | -					this.getStudentPayment(integer,num,BigDecimal.ZERO,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | -				}else {
 | 
	
		
			
				|  |  | -					activityUserMapper.setSubGiveCourseNum(num - subCourseNum);
 | 
	
		
			
				|  |  | -					this.getStudentPayment(integer,subCourseNum,BigDecimal.ZERO,courseScheduleStudentPayments,activityUserMapper.getId());
 | 
	
		
			
				|  |  | -					continue one;
 | 
	
		
			
				|  |  | +				if (subCourseNum > 0){
 | 
	
		
			
				|  |  | +					throw new BizException("所选部分学员排课资格不足,请重新选择");
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			if (subCourseNum > 0){
 | 
	
		
			
				|  |  | -				throw new BizException("所选部分学员排课资格不足,请重新选择");
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | +			activityUserMapperDao.batchUpdate(freeActivityUserMappers);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		activityUserMapperDao.batchUpdate(useActivityUserMappers);
 | 
	
		
			
				|  |  |  		return courseScheduleStudentPayments;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1085,18 +1086,7 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 | 
	
		
			
				|  |  |  	public void use(List<ActivityUserMapper> activityUserMappers, List<ActivityUserMapper> freeActivityUserMappers,
 | 
	
		
			
				|  |  |  										   BaseMapDto<Integer,Integer> indexDto,Long groupId,CourseScheduleStudentPayment courseScheduleStudentPayment) {
 | 
	
		
			
				|  |  |  		//扣除排课资格
 | 
	
		
			
				|  |  | -		if (!org.springframework.util.CollectionUtils.isEmpty(freeActivityUserMappers) && freeActivityUserMappers.size() > indexDto.getKey()) {
 | 
	
		
			
				|  |  | -			ActivityUserMapper activityUserMapper = freeActivityUserMappers.get(indexDto.getKey());
 | 
	
		
			
				|  |  | -			Integer subCourseNum = activityUserMapper.getSubGiveCourseNum();
 | 
	
		
			
				|  |  | -			if(subCourseNum == 1){
 | 
	
		
			
				|  |  | -				indexDto.setKey(indexDto.getKey() + 1);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			activityUserMapper.setSubGiveCourseNum(subCourseNum - 1);
 | 
	
		
			
				|  |  | -			this.modifyGiveGroupId(activityUserMapper,groupId);
 | 
	
		
			
				|  |  | -			courseScheduleStudentPayment.setActivityUserMapperId(activityUserMapper.getId());
 | 
	
		
			
				|  |  | -			courseScheduleStudentPayment.setActualPrice(ZERO);
 | 
	
		
			
				|  |  | -			courseScheduleStudentPayment.setExpectPrice(ZERO);
 | 
	
		
			
				|  |  | -		}else if(!org.springframework.util.CollectionUtils.isEmpty(activityUserMappers) && activityUserMappers.size() > indexDto.getValue()){
 | 
	
		
			
				|  |  | +		if(!org.springframework.util.CollectionUtils.isEmpty(activityUserMappers) && activityUserMappers.size() > indexDto.getValue()){
 | 
	
		
			
				|  |  |  			ActivityUserMapper activityUserMapper = activityUserMappers.get(indexDto.getValue());
 | 
	
		
			
				|  |  |  			BigDecimal consumerPrice = ZERO;
 | 
	
		
			
				|  |  |  			Integer subCourseNum = activityUserMapper.getSubCourseNum();
 | 
	
	
		
			
				|  | @@ -1116,6 +1106,17 @@ public class ActivityUserMapperServiceImpl extends BaseServiceImpl<Integer, Acti
 | 
	
		
			
				|  |  |  			courseScheduleStudentPayment.setActivityUserMapperId(activityUserMapper.getId());
 | 
	
		
			
				|  |  |  			courseScheduleStudentPayment.setActualPrice(consumerPrice);
 | 
	
		
			
				|  |  |  			courseScheduleStudentPayment.setExpectPrice(consumerPrice);
 | 
	
		
			
				|  |  | +		}else if (!org.springframework.util.CollectionUtils.isEmpty(freeActivityUserMappers) && freeActivityUserMappers.size() > indexDto.getKey()) {
 | 
	
		
			
				|  |  | +			ActivityUserMapper activityUserMapper = freeActivityUserMappers.get(indexDto.getKey());
 | 
	
		
			
				|  |  | +			Integer subCourseNum = activityUserMapper.getSubGiveCourseNum();
 | 
	
		
			
				|  |  | +			if(subCourseNum == 1){
 | 
	
		
			
				|  |  | +				indexDto.setKey(indexDto.getKey() + 1);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			activityUserMapper.setSubGiveCourseNum(subCourseNum - 1);
 | 
	
		
			
				|  |  | +			this.modifyGiveGroupId(activityUserMapper,groupId);
 | 
	
		
			
				|  |  | +			courseScheduleStudentPayment.setActivityUserMapperId(activityUserMapper.getId());
 | 
	
		
			
				|  |  | +			courseScheduleStudentPayment.setActualPrice(ZERO);
 | 
	
		
			
				|  |  | +			courseScheduleStudentPayment.setExpectPrice(ZERO);
 | 
	
		
			
				|  |  |  		}else {
 | 
	
		
			
				|  |  |  			throw new BizException("所选学员排课资格不足");
 | 
	
		
			
				|  |  |  		}
 |