diff --git a/app/admin/controller/LocalController.php b/app/admin/controller/LocalController.php index 11841001a..173bd8536 100644 --- a/app/admin/controller/LocalController.php +++ b/app/admin/controller/LocalController.php @@ -4,10 +4,9 @@ namespace app\admin\controller; use app\common\model\store_category\StoreCategory; use app\common\model\store_product\StoreProduct; -use app\common\model\store_product_price\StoreProductPrice; +use app\common\model\store_product_group_price\StoreProductGroupPrice; use PhpOffice\PhpSpreadsheet\IOFactory; use support\Redis; -use think\facade\Db; class LocalController extends BaseAdminController { @@ -21,6 +20,7 @@ class LocalController extends BaseAdminController $spreadsheet = $reader->load($file->getRealPath()); $data = $spreadsheet->getActiveSheet()->toArray(); $insert = []; + $update = []; $productIds = []; foreach ($data as $k => $row) { if ($k < 2) { @@ -35,10 +35,8 @@ class LocalController extends BaseAdminController } $productIds[] = $productId; } - $products = StoreProduct::whereIn('id', $productIds)->field('id,store_name')->select()->toArray(); + $products = StoreProduct::whereIn('id', $productIds)->field('id,store_name,purchase')->select()->toArray(); $products = reset_index($products, 'id'); - $lastPurchasePrices = StoreProductPrice::whereIn('product_id', $productIds)->where('status', 1)->order('id desc')->select()->toArray(); - $lastPurchasePrices = reset_index($lastPurchasePrices, 'product_id'); foreach ($data as $k => $row) { if ($k < 2) { continue; @@ -54,61 +52,72 @@ class LocalController extends BaseAdminController if (empty($product)) { continue; } - $lastPurchasePrice = $lastPurchasePrices[$productId] ?? []; - if (empty($lastPurchasePrice)) { - continue; - } - $storeRate = rtrim($row[4] ?? 0, '%'); - $row[5] = rtrim($row[5] ?? 0, '%'); - $row[7] = rtrim($row[7] ?? 0, '%'); - $row[9] = rtrim($row[9] ?? 0, '%'); - $row[11] = rtrim($row[11] ?? 0, '%'); - $row[13] = rtrim($row[13] ?? 0, '%'); - $row[15] = rtrim($row[15] ?? 0, '%'); - $row[17] = rtrim($row[17] ?? 0, '%'); - $row[19] = rtrim($row[19] ?? 0, '%'); - $row[21] = rtrim($row[21] ?? 0, '%'); - $row[23] = rtrim($row[23] ?? 0, '%'); - $row[25] = rtrim($row[25] ?? 0, '%'); - $row[27] = rtrim($row[27] ?? 0, '%'); - $row[29] = rtrim($row[29] ?? 0, '%'); - $row[31] = rtrim($row[31] ?? 0, '%'); - $row[33] = rtrim($row[33] ?? 0, '%'); - $row[35] = rtrim($row[35] ?? 0, '%'); - $row[37] = rtrim($row[37] ?? 0, '%'); - $row[39] = rtrim($row[39] ?? 0, '%'); - $row[41] = rtrim($row[41] ?? 0, '%'); - $storePrice = $lastPurchasePrice['purchase_price'] * (1 + $storeRate / 100); - $item = [ - 'product_id' => $product['id'], - 'product_name' => $product['store_name'], - 'store_price' => $storePrice, - 'price_set' => json_encode([ - ['user_ship' => 23, 'rate' => $row[5], 'price' => bcmul($storePrice, (1 + $row[5] / 100), 2)], - ['user_ship' => 24, 'rate' => $row[7], 'price' => bcmul($storePrice, (1 + $row[7] / 100), 2)], - ['user_ship' => 25, 'rate' => $row[9], 'price' => bcmul($storePrice, (1 + $row[9] / 100), 2)], - ['user_ship' => 26, 'rate' => $row[11], 'price' => bcmul($storePrice, (1 + $row[11] / 100), 2)], - ['user_ship' => 27, 'rate' => $row[13], 'price' => bcmul($storePrice, (1 + $row[13] / 100), 2)], - ['user_ship' => 28, 'rate' => $row[15], 'price' => bcmul($storePrice, (1 + $row[15] / 100), 2)], - ['user_ship' => 29, 'rate' => $row[17], 'price' => bcmul($storePrice, (1 + $row[17] / 100), 2)], - ['user_ship' => 30, 'rate' => $row[19], 'price' => bcmul($storePrice, (1 + $row[19] / 100), 2)], - ['user_ship' => 31, 'rate' => $row[21], 'price' => bcmul($storePrice, (1 + $row[21] / 100), 2)], - ['user_ship' => 32, 'rate' => $row[23], 'price' => bcmul($storePrice, (1 + $row[23] / 100), 2)], - ['user_ship' => 33, 'rate' => $row[25], 'price' => bcmul($storePrice, (1 + $row[25] / 100), 2)], - ['user_ship' => 34, 'rate' => $row[27], 'price' => bcmul($storePrice, (1 + $row[27] / 100), 2)], - ['user_ship' => 35, 'rate' => $row[29], 'price' => bcmul($storePrice, (1 + $row[29] / 100), 2)], - ['user_ship' => 36, 'rate' => $row[31], 'price' => bcmul($storePrice, (1 + $row[31] / 100), 2)], - ['user_ship' => 37, 'rate' => $row[33], 'price' => bcmul($storePrice, (1 + $row[33] / 100), 2)], - ['user_ship' => 38, 'rate' => $row[35], 'price' => bcmul($storePrice, (1 + $row[35] / 100), 2)], - ['user_ship' => 39, 'rate' => $row[37], 'price' => bcmul($storePrice, (1 + $row[37] / 100), 2)], - ['user_ship' => 40, 'rate' => $row[39], 'price' => bcmul($storePrice, (1 + $row[39] / 100), 2)], - ['user_ship' => 41, 'rate' => $row[41], 'price' => bcmul($storePrice, (1 + $row[41] / 100), 2)], - ], JSON_UNESCAPED_UNICODE), + $groupIds = [ + 5 => 23, + 7 => 24, + 9 => 25, + 11 => 26, + 13 => 27, + 15 => 28, + 17 => 29, + 19 => 30, + 21 => 31, + 23 => 32, + 25 => 33, + 27 => 34, + 29 => 35, + 31 => 36, + 33 => 37, + 35 => 1, + 37 => 18, + 39 => 22, ]; - $insert[] = $item; + for ($i = 5; $i < 35; $i = $i + 2) { + $rate = intval(rtrim($row[$i] ?? 0, '%')); + if (empty($rate)) { + continue; + } + $price = $row[$i + 1] ?? 0; + if (empty($price)) { + $price = $product['purchase'] * (1 + $rate / 100); + } + $item = [ + 'product_id' => $productId, + 'group_id' => $groupIds[$i], + 'price_type' => 3, + 'base_rate' => 100 + $rate, + 'price' => $price + ]; + $insert[] = $item; + } + $productGroupPrices = StoreProductGroupPrice::where('product_id', $productId)->whereIn('group_id', [1, 18, 22])->select()->toArray(); + $groupIds = array_flip($groupIds); + foreach ($productGroupPrices as $productGroupPrice) { + $cellId = $groupIds[$productGroupPrice['group_id']] ?? 0; + $rate = intval(rtrim($row[$cellId] ?? 0, '%')); + if (empty($rate)) { + continue; + } + $price = $row[$cellId + 1] ?? 0; + if (empty($price)) { + $price = $product['purchase'] * (1 + $rate / 100); + } + if ($price != $productGroupPrice['price']) { + $update[] = [ + 'id' => $productGroupPrice['id'], + 'base_rate' => $rate, + 'price' => $price, + ]; + } + } } - $count = Db::name('product_price_set')->insertAll($insert); - return $this->success('插入成功:' . $count . '条'); + if (count($insert) > 0) { + StoreProductGroupPrice::insertAll($insert); + } + if (count($update) > 0) { + (new StoreProductGroupPrice())->saveAll($update); + } + return $this->success('插入成功:' . count($insert) . '条,更新成功:' . count($update) . '条'); } public function fixCategory() diff --git a/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php b/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php index 7caa7a63f..d1c286d2a 100644 --- a/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php +++ b/app/admin/logic/purchase_product_offer/PurchaseProductOfferLogic.php @@ -431,14 +431,30 @@ class PurchaseProductOfferLogic extends BaseLogic public static function getProductCatePriceRate($product) { $productCatePriceRate = StoreCategory::where('id', $product['cate_id'])->value('price_rate'); - if (!empty($productCatePriceRate)) { + if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) { return $productCatePriceRate; } $productCatePriceRate = StoreCategory::where('id', $product['two_cate_id'])->value('price_rate'); - if (!empty($productCatePriceRate)) { + if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) { return $productCatePriceRate; } - return StoreCategory::where('id', $product['top_cate_id'])->value('price_rate'); + $productCatePriceRate = StoreCategory::where('id', $product['top_cate_id'])->value('price_rate'); + if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) { + return $productCatePriceRate; + } + return []; + } + + public static function hasPurchase(array $productCatePriceRate): bool + { + $res = true; + foreach ($productCatePriceRate as $item) { + if ($item['id'] == 21 && empty($item['rate'])) { + $res = false; + break; + } + } + return $res; } }