From c66f69e3304a3be758f82efa41980d96d942edb4 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Thu, 13 Jan 2022 11:58:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=A1=E7=AE=97=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Forms/DealerProductSaleRule.php | 5 +- .../Controllers/Dealer/OrderController.php | 42 +++++++++++++++++ app/Endpoint/Api/routes.php | 3 ++ app/Models/DealerProduct.php | 2 +- app/Models/User.php | 10 ++++ app/Services/Dealer/OrderService.php | 47 +++++++++++++++++++ 6 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php create mode 100644 app/Services/Dealer/OrderService.php diff --git a/app/Admin/Forms/DealerProductSaleRule.php b/app/Admin/Forms/DealerProductSaleRule.php index 9476d324..9ed63a02 100644 --- a/app/Admin/Forms/DealerProductSaleRule.php +++ b/app/Admin/Forms/DealerProductSaleRule.php @@ -49,9 +49,8 @@ class DealerProductSaleRule extends Form implements LazyRenderable $saleRules[] = new DealerProductSaleRuleModel($rule); } else { $_rule = DealerProductSaleRuleModel::find($rule['id']); - $_rule['lvl'] = $rule['id']; - $_rule['sale_price'] = $rule['sale_price']; - $_rule['min_order_amount'] = $rule['min_order_amount']; + $_rule['qty'] = $rule['qty']; + $_rule['price'] = $rule['price']; $saleRules[] = $_rule; } } diff --git a/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php b/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php new file mode 100644 index 00000000..120ea9ca --- /dev/null +++ b/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php @@ -0,0 +1,42 @@ +validate([ + 'product_id'=>['bail', 'required', 'int', 'min:0'], + 'num'=>['bail', 'required', 'int', 'min:1'], + ]); + + $product = DealerProduct::online()->findOrFail($input['product_id']); + + return response()->json([ + 'total_amount'=> $orderService->totalAmount($request->user(), $product, $input['num']), + ]); + } +} diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 926d799c..2394f3bc 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -222,5 +222,8 @@ Route::group([ Route::get('products', [Dealer\ProductController::class, 'index']); //商品详情 Route::get('products/{id}', [Dealer\ProductController::class, 'show']); + + //计算商品下单价格 + Route::get('orders/total-amount', [Dealer\OrderController::class, 'totalAmount']); }); }); diff --git a/app/Models/DealerProduct.php b/app/Models/DealerProduct.php index 9a44b849..380fa2e2 100644 --- a/app/Models/DealerProduct.php +++ b/app/Models/DealerProduct.php @@ -29,7 +29,7 @@ class DealerProduct extends Model public function saleRules() { - return $this->hasMany(DealerProductSaleRule::class, 'product_id')->orderBy('qty', 'asc'); + return $this->hasMany(DealerProductSaleRule::class, 'product_id')->orderBy('qty', 'desc'); } public function manageRules() diff --git a/app/Models/User.php b/app/Models/User.php index 2a80d189..98ae27b4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -127,6 +127,16 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac return $this->hasOne(UserCid::class, 'user_id'); } + /** + * 属于次用户得经销商身份 + * + * @return void + */ + public function dealer() + { + return $this->hasOne(Dealer::class, 'user_id'); + } + /** * 确认此用户是否是 VIP * diff --git a/app/Services/Dealer/OrderService.php b/app/Services/Dealer/OrderService.php new file mode 100644 index 00000000..d8177fed --- /dev/null +++ b/app/Services/Dealer/OrderService.php @@ -0,0 +1,47 @@ +price; + if ($user->dealer) { + foreach ($product->lvlRules as $rule) { + if ($rule->lvl == $user->dealer->lvl) { + $salePrice = $rule->sale_price; + break; + } + } + } + + //获取销售规则,判断当前用户购买数量价格 + foreach ($product->saleRules as $rule) { + if ($number >= $rule->qty) { + if ($salePrice > $rule->price) { + $salePrice = $rule->price; + } + break; + } + } + // dd($salePrice, $number); + + return bcmul($salePrice, $number, 2); + } + + public function createOrder(User $user, DealerProduct $product, int $number = 0) + { + } +}