1
This commit is contained in:
@@ -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. 查看腾讯文档,确认手机号码正确显示在"下单电话"列
|
||||
|
||||
## 未来优化建议
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
// 构建更新请求
|
||||
|
||||
Reference in New Issue
Block a user