@ -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();
}