diff --git a/Addons/SiteStat/SiteStatAddon.class.php b/Addons/SiteStat/SiteStatAddon.class.php index 7fbb7c8d0..7f2ee956f 100644 --- a/Addons/SiteStat/SiteStatAddon.class.php +++ b/Addons/SiteStat/SiteStatAddon.class.php @@ -9,7 +9,7 @@ namespace Addons\SiteStat; use Common\Controller\Addon; - +use Base\Service\AdminNoticeService; /** * 系统环境信息插件 * @author thinkphp @@ -700,13 +700,19 @@ class SiteStatAddon extends Addon //$gift_list = array_merge($ty_gift,$new_gift_list); */ /* 2018-08-24 lwx add start */ - $gift_list = M('giftbag','tab_')->field('tab_giftbag.id,tab_giftbag.giftbag_name,tab_giftbag.server_id,tab_giftbag.server_name,tab_game.game_name') - - ->join('tab_game on (tab_game.id = tab_giftbag.game_id)','inner') - - ->where('LENGTH(tab_giftbag.novice)-LENGTH(REPLACE(tab_giftbag.novice, ",", ""))+1<10')->select(); - /* 2018-08-24 lwx add end */ + $gift_list = M('giftbag','tab_')->field('tab_giftbag.id,tab_giftbag.giftbag_name,tab_giftbag.server_id,tab_giftbag.server_name,tab_game.game_name') + + ->join('tab_game on (tab_game.id = tab_giftbag.game_id)','inner') + + ->where('LENGTH(tab_giftbag.novice)-LENGTH(REPLACE(tab_giftbag.novice, ",", ""))+1<10')->select(); + /* 2018-08-24 lwx add end */ + + $userAuth = session('user_auth'); + $adminNoticeService = new AdminNoticeService(); + $adminNoticeService->accept($userAuth['uid']); + $notices = $adminNoticeService->getAdminNotices($userAuth['uid']); + $this->assign('notices',$notices); $this->assign('gift_list',$gift_list); } diff --git a/Addons/SiteStat/info.html b/Addons/SiteStat/info.html index 8b4765f33..7334d2586 100644 --- a/Addons/SiteStat/info.html +++ b/Addons/SiteStat/info.html @@ -24,6 +24,28 @@ $(document).ready(function () { width: 60%; padding-left: 6%; } + .notice-btn { + display: inline-block; + /* width: 86px; */ + height: 22px; + line-height: 22px; + text-align: center; + vertical-align: middle; + color: #ffffff; + border: 1px solid currentColor; + border-radius: 3px; + margin-left: 5px; + padding: 0px 5px; + background-color: #18b1ea; + cursor: pointer; + } + .notice-btn.readed-btn { + color: #ffffff; + background-color: #a5b6c8; + } + .notice-btn.delete-notice-btn { + background-color: #f56c6c; + }
@@ -174,27 +196,48 @@ $(document).ready(function () {
- + + + + + + + - - - - + + + + - - - - + + + +
+ + + + + + + + + + + + + + +
【返利设置】【{$vo.game_name}】充值返利已到期
【返利设置】【{$vo.game_name}】充值返利已到期
【礼包列表】 - - - 【{$vo.game_name}】{$vo.giftbag_name}数量不足 - - 【{$vo.game_name}】{$vo.server_name} {$vo.giftbag_name}数量不足 - - -
【礼包列表】 + + + 【{$vo.game_name}】{$vo.giftbag_name}数量不足 + + 【{$vo.game_name}】{$vo.server_name} {$vo.giftbag_name}数量不足 + + +
@@ -472,5 +515,42 @@ $(".js_indexSetup").click(function(){ content: ['{:U("Index/setup")}', 'no'], //iframe的url,no代表不显示滚动条 }); }); +$('.read-btn').on({ + click: function () { + var that = this + var id = $(this).parents('tr').eq(0).attr('data-id') + $.ajax({ + url: '{:U("User/readAdminNotice")}', + type: 'post', + dataType: 'json', + data: {id: id}, + success: function(result) { + if (result.status == 1) { + $(that).removeClass('read-btn').addClass('readed-btn').off('click') + $(that).html('已读') + } + layer.msg(result.info) + } + }) + } +}) +$('.delete-notice-btn').on({ + click: function () { + var that = this + var id = $(this).parents('tr').eq(0).attr('data-id') + $.ajax({ + url: '{:U("User/deleteAdminNotice")}', + type: 'post', + dataType: 'json', + data: {id: id}, + success: function(result) { + if (result.status == 1) { + $(that).parents('tr').eq(0).remove() + } + layer.msg(result.info) + } + }) + } +}) \ No newline at end of file diff --git a/Application/Admin/Common/extend.php b/Application/Admin/Common/extend.php index fe8e36175..345c47ce2 100644 --- a/Application/Admin/Common/extend.php +++ b/Application/Admin/Common/extend.php @@ -1653,6 +1653,20 @@ function getPowerPromoteIds() return $promoteIds; } +function resetUserAuth() +{ + $userAuth = session('user_auth'); + $adminData = getAdminData($userAuth['uid']); + $groupId = getGameGroup($userAuth['uid']); + $userAuth['data_empower_type'] = $adminData['data_empower_type']; + $userAuth['data_president'] = $adminData['data_president']; + $userAuth['show_data'] = $adminData['show_data']; + session('user_group_id',$groupId); + session('user_auth', $userAuth); + session('user_auth_sign', data_auth_sign($userAuth)); + session('user_auth_promote_ids', null); +} + /** * 为数据权限添加筛选参数 * @param array $map 查询条件 @@ -3090,3 +3104,14 @@ function dateFormat($date) { return date("Y.m.d",strtotime($date)); } + +function getOrderHtml($field, $orderField, $orderType) +{ + if ($orderField == $field && $orderType == 'asc') { + return ''; + } elseif ($orderField == $field && $orderType == 'desc') { + return ''; + } else { + return ''; + } +} \ No newline at end of file diff --git a/Application/Admin/Controller/AuthManagerController.class.php b/Application/Admin/Controller/AuthManagerController.class.php index c72fca0cf..cbd5bd396 100644 --- a/Application/Admin/Controller/AuthManagerController.class.php +++ b/Application/Admin/Controller/AuthManagerController.class.php @@ -571,6 +571,9 @@ class AuthManagerController extends AdminController{ 'data_president'=>$promoteData, 'show_data'=>$show_data ))) { + + resetUserAuth(); + addOperationLog(array( "op_type"=>1, "key"=> M("AuthGroup")->where("id={$gid}")->field("title")->find()['title'], diff --git a/Application/Admin/Controller/FinanceController.class.php b/Application/Admin/Controller/FinanceController.class.php index 4ecf1027c..b4578608c 100644 --- a/Application/Admin/Controller/FinanceController.class.php +++ b/Application/Admin/Controller/FinanceController.class.php @@ -1446,245 +1446,118 @@ class FinanceController extends ThinkController $this->display(); } - - public function valueDetail($p=1) { - + public function valueDetail($p=1) + { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $row=10; - if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;} - $nowTime = date('Y-m-d'); - $initBegTime = date('Y-m-d', strtotime('-6 day', strtotime($nowTime))); - $initEndTime = date('Y-m-d', time()); - $sort = $_REQUEST['sort']; - if (empty($sort)) { - $sort = 13; - } - if(!empty($_REQUEST['user_account'])) { - $map['account'] = $_REQUEST['user_account']; - $map0['account'] = $_REQUEST['user_account']; - $userId = M('user', 'tab_')->where(['account'=>$_REQUEST['user_account']])->getField('id'); - - $map1['user_id'] = $userId; - $map2['user_id'] = $userId; - $map3['user_id'] = $userId; - $map4['user_id'] = $userId; + if(isset($_REQUEST['row'])) { + $row = $_REQUEST['row']; + } else { + $row = 10; } - if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { - $map['create_time'] = array('between', [strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 86399]); - - } elseif (!empty($_REQUEST['timestart']) && empty($_REQUEST['timeend'])) { - $map['create_time'] = array('between', [strtotime($_REQUEST['timestart']), time()]); - } elseif (empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { - $map['create_time'] = array('elt', (strtotime($_REQUEST['timeend']) + 86399)); + $isExport = I('export', 0); + $startedAt = I('timestart', ''); + $endedAt = I('timeend', ''); + $userAccount = I('user_account', ''); + $orderField = I('order_field', ''); + $orderType = I('order_type', ''); - }elseif (empty($_REQUEST['timestart']) && empty($_REQUEST['timeend']) && empty(I('user_account'))) { - $map['create_time'] = array('between', [strtotime($initBegTime), strtotime($initEndTime) + 86399]); - - } - $order = 'id desc'; - if ($sort == 1) { - $order = 'spendvalue desc'; - } - if ($sort == 2) { - $order = 'deposit desc'; + $map = []; + $lastMap = []; + $map['_string'] = $lastMap['_string'] = '1=1'; + if ($startedAt != '') { + $map['_string'] .= ' and create_time >=' . strtotime($startedAt . ' 00:00:00'); } - if ($sort == 3 || $sort == 5) { - $order = 'spendvalue desc'; + if ($endedAt != '') { + $map['_string'] .= ' and create_time <=' . strtotime($endedAt . ' 23:59:59'); + $lastMap['_string'] .= ' and create_time <=' . strtotime($endedAt . ' 23:59:59'); } - if ($sort == 4) { - $order = 'spendvalue asc'; + $userMap = []; + if ($userAccount != '') { + $userMap['account'] = $userAccount; } + $valueSubSql = M('value_detail_log', 'tab_')->field([ + 'abs(IFNULL(sum(IF(pay_type=1,value,0)), 0)) amount1', + 'IFNULL(sum(IF(pay_type=2,value,0)), 0) amount2', + 'IFNULL(sum(IF(pay_type=3,value,0)), 0) amount3', + 'user_id' + ]) + ->where($map) + ->group('user_id') + ->select(false); + + $lastSubSql = M('value_detail_log', 'tab_')->field(['CONVERT(SUBSTRING_INDEX(group_concat(id order by `create_time` desc),",",1), UNSIGNED INTEGER)']) + ->where($lastMap) + ->group('user_id') + ->select(false); + $reaminSubSql = M('value_detail_log', 'tab_')->field('user_id, after_value amount') + ->where(['_string' => 'id in(' . $lastSubSql . ')']) + ->group('user_id') + ->select(false); + + + $this->checkListOrCountAuthRestMap($userMap, []); - if ($sort == 6) { - $order = 'deposit desc'; - } - if ($sort == 7) { - $order = 'deposit asc'; - } + $query = M('user', 'tab_') + ->alias('a') + ->where($userMap) + ->join('left join (' . $valueSubSql . ') b on a.id=b.user_id') + ->join('left join (' . $reaminSubSql . ') c on a.id=c.user_id'); + $countQuery = clone $query; + $sumQuery = clone $query; - if ($sort == 9) { - $order = 'promoteCoin desc'; - } - if ($sort == 10) { - $order = 'promoteCoin asc'; + $order = 'id desc'; + if ($orderField != '') { + $order = $orderField . ' ' . ($orderType == '' ? 'desc' : $orderType); } - if ($sort == 11) { - $order = 'id asc'; - } - if ($sort == 12) { - $order = 'id desc'; - } + $columns = ['a.account', 'a.id', 'a.balance', 'b.amount1 spend_value', 'b.amount2 deposit_value', 'b.amount3 promote_value', 'c.amount remain']; - if ($sort == 16) { - $order = 'restvalue desc'; - } - if ($sort == 17) { - $order = 'restvalue asc'; + $records = []; + if ($isExport == 1) { + $records = $query->field($columns)->order($order)->limit(10000)->select(); + } else { + $records = $query->field($columns)->order($order)->page($page, $row)->select(); } - if ($sort == 19) { - $order = 'totalvalue desc'; + foreach ($records as $key => $record) { + $records[$key]['spend_value'] = number_format(abs(floatval($record['spend_value'])), 2, '.', ''); + $records[$key]['deposit_value'] = number_format(abs(floatval($record['deposit_value'])), 2, '.', ''); + $records[$key]['promote_value'] = number_format(floatval($record['promote_value']), 2, '.', ''); + $records[$key]['remain'] = number_format(floatval($record['remain']), 2, '.', ''); } - if ($sort == 20) { - $order = 'totalvalue asc'; + + $count = $countQuery->count(); + $sumColumns = ['sum(a.balance) balance', 'sum(b.amount1) spend_value', 'sum(b.amount2) deposit_value', 'sum(b.amount3) promote_value', 'sum(c.amount) remain']; + $summary = $sumQuery->field($sumColumns)->find(); + + if($isExport == 1) { + $getData = $_GET; + unset($getData['export']); + addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$getData),'menu'=>"财务-数据统计-平台币统计-导出"]); + data2csv($records, '平台币统计', [ + 'id' => '账号ID', + 'account' => '玩家账号', + 'balance' => '当前平台币余额', + 'remain' => '平台币余额', + 'spend_value' => '平台币直充支出', + 'deposit_value' => '平台币直充金额', + 'promote_value' => '后台发放平台币', + ]); } - $this->assign('sorting', $sort); - $map5['v.pay_type'] = 1; - $map5['v.create_time'] = $map['create_time']; - $map5[] = ['u.id = v.user_id'] ; - - $map6[] = ['u.id = v.user_id']; - $map6['v.pay_type'] = 2; - $map6['v.create_time'] = $map['create_time']; - $map7[] = ['u.id = v.user_id']; - $map7['v.pay_type'] = 3; - $map7['v.create_time'] = $map['create_time']; - - $map8[] = ['u.id = v.user_id']; - $map8['v.create_time'] = $map['create_time']; - - $map9[] = ['u.id = v.user_id']; - $map9['v.pay_type'] = 3; - if (!empty($map['create_time'][1][1])) { - $map9['v.create_time'] = ['elt', $map['create_time'][1][1] ]; - } - if (!empty($map['create_time'][1][0]) && empty($map['create_time'][1][1])) { - $map9['v.create_time'] = ['egt', $map['create_time'][1][0] ]; + $page = set_pagination($count, $row); + if($page) { + $this->assign('_page', $page); } - - $valueQuery5 = M('value_detail_log', 'tab_')->alias('v')->field('IFNULL(sum(abs(v.value)), 0) as spend_value') - ->where($map5)->buildSql(); - $valueQuery6 = M('value_detail_log', 'tab_')->alias('v')->field('sum(v.value) as spend_value') - ->where($map6)->buildSql(); - $valueQuery7 = M('value_detail_log', 'tab_')->alias('v')->field('sum(v.value) as spend_value') - ->where($map7)->buildSql(); - $valueQuery9 = M('value_detail_log', 'tab_')->alias('v')->field('IFNULL(sum(abs(v.value)), 0) as spend_value') - ->where($map9)->buildSql(); - $valueQuery8 = M('value_detail_log', 'tab_')->alias('v')->field('after_value')->where($map8)->order('create_time desc')->limit(1)->buildSql(); - $datas = M('user', 'tab_')->alias('u')->field("u.id, u.account, {$valueQuery8} as totalvalue, {$valueQuery5} as spendvalue, {$valueQuery6} as deposit, {$valueQuery7} as promoteCoin , if (({$valueQuery8}) - ({$valueQuery9}) > 0, ({$valueQuery8}) - ({$valueQuery9}), 0) as restvalue")->where($map0)->page($page,$row)->order($order)->group('u.id')->select(); - $query = M('user', 'tab_')->alias('u')->field("u.id, u.account, {$valueQuery8} as totalvalue, {$valueQuery5} as spendvalue, {$valueQuery6} as deposit, {$valueQuery7} as promoteCoin , if (({$valueQuery8}) - ({$valueQuery9}) > 0, ({$valueQuery8}) - ({$valueQuery9}), 0) as restvalue")->where($map0)->order($order)->group('u.id')->buildSql(); - $allTotalValue1 = M()->alias('t')->table($query)->sum('t.totalvalue'); - $allRestValue = M()->alias('rest')->table($query)->sum('rest.restvalue'); - - // var_dump($datas);die(); - // $datas = M('user', 'tab_') - // ->field('id, account') - // ->where($map0) - // ->page($page,$row) - // ->order('id desc') - // ->select(); - - $count = M('user', 'tab_') - ->field('id, account') - ->where($map) - ->count(); - $ids = array_column($datas, 'id'); - if(empty($ids)) { - $ids = [-100]; - } - $allDatas = []; - - foreach($datas as $key => $data) { - $id = $data['id']; - $account = $data['account']; - $allDatas[$key]['user_id'] = $id; - $allDatas[$key]['user_account'] = $account; - $spend = $data['spendvalue']; - if(empty($spend)) { - $spend = '0.00'; - }else { - $spend = number_format(abs($spend),2,'.',''); - } - $deposit = $data['deposit']; - if(empty($deposit)) { - $deposit = '0.00'; - } - $promoteCoin = $data['promotecoin']; - if(empty($promoteCoin)) { - $promoteCoin = '0.00'; - } - $restValue = $data['restvalue']; - if(empty($restValue)) { - $restValue = '0.00'; - } - $alltotalvalue = $data['totalvalue']; - if(empty($alltotalvalue)) { - $alltotalvalue = '0.00'; - } - // $allDatas[$key]['bind_balance'] = $bind_balance; - $allDatas[$key]['after_value'] = $alltotalvalue ; - $allDatas[$key]['rest_value'] = $restValue ; - $allDatas[$key]['spend_amount'] = $spend; - $allDatas[$key]['deposit_amount'] = $deposit; - $allDatas[$key]['coin_amount'] = $promoteCoin; - } - $map1['create_time'] = $map['create_time']; - $map1['pay_type'] = 1; - $totalSpend = M('value_detail_log', 'tab_')->where($map1)->sum('value'); - $totalSpend = empty($totalSpend) ? '0.00' : $totalSpend; - $totalSpend = number_format(abs($totalSpend),2,'.',''); - - $map2['create_time'] = $map['create_time']; - $map2['pay_type'] = 2; - $deposit = M('value_detail_log', 'tab_')->where($map2)->sum('value'); - $deposit= empty($deposit) ? '0.00' : number_format($deposit,2,'.',''); - - $map3['create_time'] = $map['create_time']; - $map3['pay_type'] = 3; - $allpromoteCoin = M('value_detail_log', 'tab_')->where($map3)->sum('value'); - $allpromoteCoin = empty($allpromoteCoin) ? '0.00' : number_format($allpromoteCoin,2,'.',''); - $map4['create_time'] = $map['create_time']; - if($_REQUEST['user_account']) { - $banlace = M('value_detail_log', 'tab_')->field('user_id, after_value')->where($map4)->order('create_time desc')->limit(1)->select(); - }else { - $banlace = M('value_detail_log', 'tab_')->field('user_id, after_value')->where($map4)->order('create_time desc')->select(); - } - // $banlaceTotal = '0.00'; - // foreach($banlace as $k222 => $vvv) { - // $banlaceTotal += $vvv['after_value']; - // } - // $banlaceTotal = number_format($banlaceTotal,2,'.',''); - $map['user_id'] = ['in', $ids]; - // $newValueByTimeDatas = M('value_detail_log', 'tab_')->field('user_id, after_value, create_time')->where($map)->order('create_time desc')->limit(1)->select(); - // var_dump($newValueByTimeDatas); - // // var_dump($newValueByTimeDatas);die(); - // foreach ($allDatas as $k => $allData) { - // $allDatas[$k]['after_value'] = "0.00"; - // foreach ($newValueByTimeDatas as $key1 => $newValueByTimeData ) { - // if (intval($allData['user_id']) == intval($newValueByTimeData['user_id'])) { - // $allDatas[$k]['after_value'] = $newValueByTimeData['after_value']; - // break; - // }else { - // $allDatas[$k]['after_value'] = "0.00"; - - // } - // } - - // } - - $this->checkListOrCountAuthRestMap($map,[]); - - $page = set_pagination($count,$row); - if($page) {$this->assign('_page', $page);} - if(empty($_REQUEST['timestart']) && empty($_REQUEST['timeend']) && empty(I('user_account'))) { - $this->assign('starttime', $initBegTime); - $this->assign('endtime', $initEndTime); - }else { - $this->assign('starttime', $_REQUEST['timestart']); - $this->assign('endtime', $_REQUEST['timeend']); - } - $this->assign('banlaceTotal', $allTotalValue1); - $this->assign('total', $totalSpend); - $this->assign('deposit', $deposit); - $this->assign('promoteCoin', $allpromoteCoin); - $this->assign('data', $allDatas); - $this->assign('resttotal', $allRestValue); - + $this->assign('_page', $page); + $this->assign('records', $records); + $this->assign('summary', $summary); + $this->assign('orderField', $orderField); + $this->assign('orderType', $orderType); $this->display(); } diff --git a/Application/Admin/Controller/PromoteCompanyController.class.php b/Application/Admin/Controller/PromoteCompanyController.class.php index 0ca8df62f..15411b529 100644 --- a/Application/Admin/Controller/PromoteCompanyController.class.php +++ b/Application/Admin/Controller/PromoteCompanyController.class.php @@ -1262,6 +1262,7 @@ class PromoteCompanyController extends ThinkController $dataPresident = array_diff($dataPresident, $subPromoteIds); } M('auth_group',"sys_")->where(['title'=>'市场总监'])->save(['data_president'=>implode(',', $dataPresident)]); + resetUserAuth(); } } } diff --git a/Application/Admin/Controller/UserController.class.php b/Application/Admin/Controller/UserController.class.php index f20320617..9f4bcf646 100644 --- a/Application/Admin/Controller/UserController.class.php +++ b/Application/Admin/Controller/UserController.class.php @@ -12,6 +12,7 @@ namespace Admin\Controller; use User\Api\UserApi; use Com\Wechat; use Com\WechatAuth; +use Base\Service\AdminNoticeService; /** * 后台用户控制器 @@ -839,4 +840,20 @@ class UserController extends AdminController } return $this->ajaxReturn(array('status' => 1, 'data' => $lists)); } + + public function readAdminNotice() + { + $id = I('id', 0); + $service = new AdminNoticeService(); + $service->read($id); + $this->success('标记成功'); + } + + public function deleteAdminNotice() + { + $id = I('id', 0); + $service = new AdminNoticeService(); + $service->delete($id); + $this->success('删除成功'); + } } \ No newline at end of file diff --git a/Application/Admin/View/Finance/valueDetail.html b/Application/Admin/View/Finance/valueDetail.html index bd31226fe..179221f70 100644 --- a/Application/Admin/View/Finance/valueDetail.html +++ b/Application/Admin/View/Finance/valueDetail.html @@ -90,35 +90,17 @@
+ placeholder="开始时间" autocomplete="off"/> -
+ placeholder="结束时间" autocomplete="off"/>
- - - - - - - - - - - - - - - - - - - - + +
-
@@ -136,83 +117,63 @@ - -
账号ID检测时间最后一秒玩家留存的平台币
- -
账号ID检测时间最后一秒玩家留存的平台币
- - -
账号ID检测时间最后一秒玩家留存的平台币
- -
账号ID检测时间最后一秒玩家留存的平台币
-
+ +
+ 账号ID + 用户ID +
+ 玩家账号 - -
平台币余额检测时间最后一秒玩家留存的平台币
- -
平台币余额检测时间最后一秒玩家留存的平台币
- -
平台币余额检测时间最后一秒玩家留存的平台币
- -
平台币余额检测时间最后一秒玩家留存的平台币
-
- -
平台币直充余额检测时间最后一秒玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充余额检测时间最后一秒玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充余额检测时间最后一秒玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充余额检测时间最后一秒玩家累计消耗的平台币(只记录直充部分)
-
- -
平台币直充支出检测时间内玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充支出检测时间内玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充支出检测时间内玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充支出检测时间内玩家累计消耗的平台币(只记录直充部分)
-
- - -
平台币直充金额检测时间内玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充金额检测时间内玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充金额检测时间内玩家累计消耗的平台币(只记录直充部分)
- -
平台币直充金额检测时间内玩家累计消耗的平台币(只记录直充部分)
-
- -
后台发放平台币检测时间内玩家累计后台发放的平台币(只记录直充部分)
- -
后台发放平台币检测时间内玩家累计后台发放的平台币(只记录直充部分)
- -
后台发放平台币检测时间内玩家累计后台发放的平台币(只记录直充部分)
- -
后台发放平台币检测时间内玩家累计后台发放的平台币(只记录直充部分)
-
+ +
+ 当前平台币余额 + 当前用户平台币余额(不随搜索时间变化) +
+ + +
+ 平台币余额 + 检测时间最后一秒玩家留存的平台币 +
+ + +
+ 平台币直充支出 + 检测时间内玩家累计消耗的平台币(只记录直充部分) +
+ + +
+ 平台币直充金额 + 检测时间内玩家累计充值的平台币(只记录直充部分) +
+ + +
+ 后台发放平台币 + 检测时间内玩家累计后台发放的平台币(只记录直充部分) +
+ 操作 - + aOh! 暂时还没有内容! - + - {$data.user_id} - {$data.user_account} - {$data.after_value} - {$data.rest_value} - {$data.spend_amount} - {$data.deposit_amount} - {$data.coin_amount} + {$data.id} + {$data.account} + {$data.balance} + {$data.remain} + {$data.spend_value} + {$data.deposit_value} + {$data.promote_value} - 查看详情 + 查看详情 @@ -220,11 +181,11 @@ 汇总(检索时间内所有数据的统计) - {$banlaceTotal} - {$resttotal} - {$total} - {$deposit} - {$promoteCoin} + + + + + @@ -233,7 +194,7 @@
- 导出 + 导出 {$_page|default=''}
@@ -268,11 +229,17 @@ - diff --git a/Application/Admin/View/Mend/edit.html b/Application/Admin/View/Mend/edit.html index 022c92554..16f777fc6 100644 --- a/Application/Admin/View/Mend/edit.html +++ b/Application/Admin/View/Mend/edit.html @@ -76,7 +76,7 @@ - + diff --git a/Application/Base/Service/AdminNoticeService.class.php b/Application/Base/Service/AdminNoticeService.class.php new file mode 100644 index 000000000..666beb695 --- /dev/null +++ b/Application/Base/Service/AdminNoticeService.class.php @@ -0,0 +1,82 @@ +where([ + 'start_time' => ['elt', time()], + 'end_time' => ['egt', time()], + '_string' => 'concat(",", admin_ids, ",") like "%,' . $uid . ',%"' + ]) + ->getField('id', true); + if (empty($notices) || count($notices) == 0) { + return; + } + + $readNotices = M('admin_notice_read', 'tab_')->where(['admin_id' => $uid, 'notice_id' => ['in', $notices]])->getField('notice_id', true); + $unreadNotices = $readNotices ? array_diff($notices, $readNotices) : $notices; + + $records = []; + foreach ($unreadNotices as $noticeId) { + $records[] = [ + 'notice_id' => $noticeId, + 'admin_id' => $uid, + 'create_time' => time(), + 'update_time' => time() + ]; + } + M('admin_notice_read', 'tab_')->addAll($records); + } + + public function read($id) + { + M('admin_notice_read', 'tab_')->where(['id' => $id])->save(['status' => 1, 'update_time' => time()]); + } + + public function delete($id) + { + M('admin_notice_read', 'tab_')->where(['id' => $id])->save(['status' => 2, 'update_time' => time()]); + } + + public function getAdminNotices($uid) + { + $items = M('admin_notice_read', 'tab_')->field(['notice_id', 'status'])->where(['admin_id' => $uid, 'status' => ['in', [0, 1]]])->order('create_time desc')->select(); + if (empty($items) || count($items) == 0) { + return []; + } + $ids = array_column($items, 'notice_id'); + $notices = M('admin_notice','tab_') + ->where([ + 'id' => ['in', $ids], + 'start_time' => ['elt', time()], + 'end_time' => ['egt', time()], + ]) + ->select(); + + if ($notices) { + $notices = index_by_column('id', $notices); + } + + $records = []; + foreach ($items as $item) { + $notice = $notices[$item['notice_id']] ?? null; + if (is_null($notice)) { + continue; + } + $records[] = [ + 'id' => $item['notice_id'], + 'status' => $item['status'], + 'type' => $notice['type'], + 'content' => $notice['content'], + 'title' => $notice['title'], + 'target' => $notice['target'], + ]; + } + return $records; + } +} \ No newline at end of file diff --git a/Application/Base/Service/MarketService.class.php b/Application/Base/Service/MarketService.class.php index e68505fcd..522064a5f 100644 --- a/Application/Base/Service/MarketService.class.php +++ b/Application/Base/Service/MarketService.class.php @@ -47,6 +47,7 @@ class MarketService $dataPresident = explode(',', $authGroup['data_president']); if (!in_array($promote['id'], $dataPresident)) { M('auth_group', 'sys_')->where(['title'=>'市场总监'])->save(['data_president' => $authGroup['data_president'] . ',' . $promote['id']]); + resetUserAuth(); } } diff --git a/Application/Base/Service/PromoteCompanyService.class.php b/Application/Base/Service/PromoteCompanyService.class.php index a34dfe286..0cae4434e 100644 --- a/Application/Base/Service/PromoteCompanyService.class.php +++ b/Application/Base/Service/PromoteCompanyService.class.php @@ -276,6 +276,7 @@ class PromoteCompanyService $dataPresident = array_diff($dataPresident, $subPromoteIds); } M('auth_group', 'sys_')->where(['title' => '市场总监'])->save(['data_president' => implode(',', $dataPresident)]); + resetUserAuth(); } } } diff --git a/Application/Base/Service/PromoteService.class.php b/Application/Base/Service/PromoteService.class.php index 39236b921..0972f13f9 100644 --- a/Application/Base/Service/PromoteService.class.php +++ b/Application/Base/Service/PromoteService.class.php @@ -321,9 +321,8 @@ class PromoteService { $toPromote = M('promote', 'tab_')->where(['id' => $toPromoteId])->find(); $fromPromote = M('promote', 'tab_')->where(['id' => $fromPromoteId])->find(); - $toPromote = $toPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL')]; - $fromPromote = $fromPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL')]; - + $toPromote = $toPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0]; + $fromPromote = $fromPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0]; if ($fromPromote['id'] == 0 && count($shiftIds) == 0) { return ['status' => false, 'msg' => '官方渠道玩家不能全部迁移']; @@ -339,14 +338,26 @@ class PromoteService { $users = M('user', 'tab_')->field(['id', 'account', 'nickname'])->where($map)->select(); $spendMap['pay_time'] = ['egt', $orderTime]; + $spendMap['is_check'] = ['in','1,2']; + $spendMap['settle_check'] = 0; + $spendMap['selle_status'] = 0; + $spendMap['pay_status'] = 1; + $payAmountRows = M('spend', 'tab_') - ->field(['user_id', 'sum(pay_amount) payAmount']) + ->field(['user_id', 'sum(pay_amount) pay_amount']) ->where($spendMap) + ->group('user_id') ->select(); $payAmountRows = index_by_column('user_id', $payAmountRows); + $users = index_by_column('id', $users); + $notices = []; + $formConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $fromPromote['company_id']])->find(); + $toConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $toPromote['company_id']])->find(); + $belongs = PromoteCompanyService::$belongs; $mends = []; foreach ($users as $item) { + $amount = isset($payAmountRows[$item['id']]) ? round(floatval($payAmountRows[$item['id']]['pay_amount']), 2) : 0; $mends[] = [ 'user_id' => $item['id'], 'user_account' => $item['account'], @@ -358,12 +369,28 @@ class PromoteService { 'remark' => $remark == '' ? ($task['creator_type'] == 0 ? '后台补链' : '玩家迁移') : $remark, 'order_time' => $orderTime, 'create_time' => time(), - 'pay_amount' => isset($payAmountRows[$item['id']]) ? intval($payAmountRows[$item['id']]['payAmount']) : 0, + 'pay_amount' => $amount, 'op_id' => $creator ? $creator['id'] : 0, 'op_account' => $opAccount, 'op_type' => $task['creator_type'], 'bind_type' => 1, ]; + if ($amount > 500) { + $userWord = '玩家账号' . $item['account']; + $fromWord = $fromPromote['account'] . ($formConpany ? '(' . $belongs[$formConpany['company_belong']] . '-' . $formConpany['company_name'] : ''); + $toWord = $toPromote['account'] . ($toConpany ? '(' . $belongs[$toConpany['company_belong']] . '-' . $toConpany['company_name'] : ''); + $content = $userWord . ', 从' . $fromWord . '换绑到' . $toWord . ',换绑金额超过500,达到' . $amount . '元'; + $notices[] = [ + 'type' => 'shift-player', + 'title' => '换绑额度超500', + 'content' => $content, + 'admin_ids' => '1', + 'create_time' => time(), + 'target' => $item['account'], + 'start_time' => time(), + 'end_time' => time() + 7*24*3600, + ]; + } } $model = new Model(); @@ -375,6 +402,10 @@ class PromoteService { return ['status' => false, 'msg' => '系统异常,添加变更记录失败']; } + if (count($notices) > 0) { + M('admin_notice', 'tab_')->addAll($notices); + } + $updateData = [ 'promote_id' => $toPromote['id'], 'promote_account' => $toPromote['account'] @@ -398,15 +429,17 @@ class PromoteService { M('user_play', 'tab_')->where($otherMap)->save($updateData); M('user_play_info', 'tab_')->where($otherMap)->save($updateData); - $orderMap1 = $otherMap; - $orderMap1['pay_time'] = ['egt', $orderTime]; - M('spend', 'tab_')->where($orderMap1)->where(['is_check' => ['in','1,2'], 'settle_check' => 0, 'selle_status' => 0])->save(array_merge($updateData, $updateMarket)); // 只改未对账的数据 - M('bind_spend', 'tab_')->where($orderMap1)->save($updateData); + unset($spendMap['pay_status']); + M('spend', 'tab_')->where($spendMap)->save(array_merge($updateData, $updateMarket)); // 只改未对账的数据 + + $bindMap = $otherMap; + $bindMap['pay_time'] = ['egt', $orderTime]; + M('bind_spend', 'tab_')->where($bindMap)->save($updateData); - $orderMap2 = $otherMap; - $orderMap2['create_time'] = ['egt', $orderTime]; - M('deposit', 'tab_')->where($orderMap2)->save(array_merge($updateData, $updateMarket)); - M('user_play_data_count', 'tab_')->where($orderMap2)->save(['promote_id' => $toPromote['id']]); + $orderMap = $otherMap; + $orderMap['create_time'] = ['egt', $orderTime]; + M('deposit', 'tab_')->where($orderMap)->save(array_merge($updateData, $updateMarket)); + M('user_play_data_count', 'tab_')->where($orderMap)->save(['promote_id' => $toPromote['id']]); $status = M('shift_task', 'sys_')->where('id=' . $task['id'])->save(['status' => 1, 'handle_time' => time()]); if (!$status) { @@ -1032,6 +1065,7 @@ class PromoteService { $id = M('promote', 'tab_')->getLastInsID(); $info = M('sys_auth_group')->where(['title'=>'市场总监'])->find(); M('sys_auth_group')->where(['title'=>'市场总监'])->save(['data_president'=>$info['data_president'].",".$id]); + resetUserAuth(); } return $insert; diff --git a/Data/update.sql b/Data/update.sql index 37508fdaa..5f52a0f1c 100644 --- a/Data/update.sql +++ b/Data/update.sql @@ -2517,6 +2517,28 @@ CREATE TABLE `tab_payment_orders` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `tab_admin_notice` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(20) NOT NULL COMMENT '提示类型', + `title` varchar(32) NOT NULL COMMENT '标题', + `content` varchar(255) NOT NULL COMMENT '内容', + `admin_ids` varchar(255) NOT NULL DEFAULT '' COMMENT '接收管理员ID', + `target` varchar(255) NOT NULL DEFAULT '' COMMENT '对应标识', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `start_time` int(11) NOT NULL DEFAULT '0' COMMENT '展示开始时间', + `end_time` int(11) NOT NULL DEFAULT '0' COMMENT '展示结束时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `tab_admin_notice_read` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `notice_id` int(11) NOT NULL COMMENT '通知ID', + `admin_id` int(11) NOT NULL COMMENT '管理员ID', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态 0 未读 1 已读', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /** @@ -2628,4 +2650,4 @@ ALTER TABLE `tab_company_info` ADD COLUMN `invoice_item` varchar(255) NULL DEFAULT '' COMMENT '开票内容' AFTER `fax_ratio`, ADD COLUMN `invoice_type` varchar(255) NULL DEFAULT '' COMMENT '开票类型' AFTER `invoice_item`, ADD COLUMN `register_phone` varchar(24) NULL DEFAULT '' COMMENT '注册电话' AFTER `invoice_type`, -ADD COLUMN `register_address` varchar(255) NULL DEFAULT '' COMMENT '注册地址' AFTER `register_phone`; \ No newline at end of file +ADD COLUMN `register_address` varchar(255) NULL DEFAULT '' COMMENT '注册地址' AFTER `register_phone`;