PC-202304251453\Administrator hace 5 meses
padre
commit
bdd4c40d6b

+ 1 - 3
app/v1/controller/dataReport/MaterialController.php

@@ -7,7 +7,6 @@ namespace app\v1\controller\dataReport;
 
 use app\v1\logic\dataReport\MaterialLogic;
 use plugin\saiadmin\basic\BaseController;
-use plugin\saiadmin\basic\BaseLogic;
 use support\Request;
 
 class MaterialController extends BaseController
@@ -17,7 +16,6 @@ class MaterialController extends BaseController
     public function __construct()
     {
         $this->logic = new MaterialLogic();
-        $this->baseLogic = new BaseLogic();
         parent::__construct();
     }
 
@@ -36,7 +34,7 @@ class MaterialController extends BaseController
             ['group', ''],
         ]);
         $result = $this->logic->getMaterialList($where);
-        $result['data'] = $this->baseLogic->trandformListColumn($result['data'], ['auth', 'author']);
+        $result['data'] = $this->logic->trandformListColumn($result['data'], ['auth', 'author']);
         return $this->success($result);
     }
 }

+ 1 - 0
app/v1/controller/dataReport/UserLogController.php

@@ -123,6 +123,7 @@ class UserLogController extends BaseController
             ['reg_time', ''],
         ]);
         $data = $this->logic->getRoleDataList($where);
+        $data['data'] = $this->logic->trandformListColumn($data['data'], ['game', 'ip', 'agent', 'auth']);
         return $this->success($data);
     }
 

+ 0 - 1
app/v1/logic/dataReport/MaterialLogic.php

@@ -82,7 +82,6 @@ class MaterialLogic extends BaseLogic
 
         $totalData = [];
         foreach ($data as &$row) {
-
             if ($params['group'] == 2) {
                 $row['material_name'] = '';
                 $row['material_id'] = '';

+ 1 - 33
app/v1/logic/dataReport/UserLogLogic.php

@@ -291,39 +291,7 @@ class UserLogLogic extends BaseLogic
             $unionQuery[] = $db->table($tableName)->whereRaw(where: $whereRaw)->buildSql();
         }
         $fullSql = "(" . implode(' UNION ALL ', $unionQuery) . ") as unTable";
-        $roleData = $db->table($fullSql)->order($orderBy, $orderType)->paginate($limit)->toArray();
 
-        // 合并相同uid的数据,将角色信息放到数组中
-        $mergedData = [];
-        foreach ($roleData as $item) {
-            $uid = $item['uid'];
-
-            if (!isset($mergedData[$uid])) {
-                // 创建用户基础信息,排除角色相关字段
-                $baseInfo = array_diff_key($item, array_flip(['role_id', 'role_name', 'role_level']));
-                $mergedData[$uid] = $baseInfo + ['roles' => []];
-            }
-
-            // 添加角色信息到数组
-            $mergedData[$uid]['roles'][] = [
-                'server_name' => $item['server_name'],
-                'role_name' => $item['role_name'],
-                'role_level' => $item['role_level'],
-            ];
-        }
-
-        // 转换回数组格式
-        $roleData = array_values($mergedData);
-        $roleData = $this->trandformListColumn($roleData, ['game', 'ip', 'auth', 'agent']);
-        $count = count($roleData);
-
-        return [
-            'data' => $roleData,
-            'current_page' => $page,
-            'per_page' => $limit,
-            'last_page' => ceil($count / $limit),
-            'has_more' => $page < ceil($count / $limit),
-            'total' => $count
-        ];
+        return $db->table($fullSql)->order($orderBy, $orderType)->paginate($limit)->toArray();
     }
 }

+ 93 - 93
plugin/saiadmin/basic/BaseLogic.php

@@ -173,7 +173,7 @@ class BaseLogic
         $limit = request()->input('limit', 10);
         $orderBy = request()->input('orderBy', '');
         $orderType = request()->input('orderType', $this->orderType);
-        if(empty($orderBy)) {
+        if (empty($orderBy)) {
             $orderBy = $this->orderField !== '' ? $this->orderField : $this->model->getPk();
         }
         $query->order($orderBy, $orderType);
@@ -193,7 +193,7 @@ class BaseLogic
     {
         $orderBy = request()->input('orderBy', '');
         $orderType = request()->input('orderType', $this->orderType);
-        if(empty($orderBy)) {
+        if (empty($orderBy)) {
             $orderBy = $this->orderField !== '' ? $this->orderField : $this->model->getPk();
         }
         $query->order($orderBy, $orderType);
@@ -206,92 +206,91 @@ class BaseLogic
      * @param $fields
      * @return mixed
      */
-    public function trandformListColumn($data, $fields=['site', 'agent', 'game', 'auth', 'author', 'media',  'pay_channel', 'game_pay_channel', 'ip']){
+    public function trandformListColumn($data, $fields = ['site', 'agent', 'game', 'auth', 'author', 'media', 'pay_channel', 'game_pay_channel', 'ip'])
+    {
 
-        if(in_array('site', $fields)){
+        if (in_array('site', $fields)) {
             $agentSiteList = Db::connect('db_advert')->table('agent_site')->field('id,name')->select()->toArray();
             $agentSiteList = array_column($agentSiteList, 'name', 'id');
-          
+
         }
-        if(in_array('agent', $fields)){
+        if (in_array('agent', $fields)) {
             $agentList = Db::connect('db_advert')->table('agent_list')->field('id,name')->select()->toArray();
             $agentList = array_column($agentList, 'name', 'id');
-           
+
         }
-        if(in_array('game', $fields)){
+        if (in_array('game', $fields)) {
             $gameList = Db::connect('db_center')->table('pf_game')->field('id,name,os,ios_appid')->select()->toArray();
             $gameList = array_column($gameList, null, 'id');
-           
+
         }
-        if(in_array('auth', $fields)){
+        if (in_array('auth', $fields)) {
             $authList = Db::connect('db_system')->table('sa_system_user')->field('id,username')->select()->toArray();
             $authList = array_column($authList, 'username', 'id');
-          
+
         }
-        if(in_array('author', $fields)){
+        if (in_array('author', $fields)) {
             $authorList = Db::connect('db_system')->table('sa_system_user')->field('id,username')->select()->toArray();
             $authorList = array_column($authorList, 'username', 'id');
         }
-        if(in_array('media', $fields)){
+        if (in_array('media', $fields)) {
             $mediaList = Db::connect('db_advert')->table('media_list')->field('id,name')->select()->toArray();
             $mediaList = array_column($mediaList, 'name', 'id');
         }
 
-        if(in_array('pay_channel', $fields)){
-            $payChannelList = Db::connect('db_center')->table('pay_channel')->field('id,name')->where('status',1)->select()->toArray();
+        if (in_array('pay_channel', $fields)) {
+            $payChannelList = Db::connect('db_center')->table('pay_channel')->field('id,name')->where('status', 1)->select()->toArray();
             $payChannelList = array_column($payChannelList, 'name', 'id');
         }
 
-        if(in_array('game_pay_channel', $fields)){
-            $gamePayChannelList = Db::connect('db_center')->table('pay_channel')->field('id,name')->where('status',1)->select()->toArray();
+        if (in_array('game_pay_channel', $fields)) {
+            $gamePayChannelList = Db::connect('db_center')->table('pay_channel')->field('id,name')->where('status', 1)->select()->toArray();
             $gamePayChannelList = array_column($gamePayChannelList, 'name', 'id');
         }
 
-
-
-        foreach ($data as $key => $value) {
-
-
-            if(!empty($agentSiteList) ){
-                $data[$key]['site_name'] = $agentSiteList[$value['site_id']] ?? '';
+        foreach ($data as &$value) {
+            if (!empty($agentSiteList)) {
+                $value['site_name'] = $agentSiteList[$value['site_id']] ?? '';
             }
-            if(!empty($agentList) ){
-                $data[$key]['agent_name'] =$agentList[$value['agent_id']] ?? '';
+            if (!empty($agentList)) {
+                $value['agent_name'] = $agentList[$value['agent_id']] ?? '';
             }
-            if(!empty($gameList) ){
-                $data[$key]['game_name'] = $gameList[$value['game_id']]['name'] ?? '';
-                $data[$key]['game_os'] =  $gameList[$value['game_id']]['os'] ?? '';
-                $data[$key]['ios_appid'] =  $gameList[$value['game_id']]['ios_appid'] ?? '';
+            if (!empty($gameList)) {
+                $value['game_name'] = $gameList[$value['game_id']]['name'] ?? '';
+                $value['game_os'] = $gameList[$value['game_id']]['os'] ?? '';
+                $value['ios_appid'] = $gameList[$value['game_id']]['ios_appid'] ?? '';
             }
 
-            if(!empty($authList) ){
-                $data[$key]['auth_name'] = $authList[$value['auth_id']] ?? '';
+            if (!empty($authList)) {
+                $value['auth_name'] = $authList[$value['auth_id']] ?? '';
             }
 
-            if(!empty($authorList) ){
-                $data[$key]['author_name'] = $authorList[$value['author_id']] ?? '';
+            if (!empty($authorList)) {
+                $value['author_name'] = $authorList[$value['author_id']] ?? '';
             }
 
-            if(!empty($mediaList) ){
-                $data[$key]['media_name'] = $mediaList[$value['media_id']] ?? '';
+            if (!empty($mediaList)) {
+                $value['media_name'] = $mediaList[$value['media_id']] ?? '';
             }
 
-            if(!empty($payChannelList) ){
-                $data[$key]['pay_channel_name'] = $payChannelList[$value['pay_channel_id']] ?? '';
+            if (!empty($payChannelList)) {
+                $value['pay_channel_name'] = $payChannelList[$value['pay_channel_id']] ?? '';
             }
 
-            if(!empty($gamePayChannelList)){
-                $data[$key]['alipay_wap_name'] = $gamePayChannelList[$value['alipay_wap']] ?? '-';
-                $data[$key]['inapp_name'] = $gamePayChannelList[$value['inapp']] ?? '-';
-                $data[$key]['wechat_wap_name'] = $gamePayChannelList[$value['wechat_wap']] ?? '-';
-                $data[$key]['wechat_scan_name'] = $gamePayChannelList[$value['wechat_scan']] ?? '-';
-                $data[$key]['wechat_jsapi_name'] = $gamePayChannelList[$value['wechat_jsapi']] ?? '-';
+            if (!empty($gamePayChannelList)) {
+                $value['alipay_wap_name'] = $gamePayChannelList[$value['alipay_wap']] ?? '-';
+                $value['inapp_name'] = $gamePayChannelList[$value['inapp']] ?? '-';
+                $value['wechat_wap_name'] = $gamePayChannelList[$value['wechat_wap']] ?? '-';
+                $value['wechat_scan_name'] = $gamePayChannelList[$value['wechat_scan']] ?? '-';
+                $value['wechat_jsapi_name'] = $gamePayChannelList[$value['wechat_jsapi']] ?? '-';
             }
 
-            if(in_array('ip', $fields)){
-                $data[$key]['ip'] = getIpLocation($value['ip']) ?? '';
+            if (in_array('ip', $fields)) {
+                $value['ip'] = getIpLocation($value['ip']) ?? '';
             }
         }
+        unset($value);
+
         return $data;
     }
 
@@ -307,7 +306,7 @@ class BaseLogic
             mkdir($full_dir, 0777, true);
         }
         $ext = $file->getUploadExtension() ?: null;
-        $full_path = $full_dir. md5(time()). '.'. $ext;
+        $full_path = $full_dir . md5(time()) . '.' . $ext;
         $file->move($full_path);
         return $full_path;
     }
@@ -345,19 +344,19 @@ class BaseLogic
         $userInfo = $userAuthCache->getUserInfo();
         // Todo 如果角色权限,超过跳过权限限制
         $roleIds = array_column($userInfo['roleList'], 'id');
-        if(in_array(1, $roleIds)){
+        if (in_array(1, $roleIds)) {
             return $data;
         }
 
         // Todo 1、游戏权限
         $authGameList = $userInfo['deptList']['game_list'];
-        if($authGameList != '*'){
+        if ($authGameList != '*') {
             $authGameIds = explode(',', $authGameList);
 
-            if(!empty($data['game_id'])){
+            if (!empty($data['game_id'])) {
                 $inputGameIds = is_array($data['game_id']) ? $data['game_id'] : explode(',', $data['game_id']);
                 $data['game_id'] = array_values(array_intersect($inputGameIds, $authGameIds)); // 如果传入了game_id,则取权限交集
-            }else{
+            } else {
                 // 如果没传入game_id,则取权限
                 $data['game_id'] = $authGameIds;
             }
@@ -368,22 +367,22 @@ class BaseLogic
         $deptId = $userInfo['deptList']['id'];
         // 广告权限,自己 or 全部
         $authAdPermission = $userInfo['ad_permission'];
-        if($authAdPermission){
-            if($authAdPermission==1){ // Todo 1、仅自己
+        if ($authAdPermission) {
+            if ($authAdPermission == 1) { // Todo 1、仅自己
                 $data['auth_id'] = [$userId];
-            } elseif($authAdPermission==2) { // Todo 2、自己部门
+            } elseif ($authAdPermission == 2) { // Todo 2、自己部门
                 $underUserIds = Db::connect('db_system')->table('sa_system_user')->where('dept_id', 'in', $deptId)->column('id');
-                if(!empty($data['auth_id'])) { // 如果传入了负责人ID,则取交集
-                    $data['auth_id'] = array_values(array_intersect( $data['auth_id'], array_values($underUserIds)));
-                }else{ // 如果没有传入负责人ID, 则取当前用户以及下面组员
-                    $data['auth_id'] =  array_values($underUserIds);
+                if (!empty($data['auth_id'])) { // 如果传入了负责人ID,则取交集
+                    $data['auth_id'] = array_values(array_intersect($data['auth_id'], array_values($underUserIds)));
+                } else { // 如果没有传入负责人ID, 则取当前用户以及下面组员
+                    $data['auth_id'] = array_values($underUserIds);
                 }
             }
         }
 
         // 看指定游戏的自然量
         $authNormalGameList = $userInfo['normal_game_list']; // 可看自然量的游戏
-        if($authNormalGameList!='*' && $authNormalGameList!='-1' && !empty($data['game_id'])){
+        if ($authNormalGameList != '*' && $authNormalGameList != '-1' && !empty($data['game_id'])) {
             // 则取auth_normal_game_list交集
             $data['normal_game_id'] = array_values(array_intersect(explode(',', $authNormalGameList), $data['game_id']));
         }
@@ -392,39 +391,64 @@ class BaseLogic
     }
 
     // Todo 公共 whereRaw 子句
+
+    public function generateYearUnionList($namePrefix, $regDate, $whereRaw = '1=1', $field = '*', $group = null)
+    {
+        $yearRange = getYearRange($regDate[0], $regDate[1]);
+        return $this->generateUnionList($namePrefix, $yearRange, $whereRaw, $field, $group);
+    }
+
+    public function generateUnionList($namePrefix, $range, $whereRaw = '', $field = '*', $group = null)
+    {
+        $sqlParts = [];
+        foreach ($range as $ext) {
+            $tableName = $namePrefix . '_' . $ext;
+            $sqlParts[] = "SELECT * FROM {$tableName} WHERE {$whereRaw}";
+        }
+        $unionSql = implode(" UNION ALL ", $sqlParts);
+        $finalSql = "
+            SELECT {$field} FROM ( {$unionSql} ) AS all_total_day
+        ";
+        if (!empty($group)) {
+            $finalSql .= " GROUP BY {$group}";
+        }
+
+        return Db::connect('db_data_report')->query($finalSql);
+    }
+
     protected function getCommonWhereRaw($params): string
     {
         $eqParams = ["user_name", "media_id", "site_id", "agent_id", "vt", "server_id", "server_name"];
         $inParams = ["game_id", "auth_id"];
-        $betweenParams  = ["tdate", "reg_date", "pay_date"];
-        $timeParams     = ["reg_time", "pay_time", "login_time"];
+        $betweenParams = ["tdate", "reg_date", "pay_date"];
+        $timeParams = ["reg_time", "pay_time", "login_time"];
         $DateTimeParams = ["create_time"];
 
         // Todo And条件
         $whereRaw = " 1=1 ";
-        foreach ($params as $key => $value){
+        foreach ($params as $key => $value) {
             if (in_array($key, $eqParams)) {
                 $whereRaw .= " AND `{$key}`='{$value}'";
             } elseif (in_array($key, $inParams) && !empty($value)) {
                 $value = is_string($value) ? explode(',', $value) : $value;
-                $whereRaw .= " AND `{$key}` IN ('".implode("','", $value)."')";
+                $whereRaw .= " AND `{$key}` IN ('" . implode("','", $value) . "')";
             } elseif (in_array($key, $betweenParams) && !empty($value)) {
                 $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
             } elseif (in_array($key, $DateTimeParams) && !empty($value)) {
-                $value[0] = $value[0] .' 00:00:00';
-                $value[1] = $value[1] .' 23:59:59';
+                $value[0] = $value[0] . ' 00:00:00';
+                $value[1] = $value[1] . ' 23:59:59';
                 $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
             } elseif (in_array($key, $timeParams) && !empty($value)) {
-                $value[0] = strtotime($value[0] .' 00:00:00');
-                $value[1] = strtotime($value[1] .' 23:59:59');
+                $value[0] = strtotime($value[0] . ' 00:00:00');
+                $value[1] = strtotime($value[1] . ' 23:59:59');
                 $whereRaw .= " AND `{$key}` BETWEEN '{$value[0]}' AND '{$value[1]}'";
             }
         }
 
         // Todo 自然量走 Or 条件
         $whereOr = [];
-        if(!empty($params['normal_game_id'])){
-            foreach ($params['normal_game_id'] as $gameId){
+        if (!empty($params['normal_game_id'])) {
+            foreach ($params['normal_game_id'] as $gameId) {
                 $whereOr[] = "(game_id = {$gameId} AND auth_id=0)";
             }
         }
@@ -432,28 +456,4 @@ class BaseLogic
 
         return $whereRaw . ($whereOr ? " OR {$whereOr}" : "");
     }
-
-    public function generateYearUnionList($namePrefix, $regDate, $whereRaw = '1=1', $field = '*', $group = null)
-    {
-        $yearRange = getYearRange($regDate[0], $regDate[1]);
-        return $this->generateUnionList($namePrefix, $yearRange, $whereRaw, $field, $group);
-    }
-
-    public function generateUnionList($namePrefix, $range, $whereRaw = '', $field = '*', $group = null)
-    {
-        $sqlParts = [];
-        foreach ($range as $ext) {
-            $tableName = $namePrefix .'_'. $ext;
-            $sqlParts[] = "SELECT * FROM {$tableName} WHERE {$whereRaw}";
-        }
-        $unionSql = implode(" UNION ALL ", $sqlParts);
-        $finalSql = "
-            SELECT {$field} FROM ( {$unionSql} ) AS all_total_day
-        ";
-        if (!empty($group)) {
-            $finalSql .= " GROUP BY {$group}";
-        }
-
-        return Db::connect('db_data_report')->query($finalSql);
-    }
 }