|
@@ -10,10 +10,7 @@ import com.ym.mec.biz.dal.dto.VipGroupGiveCourseSortDto;
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
import com.ym.mec.biz.dal.page.CourseScheduleStudentPaymentQueryInfo;
|
|
import com.ym.mec.biz.dal.page.CourseScheduleStudentPaymentQueryInfo;
|
|
-import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
|
|
|
|
-import com.ym.mec.biz.service.OperatingReportCloudService;
|
|
|
|
-import com.ym.mec.biz.service.StudentRegistrationService;
|
|
|
|
-import com.ym.mec.biz.service.SysUserCashAccountService;
|
|
|
|
|
|
+import com.ym.mec.biz.service.*;
|
|
import com.ym.mec.common.constant.CommonConstants;
|
|
import com.ym.mec.common.constant.CommonConstants;
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
import com.ym.mec.common.exception.BizException;
|
|
import com.ym.mec.common.exception.BizException;
|
|
@@ -22,13 +19,12 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import org.apache.commons.beanutils.BeanUtils;
|
|
import org.apache.commons.beanutils.BeanUtils;
|
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
-import org.springframework.util.CollectionUtils;
|
|
|
|
-
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -60,6 +56,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
@Autowired
|
|
@Autowired
|
|
private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
|
|
private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
|
|
@Autowired
|
|
@Autowired
|
|
|
|
+ private MusicGroupPaymentStudentCourseDetailLogService musicGroupPaymentStudentCourseDetailLogService;
|
|
|
|
+ @Autowired
|
|
private TeacherDao teacherDao;
|
|
private TeacherDao teacherDao;
|
|
@Autowired
|
|
@Autowired
|
|
private StudentAttendanceDao studentAttendanceDao;
|
|
private StudentAttendanceDao studentAttendanceDao;
|
|
@@ -123,39 +121,39 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
List<CourseSchedule> courseSchedules = courseScheduleGroupByTeachMode.get(teachModeEnum)
|
|
List<CourseSchedule> courseSchedules = courseScheduleGroupByTeachMode.get(teachModeEnum)
|
|
.stream()
|
|
.stream()
|
|
.sorted(Comparator.comparing(CourseSchedule::getStartClassTime)).collect(Collectors.toList());
|
|
.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(vipGroupActivity.getDiscount())
|
|
|
|
- .divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
|
|
|
|
- .subtract(couponFee));
|
|
|
|
- }else{
|
|
|
|
- //学生线下单节课应缴费计算
|
|
|
|
- courseScheduleStudentPayment.setExpectPrice(
|
|
|
|
- vipGroup.getOfflineClassesUnitPrice().multiply(vipGroupActivity.getDiscount())
|
|
|
|
- .divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
|
|
|
|
- .subtract(couponFee));
|
|
|
|
- }
|
|
|
|
- courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(teachModeEnum)?vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice():vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
|
|
|
|
- courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
|
|
|
|
- courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
|
- }
|
|
|
|
|
|
+ for (CourseSchedule courseSchedule : courseSchedules) {
|
|
|
|
+ //创建学生课程应缴费记录
|
|
|
|
+ CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
|
|
|
|
+ courseScheduleStudentPayment.setUserId(userId);
|
|
|
|
+ courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType());
|
|
|
|
+ courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
|
+ courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
|
|
|
|
+ courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
|
+
|
|
|
|
+ if (teachModeEnum == TeachModeEnum.ONLINE) {
|
|
|
|
+ //学生线上单节课应缴费计算
|
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(
|
|
|
|
+ vipGroup.getOnlineClassesUnitPrice().multiply(vipGroupActivity.getDiscount())
|
|
|
|
+ .divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, RoundingMode.HALF_UP)
|
|
|
|
+ .subtract(couponFee));
|
|
|
|
+ } else {
|
|
|
|
+ //学生线下单节课应缴费计算
|
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(
|
|
|
|
+ vipGroup.getOfflineClassesUnitPrice().multiply(vipGroupActivity.getDiscount())
|
|
|
|
+ .divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, RoundingMode.HALF_UP)
|
|
|
|
+ .subtract(couponFee));
|
|
|
|
+ }
|
|
|
|
+ courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(teachModeEnum) ? vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice() : vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice());
|
|
|
|
+ courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
|
|
|
|
+ courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
return courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public int deleteStudentCourseSchedule(Integer userId, List<CourseSchedule> courseScheduleList) {
|
|
public int deleteStudentCourseSchedule(Integer userId, List<CourseSchedule> courseScheduleList) {
|
|
- if(courseScheduleList.size() == 0){
|
|
|
|
|
|
+ if(CollectionUtils.isEmpty(courseScheduleList)){
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
List<Long> courseScheduleIdList = courseScheduleList.stream().map(CourseSchedule :: getId).collect(Collectors.toList());
|
|
List<Long> courseScheduleIdList = courseScheduleList.stream().map(CourseSchedule :: getId).collect(Collectors.toList());
|
|
@@ -286,7 +284,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
- public void createForMusicGroup(List<CourseSchedule> courseSchedules, List<Integer> studentIds,Integer musicGroupStudentClassAdjustId) {
|
|
|
|
|
|
+ public void createForMusicGroup(List<CourseSchedule> courseSchedules, List<Integer> studentIds,Integer musicGroupStudentClassAdjustId,Map<Long,BigDecimal> salaryMap) {
|
|
//获取提交的合班申请
|
|
//获取提交的合班申请
|
|
MusicGroupStudentClassAdjust classAdjust = musicGroupStudentClassAdjustDao.get(musicGroupStudentClassAdjustId);
|
|
MusicGroupStudentClassAdjust classAdjust = musicGroupStudentClassAdjustDao.get(musicGroupStudentClassAdjustId);
|
|
List<Long> studentPaymentIds = JSON.parseArray(classAdjust.getStudentPaymentIds(), Long.class);
|
|
List<Long> studentPaymentIds = JSON.parseArray(classAdjust.getStudentPaymentIds(), Long.class);
|
|
@@ -297,18 +295,19 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
// String courseDefaultMinutes = sysConfigDao.findConfigValue("music_course_default_minutes");
|
|
// String courseDefaultMinutes = sysConfigDao.findConfigValue("music_course_default_minutes");
|
|
JSONObject jsonObject = JSON.parseObject(classAdjust.getDefaultCourseTypeMinute());
|
|
JSONObject jsonObject = JSON.parseObject(classAdjust.getDefaultCourseTypeMinute());
|
|
List<CourseScheduleStudentPayment> totalCourseScheduleStudentPayments = new ArrayList<>();
|
|
List<CourseScheduleStudentPayment> totalCourseScheduleStudentPayments = new ArrayList<>();
|
|
|
|
+ List<MusicGroupPaymentStudentCourseDetailLog> musicGroupPaymentStudentCourseDetailLogs = new ArrayList<>();
|
|
for (Integer studentId : studentIds) {
|
|
for (Integer studentId : studentIds) {
|
|
List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = null;
|
|
List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = null;
|
|
BigDecimal typeCourseTotalOriginalPrice = new BigDecimal("0"), typeCourseTotalCurrentPrice = new BigDecimal("0");
|
|
BigDecimal typeCourseTotalOriginalPrice = new BigDecimal("0"), typeCourseTotalCurrentPrice = new BigDecimal("0");
|
|
- List<CourseScheduleStudentPayment> oldCourseScheduleStudentPayments = new ArrayList<>();
|
|
|
|
|
|
+// List<CourseScheduleStudentPayment> oldCourseScheduleStudentPayments = new ArrayList<>();
|
|
List<CourseScheduleStudentPayment> newCourseScheduleStudentPayments = new ArrayList<>();
|
|
List<CourseScheduleStudentPayment> newCourseScheduleStudentPayments = new ArrayList<>();
|
|
for (int i = 0; i < courseSchedules.size(); i++) {
|
|
for (int i = 0; i < courseSchedules.size(); i++) {
|
|
CourseSchedule courseSchedule = courseSchedules.get(i);
|
|
CourseSchedule courseSchedule = courseSchedules.get(i);
|
|
//优先处理之前的剩余课程
|
|
//优先处理之前的剩余课程
|
|
//获取调班之前,学员剩余的课程列表
|
|
//获取调班之前,学员剩余的课程列表
|
|
- if(studentPaymentIds != null && studentPaymentIds.size() > 0){
|
|
|
|
|
|
+ if(CollectionUtils.isNotEmpty(studentPaymentIds)){
|
|
List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.queryByIdsAndStudentId(studentPaymentIds,studentId,courseSchedule.getType().getCode());
|
|
List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.queryByIdsAndStudentId(studentPaymentIds,studentId,courseSchedule.getType().getCode());
|
|
- if(studentPayments != null && studentPayments.size() > 0){
|
|
|
|
|
|
+ if(CollectionUtils.isNotEmpty(studentPayments)){
|
|
CourseScheduleStudentPayment studentPayment = new CourseScheduleStudentPayment();
|
|
CourseScheduleStudentPayment studentPayment = new CourseScheduleStudentPayment();
|
|
try {
|
|
try {
|
|
BeanUtils.copyProperties(studentPayment, studentPayments.get(0));
|
|
BeanUtils.copyProperties(studentPayment, studentPayments.get(0));
|
|
@@ -322,7 +321,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
studentPayment.setSettlementTime(null);
|
|
studentPayment.setSettlementTime(null);
|
|
studentPayment.setExamSongDownloadJson(null);
|
|
studentPayment.setExamSongDownloadJson(null);
|
|
studentPayment.setId(null);
|
|
studentPayment.setId(null);
|
|
- oldCourseScheduleStudentPayments.add(studentPayment);
|
|
|
|
|
|
+// oldCourseScheduleStudentPayments.add(studentPayment);
|
|
totalCourseScheduleStudentPayments.add(studentPayment);
|
|
totalCourseScheduleStudentPayments.add(studentPayment);
|
|
continue ;
|
|
continue ;
|
|
}
|
|
}
|
|
@@ -331,7 +330,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
if(musicGroupPaymentStudentCourseDetails == null){
|
|
if(musicGroupPaymentStudentCourseDetails == null){
|
|
musicGroupPaymentStudentCourseDetails = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(studentId,courseSchedule.getType(),courseSchedule.getMusicGroupId());
|
|
musicGroupPaymentStudentCourseDetails = musicGroupPaymentStudentCourseDetailDao.getUnUseWithStudentAndCourseTypeAndCourseMinutes(studentId,courseSchedule.getType(),courseSchedule.getMusicGroupId());
|
|
}
|
|
}
|
|
- if(musicGroupPaymentStudentCourseDetails == null || musicGroupPaymentStudentCourseDetails.size() == 0){
|
|
|
|
|
|
+ if(CollectionUtils.isEmpty(musicGroupPaymentStudentCourseDetails)){
|
|
throw new BizException("学员缴费详情获取失败");
|
|
throw new BizException("学员缴费详情获取失败");
|
|
}
|
|
}
|
|
//获取合班时的缴费项目
|
|
//获取合班时的缴费项目
|
|
@@ -339,17 +338,17 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalendersAndCourseType(calenderIds, courseSchedule.getType());
|
|
List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalendersAndCourseType(calenderIds, courseSchedule.getType());
|
|
MusicGroupPaymentCalenderCourseSettings courseSetting = musicGroupPaymentCalenderCourseSettings.get(0);
|
|
MusicGroupPaymentCalenderCourseSettings courseSetting = musicGroupPaymentCalenderCourseSettings.get(0);
|
|
//课程每分钟原价
|
|
//课程每分钟原价
|
|
- BigDecimal unitMinuteOriginalPrice = courseSetting.getCourseOriginalPrice().divide(new BigDecimal(courseSetting.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
|
|
|
+ BigDecimal unitMinuteOriginalPrice = courseSetting.getCourseOriginalPrice().divide(new BigDecimal(courseSetting.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, RoundingMode.DOWN);
|
|
|
|
|
|
//课程每分钟现价
|
|
//课程每分钟现价
|
|
- BigDecimal unitMinuteCurrentPrice = courseSetting.getOverflowCoursePrice().divide(new BigDecimal(courseSetting.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
|
|
|
+ BigDecimal unitMinuteCurrentPrice = courseSetting.getOverflowCoursePrice().divide(new BigDecimal(courseSetting.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, RoundingMode.DOWN);
|
|
|
|
|
|
//默认课程时长
|
|
//默认课程时长
|
|
int courseDuration = Integer.parseInt(jsonObject.get(courseSchedule.getType().getCode()).toString());
|
|
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 courseOriginalPrice = unitMinuteOriginalPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, RoundingMode.DOWN);
|
|
typeCourseTotalOriginalPrice = typeCourseTotalOriginalPrice.add(courseOriginalPrice);
|
|
typeCourseTotalOriginalPrice = typeCourseTotalOriginalPrice.add(courseOriginalPrice);
|
|
//课程现价
|
|
//课程现价
|
|
- BigDecimal courseCurrentPrice = unitMinuteCurrentPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
|
|
|
|
|
|
+ BigDecimal courseCurrentPrice = unitMinuteCurrentPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, RoundingMode.DOWN);
|
|
typeCourseTotalCurrentPrice = typeCourseTotalCurrentPrice.add(courseCurrentPrice);
|
|
typeCourseTotalCurrentPrice = typeCourseTotalCurrentPrice.add(courseCurrentPrice);
|
|
CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
|
|
CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
|
|
cssp.setGroupType(courseSchedule.getGroupType());
|
|
cssp.setGroupType(courseSchedule.getGroupType());
|
|
@@ -372,16 +371,33 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
}
|
|
}
|
|
//获取课程类型默认排课时长
|
|
//获取课程类型默认排课时长
|
|
int typeCourseDuration = Integer.parseInt(jsonObject.get(courseSchedule.getType().getCode()).toString());
|
|
int typeCourseDuration = Integer.parseInt(jsonObject.get(courseSchedule.getType().getCode()).toString());
|
|
|
|
+ Map<Long,MusicGroupPaymentStudentCourseDetailLog> courseDetailLogsMap = musicGroupPaymentStudentCourseDetailLogs
|
|
|
|
+ .stream().collect(Collectors.toMap(MusicGroupPaymentStudentCourseDetailLog::getMusicGroupPaymentStudentCourseDetailId, a -> a,(k1,k2)->k1));
|
|
for (MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail : musicGroupPaymentStudentCourseDetails) {
|
|
for (MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail : musicGroupPaymentStudentCourseDetails) {
|
|
|
|
+ MusicGroupPaymentStudentCourseDetailLog detailLog = courseDetailLogsMap.get(musicGroupPaymentStudentCourseDetail.getId());
|
|
|
|
+ if(detailLog == null){
|
|
|
|
+ detailLog = new MusicGroupPaymentStudentCourseDetailLog();
|
|
|
|
+ musicGroupPaymentStudentCourseDetailLogs.add(detailLog);
|
|
|
|
+ detailLog.setMusicGroupPaymentStudentCourseDetailId(musicGroupPaymentStudentCourseDetail.getId());
|
|
|
|
+ detailLog.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
|
+ detailLog.setCourseType(courseSchedule.getType().getCode());
|
|
|
|
+ }
|
|
|
|
+ detailLog.setCourseNum(detailLog.getCourseNum() + 1);
|
|
|
|
+ detailLog.setCoursePrice(detailLog.getCoursePrice().add(courseCurrentPrice));
|
|
|
|
+ detailLog.setCourseSalary(detailLog.getCourseSalary().add(salaryMap.get(courseSchedule.getId()) == null ? BigDecimal.ZERO : salaryMap.get(courseSchedule.getId())));
|
|
if(typeCourseDuration > musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes()){
|
|
if(typeCourseDuration > musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes()){
|
|
|
|
+ detailLog.setUsedCourseMinutes(detailLog.getUsedCourseMinutes() + musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes());
|
|
musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes());
|
|
musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes());
|
|
}else{
|
|
}else{
|
|
|
|
+ detailLog.setUsedCourseMinutes(detailLog.getUsedCourseMinutes() + typeCourseDuration);
|
|
musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getUsedCourseMinutes() + typeCourseDuration);
|
|
musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getUsedCourseMinutes() + typeCourseDuration);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if(musicGroupPaymentStudentCourseDetails != null && musicGroupPaymentStudentCourseDetails.size() > 0){
|
|
|
|
|
|
+ if(CollectionUtils.isNotEmpty(musicGroupPaymentStudentCourseDetails)){
|
|
musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);
|
|
musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);
|
|
|
|
+ //保存排课日志
|
|
|
|
+ musicGroupPaymentStudentCourseDetailLogService.saveBatch(musicGroupPaymentStudentCourseDetailLogs);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
courseScheduleStudentPaymentDao.batchInsert(totalCourseScheduleStudentPayments);
|
|
courseScheduleStudentPaymentDao.batchInsert(totalCourseScheduleStudentPayments);
|
|
@@ -390,12 +406,12 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
- public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
|
|
|
|
|
|
+ public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds,Map<Long,BigDecimal> salaryMap) {
|
|
Map<Integer, List<CourseSchedule>> memberCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getMemberFlag));
|
|
Map<Integer, List<CourseSchedule>> memberCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getMemberFlag));
|
|
Map<Long,List<Long>> courseCalenderMap = new HashMap<>(10);
|
|
Map<Long,List<Long>> courseCalenderMap = new HashMap<>(10);
|
|
for (Integer memberFlag : memberCourseMap.keySet()) {
|
|
for (Integer memberFlag : memberCourseMap.keySet()) {
|
|
List<CourseSchedule> courseScheduleList = memberCourseMap.get(memberFlag);
|
|
List<CourseSchedule> courseScheduleList = memberCourseMap.get(memberFlag);
|
|
- if(courseScheduleList != null && courseScheduleList.size() > 0){
|
|
|
|
|
|
+ if(CollectionUtils.isNotEmpty(courseScheduleList)){
|
|
if(memberFlag == 1){
|
|
if(memberFlag == 1){
|
|
createForMemberMusicGroup(musicGroupId,courseScheduleList,studentIds);
|
|
createForMemberMusicGroup(musicGroupId,courseScheduleList,studentIds);
|
|
}else {
|
|
}else {
|
|
@@ -453,6 +469,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
List<CourseScheduleStudentPayment> typeCourseStudentPayments = new ArrayList<>();
|
|
List<CourseScheduleStudentPayment> typeCourseStudentPayments = new ArrayList<>();
|
|
courseScheduleTypeListEntry.getValue().sort(Comparator.comparing(CourseSchedule::getStartClassTime));
|
|
courseScheduleTypeListEntry.getValue().sort(Comparator.comparing(CourseSchedule::getStartClassTime));
|
|
List<CourseSchedule> scheduleList = courseScheduleTypeListEntry.getValue();
|
|
List<CourseSchedule> scheduleList = courseScheduleTypeListEntry.getValue();
|
|
|
|
+ List<MusicGroupPaymentStudentCourseDetailLog> musicGroupPaymentStudentCourseDetailLogs = new ArrayList<>();
|
|
for (CourseSchedule courseSchedule : scheduleList) {
|
|
for (CourseSchedule courseSchedule : scheduleList) {
|
|
if(existCourseIds.contains(courseSchedule.getId())){
|
|
if(existCourseIds.contains(courseSchedule.getId())){
|
|
throw new BizException("该学员已在此班级{}课程中", courseSchedule.getId());
|
|
throw new BizException("该学员已在此班级{}课程中", courseSchedule.getId());
|
|
@@ -463,18 +480,22 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
cssp.setUserId(studentId);
|
|
cssp.setUserId(studentId);
|
|
//扣除可排课时长
|
|
//扣除可排课时长
|
|
//处理经营报表
|
|
//处理经营报表
|
|
- this.calcCourseMinutes(musicGroupPaymentStudentCourseDetails,courseDuration,cssp,musicGroupPaymentCalenders,courseCalenderMap);
|
|
|
|
|
|
+ this.calcCourseMinutes(musicGroupPaymentStudentCourseDetails,courseDuration,
|
|
|
|
+ cssp,musicGroupPaymentCalenders,courseCalenderMap,musicGroupPaymentStudentCourseDetailLogs,
|
|
|
|
+ salaryMap.get(courseSchedule.getId()),courseSchedule);
|
|
typeCourseStudentPayments.add(cssp);
|
|
typeCourseStudentPayments.add(cssp);
|
|
}
|
|
}
|
|
courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
|
|
courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
|
|
musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);
|
|
musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);
|
|
|
|
+ //记录排课日志
|
|
|
|
+ musicGroupPaymentStudentCourseDetailLogService.saveBatch(musicGroupPaymentStudentCourseDetailLogs);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if(!CollectionUtils.isEmpty(courseCalenderMap)){
|
|
|
|
|
|
+ if(!courseCalenderMap.isEmpty()){
|
|
for (Long calenderId : courseCalenderMap.keySet()) {
|
|
for (Long calenderId : courseCalenderMap.keySet()) {
|
|
List<Long> courseIds = courseCalenderMap.get(calenderId);
|
|
List<Long> courseIds = courseCalenderMap.get(calenderId);
|
|
operatingReportCloudService.updateSet(calenderId,courseIds);
|
|
operatingReportCloudService.updateSet(calenderId,courseIds);
|
|
@@ -482,22 +503,38 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private Boolean calcCourseMinutes(List<MusicGroupPaymentStudentCourseDetail> courseDetails,
|
|
|
|
- Integer courseDuration,
|
|
|
|
- CourseScheduleStudentPayment studentPayment,
|
|
|
|
- List<MusicGroupPaymentCalender> musicGroupPaymentCalenders,
|
|
|
|
- Map<Long,List<Long>> courseCalenderMap){
|
|
|
|
|
|
+ private void calcCourseMinutes(List<MusicGroupPaymentStudentCourseDetail> courseDetails,
|
|
|
|
+ Integer courseDuration,
|
|
|
|
+ CourseScheduleStudentPayment studentPayment,
|
|
|
|
+ List<MusicGroupPaymentCalender> musicGroupPaymentCalenders,
|
|
|
|
+ Map<Long,List<Long>> courseCalenderMap,
|
|
|
|
+ List<MusicGroupPaymentStudentCourseDetailLog> musicGroupPaymentStudentCourseDetailLogs, BigDecimal salary, CourseSchedule courseSchedule){
|
|
Boolean result = true;
|
|
Boolean result = true;
|
|
Integer courseMinutes = courseDuration;
|
|
Integer courseMinutes = courseDuration;
|
|
Map<Long, List<MusicGroupPaymentCalender>> calenderMap = musicGroupPaymentCalenders.stream().collect(Collectors.groupingBy(MusicGroupPaymentCalender::getId));
|
|
Map<Long, List<MusicGroupPaymentCalender>> calenderMap = musicGroupPaymentCalenders.stream().collect(Collectors.groupingBy(MusicGroupPaymentCalender::getId));
|
|
|
|
+ Map<Long, MusicGroupPaymentStudentCourseDetailLog> courseDetailLogMap = musicGroupPaymentStudentCourseDetailLogs.stream().
|
|
|
|
+ collect(Collectors.toMap(MusicGroupPaymentStudentCourseDetailLog::getMusicGroupPaymentStudentCourseDetailId, a -> a, (k1, k2) -> k1));
|
|
for (int i = 0; i < courseDetails.size(); i++) {
|
|
for (int i = 0; i < courseDetails.size(); i++) {
|
|
MusicGroupPaymentStudentCourseDetail detail = courseDetails.get(i);
|
|
MusicGroupPaymentStudentCourseDetail detail = courseDetails.get(i);
|
|
|
|
+ MusicGroupPaymentStudentCourseDetailLog detailLog = courseDetailLogMap.get(detail.getId());
|
|
if(detail.getSubCourseMinutes() > 0){
|
|
if(detail.getSubCourseMinutes() > 0){
|
|
if(!detail.getCloudTeacherPaymentFlag()){
|
|
if(!detail.getCloudTeacherPaymentFlag()){
|
|
result = false;
|
|
result = false;
|
|
}
|
|
}
|
|
|
|
+ if (detailLog == null){
|
|
|
|
+ detailLog = new MusicGroupPaymentStudentCourseDetailLog();
|
|
|
|
+ detailLog.setMusicGroupPaymentStudentCourseDetailId(detail.getId());
|
|
|
|
+ detailLog.setClassGroupId(courseSchedule.getClassGroupId());
|
|
|
|
+ detailLog.setCourseType(courseSchedule.getType().getCode());
|
|
|
|
+ musicGroupPaymentStudentCourseDetailLogs.add(detailLog);
|
|
|
|
+ }
|
|
if(courseMinutes >= detail.getSubCourseMinutes()){
|
|
if(courseMinutes >= detail.getSubCourseMinutes()){
|
|
courseMinutes = courseMinutes - detail.getSubCourseMinutes();
|
|
courseMinutes = courseMinutes - detail.getSubCourseMinutes();
|
|
|
|
+ //记录排课日志
|
|
|
|
+ detailLog.setCourseNum(detailLog.getCourseNum() + 1);
|
|
|
|
+ detailLog.setCoursePrice(detailLog.getCoursePrice().add(detail.getSubCourseCurrentPrice()));
|
|
|
|
+ detailLog.setUsedCourseMinutes(detailLog.getUsedCourseMinutes() + detail.getSubCourseMinutes());
|
|
|
|
+
|
|
detail.setUsedCourseMinutes(detail.getUsedCourseMinutes() + detail.getSubCourseMinutes());
|
|
detail.setUsedCourseMinutes(detail.getUsedCourseMinutes() + detail.getSubCourseMinutes());
|
|
detail.setSubCourseMinutes(0);
|
|
detail.setSubCourseMinutes(0);
|
|
studentPayment.setOriginalPrice(studentPayment.getOriginalPrice().add(detail.getSubCourseOriginalPrice()));
|
|
studentPayment.setOriginalPrice(studentPayment.getOriginalPrice().add(detail.getSubCourseOriginalPrice()));
|
|
@@ -505,6 +542,10 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
detail.setSubCourseCurrentPrice(BigDecimal.ZERO);
|
|
detail.setSubCourseCurrentPrice(BigDecimal.ZERO);
|
|
detail.setSubCourseOriginalPrice(BigDecimal.ZERO);
|
|
detail.setSubCourseOriginalPrice(BigDecimal.ZERO);
|
|
}else{
|
|
}else{
|
|
|
|
+ //记录排课日志
|
|
|
|
+ detailLog.setCourseNum(detailLog.getCourseNum() + 1);
|
|
|
|
+ detailLog.setUsedCourseMinutes(detailLog.getUsedCourseMinutes() + courseMinutes);
|
|
|
|
+
|
|
detail.setUsedCourseMinutes(detail.getUsedCourseMinutes() + courseMinutes);
|
|
detail.setUsedCourseMinutes(detail.getUsedCourseMinutes() + courseMinutes);
|
|
detail.setSubCourseMinutes(detail.getSubCourseMinutes() - courseMinutes);
|
|
detail.setSubCourseMinutes(detail.getSubCourseMinutes() - courseMinutes);
|
|
//课程每分钟现价
|
|
//课程每分钟现价
|
|
@@ -515,6 +556,9 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
studentPayment.setOriginalPrice(studentPayment.getOriginalPrice().add(originalPrice));
|
|
studentPayment.setOriginalPrice(studentPayment.getOriginalPrice().add(originalPrice));
|
|
studentPayment.setExpectPrice(studentPayment.getExpectPrice().add(expectPrice));
|
|
studentPayment.setExpectPrice(studentPayment.getExpectPrice().add(expectPrice));
|
|
detail.setSubCourseCurrentPrice(detail.getSubCourseCurrentPrice().subtract(expectPrice));
|
|
detail.setSubCourseCurrentPrice(detail.getSubCourseCurrentPrice().subtract(expectPrice));
|
|
|
|
+ //记录排课日志
|
|
|
|
+ detailLog.setCoursePrice(detailLog.getCoursePrice().add(expectPrice));
|
|
|
|
+
|
|
detail.setSubCourseOriginalPrice(detail.getSubCourseOriginalPrice().subtract(originalPrice));
|
|
detail.setSubCourseOriginalPrice(detail.getSubCourseOriginalPrice().subtract(originalPrice));
|
|
courseMinutes = 0;
|
|
courseMinutes = 0;
|
|
}
|
|
}
|
|
@@ -540,14 +584,14 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
|
|
// operatingReportCloudService.updateSet(calender,courseIds);
|
|
// operatingReportCloudService.updateSet(calender,courseIds);
|
|
}
|
|
}
|
|
if(courseMinutes == 0){
|
|
if(courseMinutes == 0){
|
|
- return result;
|
|
|
|
|
|
+ detailLog.setCourseSalary(detailLog.getCourseSalary().add(salary == null?BigDecimal.ZERO:salary));
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(i == courseDetails.size() - 1 && courseMinutes > 0){
|
|
if(i == courseDetails.size() - 1 && courseMinutes > 0){
|
|
throw new BizException("操作失败:学员可排课时长不足");
|
|
throw new BizException("操作失败:学员可排课时长不足");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return result;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|