Explorar el Código

Merge branch 'dev_v1.3.4_20220902' of http://git.dayaedu.com/yonge/cooleshow into dev_v1.3.4_20220902

Eric hace 3 años
padre
commit
477b6a4706

+ 5 - 3
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -182,6 +182,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         if (!hasStock(cartPromotionItemList)) {
             Asserts.fail("库存不足,无法下单");
         }
+        BigDecimal couponAmount = BigDecimal.ZERO;
         //判断使用使用了优惠券
         if (StringUtil.isEmpty(orderParam.getCouponId())) {
             //不用优惠券
@@ -199,7 +200,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
                     currentMember.getId(), orderParam.getCouponId(), orderParam.getOrderAmount(),
                     orderParam.getPlatformType());
             CouponInfoApi data = couponInfoApiHttpResponseResult.getData();
-            BigDecimal couponAmount = BigDecimal.ZERO;
             if(data != null) {
                 couponAmount = data.getDiscountedPrices();
             }
@@ -260,10 +260,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             order.setIntegrationAmount(calcIntegrationAmount(orderItemList));
         }
         BigDecimal payAmount = calcPayAmount(order);
-        if (payAmount.compareTo(orderParam.getOrderAmount()) != 0) {
+        LOG.info("payAmount:{},totalAmount:{},couponAmount:{}",payAmount,order.getTotalAmount(),couponAmount);
+        if (orderParam.getOrderAmount().compareTo(order.getTotalAmount().subtract(couponAmount)) != 0) {
             throw new BizException("订单金额校验不通过");
         }
-        order.setPayAmount(payAmount);
+        order.setPayAmount(orderParam.getOrderAmount());
         //转化为订单信息并插入数据库
         order.setMemberId(currentMember.getId());
         order.setCreateTime(new Date());
@@ -1304,6 +1305,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @param orderItemList 可用优惠券的下单商品商品
      */
     private void calcPerCouponAmount(List<OmsOrderItem> orderItemList, BigDecimal coupon) {
+
         BigDecimal totalAmount = calcTotalAmount(orderItemList);
         for (OmsOrderItem orderItem : orderItemList) {
             //(商品价格/可用商品总价)*优惠券面额

+ 10 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -78,10 +78,19 @@ public class OrderReq {
         private Object bizContent;
         @ApiModelProperty(value = "调用业务创建方法返回", hidden = true)
         private OrderCreateRes createRes;
-
+        @ApiModelProperty(value = "订单金额", required = true)
+        private BigDecimal actualPrice;
         @ApiModelProperty(value = "活动id")
         private Long activityId;
 
+        public BigDecimal getActualPrice() {
+            return actualPrice;
+        }
+
+        public void setActualPrice(BigDecimal actualPrice) {
+            this.actualPrice = actualPrice;
+        }
+
         public Long getActivityId() {
             return activityId;
         }

+ 8 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -726,7 +726,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         //校验购买的课程组每节课时间是否和自己的课时冲突
         batchCheckStudentCourseTime(studentId, courseList, CourseSchedule::getStartTime, CourseSchedule::getEndTime);
         //写入学生购买课程记录
-        buyLiveCourseAfter(orderReqInfo.getOrderNo(), studentId, courseList, courseGroup);
+        buyLiveCourseAfter(orderReqInfo.getOrderNo(), studentId, courseList, courseGroup,orderReqInfo.getActualPrice());
 
         OrderCreateRes orderCreateRes = new OrderCreateRes();
         orderCreateRes.setRes(true);
@@ -745,16 +745,17 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
 
     /**
      * 待订单创建完毕后继续后续操作
-     *
-     * @param orderNo     订单号
-     * @param courseList  课程列表
+     *  @param orderNo     订单号
      * @param studentId   学员id
+     * @param courseList  课程列表
      * @param courseGroup 直播课程组信息
+     * @param actualPrice
      */
-    private void buyLiveCourseAfter(String orderNo, Long studentId, List<CourseSchedule> courseList, CourseGroup courseGroup) {
+    private void buyLiveCourseAfter(String orderNo, Long studentId, List<CourseSchedule> courseList, CourseGroup courseGroup, BigDecimal actualPrice) {
         log.info("buyLiveCourse buyLiveCourseAfter -> order {} studentId {} courseList {} courseGroup {}", orderNo, studentId, JSON.toJSONString(courseList), JSON.toJSONString(courseGroup));
         //获取每节课购买的价格
         Map<Integer, BigDecimal> courseAveragePrice = WrapperUtil.getAveragePrice(courseGroup.getCourseNum(), courseGroup.getCoursePrice());
+        Map<Integer, BigDecimal> courseAverageActualPrice = WrapperUtil.getAveragePrice(courseGroup.getCourseNum(),actualPrice);
         //写course_schedule_student_payment表 作为记录锁定时间用,防止重复购买,如果支付失败则删除该数据
         List<CourseScheduleStudentPayment> studentPaymentList = new ArrayList<>();
         Date now = new Date();
@@ -766,9 +767,10 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             studentPayment.setCourseId(course.getId());
             studentPayment.setOrderNo(orderNo);
             BigDecimal amount = courseAveragePrice.get(i.getAndIncrement());
+            BigDecimal actualAmount = courseAverageActualPrice.get(i.getAndIncrement());
             studentPayment.setOriginalPrice(amount);
             studentPayment.setExpectPrice(amount);
-            studentPayment.setActualPrice(amount);
+            studentPayment.setActualPrice(actualAmount);
             studentPayment.setCreatedTime(now);
             studentPayment.setUpdatedTime(now);
             studentPayment.setCourseType(courseGroup.getType());

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -965,7 +965,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         BigDecimal decimal = new BigDecimal(courseNum);//选购课程节数
         BigDecimal multiply = price.multiply(decimal);//预计总价
         if (multiply.compareTo(scheduleDto.getCoursePrice()) != 0) {
-            throw new BizException("价格异常。预计价格:{},实际价格:{}", multiply, scheduleDto.getCoursePrice());
+            throw new BizException("价格异常。预计价格:{},实际价格:{}", multiply, orderReqInfo.getActualPrice());
         }
 
         //获取老师锁课缓存
@@ -1001,7 +1001,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         BigDecimal subjectPrice = teacherSubjectPrice.getSubjectPrice();
 
         //每课实际价格
-        Map<Integer, BigDecimal> courseAveragePrice = WrapperUtil.getAveragePrice(scheduleDto.getCourseNum(), scheduleDto.getCoursePrice());
+        Map<Integer, BigDecimal> courseAveragePrice = WrapperUtil.getAveragePrice(scheduleDto.getCourseNum(), orderReqInfo.getActualPrice());
 
         List<CourseScheduleDate> classTime = scheduleDto.getClassTime();
         for (int i = 0; i < classTime.size(); i++) {

+ 14 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -539,7 +539,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (musicSheetDto.getAuditVersion() == null) {
             musicSheetDto.setAuditVersion(YesOrNoEnum.NO);
         }
-        if (musicSheetDto.getChargeType().equals(ChargeTypeEnum.VIP)) {
+        if (musicSheetDto.getChargeType().equals(ChargeTypeEnum.VIP) || musicSheetDto.getChargeType().equals(ChargeTypeEnum.FREE)) {
             musicSheetDto.setMusicPrice(BigDecimal.ZERO);
         }
 
@@ -650,16 +650,24 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         BigDecimal serviceFee = new BigDecimal(musicSheetServiceFee).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
         //支付金额
         BigDecimal actualPrice = userOrderDetailVo.getActualPrice();
+        BigDecimal expectPrice = userOrderDetailVo.getExpectPrice();
 
-        //服务费
-        BigDecimal serviceFeeAmount = actualPrice.multiply(serviceFee).setScale(2, RoundingMode.HALF_UP);
+        //服务费  原价的平台服务费 ,减去优惠券金额
+        BigDecimal serviceFeeAmount = expectPrice.multiply(serviceFee).subtract(userOrderDetailVo.getCouponAmount()).setScale(2, RoundingMode.HALF_UP);
+        if (serviceFeeAmount.compareTo(BigDecimal.ZERO) <0) {
+            serviceFeeAmount = BigDecimal.ZERO;
+        }
 
         // 保存购买记录
         addMusicSheetPurchaseRecord(userOrderDetailVo, actualPrice, serviceFeeAmount);
 
         if (!musicSheet.getSourceType().getCode().equals(SourceTypeEnum.PLATFORM.getCode())) {
+
+            // 老师收入
+            BigDecimal teacherAmount = BigDecimal.ONE.subtract(serviceFee).multiply(expectPrice);
+
             // 加入账户
-            addTeacherAccount(userOrderDetailVo, actualPrice, serviceFeeAmount, userOrderDetailVo.getBizId());
+            addTeacherAccount(userOrderDetailVo, teacherAmount, userOrderDetailVo.getBizId());
         }
 
         // 消息通知
@@ -754,16 +762,14 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
      * 添加金额到老师账户
      *
      * @param userOrderDetailVo 订单信息
-     * @param actualPrice       付款价格
-     * @param serviceFeeAmount  服务费
+     * @param transAmount       老师收入
      * @param musicSheetId      曲目id
      */
-    private void addTeacherAccount(UserOrderDetailVo userOrderDetailVo, BigDecimal actualPrice, BigDecimal serviceFeeAmount,
+    private void addTeacherAccount(UserOrderDetailVo userOrderDetailVo, BigDecimal transAmount,
                                    Long musicSheetId) {
         //获取账期时间
         Date accountPeriodTime = userOrderService.getAccountPeriodTime(userOrderDetailVo);
 
-        BigDecimal transAmount = actualPrice.subtract(serviceFeeAmount).setScale(2, RoundingMode.HALF_UP);
         //插入老师账户变更记录-老师预收
         userAccountService.accountRecord(
                 new UserAccountRecordDto(userOrderDetailVo.getMerchId(), PostStatusEnum.WAIT, transAmount, InOrOutEnum.IN,

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -350,7 +350,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             info.setUserId(orderReq.getUserId());
             info.setRecomUserId(orderReq.getRecomUserId());
             info.setActivityId(orderReq.getActivityId());
-
+            info.setActualPrice(orderReq.getActualPrice());
             HttpResponseResult<OrderCreateRes> createResult = createFunction.apply(info);
             OrderCreateRes createRes = createResult.getData();
             if (!createResult.getStatus() || null == createRes || !createRes.getRes()) {
@@ -395,7 +395,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         //验证金额
         if (actualPrice.setScale(2, RoundingMode.HALF_UP)
                 .compareTo(orderReq.getActualPrice().setScale(2, RoundingMode.HALF_UP)) != 0) {
-            return HttpResponseResult.failed("订单金额校验不通过");
+            throw new BizException("订单金额校验不通过");
         }
 
         //验证成功后,订单入库

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java

@@ -163,11 +163,11 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         BigDecimal liveServiceRate = new BigDecimal(sysConfigService.findConfigValue(SysConfigConstant.VIDEO_LESSON_SERVICE_FEE))
                 .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
         //支付金额
-        BigDecimal actualPrice = userOrderDetailVo.getActualPrice();
+        BigDecimal expectPrice = userOrderDetailVo.getExpectPrice();
         //服务费
-        BigDecimal serviceFeeAmount = actualPrice.multiply(liveServiceRate).setScale(2, RoundingMode.HALF_UP);
+        BigDecimal serviceFeeAmount = expectPrice.multiply(liveServiceRate).setScale(2, RoundingMode.HALF_UP);
         //老师入账金额
-        BigDecimal transAmount = actualPrice.subtract(serviceFeeAmount).setScale(2, RoundingMode.HALF_UP);
+        BigDecimal transAmount = expectPrice.subtract(serviceFeeAmount).setScale(2, RoundingMode.HALF_UP);
         //插入老师账户变更记录-老师预收
         userAccountService.accountRecord(
                 new UserAccountRecordDto(userOrderDetailVo.getMerchId(), PostStatusEnum.WAIT, transAmount, InOrOutEnum.IN,