addArgument('file', InputArgument::REQUIRED, 'Excel文件路径') // ->addOption('user-id', 'u', InputOption::VALUE_REQUIRED, '用户ID', 0) // ->addOption('channel-id', 'c', InputOption::VALUE_REQUIRED, '渠道ID', 5) // ->addOption('corp-abbr', 'a', InputOption::VALUE_REQUIRED, '公司缩写', 2); } protected function execute(InputInterface $input, OutputInterface $output): int { // $filePath = $input->getArgument('file'); // $userId = $input->getOption('user-id'); // $channelId = $input->getOption('channel-id'); // $corpAbbr = $input->getOption('corp-abbr'); $filePath = 'C:\Users\16961\Downloads\中国制造 2023-2025-询盘导出.xls'; $userId = 0; $channelId = 5; $corpAbbr = 2; // 检查文件是否存在 if (!file_exists($filePath)) { $output->writeln("文件不存在: {$filePath}"); return self::FAILURE; } try { $output->writeln("开始导入文件: {$filePath}"); // 加载Excel文件 $output->writeln("正在加载Excel文件..."); $spreadsheet = IOFactory::load($filePath); $worksheet = $spreadsheet->getActiveSheet(); $output->writeln("Excel文件加载成功"); // 获取数据范围 $highestRow = $worksheet->getHighestRow(); $highestColumn = $worksheet->getHighestColumn(); $output->writeln("文件包含 {$highestRow} 行数据"); // 获取所有国家数据,用于匹配 $output->writeln("正在获取国家数据..."); // $countries = Country::select('id', 'cn_addr', 'en_addr')->get()->keyBy(function($item) { // return strtolower(trim($item->cn_addr)); // }); // $output->writeln("获取到 " . $countries->count() . " 个国家数据"); $successCount = 0; $errorCount = 0; $errors = []; // 从第二行开始读取数据(第一行是标题) $output->writeln("开始读取Excel数据..."); for ($row = 2; $row <= $highestRow; $row++) { try { $output->writeln("正在处理第 {$row} 行..."); // 读取各列数据 - 使用坐标方法 try { $countryName = trim($worksheet->getCell('B' . $row)->getValue() ?? ''); $contacts = trim($worksheet->getCell('A' . $row)->getValue() ?? ''); $email = trim($worksheet->getCell('C' . $row)->getValue() ?? ''); $phone = trim($worksheet->getCell('D' . $row)->getValue() ?? ''); $inquiryProduct = trim($worksheet->getCell('E' . $row)->getValue() ?? ''); } catch (\Exception $cellError) { $output->writeln("读取第{$row}行单元格时出错: " . $cellError->getMessage() . ""); continue; } $output->writeln("读取数据: 国家={$countryName}, 客户={$contacts}, 产品={$inquiryProduct}"); // 跳过空行 // if (empty($contacts)) { // continue; // } // 查找国家ID $countryId = 0; // if (!empty($countryName)) { // $countryKey = strtolower($countryName); // if ($countries->has($countryKey)) { // $countryId = $countries->get($countryKey)->id; // } else { // // 尝试英文名称匹配 // $countryByEn = $countries->first(function($item) use ($countryName) { // return strtolower(trim($item->en_addr)) === strtolower($countryName); // }); // if ($countryByEn) { // $countryId = $countryByEn->id; // } // } // } // 检查是否已存在相同客户名 // $existingCustomer = Customer::where('contacts', $customerName)->first(); // if ($existingCustomer) { // $output->writeln("跳过已存在的客户: {$customerName}"); // continue; // } // 创建客户记录 // $customerData = [ // 'user_id' => $userId, // 'corp_abbr' => $corpAbbr, // 'channel_id' => $channelId, // 'country_id' => $countryId, // 'contacts' => $customerName, // 'email' => $email, // 'phone' => $phone, // 'desc_collect' => $inquiryProduct, // 'grade' => 0, // 默认等级 // 'magnitude' => 1, // 默认商机 // 'type' => 1, // 默认类型 // 'sex' => 0, // 默认性别 // 'enter_user_id' => $userId, // ]; $where = [ ['id', '<', 28110], ['id', '>', 25714], ]; $customer = Customer::where('contacts',$email)->where($where)->first(); $customer->email = $email; $customer->phone = $phone; $customer->contacts = $contacts; $customer->save(); $successCount++; $output->writeln("成功导入客户: {$contacts} (ID: {$customer->id})"); } catch (\Exception $e) { $errorCount++; $errorMsg = "第{$row}行导入失败: " . $e->getMessage(); $errorMsg .= "\n文件: " . $e->getFile() . " 行: " . $e->getLine(); $errorMsg .= "\n堆栈: " . $e->getTraceAsString(); $errors[] = $errorMsg; $output->writeln("{$errorMsg}"); } } $output->writeln("\n导入完成!"); $output->writeln("成功导入: {$successCount} 条记录"); $output->writeln("失败: {$errorCount} 条记录"); if (!empty($errors)) { $output->writeln("\n错误详情:"); foreach ($errors as $error) { $output->writeln("{$error}"); } } return self::SUCCESS; } catch (\Exception $e) { $output->writeln("导入过程中发生错误: " . $e->getMessage() . ""); $output->writeln("文件: " . $e->getFile() . " 行: " . $e->getLine() . ""); $output->writeln("堆栈: " . $e->getTraceAsString() . ""); return self::FAILURE; } } }