Explorar el Código

1、课程支付

yys hace 6 días
padre
commit
8a5b873082

+ 20 - 8
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseOrderServiceImpl.java

@@ -246,12 +246,10 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
     @Override
     @Transactional
     public R createOrder(FsUserCourseOrderCreateParam param) {
-        FsUserCourseOrder order  = fsUserCourseOrderMapper.selectFsUserCourseOrderByCourse(param.getUserId(),param.getCourseId());
-        if (order!=null&&order.getStatus()==1){
-            return R.ok("订单已存在").put("order",order);
-        }
-        if (order!=null&&order.getStatus()==2){
-            return R.error("该课程已购买");
+        // 按小节校验是否已购买,避免买过某一小节后无法再买其他小节
+        FsUserCourseOrder order = fsUserCourseOrderMapper.selectFsUserCourseOrderByCourseVideo(param.getUserId(), param.getVideoId());
+        if (order != null) {
+            return R.error("该小节已购买");
         }
         FsUser user=fsUserMapper.selectFsUserByUserId(param.getUserId());
         FsUserCourse course = fsUserCourseMapper.selectFsUserCourseByCourseId(param.getCourseId());
@@ -270,6 +268,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
         order.setPayMoney(course.getSellPrice());
         order.setPayType(param.getPayType());
         order.setStatus(1);
+        order.setCourseVideoId(param.getVideoId());
 
         String orderCode =  OrderCodeUtils.getOrderSn();
         if(StringUtils.isEmpty(orderCode)){
@@ -931,7 +930,14 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                 study.setCreateTime(new Date());
                 fsUserCourseStudyMapper.insertFsUserCourseStudy(study);
             }
-            List<FsUserCourseVideo> videoList = fsUserCourseVideoMapper.selectFsUserCourseListByCourseId(order.getCourseId());
+            // 按小节购买仅解锁当前小节
+            List<FsUserCourseVideo> videoList;
+            if (order.getCourseVideoId() != null) {
+                FsUserCourseVideo video = fsUserCourseVideoMapper.selectFsUserCourseVideoByVideoId(order.getCourseVideoId());
+                videoList = video == null ? Collections.emptyList() : Collections.singletonList(video);
+            } else {
+                videoList = fsUserCourseVideoMapper.selectFsUserCourseListByCourseId(order.getCourseId());
+            }
             for (FsUserCourseVideo video:videoList){
                 FsUserCourseStudyLog log = fsUserCourseStudyLogMapper.selectFsUserCourseStudyLogByVideo(order.getUserId(),video.getVideoId());
                 if (log==null){
@@ -989,7 +995,13 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
             study.setCreateTime(new Date());
             fsUserCourseStudyMapper.insertFsUserCourseStudy(study);
         }
-        List<FsUserCourseVideo> videoList = fsUserCourseVideoMapper.selectFsUserCourseListByCourseId(order.getCourseId());
+        List<FsUserCourseVideo> videoList;
+        if (order.getCourseVideoId() != null) {
+            FsUserCourseVideo video = fsUserCourseVideoMapper.selectFsUserCourseVideoByVideoId(order.getCourseVideoId());
+            videoList = video == null ? Collections.emptyList() : Collections.singletonList(video);
+        } else {
+            videoList = fsUserCourseVideoMapper.selectFsUserCourseListByCourseId(order.getCourseId());
+        }
         for (FsUserCourseVideo video:videoList){
             FsUserCourseStudyLog log = fsUserCourseStudyLogMapper.selectFsUserCourseStudyLogByVideo(order.getUserId(),video.getVideoId());
             if (log==null){