|
@@ -8,9 +8,7 @@ import com.ym.mec.biz.dal.dto.*;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
|
import com.ym.mec.biz.dal.page.*;
|
|
|
-import com.ym.mec.biz.service.CourseScheduleService;
|
|
|
-import com.ym.mec.biz.service.SysUserCashAccountService;
|
|
|
-import com.ym.mec.biz.service.VipGroupService;
|
|
|
+import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.entity.ImGroupMember;
|
|
|
import com.ym.mec.common.entity.ImGroupModel;
|
|
@@ -68,14 +66,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
|
|
|
@Autowired
|
|
|
private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
|
|
|
- @Autowired
|
|
|
- private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
|
|
|
+
|
|
|
@Autowired
|
|
|
private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
|
|
|
@Autowired
|
|
|
private ImFeignService imFeignService;
|
|
|
@Autowired
|
|
|
private SubjectDao subjectDao;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
|
|
|
+ @Autowired
|
|
|
+ private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Long, VipGroup> getDAO() {
|
|
@@ -107,8 +108,7 @@ 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课信息
|
|
|
VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
|
|
|
List<String> bySubIds = subjectDao.findBySubIds(vipGroupApplyBaseInfoDto.getSubjectIdList());
|
|
@@ -119,6 +119,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
|
|
|
vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
|
|
|
vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice()).get("totalPrice"));
|
|
|
+ vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
|
|
|
vipGroupDao.insert(vipGroupApplyBaseInfoDto);
|
|
|
|
|
|
//获取vip课类型信息
|
|
@@ -167,131 +168,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
&&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
|
|
|
throw new BizException("课时安排时间超出范围!");
|
|
|
}
|
|
|
+ courseSchedule.setTeacherId(vipGroupApplyBaseInfoDto.getUserId().longValue());
|
|
|
+ courseSchedule.setStatus(CourseStatusEnum.NOT_START);
|
|
|
courseSchedule.setType(CourseSchedule.CourseScheduleType.VIP);
|
|
|
courseSchedule.setClassGroupId(classGroup.getId());
|
|
|
});
|
|
|
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));
|
|
|
- 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);
|
|
|
+ //创建老师单节课课酬信息
|
|
|
+ courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroupApplyBaseInfoDto,
|
|
|
+ vipGroup.getCourseSchedules(),
|
|
|
+ vipGroupApplyBaseInfoDto.getOnlineTeacherSalary(),
|
|
|
+ vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -428,7 +316,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
if(Objects.isNull(vipGroupId)){
|
|
|
throw new BizException("请指定vip课程");
|
|
|
}
|
|
|
- return vipGroupDao.getVipGroupDetail(vipGroupId);
|
|
|
+ StudentVipGroupDetailDto vipGroupDetail = vipGroupDao.getVipGroupDetail(vipGroupId);
|
|
|
+ vipGroupDetail.setNumberOfClasses(vipGroupDao.countTeacherVipGroups(vipGroupDetail.getTeacherId().longValue()));
|
|
|
+ return vipGroupDetail;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -474,52 +364,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
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,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()).get("totalPrice"));
|
|
|
- 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());
|
|
|
- studentVipGroupPayment.setVipGroupId(vipGroup.getId());
|
|
|
- studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
|
|
|
- studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
|
|
|
- studentVipGroupPaymentDao.insert(studentVipGroupPayment);
|
|
|
-
|
|
|
- ClassGroup classGroup = classGroupDao.get(vipGroupClassGroupMapper.getClassGroupId());
|
|
|
- int classStudents = classGroupDao.countClassStudent(vipGroupClassGroupMapper.getClassGroupId().longValue());
|
|
|
- if(classGroup.getExpectStudentNum()==classStudents){
|
|
|
- vipGroup.setStatus(VipGroupStatusEnum.FINISH);
|
|
|
- vipGroupDao.update(vipGroup);
|
|
|
- }
|
|
|
- classGroup.setStudentNum(classGroup.getStudentNum()+1);
|
|
|
- classGroupDao.update(classGroup);
|
|
|
-
|
|
|
- //生成回调地址
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* @Author: Joburgess
|
|
|
* @Date: 2019/10/2
|
|
@@ -620,11 +464,78 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
return results;
|
|
|
}
|
|
|
|
|
|
+ @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,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()).get("totalPrice"));
|
|
|
+ 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);
|
|
|
+
|
|
|
+ //生成回调地址
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void orderCallback(String callbackParams) {
|
|
|
/*
|
|
|
根据回调信息调整订单状态及vip课程状态等相关信息
|
|
|
*/
|
|
|
+ Long vipGroupId=1L,userId=1L;
|
|
|
+
|
|
|
+ VipGroup vipGroup = vipGroupDao.get(vipGroupId);
|
|
|
+
|
|
|
+ if(vipGroup.getStatus()!=VipGroupStatusEnum.APPLYING){
|
|
|
+ throw new BizException("该课程已结束报名!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成学生单课缴费信息
|
|
|
+ courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,userId);
|
|
|
+
|
|
|
+ VipGroupClassGroupMapper vipGroupClassGroupMapper = vipGroupClassGroupMapperDao.findByVipGroupId(vipGroupId);
|
|
|
+
|
|
|
+ //更新订单状态
|
|
|
+ StudentPaymentOrder studentPaymentOrder=studentPaymentOrderDao.findByStudentVipGroup(vipGroupId,userId);
|
|
|
+ studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
|
|
|
+ studentPaymentOrderDao.update(studentPaymentOrder);
|
|
|
+
|
|
|
+ //生成缴费明细
|
|
|
+ StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment();
|
|
|
+ studentVipGroupPayment.setUserId(userId.intValue());
|
|
|
+ studentVipGroupPayment.setVipGroupId(vipGroupId);
|
|
|
+ studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId());
|
|
|
+ studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId());
|
|
|
+ studentVipGroupPaymentDao.insert(studentVipGroupPayment);
|
|
|
+
|
|
|
+ //将学生加入到班级,更新班级报名状态及人数信息
|
|
|
+ ClassGroup classGroup = classGroupDao.get(vipGroupClassGroupMapper.getClassGroupId());
|
|
|
+ int classStudents = classGroupDao.countClassStudent(vipGroupClassGroupMapper.getClassGroupId().longValue());
|
|
|
+ if(classGroup.getExpectStudentNum()==classStudents){
|
|
|
+ vipGroup.setStatus(VipGroupStatusEnum.FINISH);
|
|
|
+ vipGroupDao.update(vipGroup);
|
|
|
+ }
|
|
|
+ classGroup.setStudentNum(classGroup.getStudentNum()+1);
|
|
|
+ classGroupDao.update(classGroup);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -769,7 +680,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
return;
|
|
|
}
|
|
|
List<Map<Long, BigDecimal>> maps = vipGroupDao.countSurplusCourseFee(vipGroupId);
|
|
|
- if(CollectionUtils.isEmpty(maps)){
|
|
|
+ if(CollectionUtils.isEmpty(maps)||(maps.size()==1&&Objects.isNull(maps.get(0)))){
|
|
|
vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
|
|
|
vipGroupDao.update(vipGroup);
|
|
|
return;
|