diff --git a/app/admin/lists/store_category/StoreCategoryLists.php b/app/admin/lists/store_category/StoreCategoryLists.php index 6d1a673f..0be91834 100644 --- a/app/admin/lists/store_category/StoreCategoryLists.php +++ b/app/admin/lists/store_category/StoreCategoryLists.php @@ -45,6 +45,8 @@ class StoreCategoryLists extends BaseAdminDataLists implements ListsSearchInterf public function lists(): array { $userGroups = UserShip::field('id,title')->select()->toArray(); + $userGroups[] = ['id' => 100001, 'title' => '供货价']; + $userGroups[] = ['id' => 100002, 'title' => '零售价']; return StoreCategory::where($this->searchWhere) ->field(['id', 'pid', 'name', 'data', 'pic', 'sort', 'price_rate']) ->limit($this->limitOffset, $this->limitLength) diff --git a/app/admin/lists/store_product_price/StoreProductPriceLists.php b/app/admin/lists/store_product_price/StoreProductPriceLists.php index 2294db79..ac1f4a30 100644 --- a/app/admin/lists/store_product_price/StoreProductPriceLists.php +++ b/app/admin/lists/store_product_price/StoreProductPriceLists.php @@ -52,8 +52,8 @@ class StoreProductPriceLists extends BaseAdminDataLists implements ListsSearchIn ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) ->select()->each(function($item){ - $find = StoreProduct::with('unitName')->where('id', $item['product_id'])->field('image,store_name,store_info,unit')->find(); - $item['unit_name']=$find['unitName']['name']; + $find = StoreProduct::with('unitName')->where('id', $item['product_id'])->field('image,store_name,store_info,unit')->withTrashed()->find(); + $item['unit_name']=$find['unitName']['name'] ?? ''; $item['store_name']=$find['store_name']; $item['store_info']=$find['store_info']; $item['image']=$find['image']; diff --git a/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php b/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php index c65f12f0..dd228c8e 100644 --- a/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php +++ b/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php @@ -140,40 +140,39 @@ class PurchaseProductOfferLogic extends BaseLogic 'marques' => $params['marques'], 'after_sales' => $params['after_sales'], ]); - $find = StoreProductPrice::where(['offer_id' => $params['id']])->find(); - $product = StoreProduct::where('id', $offer['product_id'])->withTrashed()->field('id,store_name,top_cate_id')->find(); +// $find = StoreProductPrice::where(['offer_id' => $params['id']])->find(); + $product = StoreProduct::where('id', $offer['product_id'])->withTrashed()->field('id,store_name,top_cate_id,two_cate_id')->find(); $unit_name=StoreProductUnit::where('id', $offer['unit'])->value('name'); - $dict_data = DictData::where('type_value', 'price_lv_' . $product['top_cate_id'])->field('name,value')->select(); - $data = []; - $data['bhoid'] = $offer['order_id']; - $data['offer_id'] = $params['id']; - $data['product_id'] = $offer['product_id']; - $data['purchase_price'] = $params['purchase']; - $data['status'] = 0; - $productCatePriceRate = StoreCategory::where('id', $product['top_cate_id'])->value('price_rate'); - self::setProductGroupPrice($params, $product, $productCatePriceRate); - if ($dict_data) { - foreach ($dict_data as $k => $v) { - if ($v['name'] == 'purchase') { - $data['purchase_lv'] = $v['value']; - $lv = bcmul($v['value'], $params['purchase'], 2); - $data['purchase'] = bcadd($lv, $params['purchase'], 2); - } elseif ($v['name'] == 'cost') { - $data['cost_lv'] = $v['value']; - $lv = bcmul($v['value'], $params['purchase'], 2); - $data['cost'] = bcadd($lv, $params['purchase'], 2); - } elseif ($v['name'] == 'price') { - $data['price_lv'] = $v['value']; - $lv = bcmul($v['value'], $params['purchase'], 2); - $data['price'] = bcadd($lv, $params['purchase'], 2); - } - } - } - if ($find) { - $find->save($data); - } else { - StoreProductPrice::create($data); - } + self::setProductGroupPrice($params, $product); +// $data = []; +// $dict_data = DictData::where('type_value', 'price_lv_' . $product['top_cate_id'])->field('name,value')->select(); +// $data['bhoid'] = $offer['order_id']; +// $data['offer_id'] = $params['id']; +// $data['product_id'] = $offer['product_id']; +// $data['purchase_price'] = $params['purchase']; +// $data['status'] = 0; +// if ($dict_data) { +// foreach ($dict_data as $k => $v) { +// if ($v['name'] == 'purchase') { +// $data['purchase_lv'] = $v['value']; +// $lv = bcmul($v['value'], $params['purchase'], 2); +// $data['purchase'] = bcadd($lv, $params['purchase'], 2); +// } elseif ($v['name'] == 'cost') { +// $data['cost_lv'] = $v['value']; +// $lv = bcmul($v['value'], $params['purchase'], 2); +// $data['cost'] = bcadd($lv, $params['purchase'], 2); +// } elseif ($v['name'] == 'price') { +// $data['price_lv'] = $v['value']; +// $lv = bcmul($v['value'], $params['purchase'], 2); +// $data['price'] = bcadd($lv, $params['purchase'], 2); +// } +// } +// } +// if ($find) { +// $find->save($data); +// } else { +// StoreProductPrice::create($data); +// } Db::commit(); $offer['store_name']=$product['store_name']; $offer['unit_name']=$unit_name; @@ -306,16 +305,50 @@ class PurchaseProductOfferLogic extends BaseLogic return PurchaseProductOffer::destroy($params['id']); } - public static function setProductGroupPrice($params, $product, $productCatePriceRate) + public static function setProductGroupPrice($params, $product) { + $productCatePriceRate = StoreCategory::where('id', $product['top_cate_id'])->value('price_rate'); $storeProductGroupPrice = StoreProductGroupPrice::where('product_id', $product['id'])->select()->toArray(); $storeProductGroupPrice = reset_index($storeProductGroupPrice, 'group_id'); - $insertData = []; + $priceConfig = []; + $data = [ + 'bhoid' => $params['bhoid'], + 'offer_id' => $params['id'], + 'product_id' => $product['id'], + 'purchase_price' => $params['purchase'], + 'create_time' => time(), + 'update_time' => time(), + 'status' => 0, + ]; foreach ($productCatePriceRate as $k => $v) { + if ($v['id'] == 4) { + $data['cost_lv'] = bcdiv($v['rate'], 100, 2); + $data['cost'] = bcmul($params['purchase'], bcadd($data['cost_lv'], 1, 2), 2); + continue; + } elseif ($v['id'] == 100001) { + $data['purchase_lv'] = bcdiv($v['rate'], 100, 2); + $data['purchase'] = bcmul($params['purchase'], bcadd($data['purchase_lv'], 1, 2), 2); + continue; + } elseif ($v['id'] == 100002) { + $data['price_lv'] = bcdiv($v['rate'], 100, 2); + $data['price'] = bcmul($params['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 = 100 + $v['rate']; $item = [ 'product_id' => $product['id'], 'group_id' => $v['id'], + 'group_name' => $v['title'], 'price' => bcmul($params['purchase'], $baseRate / 100, 2), 'price_type' => 3, 'base_rate' => $baseRate, @@ -325,8 +358,14 @@ class PurchaseProductOfferLogic extends BaseLogic $item['price'] = bcmul($params['purchase'], $item['base_rate'] / 100, 2); $item['id'] = $storeProductGroupPrice[$v['id']]['id']; } - $insertData[] = $item; + $priceConfig[] = $item; + } + $data['price_config'] = $priceConfig; + $find = StoreProductPrice::where(['offer_id' => $params['id']])->find(); + if ($find) { + $find->save($data); + } else { + StoreProductPrice::create($data); } - (new StoreProductGroupPrice())->saveAll($insertData); } } diff --git a/app/common/model/store_product_price/StoreProductPrice.php b/app/common/model/store_product_price/StoreProductPrice.php index 745de628..92e9bed1 100644 --- a/app/common/model/store_product_price/StoreProductPrice.php +++ b/app/common/model/store_product_price/StoreProductPrice.php @@ -18,5 +18,7 @@ class StoreProductPrice extends BaseModel protected $name = 'store_product_price'; protected $deleteTime = 'delete_time'; + protected $json = ['price_config']; + protected $jsonAssoc = true; } \ No newline at end of file