This commit is contained in:
2025-11-06 22:16:47 +08:00
parent 42c6c8bc23
commit 8d409157c5
2 changed files with 32 additions and 17 deletions

View File

@@ -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. 查看腾讯文档,确认手机号码正确显示在"下单电话"列
## 未来优化建议

View File

@@ -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);
}
// 构建更新请求