|
@@ -18,6 +18,7 @@ import com.ym.mec.common.page.PageInfo;
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
import com.ym.mec.im.ImFeignService;
|
|
import com.ym.mec.im.ImFeignService;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
|
+import com.ym.mec.util.date.DateUtil;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.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;
|
|
@@ -86,6 +87,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
private SysConfigService sysConfigService;
|
|
private SysConfigService sysConfigService;
|
|
@Autowired
|
|
@Autowired
|
|
private SysUserCashAccountDetailService sysUserCashAccountDetailService;
|
|
private SysUserCashAccountDetailService sysUserCashAccountDetailService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private VipGroupDefaultClassesCycleDao vipGroupDefaultClassesCycleDao;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public BaseDAO<Long, VipGroup> getDAO() {
|
|
public BaseDAO<Long, VipGroup> getDAO() {
|
|
return vipGroupDao;
|
|
return vipGroupDao;
|
|
@@ -118,6 +122,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
||(!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.OFFLINE))&&(courseScheduleGroup.get(TeachModeEnum.OFFLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()))){
|
|
||(!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.OFFLINE))&&(courseScheduleGroup.get(TeachModeEnum.OFFLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()))){
|
|
throw new BizException("线下课课时数量安排有误!");
|
|
throw new BizException("线下课课时数量安排有误!");
|
|
}
|
|
}
|
|
|
|
+
|
|
if((Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE))&&vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()!=0)
|
|
if((Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE))&&vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()!=0)
|
|
||(!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE))&&(courseScheduleGroup.get(TeachModeEnum.ONLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()))){
|
|
||(!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE))&&(courseScheduleGroup.get(TeachModeEnum.ONLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()))){
|
|
throw new BizException("线上课课时数量安排有误!");
|
|
throw new BizException("线上课课时数量安排有误!");
|
|
@@ -129,11 +134,30 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
throw new BizException("该用户不存在");
|
|
throw new BizException("该用户不存在");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
|
|
|
|
+
|
|
//获取活动信息
|
|
//获取活动信息
|
|
- VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
|
|
|
|
|
|
+ VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
|
|
|
|
+ Integer totalClassTimes=vipGroupApplyBaseInfoDto.getOnlineClassesNum()+vipGroupApplyBaseInfoDto.getOfflineClassesNum();
|
|
|
|
+ //获取第一节课
|
|
|
|
+ CourseSchedule firstCourseSchedule = vipGroup.getCourseSchedules().stream().min(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
|
|
|
|
+ //获取最后一节课
|
|
|
|
+ CourseSchedule latestCourseSchedule = vipGroup.getCourseSchedules().stream().max(Comparator.comparing(CourseSchedule::getEndClassTime)).get();
|
|
|
|
+ //判断课程安排是否超出范围
|
|
|
|
+ if(Objects.nonNull(vipGroupActivity.getCoursesEndTime())||Objects.nonNull(vipGroupActivity.getCoursesStartTime())){
|
|
|
|
+ if(latestCourseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime())
|
|
|
|
+ ||firstCourseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
|
|
|
|
+ throw new BizException("课时安排时间超出范围!");
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ VipGroupDefaultClassesCycle vipGroupDefaultClassesCycle = vipGroupDefaultClassesCycleDao.findByOrganAndClassTimes(sysUser.getOrganId().longValue(), totalClassTimes);
|
|
|
|
+ int month = DateUtil.monthsBetween(firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
|
|
|
|
+ if(month>vipGroupDefaultClassesCycle.getMonth()){
|
|
|
|
+ throw new BizException("课时安排时间超出范围!");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
//生成vip课信息
|
|
//生成vip课信息
|
|
- VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
|
|
|
|
List<String> bySubIds = subjectDao.findBySubIds(vipGroupApplyBaseInfoDto.getSubjectIdList());
|
|
List<String> bySubIds = subjectDao.findBySubIds(vipGroupApplyBaseInfoDto.getSubjectIdList());
|
|
StringBuffer className=new StringBuffer(StringUtils.join(bySubIds,","));
|
|
StringBuffer className=new StringBuffer(StringUtils.join(bySubIds,","));
|
|
className.append("•");
|
|
className.append("•");
|
|
@@ -158,6 +182,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
vipGroupApplyBaseInfoDto.setTotalPrice(costInfo.get("totalPrice"));
|
|
vipGroupApplyBaseInfoDto.setTotalPrice(costInfo.get("totalPrice"));
|
|
vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
|
|
vipGroupApplyBaseInfoDto.setStatus(VipGroupStatusEnum.APPLYING);
|
|
vipGroupApplyBaseInfoDto.setOrganId(sysUser.getOrganId());
|
|
vipGroupApplyBaseInfoDto.setOrganId(sysUser.getOrganId());
|
|
|
|
+ //课程结束时间为排课的最后一节课的结束时间
|
|
|
|
+ vipGroupApplyBaseInfoDto.setCoursesExpireDate(latestCourseSchedule.getEndClassTime());
|
|
vipGroupDao.insert(vipGroupApplyBaseInfoDto);
|
|
vipGroupDao.insert(vipGroupApplyBaseInfoDto);
|
|
|
|
|
|
//获取vip课类型信息
|
|
//获取vip课类型信息
|
|
@@ -168,8 +194,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
classGroup.setSubjectIdList(vipGroupApplyBaseInfoDto.getSubjectIdList());
|
|
classGroup.setSubjectIdList(vipGroupApplyBaseInfoDto.getSubjectIdList());
|
|
classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
|
|
classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
|
|
classGroup.setName(vipGroupApplyBaseInfoDto.getName());
|
|
classGroup.setName(vipGroupApplyBaseInfoDto.getName());
|
|
- classGroup.setExpectStudentNum(vipGroupApplyBaseInfoDto.getExpectStudentNum());
|
|
|
|
- classGroup.setTotalClassTimes(vipGroupApplyBaseInfoDto.getOnlineClassesNum()+vipGroupApplyBaseInfoDto.getOfflineClassesNum());
|
|
|
|
|
|
+ classGroup.setExpectStudentNum(vipGroupApplyBaseInfoDto.getStudentNum());
|
|
|
|
+ classGroup.setTotalClassTimes(totalClassTimes);
|
|
classGroup.setType(ClassGroupTypeEnum.VIP);
|
|
classGroup.setType(ClassGroupTypeEnum.VIP);
|
|
classGroup.setDelFlag(YesOrNoEnum.NO);
|
|
classGroup.setDelFlag(YesOrNoEnum.NO);
|
|
classGroup.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
|
|
classGroup.setMusicGroupId(vipGroupApplyBaseInfoDto.getId().toString());
|
|
@@ -203,10 +229,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
|
|
|
|
//课程信息调整
|
|
//课程信息调整
|
|
vipGroup.getCourseSchedules().forEach(courseSchedule -> {
|
|
vipGroup.getCourseSchedules().forEach(courseSchedule -> {
|
|
- if(courseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime())
|
|
|
|
- &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
|
|
|
|
- throw new BizException("课时安排时间超出范围!");
|
|
|
|
- }
|
|
|
|
courseSchedule.setSchoolId(vipGroup.getVipGroupApplyBaseInfo().getTeacherSchoolId());
|
|
courseSchedule.setSchoolId(vipGroup.getVipGroupApplyBaseInfo().getTeacherSchoolId());
|
|
courseSchedule.setTeacherId(vipGroupApplyBaseInfoDto.getUserId().longValue());
|
|
courseSchedule.setTeacherId(vipGroupApplyBaseInfoDto.getUserId().longValue());
|
|
courseSchedule.setActualTeacherId(vipGroupApplyBaseInfoDto.getUserId().longValue());
|
|
courseSchedule.setActualTeacherId(vipGroupApplyBaseInfoDto.getUserId().longValue());
|
|
@@ -449,11 +471,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public Map<String,BigDecimal> countVipGroupPredictFee(VipGroup vipGroup,
|
|
|
|
|
|
+ public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee(K vipGroup,
|
|
Integer teacherId,
|
|
Integer teacherId,
|
|
BigDecimal onlineClassesUnitPrice,
|
|
BigDecimal onlineClassesUnitPrice,
|
|
BigDecimal offlineClassesUnitPrice,
|
|
BigDecimal offlineClassesUnitPrice,
|
|
boolean computeTotalPrice){
|
|
boolean computeTotalPrice){
|
|
|
|
+
|
|
if(Objects.isNull(teacherId)){
|
|
if(Objects.isNull(teacherId)){
|
|
throw new BizException("请指定教师");
|
|
throw new BizException("请指定教师");
|
|
}
|
|
}
|
|
@@ -496,15 +519,25 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
|
|
BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
|
|
BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
|
|
BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
|
|
BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
|
|
BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
|
|
|
|
+ BigDecimal teacherOnlineSalary,teacherOfflineSalary;
|
|
|
|
|
|
//教师课酬线上单课酬计算
|
|
//教师课酬线上单课酬计算
|
|
if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
|
|
if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
|
|
switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
|
|
switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
|
|
case TEACHER_DEFAULT:
|
|
case TEACHER_DEFAULT:
|
|
if(Objects.isNull(teacherDefaultVipGroupSalary)){
|
|
if(Objects.isNull(teacherDefaultVipGroupSalary)){
|
|
- throw new BizException("未设置教师默认课酬");
|
|
|
|
|
|
+ if(vipGroup instanceof VipGroupApplyBaseInfoDto){
|
|
|
|
+ teacherOnlineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOnlineTeacherSalary();
|
|
|
|
+ }else{
|
|
|
|
+ throw new BizException("未设置教师默认课酬");
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ teacherOnlineSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary();
|
|
|
|
+ }
|
|
|
|
+ if(Objects.isNull(teacherOnlineSalary)){
|
|
|
|
+ throw new BizException("请设置教师课酬");
|
|
}
|
|
}
|
|
- results.put("onlineTeacherSalary",teacherDefaultVipGroupSalary.getOnlineClassesSalary().multiply(classTimeDuty));
|
|
|
|
|
|
+ results.put("onlineTeacherSalary",teacherOnlineSalary.multiply(classTimeDuty));
|
|
break;
|
|
break;
|
|
case RATIO_DISCOUNT:
|
|
case RATIO_DISCOUNT:
|
|
results.put("onlineTeacherSalary",onlineClassesUnitPrice.multiply((vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
results.put("onlineTeacherSalary",onlineClassesUnitPrice.multiply((vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
@@ -522,9 +555,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
|
|
switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
|
|
case TEACHER_DEFAULT:
|
|
case TEACHER_DEFAULT:
|
|
if(Objects.isNull(teacherDefaultVipGroupSalary)){
|
|
if(Objects.isNull(teacherDefaultVipGroupSalary)){
|
|
- throw new BizException("未设置教师默认课酬");
|
|
|
|
|
|
+ if(vipGroup instanceof VipGroupApplyBaseInfoDto){
|
|
|
|
+ teacherOfflineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOfflineTeacherSalary();
|
|
|
|
+ }else{
|
|
|
|
+ throw new BizException("未设置教师默认课酬");
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ teacherOfflineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
|
|
}
|
|
}
|
|
- results.put("offlineTeacherSalary",teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(classTimeDuty));
|
|
|
|
|
|
+ if(Objects.isNull(teacherOfflineSalary)){
|
|
|
|
+ throw new BizException("请设置教师课酬");
|
|
|
|
+ }
|
|
|
|
+ results.put("offlineTeacherSalary",teacherOfflineSalary.multiply(classTimeDuty));
|
|
break;
|
|
break;
|
|
case RATIO_DISCOUNT:
|
|
case RATIO_DISCOUNT:
|
|
results.put("offlineTeacherSalary",offlineClassesUnitPrice.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
results.put("offlineTeacherSalary",offlineClassesUnitPrice.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
@@ -669,6 +711,29 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
|
|
//将学生加入到班级,更新班级报名状态及人数信息
|
|
//将学生加入到班级,更新班级报名状态及人数信息
|
|
if(!isOk){
|
|
if(!isOk){
|
|
updateVipGroupStudentNumAndStatus(vipGroupId,-1);
|
|
updateVipGroupStudentNumAndStatus(vipGroupId,-1);
|
|
|
|
+ }else{
|
|
|
|
+ SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId);
|
|
|
|
+ //插入缴费明细
|
|
|
|
+ //收入
|
|
|
|
+ SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
|
|
|
|
+ sysUserIncomeCashAccountDetail.setUserId(userId);
|
|
|
|
+ sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
|
|
|
|
+ sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
|
|
|
|
+ sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount());
|
|
|
|
+ sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount()));
|
|
|
|
+ sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
|
|
|
|
+
|
|
|
|
+ //支出
|
|
|
|
+ SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail();
|
|
|
|
+ sysUserExpendCashAccountDetail.setUserId(userId);
|
|
|
|
+ sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
|
|
|
|
+ sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
|
|
|
|
+ sysUserExpendCashAccountDetail.setAmount(order.getActualAmount());
|
|
|
|
+ sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
|
|
|
|
+ sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
|
|
|
|
+
|
|
|
|
+ sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
|
|
|
|
+ sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
|
|
}
|
|
}
|
|
|
|
|
|
VipGroup vipGroup = vipGroupDao.get(vipGroupId);
|
|
VipGroup vipGroup = vipGroupDao.get(vipGroupId);
|