6
0
Fork 0

添加计算价格接口

release
vine_liutk 2022-01-13 11:58:04 +08:00 committed by 李静
parent 4fed927528
commit c66f69e330
6 changed files with 105 additions and 4 deletions

View File

@ -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;
}
}

View File

@ -0,0 +1,42 @@
<?php
namespace App\Endpoint\Api\Http\Controllers\Dealer;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Models\DealerProduct;
use App\Services\Dealer\OrderService;
use Illuminate\Http\Request;
class OrderController extends Controller
{
/**
* @param \Illuminate\Http\Request $request
* @return void
*/
public function index(Request $request)
{
}
public function show($id, Request $request)
{
}
/**
* 计算订单价格
*
* @return void
*/
public function totalAmount(Request $request, OrderService $orderService)
{
$input = $request->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']),
]);
}
}

View File

@ -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']);
});
});

View File

@ -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()

View File

@ -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
*

View File

@ -0,0 +1,47 @@
<?php
namespace App\Services\Dealer;
use App\Models\DealerProduct;
use App\Models\User;
class OrderService
{
/**
* 计算订单价格
*
* @param DealerProduct $product
* @param integer $number
* @return void
*/
public function totalAmount(User $user, DealerProduct $product, int $number = 0)
{
//获取等级规则,判断当前用户等级是否配置等级价格
$salePrice = $product->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)
{
}
}