This commit is contained in:
2025-11-06 21:54:10 +08:00
parent 3bf02de147
commit 6653c2ca03

View File

@@ -789,6 +789,34 @@ public class TencentDocController extends BaseController {
TencentDocController.log.error("记录操作日志失败", e);
}
}
/**
* 从备注中提取手机号码
* 支持11位手机号码可能包含空格、横线等分隔符
*
* @param remark 备注信息
* @return 提取到的手机号码如果没有则返回null
*/
private String extractPhoneFromRemark(String remark) {
if (remark == null || remark.trim().isEmpty()) {
return null;
}
// 移除所有空格、横线、括号等分隔符
String cleanedRemark = remark.replaceAll("[\\s\\-\\(\\)\\[\\]\\\\】]", "");
// 匹配11位手机号码1开头的11位数字
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("1[3-9]\\d{9}");
java.util.regex.Matcher matcher = pattern.matcher(cleanedRemark);
if (matcher.find()) {
String phone = matcher.group();
log.debug("从备注中提取到手机号码: {}", phone);
return phone;
}
return null;
}
/**
* 批量同步物流链接 - 读取表格数据,根据单号查询订单系统中的物流链接,并填充到表格
@@ -963,6 +991,7 @@ public class TencentDocController extends BaseController {
Integer logisticsLinkColumn = null; // "物流单号"列
Integer arrangedColumn = null; // "是否安排"列
Integer markColumn = null; // "标记"列
Integer phoneColumn = null; // "下单电话"列
JSONArray headerRowData = headerValues.getJSONArray(0);
if (headerRowData == null || headerRowData.isEmpty()) {
@@ -998,6 +1027,12 @@ public class TencentDocController extends BaseController {
markColumn = i;
log.info("✓ 识别到 '标记' 列:第 {} 列(索引{}", i + 1, i);
}
// 识别"下单电话"列(可选)
if (phoneColumn == null && (cellValueTrim.contains("下单电话") || cellValueTrim.contains("电话") || cellValueTrim.contains("手机"))) {
phoneColumn = i;
log.info("✓ 识别到 '下单电话' 列:第 {} 列(索引{}", i + 1, i);
}
}
}
@@ -1016,9 +1051,12 @@ public class TencentDocController extends BaseController {
if (markColumn == null) {
log.warn("未找到'标记'列,将跳过该字段的更新");
}
if (phoneColumn == null) {
log.warn("未找到'下单电话'列,将跳过该字段的更新");
}
log.info("列位置识别完成 - 单号: {}, 物流单号: {}, 是否安排: {}, 标记: {}",
orderNoColumn, logisticsLinkColumn, arrangedColumn, markColumn);
log.info("列位置识别完成 - 单号: {}, 物流单号: {}, 是否安排: {}, 标记: {}, 下单电话: {}",
orderNoColumn, logisticsLinkColumn, arrangedColumn, markColumn, phoneColumn);
// 读取数据行
// 使用 A1 表示法Excel格式
@@ -1147,18 +1185,34 @@ public class TencentDocController extends BaseController {
if (order.getLogisticsLink() != null && !order.getLogisticsLink().trim().isEmpty()) {
String logisticsLink = order.getLogisticsLink().trim();
// 从备注中提取手机号码
String phone = null;
if (phoneColumn != null) {
phone = extractPhoneFromRemark(order.getRemark());
if (phone != null) {
log.info("✓ 从备注中提取手机号码 - 单号: {}, 手机号: {}", orderNo, phone);
}
}
// 构建更新请求
JSONObject update = new JSONObject();
update.put("row", excelRow);
update.put("column", logisticsLinkColumn);
update.put("orderNo", orderNo);
update.put("logisticsLink", logisticsLink);
// 如果找到手机号码,也添加到更新中
if (phone != null && phoneColumn != null) {
update.put("phone", phone);
update.put("phoneColumn", phoneColumn);
}
// 注意不再保存order对象写入成功后会重新查询以确保数据最新
updates.add(update);
filledCount++;
log.info("找到订单物流链接 - 单号: {}, 物流链接: {}, 行号: {}, 已推送: {}",
orderNo, logisticsLink, excelRow,
log.info("找到订单物流链接 - 单号: {}, 物流链接: {}, 手机号: {}, 行号: {}, 已推送: {}",
orderNo, logisticsLink, phone != null ? phone : "", excelRow,
order.getTencentDocPushed() != null && order.getTencentDocPushed() == 1 ? "" : "");
} else {
errorCount++;
@@ -1240,12 +1294,20 @@ public class TencentDocController extends BaseController {
// 1. 更新物流单号(超链接类型)
requests.add(buildUpdateCellRequest(sheetId, row - 1, logisticsLinkColumn, logisticsLink, true));
// 2. 更新"是否安排"列(如果存在)
// 2. 更新"下单电话"列(如果存在且提取到了手机号码
String phone = update.getString("phone");
Integer phoneCol = update.getInteger("phoneColumn");
if (phone != null && phoneCol != null) {
requests.add(buildUpdateCellRequest(sheetId, row - 1, phoneCol, phone, false));
log.info("✓ 准备写入手机号码 - 单号: {}, 手机号: {}, 行: {}, 列: {}", expectedOrderNo, phone, row, phoneCol);
}
// 3. 更新"是否安排"列(如果存在)
if (arrangedColumn != null) {
requests.add(buildUpdateCellRequest(sheetId, row - 1, arrangedColumn, "2", false));
}
// 3. 更新"标记"列(如果存在)
// 4. 更新"标记"列(如果存在)
if (markColumn != null) {
requests.add(buildUpdateCellRequest(sheetId, row - 1, markColumn, today, false));
}
@@ -1258,7 +1320,11 @@ public class TencentDocController extends BaseController {
tencentDocService.batchUpdate(accessToken, fileId, batchUpdateBody);
successUpdates++;
log.info("✓ 写入成功 - 行: {}, 单号: {}, 物流链接: {}", row, expectedOrderNo, logisticsLink);
String logMsg = String.format("✓ 写入成功 - 行: %d, 单号: %s, 物流链接: %s", row, expectedOrderNo, logisticsLink);
if (phone != null) {
logMsg += String.format(", 手机号: %s", phone);
}
log.info(logMsg);
// 更新订单的推送状态(重新查询订单,避免使用旧对象)
try {