Pro/application/admin/controller/Report.php
2026-02-25 01:50:31 +08:00

445 lines
17 KiB
PHP

<?php
namespace app\admin\controller;
use pay\Usdt;
use think\Db;
use think\Request;
use think\Session;
class Report extends Common{
// 收益报表
public function profit(){
// 接收分页的条件
$get = Request::instance()->get();
$query = http_build_query($get);
$this->assign('get',$get);
$this->assign('query',$query);
// 接收查询条件
$startDate = Request::instance()->get('startDate');
$endDate = Request::instance()->get('endDate');
$username = Request::instance()->get('username');
$export = Request::instance()->get('export');
$agent_id = Request::instance()->get('agent_id');
// 代理查询条件
$where = array();
// $where['agent_parent_id'] = 0;
$where['agent'] = 1;
if($username){
$where['username'] = $username;
unset($where['agent_parent_id']);
}
if($agent_id > 0){
$where['agent_parent_id'] = $agent_id;
}
$agent_list = Db::name('user')->where($where)->select();
// 时间条件
if($startDate){
$startTime = strtotime($startDate);
}else{
$startTime = strtotime(date('Y-m-d'));
$get['startDate'] = date('Y-m-d H:i:s',$startTime);
}
if($endDate){
$endTime = strtotime($endDate);
}else{
$endTime = time();
$get['endDate'] = date('Y-m-d H:i:s',$endTime);
}
$this->assign('get',$get);
// 数据查询条件
$timeWhere = array();
$timeWhere['create_time'] = array('between',[$startTime,$endTime]);
$dataAgent = array();
foreach($agent_list as $k => $v){
// 查询是否有下级代理
$v['child_agent'] = Db::name('user')->where('agent_parent_id',$v['id'])->count();
// 自己的洗码收益
$v['self_income_xima'] = Db::name('xima')->where('user_id',$v['id'])->where($timeWhere)->sum('maliang');
$v['self_income_xima'] = $v['self_income_xima'] * (1 - $v['agent_cs']/100);
// 自己的占成收益
$v['self_income_cs'] = Db::name('cs')->where('user_id',$v['id'])->where($timeWhere)->sum('share_amount');
// 总收益(自己的洗码 + 自己的占成)
$v['total_income'] = $v['self_income_xima'] + $v['self_income_cs'];
// 有数据才显示
if($v['total_income'] != 0){
$dataAgent[] = $v;
}
}
$agent_list = $dataAgent;
//导出excel列表
if($export == 1){
if($agent_list){
//重新组合
$excelData = array();
foreach($agent_list AS $k => $v){
$excelData[$k][0] = $v['username'];
$excelData[$k][1] = $v['agent_cs'];
$excelData[$k][2] = $v['self_income_cs'];
$excelData[$k][3] = $v['self_income_xima'];
$excelData[$k][4] = $v['agent_ximalv'];
$excelData[$k][5] = $v['total_income'];
}
$title = array('用户名','占成','占成收益','洗码率','洗码收益','总收益金额');
if($startDate && $endDate){
$this->exportExcelCore($excelData, '收益日报表-'.$startDate.'--'.$endDate, $title);
}else{
$this->exportExcelCore($excelData, '收益日报表', $title);
}
exit('已导出支持列表,请不要重复刷新该页面!');
}else{
exit('没有可以导出的列表!');
}
}
// 渲染参数和模板
$this->assign('agent_list',$agent_list);
return $this->fetch();
}
// 收益报表打印
public function profit_print(){
// 接收分页的条件
$get = Request::instance()->get();
$startDate = Request::instance()->get('startDate');
$endDate = Request::instance()->get('endDate');
$username = Request::instance()->get('username');
$agent_id = Request::instance()->get('agent_id');
// 代理查询条件
$where = array();
$where['agent_parent_id'] = 0;
$where['agent'] = 1;
if($username){
$where['username'] = $username;
unset($where['agent_parent_id']);
}
if($agent_id > 0){
$where['agent_parent_id'] = $agent_id;
}
$agent_list = Db::name('user')->where($where)->select();
// 统计数据的时间条件
if(!$startDate){
// 默认日期为当天
$startDate = date('Y-m-d H:i:s',strtotime(date('Y-m-d')));
$startTime = strtotime(date('Y-m-d'));
}else{
$startTime = strtotime($startDate);
}
if(!$endDate){
// 默认日期为当天
$endDate = date('Y-m-d H:i:s',time());
$endTime = time();
}else{
$endTime = strtotime($endDate);
}
// 查询数据条件
$timeWhere = array();
$timeWhere['create_time'] = array('between',[$startTime,$endTime]);
$dataAgent = array();
foreach($agent_list as $k => $v){
// 自己的洗码收益
$v['self_income_xima'] = Db::name('xima')->where('user_id',$v['id'])->where($timeWhere)->sum('maliang');
$v['self_income_xima'] = $v['self_income_xima'] * (1 - $v['agent_cs']/100);
// 自己的占成收益
$v['self_income_cs'] = Db::name('cs')->where('user_id',$v['id'])->where($timeWhere)->sum('share_amount');
// 总收益
$v['total_income'] = $v['self_income_xima'] + $v['self_income_cs'];
// 有数据才显示
if($v['total_income'] != 0){
$dataAgent[] = $v;
}
}
$agent_list = $dataAgent;
// 渲染参数和模板
$this->assign('agent_list',$agent_list);
return $this->fetch();
}
// 充值查询
public function user_recharge(){
// 用于分页和搜索查询的数据
$get = Request::instance()->get();
$query = http_build_query($get);
$this->assign('get',$get);
$this->assign('query',$query);
// 接收参数
$startDate = Request::instance()->get('startDate');
$endDate = Request::instance()->get('endDate');
$username = Request::instance()->get('username');
$export = Request::instance()->get('export');
// 转换日期时间
if($startDate){
$startTime = strtotime($startDate);
}else{
$startTime = 0;
}
if($endDate){
$endTime = strtotime($endDate);
}else{
$endTime = time();
}
// 拼装搜索条件
$where = array();
$whereStr = '';
$where['create_time'] = array('between',[$startTime,$endTime]);
if($username){
$user = Db::connect('DB2')->name('user')->where(['username'=>$username,'is_delete'=>0])->find();
if($user){
// $where['user_id'] = $user['id'];
$whereStr = "find_in_set({$user['id']},u.agent_parent_id_path)";
}else{
$where['user_id'] = 0;
}
}
$list = Db::connect('DB2')->name('user_recharge')
->alias('r')
->field('r.*,u.username,u.nickname')
->join('cg_user u','r.user_id=u.id')
->where($where)
->where($whereStr)
->order('r.id desc')
->paginate(20,false,array('query'=>$get));
foreach($list as $k => $v){
// 信息组装
$v['create_time'] = date('Y-m-d H:i:s',$v['create_time']);
// 数据格式转换
$v['amount'] = round($v['amount'],2);
$v['old_money'] = round($v['old_money'],2);
$v['new_money'] = round($v['new_money'],2);
$list[$k] = $v;
}
// 汇总金额
$total = Db::connect('DB2')
->name('user_recharge')
->alias('r')
->field('sum(r.amount) as amount, sum(r.money) as money')
->join('cg_user u','r.user_id=u.id')
->where($where)->find();
//导出excel列表
if($export == 1){
if($list){
//重新组合
$excelData = array();
foreach($list AS $k => $v){
$excelData[$k][] = $v['nickname'];
$excelData[$k][] = $v['username'];
$excelData[$k][] = $v['amount'];
$excelData[$k][] = $v['money'];
$excelData[$k][] = $v['old_money'];
$excelData[$k][] = $v['new_money'];
$excelData[$k][] = $v['out_trade_no'];
$excelData[$k][] = $v['from_addr'];
$excelData[$k][] = $v['to_addr'];
}
$title = array('用户名','帐号','充值U币','充值金额','充值前余额','充值后余额','外部交易号','转账地址','入账地址');
if($startDate && $endDate){
$this->exportExcelCore($excelData, '充值报表-'.$startDate.'--'.$endDate, $title);
}else{
$this->exportExcelCore($excelData, '充值报表', $title);
}
exit('已导出支持列表,请不要重复刷新该页面!');
}else{
exit('没有可以导出的列表!');
}
}
// 渲染参数和模板
$this->assign('list',$list);
$this->assign('total',$total);
return $this->fetch();
}
// 提现查询
public function user_withdraw(){
// 用于分页和搜索查询的数据
$get = Request::instance()->get();
$query = http_build_query($get);
$this->assign('get',$get);
$this->assign('query',$query);
// 接收参数
$startDate = Request::instance()->get('startDate');
$endDate = Request::instance()->get('endDate');
$username = Request::instance()->get('username');
$export = Request::instance()->get('export');
// 转换日期时间
if($startDate){
$startTime = strtotime($startDate);
}else{
$startTime = 0;
}
if($endDate){
$endTime = strtotime($endDate);
}else{
$endTime = time();
}
// 拼装搜索条件
$where = array();
$whereStr = '';
$where['create_time'] = array('between',[$startTime,$endTime]);
if($username){
$user = Db::connect('DB2')->name('user')->where(['username'=>$username,'is_delete'=>0])->find();
if($user){
// $where['user_id'] = $user['id'];
$whereStr = "find_in_set({$user['id']},u.agent_parent_id_path)";
}else{
$where['user_id'] = 0;
}
}
$list = Db::connect('DB2')->name('user_withdraw')
->alias('r')
->field('r.*,u.username,u.nickname')
->join('cg_user u','r.user_id=u.id')
->where($where)
->where($whereStr)
->order('r.id desc')
->paginate(20,false,array('query'=>$get));
// 提现状态
$status = [
'SUCCESS' => "提现成功",
'FAIL' => "提现失败",
'WAIT' => "等待审核",
'AGREE' => "已同意",
'DISAGREE' => "已拒绝",
'CANCEL' => "已取消",
];
foreach($list as $k => $v){
// 信息组装
$v['create_time'] = date('Y-m-d H:i:s',$v['create_time']);
// 提现状态
$v['status_msg'] = $status[$v['status']];
// 操作类型
if($v['operator_source'] == 1){
$v['operator_source_msg'] = '总台操作';
}else if($v['operator_source'] == 2){
$v['operator_source_msg'] = '代理操作';
}else{
$v['operator_source_msg'] = '';
}
// 数据格式转换
$v['amount'] = round($v['amount'],2);
$v['old_money'] = round($v['old_money'],2);
$v['new_money'] = round($v['new_money'],2);
$list[$k] = $v;
}
// 汇总金额
$total = Db::connect('DB2')
->name('user_withdraw')
->alias('r')
->field('sum(r.amount) as amount, sum(r.service_fee) as service_fee, sum(r.money) as money, sum(r.service_fee_money) as service_fee_money')
->join('cg_user u','r.user_id=u.id')
->where($where)->find();
//导出excel列表
if($export == 1){
if($list){
//重新组合
$excelData = array();
foreach($list AS $k => $v){
$excelData[$k][] = $v['create_time'];
$excelData[$k][] = $v['nickname'];
$excelData[$k][] = $v['username'];
$excelData[$k][] = $v['amount'];
$excelData[$k][] = $v['service_fee'];
$excelData[$k][] = $v['money'];
$excelData[$k][] = $v['service_fee_money'];
$excelData[$k][] = $v['old_money'];
$excelData[$k][] = $v['new_money'];
$excelData[$k][] = $v['status_msg'];
$excelData[$k][] = $v['operator_nickname']."(".$v['operator_username'].")";
$excelData[$k][] = $v['operator_source_msg'];
}
$title = array('时间','用户名','帐号','提现U币','手续费(U币)','提现金额','手续费金额','提现前余额','提现后余额','审核状态','操作人[账号]','操作类型');
if($startDate && $endDate){
$this->exportExcelCore($excelData, '提现报表-'.$startDate.'--'.$endDate, $title);
}else{
$this->exportExcelCore($excelData, '提现报表', $title);
}
exit('已导出支持列表,请不要重复刷新该页面!');
}else{
exit('没有可以导出的列表!');
}
}
// 渲染参数和模板
$this->assign('list',$list);
$this->assign('total',$total);
return $this->fetch();
}
// 处理提现
public function doUserWithdraw()
{
if(Request::instance()->isPost()){
// 总代类型判断 1现金线
$user_info = Session::get('user_info');
$user_info = Db::connect('DB2')->name('admin')->where('id',$user_info['id'])->find();
$id = Request::instance()->post('id');
$withdraw = Db::name('user_withdraw')->where('id',$id)->find();
if(empty($withdraw) || $withdraw['status'] != "WAIT"){
die(json_encode(['code'=>0,'msg'=>'非待审核状态无法操作!']));
}
// 审核通过
$Usdt = new Usdt();
$res = $Usdt->applyUserWithdraw($withdraw['order_no'],$withdraw['to_address'],$withdraw['amount']);
if($res['code'] == 0){
Db::name('user_withdraw')->where('id',$id)->update([
'status' => 'AGREE',
'type' => $res['processor']['asset'],
'from_address' => $res['processor']['from_addr'],
'audit_time' => time(),
'operator_source' => 2,
'operator_id' => $user_info['id'],
'operator_username' => $user_info['admin'],
]);
die(json_encode(['code'=>1,'msg'=>'审核通过!']));
}else{
Db::startTrans();
// 退返余额
$user = Db::name('user')->where('id',$withdraw['user_id'])->lock(true)->find();
$money = $user['money'] + $withdraw['money'] + $withdraw['service_fee_money'];
Db::name('user')->where('id',$withdraw['user_id'])->update(['money' => $money]);
// 更新记录
Db::name('user_withdraw')->where('id',$id)->update([
'status' => 'FAIL',
'err_msg' => $res['debug'],
'audit_time' => time(),
'operator_source' => 2,
'operator_id' => $user_info['id'],
'operator_username' => $user_info['admin']
]);
Db::commit();
die(json_encode(['code'=>0,'msg'=>'提现失败!']));
}
}
}
}