You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

253 lines
10 KiB

<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Recharge\Pass;
use App\Admin\Forms\Recharge\Check;
use App\Handlers\ContractTool;
use App\Models\Agent;
use App\Models\AgentGrade;
use App\Models\Recharge;
use App\Models\UserAuth;
use App\Models\UserWallet;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\Filter;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Controllers\AdminController;
use Dcat\Admin\Widgets\Alert;
use Illuminate\Support\Facades\Cache;
class RechargeController extends AdminController
{
public function statistics()
{
$grades = AgentGrade::getCachedGradeOption();
$builder = Recharge::query();
$params = request()->only(array_merge($grades, ['status', 'type', 'account_type', 'coin_name', 'user_id', 'username', 'datetime']));
if (!empty($params)) {
// if(!empty($params['status'])){
// $builder->where('status',$params['status']);
// }
if (!empty($params['type'])) {
$builder->where('type', $params['type']);
}
if (!empty($params['account_type'])) {
$builder->where('account_type', $params['account_type']);
}
if (!empty($params['user_id'])) {
$builder->where('user_id', $params['user_id']);
}
if (!empty($params['coin_name'])) {
$builder->where('coin_name', $params['coin_name']);
}
if (!empty($params['username'])) {
$username = $params['username'];
$builder->whereHas('user', function ($q) use ($username) {
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
});
}
if (!empty($params['datetime']) && !empty($params['datetime']['start']) && !empty($params['datetime']['end'])) {
$start = !empty($params['datetime']['start']) ? strtotime($params['datetime']['start']) : null;
$end = !empty($params['datetime']['end']) ? strtotime($params['datetime']['end']) : null;
$builder->whereBetween('datetime', [$start, $end + 86399]);
}
$lk = last(array_keys($grades));
foreach ($grades as $k => $v) {
$key = 'A' . ($k + 1);
if ($k == $lk && !empty($params[$key])) {
$id = $params[$key];
$builder->whereHas('user', function ($q) use ($id) {
$q->where('referrer', $id);
});
} elseif (!empty($params[$key])) {
$ids = Agent::getBaseAgentIds($params[$key]);
$builder->whereHas('user', function ($q) use ($ids) {
$q->whereIn('referrer', $ids);
});
}
}
}
$total = $builder->count();
$records = $builder->groupBy('coin_name')->selectRaw('sum(amount) as amount_sum, coin_name')->pluck('amount_sum', 'coin_name');
$usdt_amount = $records['USDT'] ?? 0;
$eth_amount = $records['ETH'] ?? 0;
$btc_amount = $records['BTC'] ?? 0;
// $usdt_amount = 0;
// foreach ($records as $coin_name => $amount){
// $symbol = strtolower($coin_name) . 'usdt';
// if($coin_name == 'USDT'){
// $price = 1;
// }else{
// $price = Cache::store('redis')->get('market:' . $symbol . '_detail')['close'] ?? 1;
// }
// $usdt_amount = PriceCalculate($usdt_amount,'+',PriceCalculate($amount ,'*' ,$price,4),4);
// }
// $total_amount = $builder->sum('amount');
$con = '<code>总单数:' . $total . '</code> ' . '<code>USDT金额:' . $usdt_amount . '</code> ' . '<code>ETH金额:' . $eth_amount . '</code> ' . '<code>BTC金额:' . $btc_amount . '</code>';
// $con = '<code>总单数:'.$total.'</code> '.'<code>USDT金额:'.$usdt_amount.'</code> ';
return Alert::make($con, '统计')->info();
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(Recharge::with(['user', 'user_auth']), function (Grid $grid) {
#统计
$grid->header(function ($query) {
return $this->statistics();
});
$grid->model()->orderByRaw("FIELD(status," . implode(",", array_keys(Recharge::$statusMap)) . ")")->orderByDesc('id');
// xlsx
$titles = ['id' => 'ID', 'user_id' => 'UID', 'username' => '用户名', 'coin_name' => '币名', 'amount' => '金额', 'address' => '充币地址', 'datetime' => '时间', 'status' => '状态'];
$grid->export()->titles($titles)->rows(function (array $rows) use ($titles) {
foreach ($rows as $index => &$row) {
$row['datetime'] = date('Y-m-d H:i:s', $row['datetime']);
$row['status'] = Recharge::$statusMap[$row['status']];
}
return $rows;
})->xlsx();
$grid->setActionClass(Grid\Displayers\Actions::class);
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableDelete();
$actions->disableQuickEdit();
$actions->disableEdit();
$actions->disableView();
if ($actions->row->status == Recharge::status_wait) {
$actions->append(new Pass());
}
});
$grid->disableCreateButton();
$grid->disableDeleteButton();
$grid->disableEditButton();
$grid->disableBatchDelete();
// $grid->disableRowSelector();
$grid->id->sortable();
$grid->user_id;
$grid->username;
$grid->column('agname','代理邮箱')->display(function (){
$var = ContractTool::GetProxyEmail($this->user_id);
//dd($var['username']);
return $var['username'];
});
$grid->column('user_auth.realname', '姓名');
// $grid->coin_id;
$grid->coin_name;
$grid->amount->display(function ($v) {
return custom_number_format($v, 8);
});
$grid->column('account_type', '账户类型')->using(UserWallet::$accountOptions)->label();
// $grid->collection_wallet;
$grid->address->limit(20)->responsive();
$grid->type->using(Recharge::$typeMap);
$grid->note;
$grid->datetime->display(function ($datetime) {
return date('Y-m-d H:i:s', $datetime);
});
// $grid->status->using(Recharge::$statusMap)->dot([0=>'danger',1=>'success',2=>'primary'])->filter(
// Grid\Column\Filter\In::make(Recharge::$statusMap)
// );
$grid->filter(function (Grid\Filter $filter) {
$grades = AgentGrade::getCachedGradeOption();
$filter->equal('coin_name')->width(2);
$filter->whereBetween('datetime', function ($q) {
$start = !empty($this->input['start']) ? strtotime($this->input['start']) : null;
$end = !empty($this->input['end']) ? strtotime($this->input['end']) : null;
// dd($this->input['end'],$end);
$q->whereBetween('datetime', [$start, $end + 86399]);
})->date()->width(4);
$filter->equal('user_id', 'UID')->width(2);
$filter->where('username', function ($q) {
$username = $this->input;
$q->whereHas('user', function ($q) use ($username) {
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
});
}, "用户名/手机/邮箱")->width(2);
$filter->where('agent_id', function ($query) {
$referrer = $this->input;
$referrer = ContractTool::getmailtoid($referrer);
$childs = collect(get_childs($referrer))->pluck('user_id')->toArray();
$query->whereIn('user_id', $childs);
}, '代理邮箱')->placeholder('代理邮箱')->width(3);
$filter->where('acc', function ($q) {
$username = $this->input;
$aa = $q->whereHas('user', function ($q) use ($username) {
$q->where('whethertopromote', $username);
});
}, "是否营销")->select(UserAuth::$typeMap)->width(2);
// $filter->equal('status','状态')->select(Recharge::$statusMap)->width(2);
$filter->equal('account_type', '账户类型')->select(UserWallet::$accountOptions)->width(2);
$filter->equal('type', '充值类型')->select(Recharge::$typeMap)->width(2);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Recharge(), function (Show $show) {
$show->id;
$show->user_id;
$show->username;
// $show->coin_id;
$show->coin_name;
$show->collection_wallet;
$show->datetime;
$show->amount;
$show->status;
$show->address;
$show->created_at;
$show->updated_at;
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Recharge(), function (Form $form) {
$form->display('id');
$form->text('user_id');
$form->text('username');
$form->text('coin_id');
$form->text('coin_name');
$form->text('collection_wallet');
$form->text('datetime');
$form->text('amount');
$form->text('status');
$form->text('address');
$form->display('created_at');
$form->display('updated_at');
});
}
}