|
@@ -24,10 +24,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
@@ -73,6 +70,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
@Override
|
|
|
public void createVipGroup(VipGroupApplyDto vipGroup) {
|
|
|
|
|
|
+ if (Objects.isNull(vipGroup.getVipGroupApplyBaseInfo().getUserId())){
|
|
|
+ throw new BizException("请选择指导老师");
|
|
|
+ }
|
|
|
+
|
|
|
if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){
|
|
|
throw new BizException("课时总数不匹配!");
|
|
|
}
|
|
@@ -85,10 +86,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
throw new BizException("线上课课时数量安排有误!");
|
|
|
}
|
|
|
|
|
|
+ //获取活动信息
|
|
|
VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
|
|
|
+
|
|
|
+ //生成vip课信息
|
|
|
VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
|
|
|
+ vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
|
|
|
+ vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
|
|
|
+ vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice()));
|
|
|
vipGroupDao.insert(vipGroupApplyBaseInfoDto);
|
|
|
+
|
|
|
+ //获取vip课类型信息
|
|
|
VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue());
|
|
|
+
|
|
|
+ //创建班级信息
|
|
|
ClassGroup classGroup=new ClassGroup();
|
|
|
classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
|
|
|
classGroup.setName(vipGroupApplyBaseInfoDto.getName());
|
|
@@ -96,15 +107,27 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
classGroup.setType(ClassGroupTypeEnum.VIP);
|
|
|
classGroup.setDelFlag(YesOrNoEnum.NO);
|
|
|
classGroupDao.insert(classGroup);
|
|
|
+
|
|
|
+ //创建vip课班级关联记录
|
|
|
VipGroupClassGroupMapper vipGroupClassGroupMapper=new VipGroupClassGroupMapper();
|
|
|
vipGroupClassGroupMapper.setVipGroupId(vipGroupApplyBaseInfoDto.getId());
|
|
|
vipGroupClassGroupMapper.setClassGroupId(classGroup.getId());
|
|
|
vipGroupClassGroupMapperDao.insert(vipGroupClassGroupMapper);
|
|
|
+
|
|
|
+ //创建班级老师关联记录
|
|
|
ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
|
|
|
classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.TEACHING);
|
|
|
classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
|
|
|
- classGroupTeacherMapper.setSalary(vipGroupApplyBaseInfoDto.getSalary());
|
|
|
classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
|
|
|
+
|
|
|
+ //创建班级与老师课酬记录
|
|
|
+ ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
|
|
|
+ classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.TEACHING);
|
|
|
+ classGroupTeacherSalary.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
|
|
|
+ classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
|
|
|
+
|
|
|
+
|
|
|
+ //课程信息调整
|
|
|
vipGroup.getCourseSchedules().forEach(courseSchedule -> {
|
|
|
if(courseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime())
|
|
|
&&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
|
|
@@ -113,6 +136,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
courseSchedule.setClassGroupId(classGroup.getId());
|
|
|
});
|
|
|
courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
|
|
|
+
|
|
|
+ //创建老师与学生费用相关记录
|
|
|
+ List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>();
|
|
|
+ Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
|
|
|
+ vipGroup.getCourseSchedules().forEach(courseSchedule -> {
|
|
|
+ CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -329,11 +359,31 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
* 计算VIP课程预计收费
|
|
|
*/
|
|
|
private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
|
|
|
- BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
|
|
|
- BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
|
|
|
- BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
|
|
|
- BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
|
|
|
- return onlineVipGroupCharge.add(offlineVipGroupCharge);
|
|
|
+ VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
|
|
|
+ if(Objects.isNull(vipGroup)){
|
|
|
+ throw new BizException("该课未指定活动方案");
|
|
|
+ }
|
|
|
+ BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
|
|
|
+ BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
|
|
|
+ BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
|
|
|
+ BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
|
|
|
+ BigDecimal totalPrice=null;
|
|
|
+ switch (vipGroupActivity.getType()){
|
|
|
+ case BASE_ACTIVITY:
|
|
|
+ totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
|
|
|
+ break;
|
|
|
+ case DISCOUNT:
|
|
|
+ BigDecimal discount=new BigDecimal(vipGroupActivity.getAttribute1());
|
|
|
+ totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
|
|
|
+ totalPrice=totalPrice.multiply(discount);
|
|
|
+ break;
|
|
|
+ case GIVE_CLASS:
|
|
|
+
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BizException("活动类型错误!");
|
|
|
+ }
|
|
|
+ return totalPrice;
|
|
|
}
|
|
|
|
|
|
@Override
|