Jelajahi Sumber

单曲购买流程支持专辑购买

Eric 2 tahun lalu
induk
melakukan
6d97c09559

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

@@ -83,6 +83,9 @@ public class OrderReq {
         @ApiModelProperty(value = "活动id")
         private Long activityId;
 
+        // 透传订单类型
+        private OrderTypeEnum orderType;
+
         public BigDecimal getActualPrice() {
             return actualPrice;
         }
@@ -170,6 +173,14 @@ public class OrderReq {
         public void setRecomUserId(Long recomUserId) {
             this.recomUserId = recomUserId;
         }
+
+        public OrderTypeEnum getOrderType() {
+            return orderType;
+        }
+
+        public void setOrderType(OrderTypeEnum orderType) {
+            this.orderType = orderType;
+        }
     }
 
     public Long getRewardId() {

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java

@@ -16,7 +16,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     VIDEO("视频课购买"),
     MUSIC("单曲点播"),
     PINAO_ROOM("琴房时长"),
-    ACTI_REGIST("活动报名")
+    ACTI_REGIST("活动报名"),
+    ALBUM("专辑购买"),
     ;
     @EnumValue
     private String code;

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetPurchaseRecordService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetPurchaseRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 
 /**
  * MusicSheetPurchaseRecordService服务类
@@ -19,5 +20,5 @@ public interface MusicSheetPurchaseRecordService extends IService<MusicSheetPurc
      * @param musicSheetId 曲目id
      * @return boolean
      */
-    MusicSheetPurchaseRecord checkPurchase(Long userId, Long musicSheetId, ClientEnum clientType);
+    MusicSheetPurchaseRecord checkPurchase(Long userId, Long musicSheetId, ClientEnum clientType, PurchaseRecordTypeEnum purchaseType);
 }

+ 7 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetPurchaseRecordServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetPurchaseRecordDao;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetPurchaseRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetPurchaseRecordService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,12 +33,13 @@ public class MusicSheetPurchaseRecordServiceImpl extends ServiceImpl<MusicSheetP
     }
 
     @Override
-    public MusicSheetPurchaseRecord checkPurchase(Long userId, Long musicSheetId, ClientEnum clientType) {
+    public MusicSheetPurchaseRecord checkPurchase(Long userId, Long musicSheetId, ClientEnum clientType, PurchaseRecordTypeEnum purchaseType) {
         List<MusicSheetPurchaseRecord> list = this.lambdaQuery()
-                                                  .eq(MusicSheetPurchaseRecord::getMusicSheetId, musicSheetId)
-                                                  .eq(MusicSheetPurchaseRecord::getStudentId, userId)
-                                                  .eq(MusicSheetPurchaseRecord::getClientType, clientType)
-                                                  .list();
+                .eq(MusicSheetPurchaseRecord::getMusicSheetId, musicSheetId)
+                .eq(MusicSheetPurchaseRecord::getStudentId, userId)
+                .eq(MusicSheetPurchaseRecord::getClientType, clientType)
+                .eq(MusicSheetPurchaseRecord::getPurchaseType, purchaseType)
+                .list();
         if (CollectionUtils.isEmpty(list)) {
             return null;
         }

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

@@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaU
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.MusicAlbumDao;
 import com.yonge.cooleshow.biz.dal.dto.*;
+import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
@@ -114,6 +116,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     private StudentStarService studentStarService;
     @Autowired
     private UserOrderService userOrderService;
+    @Autowired
+    private MusicAlbumDao musicAlbumMapper;
 
     public MusicSheetDao getDao() {
         return musicSheetDao;
@@ -286,7 +290,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (ChargeTypeEnum.CHARGE.getCode().equals(detail.getChargeType().getCode())) {
             // 学生须判断是否能播放曲目
             MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService.checkPurchase(
-                    studentId, detail.getId(), userType);
+                    studentId, detail.getId(), userType, PurchaseRecordTypeEnum.MUSIC);
             if (musicSheetPurchaseRecord != null) {
                 detail.setOrderStatus(musicSheetPurchaseRecord.getOrderStatus());
                 detail.setOrderNo(musicSheetPurchaseRecord.getOrderNo());
@@ -297,7 +301,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         } else if (ChargeTypeEnum.VIP.getCode().equals(detail.getChargeType().getCode())) {
             // 先判断是否购买过
             MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService.checkPurchase(
-                    studentId, detail.getId(), userType);
+                    studentId, detail.getId(), userType, PurchaseRecordTypeEnum.MUSIC);
             if (musicSheetPurchaseRecord != null) {
                 detail.setPlay(YesOrNoEnum.YES);
             } else
@@ -643,24 +647,53 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         MusicSheetPayDto musicSheetPayDto = JSON.parseObject(
                 JSON.toJSONString(orderReqInfo.getBizContent()), MusicSheetPayDto.class);
 
-        MusicSheet musicSheet = this.getById(musicSheetPayDto.getMusicSheetId());
         OrderCreateRes orderCreateRes = new OrderCreateRes();
-        if (musicSheet == null) {
-            throw new BizException("不存在曲目信息");
-        }
+        orderCreateRes.setGoodType(orderCreateRes.getGoodType());
+        orderCreateRes.setGoodNum(1);
+        orderCreateRes.setOrderType(orderReqInfo.getOrderType());
+
+        switch (orderReqInfo.getOrderType()) {
+            case MUSIC: // 单曲
+                {
+                    MusicSheet musicSheet = this.getById(musicSheetPayDto.getMusicSheetId());
+                    if (musicSheet == null) {
+                        throw new BizException("不存在曲目信息");
+                    }
 
-        // 检查已经购买
-        checkoutPay(orderReqInfo.getUserId(), musicSheetPayDto.getMusicSheetId(), musicSheetPayDto.getClientType());
+                    orderCreateRes.setRes(true);
+                    if (!musicSheet.getSourceType().getCode().equals(SourceTypeEnum.PLATFORM.getCode())) {
+                        orderCreateRes.setMerchId(musicSheet.getUserId());
+                    }
 
-        orderCreateRes.setRes(true);
-        if (!musicSheet.getSourceType().getCode().equals(SourceTypeEnum.PLATFORM.getCode())) {
-            orderCreateRes.setMerchId(musicSheet.getUserId());
+
+                    orderCreateRes.setBizId(musicSheet.getId());
+                    orderCreateRes.setOriginalPrice(musicSheet.getMusicPrice());
+                    orderCreateRes.setExpectPrice(musicSheet.getMusicPrice());
+                }
+                break;
+            case ALBUM: // 专辑
+                {
+                    MusicAlbum album = musicAlbumMapper.selectById(musicSheetPayDto.getMusicSheetId());
+
+                    if (Objects.isNull(album)) {
+                        throw new BizException("无效的专辑信息");
+                    }
+
+                    orderCreateRes.setRes(true);
+                    orderCreateRes.setMerchId(0L);
+                    orderCreateRes.setBizId(album.getId());
+                    orderCreateRes.setOriginalPrice(BigDecimal.valueOf(album.getAlbumPrice()));
+                    orderCreateRes.setExpectPrice(BigDecimal.valueOf(album.getAlbumPrice()));
+                }
+                break;
+            default:
+                break;
         }
-        orderCreateRes.setGoodType(orderCreateRes.getGoodType());
-        orderCreateRes.setBizId(musicSheet.getId());
-        orderCreateRes.setGoodNum(1);
-        orderCreateRes.setOriginalPrice(musicSheet.getMusicPrice());
-        orderCreateRes.setExpectPrice(musicSheet.getMusicPrice());
+
+        // 检查已经购买,抛出已购买异常
+        checkoutPay(orderReqInfo.getUserId(), musicSheetPayDto.getMusicSheetId(), musicSheetPayDto.getClientType(),
+                PurchaseRecordTypeEnum.valueOf(orderReqInfo.getOrderType().getCode()));
+
         return HttpResponseResult.succeed(orderCreateRes);
 
     }
@@ -672,12 +705,13 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
      * @param musicSheetId 曲目id
      * @param clientType
      */
-    private void checkoutPay(Long userId, Long musicSheetId, String clientType) {
+    private void checkoutPay(Long userId, Long musicSheetId, String clientType, PurchaseRecordTypeEnum purchaseType) {
         List<MusicSheetPurchaseRecord> list = musicSheetPurchaseRecordService
                 .lambdaQuery()
                 .eq(MusicSheetPurchaseRecord::getMusicSheetId, musicSheetId)
                 .eq(MusicSheetPurchaseRecord::getStudentId, userId)
                 .eq(MusicSheetPurchaseRecord::getClientType, clientType)
+                .eq(MusicSheetPurchaseRecord::getPurchaseType, purchaseType)
                 .eq(MusicSheetPurchaseRecord::getOrderStatus, OrderStatusEnum.PAID)
                 .list();
         if (!CollectionUtils.isEmpty(list)) {
@@ -784,8 +818,11 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
      * @param serviceFeeAmount  服务费
      */
     private void addMusicSheetPurchaseRecord(UserOrderDetailVo userOrderDetailVo, BigDecimal actualPrice, BigDecimal serviceFeeAmount) {
-        MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService
-                .checkPurchase(userOrderDetailVo.getUserId(), userOrderDetailVo.getBizId(), userOrderDetailVo.getOrderClient());
+        MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService.checkPurchase(
+                userOrderDetailVo.getUserId(),
+                userOrderDetailVo.getBizId(),
+                userOrderDetailVo.getOrderClient(),
+                PurchaseRecordTypeEnum.valueOf(userOrderDetailVo.getOrderType().getCode()));
         if (musicSheetPurchaseRecord == null) {
             musicSheetPurchaseRecord = new MusicSheetPurchaseRecord();
         }
@@ -799,6 +836,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         musicSheetPurchaseRecord.setMusicSheetServiceFee(serviceFeeAmount);
         musicSheetPurchaseRecord.setOrderStatus(OrderStatusEnum.PAID);
         musicSheetPurchaseRecord.setStudentId(userOrderDetailVo.getUserId());
+        musicSheetPurchaseRecord.setPurchaseType(PurchaseRecordTypeEnum.valueOf(userOrderDetailVo.getOrderType().getCode()));
         musicSheetPurchaseRecordService.saveOrUpdate(musicSheetPurchaseRecord);
     }
 
@@ -824,8 +862,11 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Transactional(rollbackFor = Exception.class)
     public void orderAfterSheet(UserOrderDetailVo userOrderDetailVo) {
         // 保存购买记录
-        MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService
-                .checkPurchase(userOrderDetailVo.getUserId(), userOrderDetailVo.getBizId(), userOrderDetailVo.getOrderClient());
+        MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService.checkPurchase(
+                userOrderDetailVo.getUserId(),
+                userOrderDetailVo.getBizId(),
+                userOrderDetailVo.getOrderClient(),
+                PurchaseRecordTypeEnum.valueOf(userOrderDetailVo.getOrderType().getCode()));
         if (musicSheetPurchaseRecord == null) {
             musicSheetPurchaseRecord = new MusicSheetPurchaseRecord();
         }
@@ -836,14 +877,19 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         musicSheetPurchaseRecord.setOriginalPrice(userOrderDetailVo.getOriginalPrice());
         musicSheetPurchaseRecord.setOrderStatus(OrderStatusEnum.WAIT_PAY);
         musicSheetPurchaseRecord.setStudentId(userOrderDetailVo.getUserId());
+        musicSheetPurchaseRecord.setPurchaseType(PurchaseRecordTypeEnum.valueOf(userOrderDetailVo.getOrderType().getCode()));
+
         musicSheetPurchaseRecordService.saveOrUpdate(musicSheetPurchaseRecord);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void buyMusicSheetCancel(UserOrderDetailVo userOrderDetailVo) {
-        MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService
-                .checkPurchase(userOrderDetailVo.getUserId(), userOrderDetailVo.getBizId(), userOrderDetailVo.getOrderClient());
+        MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService.checkPurchase(
+                userOrderDetailVo.getUserId(),
+                userOrderDetailVo.getBizId(),
+                userOrderDetailVo.getOrderClient(),
+                PurchaseRecordTypeEnum.valueOf(userOrderDetailVo.getOrderType().getCode()));
 
         if (musicSheetPurchaseRecord == null) return;
         musicSheetPurchaseRecordService.removeById(musicSheetPurchaseRecord.getId());

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

@@ -349,6 +349,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 return HttpResponseResult.failed("订单商品信息获取失败");
             }
             info.setOrderNo(orderReq.getOrderNo());
+            info.setOrderType(orderReq.getOrderType());
             Long subOrderNo = idGeneratorService.generatorId("subOrderNo");
             info.setSubOrderNo(Long.toString(subOrderNo));
             info.setUserId(orderReq.getUserId());
@@ -663,6 +664,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
             UserOrderDetailVo orderDetail = new UserOrderDetailVo();
             orderDetail.setOrderNo(data.getOrderNo());
+            orderDetail.setOrderType(orderReq.getOrderType());
             orderDetail.setSubOrderNo(data.getSubOrderNo());
             orderDetail.setMerchId(res.getMerchId());
             orderDetail.setGoodType(res.getGoodType());
@@ -800,10 +802,17 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             return;
         }
 
+        // 订单基本信息
+        UserOrder order = getById(userOrder.getId());
+        if (Objects.isNull(order)) {
+            throw new BizException("无效的订单编号");
+        }
+
         List<UserOrderDetailVo> orderDetailList = orderDetailService.getOrderDetilListByOrderNo(userOrder.getOrderNo());
         for (UserOrderDetailVo orderDetailVo : orderDetailList) {
             orderDetailVo.setUserId(userOrder.getUserId());
             orderDetailVo.setOrderId(userOrder.getId());
+            orderDetailVo.setOrderType(order.getOrderType());
             //调用业务
             Consumer<UserOrderDetailVo> userOrderVoConsumer = orderCancel.get(orderDetailVo.getGoodType());
             if (!Objects.isNull(userOrderVoConsumer)) {
@@ -841,6 +850,12 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 && !OrderStatusEnum.PAYING.equals(detail.getStatus())) {
             return;
         }
+        // 用户订单信息
+        UserOrder order = getById(detail.getId());
+        if (Objects.isNull(order)) {
+            throw new BizException("无效的订单编号");
+        }
+
         //修改订单状态
         Date now = new Date();
         detail.setStatus(OrderStatusEnum.PAID);
@@ -882,6 +897,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             orderDetailVo.setRecomUserId(detail.getRecomUserId());
             orderDetailVo.setActivityId(detail.getActivityId());
             orderDetailVo.setRewardId(detail.getRewardId());
+            orderDetailVo.setOrderType(order.getOrderType());
             //调用业务
             Consumer<UserOrderDetailVo> userOrderVoConsumer = orderSuccess.get(orderDetailVo.getGoodType());
             if (!Objects.isNull(userOrderVoConsumer)) {

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -42,6 +43,9 @@ public class UserOrderDetailVo extends UserOrderDetail {
     @ApiModelProperty("活动奖品id")
     private Long rewardId;
 
+    // 透传订单类型
+    private OrderTypeEnum orderType;
+
     public Long getRewardId() {
         return rewardId;
     }
@@ -121,4 +125,12 @@ public class UserOrderDetailVo extends UserOrderDetail {
     public void setRecomUserId(Long recomUserId) {
         this.recomUserId = recomUserId;
     }
+
+    public OrderTypeEnum getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(OrderTypeEnum orderType) {
+        this.orderType = orderType;
+    }
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCreateRes.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo.res;
 
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -42,6 +43,9 @@ public class OrderCreateRes {
     @ApiModelProperty(value = "冗余字段,用于传递参数用")
     private Object bizParam;
 
+    // 透传订单类型
+    private OrderTypeEnum orderType;
+
     public Long getRewardId() {
         return rewardId;
     }
@@ -145,4 +149,12 @@ public class OrderCreateRes {
     public void setCouponAmount(BigDecimal couponAmount) {
         this.couponAmount = couponAmount;
     }
+
+    public OrderTypeEnum getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(OrderTypeEnum orderType) {
+        this.orderType = orderType;
+    }
 }