Pro/application/admin/controller/Report.php

445 lines
17 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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();
// 时间条件默认今天07:00:00 ~ 明天06:59:59
if($startDate){
$startTime = strtotime($startDate);
}else{
$startTime = strtotime(date('Y-m-d') . ' 07:00:00');
$get['startDate'] = date('Y-m-d H:i:s',$startTime);
}
if($endDate){
$endTime = strtotime($endDate);
}else{
$endTime = strtotime(date('Y-m-d', strtotime('+1 day')) . ' 06:59:59');
$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'=>'提现失败!']));
}
}
}
}