修改商品改价
This commit is contained in:
parent
8aa7355485
commit
5641eaecab
@ -48,7 +48,7 @@ class StoreProductPriceLists extends BaseAdminDataLists implements ListsSearchIn
|
|||||||
$this->searchWhere[]=['product_id','in',$store_id];
|
$this->searchWhere[]=['product_id','in',$store_id];
|
||||||
}
|
}
|
||||||
return StoreProductPrice::where($this->searchWhere)
|
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)
|
->limit($this->limitOffset, $this->limitLength)
|
||||||
->order(['id' => 'desc'])
|
->order(['id' => 'desc'])
|
||||||
->select()->each(function($item){
|
->select()->each(function($item){
|
||||||
|
@ -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_group_price\StoreProductGroupPrice;
|
||||||
use app\common\model\store_product_price\StoreProductPrice;
|
use app\common\model\store_product_price\StoreProductPrice;
|
||||||
use app\common\model\store_product_unit\StoreProductUnit;
|
use app\common\model\store_product_unit\StoreProductUnit;
|
||||||
|
use app\common\model\StoreProductPriceList;
|
||||||
use app\common\model\user\User;
|
use app\common\model\user\User;
|
||||||
use app\common\service\workWechat\ProductOffer;
|
use app\common\service\workWechat\ProductOffer;
|
||||||
use support\exception\BusinessException;
|
use support\exception\BusinessException;
|
||||||
@ -378,6 +379,15 @@ class PurchaseProductOfferLogic extends BaseLogic
|
|||||||
return PurchaseProductOffer::destroy($params['id']);
|
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)
|
public static function setProductGroupPrice($params, $product)
|
||||||
{
|
{
|
||||||
$priceConfig = [];
|
$priceConfig = [];
|
||||||
@ -390,62 +400,34 @@ class PurchaseProductOfferLogic extends BaseLogic
|
|||||||
'update_time' => time(),
|
'update_time' => time(),
|
||||||
'status' => 0,
|
'status' => 0,
|
||||||
];
|
];
|
||||||
$productCatePriceRate = self::getProductCatePriceRate($product);
|
$productPriceRate = self::getProductPriceRate($product);
|
||||||
if (!empty($productCatePriceRate)) {
|
if (!empty($productPriceRate)) {
|
||||||
$storeProductGroupPrice = StoreProductGroupPrice::where('product_id', $product['id'])->select()->toArray();
|
|
||||||
$storeProductGroupPrice = reset_index($storeProductGroupPrice, 'group_id');
|
|
||||||
$purchase = 0;
|
$purchase = 0;
|
||||||
foreach ($productCatePriceRate as $k => $v) {
|
foreach ($productPriceRate as $v) {
|
||||||
if ($v['id'] == 100001 || $v['id'] == 21) {
|
if ($v['price_type'] == StoreProductPriceList::PriceTypeSupply) {
|
||||||
//供货
|
|
||||||
$data['purchase_lv'] = bcdiv($v['rate'], 100, 2);
|
$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'];
|
$purchase = $data['purchase'];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!empty($purchase)) {
|
if (!empty($purchase)) {
|
||||||
foreach ($productCatePriceRate as $k => $v) {
|
foreach ($productPriceRate as $v) {
|
||||||
if (empty($v['rate'])) {
|
if (empty($v['rate']) || $purchase <= 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($v['id'] == 4 && $purchase > 0) {
|
if ($v['price_type'] == StoreProductPriceList::PriceTypeBusiness) {
|
||||||
//商户
|
//商户价
|
||||||
$data['cost_lv'] = bcdiv($v['rate'], 100, 2);
|
$data['cost_lv'] = bcdiv($v['rate'], 100, 2);
|
||||||
$data['cost'] = bcmul($purchase, bcadd($data['cost_lv'], 1, 2), 2);
|
$data['cost'] = bcmul($purchase, $data['cost_lv'], 2);
|
||||||
continue;
|
} elseif ($v['price_type'] == StoreProductPriceList::PriceTypeRetail) {
|
||||||
} elseif (($v['id'] == 100002 || $v['id'] == 22) && $purchase > 0) {
|
//零售价
|
||||||
//零售
|
|
||||||
$data['price_lv'] = bcdiv($v['rate'], 100, 2);
|
$data['price_lv'] = bcdiv($v['rate'], 100, 2);
|
||||||
$data['price'] = bcmul($purchase, bcadd($data['price_lv'], 1, 2), 1);
|
$data['price'] = bcmul($purchase, $data['price_lv'], 2);
|
||||||
if ($product['two_cate_id'] == 15268) {
|
} elseif ($v['price_type'] == StoreProductPriceList::PriceTypeVip) {
|
||||||
$lastNum = substr($data['price'], -1);
|
//会员价
|
||||||
if ($lastNum <= 2) {
|
$data['vip_lv'] = bcdiv($v['rate'], 100, 2);
|
||||||
$data['price'] = floor($data['price']);
|
$data['vip_price'] = bcmul($purchase, $data['vip_lv'], 2);
|
||||||
} 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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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)
|
public static function getProductCatePriceRate($product)
|
||||||
{
|
{
|
||||||
$productCatePriceRate = StoreCategory::where('id', $product['cate_id'])->value('price_rate');
|
$productCatePriceRate = StoreCategory::where('id', $product['cate_id'])->value('price_rate');
|
||||||
@ -476,6 +469,11 @@ class PurchaseProductOfferLogic extends BaseLogic
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 已废弃
|
||||||
|
* @param array $productCatePriceRate
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
public static function hasPurchase(array $productCatePriceRate): bool
|
public static function hasPurchase(array $productCatePriceRate): bool
|
||||||
{
|
{
|
||||||
$res = true;
|
$res = true;
|
||||||
|
@ -8,6 +8,7 @@ use app\common\model\store_product_price\StoreProductPrice;
|
|||||||
use app\common\logic\BaseLogic;
|
use app\common\logic\BaseLogic;
|
||||||
use app\common\model\store_branch_product\StoreBranchProduct;
|
use app\common\model\store_branch_product\StoreBranchProduct;
|
||||||
use app\common\model\store_product\StoreProduct;
|
use app\common\model\store_product\StoreProduct;
|
||||||
|
use app\common\model\StoreProductPriceList;
|
||||||
use support\exception\BusinessException;
|
use support\exception\BusinessException;
|
||||||
use think\facade\Db;
|
use think\facade\Db;
|
||||||
|
|
||||||
@ -56,26 +57,74 @@ class StoreProductPriceLogic extends BaseLogic
|
|||||||
try {
|
try {
|
||||||
$find = StoreProductPrice::where('id', $params['id'])->find();
|
$find = StoreProductPrice::where('id', $params['id'])->find();
|
||||||
if ($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([
|
$find->save([
|
||||||
'status' => 1,
|
'status' => 1,
|
||||||
'purchase' => $params['purchase'],
|
'purchase' => $params['purchase'],
|
||||||
|
'purchase_lv' => $params['purchase_lv'],
|
||||||
'cost' => $params['cost'],
|
'cost' => $params['cost'],
|
||||||
|
'cost_lv' => $params['cost_lv'],
|
||||||
|
'vip_price' => $params['vip_price'],
|
||||||
|
'vip_lv' => $params['vip_lv'],
|
||||||
'price' => $params['price'],
|
'price' => $params['price'],
|
||||||
|
'price_lv' => $params['price_lv'],
|
||||||
'price_config' => $params['price_config'],
|
'price_config' => $params['price_config'],
|
||||||
]);
|
]);
|
||||||
StoreProduct::where('id', $find['product_id'])->update([
|
StoreProduct::where('id', $find['product_id'])->update([
|
||||||
'purchase' => $find['purchase'],
|
'purchase' => $find['purchase'],
|
||||||
'cost' => $find['cost'],
|
'cost' => $find['cost'],
|
||||||
'vip_price' => $find['cost'],
|
'vip_price' => $find['vip_price'],
|
||||||
'price' => $find['price']
|
'price' => $find['price']
|
||||||
]);
|
]);
|
||||||
StoreBranchProduct::where('product_id', $find['product_id'])->update([
|
StoreBranchProduct::where('product_id', $find['product_id'])->update([
|
||||||
'purchase' => $find['purchase'],
|
'purchase' => $find['purchase'],
|
||||||
'cost' => $find['cost'],
|
'cost' => $find['cost'],
|
||||||
'vip_price' => $find['cost'],
|
'vip_price' => $find['vip_price'],
|
||||||
'price' => $find['price']
|
'price' => $find['price']
|
||||||
]);
|
]);
|
||||||
self::setProductGroupPrice($find);
|
// self::setProductGroupPrice($find);
|
||||||
}
|
}
|
||||||
Db::commit();
|
Db::commit();
|
||||||
return true;
|
return true;
|
||||||
@ -103,16 +152,16 @@ class StoreProductPriceLogic extends BaseLogic
|
|||||||
StoreProduct::where('id', $find['product_id'])->update([
|
StoreProduct::where('id', $find['product_id'])->update([
|
||||||
'purchase' => $find['purchase'] ?? 0,
|
'purchase' => $find['purchase'] ?? 0,
|
||||||
'cost' => $find['cost'] ?? 0,
|
'cost' => $find['cost'] ?? 0,
|
||||||
'vip_price' => $find['cost'] ?? 0,
|
'vip_price' => $find['vip_price'] ?? 0,
|
||||||
'price' => $find['price'] ?? 0
|
'price' => $find['price'] ?? 0
|
||||||
]);
|
]);
|
||||||
StoreBranchProduct::where('product_id', $find['product_id'])->update([
|
StoreBranchProduct::where('product_id', $find['product_id'])->update([
|
||||||
'purchase' => $find['purchase'] ?? 0,
|
'purchase' => $find['purchase'] ?? 0,
|
||||||
'cost' => $find['cost'] ?? 0,
|
'cost' => $find['cost'] ?? 0,
|
||||||
'vip_price' => $find['cost'] ?? 0,
|
'vip_price' => $find['vip_price'] ?? 0,
|
||||||
'price' => $find['price'] ?? 0
|
'price' => $find['price'] ?? 0
|
||||||
]);
|
]);
|
||||||
self::setProductGroupPrice($find);
|
// self::setProductGroupPrice($find);
|
||||||
}
|
}
|
||||||
Db::commit();
|
Db::commit();
|
||||||
return true;
|
return true;
|
||||||
|
30
app/common/model/StoreProductPriceList.php
Normal file
30
app/common/model/StoreProductPriceList.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\model;
|
||||||
|
|
||||||
|
use think\model\concern\SoftDelete;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* StoreProductPriceList模型
|
||||||
|
* Class StoreProductPriceList
|
||||||
|
* @package app\common\model
|
||||||
|
*/
|
||||||
|
class StoreProductPriceList extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
use SoftDelete;
|
||||||
|
protected $name = 'store_product_price_list';
|
||||||
|
protected $deleteTime = 'delete_time';
|
||||||
|
|
||||||
|
const PriceTypeSupply = 1;
|
||||||
|
const PriceTypeBusiness = 2;
|
||||||
|
const PriceTypeVip = 3;
|
||||||
|
const PriceTypeRetail = 4;
|
||||||
|
const TypeMap = [
|
||||||
|
self::PriceTypeSupply => '供货价',
|
||||||
|
self::PriceTypeBusiness => '商户价',
|
||||||
|
self::PriceTypeVip => '会员价',
|
||||||
|
self::PriceTypeRetail => '零售价',
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user