zouxuan 3 år sedan
förälder
incheckning
b057171ffb

+ 48 - 37
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -35,6 +35,8 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static java.math.BigDecimal.ROUND_DOWN;
+
 @Service
 public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Long, CourseScheduleStudentPayment>  implements CourseScheduleStudentPaymentService {
 
@@ -107,53 +109,62 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 		if(CollectionUtils.isEmpty(vipGroupCourseSchedules)){
 			throw new BizException("未获取到排课信息");
 		}
-
-		int giveClassTimes=0;
-//        if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)
-//                &&Objects.nonNull(vipGroupActivity)
-//                &&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.GIVE_CLASS)
-//                &&vipGroupCourseSchedules.size() >= Integer.parseInt(vipGroupActivity.getAttribute1())){
-//            giveClassTimes = Integer.parseInt(vipGroupActivity.getAttribute2());
-//        }
+		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
 
 		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDaop.findByStudentVipGroup(vipGroupId, userId, DealStatusEnum.SUCCESS.getCode());
-		BigDecimal couponFee = new BigDecimal(0);
 		if(Objects.nonNull(studentPaymentOrder)){
-			couponFee = studentPaymentOrder.getCouponRemitFee().divide(new BigDecimal(vipGroupCourseSchedules.size()-giveClassTimes), CommonConstants.DECIMAL_PLACE);
-		}
-
-		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
-		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroupCourseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
-		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++) {
-				//创建学生课程应缴费记录
+			//实际支付金额,去除优惠券
+			BigDecimal actualPrice = studentPaymentOrder.getExpectAmount().subtract(studentPaymentOrder.getCouponRemitFee());
+			BigDecimal divide = actualPrice.divide(new BigDecimal(vipGroupCourseSchedules.size()), ROUND_DOWN);
+			BigDecimal firstAmount = actualPrice.subtract(divide.multiply(new BigDecimal(vipGroupCourseSchedules.size()))).add(divide);
+			for (int i = 0; i < vipGroupCourseSchedules.size(); i++) {
+				CourseSchedule courseSchedule = vipGroupCourseSchedules.get(i);
 				CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
 				courseScheduleStudentPayment.setUserId(userId);
-	            courseScheduleStudentPayment.setGroupType(courseSchedules.get(i).getGroupType());
-	            courseScheduleStudentPayment.setMusicGroupId(courseSchedules.get(i).getMusicGroupId());
-				courseScheduleStudentPayment.setCourseScheduleId(courseSchedules.get(i).getId());
-				courseScheduleStudentPayment.setClassGroupId(courseSchedules.get(i).getClassGroupId());
-
-				if (teachModeEnum == TeachModeEnum.ONLINE) {
-					//学生线上单节课应缴费计算
-					courseScheduleStudentPayment.setExpectPrice(
-							vipGroup.getOnlineClassesUnitPrice().multiply(discount)
-									.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
-									.subtract(couponFee));
+				courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
+				courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
+				courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
+				courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
+				if (i == 0) {
+					courseScheduleStudentPayment.setExpectPrice(firstAmount);
 				}else{
-					//学生线下单节课应缴费计算
-					courseScheduleStudentPayment.setExpectPrice(
-							vipGroup.getOfflineClassesUnitPrice().multiply(discount)
-									.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
-									.subtract(couponFee));
+					courseScheduleStudentPayment.setExpectPrice(actualPrice);
 				}
-                courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(teachModeEnum)?vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice():vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
+				courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())?vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice():vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
 				courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
 				courseScheduleStudentPayments.add(courseScheduleStudentPayment);
 			}
+		}else {
+			Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroupCourseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
+			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++) {
+					//创建学生课程应缴费记录
+					CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+					courseScheduleStudentPayment.setUserId(userId);
+					courseScheduleStudentPayment.setGroupType(courseSchedules.get(i).getGroupType());
+					courseScheduleStudentPayment.setMusicGroupId(courseSchedules.get(i).getMusicGroupId());
+					courseScheduleStudentPayment.setCourseScheduleId(courseSchedules.get(i).getId());
+					courseScheduleStudentPayment.setClassGroupId(courseSchedules.get(i).getClassGroupId());
+
+					if (teachModeEnum == TeachModeEnum.ONLINE) {
+						//学生线上单节课应缴费计算
+						courseScheduleStudentPayment.setExpectPrice(
+								vipGroup.getOnlineClassesUnitPrice().multiply(discount)
+										.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+					}else{
+						//学生线下单节课应缴费计算
+						courseScheduleStudentPayment.setExpectPrice(
+								vipGroup.getOfflineClassesUnitPrice().multiply(discount)
+										.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+					}
+					courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(teachModeEnum)?vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice():vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
+					courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
+					courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+				}
+			}
 		}
 		return courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 	}