From 6653c2ca0361a27c496a4dc58bdf2879d18a4c4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=92?= Date: Thu, 6 Nov 2025 21:54:10 +0800 Subject: [PATCH] 1 --- .../jarvis/TencentDocController.java | 80 +++++++++++++++++-- 1 file changed, 73 insertions(+), 7 deletions(-) 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 8ca24ad..ecc90dc 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 @@ -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 {