You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
16 KiB
PHP
314 lines
16 KiB
PHP
<?php
|
|
|
|
namespace Admin\Controller;
|
|
|
|
use Org\Util\Date;
|
|
use Sdk\Controller\AgeController;
|
|
use User\Api\MemberApi as MemberApi;
|
|
use Org\WeixinSDK\Weixin;
|
|
|
|
class PayMerchantController extends ThinkController
|
|
{
|
|
|
|
const WAY_ALIPAY = 1;
|
|
const WAY_WEIXIN = 2;
|
|
const WAY_EXPRESS = 4;
|
|
|
|
public function index($p = 0) {
|
|
if(!array_key_exists("timestart",$_REQUEST)&&!$_REQUEST['type']){
|
|
$this->redirect(ACTION_NAME, array('timestart' => date('Y-m-d',strtotime('-30 day')),"timeend"=>date('Y-m-d')));
|
|
}
|
|
$page = intval($p);
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
$arraypage = $page;
|
|
|
|
if (isset($_REQUEST['row'])) {
|
|
$row = $_REQUEST['row'];
|
|
} else {
|
|
$row = 10;
|
|
}
|
|
|
|
$map = [];
|
|
|
|
if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) {
|
|
$map['payed_time'] = array('between', [strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 86399]);
|
|
} elseif (!empty($_REQUEST['timestart']) && empty($_REQUEST['timeend'])) {
|
|
$map['payed_time'] = array('between', [strtotime($_REQUEST['timestart']), time()]);
|
|
} elseif (empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) {
|
|
$map['payed_time'] = array('elt', (strtotime($_REQUEST['timeend']) + 86399));
|
|
}
|
|
|
|
if ($_REQUEST['account']) {
|
|
$map['merchant.account'] = $_REQUEST['account'];
|
|
}
|
|
|
|
if ($_REQUEST['name']) {
|
|
$map['name'] = $_REQUEST['name'];
|
|
}
|
|
|
|
if ($_REQUEST['main_name']) {
|
|
$map['main_name'] = $_REQUEST['main_name'];
|
|
}
|
|
|
|
if ($_REQUEST['pay_way']) {
|
|
$data_map['merchant_way'] = ['in',$_REQUEST['pay_way']];
|
|
}
|
|
// var_dump($data_map);die();
|
|
//游戏充值金额
|
|
$data = M("spend use index(pay_channel)","tab_")
|
|
->field("SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null THEN pay_amount ELSE 0 END) as cash_amount,
|
|
SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is not null THEN pay_amount ELSE 0 END) as test_amount,
|
|
0 coin_amount,0 offcial_amount,0 spread_amount,0 supersign_amount,0 test_order_amount,merchant_id,name,channel,identifier,
|
|
payed_time,game_id,main_name,merchant_way,merchant.account,tab_spend.pay_way")
|
|
->join("left join tab_test_white_list on tab_spend.user_id=tab_test_white_list.user_id")
|
|
->join("left join tab_payment_merchant merchant on merchant.id=tab_spend.merchant_id")
|
|
->where(['pay_status'=>1,'tab_spend.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
|
|
->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select(false);
|
|
|
|
//平台币充值金额计算
|
|
$coinData = M('deposit','tab_')
|
|
// ->join("inner join tab_deposit on tab_pay_info.order_id=tab_deposit.pay_order_number")
|
|
->join("left join tab_test_white_list on tab_test_white_list.user_id=tab_deposit.user_id")
|
|
->join("left join tab_payment_merchant merchant on merchant.id=tab_deposit.merchant_id")
|
|
->field("0 cash_amount,SUM(CASE WHEN merchant.id is not null and pay_source=2 and tab_test_white_list.user_id is not null THEN pay_amount ELSE 0 END) as test_amount,
|
|
SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null and pay_source=2 THEN pay_amount ELSE 0 END) as coin_amount,
|
|
0 offcial_amount,0 spread_amount,0 supersign_amount,0 test_order_amount,merchant_id,name,channel,identifier,payed_time,0 game_id,main_name,merchant_way,merchant.account,tab_deposit.pay_way")
|
|
->where(['pay_status'=>1,'tab_deposit.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
|
|
->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select(false);
|
|
// var_dump($coinData);die();
|
|
//官网金额
|
|
$officalData = M('deposit','tab_')
|
|
->join("left join tab_test_white_list on tab_test_white_list.user_id=tab_deposit.user_id")
|
|
->join("left join tab_payment_merchant merchant on merchant.id=tab_deposit.merchant_id")
|
|
->field("0 cash_amount,SUM(CASE WHEN merchant.id is not null and pay_source=0 and tab_test_white_list.user_id is not null THEN pay_amount ELSE 0 END) as test_amount,
|
|
0 as coin_amount,SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null and pay_source=0 THEN pay_amount ELSE 0 END) as offcial_amount,
|
|
0 spread_amount,0 supersign_amount,0 test_order_amount,merchant_id,name,channel,identifier,payed_time,0 as game_id,main_name,merchant_way,merchant.account,tab_deposit.pay_way")
|
|
->where(['pay_status'=>1,'tab_deposit.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
|
|
->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select(false);
|
|
|
|
if ($map['payed_time'])
|
|
{
|
|
$map['pay_time'] = $map['payed_time'];
|
|
unset($map['payed_time']);
|
|
}
|
|
|
|
//推广后台
|
|
$spreadData = M("coin_pay_order","tab_")
|
|
->field("0 cash_amount,0 test_amount,0 coin_amount,0 offcial_amount,
|
|
SUM(CASE WHEN merchant.id is not null THEN pay_amount ELSE 0 END) as spread_amount,0 supersign_amount,
|
|
0 test_order_amount,merchant_id,name,channel,identifier,pay_time payed_time,0 game_id,main_name,merchant_way,merchant.account,tab_coin_pay_order.pay_way")
|
|
->join("left join tab_payment_merchant merchant on merchant.id=tab_coin_pay_order.merchant_id")
|
|
->where(['order_status'=>1,'tab_coin_pay_order.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
|
|
->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select(false);
|
|
// var_dump($spreadData);die();
|
|
//超级签数据
|
|
$superSignData = M('game_supersign','tab_')
|
|
->field("0 cash_amount,
|
|
SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is not null THEN pay_price ELSE 0 END) as test_amount,
|
|
0 coin_amount,0 offcial_amount,0 spread_amount,
|
|
SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null THEN pay_price ELSE 0 END) as supersign_amount,
|
|
0 test_order_amount,merchant_id,name,channel,identifier,pay_time payed_time,game_id,main_name,merchant_way,merchant.account,tab_game_supersign.pay_way")
|
|
->join("left join tab_payment_merchant merchant on merchant.id=tab_game_supersign.merchant_id")
|
|
->join("left join tab_test_white_list on tab_test_white_list.user_id=tab_game_supersign.user_id")
|
|
->where(['pay_status'=>1,'tab_game_supersign.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
|
|
->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select(false);
|
|
|
|
//测试环境内网平台订单
|
|
$testOrder = M('test_order', 'tab_')
|
|
->where(['tab_test_order.pay_way'=>['egt',1]])
|
|
->field('0 cash_amount,0 test_amount,0 coin_amount,0 offcial_amount,0 spread_amount,0 supersign_amount,
|
|
SUM(CASE WHEN merchant.id is not null THEN pay_amount ELSE 0 END) as test_order_amount,merchant_id,name,
|
|
channel,identifier,pay_time payed_time,game_id,main_name,merchant_way,merchant.account,tab_test_order.pay_way')
|
|
->join("left join tab_payment_merchant merchant on merchant.id=tab_test_order.merchant_id")
|
|
->where(['merchant.status'=>1,'merchant.type'=>1])
|
|
->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select(false);
|
|
|
|
$sql = "{$data} UNION ALL {$coinData} UNION ALL {$officalData} UNION ALL {$spreadData} UNION ALL {$superSignData} UNION ALL {$testOrder}";
|
|
|
|
if (!$_REQUEST['export']) {
|
|
$data = M()->table("({$sql})a")
|
|
->field("sum(cash_amount) cash_amount,sum(test_amount) test_amount,
|
|
sum(coin_amount) coin_amount,sum(offcial_amount) offcial_amount,
|
|
sum(spread_amount) spread_amount,sum(supersign_amount) supersign_amount,
|
|
sum(test_order_amount) test_order_amount,merchant_id,account,merchant_way,main_name,
|
|
name,channel,identifier")
|
|
->page($p, $row)
|
|
->where("name is not null and merchant_way !=0")
|
|
->where($data_map)
|
|
->group("merchant_id,merchant_way")
|
|
->select();
|
|
} else {
|
|
$data = M()->table("({$sql})a")
|
|
->field("sum(cash_amount) cash_amount,sum(test_amount) test_amount,
|
|
sum(coin_amount) coin_amount,sum(offcial_amount) offcial_amount,
|
|
sum(spread_amount) spread_amount,sum(supersign_amount) supersign_amount,
|
|
sum(test_order_amount) test_order_amount,merchant_id,account,merchant_way,main_name,
|
|
name,channel,identifier")
|
|
->where("name is not null and merchant_way !=0")
|
|
->where($data_map)
|
|
->group("merchant_id,merchant_way")
|
|
->select();
|
|
}
|
|
// dump($data);die();
|
|
$count = M()->table("({$sql})a")
|
|
->field("merchant_id")
|
|
->where("name is not null and merchant_way !=0")
|
|
->where($data_map)
|
|
// ->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select(false);
|
|
|
|
$count = M()->table("({$count})b")->count();
|
|
|
|
$page = set_pagination($count, $row);
|
|
if ($page) {
|
|
$this->assign('_page', $page);
|
|
}
|
|
|
|
|
|
$sum = M()->table("({$sql})a")
|
|
->field("sum(cash_amount) cash_amount,sum(test_amount) test_amount,
|
|
sum(coin_amount) coin_amount,sum(offcial_amount) offcial_amount,
|
|
sum(spread_amount) spread_amount,sum(supersign_amount) supersign_amount,
|
|
sum(test_order_amount) test_order_amount,merchant_id")
|
|
->where("name is not null and merchant_way !=0")
|
|
->where($data_map)
|
|
// ->where($map)
|
|
->find();
|
|
|
|
$sum['cash_amount'] = round ($sum['cash_amount'],2);
|
|
$sum['test_amount'] = round ($sum['test_amount'],2);
|
|
$sum['coin_amount'] = round ($sum['coin_amount'],2);
|
|
$sum['offcial_amount'] = round ($sum['offcial_amount'],2);
|
|
$sum['spread_amount'] = round ($sum['spread_amount'],2);
|
|
$sum['supersign_amount'] = round ($sum['supersign_amount'],2);
|
|
$sum['test_order_amount'] = round ($sum['test_order_amount'],2);
|
|
|
|
|
|
$sum['sum'] = $sum['cash_amount']+$sum['test_amount']+$sum['coin_amount']+$sum['offcial_amount']
|
|
+$sum['spread_amount']+$sum['supersign_amount']+$sum['test_order_amount'];
|
|
|
|
// dump($sum);die();
|
|
|
|
$sum_merchant = M()->table("({$sql})a")
|
|
->field("sum(cash_amount+test_amount+coin_amount+offcial_amount+spread_amount+supersign_amount+test_order_amount) sum_amount,
|
|
merchant_id,name,merchant_way")
|
|
->where("name is not null and merchant_way !=0")
|
|
->where($data_map)
|
|
// ->where($map)
|
|
->group("merchant_id,merchant_way")
|
|
->select();
|
|
|
|
$this->checkListOrCountAuthRestMap($map,[]);
|
|
foreach ($data as $key => $value) {
|
|
$data[$key]['sum'] = $value['cash_amount']+$value['test_amount']+$value['coin_amount']+
|
|
$value['offcial_amount']+$value['spread_amount']+$value['supersign_amount']+$value['test_order_amount'];
|
|
$data[$key]['ratio'] = round (($data[$key]['sum']/array_sum(array_column($sum_merchant,'sum_amount')))*100,2);
|
|
|
|
$data[$key]['cash_amount'] = number_format($value['cash_amount'],2,'.','');
|
|
$data[$key]['test_amount'] = number_format ($value['test_amount'],2,'.','');
|
|
$data[$key]['coin_amount'] = number_format ($value['coin_amount'],2,'.','');
|
|
$data[$key]['offcial_amount'] = number_format ($value['offcial_amount'],2,'.','');
|
|
$data[$key]['spread_amount'] = number_format ($value['spread_amount'],2,'.','');
|
|
$data[$key]['supersign_amount'] = number_format ($value['supersign_amount'],2,'.','');
|
|
$data[$key]['test_order_amount'] = number_format ($value['test_order_amount'],2,'.','');
|
|
|
|
if ($value['merchant_way'] == self::WAY_ALIPAY) {
|
|
$data[$key]['merchant_way'] = "支付宝";
|
|
} else if ($value['merchant_way'] == self::WAY_WEIXIN) {
|
|
$data[$key]['merchant_way'] = "微信";
|
|
} else if ($value['merchant_way'] == self::WAY_EXPRESS) {
|
|
$data[$key]['merchant_way'] = "快捷";
|
|
} else {
|
|
$data[$key]['merchant_way'] = "无";
|
|
}
|
|
|
|
}
|
|
|
|
$sum_radio = [];
|
|
foreach ($sum_merchant as $key => $value) {
|
|
if ($value['merchant_way'] == self::WAY_ALIPAY) {
|
|
$sum_merchant[$key]['merchant_way'] = "支付宝";
|
|
$sum_radio[$key]['merchant_way'] = "支付宝";
|
|
} else if ($value['merchant_way'] == self::WAY_WEIXIN) {
|
|
$sum_merchant[$key]['merchant_way'] = "微信";
|
|
$sum_radio[$key]['merchant_way'] = "微信";
|
|
} else if ($value['merchant_way'] == self::WAY_EXPRESS) {
|
|
$sum_merchant[$key]['merchant_way'] = "快捷";
|
|
$sum_radio[$key]['merchant_way'] = "快捷";
|
|
} else {
|
|
$sum_merchant[$key]['merchant_way'] = "无";
|
|
$sum_radio[$key]['merchant_way'] = "无";
|
|
}
|
|
$sum_merchant[$key]['sum_amount'] = round($value['sum_amount'],2);
|
|
$sum_radio[$key]['name'] = $value['name'];
|
|
$sum_radio[$key]['ratio'] = round(($value['sum_amount']/array_sum(array_column($sum_merchant,'sum_amount')))*100,2);
|
|
}
|
|
|
|
if ($_REQUEST['export']) {
|
|
$title = ['main_name' => '商户主体',
|
|
'name' => '支付商户',
|
|
'merchant_way'=>'支付方式',
|
|
'account' => '商户账号',
|
|
'ratio' => '占比(总充值量%)',
|
|
'cash_amount' => '游戏现金金额',
|
|
'coin_amount' => '平台币直充金额',
|
|
'test_amount'=>'测试白名单金额',
|
|
'test_order_amount' => '测试环境内外网平台金额',
|
|
'supersign_amount' => '超级签',
|
|
'offcial_amount' => '官网',
|
|
'spread_amount' => '推广后台',
|
|
'sum' => '支付渠道内合计'];
|
|
|
|
$sum['main_name'] = "合计(根据时间检索变化)";
|
|
$sum['ratio'] = 100;
|
|
|
|
|
|
$sum_merchant_export['main_name'] = '汇总(根据时间检索变化)';
|
|
$sum_radio_export['main_name'] = '收款商户占比';
|
|
|
|
foreach ($sum_merchant as $key => $value) {
|
|
// if ($value['merchant_way'] == self::WAY_ALIPAY) {
|
|
// $merchant_way = "支付宝";
|
|
// } else if ($value['merchant_way'] == self::WAY_WEIXIN) {
|
|
// $merchant_way = "微信";
|
|
// } else if ($value['merchant_way'] == self::WAY_EXPRESS) {
|
|
// $merchant_way = "快捷";
|
|
// } else {
|
|
// $merchant_way = "无";
|
|
// }
|
|
|
|
$radio = round(($value['sum_amount']/array_sum(array_column($sum_merchant,'sum_amount')))*100,2);
|
|
|
|
$sum_merchant_export['account'] .= $value['name']."(".$value['merchant_way']."):".$value['sum_amount'];
|
|
$sum_radio_export['account'] .= $value['name']."(".$value['merchant_way']."):".$radio."%";
|
|
}
|
|
$data = array_merge($data,[$sum],[$sum_merchant_export],[$sum_radio_export]);
|
|
|
|
data2csv($data,'支付方式统计',$title);
|
|
}
|
|
|
|
// dump($sum_merchant);die();
|
|
$this->assign("sum_radio",$sum_radio);
|
|
$this->assign("sum_merchant",$sum_merchant);
|
|
$this->assign("sum",$sum);
|
|
$this->assign("listdata",$data);
|
|
$this->display();
|
|
|
|
}
|
|
|
|
|
|
|
|
} |