浏览代码

feat: new CreateCourseOrder API, payOrder API

ChengYuXuan 5 年之前
父节点
当前提交
2f57558988

+ 12 - 2
src/main/java/cn/seecoder/courselearning/controller/CourseOrderController.java

@@ -17,9 +17,14 @@ public class CourseOrderController {
     /**
      * 创建课程订单
      */
+//    @PostMapping("/create")
+//    public ResultVO<CourseOrderVO> createCourseOrder(@RequestBody CourseOrderVO orderVO){
+//        return orderService.insertCourseOrder(orderVO);
+//    }
+
     @PostMapping("/create")
-    public ResultVO<CourseOrderVO> createCourseOrder(@RequestBody CourseOrderVO orderVO){
-        return orderService.insertCourseOrder(orderVO);
+    public ResultVO<CourseOrderVO> createCourseOrder(@RequestParam Integer uid, @RequestParam Integer courseId){
+        return orderService.createCourseOrder(courseId,uid);
     }
 
     /**
@@ -50,4 +55,9 @@ public class CourseOrderController {
     public ResultVO<Boolean> cancelCoupon(@RequestBody CourseOrderVO orderVO, @RequestParam Integer couponId){
         return orderService.cancelCoupon(orderVO, couponId);
     }
+
+    @PostMapping("/pay/{orderId}")
+    public ResultVO<Boolean> payOrder(@PathVariable Integer orderId){
+        return orderService.payOrder(orderId);
+    }
 }

+ 4 - 1
src/main/java/cn/seecoder/courselearning/service/order/CourseOrderService.java

@@ -2,7 +2,6 @@ package cn.seecoder.courselearning.service.order;
 
 import cn.seecoder.courselearning.vo.CourseOrderVO;
 import cn.seecoder.courselearning.vo.ResultVO;
-import org.springframework.stereotype.Service;
 
 import java.util.List;
 
@@ -20,4 +19,8 @@ public interface CourseOrderService {
     ResultVO<Boolean> cancelCoupon(CourseOrderVO orderVO, Integer couponId);
 
     ResultVO<CourseOrderVO> getCourseOrderById(Integer orderId);
+    // 完成付款
+    ResultVO<Boolean> payOrder(Integer orderId);
+    // 创建订单 NEW
+    ResultVO<CourseOrderVO> createCourseOrder(Integer courseId, Integer userId);
 }

+ 2 - 0
src/main/java/cn/seecoder/courselearning/service/user/UserService.java

@@ -13,4 +13,6 @@ public interface UserService {
     ResultVO<UserVO> userLogin(String phone, String password);
     // 根据id查找用户
     UserVO getUser(Integer uid);
+
+    ResultVO<UserVO> decreaseBalance(Integer uid, Integer num);
 }

+ 58 - 5
src/main/java/cn/seecoder/courselearning/serviceimpl/order/CourseOrderServiceImpl.java

@@ -2,13 +2,11 @@ package cn.seecoder.courselearning.serviceimpl.order;
 
 import cn.seecoder.courselearning.mapperservice.*;
 import cn.seecoder.courselearning.po.*;
+import cn.seecoder.courselearning.service.course.CourseService;
 import cn.seecoder.courselearning.service.order.CourseOrderService;
+import cn.seecoder.courselearning.service.user.UserService;
 import cn.seecoder.courselearning.util.Constant;
-import cn.seecoder.courselearning.util.JSONHelper;
-import cn.seecoder.courselearning.vo.CouponVO;
-import cn.seecoder.courselearning.vo.CourseOrderVO;
-import cn.seecoder.courselearning.vo.ResultVO;
-import com.fasterxml.jackson.databind.util.BeanUtil;
+import cn.seecoder.courselearning.vo.*;
 import org.omg.CORBA.IntHolder;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -17,6 +15,7 @@ import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -35,6 +34,11 @@ public class CourseOrderServiceImpl implements CourseOrderService {
     @Resource
     CourseMapper courseMapper;
 
+    @Resource
+    CourseService courseService;
+    @Resource
+    UserService userService;
+
     @Override
     public ResultVO<CourseOrderVO> insertCourseOrder(CourseOrderVO orderVO) {
         CourseOrder order;
@@ -199,6 +203,55 @@ public class CourseOrderServiceImpl implements CourseOrderService {
         return new ResultVO<>(Constant.REQUEST_SUCCESS,"获取订单信息成功",orderVO);
     }
 
+    @Override
+    public ResultVO<Boolean> payOrder(Integer orderId) {
+        CourseOrder order = orderMapper.selectByPrimaryKey(orderId);
+        // 当订单状态为未支付时,检查用户余额是否足够
+        UserVO userVO = userService.getUser(order.getUserId());
+
+        if(userVO.getBalance()>=order.getCost()){
+            userService.decreaseBalance(userVO.getId(),order.getCost());
+            // 支付成功,将订单存入数据库
+            ResultVO<CourseOrderVO> resultVO = updateCourseOrder(orderId,Constant.ORDER_STATUS_SUCCESS);
+            if (resultVO.getCode().equals(Constant.REQUEST_SUCCESS)){
+                return new ResultVO<>(Constant.REQUEST_SUCCESS,"付款成功");
+            }else{
+                return new ResultVO<>(Constant.REQUEST_FAIL,resultVO.getMsg());
+            }
+        }else{
+            return new ResultVO<>(Constant.REQUEST_FAIL,"付款失败,余额不足");
+        }
+
+    }
+
+    /**
+     * 创建订单,没有检查重复
+     * @param courseId
+     * @param userId
+     * @return
+     * @author cyx
+     */
+    @Override
+    public ResultVO<CourseOrderVO> createCourseOrder(Integer courseId, Integer userId) {
+        CourseOrder order = new CourseOrder();
+        order.setUserId(userId);
+        order.setCourseId(courseId);
+        CourseVO courseVO = courseService.getCourse(courseId,userId);
+        order.setCost(courseVO.getCost());
+        order.setStatus(Constant.ORDER_STATUS_UNPAID);
+        order.setCreateTime(new Date());
+        order.setCourseName(courseVO.getName());
+        order.setOrigin(courseVO.getCost());
+
+        if(orderMapper.insert(order) != 1){
+            return new ResultVO<>(Constant.REQUEST_FAIL,"创建失败",null);
+        }
+
+        CourseOrderVO courseOrderVO = new CourseOrderVO(order);
+
+        return new ResultVO<>(Constant.REQUEST_SUCCESS,"创建成功",courseOrderVO);
+    }
+
     public void updateBestCost(CourseOrderVO orderVO) {
         List<Coupon> usedCoupons = couponMapper.selectByOrderId(orderVO.getId());
         boolean[] used = new boolean[usedCoupons.size()];

+ 6 - 0
src/main/java/cn/seecoder/courselearning/serviceimpl/user/UserServiceImpl.java

@@ -59,4 +59,10 @@ public class UserServiceImpl implements UserService {
             return new UserVO(userFromDB);
         }
     }
+
+    @Override
+    public ResultVO<UserVO> decreaseBalance(Integer uid, Integer num) {
+        userMapper.decreaseBalance(uid,num);
+        return new ResultVO<>(Constant.REQUEST_SUCCESS,"成功");
+    }
 }