v1.0.10
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* 企业 CSV 导入接口 POST /api/company/import.php (multipart/form-data, 字段名 file)
|
||||
* CSV 表头: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
|
||||
* 仅 display_name 为必填。
|
||||
*/
|
||||
require_once __DIR__ . '/../common/db.php';
|
||||
require_once __DIR__ . '/../common/response.php';
|
||||
require_once __DIR__ . '/../common/auth.php';
|
||||
require_once __DIR__ . '/../common/logger.php';
|
||||
|
||||
checkAjax();
|
||||
checkPermission('company');
|
||||
|
||||
if (empty($_FILES['file']) || $_FILES['file']['error'] !== UPLOAD_ERR_OK) {
|
||||
Response::error('请选择要上传的CSV文件', 400);
|
||||
}
|
||||
|
||||
$tmp = $_FILES['file']['tmp_name'];
|
||||
$handle = fopen($tmp, 'r');
|
||||
if (!$handle) {
|
||||
Response::error('无法读取文件', 400);
|
||||
}
|
||||
|
||||
// 去掉 UTF-8 BOM
|
||||
$first = fgets($handle);
|
||||
$first = preg_replace('/^\xEF\xBB\xBF/', '', $first);
|
||||
$header = str_getcsv(trim($first));
|
||||
|
||||
$map = [
|
||||
'name_zh' => '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',
|
||||
];
|
||||
|
||||
$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)
|
||||
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,
|
||||
]);
|
||||
$inserted++;
|
||||
} catch (Exception $e) {
|
||||
$failed++;
|
||||
}
|
||||
}
|
||||
fclose($handle);
|
||||
|
||||
logCurrent('import', 'company', 'companies', null, ['inserted' => $inserted, 'failed' => $failed]);
|
||||
Response::success(['inserted' => $inserted, 'failed' => $failed], "导入完成:成功 $inserted 条,失败 $failed 条");
|
||||
Reference in New Issue
Block a user