Bläddra i källkod

1. 充值明细
2. 充值排行

ith5 6 månader sedan
förälder
incheckning
d456543ea5

+ 53 - 0
app/v1/controller/gameLog/SdkLoginLogController.php

@@ -0,0 +1,53 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\controller\gameLog;
+
+use plugin\saiadmin\basic\BaseController;
+use app\v1\logic\gameLog\SdkLoginLogLogic;
+use app\v1\validate\gameLog\SdkLoginLogValidate;
+use support\Request;
+use support\Response;
+
+/**
+ * 登录日志控制器
+ */
+class SdkLoginLogController extends BaseController
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->logic = new SdkLoginLogLogic();
+        $this->validate = new SdkLoginLogValidate;
+        parent::__construct();
+    }
+
+    /**
+     * 数据列表
+     * @param Request $request
+     * @return Response
+     */
+    public function index(Request $request): Response
+    {
+        $where = $request->more([
+            ['user_name', ''],
+            ['game_id', ''],
+            ['media_id', ''],
+            ['agent_id', ''],
+            ['site_id', ''],
+            ['auth_id', ''],
+            ['login_time', ''],
+            ['reg_time', ''],
+        ]);
+        $query = $this->logic->search($where);
+        $data = $this->logic->getList($query);
+        $data['data'] = $this->logic->trandformListColumn($data['data'], ['game', 'ip', 'agent']);
+        return $this->success($data);
+    }
+
+}

+ 57 - 0
app/v1/controller/gameLog/SdkOrderRankController.php

@@ -0,0 +1,57 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\controller\gameLog;
+
+use plugin\saiadmin\basic\BaseController;
+use app\v1\logic\gameLog\SdkOrderRankLogic;
+use app\v1\validate\gameLog\SdkOrderRankValidate;
+use support\Request;
+use support\Response;
+
+/**
+ * 充值排行控制器
+ */
+class SdkOrderRankController extends BaseController
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->logic = new SdkOrderRankLogic();
+        $this->validate = new SdkOrderRankValidate;
+        parent::__construct();
+    }
+
+    /**
+     * 数据列表
+     * @param Request $request
+     * @return Response
+     */
+    public function index(Request $request): Response
+    {
+        $where = $request->more([
+            ['game_id', ''],
+            ['media_id', ''],
+            ['auth_id', ''],
+            ['agent_id', ''],
+            ['site_id', ''],
+            ['user_name', ''],
+            ['server_id', ''],
+            ['server_name', ''],
+            ['reg_date', ''],
+            ['pay_date', ''],
+        ]);
+        $query = $this->logic->search($where);
+
+        $data = $this->logic->getList($query);
+        // $data['data'] = $this->logic->trandformListColumn($data['data'] , ['game', 'ip', 'auth', 'pay_channel']);
+        return $this->success($data);
+       
+    }
+
+}

+ 79 - 0
app/v1/controller/gameLog/SdkOrderSuccessController.php

@@ -0,0 +1,79 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\controller\gameLog;
+
+use plugin\saiadmin\basic\BaseController;
+use app\v1\logic\gameLog\SdkOrderSuccessLogic;
+use app\v1\validate\gameLog\SdkOrderSuccessValidate;
+use support\Request;
+use support\Response;
+
+/**
+ * 订单记录表(支付成功)控制器
+ */
+class SdkOrderSuccessController extends BaseController
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->logic = new SdkOrderSuccessLogic();
+        $this->validate = new SdkOrderSuccessValidate;
+        parent::__construct();
+    }
+
+    /**
+     * 数据列表
+     * @param Request $request
+     * @return Response
+     */
+    public function index(Request $request): Response
+    {
+        $where = $request->more([
+            ['game_id', ''],
+            ['media_id', ''],
+            ['auth_id', ''],
+            ['agent_id', ''],
+            ['site_id', ''],
+            ['user_name', ''],
+            ['server_id', ''],
+            ['server_name', ''],
+            ['reg_date', ''],
+            ['pay_date', ''],
+        ]);
+        $query = $this->logic->search($where);
+        $data = $this->logic->getList($query);
+        $data['data'] = $this->logic->trandformListColumn($data['data'], ['game', 'ip', 'agent','auth', 'pay_channel']);
+        return $this->success($data);
+    }
+
+    /**
+     * 导出数据
+     * @param Request $request
+     * @return Response
+     */
+    public function export(Request $request) : Response
+    {
+        $where = $request->more([
+            ['game_id', ''],
+            ['media_id', ''],
+            ['auth_id', ''],
+            ['agent_id', ''],
+            ['site_id', ''],
+            ['user_name', ''],
+            ['server_id', ''],
+            ['server_name', ''],
+            ['reg_date', ''],
+            ['pay_date', ''],
+        ]);
+        return $this->logic->export($where);
+    }
+
+    
+
+}

+ 2 - 0
app/v1/controller/gameLog/SdkRegLogController.php

@@ -43,8 +43,10 @@ class SdkRegLogController extends BaseController
             ['reg_time', ''],
             ['vt', ''],
         ]);
+
         $query = $this->logic->search($where);
         $data = $this->logic->getList($query);
+        $data['data'] = $this->logic->trandformListColumn($data['data'], ['game', 'ip', 'agent']);
         return $this->success($data);
     }
 

+ 56 - 0
app/v1/logic/gameLog/SdkLoginLogLogic.php

@@ -0,0 +1,56 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\logic\gameLog;
+
+use plugin\saiadmin\basic\BaseLogic;
+use plugin\saiadmin\exception\ApiException;
+use plugin\saiadmin\utils\Helper;
+use app\v1\model\gameLog\SdkLoginLog;
+
+/**
+ * 登录日志逻辑层
+ */
+class SdkLoginLogLogic extends BaseLogic
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->model = new SdkLoginLog();
+    }
+
+    /**
+     * 分页查询数据
+     * @param $query
+     * @return mixed
+     */
+    public function getList($query): mixed
+    {
+        $saiType = request()->input('saiType', 'list');
+        $page = request()->input('page', 1);
+        $limit = request()->input('limit', 10);
+        $orderBy = request()->input('orderBy', '');
+        $loginTime = request()->input('login_time', '');
+        $orderType = request()->input('orderType', $this->orderType);
+        if(empty($orderBy)) {
+            $orderBy = $this->orderField !== '' ? $this->orderField : $this->model->getPk();
+        }
+        $query->order($orderBy, $orderType);
+
+       
+        $tableName = 'sdk_login_log_'.date('Ym',strtotime($loginTime));
+   
+        
+        // 切换表名
+        $query->table($tableName);
+        if ($saiType === 'all') {
+            return $query->select()->toArray();
+        }
+        return $query->paginate($limit, false, ['page' => $page])->toArray();
+    }
+}

+ 49 - 0
app/v1/logic/gameLog/SdkOrderRankLogic.php

@@ -0,0 +1,49 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\logic\gameLog;
+
+use plugin\saiadmin\basic\BaseLogic;
+use plugin\saiadmin\exception\ApiException;
+use plugin\saiadmin\utils\Helper;
+use app\v1\model\gameLog\SdkOrderRank;
+
+/**
+ * 充值排行逻辑层
+ */
+class SdkOrderRankLogic extends BaseLogic
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->model = new SdkOrderRank();
+    }
+
+    public function getList($query): mixed
+    {
+        $saiType = request()->input('saiType', 'list');
+        $page = request()->input('page', 1);
+        $limit = request()->input('limit', 10);
+        $orderBy = request()->input('orderBy', '');
+        $orderType = request()->input('orderType', $this->orderType);
+        if(empty($orderBy)) {
+            $orderBy = $this->orderField !== '' ? $this->orderField : $this->model->getPk();
+        }
+        $query->order($orderBy, $orderType);
+        // 历史累计充值,就是,所有的充值金额。
+        $query->group('user_name,game_id,media_id,agent_id,site_id,uid');
+        $query->field('user_name,sum(money) as searchTotalMoney,game_id,media_id,agent_id,site_id,uid');
+       
+        if ($saiType === 'all') {
+            return $query->select()->toArray();
+        }
+        return $query->paginate($limit, false, ['page' => $page])->toArray();
+        
+    }
+
+}

+ 75 - 0
app/v1/logic/gameLog/SdkOrderSuccessLogic.php

@@ -0,0 +1,75 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\logic\gameLog;
+
+use plugin\saiadmin\basic\BaseLogic;
+use plugin\saiadmin\exception\ApiException;
+use plugin\saiadmin\utils\Helper;
+use app\v1\model\gameLog\SdkOrderSuccess;
+use plugin\saiadmin\service\OpenSpoutWriter;
+
+/**
+ * 订单记录表(支付成功)逻辑层
+ */
+class SdkOrderSuccessLogic extends BaseLogic
+{
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->model = new SdkOrderSuccess();
+    }
+
+     /**
+     * 导出数据
+     */
+    public function export($where = [])
+    {
+        $query = $this->search($where);
+        $data = $this->getAll($query);
+       
+        $data = $this->trandformListColumn($data, ['game', 'ip', 'agent','auth', 'pay_channel']);
+        $data = array_map(function($item){
+            return [
+                'orderid' => $item['orderid'],
+                'user_name' => $item['user_name'],
+                'agent_id' => $item['agent_id'],
+                'site_id' => $item['site_id'],
+                'game_name' => $item['game_name'],
+                'server_id' => $item['server_id'],
+                'server_name' => $item['server_name'],
+                'pay_channel_name' => $item['pay_channel_name'],
+                'money' => $item['money'],
+                'pay_date' => $item['pay_date'],
+                'reg_date' => $item['reg_date'],
+                
+                // 'is_first_pay' => $item['is_first_pay'],
+                'agent_name' => $item['agent_name'],
+                'auth_name' => $item['auth_name'],
+            ];
+        }, $data);
+      
+        // 是否首次付费
+        // $filter = [
+        //     'is_first_pay' => [
+        //         ['value' => 1, 'label' => '是'],
+        //         ['value' => 0, 'label' => '否']
+        //     ]
+        // ];
+        $file_name = '充值明细_'.date('YmdHis').'.xlsx';
+        $header = ['订单号', '用户名', '渠道ID', '广告位ID', '游戏名', '服务器ID', '服务器名', '支付方式', '充值金额', '充值时间', '注册时间',  '渠道名', '负责人'];
+       
+        $writer = new OpenSpoutWriter($file_name);
+        $writer->setWidth([15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15]);
+        $writer->setHeader($header);
+        $writer->setData($data, null);
+        // $writer->setData($data, null, $filter);
+        $file_path = $writer->returnFile();
+        return response()->download($file_path, urlencode($file_name));
+    }
+}

+ 30 - 0
app/v1/logic/gameLog/SdkRegLogLogic.php

@@ -24,4 +24,34 @@ class SdkRegLogLogic extends BaseLogic
         $this->model = new SdkRegLog();
     }
 
+    /**
+     * 分页查询数据
+     * @param $query
+     * @return mixed
+     */
+    public function getList($query): mixed
+    {
+        $saiType = request()->input('saiType', 'list');
+        $page = request()->input('page', 1);
+        $limit = request()->input('limit', 10);
+        $orderBy = request()->input('orderBy', '');
+        $regTime = request()->input('reg_time', '');
+        $orderType = request()->input('orderType', $this->orderType);
+        if(empty($orderBy)) {
+            $orderBy = $this->orderField !== '' ? $this->orderField : $this->model->getPk();
+        }
+        $query->order($orderBy, $orderType);
+
+       
+        $tableName = 'sdk_reg_log_'.date('Ym',strtotime($regTime));
+   
+        
+        // 切换表名
+        $query->table($tableName);
+        if ($saiType === 'all') {
+            return $query->select()->toArray();
+        }
+        return $query->paginate($limit, false, ['page' => $page])->toArray();
+    }
+
 }

+ 60 - 0
app/v1/model/gameLog/SdkLoginLog.php

@@ -0,0 +1,60 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\model\gameLog;
+
+use plugin\saiadmin\basic\BaseNormalModel;
+
+/**
+ * 登录日志模型
+ */
+class SdkLoginLog extends BaseNormalModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 数据库表名称
+     * @var string
+     */
+    protected $table = 'sdk_login_log_202507';
+
+    /**
+     * 数据库连接
+     * @var string
+     */
+    protected $connection = 'db_game_log';
+
+
+    /**
+     * 登录时间搜索
+     * 传入的是日期, 搜索的是同一天
+     * 
+     */
+    public function searchLoginTimeAttr($query, $value)
+    {
+        $sTime = strtotime($value . " 00:00:00");
+        $eTime = strtotime($value . " 23:59:59");
+
+        $query->where('login_time', 'between', [$sTime, $eTime]);
+    }
+
+    /**
+     * 注册时间搜索
+     * 传入的是日期, 搜索的是同一天
+     * 
+     */
+    public function searchRegTimeAttr($query, $value)
+    {
+        $sTime = strtotime($value . " 00:00:00");
+        $eTime = strtotime($value . " 23:59:59");
+        $query->where('reg_time', 'between', [$sTime, $eTime]);
+    }
+
+}

+ 69 - 0
app/v1/model/gameLog/SdkOrderRank.php

@@ -0,0 +1,69 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\model\gameLog;
+
+use plugin\saiadmin\basic\BaseNormalModel;
+
+/**
+ * 充值排行模型
+ */
+class SdkOrderRank extends BaseNormalModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'orderid';
+
+    /**
+     * 数据库表名称
+     * @var string
+     */
+    protected $table = 'sdk_order_success';
+
+    /**
+     * 数据库连接
+     * @var string
+     */
+    protected $connection = 'db_game_log';
+
+    /**
+     * 游戏名 保存数组转换
+     */
+    public function setGameIdAttr($value)
+    {
+        return json_encode($value, JSON_UNESCAPED_UNICODE);
+    }
+
+    /**
+     * 游戏名 读取数组转换
+     */
+    public function getGameIdAttr($value)
+    {
+        return json_decode($value ?? '', true);
+    }
+
+    /**
+     * 注册日期 搜索
+     */
+    public function searchRegDateAttr($query, $value)
+    {
+         $sTime = strtotime($value[0] . " 00:00:00");
+        $eTime = strtotime($value[1] . " 23:59:59");    
+        $query->whereTime('reg_date', 'between', [$sTime, $eTime]);
+    }
+
+    /**
+     * 充值日期 搜索
+     */
+    public function searchPayDateAttr($query, $value)
+    {
+       $sTime = strtotime($value[0] . " 00:00:00");
+        $eTime = strtotime($value[1] . " 23:59:59");    
+        $query->whereTime('pay_date', 'between', [$sTime, $eTime]);
+    }
+}

+ 68 - 0
app/v1/model/gameLog/SdkOrderSuccess.php

@@ -0,0 +1,68 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\model\gameLog;
+
+use plugin\saiadmin\basic\BaseNormalModel;
+
+/**
+ * 订单记录表(支付成功)模型
+ */
+class SdkOrderSuccess extends BaseNormalModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'orderid';
+
+    /**
+     * 数据库表名称
+     * @var string
+     */
+    protected $table = 'sdk_order_success';
+
+    /**
+     * 数据库连接
+     * @var string
+     */
+    protected $connection = 'db_game_log';
+
+    /**
+     * 游戏名 保存数组转换
+     */
+    public function setGameIdAttr($value)
+    {
+        return json_encode($value, JSON_UNESCAPED_UNICODE);
+    }
+
+    /**
+     * 游戏名 读取数组转换
+     */
+    public function getGameIdAttr($value)
+    {
+        return json_decode($value ?? '', true);
+    }
+
+    /**
+     * 注册日期 搜索
+     */
+    public function searchRegDateAttr($query, $value)
+    {
+        $query->whereTime('reg_date', 'between', $value);
+    }
+
+    /**
+     * 充值日期 搜索
+     */
+    public function searchPayDateAttr($query, $value)
+    {
+        $sTime = strtotime($value[0] . " 00:00:00");
+        $eTime = strtotime($value[1] . " 23:59:59");    
+        $query->whereTime('pay_date', 'between', [$sTime, $eTime]);
+    }
+
+}

+ 14 - 0
app/v1/model/gameLog/SdkRegLog.php

@@ -39,4 +39,18 @@ class SdkRegLog extends BaseNormalModel
         $query->where('user_name', 'like', '%'.$value.'%');
     }
 
+    /**
+     * 注册时间搜索
+     * 传入的是日期, 搜索的是同一天
+     * 
+     */
+    public function searchRegTimeAttr($query, $value)
+    {
+        
+        $sTime = strtotime($value.' 00:00:00');
+        $eTime = strtotime($value.' 23:59:59');
+      
+      
+        $query->where('reg_time', 'between', [$sTime, $eTime]);
+    }
 }

+ 38 - 0
app/v1/validate/gameLog/SdkLoginLogValidate.php

@@ -0,0 +1,38 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\validate\gameLog;
+
+use think\Validate;
+
+/**
+ * 登录日志验证器
+ */
+class SdkLoginLogValidate extends Validate
+{
+    /**
+     * 定义验证规则
+     */
+    protected $rule =   [
+    ];
+
+    /**
+     * 定义错误信息
+     */
+    protected $message  =   [
+    ];
+
+    /**
+     * 定义场景
+     */
+    protected $scene = [
+        'save' => [
+        ],
+        'update' => [
+        ],
+    ];
+
+}

+ 38 - 0
app/v1/validate/gameLog/SdkOrderRankValidate.php

@@ -0,0 +1,38 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\validate\gameLog;
+
+use think\Validate;
+
+/**
+ * 充值排行验证器
+ */
+class SdkOrderRankValidate extends Validate
+{
+    /**
+     * 定义验证规则
+     */
+    protected $rule =   [
+    ];
+
+    /**
+     * 定义错误信息
+     */
+    protected $message  =   [
+    ];
+
+    /**
+     * 定义场景
+     */
+    protected $scene = [
+        'save' => [
+        ],
+        'update' => [
+        ],
+    ];
+
+}

+ 38 - 0
app/v1/validate/gameLog/SdkOrderSuccessValidate.php

@@ -0,0 +1,38 @@
+<?php
+// +----------------------------------------------------------------------
+// | saiadmin [ saiadmin快速开发框架 ]
+// +----------------------------------------------------------------------
+// | Author: your name
+// +----------------------------------------------------------------------
+namespace app\v1\validate\gameLog;
+
+use think\Validate;
+
+/**
+ * 订单记录表(支付成功)验证器
+ */
+class SdkOrderSuccessValidate extends Validate
+{
+    /**
+     * 定义验证规则
+     */
+    protected $rule =   [
+    ];
+
+    /**
+     * 定义错误信息
+     */
+    protected $message  =   [
+    ];
+
+    /**
+     * 定义场景
+     */
+    protected $scene = [
+        'save' => [
+        ],
+        'update' => [
+        ],
+    ];
+
+}

+ 25 - 2
plugin/saiadmin/basic/BaseLogic.php

@@ -262,7 +262,29 @@ class BaseLogic
         $query->order($orderBy, $orderType);
         return $query->select()->toArray();
     }
-
+    /**
+     * 获取IP地理位置
+     */
+    public function getIpLocation($ip): string
+    {
+        $ip2region = new \Ip2Region();
+        try {
+            $region = $ip2region->memorySearch($ip);
+        } catch (\Exception $e) {
+            return '未知';
+        }
+        list($country, $number, $province, $city, $network) = explode('|', $region['region']);
+        if ($network === '内网IP') {
+            return $ip.' '.$network;
+        }
+        if ($country == '中国') {
+            return $ip.' '.$province.'-'.$city.':'.$network;
+        } else if ($country == '0') {
+            return $ip.' 未知';
+        } else {
+            return $ip.' '.$country;
+        }
+    }
 
     /**
      * 转换列表列
@@ -270,7 +292,7 @@ class BaseLogic
      * @param $fields
      * @return mixed
      */
-    public function trandformListColumn($data, $fields=['site', 'agent', 'game', 'auth', 'media',  'pay_channel', 'game_pay_channel']){
+    public function trandformListColumn($data, $fields=['site', 'agent', 'game', 'auth', 'media',  'pay_channel', 'game_pay_channel', 'ip']){
 
         if(in_array('site', $fields)){
             $agentSiteList = Db::connect('db_advert')->table('agent_site')->field('id,name')->select()->toArray();
@@ -330,6 +352,7 @@ class BaseLogic
             $data[$key]['wechat_wap_name'] = !empty($gamePayChannelList) ? $gamePayChannelList[$value['wechat_wap']] ?? '':'';
             $data[$key]['wechat_scan_name'] = !empty($gamePayChannelList) ? $gamePayChannelList[$value['wechat_scan']] ?? '':'';
             $data[$key]['wechat_jsapi_name'] = !empty($gamePayChannelList) ? $gamePayChannelList[$value['wechat_jsapi']] ?? '':'';
+            $data[$key]['ip'] = in_array('ip', $fields) ? $this->getIpLocation($value['ip']) : '';
         }
         return $data;
     }

BIN
plugin/saiadmin/public/export/充值明细_20250709151816.xlsx


BIN
plugin/saiadmin/public/export/充值明细_20250709152147.xlsx


BIN
plugin/saiadmin/public/export/充值明细_20250709152232.xlsx