fly %!s(int64=5) %!d(string=hai) anos
pai
achega
879a3e0322

+ 33 - 0
app/Client/Pay/BookOrderPaySuccess.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Client\Pay;
+
+use App\Modules\Book\Services\BookConfigService;
+use App\Modules\Subscribe\Models\BookOrder;
+use App\Modules\Subscribe\Models\Order;
+
+
+class BookOrderPaySuccess extends PaySuccessAbstract
+{
+    private $book_order;
+
+    public function __construct(Order $order)
+    {
+        parent::__construct($order);
+        $book_conf = BookConfigService::getBookByProduct($order->product_id);
+        $this->book_order = [];
+        $this->book_order['bid'] = isset($book_conf->bid) ? $book_conf->bid : '';
+        $this->book_order['book_name'] = isset($book_conf->book_name) ? $book_conf->book_name : '';
+        $this->book_order['uid'] = $order->uid;
+        $this->book_order['distribution_channel_id'] = $order->distribution_channel_id;
+        $this->book_order['fee'] = $order->price;
+        $this->book_order['send_order_id'] = $order->send_order_id;
+        $this->book_order['charge_balance'] = 0;
+        $this->book_order['reward_balance'] = 0;
+    }
+
+    protected function handlePayProcess()
+    {
+       return BookOrder::firstOrCreate($this->book_order);
+    }
+}

+ 37 - 0
app/Client/Pay/ForeverOrderPaySuccess.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Client\Pay;
+
+use App\Modules\Subscribe\Models\Order;
+use App\Modules\Subscribe\Models\YearOrder;
+
+
+class ForeverOrderPaySuccess extends PaySuccessAbstract
+{
+    private $forever_order;
+
+    public function __construct(Order $order)
+    {
+        parent::__construct($order);
+        $this->forever_order = [];
+        $this->forever_order['uid'] = $order->uid;
+        $this->forever_order['distribution_channel_id'] = $order->distribution_channel_id;
+        $this->forever_order['fee'] = $order->price;
+        $this->forever_order['send_order_id'] = $order->send_order_id;
+    }
+
+    protected function handlePayProcess()
+    {
+        $this->forever_order['begin_time'] = date('Y-m-d H:i:s');
+        $this->forever_order['end_time'] = date('Y-m-d H:i:s', time() + 86400 * 365 * 80);
+        $old = YearOrder::where('uid', $this->forever_order['uid'])->select('id', 'uid', 'u', 'begin_time', 'end_time', 'fee')->first();
+        if ($old) {
+            $old->end_time = date('Y-m-d H:i:s', time() + 86400 * 365 * 80);
+            $old->fee = $old->fee + $this->forever_order['fee'];
+            $old->save();
+            return $old;
+        } else {
+            return YearOrder::firstOrCreate($this->forever_order);
+        }
+    }
+}

+ 65 - 0
app/Client/Pay/PaySuccessAbstract.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace App\Client\Pay;
+
+use App\Modules\Subscribe\Models\Order;
+use DB;
+use Exception;
+use Log;
+
+/**
+ * 
+ * @property \App\Modules\Subscribe\Models\Order $order
+ */
+abstract class PaySuccessAbstract
+{
+   private $order;
+
+   /**
+    * 处理支付成功的逻辑
+    */
+   abstract protected function handlePayProcess();
+
+   public function __construct(Order $order)
+   {
+      $this->order = $order;
+   }
+
+   /**
+    * 支付成功入口
+    */
+   public function success()
+   {
+      try {
+         DB::beginTransaction();
+         $this->setOrderSuccess();
+         $this->handlePayProcess();
+         DB::commit();
+      } catch (Exception $e) {
+         DB::rollback();
+         Log::error('pay.success: ' . $e->getMessage());
+      }
+   }
+
+   /**
+    * 设置order成功
+    */
+   protected function setOrderSuccess()
+   {
+      $this->order->pay_type = $this->getChargeTimes($this->order->uid);
+      $this->order->status = 'PAID';
+      $this->order->pay_end_at = date('Y-m-d H:i:s');
+      $this->order->save();
+   }
+
+   /**
+    * 获取用户第几次充值
+    * @param $uid
+    * @return int
+    */
+   private function getChargeTimes($uid)
+   {
+      $count = Order::getUserChargeTimes($uid);
+      return $count + 1;
+   }
+}

+ 30 - 0
app/Client/Pay/RechargeOrderPaySuccess.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Client\Pay;
+
+use App\Modules\Product\Services\ProductService;
+use App\Modules\Subscribe\Models\Order;
+use App\Modules\User\Services\UserService;
+
+/**
+ * 
+ * @property \App\Modules\Product\Models\Product $product
+ */
+class RechargeOrderPaySuccess extends PaySuccessAbstract
+{
+
+    private $product;
+
+    public function __construct(Order $order)
+    {
+        parent::__construct($order);
+        $this->product = ProductService::getProductSingle($order->product_id);
+    }
+
+    protected function handlePayProcess()
+    {
+        $total = $this->product->price * 100 + $this->product->given;
+        $uid = $this->order->uid;
+        UserService::addBalance($uid, $total, $this->product->price * 100, $this->product->given);
+    }
+}

+ 46 - 0
app/Client/Pay/YearOrderPaySuccess.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Client\Pay;
+
+use App\Modules\Subscribe\Models\Order;
+use App\Modules\Subscribe\Models\YearOrder;
+
+
+class YearOrderPaySuccess extends PaySuccessAbstract
+{
+    private $year_order;
+
+    public function __construct(Order $order)
+    {
+        parent::__construct($order);
+        $this->year_order = [];
+        $this->year_order['uid'] = $order->uid;
+        $this->year_order['distribution_channel_id'] = $order->distribution_channel_id;
+        $this->year_order['fee'] = $order->price;
+        $this->year_order['send_order_id'] = $order->send_order_id;
+    }
+
+    protected function handlePayProcess()
+    {
+        $this->year_order['begin_time'] = date('Y-m-d H:i:s');
+        $this->year_order['end_time'] = date('Y-m-d H:i:s', strtotime('+365 day'));
+        $old = YearOrder::where('uid', $this->year_order['uid'])->select('id', 'uid', 'u', 'begin_time', 'end_time', 'fee')->first();
+        if ($old) {
+            //如果包过年
+            if (strtotime($old->end_time) > time()) {
+                //旧的包年没过期
+                $old->end_time = date('Y-m-d H:i:s', strtotime($old->end_time) + 86400 * 365);
+                $old->fee = $old->fee + $this->year_order['fee'];
+                $old->save();
+            } else {
+                //旧的包年过期了
+                $old->end_time = date('Y-m-d H:i:s', strtotime('+365 day'));
+                $old->fee = $old->fee + $this->year_order['fee'];
+                $old->save();
+            }
+            return $old;
+        } else {
+            return YearOrder::firstOrCreate($this->year_order);
+        }
+    }
+}

+ 1 - 1
app/Client/AnnuallyMonthlyUser.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Client;
+namespace App\Client\User;
 
 use App\Consts\SysConsts;
 use App\Modules\Subscribe\Models\Order;

+ 1 - 1
app/Client/SiteUser.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Client;
+namespace App\Client\User;
 
 use App\Modules\Channel\Models\Channel;
 use App\Modules\Subscribe\Models\BookOrder;

+ 21 - 71
app/Http/Controllers/Wap/Pay/OrdersController.php

@@ -2,6 +2,10 @@
 
 namespace App\Http\Controllers\Wap\Pay;
 
+use App\Client\Pay\BookOrderPaySuccess;
+use App\Client\Pay\ForeverOrderPaySuccess;
+use App\Client\Pay\RechargeOrderPaySuccess;
+use App\Client\Pay\YearOrderPaySuccess;
 use App\Modules\Book\Services\BookGiftsService;
 use App\Modules\Book\Services\ChapterService;
 use App\Modules\OfficialAccount\Services\OfficialAccountService;
@@ -36,6 +40,7 @@ use App\Libs\AliSMS;
 use App\Libs\Pay\Merchants\UnionPay;
 use App\Modules\Activity\Services\ActivityService;
 use App\Modules\SendOrder\Services\SendOrderService;
+use App\Modules\Subscribe\Models\Order;
 use GuzzleHttp\Client;
 
 class OrdersController extends Controller
@@ -1127,88 +1132,34 @@ class OrdersController extends Controller
         }
         DB::beginTransaction();
         try {
+
             $uid = $order->uid;
             $distribution_channel_id = $order->distribution_channel_id;
             $product_id = $order->product_id;
             $product = ProductService::getProductSingle($product_id);
-            $send_order_id = $order->send_order_id;
-            $create_ip = $order->create_ip;
+            switch ($product->type) {
+                case 'YEAR_ORDER':
+                    $instance = new YearOrderPaySuccess($order);
+                    break;
+                case 'BOOK_ORDER':
+                    $instance = new BookOrderPaySuccess($order);
+                    break;
+                case 'TICKET_RECHARGE':
+                    $instance = new RechargeOrderPaySuccess($order);
+                    break;
+                case 'FOREVER':
+                    $instance = new ForeverOrderPaySuccess($order);
+                    break;
+            }
+            $instance->success();
             $price = $product->price;
-            $bid = $order->from_bid;
-            //$this->updateOrderTotal($trade_no,$transaction_id);
             $prize_fee = (int) (($product->price * 100) * 0.1);
             $this->substituteOrderPrice($order->id, $prize_fee);
             $this->smartPushTestBookPaidUv($order->from_bid, $order->uid, $order->price);
-            //获取用户充值次数
-            $order->pay_type = $this->getChargeTimes($order->uid);
-            // 更新其他定制Order表
-            if ($product->type == 'YEAR_ORDER') {
-                Log::info('YEAR_ORDERYEAR_ORDERYEAR_ORDERYEAR_ORDERYEAR_ORDERYEAR_ORDERYEAR_ORDERYEAR_ORDER');
-                $order_type = 'YEAR';
-                $this->yearOrder($uid, $distribution_channel_id, $price, $send_order_id);
-                $order->order_type = $order_type;
-                $order->status = 'PAID';
-                $order->pay_end_at = date('Y-m-d H:i:s');
-                $order->save();
-                //$price = $price/100;
-                /*
-                    $this->createOrder(
-                        compact(
-                            'uid','distribution_channel_id','product_id','price','trade_no','send_order_id','order_type','pay_merchant_source',
-                            'pay_merchant_id','create_ip','bid','transaction_id'
-                        )
-                    );*/
-            } elseif ($product->type == 'BOOK_ORDER') {
-                Log::info('BOOK_ORDERBOOK_ORDERBOOK_ORDERBOOK_ORDERBOOK_ORDERBOOK_ORDERBOOK_ORDERBOOK_ORDER');
-                $order_type = 'BOOK';
-                $this->bookOrder($product_id, $uid, $send_order_id, $price, $distribution_channel_id);
-                $order->order_type = $order_type;
-                $order->status = 'PAID';
-                $order->pay_end_at = date('Y-m-d H:i:s');
-                $order->save();
-                //$price = $price/100;
-                /*
-                    $this->createOrder(
-                        compact(
-                            'uid','distribution_channel_id','product_id','price','trade_no','send_order_id','order_type','pay_merchant_source',
-                            'pay_merchant_id','create_ip','bid','transaction_id'
-                        )
-                    );*/
-            } elseif ($product->type == 'TICKET_RECHARGE') {
-                Log::info('TICKET_RECHARGETICKET_RECHARGETICKET_RECHARGETICKET_RECHARGETICKET_RECHARGE');
-                $order_type = 'RECHARGE';
-                $this->userCharge($product, $uid);
-                $order->order_type = $order_type;
-                $order->status = 'PAID';
-                $order->pay_end_at = date('Y-m-d H:i:s');
-                $order->save();
-                //$price = $price/100;
-                /*
-                    $this->createOrder(
-                        compact(
-                            'uid','distribution_channel_id','product_id','price','trade_no','send_order_id','order_type','pay_merchant_source',
-                            'pay_merchant_id','create_ip','bid','transaction_id'
-                        ));*/
-            } elseif ($product->type == 'FOREVER') {
-                Log::info('FOREVER------------------------FOREVER');
-                $order_type = 'FOREVER';
-                $this->foreverFreeOrder($uid, $distribution_channel_id, $price, $send_order_id);
-                $order->order_type = $order_type;
-                $order->status = 'PAID';
-                $order->pay_end_at = date('Y-m-d H:i:s');
-
-                $order->save();
-            } else {
-                DB::rollback();
-                return false;
-            }
-
             $this->successPayPushMsg($uid, $product, $order->id);
             $this->orderStatistical($order);
             $key = 'leyuee:to_send_not_pay_uid:distribution_channel_id:' . $distribution_channel_id;
             Redis::hdel($key, $uid);
-            DB::commit();
-            //$this->huaweiActivity($order->activity_id,$uid,$product_id);
             // 注册动作-》回调订单
             $action_type = 'CallBackOrder';
             $param = [
@@ -1222,7 +1173,6 @@ class OrdersController extends Controller
             $this->exchangeUpdateAndCreated($order->id);
             return true;
         } catch (\Exception $e) {
-            DB::rollback();
             return false;
         }
     }

+ 1 - 2
app/Http/Controllers/Wap/User/CrmBooklistController.php

@@ -2,8 +2,7 @@
 
 namespace App\Http\Controllers\Wap\User;
 
-use App\Client\AnnuallyMonthlyUser;
-use App\Client\SiteUser;
+use App\Client\User\AnnuallyMonthlyUser;
 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 use App\Modules\Book\Services\CrmBookAutoRecommendService;

+ 1 - 1
app/Http/Middleware/CrmUser.php

@@ -2,7 +2,7 @@
 
 namespace App\Http\Middleware;
 
-use App\Client\SiteUser;
+use App\Client\User\SiteUser;
 use Closure;
 use EasyWeChat\Foundation\Application;
 use Cookie;