Browse Source

add:回传设置;

Wang Chen 4 years ago
parent
commit
a46ce99c61

+ 9 - 9
app/Http/Controllers/QuickApp/Oauth/UsersController.php

@@ -46,14 +46,14 @@ class UsersController extends Controller
      */
     public function index(Request $request)
     {
-        $codeVersion = $request->header('x-codeversion', '');
-        $package = $request->input('package', '');
+        $codeVersion   = $request->header('x-codeversion', '');
+        $package       = $request->input('package', '');
         $send_order_id = $request->input('send_order_id', 0);
-        $device_no = $request->input('device_no', '');
-        $androidid = $request->input('androidid', '');
-        $imei = $request->input('imei', '');
-        $mac = $request->input('mac', '');
-        $device_info = $request->input('device_info', '');
+        $device_no     = $request->input('device_no', '');
+        $androidid     = $request->input('androidid', '');
+        $imei          = $request->input('imei', '');
+        $mac           = $request->input('mac', '');
+        $device_info   = $request->input('device_info', '');
         if ($device_no) {
             $data = (new QappUserService)->login(compact('package', 'send_order_id', 'device_no', 'androidid', 'mac', 'device_info', 'imei', 'codeVersion'));
             return response()->success($data);
@@ -90,8 +90,8 @@ class UsersController extends Controller
     {
         try {
             $old_token = JWTAuth::getToken();
-            $token = JWTAuth::refresh($old_token);
-            $time = strtotime("+1 month");
+            $token     = JWTAuth::refresh($old_token);
+            $time      = strtotime("+1 month");
             return response()->success(compact('token', 'time'));
         } catch (JWTException $e) {
             return response()->error('QAPP_NOT_LOGIN');

+ 5 - 6
app/Http/Middleware/CheckSign.php

@@ -10,17 +10,16 @@ class CheckSign
     /**
      * Handle an incoming request.
      *
-     * @param  \Illuminate\Http\Request  $request
-     * @param  \Closure  $next
+     * @param \Illuminate\Http\Request $request
+     * @param \Closure                 $next
      * @return mixed
      */
     public function handle($request, Closure $next)
     {
-        $version = $request->header('X-Version','');
-        $sign = $request->post('sign', '');
+        $sign      = $request->post('sign', '');
         $timestamp = $request->post('timestamp', 0);
-        $key = 'a!A&AFRWT65Nb3NlklezUiqHyQAA@Z8M';
-        $params = $request->except('_url');
+        $key       = 'a!A&AFRWT65Nb3NlklezUiqHyQAA@Z8M';
+        $params    = $request->except('_url');
         if ($timestamp && time() - $timestamp <= (SysConsts::ONE_HOUR_SECONDS * 10) && $sign == _sign($params, $key)) {
             return $next($request);
         } else {

+ 17 - 30
app/Jobs/QappTikTokUser.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Jobs;
+namespace App\Jobs\QappTikTok;
 
 use App\Consts\SysConsts;
 use GuzzleHttp\Client;
@@ -17,47 +17,34 @@ class QappTikTokUser implements ShouldQueue
 {
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
-    private $ip;
-    private $device_no;
-    private $mac;
-    private $channel_id;
-    private $uid;
-    private $register_time;
-    private $is_report;
+    private $reportParams;
 
     /**
-     * Create a new job instance.
-     *
-     * @return void
+     * QappTikTokUser constructor.
+     * @param QappTikTokUserRequest $reportParams
      */
-    public function __construct(string $ip, string $device_no, string $mac, int $channel_id, int $uid, string $register_time, bool $is_report = false)
+    public function __construct(QappTikTokUserRequest $reportParams)
     {
-        $this->ip            = $ip;
-        $this->device_no     = $device_no;
-        $this->mac           = $mac;
-        $this->channel_id    = $channel_id;
-        $this->uid           = $uid;
-        $this->register_time = $register_time;
-        $this->is_report     = $is_report;
+        $this->reportParams = $reportParams;
     }
 
     /**
      * Execute the job.
-     *
-     * @return void
+     * @throws \GuzzleHttp\Exception\GuzzleException
      */
     public function handle()
     {
         $client         = new Client();
         $params         = [
-            'ip'            => $this->ip,
-            'device_no'     => $this->device_no,
-            'mac'           => $this->mac ?? '',
-            'channel_id'    => $this->channel_id,
-            'uid'           => $this->uid,
-            'register_time' => $this->register_time,
-            'is_report'     => (string)$this->is_report,
-            'source'        => 'zsy'
+            'ip'            => $this->reportParams->ip,
+            'device_no'     => $this->reportParams->device_no,
+            'mac'           => $this->reportParams->mac ?? '',
+            'channel_id'    => $this->reportParams->channel_id,
+            'uid'           => $this->reportParams->uid,
+            'register_time' => $this->reportParams->register_time,
+            'is_report'     => (string)$this->reportParams->is_report,
+            'source'        => 'zsy',
+            'send_order_id' => $this->reportParams->send_order_id,
         ];
         $params['sign'] = _sign($params, SysConsts::TIKTOK_KEY);
         $url            = 'https://newtrackapi.zhuishuyun.com/api/qappuser/register';
@@ -70,4 +57,4 @@ class QappTikTokUser implements ShouldQueue
             }
         }
     }
-}
+}

+ 17 - 38
app/Jobs/QappTikTokUserCharge.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Jobs;
+namespace App\Jobs\QappTikTok;
 
 use App\Consts\SysConsts;
 use GuzzleHttp\Client;
@@ -17,20 +17,7 @@ class QappTikTokUserCharge implements ShouldQueue
 {
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
-    private $uid;
-    private $amount;
-    private $pay_time;
-    private $type;
-    private $book_id;
-    private $book_name;
-    /**
-     * 分子
-     */
-    private $molecule;
-    /**
-     * 分母
-     */
-    private $denominator;
+    private $reportParams;
 
     protected $url = 'https://newtrackapi.zhuishuyun.com/api/qappuser/charge';
 
@@ -48,40 +35,32 @@ class QappTikTokUserCharge implements ShouldQueue
     const REGISTER_24_CHARGE = 'register_24_charge';
 
     /**
-     * Create a new job instance.
-     *
-     * @return void
+     * QappTikTokUserCharge constructor.
+     * @param QappTikTokUserChargeRequest $reportParams
      */
-    public function __construct(int $uid, float $amount, string $pay_time, string $type, string $book_id, string $book_name, int $molecule = 1, int $denominator = 1)
+    public function __construct(QappTikTokUserChargeRequest $reportParams)
     {
-        $this->uid         = $uid;
-        $this->amount      = $amount;
-        $this->pay_time    = $pay_time;
-        $this->type        = $type;
-        $this->book_id     = $book_id;
-        $this->book_name   = $book_name;
-        $this->molecule    = $molecule;
-        $this->denominator = $denominator;
+        $this->reportParams = $reportParams;
     }
 
     /**
      * Execute the job.
-     *
-     * @return void
+     * @throws \GuzzleHttp\Exception\GuzzleException
      */
     public function handle()
     {
         $client         = new Client();
         $params         = [
-            'uid'         => $this->uid,
-            'amount'      => $this->amount,
-            'pay_time'    => $this->pay_time,
-            'type'        => $this->type,
-            'book_id'     => $this->book_id,
-            'book_name'   => $this->book_name,
-            'molecule'    => $this->molecule,
-            'denominator' => $this->denominator,
-            'source'      => 'zsy'
+            'uid'           => (int)$this->reportParams->uid,
+            'amount'        => (float)$this->reportParams->amount,
+            'pay_time'      => (string)$this->reportParams->pay_time,
+            'type'          => (string)$this->reportParams->type,
+            'book_id'       => $this->reportParams->book_id,
+            'book_name'     => $this->reportParams->book_name,
+            'molecule'      => $this->reportParams->molecule,
+            'denominator'   => $this->reportParams->denominator,
+            'source'        => 'zsy',
+            'send_order_id' => $this->reportParams->send_order_id,
         ];
         $params['sign'] = _sign($params, SysConsts::TIKTOK_KEY);
         $response       = $client->request('post', $this->url, ['form_params' => $params])->getBody()->getContents();

+ 42 - 0
app/Jobs/QappTikTok/QappTikTokUserChargeRequest.php

@@ -0,0 +1,42 @@
+<?php
+
+
+namespace App\Jobs\QappTikTok;
+
+
+class QappTikTokUserChargeRequest
+{
+    // 用户Uid
+    public $uid;
+
+    // 充值金额
+    public $amount;
+
+    // 支付时间
+    public $pay_time;
+
+    // 上报类型
+    public $type;
+
+    // 书籍id
+    public $book_id;
+
+    // 书名
+    public $book_name;
+
+    // 回传类型
+    public $report_type;
+
+    // 回传比例
+    public $report_rate;
+
+    // 派单id
+    public $send_order_id;
+
+    // 分子
+    public $molecule;
+
+    // 分母
+    public $denominator = 100;
+
+}

+ 38 - 0
app/Jobs/QappTikTok/QappTikTokUserRequest.php

@@ -0,0 +1,38 @@
+<?php
+
+
+namespace App\Jobs\QappTikTok;
+
+
+class QappTikTokUserRequest
+{
+    // 用户注册ip地址
+    public $ip;
+
+    // 设备号
+    public $device_no;
+
+    // 设备mac地址
+    public $mac;
+
+    // 渠道号
+    public $channel_id;
+
+    // 用户Uid
+    public $uid;
+
+    // 用户注册时间
+    public $register_time;
+
+    // 回传类型
+    public $report_type;
+
+    // 回传比例
+    public $report_rate;
+
+    // 派单id
+    public $send_order_id;
+
+    // 是否上报
+    public $is_report = true;
+}

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

@@ -12,6 +12,8 @@ class QappSendOrder extends Model
         'account',
         'channel_user_id',
         'distribution_channel_id',
+        'report_type',
+        'report_rate',
     ];
 
     /**

+ 86 - 62
app/Modules/Trade/Pay/PaySuccessAbstract.php

@@ -2,9 +2,12 @@
 
 namespace App\Modules\Trade\Pay;
 
-use App\Jobs\QappTikTokUserCharge;
+use App\Jobs\QappTikTok\QappTikTokUserChargeRequest;
+use App\Jobs\QappTikTok\QappTikTokUserCharge;
 use App\Modules\Book\Models\BookConfig;
+use App\Modules\SendOrder\Models\QappSendOrder;
 use App\Modules\Subscribe\Models\Order;
+use App\Modules\User\Models\User;
 use App\Modules\User\Services\ReadRecordService;
 use App\Modules\UserTask\Services\BaseTask;
 use App\Modules\UserTask\Services\UserTaskService;
@@ -14,77 +17,98 @@ use Illuminate\Support\Facades\Log;
 use Redis;
 
 /**
- * 
+ *
  * @property \App\Modules\Subscribe\Models\Order $order
  */
 abstract class PaySuccessAbstract
 {
-   protected $order;
+    protected $order;
 
-   /**
-    * 处理支付成功的逻辑
-    */
-   abstract protected function handlePayProcess();
+    /**
+     * 处理支付成功的逻辑
+     */
+    abstract protected function handlePayProcess();
 
-   public function __construct(Order $order)
-   {
-      $this->order = $order;
-   }
+    public function __construct(Order $order)
+    {
+        $this->order = $order;
+    }
 
-   /**
-    * 支付成功入口
-    */
-   public function success()
-   {
-      try {
-         DB::beginTransaction();
-         $this->setOrderSuccess();
-         $this->handlePayProcess();
-         DB::commit();
-         $this->addQueue();
-         return true;
-      } catch (Exception $e) {
-         DB::rollback();
-         Log::error('pay.success: ' . $e->getMessage() . ' ' . $e->getTraceAsString());
-      }
-   }
+    /**
+     * 支付成功入口
+     */
+    public function success()
+    {
+        try {
+            DB::beginTransaction();
+            $this->setOrderSuccess();
+            $this->handlePayProcess();
+            DB::commit();
+            $this->addQueue();
+            return true;
+        } catch (Exception $e) {
+            DB::rollback();
+            Log::error('pay.success: ' . $e->getMessage() . ' ' . $e->getTraceAsString());
+        }
+    }
 
-   /**
-    * 设置order成功
-    */
-   protected function setOrderSuccess()
-   {
-      $this->order->pay_type = $this->getChargeTimes();
-      $this->order->status = 'PAID';
-      $this->order->pay_end_at = date('Y-m-d H:i:s');
-      $this->order->save();
-   }
+    /**
+     * 设置order成功
+     */
+    protected function setOrderSuccess()
+    {
+        $this->order->pay_type   = $this->getChargeTimes();
+        $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()
-   {
-      $count = Order::where('uid', $this->order->uid)->where('status', 'PAID')->count('id');
-      return $count + 1;
-   }
+    /**
+     * 获取用户第几次充值
+     * @param $uid
+     * @return int
+     */
+    private function getChargeTimes()
+    {
+        $count = Order::where('uid', $this->order->uid)->where('status', 'PAID')->count('id');
+        return $count + 1;
+    }
 
-   private function getReportType(int $channel_id)
-   {
-      return Redis::hGet('channel:setting:' . $channel_id, 'tiktok_report_type') ??  QappTikTokUserCharge::CURRENT_DAY_REGISTER;
-   }
+    private function getReportType(int $channel_id)
+    {
+        return Redis::hGet('channel:setting:' . $channel_id, 'tiktok_report_type') ?? QappTikTokUserCharge::CURRENT_DAY_REGISTER;
+    }
 
 
-   protected function addQueue()
-   {
-      UserTaskService::addUserTaskQueue($this->order->uid, BaseTask::charge, UserTaskService::judge_trigger);
-      $bid = ReadRecordService::getSimpleFirstReadRecord($this->order->uid);
-      $book_id = book_hash_encode($bid);
-      $book = BookConfig::where('bid', $bid)->select('book_name')->first();
-      $book_name = $book ? $book->book_name : '';
-      $job = new QappTikTokUserCharge($this->order->uid, $this->order->price, $this->order->created_at, $this->getReportType($this->order->distribution_channel_id), $book_id, $book_name);
-      dispatch($job->onConnection('rabbitmq')->onQueue('qapp_tiktok_user_charge_queue'));
-   }
+    protected function addQueue()
+    {
+        UserTaskService::addUserTaskQueue($this->order->uid, BaseTask::charge, UserTaskService::judge_trigger);
+        $bid       = ReadRecordService::getSimpleFirstReadRecord($this->order->uid);
+        $book_id   = book_hash_encode($bid);
+        $book      = BookConfig::where('bid', $bid)->select('book_name')->first();
+        $book_name = $book ? $book->book_name : '';
+
+        // 取用户注册的派单id,派单信息
+        $user           = User::getUser($this->order->uid);
+        $sendOrderId    = getProp($user, 'send_order_id');
+        $quickSendOrder = QappSendOrder::getSendOrderById($sendOrderId);
+        if ($quickSendOrder) {
+            // 队列处理回传业务
+            $tikTokChargeRequest                = new QappTikTokUserChargeRequest();
+            $tikTokChargeRequest->uid           = $this->order->uid;
+            $tikTokChargeRequest->amount        = $this->order->price;
+            $tikTokChargeRequest->pay_time      = $this->order->created_at;
+            $tikTokChargeRequest->type          = $this->getReportType($this->order->distribution_channel_id);
+            $tikTokChargeRequest->book_id       = $book_id;
+            $tikTokChargeRequest->book_name     = $book_name;
+            $tikTokChargeRequest->send_order_id = $sendOrderId;
+            $tikTokChargeRequest->report_type   = getProp($quickSendOrder, 'report_type');
+            $tikTokChargeRequest->report_rate   = (int)getProp($quickSendOrder, 'report_rate');
+            $tikTokChargeRequest->molecule      = (int)getProp($quickSendOrder, 'report_rate');
+
+            // 回传队列
+            $job = new QappTikTokUserCharge($tikTokChargeRequest);
+            dispatch($job->onConnection('rabbitmq')->onQueue('qapp_tiktok_user_charge_queue'));
+        }
+    }
 }

+ 24 - 3
app/Modules/User/Services/QappUserService.php

@@ -6,8 +6,10 @@ namespace App\Modules\User\Services;
 use App\Cache\Lock\LockCache;
 use App\Consts\ErrorConst;
 use App\Consts\QuickConst;
-use App\Jobs\QappTikTokUser;
+use App\Jobs\QappTikTok\QappTikTokUserRequest;
+use App\Jobs\QappTikTok\QappTikTokUser;
 use App\Libs\Utils;
+use App\Modules\SendOrder\Models\QappSendOrder;
 use App\Modules\User\Models\QappPackage;
 use App\Modules\User\Models\QappUser;
 use App\Modules\User\Models\User;
@@ -191,8 +193,27 @@ class QappUserService
             ]);
             $qapp_user->user = $user;
             DB::commit();
-            $job = new QappTikTokUser($user->register_ip, $data['device_no'], $data['mac'], $channel_id, $user->id, $user->created_at, true);
-            dispatch($job->onConnection('rabbitmq')->onQueue('qapp_tiktok_user_register_queue'));
+
+            // 派单信息
+            $quickSendOrder = QappSendOrder::getSendOrderById($data['send_order_id']);
+            if ($quickSendOrder) {
+                // 队列处理回传业务
+                $tikTokRegisterRequest                = new QappTikTokUserRequest();
+                $tikTokRegisterRequest->ip            = $user->register_ip;
+                $tikTokRegisterRequest->device_no     = $data['device_no'];
+                $tikTokRegisterRequest->mac           = $data['mac'];
+                $tikTokRegisterRequest->channel_id    = $channel_id;
+                $tikTokRegisterRequest->uid           = $user->id;
+                $tikTokRegisterRequest->register_time = $user->created_at;
+                $tikTokRegisterRequest->send_order_id = $data['send_order_id'];
+                $tikTokRegisterRequest->report_type   = getProp($quickSendOrder, 'report_type');
+                $tikTokRegisterRequest->report_rate   = getProp($quickSendOrder, 'report_rate');
+
+                // 回传业务
+                $job = new QappTikTokUser($tikTokRegisterRequest);
+                dispatch($job->onConnection('rabbitmq')->onQueue('qapp_tiktok_user_register_queue'));
+            }
+
             UserTaskService::addUserTaskQueue($user->id, BaseTask::register, UserTaskService::add_trigger);
             return $qapp_user;
         } catch (Exception $e) {