multi-store/app/admin/service/ProductPriceService.php
2025-04-12 11:24:54 +08:00

80 lines
3.0 KiB
PHP

<?php
namespace app\admin\service;
use app\common\model\store_product\StoreProduct;
use app\common\model\StoreProductPriceList;
class ProductPriceService
{
/**
* 设置商品价格
* @param $purchasePrice float 采购价
* @param $productPriceRate array 价格比例
* @return array
*/
public function setProductPrice(float $purchasePrice, array $productPriceRate)
{
$result = [];
$result['purchase_lv'] = bcdiv($productPriceRate['supply_rate'], 100, 2);
$result['purchase'] = bcmul($purchasePrice, $result['purchase_lv'], 2);
$result['cost_lv'] = bcdiv($productPriceRate['merchant_rate'], 100, 2);
$result['cost'] = bcmul($result['purchase'], $result['cost_lv'], 2);
$result['vip_lv'] = bcdiv($productPriceRate['vip_rate'], 100, 2);
$result['vip_price'] = bcmul($result['purchase'], $result['vip_lv'], 2);
$result['price_lv'] = bcdiv($productPriceRate['price_rate'], 100, 2);
$result['price'] = bcmul($result['purchase'], $result['price_lv'], 2);
// 暂时不处理零售价,零售价使用会员价
// $lastNum = substr($result['price'], -1);
// if ($lastNum > 0) {
// $result['price'] = ceil($result['price'] * 10);
// $result['price'] = bcdiv($result['price'], 10, 2);
// }
$lastNum = substr($result['vip_price'], -1);
if ($lastNum > 0) {
$result['vip_price'] = ceil($result['vip_price'] * 10);
$result['vip_price'] = bcdiv($result['vip_price'], 10, 2);
}
return $result;
}
/**
* @param $productId int 商品id
* @param $percent bool 是否返回百分比
* @return array|int[]
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getProductPriceRate($productId, $percent = false)
{
$list = StoreProductPriceList::where('product_id', $productId)->findOrEmpty()->toArray();
$product = StoreProduct::where('id', $productId)->field('id,store_name,top_cate_id,cate_id')->find();
if (empty($list)) {
if ($product->isSpecial()) {
$list = [
'supply_rate' => 102,
'merchant_rate' => 102,
'vip_rate' => 104,
'price_rate' => 108,
];
} else {
$list = [
'supply_rate' => 105,
'merchant_rate' => 105,
'vip_rate' => 108,
'price_rate' => 112,
];
}
}
if ($percent) {
$list['supply_rate'] = $list['supply_rate'] / 100;
$list['merchant_rate'] = $list['merchant_rate'] / 100;
$list['vip_rate'] = $list['vip_rate'] / 100;
$list['price_rate'] = $list['price_rate'] / 100;
}
return $list;
}
}