'name_zh', 'name_en' => 'name_en', 'display_name' => 'display_name', 'business_role' => 'business_role', 'country' => 'country', 'registration_number' => 'registration_number', 'address' => 'address', 'legal_form' => 'legal_form', 'legal_representative' => 'legal_representative', 'industry' => 'industry', 'industry_subdivision' => 'industry_subdivision', 'website' => 'website', 'registered_capital' => 'registered_capital', 'established_date' => 'established_date', 'is_listed' => 'is_listed', 'stock_code' => 'stock_code', 'source_channel' => 'source_channel', 'source_detail' => 'source_detail', ]; $pdo = DB::getInstance()->getPdo(); $inserted = 0; $failed = 0; $stmt = $pdo->prepare( "INSERT INTO companies (name_zh, name_en, display_name, business_role, country, registration_number, address, legal_form, legal_representative, industry, industry_subdivision, website, registered_capital, established_date, is_listed, stock_code, source_channel, source_detail) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ); while (($row = fgetcsv($handle)) !== false) { $row = array_map('trim', $row); $rec = []; foreach ($header as $idx => $col) { $col = trim($col); if (isset($map[$col]) && isset($row[$idx])) { $rec[$map[$col]] = $row[$idx]; } } if (empty($rec['display_name'])) { $failed++; continue; } $rec['established_date'] = ($rec['established_date'] ?? '') !== '' ? date('Y-m-d', strtotime($rec['established_date'])) : null; try { $stmt->execute([ $rec['name_zh'] ?? null, $rec['name_en'] ?? null, $rec['display_name'], $rec['business_role'] ?? null, $rec['country'] ?? null, $rec['registration_number'] ?? null, $rec['address'] ?? null, $rec['legal_form'] ?? null, $rec['legal_representative'] ?? null, $rec['industry'] ?? null, $rec['industry_subdivision'] ?? null, $rec['website'] ?? null, $rec['registered_capital'] ?? null, $rec['established_date'], ($rec['is_listed'] ?? 0) ? 1 : 0, $rec['stock_code'] ?? null, $rec['source_channel'] ?? null, $rec['source_detail'] ?? null, ]); // 完整度检查(导入每行入库后) updateIncomplete($pdo, 'companies', (int)$pdo->lastInsertId()); $inserted++; } catch (Exception $e) { $failed++; } } fclose($handle); logCurrent('import', 'company', 'companies', null, ['inserted' => $inserted, 'failed' => $failed]); Response::success(['inserted' => $inserted, 'failed' => $failed], "导入完成:成功 $inserted 条,失败 $failed 条");