|  | @@ -1,29 +1,143 @@
 | 
	
		
			
				|  |  |  package com.yonge.cooleshow.biz.dal.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  | +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 | 
	
		
			
				|  |  | +import com.fasterxml.jackson.databind.ObjectMapper;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.*;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.VideoLessonPurchaseRecordDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.VideoLessonPurchaseRecordService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 | 
	
		
			
				|  |  | +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;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.math.BigDecimal;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * VideoLessonPurchaseRecordService服务实现类
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  |   * @author yzp
 | 
	
		
			
				|  |  | - * @date 2022-03-26 00:01:38
 | 
	
		
			
				|  |  |   * @version v1.0
 | 
	
		
			
				|  |  | + * @date 2022-03-26 00:01:38
 | 
	
		
			
				|  |  |   **/
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  | -public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLessonPurchaseRecordDao,VideoLessonPurchaseRecord> implements VideoLessonPurchaseRecordService {
 | 
	
		
			
				|  |  | +public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLessonPurchaseRecordDao, VideoLessonPurchaseRecord> implements VideoLessonPurchaseRecordService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private final static Logger log = LoggerFactory.getLogger(VideoLessonPurchaseRecordServiceImpl.class);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | +    private SysUserFeignService sysUserFeignService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  |      private VideoLessonPurchaseRecordDao videoLessonPurchaseRecordDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private VideoLessonGroupDao videoLessonGroupDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public VideoLessonPurchaseRecordDao getDao() {
 | 
	
		
			
				|  |  |          return videoLessonPurchaseRecordDao;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @Description: 购买视频课
 | 
	
		
			
				|  |  | +     * @Author: cy
 | 
	
		
			
				|  |  | +     * @Date: 2022/4/24
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public HttpResponseResult<OrderCreateRes> buyVideoCourse(OrderReq.OrderReqInfo orderReqInfo) {
 | 
	
		
			
				|  |  | +        log.info("学生购买视频课程组,请求参数:{}", JSON.toJSONString(orderReqInfo));
 | 
	
		
			
				|  |  | +        Long studentId = orderReqInfo.getUserId();
 | 
	
		
			
				|  |  | +        String orderNo = orderReqInfo.getOrderNo();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //校验学生信息
 | 
	
		
			
				|  |  | +        getSysUser(studentId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        ObjectMapper objectMapper = new ObjectMapper();
 | 
	
		
			
				|  |  | +        VideoLessonPurchaseRecord purchaseRecord = objectMapper.convertValue(orderReqInfo.getBizContent(), VideoLessonPurchaseRecord.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //校验视频课信息
 | 
	
		
			
				|  |  | +        Long groupId = purchaseRecord.getVideoLessonGroupId();
 | 
	
		
			
				|  |  | +        VideoLessonGroup lessonGroup = videoLessonGroupDao.selectById(groupId);
 | 
	
		
			
				|  |  | +        if (lessonGroup == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("课程组不存在!");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        orderNo="999";
 | 
	
		
			
				|  |  | +        purchaseRecord.setOrderNo(orderNo);
 | 
	
		
			
				|  |  | +        purchaseRecord.setStudentId(studentId);
 | 
	
		
			
				|  |  | +        purchaseRecord.setOrderStatus(0);
 | 
	
		
			
				|  |  | +        videoLessonPurchaseRecordDao.insert(purchaseRecord);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        OrderCreateRes orderCreateRes = new OrderCreateRes();
 | 
	
		
			
				|  |  | +        orderCreateRes.setRes(true);
 | 
	
		
			
				|  |  | +        orderCreateRes.setMerchId(lessonGroup.getTeacherId());
 | 
	
		
			
				|  |  | +        orderCreateRes.setBizId(orderReqInfo.getCouponId());
 | 
	
		
			
				|  |  | +        orderCreateRes.setOriginalPrice(BigDecimal.valueOf(lessonGroup.getLessonPrice()));
 | 
	
		
			
				|  |  | +        orderCreateRes.setExpectPrice(BigDecimal.valueOf(lessonGroup.getLessonPrice()));
 | 
	
		
			
				|  |  | +        orderCreateRes.setActualPrice(purchaseRecord.getPayMoney());
 | 
	
		
			
				|  |  | +        orderCreateRes.setGoodNum(lessonGroup.getLessonCount());
 | 
	
		
			
				|  |  | +        orderCreateRes.setGoodType(GoodTypeEnum.VIDEO);
 | 
	
		
			
				|  |  | +        HttpResponseResult<OrderCreateRes> httpResponseResult = new HttpResponseResult<>();
 | 
	
		
			
				|  |  | +        httpResponseResult.setData(orderCreateRes);
 | 
	
		
			
				|  |  | +        return httpResponseResult;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @Description: 购买视频课-成功-回调
 | 
	
		
			
				|  |  | +     * @Author: cy
 | 
	
		
			
				|  |  | +     * @Date: 2022/4/24
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void buyVideoCourseSuccess(UserOrderDetailVo orderParam) {
 | 
	
		
			
				|  |  | +        log.info("学生购买视频课-成功-回调,请求参数:{}", JSON.toJSONString(orderParam));
 | 
	
		
			
				|  |  | +        String orderNo = orderParam.getOrderNo();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        VideoLessonPurchaseRecord videoGroup = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
 | 
	
		
			
				|  |  | +                .eq(VideoLessonPurchaseRecord::getOrderNo, orderNo));
 | 
	
		
			
				|  |  | +        if (videoGroup == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("课程组不存在!");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //video_lesson_purchase_record中order_status_改为1
 | 
	
		
			
				|  |  | +        videoLessonPurchaseRecordDao.updateStatus(orderNo);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @Description: 购买视频课-失败-回调
 | 
	
		
			
				|  |  | +     * @Author: cy
 | 
	
		
			
				|  |  | +     * @Date: 2022/4/24
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void buyVideoCourseFailed(UserOrderDetailVo orderParam) {
 | 
	
		
			
				|  |  | +        String orderNo = orderParam.getOrderNo();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        VideoLessonPurchaseRecord videoGroup = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
 | 
	
		
			
				|  |  | +                .eq(VideoLessonPurchaseRecord::getOrderNo, orderNo));
 | 
	
		
			
				|  |  | +        if (videoGroup == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("课程组不存在!");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //删除video_lesson_purchase_record数据
 | 
	
		
			
				|  |  | +        videoLessonPurchaseRecordDao.delete(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
 | 
	
		
			
				|  |  | +                .eq(VideoLessonPurchaseRecord::getOrderNo, orderNo));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 获取用户信息
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private SysUser getSysUser(Long userId) {
 | 
	
		
			
				|  |  | +        return Optional.ofNullable(userId)
 | 
	
		
			
				|  |  | +                .map(sysUserFeignService::queryUserById)
 | 
	
		
			
				|  |  | +                .orElseThrow(() -> new BizException("用户不存在"));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |