From c2a5ee0fdc3ec1c073427a470c1fdf71517badfb Mon Sep 17 00:00:00 2001 From: lewis <604446095@qq.com> Date: Mon, 30 Dec 2024 17:57:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=95=86=E5=93=81=E5=88=86?= =?UTF-8?q?=E7=BB=84=E4=BB=B7=E6=A0=BC=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/LocalController.php | 122 ++++++++++++----------- 1 file changed, 66 insertions(+), 56 deletions(-) diff --git a/app/admin/controller/LocalController.php b/app/admin/controller/LocalController.php index 11841001..bba0ebdd 100644 --- a/app/admin/controller/LocalController.php +++ b/app/admin/controller/LocalController.php @@ -4,7 +4,7 @@ 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; @@ -21,6 +21,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 +36,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,60 +53,71 @@ 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, + ]; + } + } + } + if (count($insert) > 0) { + StoreProductGroupPrice::insertAll($insert); + } + if (count($update) > 0) { + (new StoreProductGroupPrice())->saveAll($update); } - $count = Db::name('product_price_set')->insertAll($insert); return $this->success('插入成功:' . $count . '条'); }