From 73ed204da2e3bd110a817a141775fc572d18ac69 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Fri, 20 May 2022 10:24:45 +0800 Subject: [PATCH] vip --- .../Controllers/Store/OrderController.php | 127 +++++++++++++++--- app/Admin/Services/OrderPackageService.php | 4 +- app/Admin/routes.php | 2 +- app/Models/OrderPackage.php | 2 +- app/Services/OrderService.php | 83 ++++++------ app/Services/VipService.php | 2 +- 6 files changed, 159 insertions(+), 61 deletions(-) diff --git a/app/Admin/Controllers/Store/OrderController.php b/app/Admin/Controllers/Store/OrderController.php index 781c51e1..ab31e6f5 100644 --- a/app/Admin/Controllers/Store/OrderController.php +++ b/app/Admin/Controllers/Store/OrderController.php @@ -2,18 +2,37 @@ namespace App\Admin\Controllers\Store; -use Dcat\Admin\{Form, Grid, Admin}; +use Dcat\Admin\{Form, Grid, Admin, Show}; use Dcat\Admin\Http\Controllers\AdminController; -use App\Models\Order; +use App\Models\{Order, OrderProduct, OrderPackage}; use App\Enums\PayWay; +use Dcat\Admin\Layout\Row; +use Dcat\Admin\Widgets\{Box, Tab, Card}; class OrderController extends AdminController { + public $statusMap = [ + 0 => '待付款', + 1 => '待发货', + 2 => '发货中', + 3 => '已发货', + 9 => '已完成', + 10 => '已取消', + ]; + public $statusColor = [ + 0 => 'primary', + 1 => 'warning', + 2 => 'danger', + 3 => 'success', + 9 => 'success', + 10 => '#b3b9bf', + ]; protected $translation = 'store-order'; + protected function grid() { $grid = new Grid(Order::with(['user', 'inviter'])); - $grid->model()->whereNotNull('inviter_id'); + $grid->model()->whereNotNull('inviter_id')->orderBy('created_at', 'desc'); $grid->column('sn')->copyable(); $grid->column('user.phone')->copyable(); @@ -22,27 +41,15 @@ class OrderController extends AdminController return bcdiv($value, 100, 2); })->prepend('¥'); $grid->column('sales_value'); - $grid->column('order_status')->using([ - 0 => '待付款', - 1 => '待发货', - 2 => '发货中', - 3 => '已发货', - 9 => '已完成', - 10 => '已取消', - ])->dot([ - 0=>'primary', - 1=>'warning', - 2=>'danger', - 3=>'success', - 9=>'success', - 10=>'#b3b9bf', - ]); + $grid->column('order_status')->using($this->statusMap)->dot($this->statusColor); $grid->column('pay_way')->display(function ($v) { return $v?->mallText(); })->circleDot(PayWay::colors()); $grid->column('pay_at'); $grid->column('created_at'); + $grid->showViewButton(); + $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->like('sn')->width(3); @@ -52,4 +59,88 @@ class OrderController extends AdminController }); return $grid; } + + protected function detail($id) + { + $show = Show::make($id, Order::with(['user', 'inviter'])); + $show->field('id'); + $show->field('sn'); + $show->field('user.phone'); + $show->field('inviter.phone'); + $show->field('total_amount')->as(function ($value) { + return bcdiv($value, 100, 2); + }); + $show->field('sales_value'); + $show->field('order_status')->as(function ($v) { + return $this->order_status; + })->using($this->statusMap)->dot($this->statusColor); + $show->field('pay_way')->as(function ($v) { + return $this->pay_way?->mallText(); + })->circleDot(PayWay::colors()); + $show->field('pay_at'); + $show->field('created_at'); + + $show->panel()->tools(function ($tools) { + $tools->disableEdit(); + $tools->disableDelete(); + }); + + $row = new Row(); + $row->column(5, $show); + $tab = Tab::make()->withCard(); + $tab->add('商品', Card::make($this->gridProduct($id))); + $tab->add('提货记录', Card::make($this->gridPackage($id))); + + $row->column(7, $tab); + return $row; + } + + protected function gridProduct($id) + { + $grid = Grid::make(OrderProduct::with([])); + $grid->model()->where('order_id', $id); + + $grid->column('name'); + $grid->column('sell_price', '销售价格')->display(function ($value) { + return bcdiv($value, 100, 2); + })->prepend('¥'); + $grid->column('vip_price', '会员价格')->display(function ($value) { + return bcdiv($value, 100, 2); + })->prepend('¥'); + $grid->column('quantity'); + $grid->column('sales_value'); + $grid->column('remain_quantity'); + $grid->column('product_total_amount')->display(function () { + return bcdiv($this->total_amount, 100, 2); + })->prepend('¥'); + + $grid->disableActions(); + $grid->disablePagination(); + $grid->disableRefreshButton(); + + return $grid; + } + + protected function gridPackage($id) + { + $grid = Grid::make(OrderPackage::with(['inviter', 'orderProducts'])); + + $grid->model()->where('order_id', $id)->orderBy('created_at', 'desc'); + + $grid->column('products', '商品')->display(function () { + $html = ''; + foreach($this->orderProducts as $item) { + $html .= '
'.$item->name.''.$item->pivot->quantity.'
'; + } + return $html; + }); + $grid->column('created_at', '提货时间'); + $grid->column('inviter.phone', '员工'); + + $grid->disableActions(); + $grid->disablePagination(); + $grid->disableRefreshButton(); + + return $grid; + } } diff --git a/app/Admin/Services/OrderPackageService.php b/app/Admin/Services/OrderPackageService.php index c43bfde8..ddc23742 100644 --- a/app/Admin/Services/OrderPackageService.php +++ b/app/Admin/Services/OrderPackageService.php @@ -20,7 +20,7 @@ class OrderPackageService * @param array $params {shipping_company, shipping_number, packages => {order_product_id, quantity}} * @param OrderPackage $package * - * @return void + * @return OrderPackage $package */ public function createPackage(Order $order, array $params, ?OrderPackage $package = null) { @@ -118,6 +118,8 @@ class OrderPackageService 'shipping_state'=>Order::SHIPPING_STATE_PROCESSING, ]); } + + return $package; } /** diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 26586829..f9373948 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -179,7 +179,7 @@ Route::group([ $router->resource('store/list', 'Store\StoreController'); $router->resource('store/product', 'Store\ProductController'); $router->resource('store/stock', 'Store\StockController'); - $router->resource('store/order', 'Store\OrderController'); + $router->resource('store/order', 'Store\OrderController')->only(['index', 'show']); $router->resource('store/user', 'Store\UserController'); // $router->resource('store/{store_id}/admin', 'Store\AdministratorController'); diff --git a/app/Models/OrderPackage.php b/app/Models/OrderPackage.php index ef708c71..12aec420 100644 --- a/app/Models/OrderPackage.php +++ b/app/Models/OrderPackage.php @@ -92,7 +92,7 @@ class OrderPackage extends Model */ public function orderProducts() { - return $this->belongsToMany(OrderProduct::class, 'order_package_products', 'order_package_id', 'order_product_id'); + return $this->belongsToMany(OrderProduct::class, 'order_package_products', 'order_package_id', 'order_product_id')->withPivot(['quantity']); } /** diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 5eb4fc3a..7e445c27 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -1170,49 +1170,54 @@ class OrderService ]); } - $products = $order->products()->get(); - - foreach ($products->load(['sku', 'spu']) as $product) { - if ($product->sku === null) { - continue; - } - - // 如果商品不是赠品,则直接增加商品库存 - if (! $product->isGift()) { - $product->spu?->increment('sales', -$product->quantity); - $product->sku?->update([ - 'stock' => DB::Raw("stock + {$product->quantity}"), - 'sales' => DB::Raw("sales - {$product->quantity}"), - ]); - continue; - } - - //原赠品 - if ($product->gift_for_sku_id) { - $gift = ProductGift::where('sku_id', $product->gift_for_sku_id) - ->where('gift_sku_id', $product->sku_id) - ->first(); - - if ($gift === null) { + // 门店订单 + if ($order->store_id) { + // 返还店铺库存 + } else { + $products = $order->products()->get(); + + foreach ($products->load(['sku', 'spu']) as $product) { + if ($product->sku === null) { continue; } - - if ($gift->isLimit()) { - $gift->update([ - 'remaining' => DB::raw("remaining+{$product->quantity}"), - 'sent' => DB::raw("sent-{$product->quantity}"), + + // 如果商品不是赠品,则直接增加商品库存 + if (! $product->isGift()) { + $product->spu?->increment('sales', -$product->quantity); + $product->sku?->update([ + 'stock' => DB::Raw("stock + {$product->quantity}"), + 'sales' => DB::Raw("sales - {$product->quantity}"), ]); - } else { - $gift->decrement('sent', $product->quantity); + continue; + } + + //原赠品 + if ($product->gift_for_sku_id) { + $gift = ProductGift::where('sku_id', $product->gift_for_sku_id) + ->where('gift_sku_id', $product->sku_id) + ->first(); + + if ($gift === null) { + continue; + } + + if ($gift->isLimit()) { + $gift->update([ + 'remaining' => DB::raw("remaining+{$product->quantity}"), + 'sent' => DB::raw("sent-{$product->quantity}"), + ]); + } else { + $gift->decrement('sent', $product->quantity); + } + continue; + } else {//新赠品, 则直接增加商品库存 + $product->spu?->increment('sales', -$product->quantity); + $product->sku?->update([ + 'stock' => DB::Raw("stock + {$product->quantity}"), + 'sales' => DB::Raw("sales - {$product->quantity}"), + ]); + continue; } - continue; - } else {//新赠品, 则直接增加商品库存 - $product->spu?->increment('sales', -$product->quantity); - $product->sku?->update([ - 'stock' => DB::Raw("stock + {$product->quantity}"), - 'sales' => DB::Raw("sales - {$product->quantity}"), - ]); - continue; } } diff --git a/app/Services/VipService.php b/app/Services/VipService.php index 84c328ac..0bd68d09 100644 --- a/app/Services/VipService.php +++ b/app/Services/VipService.php @@ -46,7 +46,7 @@ class VipService $money = $userVip->price; $debug = config('app.debug'); if ($debug) { - $money = 1; + $money = 0.01; } $user = $userVip->user; // 微信小程序支付