diff --git a/beike/Admin/Http/Controllers/OrderController.php b/beike/Admin/Http/Controllers/OrderController.php index aa28b6f8..41ce82d7 100644 --- a/beike/Admin/Http/Controllers/OrderController.php +++ b/beike/Admin/Http/Controllers/OrderController.php @@ -13,11 +13,18 @@ namespace Beike\Admin\Http\Controllers; use Beike\Models\Order; use Beike\Repositories\OrderRepo; +use Beike\Services\StateMachineService; use Beike\Shop\Http\Resources\Account\OrderList; use Illuminate\Http\Request; class OrderController extends Controller { + /** + * 获取订单列表 + * + * @param Request $request + * @return mixed + */ public function index(Request $request) { $orders = OrderRepo::getListAll(); @@ -27,6 +34,14 @@ class OrderController extends Controller return view('admin::pages.orders.index', $data); } + + /** + * 查看单个订单 + * + * @param Request $request + * @param Order $order + * @return mixed + */ public function show(Request $request, Order $order) { $order->load(['orderTotals']); @@ -36,4 +51,23 @@ class OrderController extends Controller return view('admin::pages.orders.form', $data); } + + + /** + * 更新订单状态,添加订单更新日志 + * + * @param Request $request + * @param Order $order + * @return array + * @throws \Throwable + */ + public function updateStatus(Request $request, Order $order) + { + $status = $request->get('status'); + $comment = $request->get('comment'); + $notify = $request->get('notify'); + $stateMachine = new StateMachineService($order); + $stateMachine->changeStatus($status, $comment, $notify); + return json_success('更新成功'); + } } diff --git a/beike/Admin/Repositories/PermissionRepo.php b/beike/Admin/Repositories/PermissionRepo.php index f8689b9e..b94998e9 100644 --- a/beike/Admin/Repositories/PermissionRepo.php +++ b/beike/Admin/Repositories/PermissionRepo.php @@ -68,7 +68,7 @@ class PermissionRepo */ private function getOrderPermissions(): array { - $routes = ['orders_index', 'orders_create', 'orders_show', 'orders_update', 'orders_delete']; + $routes = ['orders_index', 'orders_create', 'orders_show', 'orders_update', 'orders_delete', 'orders_update_status']; $items = $this->getPermissionList('order', $routes); return hook_filter('role.order_permissions', $items); } diff --git a/beike/Admin/Routes/admin.php b/beike/Admin/Routes/admin.php index 35d95907..7a4ca495 100644 --- a/beike/Admin/Routes/admin.php +++ b/beike/Admin/Routes/admin.php @@ -65,6 +65,7 @@ Route::prefix($adminName) // 订单 Route::middleware('can:orders_index')->get('orders', [Controllers\OrderController::class, 'index'])->name('orders.index'); Route::middleware('can:orders_show')->get('orders/{order}', [Controllers\OrderController::class, 'show'])->name('orders.show'); + Route::middleware('can:orders_update_status')->put('orders/{order}/status', [Controllers\OrderController::class, 'updateStatus'])->name('orders.update_status'); // 插件 diff --git a/beike/Models/OrderHistory.php b/beike/Models/OrderHistory.php new file mode 100644 index 00000000..b4c794b7 --- /dev/null +++ b/beike/Models/OrderHistory.php @@ -0,0 +1,19 @@ + + * @created 2022-08-08 17:53:53 + * @modified 2022-08-08 17:53:53 + */ + +namespace Beike\Models; + +class OrderHistory extends Base +{ + protected $fillable = [ + 'order_id', 'status', 'notify', 'comment' + ]; +} diff --git a/beike/Services/StateMachineService.php b/beike/Services/StateMachineService.php new file mode 100644 index 00000000..9f8cb135 --- /dev/null +++ b/beike/Services/StateMachineService.php @@ -0,0 +1,61 @@ + + * @created 2022-08-08 18:21:47 + * @modified 2022-08-08 18:21:47 + */ + +namespace Beike\Services; + +use Beike\Models\Order; +use Beike\Models\OrderHistory; + +class StateMachineService +{ + private Order $order; + private int $orderId; + + public function __construct(Order $order) + { + $this->order = $order; + $this->orderId = $order->id; + } + + + /** + * @param $status + * @param string $comment + * @param false $notify + * @throws \Throwable + */ + public function changeStatus($status, string $comment = '', bool $notify = false) + { + $order = $this->order; + + $this->createOrderHistory($status, $comment, $notify); + $order->status = $status; + $order->saveOrFail(); + } + + + /** + * @param $status + * @param string $comment + * @param false $notify + * @throws \Throwable + */ + private function createOrderHistory($status, string $comment = '', bool $notify = false) + { + $history = new OrderHistory([ + 'order_id' => $this->orderId, + 'status' => $status, + 'comment' => $comment, + 'notify' => $notify + ]); + $history->saveOrFail(); + } +} diff --git a/database/migrations/2022_08_08_094745_order_history.php b/database/migrations/2022_08_08_094745_order_history.php new file mode 100644 index 00000000..fabca246 --- /dev/null +++ b/database/migrations/2022_08_08_094745_order_history.php @@ -0,0 +1,34 @@ +id(); + $table->integer('order_id'); + $table->string('status'); + $table->boolean('notify'); + $table->text('comment'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +}; diff --git a/resources/beike/admin/views/pages/orders/form.blade.php b/resources/beike/admin/views/pages/orders/form.blade.php index faf88954..9443a4e4 100644 --- a/resources/beike/admin/views/pages/orders/form.blade.php +++ b/resources/beike/admin/views/pages/orders/form.blade.php @@ -51,6 +51,7 @@ + @can('orders_update_status')
状态
@@ -82,6 +83,7 @@
+ @endcan
商品信息
@@ -112,11 +114,10 @@ @endforeach - @foreach ($order->orderTotals as $order) + @foreach ($order->orderTotals as $orderTotal) - {{-- {{ $order->title }}: {{ $order->value }} --}} - {{ $order->title }} - {{ $order->value }} + {{ $orderTotal->title }} + {{ $orderTotal->value }} @endforeach @@ -133,7 +134,8 @@ @endsection @push('footer') - + @endcan @endpush