Browse Source

增加 直播课购买-付款

hgw 3 years ago
parent
commit
be2630c655

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

@@ -46,7 +46,7 @@ public class OrderReq {
         @ApiModelProperty(value = "商品类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ", required = true)
         private GoodTypeEnum goodType;
         @ApiModelProperty(value = "业务内容 订单业务内容json")
-        private String bizContent;
+        private Object bizContent;
 
         public Long getUserId() {
             return userId;
@@ -64,11 +64,11 @@ public class OrderReq {
             this.goodType = goodType;
         }
 
-        public String getBizContent() {
+        public Object getBizContent() {
             return bizContent;
         }
 
-        public void setBizContent(String bizContent) {
+        public void setBizContent(Object bizContent) {
             this.bizContent = bizContent;
         }
     }

+ 23 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -5,13 +5,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
 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.page.PageInfo;
 import org.redisson.api.RMap;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -67,7 +71,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
     /**
      * 平台方 老师详情直播课列表
      *
-     * @param page 分页
+     * @param page  分页
      * @param query 查询条件
      * @return page
      */
@@ -76,7 +80,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
     /**
      * 课程详情 购买学生
      *
-     * @param page 分页
+     * @param page  分页
      * @param query 查询条件
      * @return page
      */
@@ -98,5 +102,22 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     LiveCourseGroupVo detail(Long courseGroupId);
+
+    /**
+     * 学生购买直播课程组
+     *
+     * @param orderReqInfo 订单信息
+     */
+    HttpResponseResult<OrderCreateRes> buyLiveCourse(OrderReq.OrderReqInfo orderReqInfo);
+
+    /**
+     * 待订单创建完毕后继续后续操作
+     *
+     * @param afterParam 传入参数
+     *                   <p> - courseList    课程列表
+     *                   <p> - studentId    学员id
+     *                   <p> - courseGroup   直播课程组信息
+     */
+    void buyLiveCourseAfter(UserOrderDetailVo afterParam);
 }
 

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

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto.CoursePlanDto;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
@@ -22,7 +25,9 @@ import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.date.DateUtil;
@@ -488,17 +493,14 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     /**
      * 学生购买直播课程组
      *
-     * @param param 传入参数
-     *              <p> - groupId    直播课程组id
-     *              <p> - studentId    学员id
-     *              <p> - price    购买金额
+     * @param orderReqInfo 订单信息
      */
-    public void buyLiveCourse(Map<String, Object> param) {
-        Long studentId = WrapperUtil.toLong(param, "studentId", "学员id不能为空!");
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public HttpResponseResult<OrderCreateRes> buyLiveCourse(OrderReq.OrderReqInfo orderReqInfo) {
+        Map<String, Object> param = WrapperUtil.toMap(orderReqInfo.getBizContent());
         Long groupId = WrapperUtil.toLong(param, "groupId", "课程组id不能为空!");
-        String priceStr = WrapperUtil.toStr(param, "price", "购买金额不能为空!");
-        //获取传入金额
-        BigDecimal buyPrice = new BigDecimal(priceStr).setScale(2, RoundingMode.HALF_UP);
+        Long studentId = orderReqInfo.getUserId();
         //校验学生信息
         getSysUser(studentId);
         //课程组信息
@@ -509,38 +511,47 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         if (Objects.isNull(courseGroup)) {
             throw new BizException("课程组不存在!");
         }
-        //校验购买金额是否正确 - 如后期加入优惠券之类的要先判断优惠券是否正确,并减去优惠券金额再比较
-        if (buyPrice.compareTo(courseGroup.getCoursePrice()) != 0) {
-            throw new BizException("购买金额不正确!");
-        }
         //课程信息
         List<CourseSchedule> courseList = courseScheduleService.list(Wrappers.<CourseSchedule>lambdaQuery()
-                .eq(CourseSchedule::getCourseGroupId, groupId)
-        );
+                .eq(CourseSchedule::getCourseGroupId, groupId));
         if (CollectionUtils.isEmpty(courseList)) {
             throw new BizException("课程组课程不存在!");
         }
         //校验购买的课程组每节课时间是否和自己的课时冲突
         batchCheckStudentCourseTime(studentId, courseList, CourseSchedule::getStartTime, CourseSchedule::getEndTime);
         //返回的数据 有用后面aftet的方法使用
-        Map<String, Object> result = new HashMap<>();
-        result.put("courseGroup", courseGroup);
-        result.put("courseList", courseList);
-        result.put("studentId", studentId);
-
+        Map<String, Object> bizContent = new HashMap<>();
+        bizContent.put("courseGroup", courseGroup);
+        bizContent.put("courseList", courseList);
+        bizContent.put("studentId", studentId);
+        OrderCreateRes orderCreateRes = new OrderCreateRes();
+        orderCreateRes.setRes(true);
+        orderCreateRes.setMerchId(courseGroup.getTeacherId());
+        orderCreateRes.setBizId(courseGroup.getId());
+        orderCreateRes.setOriginalPrice(courseGroup.getCoursePrice());
+        orderCreateRes.setExpectPrice(courseGroup.getCoursePrice());
+        orderCreateRes.setBizParam(bizContent);
+        orderCreateRes.setGoodNum(courseGroup.getCourseNum());
+        orderCreateRes.setGoodType(GoodTypeEnum.LIVE);
+
+        HttpResponseResult<OrderCreateRes> httpResponseResult = new HttpResponseResult<>();
+        httpResponseResult.setData(orderCreateRes);
+        return httpResponseResult;
     }
 
     /**
      * 待订单创建完毕后继续后续操作
      *
-     * @param param 传入参数
-     *              <p> - courseList    课程列表
-     *              <p> - studentId    学员id
-     *              <p> - courseGroup   直播课程组信息
-     *              <p> - orderNo   订单号
+     * @param afterParam 传入参数
+     *                   <p> - courseList    课程列表
+     *                   <p> - studentId    学员id
+     *                   <p> - courseGroup   直播课程组信息
      */
-    public void buyLiveCourseAfter(Map<String, Object> param) {
-        String orderNo = WrapperUtil.toStr(param, "orderNo", "订单号不能为空!");
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void buyLiveCourseAfter(UserOrderDetailVo afterParam) {
+        Map<String, Object> param = WrapperUtil.toMap(afterParam.getBizParam());
+        String orderNo = afterParam.getOrderNo();
         Long studentId = (Long) param.get("studentId");
         List<CourseSchedule> courseList = (List<CourseSchedule>) param.get("courseList");
         CourseGroup courseGroup = (CourseGroup) param.get("courseGroup");

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

@@ -33,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -54,13 +55,14 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private PaymentSdk paymentSdk;
     @Autowired
     private IdGeneratorService idGeneratorService;
+    @Autowired
+    private CourseGroupService courseGroupService;
 
     //验证订单是否可以下单
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
     private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> orderAfter = new HashMap<>();
 
-
     //订单完成后执行
     private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> orderSuccess = new HashMap<>();
     //订单取消后执行
@@ -71,9 +73,12 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         /**********订单生成前******************/
         //vip开通缴费
         orderCreate.put(GoodTypeEnum.VIP, vipCardService::orderCreate);
+        //直播课程购买
+        orderCreate.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourse);
 
         /**********订单生成后******************/
-        //orderAfter.put(OrderTypeEnum.VIP, vipCardService::orderAfter);
+        //直播课程购买after
+        orderAfter.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourseAfter);
 
         /**********订单完成后******************/
         //vip开通缴费
@@ -137,7 +142,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         //验证成功后,订单入库
         UserOrderVo orderVo = insertOrder(orderReq, resList);
         List<UserOrderDetailVo> orderDetailList = orderVo.getOrderDetailList();
-        for(UserOrderDetailVo orderDetailVo : orderDetailList){
+        for (UserOrderDetailVo orderDetailVo : orderDetailList) {
             orderDetailVo.setUserId(orderReq.getUserId());
             orderDetailVo.setOrderId(orderVo.getId());
 
@@ -267,7 +272,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         PaymentReq paymentReq = new PaymentReq();
         paymentReq.setOrder_no(payReq.getOrderNo());
         paymentReq.setPay_channel(payReq.getPayChannel().getCode());
-        paymentReq.setPay_amt(detail.getActualPrice().setScale(2).toString());
+        paymentReq.setPay_amt(detail.getActualPrice().setScale(2, RoundingMode.HALF_UP).toString());
         paymentReq.setGoods_title(detail.getOrderName());
         paymentReq.setGoods_desc(detail.getOrderDesc());
 
@@ -363,8 +368,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private UserOrderVo insertOrder(OrderReq orderReq, List<OrderCreateRes> resList) {
         UserOrder userOrder = new UserOrder();
         //订单号生成
-        Long orderNo = idGeneratorService.generatorId("userOrder");
-        userOrder.setOrderNo(orderNo.toString());
+        long orderNo = idGeneratorService.generatorId("userOrder");
+        userOrder.setOrderNo(Long.toString(orderNo));
         userOrder.setUserId(orderReq.getUserId());
         userOrder.setOrderName(orderReq.getOrderName());
         userOrder.setOrderType(orderReq.getOrderType());
@@ -395,7 +400,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             BigDecimal serviceFeeRate = getServiceFeeRate(res.getGoodType());
             orderDetail.setPlantformFee(userOrder.getExpectPrice().multiply(serviceFeeRate));
             orderDetail.setPlantformFeeRate(serviceFeeRate);
-
+            orderDetail.setBizParam(res.getBizParam());
             orderDetail.setCreateTime(new Date());
             orderDetailService.save(orderDetail);
             orderDetailList.add(orderDetail);
@@ -480,7 +485,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             orderPaymentService.updateById(orderPayment);
         }
         List<UserOrderDetailVo> orderDetailList = orderDetailService.getOrderDetilListByOrderNo(userOrder.getOrderNo());
-        for(UserOrderDetailVo orderDetailVo : orderDetailList){
+        for (UserOrderDetailVo orderDetailVo : orderDetailList) {
             orderDetailVo.setUserId(userOrder.getUserId());
             orderDetailVo.setOrderId(userOrder.getId());
             //调用业务
@@ -523,7 +528,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderPaymentService.updateById(orderPayment);
 
         List<UserOrderDetailVo> orderDetailList = orderDetailService.getOrderDetilListByOrderNo(detail.getOrderNo());
-        for(UserOrderDetailVo orderDetailVo : orderDetailList){
+        for (UserOrderDetailVo orderDetailVo : orderDetailList) {
             orderDetailVo.setUserId(detail.getUserId());
             orderDetailVo.setOrderId(detail.getId());
             //调用业务

+ 28 - 17
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java

@@ -10,27 +10,38 @@ import io.swagger.annotations.ApiModelProperty;
  */
 @ApiModel(value = "UserOrderDetailVo对象", description = "平台订单表查询视图对象")
 public class UserOrderDetailVo extends UserOrderDetail {
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-	@ApiModelProperty("买家id ")
-	private Long userId;
+    @ApiModelProperty("买家id ")
+    private Long userId;
 
-	@ApiModelProperty("订单id ")
-	private Long orderId;
+    @ApiModelProperty("订单id ")
+    private Long orderId;
 
-	public Long getUserId() {
-		return userId;
-	}
+    @ApiModelProperty(value = "冗余字段,用于传递参数用")
+    private Object bizParam;
 
-	public void setUserId(Long userId) {
-		this.userId = userId;
-	}
+    public Long getUserId() {
+        return userId;
+    }
 
-	public Long getOrderId() {
-		return orderId;
-	}
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
 
-	public void setOrderId(Long orderId) {
-		this.orderId = orderId;
-	}
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public Object getBizParam() {
+        return bizParam;
+    }
+
+    public void setBizParam(Object bizParam) {
+        this.bizParam = bizParam;
+    }
 }

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

@@ -1,8 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo.res;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 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;
 
@@ -30,6 +28,8 @@ public class OrderCreateRes {
     private BigDecimal originalPrice;
     @ApiModelProperty(value = "预计价格 ")
     private BigDecimal expectPrice;
+    @ApiModelProperty(value = "冗余字段,用于传递参数用")
+    private Object bizParam;
 
     public Boolean getRes() {
         return res;
@@ -94,4 +94,12 @@ public class OrderCreateRes {
     public void setGoodType(GoodTypeEnum goodType) {
         this.goodType = goodType;
     }
+
+    public Object getBizParam() {
+        return bizParam;
+    }
+
+    public void setBizParam(Object bizParam) {
+        this.bizParam = bizParam;
+    }
 }