From 01f1822c277f941eb40fc3604f1f1b8be9e97523 Mon Sep 17 00:00:00 2001 From: TL Date: Wed, 3 Aug 2022 16:48:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=94=AE=E5=90=8E=E6=9C=8D=E5=8A=A1=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=EF=BC=88=E9=80=80=E6=8D=A2=E8=B4=A7=EF=BC=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Admin/Http/Controllers/RmaController.php | 2 +- beike/Models/OrderProduct.php | 8 +++ beike/Models/Rma.php | 2 +- beike/Repositories/OrderProductRepo.php | 14 +++++ beike/Repositories/RmaRepo.php | 4 +- beike/Shop/Http/Controllers/RmaController.php | 61 +++++++++++++++++++ beike/Shop/Http/Requests/RmaRequest.php | 59 ++++++++++++++++++ beike/Shop/Services/RmaService.php | 46 ++++++++++++++ .../2022_07_29_021003_return_table.php | 2 +- 9 files changed, 193 insertions(+), 5 deletions(-) create mode 100644 beike/Shop/Http/Controllers/RmaController.php create mode 100644 beike/Shop/Http/Requests/RmaRequest.php create mode 100644 beike/Shop/Services/RmaService.php diff --git a/beike/Admin/Http/Controllers/RmaController.php b/beike/Admin/Http/Controllers/RmaController.php index 26ee75a1..4576e1e2 100644 --- a/beike/Admin/Http/Controllers/RmaController.php +++ b/beike/Admin/Http/Controllers/RmaController.php @@ -21,7 +21,7 @@ class RmaController extends Controller { public function index(Request $request) { - $rmas = RmaRepo::list($request->only('name', 'email', 'telephone', 'product_name', 'model', 'type', 'status')); + $rmas = RmaRepo::list($request->only('name', 'email', 'telephone', 'product_name', 'sku', 'type', 'status')); $data = [ 'rmas' => $rmas, ]; diff --git a/beike/Models/OrderProduct.php b/beike/Models/OrderProduct.php index 12728dc0..05bd5e78 100644 --- a/beike/Models/OrderProduct.php +++ b/beike/Models/OrderProduct.php @@ -11,9 +11,17 @@ namespace Beike\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; + class OrderProduct extends Base { protected $fillable = [ 'product_id', 'order_number', 'product_sku', 'name', 'image', 'quantity', 'price', ]; + + public function order(): BelongsTo + { + return $this->belongsTo(Order::class); + } + } diff --git a/beike/Models/Rma.php b/beike/Models/Rma.php index 49a199b4..fc14760c 100644 --- a/beike/Models/Rma.php +++ b/beike/Models/Rma.php @@ -19,7 +19,7 @@ class Rma extends Base { use HasFactory; - protected $fillable = ['order_id','order_product_id','customer_id','name','email','telephone','product_name','model','quantity','opened','rma_reason_id','type','status','comment']; + protected $fillable = ['order_id','order_product_id','customer_id','name','email','telephone','product_name','sku','quantity','opened','rma_reason_id','type','status','comment']; public function order() :BelongsTo { diff --git a/beike/Repositories/OrderProductRepo.php b/beike/Repositories/OrderProductRepo.php index 90553754..c8c52ffc 100644 --- a/beike/Repositories/OrderProductRepo.php +++ b/beike/Repositories/OrderProductRepo.php @@ -12,6 +12,11 @@ namespace Beike\Repositories; use Beike\Models\Order; +use Beike\Models\OrderProduct; +use Beike\Models\Rma; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; class OrderProductRepo { @@ -31,4 +36,13 @@ class OrderProductRepo } $order->orderProducts()->createMany($orderProducts); } + + /** + * @param $id + * @return Builder|Builder[]|Collection|Model|null + */ + public static function find($id) + { + return OrderProduct::query()->findOrFail($id); + } } diff --git a/beike/Repositories/RmaRepo.php b/beike/Repositories/RmaRepo.php index 9d091997..a8420eb4 100644 --- a/beike/Repositories/RmaRepo.php +++ b/beike/Repositories/RmaRepo.php @@ -106,8 +106,8 @@ class RmaRepo if (isset($data['product_name'])) { $builder->where('product_name', 'like', "%{$data['product_name']}%"); } - if (isset($data['model'])) { - $builder->where('model', 'like', "%{$data['model']}%"); + if (isset($data['sku'])) { + $builder->where('sku', 'like', "%{$data['sku']}%"); } if (isset($data['type'])) { $builder->where('type', $data['type']); diff --git a/beike/Shop/Http/Controllers/RmaController.php b/beike/Shop/Http/Controllers/RmaController.php new file mode 100644 index 00000000..a43e4765 --- /dev/null +++ b/beike/Shop/Http/Controllers/RmaController.php @@ -0,0 +1,61 @@ + + * @created 2022-08-03 21:17:04 + * @modified 2022-08-03 21:17:04 + */ + +namespace Beike\Shop\Http\Controllers; + +use Beike\Repositories\RmaRepo; +use Beike\Shop\Http\Requests\RmaRequest; +use Beike\Shop\Services\RmaService; +use Illuminate\Http\Request; + +class RmaController extends Controller +{ + public function index(Request $request) + { + $rmas = RmaRepo::listByCustomer(current_customer()); + $data = [ + 'rmas' => $rmas, + ]; + + return view('rmas.index', $data); + } + + /** + * @param int $id + * @return mixed + */ + public function show(int $id) + { + $data = [ + 'rma' => RmaRepo::find($id), + 'statuses' => RmaRepo::getStatuses(), + 'types' => RmaRepo::getTypes(), + ]; + return view('rms/info', $data); + } + + public function create(int $orderProductId) + { + $data = [ + 'orderProductId' => $orderProductId, + 'statuses' => RmaRepo::getStatuses(), + 'types' => RmaRepo::getTypes(), + ]; + return view('rms/form', $data); + } + + public function store(RmaRequest $request) + { + $rma = RmaService::createFromShop($request->only('order_product_id', 'quantity', 'opened', 'rma_reason_id', 'type', 'comment')); + + return json_success('售后服务申请提交成功', $rma); + } +} diff --git a/beike/Shop/Http/Requests/RmaRequest.php b/beike/Shop/Http/Requests/RmaRequest.php new file mode 100644 index 00000000..b3ff468d --- /dev/null +++ b/beike/Shop/Http/Requests/RmaRequest.php @@ -0,0 +1,59 @@ + + * @created 2022-08-03 11:17:04 + * @modified 2022-08-03 11:17:04 + */ + +namespace Beike\Shop\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; + +class RmaRequest extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + $rules = [ + 'order_id' => 'required|exists:orders,id', + 'order_product_id' => 'required|exists:order_products,id', + 'customer_id' => 'required|exists:customers,id', + 'quantity' => 'required', + 'opened' => 'required', + 'rma_reason_id' => 'required|exists:rma_reasons,id', + 'type' => 'required', + ]; + return $rules; + } + + public function attributes() + { + return [ + 'order_id' => '订单', + 'order_product_id' => '订单商品', + 'customer_id' => '顾客', + 'quantity' => '数量', + 'opened' => '已拆包装', + 'rma_reason_id' => '退换货原因', + 'type' => '售后服务类型', + ]; + } +} diff --git a/beike/Shop/Services/RmaService.php b/beike/Shop/Services/RmaService.php new file mode 100644 index 00000000..5f61316a --- /dev/null +++ b/beike/Shop/Services/RmaService.php @@ -0,0 +1,46 @@ + + * @created 2022-08-03 16:52:57 + * @modified 2022-08-03 16:52:57 + */ + +namespace Beike\Shop\Services; + + + +use Beike\Repositories\OrderProductRepo; +use Beike\Repositories\RmaRepo; + +class RmaService +{ + public static function createFromShop($data) + { + $orderProduct = OrderProductRepo::find($data['order_product_id']); + $customer = current_customer(); + $params = [ + 'order_id' => $orderProduct->order->id, + 'order_product_id' => $data['order_product_id'], + 'customer_id' => $customer->id, + 'name' => $customer->name, + 'email' => $customer->email, + 'telephone' => $customer->telephone, + 'product_name' => $orderProduct->name, + 'sku' => $orderProduct->product_sku, + 'product_name' => $orderProduct->name, + 'quantity' => $data['quantity'], + 'opened' => $data['opened'], + 'rma_reason_id' => $data['rma_reason_id'], + 'type' => $data['type'], + 'comment' => $data['comment'], + ]; + + $rma = RmaRepo::create($params); + + return $rma; + } +} diff --git a/database/migrations/2022_07_29_021003_return_table.php b/database/migrations/2022_07_29_021003_return_table.php index d9a27d96..42fd3500 100644 --- a/database/migrations/2022_07_29_021003_return_table.php +++ b/database/migrations/2022_07_29_021003_return_table.php @@ -22,7 +22,7 @@ class ReturnTable extends Migration $table->string('email'); $table->string('telephone'); $table->string('product_name'); - $table->string('model'); + $table->string('sku'); $table->integer('quantity'); $table->tinyInteger('opened'); $table->unsignedInteger('rma_reason_id');