wesmiler 6 месяцев назад
Родитель
Сommit
ffff045534
4 измененных файлов с 79 добавлено и 5 удалено
  1. 2 1
      README.md
  2. 1 1
      app/Models/VideoModel.php
  3. 45 0
      app/Models/VideoOrderModel.php
  4. 31 3
      app/Services/PaymentService.php

+ 2 - 1
README.md

@@ -1,4 +1,5 @@
-# NN2025062001
+# NN2025081602
+刷题小程序
 git config pull.rebase false
 
 git reset --hard --HEARD

+ 1 - 1
app/Models/VideoModel.php

@@ -12,7 +12,7 @@
 namespace App\Models;
 
 /**
- * -模型
+ * 视频课-模型
  * @author laravel开发员
  * @since 2020/11/11
  * @package App\Models

+ 45 - 0
app/Models/VideoOrderModel.php

@@ -0,0 +1,45 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 视频付费订单-模型
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Models
+ */
+class VideoOrderModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'videos_orders';
+
+    /**
+     * 购买用户
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function member()
+    {
+        return $this->hasOne(MemberModel::class, 'id', 'user_id')
+            ->select(['id', 'mobile', 'nickname', 'status']);
+    }
+
+    /**
+     * 视频课
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function course()
+    {
+        return $this->hasOne(VideoCoursesModel::class, 'id', 'goods_id')
+            ->select(['id', 'mobile', 'nickname', 'status']);
+    }
+
+}

+ 31 - 3
app/Services/PaymentService.php

@@ -18,6 +18,7 @@ use App\Models\MemberModel;
 use App\Models\MessageModel;
 use App\Models\OrderModel;
 use App\Models\PaymentModel;
+use App\Models\VideoOrderModel;
 use App\Models\VipModel;
 use App\Services\Api\MessageService;
 use Illuminate\Support\Facades\DB;
@@ -464,7 +465,7 @@ class PaymentService extends BaseService
             }
 
             /* TODO 订单验证和状态处理 */
-            // 充值订单
+            // VIP购买
             if ($scene == 'vip') {
                 $orderInfo = OrderModel::with(['vip'])->where(['order_no' => $orderNo, 'mark' => 1])
                     ->select(['id as order_id', 'user_id', 'goods_id', 'expired_at', 'order_no', 'total as pay_money', 'pay_at as pay_time', 'remark', 'status'])
@@ -491,7 +492,34 @@ class PaymentService extends BaseService
                     return false;
                 }
 
-            } // 保证金退款
+            } // 视频单集购买
+            if ($scene == 'video') {
+                $orderInfo = VideoOrderModel::where(['order_no' => $orderNo, 'mark' => 1])
+                    ->select(['id as order_id', 'user_id', 'goods_id', 'expired_at', 'order_no', 'total as pay_money', 'pay_at as pay_time', 'remark', 'status'])
+                    ->first();
+                $orderStatus = isset($orderInfo['status']) ? $orderInfo['status'] : 0;
+                // 验证订单
+                if (empty($orderInfo)) {
+                    DB::rollBack();
+                    $this->error = 2629;
+                    return false;
+                }
+
+                // 订单状态
+                if ($orderStatus != 1) {
+                    DB::rollBack();
+                    $this->error = 2630;
+                    return false;
+                }
+
+                $updateData = ['pay_at' => $payAt, 'transaction_id' => $transactionId, 'status' => 2, 'update_time' => time()];
+                if (!VideoOrderModel::where(['order_no' => $orderNo, 'mark' => 1])->update($updateData)) {
+                    $this->error = 2633;
+                    DB::rollBack();
+                    return false;
+                }
+
+            } // VIP退款
             else if ($scene == 'refund') {
                 $orderInfo = OrderModel::where(['order_no' => $orderNo, 'mark' => 1])
                     ->select(['id as order_id', 'user_id', 'order_no', 'total as pay_money', 'remark', 'pay_at as pay_time', 'refund_status as status'])
@@ -586,7 +614,7 @@ class PaymentService extends BaseService
             $this->error = $exception->getMessage();
             RedisService::set("caches:payments:notify_{$scene}:catch_" . $orderNo.'_error', ['notify' => $data,'error' => $exception->getMessage(),'trace'=>$exception->getTrace()], 7200);
             return false;
-        }
+        } 
     }
 
     /**