ソースを参照

feat:VIP改造

Joburgess 4 年 前
コミット
9a8f178dc3

+ 1 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -164,14 +164,10 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @date 2019/10/23
      * @param vipGroup: vip课程
      * @param teacherId: 要计算课酬的老师的编号
-     * @param onlineClassesUnitPrice: 线上课程单价
-     * @param offlineClassesUnitPrice: 线下课程单价
      * @return java.util.Map
      */
     <K extends VipGroup> Map<String, BigDecimal> countVipGroupPredictFee(K vipGroup,
-                                                     Integer teacherId,
-                                                     BigDecimal onlineClassesUnitPrice,
-                                                     BigDecimal offlineClassesUnitPrice);
+                                                     Integer teacherId);
 
     /**
      * @describe 计算vip课程购买总价,及老师课酬-只是学生人数统计方式不同

+ 53 - 75
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -295,30 +295,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
 				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
 
-//		BigDecimal offlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOfflineClassesNum());
-//		BigDecimal onlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOnlineClassesNum());
-//
-//		if(vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.GIVE_CLASS)){
-//			if(vipGroupApplyBaseInfoDto.getGiveTeachMode()==TeachModeEnum.OFFLINE){
-//				if(new BigDecimal(totalClassTimes).compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
-//					offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
-//				}
-//			}else if(vipGroupApplyBaseInfoDto.getGiveTeachMode()==TeachModeEnum.ONLINE){
-//				if(new BigDecimal(totalClassTimes).compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
-//					onlineClassNum=onlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
-//				}
-//			}else{
-//				throw new BizException("请指定赠送课程类型!");
-//			}
-//		}
-
-//		BigDecimal tempFee = costInfo.get("totalPrice").multiply(new BigDecimal(0.6));
-//		BigDecimal totalSalary = vipGroupApplyBaseInfoDto.getOfflineTeacherSalary().multiply(offlineClassNum)
-//				.add(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary().multiply(onlineClassNum));
-//		if(totalSalary.compareTo(tempFee)>0){
-//			throw new BizException("教师总课酬不能高于课程总价60%");
-//		}
-
         vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
 
 		//如果默认课酬与实际课酬不匹配则需要审批
@@ -961,9 +937,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
     @Override
     public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee(K vipGroup,
-																			   Integer teacherId,
-																			   BigDecimal onlineClassesUnitPrice,
-																			   BigDecimal offlineClassesUnitPrice){
+																			   Integer teacherId){
 
 		if(Objects.isNull(teacherId)){
 			throw new BizException("请指定教师");
@@ -1006,12 +980,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				}
 				vscp.setPaymentPrice(vscp.getOfflineClassesUnitPrice().multiply(new BigDecimal(vipGroup.getOfflineClassesNum())).add(vscp.getOnlineClassesUnitPrice().multiply(new BigDecimal(vipGroup.getOnlineClassesNum()))));
 				vipGroup.setTotalPrice(vipGroup.getTotalPrice().add(vscp.getPaymentPrice()));
+				results.put(vscp.getStudentId().toString(), vscp.getPaymentPrice());
 			}
 			BigDecimal ots = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 			BigDecimal ofts = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 			if(Objects.nonNull(vipGroup.getStatus())&&normalStudentNum!=vipGroupCategory.getStudentNum()){
-				ots = ots.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-				ofts = ofts.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+				ots = ots.multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+				if(normalStudentNum>5){
+					normalStudentNum = 5;
+				}
+				ofts = ofts.multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 			}
 			results.put("totalPrice",vipGroup.getTotalPrice());
 			results.put("onlineTeacherSalary",ots);
@@ -1027,14 +1005,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
 		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
-		onlineClassesUnitPrice=Objects.isNull(onlineClassesUnitPrice)?vipGroup.getOnlineClassesUnitPrice():onlineClassesUnitPrice;
+		BigDecimal onlineClassesUnitPrice=vipGroup.getOnlineClassesUnitPrice();
 		if(Objects.isNull(onlineClassesUnitPrice)){
-			onlineClassesUnitPrice = BigDecimal.ZERO;
+			throw new BizException("课程单价异常");
 		}
 		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
-		offlineClassesUnitPrice=Objects.isNull(offlineClassesUnitPrice)?vipGroup.getOfflineClassesUnitPrice():offlineClassesUnitPrice;
+		BigDecimal offlineClassesUnitPrice=vipGroup.getOfflineClassesUnitPrice();
 		if(Objects.isNull(offlineClassesUnitPrice)){
-			offlineClassesUnitPrice = BigDecimal.ZERO;
+			throw new BizException("课程单价异常");
 		}
 		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 		BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
@@ -2836,10 +2814,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 		}
 
+		List<VipGroupStudentCoursePrice> vipGroupStudentCoursePrices = vipGroupStudentCoursePriceDao.getVipGroupStudentCoursePrice(vipGroupId, null);
 		Map<Integer, VipGroupStudentCoursePrice> studentCoursePriceMap = new HashMap<>();
-		if(Objects.isNull(vipGroup.getVipGroupActivityId())){
-			List<VipGroupStudentCoursePrice> vipGroupStudentCoursePrice = vipGroupStudentCoursePriceDao.getVipGroupStudentCoursePrice(vipGroupId, null);
-			studentCoursePriceMap = vipGroupStudentCoursePrice.stream().collect(Collectors.toMap(VipGroupStudentCoursePrice::getStudentId, v->v, (v1, v2)->v1));
+		if(!CollectionUtils.isEmpty(vipGroupStudentCoursePrices)){
+			studentCoursePriceMap = vipGroupStudentCoursePrices.stream().collect(Collectors.toMap(VipGroupStudentCoursePrice::getStudentId, v->v, (v1, v2)->v1));
 		}
 
 		VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroup(vipGroup.getId());
@@ -2948,7 +2926,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
 		}
 
-		BigDecimal surplusCourseNum = new BigDecimal(surplusCourses.size());
 		BigDecimal surplusCoursesPrice=new BigDecimal(0);
 		boolean hasGiveClass=false;
 		int onlineCourseTimes=0,
@@ -2962,7 +2939,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			&&surplusCourses.size()>=Integer.parseInt(vipGroupActivity.getAttribute1())){
 			hasGiveClass=true;
 			giveClassTimes=Integer.parseInt(vipGroupActivity.getAttribute2());
-			surplusCourseNum=surplusCourseNum.subtract(new BigDecimal(giveClassTimes));
 			Map<TeachModeEnum, List<CourseSchedule>> teachModeCourseMap = surplusCourses.stream()
 					.collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
 			List<CourseSchedule> onlineCourses=teachModeCourseMap.get(TeachModeEnum.ONLINE);
@@ -2974,51 +2950,53 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				offlineCourseTotalTimes=offlineCourses.size();
 			}
 		}
-		for (int i=0;i<surplusCourses.size();i++) {
-			CourseSchedule courseSchedule=surplusCourses.get(i);
-			if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
-				offlineCourseTimes+=1;
-			}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
-				onlineCourseTimes+=1;
-			}
-			if(hasGiveClass
-					&&vipGroup.getGiveTeachMode() == courseSchedule.getTeachMode()){
-				if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)
-					&&offlineCourseTimes>(offlineCourseTotalTimes-giveClassTimes)){
-					continue;
-				}
 
+		//生成学生单课缴费信息
+		for (Integer studentId:studentIds) {
+			offlineCourseTimes=0;
+			onlineCourseTimes=0;
+			surplusCoursesPrice=new BigDecimal(0);
+
+			if(studentCoursePriceMap.containsKey(studentId)){
+				VipGroupStudentCoursePrice vipGroupStudentCoursePrice = studentCoursePriceMap.get(studentId);
+				vipGroup.setOfflineClassesUnitPrice(vipGroupStudentCoursePrice.getOfflineClassesUnitPrice());
+				vipGroup.setOnlineClassesUnitPrice(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice());
+			}
+
+
+			for (int i=0;i<surplusCourses.size();i++) {
+				CourseSchedule courseSchedule=surplusCourses.get(i);
+				if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
+					offlineCourseTimes+=1;
+				}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
+					onlineCourseTimes+=1;
+				}
 				if(hasGiveClass
 						&&vipGroup.getGiveTeachMode() == courseSchedule.getTeachMode()){
-					if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)
-							&&onlineCourseTimes>(onlineCourseTotalTimes-giveClassTimes)){
+					if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)
+							&&offlineCourseTimes>(offlineCourseTotalTimes-giveClassTimes)){
 						continue;
 					}
+
+					if(hasGiveClass
+							&&vipGroup.getGiveTeachMode() == courseSchedule.getTeachMode()){
+						if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)
+								&&onlineCourseTimes>(onlineCourseTotalTimes-giveClassTimes)){
+							continue;
+						}
+					}
+				}
+				if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
+					surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOfflineClassesUnitPrice());
+				}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
+					surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOnlineClassesUnitPrice());
 				}
 			}
-			if(courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
-				surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOfflineClassesUnitPrice());
-			}else if(courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
-				surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOnlineClassesUnitPrice());
-			}
-		}
 
-        BigDecimal discount=null;
-		if(Objects.nonNull(vipGroupActivity)&&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.DISCOUNT)){
-            discount=new BigDecimal(vipGroupActivity.getAttribute1()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-            surplusCoursesPrice=surplusCoursesPrice.multiply(discount).setScale(CommonConstants.DECIMAL_FINAL_PLACE,BigDecimal.ROUND_HALF_UP);
-        }
-
-		//生成学生单课缴费信息
-		for (Integer studentId:studentIds) {
-			if(Objects.isNull(vipGroupActivity)){
-				VipGroupStudentCoursePrice vipGroupStudentCoursePrice = studentCoursePriceMap.get(studentId);
-				if(Objects.isNull(vipGroupStudentCoursePrice)||Objects.isNull(vipGroupStudentCoursePrice.getOfflineClassesUnitPrice())||Objects.isNull(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice())){
-					throw new BizException("学员缴费设置有误");
-				}
-				vipGroup.setOfflineClassesUnitPrice(vipGroupStudentCoursePrice.getOfflineClassesUnitPrice());
-				vipGroup.setOnlineClassesUnitPrice(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice());
-				surplusCoursesPrice = vipGroupStudentCoursePrice.getOfflineClassesUnitPrice().multiply(new BigDecimal(offlineCourseTimes)).add(vipGroupStudentCoursePrice.getOnlineClassesUnitPrice().multiply(new BigDecimal(onlineCourseTimes)));
+			BigDecimal discount=null;
+			if(Objects.nonNull(vipGroupActivity)&&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.DISCOUNT)){
+				discount=new BigDecimal(vipGroupActivity.getAttribute1()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+				surplusCoursesPrice=surplusCoursesPrice.multiply(discount).setScale(CommonConstants.DECIMAL_FINAL_PLACE,BigDecimal.ROUND_HALF_UP);
 			}
 
 			sysUserCashAccountService.subtractFromCourseBalanceAndBalance(studentId,surplusCoursesPrice,PlatformCashAccountDetailTypeEnum.PAY_FEE, "后台添加学员扣减账户金额");