|
@@ -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);
|
|
|
}
|