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) + { + } +}