ids)->where('warehousing_id', '>', 0)->column('warehousing_id'); $warehouseOrders = WarehouseOrder::field('id,warehouse_id')->whereIn('id', $warehousingIds)->where('financial_pm', 1)->select()->toArray(); $productSourceLinkInfo = []; foreach ($warehouseOrders as $order) { $products = WarehouseProduct::field('id,product_id,nums,purchase')->where('oid', $order['id'])->select()->toArray(); foreach ($products as $product) { $productSourceLink = ProductSourceLink::where('product_id', $product['product_id'])->where('purchase_uid', 20)->where('warehouse_id', $order['warehouse_id'])->find(); if (empty($productSourceLink)) { $productSourceLink = new ProductSourceLink(); $productSourceLink->product_id = $product['product_id']; $productSourceLink->purchase_uid = 20; $productSourceLink->warehouse_id = $order['warehouse_id']; $productSourceLink->save(); } $productSourceLinkInfo[] = [ 'oid' => $productSourceLink['id'], 'product_id' => $product['product_id'], 'warehouse_id' => $order['warehouse_id'], 'nums' => $product['nums'], 'current_nums' => $product['nums'], 'types' => ProductSourceLinkInfo::TypeIn, 'link_id' => $product['id'], 'price' => $product['purchase'], 'total_price' => bcmul($product['purchase'], $product['nums'], 2), 'create_time' => time(), ]; } } (new ProductSourceLinkInfo())->insertAll($productSourceLinkInfo); } public function outbound() { $warehousingIds = BeforehandOrder::whereIn('id', $this->ids)->where('outbound_id', '>', 0)->column('outbound_id'); $warehouseOrders = WarehouseOrder::field('id,warehouse_id,store_id')->whereIn('id', $warehousingIds)->where('financial_pm', 0)->select()->toArray(); foreach ($warehouseOrders as $order) { $products = WarehouseProduct::field('id,product_id,nums,purchase')->where('oid', $order['id'])->select()->toArray(); foreach ($products as $product) { ProductSourceLinkLogic::outbound([ 'product' => ['product_id' => $product['product_id'], 'nums' => $product['nums']], 'warehouse_id' => $order['warehouse_id'], 'store_id' => $order['store_id'], 'link_id' => $product['id'], ]); } } } public function activityPrice() { $product = Db::table('la_ceshi_copy_copy')->select()->toArray(); $userShip = 43; $insert = []; foreach ($product as $k => $v) { $rate = bcdiv($v['price'], $v['price_two'], 2); $rate = $rate * 100; $insert[] = [ 'product_id' => $v['product_id'], 'group_id' => $userShip, 'price_type' => 3, 'base_rate' => $rate, 'price' => $v['price'], ]; } StoreProductGroupPrice::insertAll($insert); return $this->data($insert); } public function searchProduct() { $product = Db::table('la_ceshi')->select()->toArray(); $product = reset_index($product, 'name'); $product2 = Db::table('la_ceshi_copy_copy')->select()->toArray(); $update = []; foreach ($product2 as $v) { if (isset($product[$v['name']])) { $update[] = [ 'id' => $v['id'], 'product_id' => $product[$v['name']]['product_id'], ]; } } $result = (new CeshiCopy())->saveAll($update); return $this->data($update); } public function setPrice() { $file = $this->request->file('file'); $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($file->getRealPath()); $data = $spreadsheet->getActiveSheet()->toArray(); $insert = []; $update = []; $productIds = []; foreach ($data as $k => $row) { if ($k < 2) { continue; } if (empty($row[0])) { continue; } $productId = intval($row[0]); if (empty($productId)) { continue; } $productIds[] = $productId; } $products = StoreProduct::whereIn('id', $productIds)->field('id,store_name,purchase')->select()->toArray(); $products = reset_index($products, 'id'); foreach ($data as $k => $row) { if ($k < 2) { continue; } if (empty($row[0])) { continue; } $productId = intval($row[0]); if (empty($productId)) { continue; } $product = $products[$productId] ?? []; if (empty($product)) { continue; } $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, ]; 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); } return $this->success('插入成功:' . count($insert) . '条,更新成功:' . count($update) . '条'); } public function fixCategory() { $topCate = StoreCategory::where('pid', 0)->field('id,name,pid')->order('name')->select()->toArray(); $topCate = reset_index($topCate, 'name'); $sql = []; $time = time(); foreach ($topCate as $item) { if (isset($topCate[$item['name'] . '类'])) { $target = $topCate[$item['name'] . '类']; $sql[] = "##原分类id:{$item['id']},原分类名:{$item['name']},目标分类id:{$target['id']},目标分类名:{$target['name']}"; $sql[] = "update la_store_product set top_cate_id={$target['id']} where top_cate_id={$item['id']};"; $sql[] = "update la_store_product set two_cate_id={$target['id']} where two_cate_id={$item['id']};"; $sql[] = "update la_store_category set delete_time=$time where id={$item['id']};"; } $secondCate = StoreCategory::where('pid', $item['id'])->field('id,name,pid')->order('name')->select()->toArray(); $secondCate = reset_index($secondCate, 'name'); foreach ($secondCate as $item2) { if (isset($secondCate[$item2['name'] . '类'])) { $target = $secondCate[$item2['name'] . '类']; $sql[] = "##原分类id:{$item2['id']},原分类名:{$item2['name']},目标分类id:{$target['id']},目标分类名:{$target['name']}"; $sql[] = "update la_store_product set two_cate_id={$target['id']} where two_cate_id={$item2['id']};"; $sql[] = "update la_store_product set cate_id={$target['id']} where cate_id={$item2['id']};"; $sql[] = "update la_store_category set delete_time=$time where id={$item2['id']};"; } $thirdCate = StoreCategory::where('pid', $item2['id'])->field('id,name,pid')->order('name')->select()->toArray(); $thirdCate = reset_index($thirdCate, 'name'); foreach ($thirdCate as $item3) { if (isset($thirdCate[$item3['name'] . '类'])) { $target = $thirdCate[$item3['name'] . '类']; $sql[] = "##原分类id:{$item3['id']},原分类名:{$item3['name']},目标分类id:{$target['id']},目标分类名:{$target['name']}"; $sql[] = "update la_store_product set cate_id={$target['id']} where cate_id={$item3['id']};"; $sql[] = "update la_store_category set delete_time=$time where id={$item3['id']};"; } } } } file_put_contents(public_path() . '/update.sql', implode(PHP_EOL, $sql)); return $this->success('数据已更新完成', $sql); } public function updateProductPriceList() { $file = $this->request->file('file'); $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($file->getRealPath()); $data = $spreadsheet->getActiveSheet()->toArray(); $updateCount = 0; $insert = []; $time = time(); foreach ($data as $k => $row) { if ($k < 1 || empty($row[0])) { continue; } $product = StoreProduct::where('id', $row[0])->value('id'); if (empty($product)) { continue; } for ($i = 1; $i < 5; $i++) { if (empty($row[1 + $i])) { continue; } $insert[] = [ 'product_id' => $row[0], 'price_type' => $i, 'rate' => intval(rtrim($row[1 + $i], '%')) + 100, 'create_time' => $time, ]; } } StoreProductPriceList::insertAll($insert); return $this->success('更新成功:' . $updateCount . '条'); } public function index() { $file = $this->request->file('file'); $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($file->getRealPath()); $data = $spreadsheet->getActiveSheet()->toArray(); $updateCount = 0; $finishCount = Redis::get('updateFinishCount'); $finishCount = empty($finishCount) ? 0 : $finishCount; if ($finishCount >= count($data)) { return $this->success('数据已更新完成'); } $max = $finishCount + 100; foreach ($data as $k => $row) { if ($k < (1 + $finishCount) || empty($row[0])) { continue; } if ($k > $max) { break; } $product = StoreProduct::where('id', $row[0])->field('id,store_name,top_cate_id,two_cate_id,cate_id')->findOrEmpty()->toArray(); if (empty($product)) { continue; } $result = $this->updateProduct($product, $row); if ($result) { $updateCount++; } } Redis::set('updateFinishCount', 100 + $finishCount); return $this->success('更新成功:' . $updateCount . '条'); } public function updateProduct($product, $row) { $topCateName = $row[1]; $secondCateName = $row[2]; $cateName = $row[3]; $topCate = StoreCategory::where('name', $topCateName)->value('id'); $updateData = []; if (!empty($topCate) && $topCate != $product['top_cate_id']) { $updateData['top_cate_id'] = $topCate; } $secondCateId = StoreCategory::where('pid', $topCate)->where('name', $secondCateName)->value('id'); if (empty($secondCateId)) { $secondCate = new StoreCategory(); $secondCate->name = $secondCateName; $secondCate->pid = $topCate; $secondCate->save(); $secondCateId = $secondCate->id; } if ($secondCateId != $product['two_cate_id']) { $updateData['two_cate_id'] = $secondCateId; } $cateId = StoreCategory::where('pid', $secondCateId)->where('name', $cateName)->value('id'); if (empty($cateId)) { $cate = new StoreCategory(); $cate->name = $cateName; $cate->pid = $secondCateId; $cate->save(); $cateId = $cate->id; } if ($cateId != $product['cate_id']) { $updateData['cate_id'] = $cateId; } if (!empty($updateData)) { StoreProduct::where('id', $row[0])->update($updateData); echo '更新成功ID:' . $row[0] . PHP_EOL; return true; } return false; } public function importOrder() { $file = $this->request->file('file'); $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($file->getRealPath()); $sheets = $spreadsheet->getAllSheets(); foreach ($sheets as $sheetIndex => $sheet) { $params['is_buyer'] = -1; $params['buyer_id'] = 20; $params['admin_id'] = 1; $params['chef'] = '厨师'; $params['chef_phone'] = '13513513513'; $params['distribution_personnel'] = '余友"'; $params['days'] = 0; $params['mark'] = '内部备注'; $params['merchandiser'] = 0; $params['purpose'] = '备注'; $params['store_id'] = 4; $params['splitting_officer'] = '分单员'; $params['regional_manager'] = '张波'; $params['system_store_name'] = '门店员'; $params['transporter'] = '运输员'; $params['pay_price'] = 0; $params['total_price'] = 0; $params['arrival_time'] = date('Y-m-d H:i:s'); $rows = $sheet->toArray(); foreach ($rows as $k => $row) { if ($k < 1 || empty($row[2])) { continue; } $product = StoreProduct::where('id', $row[0])->withTrashed()->field('id,package,store_info,marques,unit,price,purchase,after_sales')->findOrEmpty()->toArray(); if (empty($product)) { continue; } $totalPrice = bcmul($product['price'], $row[2], 2); $params['total_price'] = bcadd($params['total_price'], $totalPrice, 2); $params['pay_price'] = $params['total_price']; $params['product_arr'][] = [ 'product_id' => $product['id'], 'nums' => $row[2], 'package' => $product['package'], 'store_info' => $product['store_info'], 'marques' => $product['marques'], 'unit' => $product['unit'], 'price' => $product['price'], 'purchase' => $product['purchase'], 'after_sales' => $product['after_sales'], 'total_price' => $totalPrice, 'purchase_total' => $row[3], ]; } $beforeOrderId = $this->batchCreate($params); $purchaseOffer = PurchaseProductOffer::where('order_id', $beforeOrderId)->field('id,product_id,buyer_nums')->select()->toArray(); foreach ($purchaseOffer as $v) { $inStorageParams = [ 'admin_id' => 0, 'bhoid' => $beforeOrderId, 'buyer_nums' => $v['buyer_nums'], 'id' => $v['id'], 'product_id' => $v['product_id'], 'warehouse_id' => 1, 'warehouse_num' => $v['buyer_nums'], ]; BeforehandOrderCartInfoLogic::putInStorage($inStorageParams); } } return $this->success('导入成功'); } public function batchCreate($params) { if (empty($params['buyer_id'])) { throw new BusinessException('请选择采购员'); } Db::startTrans(); try { $procurementOrder = new BeforehandOrder(); $procurementOrder->order_id = getNewOrderId('CG'); $procurementOrder->buyer_id = $params['buyer_id']; $procurementOrder->admin_id = $params['admin_id']; $procurementOrder->order_type = 9; $procurementOrder->total_price = $params['total_price']; $procurementOrder->pay_price = $params['pay_price']; $procurementOrder->save(); $purchaseOffer = []; $cartInfo = []; foreach ($params['product_arr'] as $product) { if ($product['product_id'] <= 0) { continue; } $cartInfo[] = [ 'bhoid' => $procurementOrder['id'], 'product_id' => $product['product_id'], 'unit' => $product['unit'], 'cart_num' => $product['nums'], 'accept_num' => $product['nums'], 'mark' => $product['mark'] ?? '', 'is_buyer' => 1, 'procurement_order_id' => $procurementOrder['id'], 'total_price' => bcmul($product['price'], $product['nums'], 2), 'pay_price' => bcmul($product['price'], $product['nums'], 2), 'purchase' => $product['purchase'], 'uid' => $params['uid'] ?? 0, 'price' => $product['price'], 'package' => $product['package'], 'create_time' => time(), 'update_time' => time(), ]; $purchaseOffer[] = [ 'order_id' => $procurementOrder['id'], 'product_id' => $product['product_id'], 'unit' => $product['unit'], 'is_buyer' => 1, 'need_num' => $product['nums'], 'mark' => $product['mark'] ?? '', 'buyer_id' => $params['buyer_id'], 'buyer_confirm' => 1, 'buyer_nums' => $product['nums'], 'total_price' => $product['purchase_total'], 'status' => 0, 'source_order_info' => [ [ 'source_order_id' => $procurementOrder['id'], 'product_id' => $product['product_id'], 'need_num' => $product['nums'], 'mark' => $product['mark'] ?? '', ] ] ]; } PurchaseProductOffer::insertAll($purchaseOffer); BeforehandOrderCartInfo::insertAll($cartInfo); Db::commit(); return $procurementOrder->id; } catch (\Exception $e) { Db::rollback(); throw new BusinessException($e->getMessage()); } } }