diff --git a/app/admin/lists/store_product_price/StoreProductPriceLists.php b/app/admin/lists/store_product_price/StoreProductPriceLists.php index 297a7d332..58de3989a 100644 --- a/app/admin/lists/store_product_price/StoreProductPriceLists.php +++ b/app/admin/lists/store_product_price/StoreProductPriceLists.php @@ -48,7 +48,7 @@ class StoreProductPriceLists extends BaseAdminDataLists implements ListsSearchIn $this->searchWhere[]=['product_id','in',$store_id]; } return StoreProductPrice::where($this->searchWhere) - ->field(['id','bhoid','offer_id', 'product_id', 'purchase_price', 'purchase_lv', 'purchase', 'cost_lv', 'cost', 'price_lv', 'price', 'price_config', 'status','create_time','mark']) + ->field(['id','bhoid','offer_id', 'product_id', 'purchase_price', 'purchase_lv', 'purchase', 'cost_lv', 'cost', 'price_lv', 'price', 'vip_lv', 'vip_price', 'price_config', 'status','create_time','mark']) ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) ->select()->each(function($item){ diff --git a/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php b/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php index a0f790afb..778015cb0 100644 --- a/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php +++ b/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php @@ -15,6 +15,7 @@ use app\common\model\store_product\StoreProduct; use app\common\model\store_product_group_price\StoreProductGroupPrice; use app\common\model\store_product_price\StoreProductPrice; use app\common\model\store_product_unit\StoreProductUnit; +use app\common\model\StoreProductPriceList; use app\common\model\user\User; use app\common\service\workWechat\ProductOffer; use support\exception\BusinessException; @@ -378,6 +379,15 @@ class PurchaseProductOfferLogic extends BaseLogic return PurchaseProductOffer::destroy($params['id']); } + /** + * 设置商品分组价格 + * @param $params + * @param $product + * @return void + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ public static function setProductGroupPrice($params, $product) { $priceConfig = []; @@ -390,62 +400,34 @@ class PurchaseProductOfferLogic extends BaseLogic 'update_time' => time(), 'status' => 0, ]; - $productCatePriceRate = self::getProductCatePriceRate($product); - if (!empty($productCatePriceRate)) { - $storeProductGroupPrice = StoreProductGroupPrice::where('product_id', $product['id'])->select()->toArray(); - $storeProductGroupPrice = reset_index($storeProductGroupPrice, 'group_id'); + $productPriceRate = self::getProductPriceRate($product); + if (!empty($productPriceRate)) { $purchase = 0; - foreach ($productCatePriceRate as $k => $v) { - if ($v['id'] == 100001 || $v['id'] == 21) { - //供货 + foreach ($productPriceRate as $v) { + if ($v['price_type'] == StoreProductPriceList::PriceTypeSupply) { $data['purchase_lv'] = bcdiv($v['rate'], 100, 2); - $data['purchase'] = bcmul($params['purchase'], bcadd($data['purchase_lv'], 1, 2), 2); + $data['purchase'] = bcmul($params['purchase'], $data['purchase_lv'], 2); $purchase = $data['purchase']; break; } } if (!empty($purchase)) { - foreach ($productCatePriceRate as $k => $v) { - if (empty($v['rate'])) { + foreach ($productPriceRate as $v) { + if (empty($v['rate']) || $purchase <= 0) { continue; } - if ($v['id'] == 4 && $purchase > 0) { - //商户 + if ($v['price_type'] == StoreProductPriceList::PriceTypeBusiness) { + //商户价 $data['cost_lv'] = bcdiv($v['rate'], 100, 2); - $data['cost'] = bcmul($purchase, bcadd($data['cost_lv'], 1, 2), 2); - continue; - } elseif (($v['id'] == 100002 || $v['id'] == 22) && $purchase > 0) { - //零售 + $data['cost'] = bcmul($purchase, $data['cost_lv'], 2); + } elseif ($v['price_type'] == StoreProductPriceList::PriceTypeRetail) { + //零售价 $data['price_lv'] = bcdiv($v['rate'], 100, 2); - $data['price'] = bcmul($purchase, bcadd($data['price_lv'], 1, 2), 1); - if ($product['two_cate_id'] == 15268) { - $lastNum = substr($data['price'], -1); - if ($lastNum <= 2) { - $data['price'] = floor($data['price']); - } elseif ($lastNum < 5) { - $data['price'] = bcadd(floor($data['price']), 0.5, 1); - } else { - $data['price'] = bcadd(floor($data['price']), 1, 1); - } - } - continue; - } - $baseRate = ($v['id'] == 100001 || $v['id'] == 21) ? 100 : 100 + $v['rate']; - if ($purchase > 0) { - $item = [ - 'product_id' => $product['id'], - 'group_id' => $v['id'], - 'group_name' => $v['title'], - 'price' => bcmul($purchase, $baseRate / 100, 2), - 'price_type' => 3, - 'base_rate' => $baseRate, - ]; - if (isset($storeProductGroupPrice[$v['id']])) { - $item['base_rate'] = $storeProductGroupPrice[$v['id']]['base_rate']; - $item['price'] = bcmul($purchase, $item['base_rate'] / 100, 2); - $item['id'] = $storeProductGroupPrice[$v['id']]['id']; - } - $priceConfig[] = $item; + $data['price'] = bcmul($purchase, $data['price_lv'], 2); + } elseif ($v['price_type'] == StoreProductPriceList::PriceTypeVip) { + //会员价 + $data['vip_lv'] = bcdiv($v['rate'], 100, 2); + $data['vip_price'] = bcmul($purchase, $data['vip_lv'], 2); } } } @@ -459,6 +441,17 @@ class PurchaseProductOfferLogic extends BaseLogic } } + public static function getProductPriceRate($product) + { + return StoreProductPriceList::where('product_id', $product['id'])->select()->toArray(); + } + + /** + * @deprecated 已废弃 + * 获取商品分类价格比例 + * @param $product + * @return array|mixed + */ public static function getProductCatePriceRate($product) { $productCatePriceRate = StoreCategory::where('id', $product['cate_id'])->value('price_rate'); @@ -476,6 +469,11 @@ class PurchaseProductOfferLogic extends BaseLogic return []; } + /** + * @deprecated 已废弃 + * @param array $productCatePriceRate + * @return bool + */ public static function hasPurchase(array $productCatePriceRate): bool { $res = true; diff --git a/app/admin/logic/store_product_price/StoreProductPriceLogic.php b/app/admin/logic/store_product_price/StoreProductPriceLogic.php index 25e656e9e..02be79357 100644 --- a/app/admin/logic/store_product_price/StoreProductPriceLogic.php +++ b/app/admin/logic/store_product_price/StoreProductPriceLogic.php @@ -8,6 +8,7 @@ use app\common\model\store_product_price\StoreProductPrice; use app\common\logic\BaseLogic; use app\common\model\store_branch_product\StoreBranchProduct; use app\common\model\store_product\StoreProduct; +use app\common\model\StoreProductPriceList; use support\exception\BusinessException; use think\facade\Db; @@ -56,26 +57,74 @@ class StoreProductPriceLogic extends BaseLogic try { $find = StoreProductPrice::where('id', $params['id'])->find(); if ($find) { + $updateData = []; + $changePurchase = false; + if ($find['purchase_lv'] != $params['purchase_lv']) { + $updateData[] = [ + 'product_id' => $find['product_id'], + 'price_type' => StoreProductPriceList::PriceTypeSupply, + 'rate' => $params['purchase_lv'] * 100, + ]; + $params['purchase'] = bcmul($find['purchase_price'], $params['purchase_lv'], 2); + $changePurchase = true; + } + if ($changePurchase) { + $params['cost'] = bcmul($params['purchase'], $params['cost_lv'], 2); + $params['vip_price'] = bcmul($params['purchase'], $params['vip_lv'], 2); + $params['price'] = bcmul($params['purchase'], $params['price_lv'], 2); + } + if ($find['cost_lv'] != $params['cost_lv']) { + $updateData[] = [ + 'product_id' => $find['product_id'], + 'price_type' => StoreProductPriceList::PriceTypeBusiness, + 'rate' => $params['cost_lv'] * 100, + ]; + $params['cost'] = bcmul($params['purchase'], $params['cost_lv'], 2); + } + if ($find['vip_lv'] != $params['vip_lv']) { + $updateData[] = [ + 'product_id' => $find['product_id'], + 'price_type' => StoreProductPriceList::PriceTypeVip, + 'rate' => $params['vip_lv'] * 100, + ]; + $params['vip_price'] = bcmul($params['purchase'], $params['vip_lv'], 2); + } + if ($find['price_lv'] != $params['price_lv']) { + $updateData[] = [ + 'product_id' => $find['product_id'], + 'price_type' => StoreProductPriceList::PriceTypeRetail, + 'rate' => $params['price_lv'] * 100, + ]; + $params['price'] = bcmul($params['purchase'], $params['price_lv'], 2); + } + if (count($updateData) > 0) { + (new StoreProductPriceList())->saveAll($updateData); + } $find->save([ 'status' => 1, 'purchase' => $params['purchase'], + 'purchase_lv' => $params['purchase_lv'], 'cost' => $params['cost'], + 'cost_lv' => $params['cost_lv'], + 'vip_price' => $params['vip_price'], + 'vip_lv' => $params['vip_lv'], 'price' => $params['price'], + 'price_lv' => $params['price_lv'], 'price_config' => $params['price_config'], ]); StoreProduct::where('id', $find['product_id'])->update([ 'purchase' => $find['purchase'], 'cost' => $find['cost'], - 'vip_price' => $find['cost'], + 'vip_price' => $find['vip_price'], 'price' => $find['price'] ]); StoreBranchProduct::where('product_id', $find['product_id'])->update([ 'purchase' => $find['purchase'], 'cost' => $find['cost'], - 'vip_price' => $find['cost'], + 'vip_price' => $find['vip_price'], 'price' => $find['price'] ]); - self::setProductGroupPrice($find); +// self::setProductGroupPrice($find); } Db::commit(); return true; @@ -103,16 +152,16 @@ class StoreProductPriceLogic extends BaseLogic StoreProduct::where('id', $find['product_id'])->update([ 'purchase' => $find['purchase'] ?? 0, 'cost' => $find['cost'] ?? 0, - 'vip_price' => $find['cost'] ?? 0, + 'vip_price' => $find['vip_price'] ?? 0, 'price' => $find['price'] ?? 0 ]); StoreBranchProduct::where('product_id', $find['product_id'])->update([ 'purchase' => $find['purchase'] ?? 0, 'cost' => $find['cost'] ?? 0, - 'vip_price' => $find['cost'] ?? 0, + 'vip_price' => $find['vip_price'] ?? 0, 'price' => $find['price'] ?? 0 ]); - self::setProductGroupPrice($find); +// self::setProductGroupPrice($find); } Db::commit(); return true; diff --git a/app/common/model/StoreProductPriceList.php b/app/common/model/StoreProductPriceList.php new file mode 100644 index 000000000..03452d6c1 --- /dev/null +++ b/app/common/model/StoreProductPriceList.php @@ -0,0 +1,30 @@ + '供货价', + self::PriceTypeBusiness => '商户价', + self::PriceTypeVip => '会员价', + self::PriceTypeRetail => '零售价', + ]; + +} \ No newline at end of file