|
@@ -1,6 +1,7 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.CourseScheduleStudentListDto;
|
|
@@ -67,6 +68,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
private StudentRegistrationService studentRegistrationService;
|
|
|
@Autowired
|
|
|
private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao;
|
|
|
+ @Autowired
|
|
|
+ private SysConfigDao sysConfigDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Long, CourseScheduleStudentPayment> getDAO() {
|
|
@@ -310,34 +313,73 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds,String batchNo) {
|
|
|
//获取合班时的缴费项目
|
|
|
- MusicGroupStudentClassAdjust byBatchNo = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
|
|
|
+ List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
|
|
|
//获取提交的合班申请
|
|
|
MusicGroupStudentClassAdjust classAdjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
|
|
|
List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
|
|
|
List<Long> courseIds = JSON.parseArray(classAdjust.getSubLockCourseIds(), Long.class);
|
|
|
+
|
|
|
+ Map<CourseSchedule.CourseScheduleType, Integer> courseTypeCourseDurationMap = new HashMap<>();
|
|
|
+ Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
|
|
|
+ for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
|
|
|
+ int totalCourseDuration = 0;
|
|
|
+ for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
|
|
|
+ //课程时长
|
|
|
+ int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
|
|
|
+ totalCourseDuration += courseDuration;
|
|
|
+ }
|
|
|
+ courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), totalCourseDuration);
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取默认的排课时长
|
|
|
+ String courseDefaultMinutes = sysConfigDao.findConfigValue("music_course_default_minutes");
|
|
|
+ JSONObject jsonObject = JSON.parseObject(courseDefaultMinutes);
|
|
|
+
|
|
|
for (Integer studentId : studentIds) {
|
|
|
//优先处理之前剩余的课程
|
|
|
List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.queryCourseByIdsAndStudentId(courseIds,studentId);
|
|
|
- Map<Long, List<CourseScheduleStudentPayment>> collect = null;
|
|
|
- if(studentPayments != null && studentPayments.size() >0 ){
|
|
|
- collect = studentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getCourseScheduleId));
|
|
|
- }
|
|
|
- for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
- //
|
|
|
- if(studentPayments != null && studentPayments.size() >0 ){
|
|
|
- List<CourseScheduleStudentPayment> payments = collect.get(courseSchedule.getId());
|
|
|
- if(payments != null && payments.size() > 0){
|
|
|
- //复制之前的数据
|
|
|
- CourseScheduleStudentPayment scheduleStudentPayment = payments.get(0);
|
|
|
- scheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
- scheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
- scheduleStudentPayment.setOpenPlayMidi(null);
|
|
|
-
|
|
|
+ for (int i = 0; i < courseSchedules.size(); i++) {
|
|
|
+ CourseSchedule courseSchedule = courseSchedules.get(i);
|
|
|
+ //优先处理之前的剩余课程
|
|
|
+ if(studentPayments != null && studentPayments.size() > 0 && i < studentPayments.size()){
|
|
|
+ for (int j = 0; j < studentPayments.size(); j++) {
|
|
|
+ CourseScheduleStudentPayment studentPayment = studentPayments.get(i);
|
|
|
+ studentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
+ studentPayment.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
+ studentPayment.setOpenPlayMidi(null);
|
|
|
+ studentPayment.setSettlementTime(null);
|
|
|
+ studentPayment.setExamSongDownloadJson(null);
|
|
|
+ courseScheduleStudentPayments.add(studentPayment);
|
|
|
+ break;
|
|
|
}
|
|
|
- }
|
|
|
- //如果合班时生成了缴费项目
|
|
|
- if(byBatchNo != null){
|
|
|
+ Set<Long> calenderIds = musicGroupPaymentCalenders.stream().map(e -> e.getId()).collect(Collectors.toSet());
|
|
|
+ List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalendersAndCourseType(calenderIds, null);
|
|
|
+ Map<Long, List<MusicGroupPaymentCalenderCourseSettings>> collect = musicGroupPaymentCalenderCourseSettings.stream().collect(Collectors.groupingBy(MusicGroupPaymentCalenderCourseSettings::getMusicGroupPaymentCalenderId));
|
|
|
+ for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) {
|
|
|
+ MusicGroupPaymentCalenderCourseSettings courseSetting = collect.get(musicGroupPaymentCalender.getId()).get(0);
|
|
|
+ //课程每分钟原价
|
|
|
+ BigDecimal unitMinuteOriginalPrice = courseSetting.getCourseOriginalPrice().divide(new BigDecimal(courseSetting.getCourseTotalMinuties()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
+ //课程每分钟现价
|
|
|
+ BigDecimal unitMinuteCurrentPrice = courseSetting.getCourseCurrentPrice().divide(new BigDecimal(courseSetting.getCourseTotalMinuties()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
+
|
|
|
+ //默认课程时长
|
|
|
+ int courseDuration = Integer.parseInt(jsonObject.get(courseSchedule.getType().getCode()).toString());
|
|
|
+ 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);
|
|
|
+ CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
|
|
|
+ cssp.setGroupType(courseSchedule.getGroupType());
|
|
|
+ cssp.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
+ cssp.setCourseScheduleId(courseSchedule.getId());
|
|
|
+ cssp.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
+ cssp.setBatchNo(batchNo);
|
|
|
+ cssp.setUserId(studentId);
|
|
|
+ cssp.setOriginalPrice(courseOriginalPrice);
|
|
|
+ cssp.setExpectPrice(courseCurrentPrice);
|
|
|
+ cssp.setActualPrice(BigDecimal.ZERO);
|
|
|
+ courseScheduleStudentPayments.add(cssp);
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|