|
@@ -60,6 +60,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
private SysUserCashAccountDao sysUserCashAccountDao;
|
|
|
@Autowired
|
|
|
private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
|
|
|
+ @Autowired
|
|
|
+ private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Long, VipGroup> getDAO() {
|
|
@@ -88,8 +94,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
|
|
|
//获取活动信息
|
|
|
VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
|
|
|
+ VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
|
|
|
|
|
|
- //生成vip课信息
|
|
|
+
|
|
|
+ //生成vip课信息
|
|
|
VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
|
|
|
vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
|
|
|
vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
|
|
@@ -116,16 +124,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
|
|
|
//创建班级老师关联记录
|
|
|
ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
|
|
|
- classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.TEACHING);
|
|
|
+ classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
|
|
|
classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
|
|
|
|
|
|
//创建班级与老师课酬记录
|
|
|
ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
|
|
|
- classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.TEACHING);
|
|
|
+ classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
classGroupTeacherSalary.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
|
|
|
classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
|
|
|
-
|
|
|
+ classGroupTeacherSalary.setOnlineClassesSalary(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary());
|
|
|
+ classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
|
|
|
|
|
|
//课程信息调整
|
|
|
vipGroup.getCourseSchedules().forEach(courseSchedule -> {
|
|
@@ -138,11 +147,125 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
|
|
|
|
|
|
//创建老师与学生费用相关记录
|
|
|
+ TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroupApplyBaseInfoDto.getUserId().longValue(),
|
|
|
+ vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
|
|
|
+
|
|
|
List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>();
|
|
|
+ List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
|
|
|
Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
|
|
|
- vipGroup.getCourseSchedules().forEach(courseSchedule -> {
|
|
|
- CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
|
|
|
- });
|
|
|
+ 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++){
|
|
|
+ //创建教师课程薪水记录
|
|
|
+ CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
|
|
|
+ courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
|
|
|
+ courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
|
|
|
+ courseScheduleTeacherSalary.setUserId(vipGroupApplyBaseInfoDto.getUserId());
|
|
|
+
|
|
|
+ //创建学生课程应缴费记录
|
|
|
+ CourseScheduleStudentPayment courseScheduleStudentPayment=new CourseScheduleStudentPayment();
|
|
|
+ courseScheduleStudentPayment.setCourseScheduleId(courseSchedules.get(i).getId());
|
|
|
+
|
|
|
+ if(teachModeEnum==TeachModeEnum.ONLINE){
|
|
|
+ if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
|
|
|
+ &&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
|
|
|
+ &&i>=Integer.parseInt(vipGroupActivity.getAttribute1())
|
|
|
+ &&"0".equals(vipGroupActivity.getGiveClassPaySalaryFlag())){
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(new BigDecimal(0));
|
|
|
+ }else {
|
|
|
+ //教师课酬线上单课酬计算
|
|
|
+ switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
|
|
|
+ case TEACHER_DEFAULT:
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOnlineClassesSalary());
|
|
|
+ break;
|
|
|
+ case RATIO_DISCOUNT:
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(vipGroupApplyBaseInfoDto
|
|
|
+ .getOnlineTeacherSalary()
|
|
|
+ .multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()));
|
|
|
+ break;
|
|
|
+ case FIXED_SALARY:
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue());
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BizException("未指定课酬结算标准!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //学生线上单节课应缴费计算
|
|
|
+ switch (vipGroupActivity.getType()){
|
|
|
+ case BASE_ACTIVITY:
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
|
|
|
+ break;
|
|
|
+ case DISCOUNT:
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(
|
|
|
+ vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().multiply(
|
|
|
+ new BigDecimal(vipGroupActivity.getAttribute1())
|
|
|
+ )
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case GIVE_CLASS:
|
|
|
+ if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
|
|
|
+ &&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
|
|
|
+ &&i>=Integer.parseInt(vipGroupActivity.getAttribute1())){
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
|
|
|
+ }else {
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BizException("活动类型错误!");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //教师线下单课酬计算
|
|
|
+ switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
|
|
|
+ case TEACHER_DEFAULT:
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(teacherDefaultVipGroupSalary.getOfflineClassesSalary());
|
|
|
+ break;
|
|
|
+ case RATIO_DISCOUNT:
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(vipGroupApplyBaseInfoDto
|
|
|
+ .getOfflineTeacherSalary()
|
|
|
+ .multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()));
|
|
|
+ break;
|
|
|
+ case FIXED_SALARY:
|
|
|
+ courseScheduleTeacherSalary.setExpectSalary(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue());
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BizException("未指定课酬结算标准!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //学生线下单节课应缴费计算
|
|
|
+ switch (vipGroupActivity.getType()){
|
|
|
+ case BASE_ACTIVITY:
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
|
|
|
+ break;
|
|
|
+ case DISCOUNT:
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(
|
|
|
+ vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().multiply(
|
|
|
+ new BigDecimal(vipGroupActivity.getAttribute1())
|
|
|
+ )
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case GIVE_CLASS:
|
|
|
+ if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.GIVE_CLASS
|
|
|
+ &&vipGroupApplyBaseInfoDto.getGiveTeachMode()==teachModeEnum
|
|
|
+ &&i>=Integer.parseInt(vipGroupActivity.getAttribute1())){
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
|
|
|
+ }else {
|
|
|
+ courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BizException("活动类型错误!");
|
|
|
+ }
|
|
|
+ courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
|
|
|
+ courseScheduleStudentPayments.add(courseScheduleStudentPayment);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
|
|
|
+ courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -358,7 +481,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
* @Date: 2019/10/2
|
|
|
* 计算VIP课程预计收费
|
|
|
*/
|
|
|
- private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
|
|
|
+ @Override
|
|
|
+ public BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
|
|
|
VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
|
|
|
if(Objects.isNull(vipGroup)){
|
|
|
throw new BizException("该课未指定活动方案");
|
|
@@ -367,7 +491,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
|
|
|
BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
|
|
|
BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
|
|
|
- BigDecimal totalPrice=null;
|
|
|
+ BigDecimal totalPrice;
|
|
|
switch (vipGroupActivity.getType()){
|
|
|
case BASE_ACTIVITY:
|
|
|
totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
|
|
@@ -378,7 +502,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
totalPrice=totalPrice.multiply(discount);
|
|
|
break;
|
|
|
case GIVE_CLASS:
|
|
|
-
|
|
|
+ if(vipGroup.getGiveTeachMode()==TeachModeEnum.OFFLINE){
|
|
|
+ if(offlineClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
|
|
|
+ offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
|
|
|
+ }
|
|
|
+ offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
|
|
|
+ }else{
|
|
|
+ if(onlineClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
|
|
|
+ onlineClassNum=onlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
|
|
|
+ }
|
|
|
+ onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
|
|
|
+ }
|
|
|
+ totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
|
|
|
break;
|
|
|
default:
|
|
|
throw new BizException("活动类型错误!");
|