Browse Source

feat:云教练音准与节奏计算逻辑调整

Joburgess 3 years ago
parent
commit
8cb12d2e05

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupBuyDto.java

@@ -20,6 +20,17 @@ public class PracticeGroupBuyDto extends PracticeGroup {
 
     private List<PracticeDrillTimeDto> drillTimes;
 
+    @ApiModelProperty(value = "优惠券列表", required = false)
+    private List<Integer> couponIdList;
+
+    public List<Integer> getCouponIdList() {
+        return couponIdList;
+    }
+
+    public void setCouponIdList(List<Integer> couponIdList) {
+        this.couponIdList = couponIdList;
+    }
+
     public Long getGroupId() {
         return groupId;
     }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 /**
  * @Author Joburgess
  * @Date 2019/10/2
@@ -23,6 +25,17 @@ public class VipGroupBuyParamsDto {
     @ApiModelProperty(value = "是否重新支付")
     private boolean isRepeatPay;
 
+    @ApiModelProperty(value = "优惠券列表", required = false)
+    private List<Integer> couponIdList;
+
+    public List<Integer> getCouponIdList() {
+        return couponIdList;
+    }
+
+    public void setCouponIdList(List<Integer> couponIdList) {
+        this.couponIdList = couponIdList;
+    }
+
     public boolean isRepeatPay() {
         return isRepeatPay;
     }

+ 15 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -74,6 +74,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao;
 	@Autowired
 	private SysConfigDao sysConfigDao;
+	@Autowired
+	private StudentPaymentOrderDao studentPaymentOrderDaop;
 
 	@Override
 	public BaseDAO<Long, CourseScheduleStudentPayment> getDAO() {
@@ -102,7 +104,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 			throw new BizException("未获取到排课信息");
 		}
 
-        int giveClassTimes=0;
+		int giveClassTimes=0;
         if(vipGroupApplyBaseInfoDto.getStatus().equals(VipGroupStatusEnum.APPLYING)
                 &&Objects.nonNull(vipGroupActivity)
                 &&vipGroupActivity.getType().equals(VipGroupActivityTypeEnum.GIVE_CLASS)
@@ -110,6 +112,12 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
             giveClassTimes=Integer.parseInt(vipGroupActivity.getAttribute2());
         }
 
+		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDaop.findByStudentVipGroup(vipGroupId, userId, DealStatusEnum.SUCCESS.getCode());
+		BigDecimal couponFee = new BigDecimal(0);
+		if(Objects.nonNull(studentPaymentOrder)){
+			couponFee = studentPaymentOrder.getCouponRemitFee().divide(new BigDecimal(vipGroupCourseSchedules.size()-giveClassTimes), CommonConstants.DECIMAL_PLACE);
+		}
+
 		List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
 		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroupCourseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
 		for(TeachModeEnum teachModeEnum:courseScheduleGroupByTeachMode.keySet()){
@@ -129,13 +137,14 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 					//学生线上单节课应缴费计算
 					switch (vipGroupActivity.getType()) {
 						case BASE_ACTIVITY:
-							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
+							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().subtract(couponFee));
 							break;
 						case DISCOUNT:
 							courseScheduleStudentPayment.setExpectPrice(
 									vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().multiply(
 											new BigDecimal(vipGroupActivity.getAttribute1()))
 											.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
+											.subtract(couponFee)
 							);
 							break;
 						case GIVE_CLASS:
@@ -143,7 +152,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 									&& i >= (courseSchedules.size()-giveClassTimes)) {
 								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
 							} else {
-								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice());
+								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice().subtract(couponFee));
 							}
 							break;
 						default:
@@ -153,13 +162,14 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 					//学生线下单节课应缴费计算
 					switch (vipGroupActivity.getType()) {
 						case BASE_ACTIVITY:
-							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
+							courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().subtract(couponFee));
 							break;
 						case DISCOUNT:
 							courseScheduleStudentPayment.setExpectPrice(
 									vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().multiply(
 											new BigDecimal(vipGroupActivity.getAttribute1()))
 											.divide(new BigDecimal(100), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP)
+											.subtract(couponFee)
 							);
 							break;
 						case GIVE_CLASS:
@@ -167,7 +177,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
                                     && i >= (courseSchedules.size()-giveClassTimes)) {
 								courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
 							} else {
-								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
+								courseScheduleStudentPayment.setExpectPrice(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice().subtract(couponFee));
 							}
 							break;
 						default:

+ 8 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -136,6 +136,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
     @Autowired
     private StudentGoodsSellDao studentGoodsSellDao;
+    @Autowired
+    private SysCouponCodeService sysCouponCodeService;
 
     private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
 
@@ -3111,8 +3113,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             }
             return BaseController.failed(HttpStatus.FOUND, errMessage);
         }
-
-        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+        //使用优惠券
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(),amount);
+        amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(practiceGroupBuyParams.getStudentId());
         studentPaymentOrder.setGroupType(GroupType.PRACTICE);
         String orderNo = idGeneratorService.generatorId("payment") + "";
@@ -3558,7 +3561,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             return BaseController.failed(HttpStatus.FOUND, errMessage);
         }
 
-        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+        //使用优惠券
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(),amount);
+        amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(practiceGroupBuyParams.getStudentId());
         studentPaymentOrder.setGroupType(GroupType.PRACTICE);
         String orderNo = idGeneratorService.generatorId("payment") + "";

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

@@ -165,6 +165,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private VipGroupStudentCoursePriceDao vipGroupStudentCoursePriceDao;
 	@Autowired
 	private SysConfigService sysConfigService;
+	@Autowired
+	private SysCouponCodeService sysCouponCodeService;
 
 	private static final Logger LOGGER = LoggerFactory
 			.getLogger(VipGroup.class);
@@ -2166,26 +2168,24 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
 		courseScheduleService.checkNewCourseSchedules(courseSchedules,false,false);
 
-		StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
+		StudentPaymentOrder studentPaymentOrder=sysCouponCodeService.use(vipGroupBuyParams.getCouponIdList(),vipGroup.getTotalPrice());
 		studentPaymentOrder.setUserId(user.getId());
         studentPaymentOrder.setGroupType(GroupType.VIP);
 		String orderNo=idGeneratorService.generatorId("payment") + "";
 		studentPaymentOrder.setOrderNo(orderNo);
 		studentPaymentOrder.setStatus(DealStatusEnum.ING);
 		studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
-		studentPaymentOrder.setExpectAmount(vipGroup.getTotalPrice());
 		studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
-		studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
 		studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
 		studentPaymentOrder.setClassGroupId(classGroup.getId());
 		studentPaymentOrder.setOrganId(vipGroup.getOrganId());
 		studentPaymentOrder.setVersion(0);
 		studentPaymentOrderDao.insert(studentPaymentOrder);
 
-		BigDecimal amount=vipGroup.getTotalPrice();
+		BigDecimal amount=studentPaymentOrder.getActualAmount();
 		BigDecimal balance = BigDecimal.ZERO;
 		if("36".equals(user.getOrganId())){
-			studentPaymentRouteOrderService.addRouteOrder(orderNo, vipGroup.getOrganId(), vipGroup.getTotalPrice());
+			studentPaymentRouteOrderService.addRouteOrder(orderNo, vipGroup.getOrganId(), amount);
 			studentPaymentOrder.setPaymentChannel("BALANCE");
 			studentPaymentOrder.setActualAmount(new BigDecimal(0));
 			studentPaymentOrder.setBalancePaymentAmount(amount);
@@ -2201,7 +2201,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				throw new BizException("用户账户找不到");
 			}
 			studentPaymentOrder.setPaymentChannel("BALANCE");
-			if(userCashAccount.getBalance().subtract(vipGroup.getTotalPrice()).doubleValue() >= 0){
+			if(userCashAccount.getBalance().subtract(amount).doubleValue() >= 0){
 				studentPaymentRouteOrderService.addRouteOrder(orderNo, vipGroup.getOrganId(), vipGroup.getTotalPrice());
 				// 更新订单信息
 				studentPaymentOrder.setActualAmount(new BigDecimal(0));