海工商新版后台
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.
 
 

257 lines
9.9 KiB

<?php
namespace App\Admin\Controllers;
use App\Admin\Extensions\Exporter\ImportOrder;
use App\Admin\Renderable\PayProjectTable;
use App\Models\Config;
use App\Models\Order;
use App\Models\PaymentList;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Table;
class OrderController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Order(), function (Grid $grid) {
//开启边框模式
$grid->withBorder();
// 开启字段选择器功能
$grid->showColumnSelector();
//开启导出功能
$grid->export(new ImportOrder());
//检测是否有筛选年届条件
$request = request();
if(empty($request->input("annual_session"))){
//取出当前年份
$config = Config::query()->where([
"unique_identification" => "annual_session"
])->first();
$grid->model()->where("annual_session", $config->data);
}else{
$grid->model()->where("annual_session", $request->input("annual_session"));
}
$grid->column('id')->sortable();
$grid->column('annual_session')->help("对应缴费年份,如2022-2023则表示缴纳该年份的费用");
$grid->column('idcard')->display(function($info){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
return $info->idcard;
}
})->help("不显示时代表未找到该用户");
$grid->column('mobile')->display(function($info){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
return $info->mobile;
}
})->help("不显示时代表未找到该用户");
$grid->column('user_name')->display(function(){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
$str = '';
if($info->is_test == 2){
$str = "(测试)";
}
return $info->name.$str;
}
})->help("不显示时代表未找到该用户");
$grid->column('sex', __('性别'))->display(function(){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(empty($info)){
return "不存在此账号";
}
if($info->sex == 1){
return "";
}
if($info->sex == 2){
return "";
}
return "未知";
});
$grid->column('speciality_id')->display(function(){
$info = UsersMember::query()->where("unique_number", $this->unique_number)->first();
if(!empty($info)){
$speciality = Speciality::query()->where("id", $info->speciality_id)->first();
if(!empty($speciality)){
$college = SecondaryCollege::query()->where("id", $speciality->secondary_college_id)->first();
if(!empty($college)){
return $speciality->speciality_name."{$college->name}";
}
}
}
})->limit(20);;
$grid->column('orders_num');
$grid->column('transaction_id')->limit(10);
$grid->column('price');
$grid->column('pay_type')->display(function(){
$msg = "未知";
if($this->pay_type == Order::PAY_TYPE_WECHAT) $msg = "微信支付";
return $msg;
});
$grid->column('pay_time')->display(function (){
$time_msg = "未支付";
if(!empty($this->pay_time)) $time_msg = date("Y-m-d H:i:s", $this->pay_time);
return $time_msg;
});
$grid->column('status')->display(function(){
if($this->status == Order::STATUS_UNPAID) return "未支付";
if($this->status == Order::STATUS_PAID) return "已支付";
if($this->status == Order::STATUS_CANCEL) return "已取消";
});
$grid->column('is_new_student_order')->display(function(){
if($this->is_new_student_order == Order::IS_NEW_STUDENT_ORDER_NEW) return "新生订单";
if($this->is_new_student_order == Order::IS_NEW_STUDENT_ORDER_NO) return "老生订单";
});
$grid->column("payment_data")->display('缴费项目')->modal( function (){
$resultData = [];
$nameData = [];
$data = json_decode($this->payment_data, true);
$payKeys = array_keys($data);
$payMentList = PaymentList::query()->where([
"unique_number" => $this->unique_number,
"annual_session" => $this->annual_session
])->whereIn("project_code", $payKeys)->get()->toArray();
if(!empty($payMentList)){
$payMentList = array_column($payMentList, null, "project_code");
foreach($data as $key => $item){
array_push($resultData, $item);
array_push($nameData, $payMentList[$key]['project_name']);
}
}
return Table::make($nameData, [$resultData]);
});
$grid->column('msg')->limit(10);
$grid->column('create_time')->display(function (){
if(!empty($this->create_time)){
return date("Y-m-d H:i:s", $this->create_time);
}
})->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->where("unique_number", function ($query) {
$unique_number = "";
$userInfo = UsersMember::query()->where('mobile', $this->input)->orWhere('idcard', $this->input)->orWhere('name', $this->input)->first(['unique_number']);
if(!empty($userInfo)){
$unique_number = $userInfo->unique_number;
}
$query->where('unique_number', $unique_number);
}, '手机号/身份证/姓名');
$filter->equal('is_new_student_order')->select(function (){
return [
Order::IS_NEW_STUDENT_ORDER_NEW => "新生",
Order::IS_NEW_STUDENT_ORDER_NO => "老生"
];
});
$filter->equal('status')->select(function (){
return [
Order::STATUS_UNPAID => "未支付",
Order::STATUS_PAID => "已支付",
Order::STATUS_CANCEL => "已取消"
];
});
$filter->equal('annual_session', '年届')->select(function (){
$list = Order::query()->distinct("annual_session")->get("annual_session")->toArray();
if(empty($list)) return [];
$list = array_column($list, "annual_session");
$result = [];
foreach($list as $item){
$result[$item] = $item;
}
return $result;
});
$filter->between('pay_time')->datetime()->toTimestamp();
});
// 禁用创建按钮
$grid->disableCreateButton();
// 禁用删除按钮
$grid->disableDeleteButton();
//禁用批量操作按钮
$grid->disableBatchDelete();
// 禁用详情按钮
$grid->disableViewButton();
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Order(), function (Show $show) {
$show->field('id');
$show->field('products_name');
$show->field('unique_number');
$show->field('orders_num');
$show->field('amounts_price');
$show->field('price');
$show->field('transaction_id');
$show->field('pay_type');
$show->field('pay_time');
$show->field('create_time');
$show->field('update_time');
$show->field('status');
$show->field('annual_session');
$show->field('payment_data');
$show->field('source');
$show->field('source_orders_num');
$show->field('dormitory_price');
$show->field('source_pay_time');
$show->field('msg');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Order(), function (Form $form) {
$form->display('id');
$form->text('msg');
//保存前回调
$form->saving(function (Form $form) {
if ($form->isCreating()) {
$form->create_time =time();
// 删除用户提交的数据
$form->deleteInput('update_time');
}else{
$form->update_time =time();
}
});
});
}
}