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
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(); |
|
} |
|
}); |
|
}); |
|
} |
|
}
|
|
|