dficoins
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.
 
 
 

192 lines
7.3 KiB

<?php
namespace App\Admin\Controllers;
use App\Models\Agent;
use App\Models\AgentGrade;
use App\Models\Coins;
use App\Models\InsideTradeOrder;
use App\Models\User;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Controllers\AdminController;
use Dcat\Admin\Widgets\Alert;
class InsideTradeOrderController extends AdminController
{
public function statistics()
{
$builder1 = InsideTradeOrder::query();
$params = request()->only(['user_id', 'username', 'created_at']);
if (!empty($params)) {
if (!empty($params['user_id'])) {
$user_id = $params['user_id'];
$builder1->where(function ($q) use ($user_id) {
$q->where('buy_user_id', $user_id)->orWhere('sell_user_id', $user_id);
});
}
if (!empty($params['username'])) {
$username = $params['username'];
$builder1->where(function ($q) use ($username) {
$q->whereHas('buy_user', function ($q) use ($username) {
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
})->orWhereHas('sell_user', function ($q) use ($username) {
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
});
});
}
if (!empty($params['created_at']) && !empty($params['created_at']['start'])) {
$start = $params['created_at']['start'];
$end = $params['created_at']['end'];
$builder1->whereDate('created_at', '>=', $start)->whereDate('created_at', '<=', $end);
}
}
$builder2 = $builder1;
// \DB::enableQueryLog();
$records1 = $builder1->groupBy('base_coin_id')->selectRaw('sum(trade_buy_fee) as total_fee, base_coin_id as coin_id')->get();
$records2 = $builder2->groupBy('quote_coin_id')->selectRaw('sum(trade_sell_fee) as total_fee, quote_coin_id as coin_id')->get();
$tmp = $records1->concat($records2);
// dd(\DB::getQueryLog());
$records = [];
foreach ($tmp as $k => $v) {
if (!isset($records[$v['coin_id']])) {
$records[$v['coin_id']] = $v;
} else {
$records[$v['coin_id']]['total_fee'] += $v['total_fee'];
}
}
// dd($records);
$con = '';
foreach ($records as $record) {
$coin_name = Coins::query()->where('coin_id', $record['coin_id'])->value('coin_name');
$con .= '<code>' . $coin_name . '手续费:' . $record['total_fee'] . '</code> ';
}
return Alert::make($con, '统计')->info();
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(InsideTradeOrder::with(['buy_user', 'sell_user']), function (Grid $grid) {
$grid->model()->orderByDesc("order_id");
#统计
$grid->header(function ($query) {
return $this->statistics();
});
$grid->disableActions();
$grid->disableCreateButton();
$grid->disableBatchDelete();
$grid->disableDeleteButton();
$grid->order_id->sortable();
$grid->buy_order_no;
$grid->sell_order_no;
$grid->column('buy_user.username', '买家');
$grid->column('sell_user.username', '卖家');
$grid->unit_price;
$grid->symbol;
$grid->trade_amount;
$grid->trade_money;
$grid->trade_buy_fee->display(function ($v) {
return $v . ' ' . str_before($this->symbol, '/');
});
$grid->trade_sell_fee->display(function ($v) {
return $v . ' ' . str_after($this->symbol, '/');
});
$grid->created_at;
// $grid->updated_at->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->between('created_at', "时间")->datetime();
$filter->where('user_id', function ($q) {
$q->where('buy_user_id', $this->input)->orWhere('sell_user_id', $this->input);
}, 'UID')->width(2);
$filter->where('username', function ($q) {
$username = $this->input;
$q->whereHas('buy_user', function ($q) use ($username) {
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
})->orWhereHas('sell_user', function ($q) use ($username) {
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
});
}, "用户名/手机/邮箱")->width(3);
$filter->where('pid', function ($query) {
$referrer = $this->input;
$query->whereHas('buy_user', function ($query) use ($referrer) {
$query->where('pid', $referrer);
})->whereHas('sell_user', function ($query) use ($referrer) {
$query->where('pid', $referrer);
});
}, '代理商UID')->width(3);
$filter->where('agent_id', function ($query) {
$base_ids = collect(User::getChilds($this->input))->pluck('user_id');
$query->whereHas('buy_user', function ($query) use ($base_ids) {
$query->whereIn('user_id', $base_ids);
})->whereHas('sell_user', function ($query) use ($base_ids) {
$query->whereIn('user_id', $base_ids);
});
}, '链上查询')->placeholder('输入代理商UID查询该代理商链上成交记录')->width(3);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new InsideTradeOrder(), function (Show $show) {
$show->order_id;
$show->buy_order_no;
$show->sell_order_no;
$show->buy_user_id;
$show->sell_user_id;
$show->unit_price;
$show->symbol;
$show->trade_amount;
$show->trade_money;
$show->trade_buy_fee;
$show->trade_sell_fee;
$show->created_at;
$show->updated_at;
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new InsideTradeOrder(), function (Form $form) {
$form->display('order_id');
$form->text('buy_order_no');
$form->text('sell_order_no');
$form->text('buy_user_id');
$form->text('sell_user_id');
$form->text('unit_price');
$form->text('symbol');
$form->text('trade_amount');
$form->text('trade_money');
$form->text('trade_buy_fee');
$form->text('trade_sell_fee');
$form->display('created_at');
$form->display('updated_at');
});
}
}