diff --git a/doc/从备注提取手机号码功能说明.md b/doc/从备注提取手机号码功能说明.md index 5418dea..921ab49 100644 --- a/doc/从备注提取手机号码功能说明.md +++ b/doc/从备注提取手机号码功能说明.md @@ -141,7 +141,7 @@ if (phone != null && phoneCol != null) { ### 成功提取手机号码 ``` -✓ 从备注中提取手机号码 - 单号: JY2025110601, 手机号: 13800138000 +✓ 从status字段提取手机号码 - 单号: JY2025110601, 手机号: 13800138000 ✓ 准备写入手机号码 - 单号: JY2025110601, 手机号: 13800138000, 行: 3, 列: 6 ✓ 写入成功 - 行: 3, 单号: JY2025110601, 物流链接: https://3.cn/xxx, 手机号: 13800138000 ``` @@ -162,15 +162,16 @@ if (phone != null && phoneCol != null) { ## 使用示例 -### 订单备注示例 +### 订单Status字段示例 -| 备注内容 | 提取结果 | 说明 | +| Status内容 | 提取结果 | 说明 | |---------|---------|------| | `联系电话:138 0013 8000` | `13800138000` | ✅ 成功提取 | | `手机号138-0013-8000` | `13800138000` | ✅ 成功提取 | | `电话:(138)00138000` | `13800138000` | ✅ 成功提取 | | `13800138000 张三` | `13800138000` | ✅ 成功提取 | -| `备注:无电话` | `null` | ❌ 未提取到 | +| `17703916233` | `17703916233` | ✅ 成功提取 | +| `无电话` | `null` | ❌ 未提取到 | | `12345678901` | `null` | ❌ 不符合规则(不是1开头) | | `1280013800` | `null` | ❌ 不符合规则(第2位不是3-9) | @@ -189,14 +190,14 @@ if (phone != null && phoneCol != null) { ### 向后兼容 - ✅ 如果表头中**没有**"下单电话"列,功能自动跳过,不影响其他字段的同步 -- ✅ 如果订单备注中**没有**手机号码,功能自动跳过,不影响其他字段的同步 +- ✅ 如果订单status字段中**没有**手机号码,功能自动跳过,不影响其他字段的同步 - ✅ 不影响现有的物流链接、是否安排、标记字段的同步 ### 可选性 此功能是**完全可选**的: 1. 不需要在表头中添加"下单电话"列 -2. 订单备注可以不包含手机号码 +2. 订单status字段可以不包含手机号码 3. 功能会自动识别和适配 ## 测试建议 @@ -205,7 +206,7 @@ if (phone != null && phoneCol != null) { 1. **正常场景** - 表头包含"下单电话"列 - - 订单备注包含手机号码 + - 订单status字段包含手机号码 - 预期:手机号码正确写入 2. **无电话列场景** @@ -214,7 +215,7 @@ if (phone != null && phoneCol != null) { 3. **无手机号场景** - 表头包含"下单电话"列 - - 订单备注不包含手机号码 + - 订单status字段不包含手机号码 - 预期:其他字段正常同步,手机号码列为空 4. **多种格式场景** @@ -223,11 +224,11 @@ if (phone != null && phoneCol != null) { ### 测试步骤 -1. 在腾讯文档表头添加"下单电话"列 -2. 在订单备注中添加手机号码(不同格式) +1. 在腾讯文档表头添加"下单电话"列(或"电话"、"手机") +2. 确保订单的status字段包含手机号码(例如:17703916233) 3. 点击"批量同步物流"按钮 -4. 查看日志,确认提取和写入成功 -5. 查看腾讯文档,确认手机号码正确显示 +4. 查看后端日志,确认提取和写入成功 +5. 查看腾讯文档,确认手机号码正确显示在"下单电话"列 ## 未来优化建议 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java index f34b7b2..454deec 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/TencentDocController.java @@ -799,11 +799,15 @@ public class TencentDocController extends BaseController { */ private String extractPhoneFromRemark(String text) { if (text == null || text.trim().isEmpty()) { + log.debug("文本为空,无法提取手机号码"); return null; } + log.debug("原始文本: [{}]", text); + // 移除所有空格、横线、括号等分隔符 String cleanedText = text.replaceAll("[\\s\\-\\(\\)\\[\\]()\\【\\】]", ""); + log.debug("清理后文本: [{}]", cleanedText); // 匹配11位手机号码(1开头的11位数字) java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("1[3-9]\\d{9}"); @@ -811,10 +815,11 @@ public class TencentDocController extends BaseController { if (matcher.find()) { String phone = matcher.group(); - log.debug("从文本中提取到手机号码: {}", phone); + log.info("成功提取手机号码: [{}] <- 原文本: [{}]", phone, text); return phone; } + log.debug("未找到匹配的手机号码,文本: [{}]", text); return null; } @@ -999,10 +1004,12 @@ public class TencentDocController extends BaseController { } // 查找所有相关列 + log.info("开始识别表头列,共 {} 列", headerRowData.size()); for (int i = 0; i < headerRowData.size(); i++) { String cellValue = headerRowData.getString(i); if (cellValue != null) { String cellValueTrim = cellValue.trim(); + log.debug("列 {} 内容: [{}]", i, cellValueTrim); // 识别"单号"列 if (orderNoColumn == null && cellValueTrim.contains("单号")) { @@ -1029,12 +1036,13 @@ public class TencentDocController extends BaseController { } // 识别"下单电话"列(可选) - if (phoneColumn == null && (cellValueTrim.contains("下单电话") || cellValueTrim.contains("电话") || cellValueTrim.contains("手机"))) { + if (phoneColumn == null && (cellValueTrim.contains("下单电话"))) { phoneColumn = i; - log.info("✓ 识别到 '下单电话' 列:第 {} 列(索引{})", i + 1, i); + log.info("✓ 识别到 '下单电话' 列:第 {} 列(索引{}),列名: [{}]", i + 1, i, cellValueTrim); } } } + log.info("表头列识别完成"); // 检查必需的列是否都已识别 if (orderNoColumn == null) { @@ -1188,10 +1196,16 @@ public class TencentDocController extends BaseController { // 从status字段中提取手机号码 String phone = null; if (phoneColumn != null) { - phone = extractPhoneFromRemark(order.getStatus()); + String statusValue = order.getStatus(); + log.debug("准备从status字段提取手机号 - 单号: {}, status内容: [{}]", orderNo, statusValue); + phone = extractPhoneFromRemark(statusValue); if (phone != null) { - log.info("✓ 从status字段提取手机号码 - 单号: {}, 手机号: {}", orderNo, phone); + log.info("✓ 从status字段提取手机号码 - 单号: {}, status: [{}], 手机号: {}", orderNo, statusValue, phone); + } else { + log.debug("未能从status字段提取手机号码 - 单号: {}, status: [{}]", orderNo, statusValue); } + } else { + log.debug("phoneColumn为null,跳过手机号提取 - 单号: {}", orderNo); } // 构建更新请求