ith5 преди 2 месеца
родител
ревизия
3c27d2fa47

+ 9 - 1
app/adapter/GdtAdapter.php

@@ -7,8 +7,16 @@ use GuzzleHttp\Client;
 
 class GdtAdapter
 {
-    public function OAuth($info)
+    public function OAuth($params)
     {
+
+        $auth_code = $params['auth_code'];
+        $appid = $params['appid'];
+       
+        // $secret = ACCOUNT[$cmid]['secret'];
+        $timestamp = time() - 120;
+
+
         // 执行验证callback, 返回授权后的字段,跟数据库对应
         return [
             "advertiser_id" => "",

+ 42 - 0
app/v1/controller/advert/AdAdvertiserAppController.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace app\v1\controller\advert;
+
+use plugin\saiadmin\basic\BaseController;
+use app\v1\logic\advert\AdAdvertiserAppLogic;
+use app\v1\validate\advert\AdAdvertiserAppValidate;
+use support\Request;
+use support\Response;
+
+/**
+ * 开放平台应用授权信息控制器
+ */
+class AdAdvertiserAppController extends BaseController
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->logic = new AdAdvertiserAppLogic();
+        $this->validate = new AdAdvertiserAppValidate;
+        parent::__construct();
+    }
+
+    /**
+     * 数据列表
+     * @param Request $request
+     * @return Response
+     */
+    public function index(Request $request): Response
+    {
+        $where = $request->more([
+            ['name', ''],
+            ['app_id', ''],
+        ]);
+        $query = $this->logic->search($where);
+        $data = $this->logic->getList($query);
+        return $this->success($data);
+    }
+
+}

+ 12 - 0
app/v1/controller/dataReport/AnalyseController.php

@@ -120,4 +120,16 @@ class AnalyseController extends BaseController
         $data = $this->logic->getChartData($where);
         return $this->success($data);
     }
+
+    // 支付成功率
+    public function getPaySuccessRate(Request $request)
+    {
+        $where = $request->more([
+            ['main_id',''],
+            ['game_id', ''],
+            ['type', 'day']
+        ]);
+        $data = $this->logic->getPaySuccessRate($where);
+        return $this->success($data);
+    }
 }

+ 23 - 0
app/v1/logic/advert/AdAdvertiserAppLogic.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace app\v1\logic\advert;
+
+use plugin\saiadmin\basic\BaseLogic;
+use plugin\saiadmin\exception\ApiException;
+use plugin\saiadmin\utils\Helper;
+use app\v1\model\advert\AdAdvertiserApp;
+
+/**
+ * 开放平台应用授权信息逻辑层
+ */
+class AdAdvertiserAppLogic extends BaseLogic
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->model = new AdAdvertiserApp();
+    }
+
+}

+ 161 - 0
app/v1/logic/dataReport/AnalyseLogic.php

@@ -825,4 +825,165 @@ class AnalyseLogic extends BaseLogic
             ];
         }
     }
+
+    // 支付成功率
+    public function getPaySuccessRate($where)
+    {
+        $params = $this->searchByAuth($where);
+      
+        $whereRaw = $this->getCommonWhereRaw($params);
+        
+        $type = $params['type'] ?? 'day';
+
+
+        // 对比今日和昨日的支付成功率,
+        if($type == 'day'){
+            $today = date('Y-m-d');
+            $yesterday = date('Y-m-d', strtotime('-1 day'));
+            $todayWhereRaw = $whereRaw . " AND pay_time BETWEEN '".strtotime($today . " 00:00:00")."' AND '".strtotime($today . " 23:59:59")."'";
+            $yesterdayWhereRaw = $whereRaw . " AND pay_time BETWEEN '".strtotime($yesterday . " 00:00:00")."' AND '".strtotime($yesterday . " 23:59:59")."'";
+
+
+            // 今日总下单量
+            $todayOrderNumData = Db::connect('db_game_log')->query("
+                SELECT Count(*) as order_num, pay_time
+                FROM sdk_order_success
+                WHERE {$todayWhereRaw}
+                group by pay_time
+            ");
+
+            // 今日总支付量
+            $todayPaySuccessData = Db::connect('db_game_log')->query("
+                SELECT Count(*) as pay_num, pay_time
+                FROM sdk_order_success
+                WHERE {$todayWhereRaw} AND sync_status = 1
+                group by pay_time
+            ");
+            
+            // 初始化24小时的数组(0-23)
+            $todayOrderNumDataMap = [];
+            $todayPaySuccessDataMap = [];
+            for ($hour = 0; $hour < 24; $hour++) {
+                $hourKey = str_pad($hour, 2, '0', STR_PAD_LEFT);
+                $todayOrderNumDataMap[$hourKey] = 0;
+                $todayPaySuccessDataMap[$hourKey] = 0;
+            }
+            
+            // 新总下单量按小时分组
+            foreach($todayOrderNumData as $item){
+                $hourKey = date('H', $item['pay_time']);
+                $todayOrderNumDataMap[$hourKey] = $item['order_num'];
+            }
+            // 新总支付量按小时分组
+            foreach($todayPaySuccessData as $item){
+                $hourKey = date('H', $item['pay_time']);
+                $todayPaySuccessDataMap[$hourKey] = $item['pay_num'];
+            }
+
+            // 计算今日支付成功率
+            $todayPaySuccessRateArr = [];
+            foreach($todayOrderNumDataMap as $key => $value){
+                $paySuccessNum = $todayPaySuccessDataMap[$key] ?? 0;
+                $todayPaySuccessRateArr[] = $value > 0 ? getRound($paySuccessNum, $value) : 0;
+            }
+            
+
+
+            // 昨日总下单量
+            $yesterdayOrderNumData = Db::connect('db_game_log')->query("
+                SELECT Count(*) as order_num, pay_time
+                FROM sdk_order_success
+                WHERE {$yesterdayWhereRaw}
+                group by pay_time
+            ");
+            
+            
+            // 昨日总支付量
+            $yesterdayPaySuccessData = Db::connect('db_game_log')->query("
+                SELECT Count(*) as pay_num, pay_time
+                FROM sdk_order_success
+                WHERE {$yesterdayWhereRaw} AND sync_status = 1
+                group by pay_time
+            ");
+
+            // 初始化24小时的数组(0-23)
+            $yesterdayOrderNumDataMap = [];
+            $yesterdayPaySuccessDataMap = [];
+            for ($hour = 0; $hour < 24; $hour++) {
+                $hourKey = str_pad($hour, 2, '0', STR_PAD_LEFT);
+                $yesterdayOrderNumDataMap[$hourKey] = 0;
+                $yesterdayPaySuccessDataMap[$hourKey] = 0;
+            }
+            
+            // 昨日总下单量按小时分组
+            foreach($yesterdayOrderNumData as $item){
+                $hourKey = date('H', $item['pay_time']);
+                $yesterdayOrderNumDataMap[$hourKey] = $item['order_num'];
+            }
+            // 昨日总支付量按小时分组
+            foreach($yesterdayPaySuccessData as $item){
+                $hourKey = date('H', $item['pay_time']);
+                $yesterdayPaySuccessDataMap[$hourKey] = $item['pay_num'];
+            }
+
+            // 计算昨日支付成功率
+            $yesterdayPaySuccessRateArr = [];
+            foreach($yesterdayOrderNumDataMap as $key => $value){
+                $paySuccessNum = $yesterdayPaySuccessDataMap[$key] ?? 0;
+                $yesterdayPaySuccessRateArr[] = $value > 0 ? getRound($paySuccessNum, $value) : 0;
+            }
+
+            // 今日总下单量
+            $todayOrderNum = array_sum($todayOrderNumDataMap);
+            // 今日支付成功量
+            $todayPaySuccessNum = array_sum($todayPaySuccessDataMap);
+            // 今日支付成功率
+            $paySuccessRate = getRound($todayPaySuccessNum, $todayOrderNum);
+            // xAxis.data
+            $xAxisData = [];
+            for ($hour = 0; $hour < 24; $hour++) {
+                $xAxisData[] = str_pad($hour, 2, '0', STR_PAD_LEFT) . ":00-" . str_pad($hour + 1, 2, '0', STR_PAD_LEFT) . ":00";
+                if($hour == 23){
+                    $xAxisData[] = str_pad($hour, 2, '0', STR_PAD_LEFT) . ":00-00:00";
+                }
+            }
+           
+            // 成功率变化
+            $successRateChange = [];
+            for ($hour = 0; $hour < 24; $hour++) {
+                $successRateChange[] = $todayPaySuccessRateArr[$hour] - $yesterdayPaySuccessRateArr[$hour];
+            }
+
+
+            //表格数据
+            $tableData = [];
+            for ($hour = 0; $hour < 24; $hour++) {
+                $hourKey = str_pad($hour, 2, '0', STR_PAD_LEFT);
+                $tableData[] = [
+                    'time'=>$hourKey . ":00-" . str_pad($hour + 1, 2, '0', STR_PAD_LEFT) . ":00",
+                    'todayOrderNum'=>$todayOrderNumDataMap[$hourKey],
+                    'todayPayNum'=>$todayPaySuccessDataMap[$hourKey],
+                    'todayPaySuccessRate'=>$todayPaySuccessRateArr[$hour],
+                    'yesterdayOrderNum'=>$yesterdayOrderNumDataMap[$hourKey],
+                    'yesterdayPayNum'=>$yesterdayPaySuccessDataMap[$hourKey],
+                    'yesterdayPaySuccessRate'=>$yesterdayPaySuccessRateArr[$hour],
+                    'successRateChange'=>$successRateChange[$hour],
+                ];
+            }
+
+
+        }
+
+
+        return [
+            'PaySuccessRateArr' => $todayPaySuccessRateArr,
+            'OldPaySuccessRateArr' => $yesterdayPaySuccessRateArr,
+            'orderNum'=>$todayOrderNum,
+            'successNum'=>$todayPaySuccessNum,
+            'paySuccessRate'=>$paySuccessRate,
+            'xAxisData'=>$xAxisData,
+            'successRateChange'=>$successRateChange,
+            'tableData'=>$tableData
+        ];
+    }
 }

+ 38 - 0
app/v1/model/advert/AdAdvertiserApp.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace app\v1\model\advert;
+
+use plugin\saiadmin\basic\BaseNormalModel;
+
+/**
+ * 开放平台应用授权信息模型
+ */
+class AdAdvertiserApp extends BaseNormalModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 数据库表名称
+     * @var string
+     */
+    protected $table = 'ad_advertiser_app';
+
+    /**
+     * 数据库连接
+     * @var string
+     */
+    protected $connection = 'db_advert';
+
+    /**
+     * 应用名称 搜索
+     */
+    public function searchNameAttr($query, $value)
+    {
+        $query->where('name', 'like', '%'.$value.'%');
+    }
+
+}

+ 62 - 0
app/v1/validate/advert/AdAdvertiserAppValidate.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace app\v1\validate\advert;
+
+use think\Validate;
+
+/**
+ * 开放平台应用授权信息验证器
+ */
+class AdAdvertiserAppValidate extends Validate
+{
+    /**
+     * 定义验证规则
+     */
+    protected $rule =   [
+        'media_id' => 'require',
+        'name' => 'require',
+        'app_id' => 'require',
+        'app_secret' => 'require',
+        'auth_url' => 'require',
+        'token_url' => 'require',
+        'refresh_url' => 'require',
+    ];
+
+    /**
+     * 定义错误信息
+     */
+    protected $message  =   [
+        'media_id' => '媒体渠道ID必须填写',
+        'name' => '应用名称必须填写',
+        'app_id' => '应用ID必须填写',
+        'app_secret' => '应用密钥必须填写',
+        'auth_url' => 'OAuth授权地址必须填写',
+        'token_url' => 'Token获取地址必须填写',
+        'refresh_url' => 'Token刷新地址必须填写',
+    ];
+
+    /**
+     * 定义场景
+     */
+    protected $scene = [
+        'save' => [
+            'media_id',
+            'name',
+            'app_id',
+            'app_secret',
+            'auth_url',
+            'token_url',
+            'refresh_url',
+        ],
+        'update' => [
+            'media_id',
+            'name',
+            'app_id',
+            'app_secret',
+            'auth_url',
+            'token_url',
+            'refresh_url',
+        ],
+    ];
+
+}

BIN
plugin/saiadmin/public/export/广点通分包_标识数据_20251009171119.xlsx


BIN
public/storage/20251010/9fe915fafbf15d0ea293eb7b62b5cd548a0ebac1.jpeg