|  | @@ -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());
 |