|
@@ -1,249 +0,0 @@
|
|
-<?php
|
|
|
|
-
|
|
|
|
-namespace App\Jobs\OrangeSite;
|
|
|
|
-
|
|
|
|
-use App\Modules\Callback\Models\ChannelCallbackConfig;
|
|
|
|
-use App\Modules\Callback\Services\CallbackBaseService;
|
|
|
|
-use App\Modules\OrangeSite\Services\CheckReport\EnableReportCheck;
|
|
|
|
-use App\Modules\OrangeSite\Services\CheckReport\OrderAlreadyReportCheck;
|
|
|
|
-use App\Modules\OrangeSite\Services\CheckReport\PromotionProtectCheck;
|
|
|
|
-use App\Modules\OrangeSite\Services\CheckReport\RechargeAmountCheck;
|
|
|
|
-use App\Modules\OrangeSite\Services\CheckReport\ReportRateCheck;
|
|
|
|
-use App\Modules\OrangeSite\Services\CheckReport\ReportRechargeTypeCheck;
|
|
|
|
-use App\Modules\OrangeSite\Services\OrangeSitePromotionService;
|
|
|
|
-use App\Modules\OrangeSite\Services\OrangeSiteRechargeReportCheckContext;
|
|
|
|
-use App\Modules\OrangeSite\Services\OrangeSiteReportRateService;
|
|
|
|
-use App\Modules\Order\Models\ReportUserChargeRecord;
|
|
|
|
-use App\Modules\Trace\TraceContext;
|
|
|
|
-use Illuminate\Bus\Queueable;
|
|
|
|
-use Illuminate\Contracts\Queue\ShouldQueue;
|
|
|
|
-use Illuminate\Foundation\Bus\Dispatchable;
|
|
|
|
-use Illuminate\Pipeline\Pipeline;
|
|
|
|
-use Illuminate\Queue\InteractsWithQueue;
|
|
|
|
-use Illuminate\Queue\SerializesModels;
|
|
|
|
-use Illuminate\Support\Facades\DB;
|
|
|
|
-
|
|
|
|
-class RechargeReport implements ShouldQueue
|
|
|
|
-{
|
|
|
|
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
-
|
|
|
|
- public const QUEUE = '{orangeSite}.report.recharge';
|
|
|
|
- public const CONNECTION = 'redis_queue';
|
|
|
|
-
|
|
|
|
- public const PLATFORM = 'orange';
|
|
|
|
- /**
|
|
|
|
- * @var array
|
|
|
|
- * <pre>
|
|
|
|
- * [
|
|
|
|
- * 'channelId' => 'xxx, // 站点id
|
|
|
|
- * 'orderId' => 'xxx', // 订单id
|
|
|
|
- * 'uid' => 'xxx', // 充值用户uid
|
|
|
|
- * ]
|
|
|
|
- * </pre>
|
|
|
|
- */
|
|
|
|
- private $reportInfo;
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Create a new job instance.
|
|
|
|
- *
|
|
|
|
- * @return void
|
|
|
|
- */
|
|
|
|
- public function __construct(array $reportInfo)
|
|
|
|
- {
|
|
|
|
- $this->reportInfo = $reportInfo;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Execute the job.
|
|
|
|
- *
|
|
|
|
- * @return void
|
|
|
|
- */
|
|
|
|
- public function handle()
|
|
|
|
- {
|
|
|
|
- $traceContext = new TraceContext();
|
|
|
|
- \Log::info('[orangeSiteRechargeReport]开始回传', [
|
|
|
|
- 'reportInfo' => $this->reportInfo,
|
|
|
|
- 'traceInfo' => $traceContext->getTraceInfo()
|
|
|
|
- ]);
|
|
|
|
- $user = DB::table('users')->find(($this->reportInfo['uid'] ?? -1));
|
|
|
|
- $order = DB::table('orders')->where([
|
|
|
|
- ['id', '=', ($this->reportInfo['orderId'] ?? -1)],
|
|
|
|
- ['status', '=', 'PAID']
|
|
|
|
- ])->first();
|
|
|
|
- $channelCallbackConfig = ChannelCallbackConfig::where('channel_id', ($this->reportInfo['channelId'] ?? -1))
|
|
|
|
- ->where('platform', self::PLATFORM)->first();
|
|
|
|
-
|
|
|
|
- $channelSettingRate = OrangeSiteReportRateService::getChannelSettingReportRate($user->distribution_channel_id);
|
|
|
|
- $reportCheckContext = new OrangeSiteRechargeReportCheckContext($user, $order, $channelCallbackConfig,
|
|
|
|
- $traceContext, $channelSettingRate);
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- $reportCheckContext->checkNecessaryInfo();
|
|
|
|
- } catch (\Exception $exception) {
|
|
|
|
- \Log::error('[orangeSiteRechargeReport]回传基础信息有误', [
|
|
|
|
- 'message' => $exception->getMessage(),
|
|
|
|
- 'traceInfo' => $traceContext->getTraceInfo()
|
|
|
|
- ]);
|
|
|
|
- dingTalkAlert(config('common.orangeSite.dingTalkUrl'), "[orangeSite]订单回传基础信息有误报警:\r\n" .
|
|
|
|
- \json_encode([
|
|
|
|
- 'reportInfo' => $this->reportInfo,
|
|
|
|
- 'message' => $exception->getMessage(),
|
|
|
|
- 'traceInfo' => $traceContext->getTraceInfo()
|
|
|
|
- ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- $pipes = [
|
|
|
|
- EnableReportCheck::class,
|
|
|
|
- OrderAlreadyReportCheck::class,
|
|
|
|
- ReportRechargeTypeCheck::class,
|
|
|
|
- RechargeAmountCheck::class,
|
|
|
|
- PromotionProtectCheck::class,
|
|
|
|
- ReportRateCheck::class
|
|
|
|
- ];
|
|
|
|
-
|
|
|
|
- $content = app(Pipeline::class)
|
|
|
|
- ->send($reportCheckContext)
|
|
|
|
- ->through($pipes)
|
|
|
|
- ->then(function ($content) {
|
|
|
|
- return $content;
|
|
|
|
- });
|
|
|
|
- $result = $content->result;
|
|
|
|
- \Log::info('[orangeSiteRechargeReport]回传判定结果', [
|
|
|
|
- 'result' => $result,
|
|
|
|
- 'traceInfo' => $traceContext->getTraceInfo()]);
|
|
|
|
- if ($result['needRecord'] ?? true) {
|
|
|
|
- $this->saveReportUserChargeReportInfo($reportCheckContext, $result);
|
|
|
|
- }
|
|
|
|
- if ($result['result']) {
|
|
|
|
- $this->reportRecharge($reportCheckContext, $result);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private function reportRecharge(OrangeSiteRechargeReportCheckContext $reportCheckContext, array $checkResult)
|
|
|
|
- {
|
|
|
|
- $params = [
|
|
|
|
- 'uid' => $reportCheckContext->user->id,
|
|
|
|
- 'source' => 'zsy',
|
|
|
|
- 'amount' => $reportCheckContext->order->price ?? 0,
|
|
|
|
- 'link_source' => 'tiktok_event',
|
|
|
|
- ];
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- $result = $this->reprotResultDeal(CallbackBaseService::directlyCharge($params));
|
|
|
|
-
|
|
|
|
- $resultContent = \json_decode(($result['content'] ?? '[]'), true);
|
|
|
|
-
|
|
|
|
- $updateInfo = [
|
|
|
|
- 'status' => $result['status'] ?? 0,
|
|
|
|
- 'request_param' => $result['request_param'] ?? '',
|
|
|
|
- 'updated_at' => date('Y-m-d H:i:s'),
|
|
|
|
- 'content' => \json_encode(array_merge($resultContent,
|
|
|
|
- ['log_content' => ($reportCheckContext->result['content'] ?? '')]))
|
|
|
|
- ];
|
|
|
|
-
|
|
|
|
- \Log::info('[orangeSiteRechargeReport]请求回传接口结果:' . ($updateInfo['status'] ? '成功' : '失败'), [
|
|
|
|
- 'status' => $updateInfo['status'],
|
|
|
|
- 'traceInfo' => $reportCheckContext->traceContext->getTraceInfo()]);
|
|
|
|
-
|
|
|
|
- DB::transaction(function () use ($reportCheckContext, $updateInfo, $checkResult, $result) {
|
|
|
|
- DB::table('report_user_charge_records')->where([
|
|
|
|
- 'order_no' => $reportCheckContext->order->trade_no,
|
|
|
|
- 'uid' => $reportCheckContext->order->uid,
|
|
|
|
- 'link_source' => $reportCheckContext->platform,
|
|
|
|
- ])->update($updateInfo);
|
|
|
|
-
|
|
|
|
- if (1 == $result['status']) {
|
|
|
|
- /**
|
|
|
|
- * 如果是计划保护回传成功的,只增加 orange_site_recharge_report_protect_records.current_protect_num,
|
|
|
|
- * 而不增加 orange_site_recharge_report_records.rate_total_num 和 orange_site_recharge_report_records.rate_success_num
|
|
|
|
- */
|
|
|
|
- if ('promotionProtect' == ($checkResult['result_ok_reason'] ?? '')) {
|
|
|
|
- \Log::debug('[orangeSiteRechargeReport]回传成功,增加对应计划的成功数', [
|
|
|
|
- 'traceInfo' => $reportCheckContext->traceContext->getTraceInfo(),
|
|
|
|
- 'promotionId' => $reportCheckContext->reportInfo['promotionId']]);
|
|
|
|
-
|
|
|
|
- OrangeSitePromotionService::setCurrentPromotionProtectNum($reportCheckContext->user->distribution_channel_id,
|
|
|
|
- $reportCheckContext->reportInfo['promotionId'],
|
|
|
|
- $reportCheckContext->channelCallbackConfig->eligible_count ?: 0);
|
|
|
|
- } else {
|
|
|
|
- OrangeSiteReportRateService::increaseSuccessNum($reportCheckContext->user->distribution_channel_id,
|
|
|
|
- $reportCheckContext->reportInfo['configRate']);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- if ('promotionProtect' != ($checkResult['result_ok_reason'] ?? '')) {
|
|
|
|
- \Log::error('[orangeSiteRechargeReport]订单回传失败', [
|
|
|
|
- 'traceInfo' => $reportCheckContext->traceContext->getTraceInfo()]);
|
|
|
|
- OrangeSiteReportRateService::increaseFailNum($reportCheckContext->user->distribution_channel_id,
|
|
|
|
- $reportCheckContext->reportInfo['configRate']);
|
|
|
|
- } else {
|
|
|
|
- \Log::error('[orangeSiteRechargeReport]计划保护订单回传失败', [
|
|
|
|
- 'traceInfo' => $reportCheckContext->traceContext->getTraceInfo()]);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * [调用tiktok 接口回传后,数据处理逻辑]
|
|
|
|
- * @return [type] [description]
|
|
|
|
- */
|
|
|
|
- public function reprotResultDeal($result)
|
|
|
|
- {
|
|
|
|
- $status = 0;
|
|
|
|
- $content = '';
|
|
|
|
- $result_data = isset($result['data']) ? $result['data'] : [];
|
|
|
|
- if (!empty($result_data['content'])) {
|
|
|
|
- $content = $result_data['content'];
|
|
|
|
- $con_arr = json_decode($content, true);
|
|
|
|
- $content = json_encode($con_arr);
|
|
|
|
- if (isset($con_arr['code']) && 0 == $con_arr['code']) {
|
|
|
|
- //tiktok_event
|
|
|
|
- $status = 1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //处理请求参数
|
|
|
|
- $request_param = '';
|
|
|
|
- if (isset($result_data['query_params'])) {
|
|
|
|
- if (is_string($result_data['query_params'])) {
|
|
|
|
- $request_param = $result_data['query_params'];
|
|
|
|
- }
|
|
|
|
- if (is_array($result_data['query_params'])) {
|
|
|
|
- $request_param = json_encode($result_data['query_params']);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- $data = [
|
|
|
|
- 'status' => $status,
|
|
|
|
- 'request_param' => $request_param,
|
|
|
|
- ];
|
|
|
|
- if ($content) {
|
|
|
|
- $data['content'] = $content;
|
|
|
|
- }
|
|
|
|
- return $data;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private function saveReportUserChargeReportInfo(OrangeSiteRechargeReportCheckContext $reportCheckContext, array $result)
|
|
|
|
- {
|
|
|
|
- $data = [
|
|
|
|
- 'uid' => $this->reportInfo['uid'],
|
|
|
|
- 'config_percent' => round($reportCheckContext->reportInfo['configRate'] / 100, 4),
|
|
|
|
- 'report_percent' => round($reportCheckContext->reportInfo['reportRate'] / 100, 4),
|
|
|
|
- 'order_no' => $reportCheckContext->order->trade_no,
|
|
|
|
- 'timestamp' => time(),
|
|
|
|
- 'status' => 0,
|
|
|
|
- 'type' => $result['type'] ?? '',
|
|
|
|
- 'content' => $result['content'] ?? '',
|
|
|
|
- 'channel_id' => $reportCheckContext->user->distribution_channel_id,
|
|
|
|
- 'request_param' => '',
|
|
|
|
- 'link_source' => $reportCheckContext->platform,
|
|
|
|
- ];
|
|
|
|
- ReportUserChargeRecord::updateOrCreate([
|
|
|
|
- 'order_no' => $data['order_no'],
|
|
|
|
- 'uid' => $data['uid'],
|
|
|
|
- 'link_source' => $data['link_source'],
|
|
|
|
- ], $data);
|
|
|
|
- }
|
|
|
|
-}
|
|
|