Browse Source

活动排课

zouxuan 3 năm trước cách đây
mục cha
commit
45a2dcb016

+ 3 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/ActivityUserMapperService.java

@@ -168,8 +168,8 @@ public interface ActivityUserMapperService extends BaseService<Integer, Activity
 
     /**
     * @description: 消耗排课资格
-     * @param activityUserMappers 付费的排课资格
-     * @param freeActivityUserMappers 赠送的排课资格
+     * @param categoryId 课程类型
+     * @param classMinutes 单课时长
      * @param courseNum 排课数
      * @param groupId 课程组编号
      * @param studentIdList 学员列表
@@ -177,8 +177,7 @@ public interface ActivityUserMapperService extends BaseService<Integer, Activity
     * @author zx
     * @date 2022/7/27 14:23
     */
-    List<CourseScheduleStudentPayment> use(List<ActivityUserMapper> activityUserMappers,
-                                           List<ActivityUserMapper> freeActivityUserMappers,
+    List<CourseScheduleStudentPayment> use(Integer categoryId,Integer classMinutes,
                                            int courseNum,
                                            Long groupId,List<Integer> studentIdList);
 

+ 80 - 79
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityUserMapperServiceImpl.java

@@ -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("所选学员排课资格不足");
 		}