293 lines
12 KiB
PHP
293 lines
12 KiB
PHP
<?php
|
||
|
||
namespace App\Admin\Controllers;
|
||
|
||
use Carbon\Carbon;
|
||
use App\Admin\Repositories\{Order, OrderGoods};
|
||
use Illuminate\Http\Request;
|
||
use Dcat\Admin\Admin;
|
||
use Dcat\Admin\Form;
|
||
use Dcat\Admin\Grid;
|
||
use Dcat\Admin\Show;
|
||
use Dcat\Admin\Http\Controllers\AdminController;
|
||
use Dcat\Admin\Layout\Content;
|
||
use App\Admin\Pages\{CreateOrder,PickupOrder};
|
||
use App\Models\{Order as OrderModel};
|
||
use App\Services\OrderService;
|
||
use App\Admin\Actions\RowActions\{OrderPickUpNotice, OrderCancle};
|
||
use Dcat\Admin\Http\JsonResponse;
|
||
|
||
|
||
class OrderController extends AdminController
|
||
{
|
||
|
||
/**
|
||
* Make a grid builder.
|
||
*
|
||
* @return Grid
|
||
*/
|
||
protected function grid()
|
||
{
|
||
$builder = Order::with(['user']);
|
||
return Grid::make($builder, function (Grid $grid) {
|
||
// $grid->column('id')->sortable();
|
||
$grid->column('order_sn');
|
||
$grid->column('order_number');
|
||
$grid->column('order_phone', '手机号');
|
||
$grid->column('order_price');
|
||
$grid->column('pay_type')->using(['1'=>'微信支付', '2' => '兑换支付', '3'=>'线下点单'])->label([
|
||
1 => 'success',
|
||
2 => 'warning',
|
||
3 => Admin::color()->info(),
|
||
]);
|
||
$grid->column('order_status')->bool(['1' => true, '-1' => false]);
|
||
// $grid->column('pay_status')->bool(['1' => true, '0' => false]);
|
||
// $grid->column('shipping_status')->bool(['1' => true, '0' => false]);
|
||
// $grid->column('pay_time');
|
||
// $grid->column('shipping_time');
|
||
// $grid->column('closed_time');
|
||
// $grid->column('is_reserve','是否预约')->using(['1'=>'预约订单', '0' => '普通订单'])->label([
|
||
// 0 => 'success',
|
||
// 1 => 'danger',
|
||
// ]);
|
||
// $grid->column('is_niu')->using(['1'=>'吹牛订单', '0' => '普通订单'])->label([
|
||
// 0 => 'success',
|
||
// 1 => 'danger',
|
||
// ]);
|
||
$grid->column('created_at', '下单时间');
|
||
// $grid->column('updated_at')->sortable();
|
||
$grid->model()->orderBy('created_at', 'desc');
|
||
$grid->filter(function (Grid\Filter $filter) {
|
||
$filter->expand(false);
|
||
// $filter->equal('id');
|
||
$filter->equal('order_sn');
|
||
// $filter->equal('pay_status')->select([0 => '未支付', 1 => '已支付'])->default(1);
|
||
// $filter->equal('order_phone', '手机号');
|
||
$filter->between('created_at', '下单时间')->date();
|
||
});
|
||
|
||
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
||
$actions->disableDelete();
|
||
if($actions->row->order_status == 1){
|
||
$actions->append(new OrderCancle());
|
||
}
|
||
if( $actions->row->pay_type == 1 &&
|
||
$actions->row->order_status == 1 &&
|
||
$actions->row->pay_status != 3 &&
|
||
$actions->row->pickup_notice == 0 &&
|
||
!empty($actions->row->order_number)
|
||
){
|
||
$actions->append(new OrderPickUpNotice());
|
||
}
|
||
$actions->disableEdit();
|
||
});
|
||
|
||
$grid->header(function ($collection) use ($grid) {
|
||
$query = OrderModel::query();
|
||
|
||
// 拿到表格筛选 where 条件数组进行遍历
|
||
$grid->model()->getQueries()->unique()->each(function ($value) use (&$query) {
|
||
if (in_array($value['method'], ['paginate', 'get', 'orderBy', 'orderByDesc'], true)) {
|
||
return;
|
||
}
|
||
|
||
$query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []);
|
||
});
|
||
|
||
// 查出统计数据
|
||
$data = $query->get();
|
||
$total_fee = $data->sum('pay_price');
|
||
$total_num = $data->count();
|
||
return "<div style='padding: 10px;'>订单数:$total_num 单 | 统计收益 : $total_fee 元</div>";
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Make a show builder.
|
||
*
|
||
* @param mixed $id
|
||
*
|
||
* @return Show
|
||
*/
|
||
protected function detail($id)
|
||
{
|
||
return Show::make($id, Order::with(['ticket','ticket.quanTicket']), function (Show $show) {
|
||
$show->row(function(Show\Row $show){
|
||
$show->width(4)->field('order_sn');
|
||
$show->width(4)->field('order_number');
|
||
$show->width(4)->field('created_at', '下单时间');
|
||
// $show->width(4)->field('is_reserve', '是否预约')->using(['0' => '普通订单', '1'=>'预约订单'])->label()->append(function($info){
|
||
// return $this->is_reserve? Carbon::parse($this->reserve_time)->toDateString():'';
|
||
// });
|
||
// $show->width(4)->field('is_niu','是否吹牛')->using(['0' => '普通订单', '1'=>'吹牛订单'])->label();
|
||
});
|
||
$show->row(function(Show\Row $show){
|
||
// $show->width(4)->field('order_phone', '手机号');
|
||
$show->width(4)->field('order_status', '订单状态')->using(['0'=>'未确认', '1' => '已确认', '-1'=>'已取消']);
|
||
$show->width(4)->field('order_price')->prepend('¥');
|
||
$show->width(4)->field('pay_price', '支付价格')->prepend('¥');
|
||
});
|
||
//优惠券信息
|
||
// $show->row(function(Show\Row $show){
|
||
// $show->width(4)->field('ticket_id', '优惠券')->as(function(){
|
||
// return $this->ticket->quanTicket->quan_name??'';
|
||
// })->label();
|
||
// $show->width(4)->field('ticket_value', '优惠金额')->prepend('¥');
|
||
// $show->width(4)->field('pay_price', '支付价格')->prepend('¥');
|
||
// });
|
||
$show->row(function(Show\Row $show){
|
||
|
||
|
||
// $show->width(4)->field('pay_status', '支付状态')->using(['0'=>'未支付', '1' => '已支付']);
|
||
// $show->width(4)->field('shipping_status', '取餐状态')->using(['0'=>'未取餐', '1' => '已取餐']);
|
||
});
|
||
// $show->row(function(Show\Row $show){
|
||
|
||
// // $show->width(4)->field('pay_time', '支付时间');
|
||
// // $show->width(4)->field('shipping_time', '取餐时间');
|
||
// });
|
||
|
||
// $show->row(function(Show\Row $show){
|
||
$show->goods(function ($model) {
|
||
$grid = new Grid(new OrderGoods);
|
||
$grid->disablePagination();
|
||
$grid->disableToolbar();
|
||
$grid->disableRefreshButton();
|
||
$grid->disableActions();
|
||
$grid->model()->where('order_id', $model->id);
|
||
$grid->disableRowSelector();
|
||
$grid->goods_name('商品名称');
|
||
// $grid->column('is_too', '第二杯半价')->bool(['1' => true, '0' => false]);
|
||
$grid->goods_attrs('规格属性')->display(function($goods_attrs){
|
||
$goods_attrs = json_decode($goods_attrs, true);
|
||
return isset($goods_attrs['info_name']) ? $goods_attrs['info_name']:'';
|
||
})->label();
|
||
$grid->goods_num('商品数量')->prepend('X ');
|
||
$grid->goods_price('商品价格')->prepend('¥');
|
||
// $grid->goods_cover()->image(100, 100);
|
||
return $grid;
|
||
});
|
||
// });
|
||
|
||
$show->panel()
|
||
->tools(function ($tools) {
|
||
$tools->disableEdit();
|
||
$tools->disableDelete();
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 线下下单
|
||
*/
|
||
public function create(Content $content){
|
||
return $content->header('线下下单')
|
||
->description('表单')
|
||
->body(new CreateOrder());
|
||
}
|
||
|
||
public function toStore(Request $request){
|
||
$goods_infos = $request->input('goods_info');
|
||
$goods_infos = json_decode($goods_infos, true);
|
||
$is_ajax = $request->ajax();
|
||
if(count($goods_infos) > 0){
|
||
$order_service = new OrderService();
|
||
$order = $order_service->createOrderToAdmin($goods_infos);
|
||
if(isset($order['status']) && $order['status'] == false){
|
||
if($is_ajax){
|
||
return JsonResponse::make()->error('下单失败:'.$order['message']);
|
||
}else{
|
||
admin_toastr('下单失败:'.$order['message'], 'error');
|
||
}
|
||
}else{
|
||
if($is_ajax){
|
||
$order = $order_service->payOrder($order);
|
||
return JsonResponse::make()->success('下单成功, 取餐码: '.($order->order_number??''));
|
||
}else{
|
||
admin_toastr('下单成功', 'success');
|
||
}
|
||
}
|
||
}else{
|
||
if($is_ajax){
|
||
return JsonResponse::make()->error('下单失败');
|
||
}else{
|
||
admin_toastr('下单失败', 'error');
|
||
}
|
||
}
|
||
return redirect(admin_route('orders.index'));
|
||
}
|
||
|
||
/**
|
||
* 取餐核销
|
||
*/
|
||
public function pickup(Content $content){
|
||
return $content->header('取餐核销')
|
||
->description('表单')
|
||
->body(new PickupOrder());
|
||
}
|
||
|
||
/**
|
||
* 确认取餐
|
||
*/
|
||
public function toPickup(Request $request){
|
||
$order_sn = $request->input('order_number');
|
||
$order = OrderModel::where('order_sn', $order_sn)
|
||
// $start_time = Carbon::now()->startOfDay();
|
||
// $end_time = Carbon::now()->endOfDay();
|
||
// $order_number = $request->input('order_number');
|
||
// OrderModel::where('order_number', $order_number)
|
||
// ->whereBetween('created_at', [$start_time, $end_time])
|
||
->where([
|
||
'order_status' =>1,
|
||
'pay_status' =>1
|
||
])
|
||
->first();
|
||
if($order){
|
||
if($order->shipping_status == 0){
|
||
$order_service = new OrderService();
|
||
$res = $order_service->shippingOrder($order);
|
||
if(isset($res['status']) && $res['status']==false){
|
||
return JsonResponse::make()->error($res['message']);
|
||
}else{
|
||
return JsonResponse::make()->success('取餐成功');
|
||
}
|
||
}else{
|
||
return JsonResponse::make()->error('该订单已取餐');
|
||
}
|
||
}else{
|
||
return JsonResponse::make()->error('未找到符合订单');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Make a form builder.
|
||
*
|
||
* @return Form
|
||
*/
|
||
protected function form()
|
||
{
|
||
return Form::make(new Order(), function (Form $form) {
|
||
$form->display('id');
|
||
$form->text('user_id');
|
||
$form->text('order_sn');
|
||
$form->text('order_number');
|
||
$form->text('order_price');
|
||
$form->text('pay_type');
|
||
$form->text('shipping_status');
|
||
$form->text('is_niu');
|
||
|
||
$form->display('created_at');
|
||
$form->display('updated_at');
|
||
});
|
||
}
|
||
|
||
public function destroy($id){
|
||
$goods = OrderModel::findOrFail($id);
|
||
if($goods->pay_status == 1){
|
||
return JsonResponse::make()->error('该订单已支付,无法删除');
|
||
}
|
||
return parent::destroy($id);
|
||
}
|
||
}
|