Преглед на файлове

Merge branch 'gzkuaiyingyong' into kuaiyingyong

tgz преди 3 години
родител
ревизия
0671b03518

+ 25 - 1
app/Http/Controllers/QuickApp/Order/OrdersController.php

@@ -29,6 +29,9 @@ use App\Modules\Trade\Pay\OrderPaySuccess;
 use App\Modules\Trade\Services\PayMerchantService;
 use App\Modules\User\Services\ReadRecordService;
 use EasyWeChat\Support\XML;
+use App\Modules\User\Services\UserChargeService;
+use App\Modules\User\Services\UserService;
+
 
 class OrdersController extends BaseController
 {
@@ -127,7 +130,16 @@ class OrdersController extends BaseController
 
         // 获取派单id
         $sendOrderId = 0;
-        $sendOrderId = ReadRecordService::getSendOrderId($this->uid);
+        //$sendOrderId = ReadRecordService::getSendOrderId($this->uid);
+        $sendOrderId = UserService::GetBindSendOrderId($this->uid);
+        if(env('NEW_CHARGE')){
+            //2022-4月中旬,启用新的获取模板方式
+            $res = UserChargeService::getTemplate($this->uid,$sendOrderId,$this->distribution_channel_id);
+            if ($res) {
+                return response()->success($res);
+            }
+        }
+
         if ($sendOrderId) {
             // 获取快应用账号
             $qappSendOrder = QappSendOrder::getSendOrderById($sendOrderId);
@@ -750,4 +762,16 @@ class OrdersController extends BaseController
         $param = $request->except('_url');
         return view('pay.middleware')->with($param);
     }
+    /**
+     * 根据用户获取付费列表
+     * @param  Request $request [description]
+     * @return [type]           [description]
+     */
+    public function newChargeList(Request $request){
+        $this->distribution_channel_id;
+        $uid = $this->uid;
+        $send_order_id = $this->user_info->send_order_id;
+        $res = UserChargeService::getTemplate($this->uid,$send_order_id,$this->distribution_channel_id);
+        return response()->success($res);
+    }
 }

+ 1 - 1
app/Modules/Product/Models/Product.php

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model;
 class Product extends Model
 {
     protected $table = 'products';
-    protected $fillable = ['price', 'type', 'given', 'is_default', 'is_enabled', 'sequence', 'switch_to'];
+    protected $fillable = ['price', 'type', 'given', 'is_default', 'is_enabled', 'sequence', 'switch_to','qapp_charge_template_id'];
 
     public static function getChargeProduct($template_type)
     {

+ 18 - 0
app/Modules/Product/Models/QappChargeTemplate.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Modules\Product\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class QappChargeTemplate extends Model
+{
+    protected $table = 'qapp_charge_template';
+    protected $fillable = [
+        'qapp_channel_account_id',
+        'is_default',
+        'product_ids',
+        'type',
+        'is_official',
+        'template_name',
+    ];
+}

+ 2 - 0
app/Modules/SendOrder/Models/QappSendOrder.php

@@ -14,6 +14,8 @@ class QappSendOrder extends Model
         'distribution_channel_id',
         'report_type',
         'report_rate',
+        'first_charge_template_id',
+        'second_charge_template_id',
     ];
 
     /**

+ 166 - 0
app/Modules/User/Services/UserChargeService.php

@@ -0,0 +1,166 @@
+<?php
+/**
+ * 获取用户的充值模板
+ */
+
+namespace App\Modules\User\Services;
+
+use App\Consts\ErrorConst;
+use App\Libs\Utils;
+use App\Modules\SendOrder\Models\QappSendOrder;
+use App\Modules\User\Models\User;
+use App\Modules\Trade\Models\Order as TradeOrder;
+use App\Modules\User\Models\QappChannelAccount;
+use App\Modules\Product\Models\QappChargeTemplate;
+use App\Modules\Product\Models\Product;
+use App\Modules\Subscribe\Services\OrderService;
+
+class UserChargeService
+{
+    /**
+     * 派单id是使用阅读记录里的;
+     * @param  [type] $uid           [description]
+     * @param  [type] $send_order_id [description]
+     * @return [type]                [description]
+     */
+    public static function getTemplate($uid,$send_order_id,$distribution_channel_id){
+        //获取模板id
+        $template_id = self::selectTemplate($uid,$send_order_id);
+
+        if($template_id == 0){
+            //official
+            $ids = env('OFFICIAL_TEMPLATE_IDS');
+            $idarr = explode(',',$ids);
+            $products = Product::whereIn('id',$idarr)->orderBy('sequence','asc')->get();
+        }else{
+            $template_info = QappChargeTemplate::where('id',$template_id)->first();
+            if (getProp($template_info,'is_official') == 1) {
+                //属于官方模板 直接根据id 从 product表里查找
+                $idarr = explode(',',getProp($template_info,'product_ids'));
+                $products = Product::whereIn('id',$idarr)->orderBy('sequence','asc')->get();
+            }else{
+                $products = Product::where('qapp_charge_template_id',$template_id)->orderBy('sequence','asc')->get();
+            }
+        }
+        $is_first_recharge = OrderService::judgeUserFirstRecharge($uid);
+        $data = [];
+        foreach ($products as $key => $v) {
+            $text = '';
+            if ($v->type == 'NEW_USER' && $is_first_recharge) {
+                if (
+                    env('NO_NEW_USER_CHARGE') &&
+                    in_array(
+                        $distribution_channel_id,
+                        explode(',', env('NO_NEW_USER_CHARGE'))
+                    )
+                ) {
+                    continue;
+                }
+                $temp   = [
+                    'price'          => (float)$v->price . '元',
+                    'is_year_order'  => 0,
+                    'is_month_order' => 0,
+                    'text'           => sprintf('%s+%s书币', $v->price * 100, $v->given),
+                    'today_special'  => $v->is_default,
+                    'first_charge'   => true,
+                    'save_text'      => round($v->given / 100, 1) . '元',
+                    'product_id'     => $v->id,
+                ];
+                $data[] = $temp;
+            } elseif ($v->type == 'YEAR_ORDER') {
+                $save_text = '年费vip会员';
+                $text      = '全年免费看';
+                $temp      = [
+                    'price'          => (int)$v->price . '元',
+                    'is_year_order'  => 1,
+                    'is_month_order' => 0,
+                    'text'           => $text,
+                    'today_special'  => $v->is_default,
+                    'first_charge'   => false,
+                    'save_text'      => $save_text,
+                    'product_id'     => $v->id,
+                ];
+                $data[]    = $temp;
+            } else {
+                if ($v->type == 'NEW_USER') {
+                    continue;
+                }
+                $save_text = '';
+                if ($v->given) {
+                    $save_text = round($v->given / 100, 1) . '元';
+                    $text      = sprintf('%s+%s书币', $v->price * 100, $v->given);
+                } else {
+                    $text = sprintf('%s书币', $v->price * 100);
+                }
+
+                $temp   = [
+                    'price'          => (float)$v->price . '元',
+                    'is_year_order'  => 0,
+                    'is_month_order' => 0,
+                    'text'           => $text,
+                    'today_special'  => $v->is_default,
+                    'first_charge'   => false,
+                    'save_text'      => $save_text,
+                    'product_id'     => $v->id,
+                ];
+                $data[] = $temp;
+            }
+        }
+        return $data;
+
+    }
+    /**
+     * 判断选择用哪个模板id
+     * @param  [type] $uid           [description]
+     * @param  [type] $send_order_id [description]
+     * @return [type]                [description]
+     */
+    public static function selectTemplate($uid,$send_order_id){
+        $default_template_id = 0;
+        if (!$send_order_id) {
+            return $default_template_id;
+        }
+        $user_order_num = TradeOrder::where('uid', $uid)->where('status', 'PAID')->orderBy('id')->count();
+        $qappSendOrder = QappSendOrder::getSendOrderById($send_order_id);
+        $first_charge_template_id       = getProp($qappSendOrder, 'first_charge_template_id');
+        $second_charge_template_id       = getProp($qappSendOrder, 'second_charge_template_id');
+        //找该派单的建立者设置的默认模板
+        $account = getProp($qappSendOrder, 'account');
+        $account_info = QappChannelAccount::getByAccount($account);
+        if ($user_order_num == 0) {
+            //若该派单设置了模板
+            if($first_charge_template_id) return $first_charge_template_id;
+
+            //找该派单的建立者设置的默认模板
+            $account_info = QappChannelAccount::getByAccount($account);
+            $template_id = QappChargeTemplate::where('qapp_channel_account_id',getProp($account_info, 'id'))
+                            ->where('type','first_charge')
+                            ->where('is_default',1)
+                            ->value('id');
+            //如果设置了非首冲,则返回非首冲
+            if($second_charge_template_id) return $second_charge_template_id;
+
+            if(!$template_id){
+                //无默认首冲模板,找非首冲默认模板
+                $template_id = QappChargeTemplate::where('qapp_channel_account_id',getProp($account_info, 'id'))
+                            ->where('type','second_charge')
+                            ->where('is_default',1)
+                            ->value('id');
+            }
+            return $template_id > 0 ? $template_id : $default_template_id;
+        }
+        if ($user_order_num > 0) {
+            //不是首单
+            if($second_charge_template_id) return $second_charge_template_id;
+            //无派单非首冲模板,找非首冲默认模板
+            $template_id = QappChargeTemplate::where('qapp_channel_account_id',getProp($account_info, 'id'))
+                        ->where('type','second_charge')
+                        ->where('is_default',1)
+                        ->value('id');
+            
+            return $template_id > 0 ? $template_id : $default_template_id;
+        }
+    }
+
+    
+}

+ 29 - 0
app/Modules/User/Services/UserService.php

@@ -626,4 +626,33 @@ WHERE u.openid in (SELECT openid from users WHERE  id = %s)";
     {
         return User::where('openid', $openid)->get();
     }
+
+    /**
+     * 实时绑定用户和最新派单的关系,目前在获取章节详情调用;只能在章节详情时调用
+     * @param  [type] $uid           [用户id]
+     * @param  [type] $send_order_id [派单id]
+     * @return [type]                [description]
+     */
+    public static function bindSendOrderId($uid, $send_order_id)
+    {
+        if ($send_order_id) {
+            $res = Redis::hset('book_read_chapter:' . $uid,'send_order_id', $send_order_id);
+        }
+    }
+
+    /**
+     * 实时绑定用户和最新派单的关系后,其它逻辑获取用户绑定的最新派单id
+     * @param  [type] $uid           [用户id]
+     * @param  [type] $send_order_id [派单id]
+     * @return [int]                 [返回用户的派单id值]
+     */
+    public static function GetBindSendOrderId($uid)
+    {
+        try {
+            $send_order_id = Redis::hget('book_read_chapter:' . $uid, 'send_order_id');
+            if ($send_order_id)
+                return (int)$send_order_id;
+        } catch (\Exception $e) {
+        }
+    }
 }