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.
247 lines
9.7 KiB
247 lines
9.7 KiB
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use App\Admin\Actions\OptionSceneOrder\Handle;
|
|
use App\Models\Agent;
|
|
use App\Models\AgentGrade;
|
|
use App\Models\BonusLog;
|
|
use App\Models\OptionSceneOrder;
|
|
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 OptionSceneOrderController extends AdminController
|
|
{
|
|
|
|
public function statistics()
|
|
{
|
|
$builder1 = $builder2 = $builder3 = OptionSceneOrder::query()->whereHas('user', function ($q) {
|
|
$q->where('is_system', 0);
|
|
});
|
|
|
|
// 矿工佣金
|
|
$builder9 = BonusLog::query()->where('status', BonusLog::status_hand)->whereHas('user', function ($q) {
|
|
$q->where('is_system', 0);
|
|
});
|
|
|
|
$params = request()->only(['user_id', 'username', 'order_no', 'created_at']);
|
|
|
|
if (!empty($params)) {
|
|
if (!empty($params['user_id'])) {
|
|
$builder1->where('user_id', $params['user_id']);
|
|
$builder2->where('user_id', $params['user_id']);
|
|
$builder3->where('user_id', $params['user_id']);
|
|
$builder9->where('user_id', $params['user_id']);
|
|
}
|
|
if (!empty($params['username'])) {
|
|
$username = $params['username'];
|
|
$builder1->whereHas('user', function ($q) use ($username) {
|
|
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
|
|
});
|
|
$builder2->whereHas('user', function ($q) use ($username) {
|
|
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
|
|
});
|
|
$builder3->whereHas('user', function ($q) use ($username) {
|
|
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
|
|
});
|
|
$builder9->whereHas('user', function ($q) use ($username) {
|
|
$q->where('username', $username)->orWhere('phone', $username)->orWhere('email', $username);
|
|
});
|
|
}
|
|
if (!empty($params['order_no'])) {
|
|
$builder1->where('order_no', 'like', $params['order_no']);
|
|
$builder2->where('order_no', 'like', $params['order_no']);
|
|
$builder3->where('order_no', 'like', $params['order_no']);
|
|
}
|
|
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->whereDate('created_at', '>=', $start)->whereDate('created_at', '<=', $end);
|
|
$builder3->whereDate('created_at', '>=', $start)->whereDate('created_at', '<=', $end);
|
|
$builder9->whereDate('created_at', '>=', $start)->whereDate('created_at', '<=', $end);
|
|
}
|
|
}
|
|
|
|
$res1 = $builder1->where('status', OptionSceneOrder::status_delivered)->where('delivery_amount', '>', 0)->sum('delivery_amount');
|
|
$res2 = $builder2->where('status', OptionSceneOrder::status_delivered)->where('delivery_amount', '>', 0)->sum('bet_amount');
|
|
$res3 = $builder3->where('status', OptionSceneOrder::status_delivered)->where('delivery_amount', '<', 0)->sum('delivery_amount');
|
|
|
|
//总盈利 结算为负数即用户亏损平台盈利
|
|
$p = abs($res3);
|
|
//总亏损
|
|
$l = $res1 - $res2;
|
|
$pl = $p - $l;
|
|
|
|
$bonus_count = $builder9->sum('amount');
|
|
|
|
$con = '<code>' . '总盈亏:' . $pl . 'USDT</code> ' . '<code>' . '矿工佣金:' . $bonus_count . 'USDT</code> ' . '<code>' . '实际盈亏:' . PriceCalculate($pl, '-', $bonus_count, 8) . 'USDT</code> ';
|
|
// $con = '<code>'.'总盈亏:'. $pl .'USDT</code> ';
|
|
return Alert::make($con, '统计')->info();
|
|
}
|
|
|
|
/**
|
|
*期权订单
|
|
*
|
|
* @return Grid
|
|
*/
|
|
protected $title = "期权订单";
|
|
|
|
protected function grid()
|
|
{
|
|
return Grid::make(OptionSceneOrder::with(['user', 'scene']), function (Grid $grid) {
|
|
$grid->model()->orderByDesc("created_at");
|
|
|
|
#统计
|
|
$grid->header(function ($query) {
|
|
return $this->statistics();
|
|
});
|
|
|
|
$grid->fixColumns(1);
|
|
|
|
$grid->disableActions();
|
|
$grid->disableBatchDelete();
|
|
$grid->disableCreateButton();
|
|
|
|
// TODO 异常订单处理
|
|
// $grid->tools([ new Handle() ]);
|
|
|
|
// $grid->order_id->sortable();
|
|
// $grid->column("order_no","订单号");
|
|
$grid->user_id;
|
|
$grid->column('user.referrer', '代理')->display(function ($v) {
|
|
return Agent::query()->where('id', $v)->value('name');
|
|
});
|
|
$grid->bet_amount;
|
|
$grid->bet_coin_name;
|
|
$grid->odds;
|
|
$grid->range;
|
|
$grid->column("涨跌平")->display(function () {
|
|
if ($this->up_down == "1") {
|
|
return "<span style='color:red'>涨</span>";
|
|
} else if ($this->up_down == "2") {
|
|
return "<span style='color:green'>跌</span>";
|
|
} elseif ($this->up_down == 3) {
|
|
return "<span style='color:dodgerblue'>平</span>";
|
|
}
|
|
});
|
|
|
|
$grid->status->using(OptionSceneOrder::$statusMap)->dot([1 => 'primary', 2 => 'success']);
|
|
$grid->fee->display(function ($v) {
|
|
return $v . ' ' . $this->bet_coin_name;
|
|
});
|
|
$grid->delivery_amount;
|
|
$grid->delivery_time->display(function ($v) {
|
|
return blank($v) ? null : date("Y-m-d H:i:s", $v);
|
|
});
|
|
$grid->column('scene.begin_price', "开盘价");
|
|
$grid->column('scene.end_price', "收盘价");
|
|
$grid->column('scene.delivery_up_down', "<span style='color: red'>涨</span><span style='color: darkgreen'>跌</span><span style='color: #0d77e4'>平</span>")->display(function ($d) {
|
|
if ($d == 1) {
|
|
return "<span style='color:red'>涨 </span>";
|
|
} else if ($d == 2) {
|
|
return "<span style='color:green'>跌 </span>";
|
|
} elseif ($d == 3) {
|
|
return "<span style='color:dodgerblue'>平 </span>";
|
|
}
|
|
});
|
|
|
|
$grid->created_at->sortable();
|
|
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$filter->between('created_at', "时间")->datetime();
|
|
$filter->equal('user_id', '用户id')->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(4);
|
|
// $filter->like('order_no', '订单号')->width(3);
|
|
$filter->where('pid', function ($query) {
|
|
$referrer = $this->input;
|
|
$query->whereHas('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('user', function ($query) use ($base_ids) {
|
|
$query->whereIn('user_id', $base_ids);
|
|
});
|
|
}, '代理商UID')->width(3);
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Make a show builder.
|
|
*
|
|
* @param mixed $id
|
|
*
|
|
* @return Show
|
|
*/
|
|
protected function detail($id)
|
|
{
|
|
return Show::make($id, new OptionSceneOrder(), function (Show $show) {
|
|
$show->order_id;
|
|
$show->order_no;
|
|
$show->user_id;
|
|
$show->bet_amount;
|
|
$show->bet_coin_name;
|
|
$show->odds;
|
|
$show->range;
|
|
$show->up_down;
|
|
$show->status;
|
|
$show->fee;
|
|
$show->delivery_amount;
|
|
$show->delivery_time;
|
|
$show->created_at;
|
|
$show->updated_at;
|
|
$show->panel()
|
|
->tools(function ($tools) {
|
|
$tools->disableEdit();
|
|
//$tools->disableList();
|
|
$tools->disableDelete();
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Make a form builder.
|
|
*
|
|
* @return Form
|
|
*/
|
|
protected function form()
|
|
{
|
|
return Form::make(new OptionSceneOrder(), function (Form $form) {
|
|
$form->display('order_id');
|
|
$form->text('order_no');
|
|
$form->text('user_id');
|
|
$form->text('bet_amount');
|
|
$form->text('bet_coin_name');
|
|
$form->text('odds');
|
|
$form->text('range');
|
|
$form->text('up_down');
|
|
$form->text('status');
|
|
$form->text('fee');
|
|
$form->text('delivery_amount');
|
|
$form->text('delivery_time');
|
|
$form->display('created_at');
|
|
$form->display('updated_at');
|
|
|
|
if ($form->isCreating()) {
|
|
}
|
|
|
|
if ($form->isEditing()) {
|
|
|
|
$form->saved(function (Form $form) {
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|