123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- namespace App\Modules\Trade\Pay;
- use App\Jobs\QappTikTok\NewQappTikTokUserCharge;
- use App\Jobs\QappTikTok\QappTikTokUserChargeRequest;
- use App\Jobs\QappTikTok\QappTikTokUserCharge;
- use App\Modules\Book\Models\BookConfig;
- use App\Modules\Report\Services\ReportService;
- 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;
- use Exception;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Redis;
- use App\Jobs\CycleCallBack;
- /**
- *
- * @property \App\Modules\Subscribe\Models\Order $order
- */
- abstract class PaySuccessAbstract
- {
- protected $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();
- $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();
- }
- /**
- * 获取用户第几次充值
- * @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;
- }
- 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);
- $reportType = getProp($quickSendOrder, 'report_type');
- $reportRate = (int)getProp($quickSendOrder, 'report_rate', 100);
- // 队列处理回传业务
- $tikTokChargeRequest = new QappTikTokUserChargeRequest();
- $tikTokChargeRequest->uid = $this->order->uid;
- $tikTokChargeRequest->amount = $this->order->price;
- $tikTokChargeRequest->order_no = $this->order->trade_no;
- $tikTokChargeRequest->pay_time = $this->order->created_at;
- $tikTokChargeRequest->book_id = $book_id;
- $tikTokChargeRequest->book_name = $book_name;
- $tikTokChargeRequest->send_order_id = $sendOrderId;
- // 需要跟派单设置的回传类型一致才上报
- myLog('qapp_user_charge')->info('addQueue', compact('tikTokChargeRequest'));
- $job = new NewQappTikTokUserCharge($tikTokChargeRequest);
- $callback_type = getProp($quickSendOrder, 'callback_type');
- if ($callback_type == 'cycle_report') {
- $cycjob = new CycleCallBack($this->order->trade_no);
- dispatch($cycjob->onConnection('redis_queue')->onQueue('{qapp_tiktok_cycle_user_charge_queue}'));
- }else{
- dispatch($job->onConnection('redis_queue')->onQueue('{qapp_tiktok_user_charge_queue}'));
- }
- // 同步数据
- $this->order->distribution_channel_id = getProp($quickSendOrder, 'distribution_channel_id');
- try {
- ReportService::reportRecharge($this->order);
- }catch (Exception $exception){
- Log::error('pay.success-addQueue-err: 同步数据异常' . $exception->getMessage() . ' ' . $exception->getTraceAsString());
- }
- }
- }
|