|
@@ -6,9 +6,7 @@ import com.ym.mec.auth.api.entity.SysUser;
|
|
|
import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.*;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.*;
|
|
|
import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
|
|
|
import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
|
|
|
import com.ym.mec.biz.service.CourseScheduleService;
|
|
@@ -18,6 +16,7 @@ import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.page.PageInfo;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -27,6 +26,7 @@ import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> implements VipGroupService {
|
|
@@ -49,6 +49,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
private SysUserFeignService sysUserFeignService;
|
|
|
@Autowired
|
|
|
private TeacherDefaultVipGroupSalaryDao teacherDefaultVipGroupSalaryDao;
|
|
|
+ @Autowired
|
|
|
+ private StudentPaymentOrderDao studentPaymentOrderDao;
|
|
|
+ @Autowired
|
|
|
+ private StudentVipGroupPaymentDao studentVipGroupPaymentDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Long, VipGroup> getDAO() {
|
|
@@ -58,6 +62,19 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public void createVipGroup(VipGroupApplyDto vipGroup) {
|
|
|
+
|
|
|
+ if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){
|
|
|
+ throw new BizException("课时总数不匹配!");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroup = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
|
|
|
+ if(courseScheduleGroup.get(TeachModeEnum.OFFLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()){
|
|
|
+ throw new BizException("线下课课时数量安排有误!");
|
|
|
+ }
|
|
|
+ if(courseScheduleGroup.get(TeachModeEnum.ONLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()){
|
|
|
+ throw new BizException("线上课课时数量安排有误!");
|
|
|
+ }
|
|
|
+
|
|
|
VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
|
|
|
VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
|
|
|
vipGroupDao.insert(vipGroupApplyBaseInfoDto);
|
|
@@ -146,15 +163,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
|
|
|
BigDecimal offlineClassNum=new BigDecimal(vipGroupCostCountParamsDto.getOfflineClassesNum());
|
|
|
BigDecimal onlineClassNum=new BigDecimal(vipGroupCostCountParamsDto.getOnlineClassesNum());
|
|
|
- //vip课总费用
|
|
|
- BigDecimal onlineVipGroupCharge = vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice().multiply(onlineClassNum);
|
|
|
- BigDecimal offlineVipGroupCharge = vipGroupDefaultClassesUnitPrice.
|
|
|
- getOfflineClassesUnitPrice().
|
|
|
- multiply(offlineClassNum);
|
|
|
- BigDecimal vipGroupCharge=onlineVipGroupCharge.add(offlineClassNum);
|
|
|
+
|
|
|
|
|
|
//教师课酬
|
|
|
- BigDecimal teacherOnlineSalary = null,teacherOfflineSalay=null,teacherSalary=null;
|
|
|
+ BigDecimal teacherOnlineSalary,teacherOfflineSalary,teacherSalary;
|
|
|
switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
|
|
|
case TEACHER_DEFAULT:
|
|
|
teacherOnlineSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary().multiply(onlineClassNum);
|
|
@@ -170,18 +182,71 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
}
|
|
|
switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
|
|
|
case TEACHER_DEFAULT:
|
|
|
- teacherOfflineSalay=teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(offlineClassNum);
|
|
|
+ teacherOfflineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(offlineClassNum);
|
|
|
break;
|
|
|
case RATIO_DISCOUNT:
|
|
|
- teacherOfflineSalay=vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice().multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).multiply(offlineClassNum);
|
|
|
+ teacherOfflineSalary=vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice().multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).multiply(offlineClassNum);
|
|
|
break;
|
|
|
case FIXED_SALARY:
|
|
|
- teacherOfflineSalay=vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue().multiply(offlineClassNum);
|
|
|
+ teacherOfflineSalary=vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue().multiply(offlineClassNum);
|
|
|
break;
|
|
|
default:
|
|
|
throw new BizException("未指定课酬结算标准!");
|
|
|
}
|
|
|
- teacherSalary=teacherOnlineSalary.add(teacherOfflineSalay);
|
|
|
- return new VipGroupCostCountDto(vipGroupCharge,teacherSalary);
|
|
|
+ teacherSalary=teacherOnlineSalary.add(teacherOfflineSalary);
|
|
|
+ return new VipGroupCostCountDto(null,teacherSalary);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
|
|
|
+ SysUser user = sysUserFeignService.queryUserInfo();
|
|
|
+ VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
|
|
|
+
|
|
|
+ if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
|
|
|
+ throw new BizException("该课程已结束报名!");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
|
|
|
+ StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
|
|
|
+ studentPaymentOrder.setUserId(user.getId());
|
|
|
+ String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())});
|
|
|
+ studentPaymentOrder.setOrderNo(orderNo);
|
|
|
+ studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
|
|
|
+ studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup));
|
|
|
+ if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.DISCOUNT){
|
|
|
+ studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(vipGroupActivity.getAttribute1())));
|
|
|
+ }else{
|
|
|
+ studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
|
|
|
+ }
|
|
|
+ VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroup.getId());
|
|
|
+ studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
|
|
|
+ studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
|
|
|
+ studentPaymentOrderDao.insert(studentPaymentOrder);
|
|
|
+
|
|
|
+ StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment();
|
|
|
+ studentVipGroupPayment.setUserId(user.getId());
|
|
|
+ studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
|
|
|
+ studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
|
|
|
+ studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
|
|
|
+ studentVipGroupPaymentDao.insert(studentVipGroupPayment);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Author: Joburgess
|
|
|
+ * @Date: 2019/10/2
|
|
|
+ * 计算VIP课程预计收费
|
|
|
+ */
|
|
|
+ private BigDecimal countVipGroupPredictFee(VipGroup vipGroup){
|
|
|
+ VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroup(vipGroup.getId());
|
|
|
+ BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
|
|
|
+ BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
|
|
|
+ BigDecimal onlineVipGroupCharge = vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice().multiply(onlineClassNum);
|
|
|
+ BigDecimal offlineVipGroupCharge = vipGroupDefaultClassesUnitPrice.
|
|
|
+ getOfflineClassesUnitPrice().
|
|
|
+ multiply(offlineClassNum);
|
|
|
+ return onlineVipGroupCharge.add(offlineVipGroupCharge);
|
|
|
}
|
|
|
+
|
|
|
}
|