|
|
@@ -12,8 +12,10 @@ import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.thirdparty.yqpay.DateUtils;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Isolation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
@@ -276,6 +278,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
|
|
|
MusicGroupPaymentCalender musicGroupUnusedFirstPaymentCalender = musicGroupPaymentCalenderDao.getMusicGroupUnusedFirstPaymentCalender(musicGroupId, studentIds);
|
|
|
if(Objects.isNull(musicGroupUnusedFirstPaymentCalender)){
|
|
|
@@ -302,6 +305,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
|
|
|
Map<CourseSchedule.CourseScheduleType, MusicGroupPaymentCalenderCourseSettings> courseTypeCourseSettingMap = calenderCourseSettings.stream().collect(Collectors.toMap(MusicGroupPaymentCalenderCourseSettings::getCourseType, cs -> cs, (c1, c2) -> c1));
|
|
|
|
|
|
+ List<CourseScheduleStudentPayment> baseCourseScheduleStudentPayments = new ArrayList<>();
|
|
|
+
|
|
|
Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
|
|
|
for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
|
|
|
MusicGroupPaymentCalenderCourseSettings musicGroupPaymentCalenderCourseSettings = courseTypeCourseSettingMap.get(typeCoursesEntry.getKey());
|
|
|
@@ -345,8 +350,10 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
}
|
|
|
typeCourseStudentPayments.get(0).setOriginalPrice(typeCourseStudentPayments.get(0).getOriginalPrice().add(musicGroupPaymentCalenderCourseSettings.getCourseOriginalPrice().subtract(typeCourseTotalOriginalPrice)));
|
|
|
typeCourseStudentPayments.get(0).setExpectPrice(typeCourseStudentPayments.get(0).getExpectPrice().add(musicGroupPaymentCalenderCourseSettings.getCourseCurrentPrice().subtract(typeCourseTotalCurrentPrice)));
|
|
|
+ baseCourseScheduleStudentPayments.addAll(typeCourseStudentPayments);
|
|
|
}
|
|
|
|
|
|
+ List<MusicGroupPaymentCalenderDetail> needUpdateCalenderDetails = new ArrayList<>();
|
|
|
List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
|
|
|
|
|
|
for (Integer studentId : studentIds) {
|
|
|
@@ -358,42 +365,45 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
if(!musicGroupPaymentCalenderDetail.getMusicGroupPaymentCalenderId().equals(musicGroupUnusedFirstPaymentCalender.getId())){
|
|
|
throw new BizException("缴费信息异常");
|
|
|
}
|
|
|
+ musicGroupPaymentCalenderDetail.setUseInCourse(1);
|
|
|
+ needUpdateCalenderDetails.add(musicGroupPaymentCalenderDetail);
|
|
|
|
|
|
- List<StudentPaymentOrderDetail> studentPaymentOrderDetails = orderIdOrderDetailMap.get(musicGroupPaymentCalenderDetail.getPaymentOrderId());
|
|
|
- for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
- MusicGroupPaymentCalenderCourseSettings musicGroupPaymentCalenderCourseSettings = courseTypeCourseSettingMap.get(courseSchedule.getType());
|
|
|
-
|
|
|
- //课程每分钟原价
|
|
|
- BigDecimal unitMinuteOriginalPrice = musicGroupPaymentCalenderCourseSettings.getCourseOriginalPrice().divide(new BigDecimal(musicGroupPaymentCalenderCourseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- //课程每分钟现价
|
|
|
- BigDecimal unitMinuteCurrentPrice = musicGroupPaymentCalenderCourseSettings.getCourseCurrentPrice().divide(new BigDecimal(musicGroupPaymentCalenderCourseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
-
|
|
|
- //课程时长
|
|
|
- int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
|
|
|
-
|
|
|
- //课程原价
|
|
|
- BigDecimal courseOriginalPrice = unitMinuteOriginalPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
- //课程现价
|
|
|
- BigDecimal courseCurrentPrice = unitMinuteCurrentPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
-
|
|
|
+ for (CourseScheduleStudentPayment baseCourseScheduleStudentPayment : baseCourseScheduleStudentPayments) {
|
|
|
CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
|
|
|
- cssp.setGroupType(courseSchedule.getGroupType());
|
|
|
- cssp.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
- cssp.setCourseScheduleId(courseSchedule.getId());
|
|
|
- cssp.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
+ BeanUtils.copyProperties(baseCourseScheduleStudentPayment, cssp);
|
|
|
cssp.setUserId(studentId);
|
|
|
- cssp.setBatchNo(musicGroupUnusedFirstPaymentCalender.getBatchNo());
|
|
|
- cssp.setOriginalPrice(courseOriginalPrice);
|
|
|
- cssp.setExpectPrice(courseCurrentPrice);
|
|
|
- cssp.setActualPrice(BigDecimal.ZERO);
|
|
|
courseScheduleStudentPayments.add(cssp);
|
|
|
}
|
|
|
}
|
|
|
courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
|
+ musicGroupPaymentCalenderDetailDao.batchUpdate(needUpdateCalenderDetails);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
public void updateForMusicGroupWithPaymentCalender(String batchNo) {
|
|
|
-
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByBatchNo(batchNo);
|
|
|
+ if(CollectionUtils.isEmpty(courseScheduleStudentPayments)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
|
|
|
+ if(CollectionUtils.isEmpty(musicGroupPaymentCalenders)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> calenderIds = musicGroupPaymentCalenders.stream().map(MusicGroupPaymentCalender::getId).collect(Collectors.toList());
|
|
|
+ List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.getWithCalenderIds(calenderIds);
|
|
|
+ //学员总缴费金额
|
|
|
+ BigDecimal totalActualAmount = calenderDetails.stream().map(MusicGroupPaymentCalenderDetail::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ for (CourseScheduleStudentPayment courseScheduleStudentPayment : courseScheduleStudentPayments) {
|
|
|
+ if(totalActualAmount.compareTo(courseScheduleStudentPayment.getExpectPrice())>=0){
|
|
|
+ courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
|
|
|
+ totalActualAmount=totalActualAmount.subtract(courseScheduleStudentPayment.getExpectPrice());
|
|
|
+ }else{
|
|
|
+ courseScheduleStudentPayment.setActualPrice(totalActualAmount);
|
|
|
+ totalActualAmount=BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ courseScheduleStudentPaymentDao.batchUpdate(courseScheduleStudentPayments);
|
|
|
}
|
|
|
}
|