|  | @@ -1,11 +1,17 @@
 | 
	
		
			
				|  |  |  package com.yonge.cooleshow.biz.dal.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
	
		
			
				|  |  |  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.auth.api.enums.SysUserType;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.MusicSheetPayDto;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dto.search.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.entity.*;
 | 
	
	
		
			
				|  | @@ -13,6 +19,8 @@ import com.yonge.cooleshow.biz.dal.enums.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.support.PageUtil;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.vo.*;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.entity.HttpResponseResult;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.exception.BizException;
 | 
	
		
			
				|  |  |  import org.slf4j.Logger;
 | 
	
		
			
				|  |  |  import org.slf4j.LoggerFactory;
 | 
	
	
		
			
				|  | @@ -25,6 +33,7 @@ import org.springframework.util.CollectionUtils;
 | 
	
		
			
				|  |  |  import java.util.ArrayList;
 | 
	
		
			
				|  |  |  import java.util.Date;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.Optional;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
	
		
			
				|  | @@ -59,6 +68,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private MusicSheetAuthRecordService musicSheetAuthRecordService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SysUserFeignService sysUserFeignService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private UserAccountService userAccountService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      public MusicSheetDao getDao() {
 | 
	
		
			
				|  |  |          return musicSheetDao;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -290,4 +305,85 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
 | 
	
		
			
				|  |  |              return this.saveOrUpdate(musicSheet);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public HttpResponseResult<OrderCreateRes> buyMusicSheetCheck(OrderReq.OrderReqInfo orderReqInfo) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 下单前的验证
 | 
	
		
			
				|  |  | +        getSysUser(orderReqInfo.getUserId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        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("不存在曲目信息");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 检查已经购买
 | 
	
		
			
				|  |  | +        checkoutPay(orderReqInfo.getUserId(),musicSheetPayDto.getMusicSheetId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        orderCreateRes.setRes(true);
 | 
	
		
			
				|  |  | +        orderCreateRes.setMerchId(musicSheet.getUserId());
 | 
	
		
			
				|  |  | +        orderCreateRes.setGoodType(orderCreateRes.getGoodType());
 | 
	
		
			
				|  |  | +        orderCreateRes.setBizId(musicSheet.getId());
 | 
	
		
			
				|  |  | +        orderCreateRes.setGoodNum(1);
 | 
	
		
			
				|  |  | +        orderCreateRes.setOriginalPrice(musicSheet.getMusicPrice());
 | 
	
		
			
				|  |  | +        orderCreateRes.setExpectPrice(musicSheet.getMusicPrice());
 | 
	
		
			
				|  |  | +        return  HttpResponseResult.succeed(orderCreateRes);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 检查是否已购买当前曲目
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param userId 用户id
 | 
	
		
			
				|  |  | +     * @param musicSheetId 曲目id
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void checkoutPay(Long userId, Long musicSheetId) {
 | 
	
		
			
				|  |  | +        List<MusicSheetPurchaseRecord> list = musicSheetPurchaseRecordService
 | 
	
		
			
				|  |  | +                .lambdaQuery()
 | 
	
		
			
				|  |  | +                .eq(MusicSheetPurchaseRecord::getMusicSheetId, musicSheetId)
 | 
	
		
			
				|  |  | +                .eq(MusicSheetPurchaseRecord::getStudentId, userId)
 | 
	
		
			
				|  |  | +                .eq(MusicSheetPurchaseRecord::getOrderStatus, YesOrNoEnum.YES)
 | 
	
		
			
				|  |  | +                .list();
 | 
	
		
			
				|  |  | +        if (!CollectionUtils.isEmpty(list)) {
 | 
	
		
			
				|  |  | +            throw  new BizException("已经购买了当前曲目");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public void buyMusicSheetSuccess(UserOrderDetailVo userOrderDetailVo) {
 | 
	
		
			
				|  |  | +        // 保存购买记录
 | 
	
		
			
				|  |  | +        MusicSheetPurchaseRecord musicSheetPurchaseRecord = new MusicSheetPurchaseRecord();
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecord.setMusicSheetId(userOrderDetailVo.getBizId());
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecord.setOrderNo(userOrderDetailVo.getOrderNo());
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecord.setPurchasePrice(userOrderDetailVo.getExpectPrice());
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecord.setPurchaseTime(new Date());
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecord.setTeacherId(userOrderDetailVo.getMerchId());
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecord.setOrderStatus(YesOrNoEnum.YES);
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecord.setStudentId(userOrderDetailVo.getUserId());
 | 
	
		
			
				|  |  | +        musicSheetPurchaseRecordService.save(musicSheetPurchaseRecord);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 加入账户
 | 
	
		
			
				|  |  | +        UserAccountRecordDto userAccountRecordDto = new UserAccountRecordDto();
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setUserId(userOrderDetailVo.getMerchId());
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setFrozenType(FrozenTypeEnum.NONE);
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setTransAmount(musicSheetPurchaseRecord.getPurchasePrice());
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setInOrOut(InOrOutEnum.IN);
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setBizType(AccountBizTypeEnum.MUSIC);
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setBizId(musicSheetPurchaseRecord.getMusicSheetId());
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setBizName(userOrderDetailVo.getGoodName());
 | 
	
		
			
				|  |  | +        userAccountRecordDto.setOrderNo(userOrderDetailVo.getOrderNo());
 | 
	
		
			
				|  |  | +        userAccountService.accountChange(userAccountRecordDto);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private SysUser getSysUser(Long userId) {
 | 
	
		
			
				|  |  | +        return Optional.ofNullable(userId)
 | 
	
		
			
				|  |  | +                       .map(sysUserFeignService::queryUserById)
 | 
	
		
			
				|  |  | +                       .orElseThrow(() -> new BizException("用户不存在"));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |