From cd622addec78774f48ae1b4dcd6a83513d091902 Mon Sep 17 00:00:00 2001 From: mzl Date: Fri, 12 Dec 2025 18:37:03 +0800 Subject: [PATCH] ts --- app/inquiry/utils/FbLeadHeaderMapper.php | 69 ++++++++++++++++++++---- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/app/inquiry/utils/FbLeadHeaderMapper.php b/app/inquiry/utils/FbLeadHeaderMapper.php index 60b17dc..8f9e888 100644 --- a/app/inquiry/utils/FbLeadHeaderMapper.php +++ b/app/inquiry/utils/FbLeadHeaderMapper.php @@ -78,6 +78,44 @@ class FbLeadHeaderMapper 'email', ]; + /** + * 表头别名:标准化后表头 => headerMap里的key + */ + protected array $aliases = [ + // ===== full_name ===== + 'name' => 'full_name', + 'full_name' => 'full_name', + 'full_name_(full_name)' => 'full_name', + 'full_name_(full_name_)' => 'full_name', + 'full_name_full_name' => 'full_name', + 'full name' => 'full_name', // 万一没被替换成 _ + 'full_name(full_name)' => 'full_name', + '姓名' => 'full_name', + '姓名_full_name' => 'full_name', + '姓名(full_name)' => 'full_name', + + // ===== phone ===== + 'phone' => 'phone', + 'phone_number' => 'phone_number', + 'phone number' => 'phone_number', + 'telephone' => 'phone', + 'tel' => 'phone', + 'mobile' => 'phone', + 'mobile_number' => 'phone', + '手机号' => 'phone', + '电话' => 'phone', + '电话号码' => 'phone', + 'whatsapp' => 'phone', // 有的表单把 whatsapp 当电话 + + // ===== email ===== + 'email' => 'email', + 'e-mail' => 'email', + 'mail' => 'email', + '邮箱' => 'email', + '电子邮箱' => 'email', + ]; + + /** * 返回所有支持的 Excel 表头(标准化后的 key) */ @@ -92,6 +130,7 @@ class FbLeadHeaderMapper public function mapHeader(string $rawHeader): ?string { $key = $this->normalizeHeader($rawHeader); + $key = $this->aliases[$key] ?? $key; return $this->headerMap[$key] ?? null; } @@ -146,7 +185,9 @@ class FbLeadHeaderMapper continue; } - $field = $this->headerMap[$key] ?? null; + // $field = $this->headerMap[$key] ?? null; + $aliasKey = $this->aliases[$key] ?? $key; + $field = $this->headerMap[$aliasKey] ?? null; if ($field === null) { // 宽松:记录未知列(保留原始表头用于展示) @@ -192,21 +233,31 @@ class FbLeadHeaderMapper { // 去掉 UTF-8 BOM $header = preg_replace('/^\xEF\xBB\xBF/', '', $header); - - // 去掉前后空白 $header = trim($header); + if ($header === '') return ''; - if ($header === '') { - return ''; - } + // 统一全角括号 + $header = str_replace(['(',')'], ['(',')'], $header); - // 可选增强(默认不开启,避免影响中文): - // $header = mb_strtolower($header); - // $header = preg_replace('/\s+/', '_', $header); + // 小写化(对英文有效,中文不受影响) + $header = mb_strtolower($header); + + // 把括号内容保留下来,但用下划线连接: "姓名(Full name)" -> "姓名_full_name" + $header = preg_replace('/\((.*?)\)/', '_$1', $header); + + // 空白转下划线 + $header = preg_replace('/\s+/', '_', $header); + + // 连续下划线压缩 + $header = preg_replace('/_+/', '_', $header); + + // 去掉首尾下划线 + $header = trim($header, '_'); // ✅ 去掉末尾连续的 "_" / "?" $header = rtrim($header, "_?"); return $header; } + }