From bce83f680c30ce8bf4f4334efe7f8cc70dc87318 Mon Sep 17 00:00:00 2001 From: van Date: Sat, 4 Apr 2026 16:30:21 +0800 Subject: [PATCH] 1 --- .../jarvis/TencentDocController.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 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 77649ba..3efb017 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 @@ -1018,7 +1018,8 @@ public class TencentDocController extends BaseController { // 读取表格数据(先读取表头行用于识别列位置) // 根据官方文档,使用 A1 表示法(Excel格式) // 参考:https://docs.qq.com/open/document/app/openapi/v3/sheet/get/get_range.html - String headerRange = String.format("A%d:Z%d", headerRow, headerRow); // 例如:A2:Z2 + // 与数据区列宽一致,避免「京东下单订单号」在 Z 列之后时无法识别表头 + String headerRange = String.format("A%d:%s%d", headerRow, DATA_RANGE_COL_END, headerRow); log.info("读取表头 - 行号: {}, range: {}", headerRow, headerRange); JSONObject headerData = null; @@ -1275,10 +1276,8 @@ public class TencentDocController extends BaseController { errorCount++; continue; } + // 仅要求能读到第三方单号、物流列;京东列常在更右侧且稀疏行可能未返回尾部空列,不能要求 row 长度覆盖京东列 int minDataColIdx = Math.max(orderNoColumn, logisticsLinkColumn); - if (jdPlaceOrderNoColumn != null) { - minDataColIdx = Math.max(minDataColIdx, jdPlaceOrderNoColumn); - } if (row == null || row.size() <= minDataColIdx) { continue; // 跳过空行或列数不足的行 } @@ -1536,7 +1535,7 @@ public class TencentDocController extends BaseController { continue; } jdId = jdId.trim(); - String jdVerifyRange = String.format("A%d:Z%d", row, row); + String jdVerifyRange = String.format("A%d:%s%d", row, DATA_RANGE_COL_END, row); JSONObject jdVerifyData = tencentDocService.readSheetData(accessToken, fileId, sheetId, jdVerifyRange); if (jdVerifyData == null || !jdVerifyData.containsKey("values")) { errorCount++; @@ -1548,8 +1547,8 @@ public class TencentDocController extends BaseController { continue; } JSONArray jdVerifyRow = jdVerifyRows.getJSONArray(0); - int jdNeedIdx = Math.max(orderNoColumn, Math.max(logisticsLinkColumn, jdCol)); - if (jdVerifyRow == null || jdVerifyRow.size() <= jdNeedIdx) { + int jdBaseNeedIdx = Math.max(orderNoColumn, logisticsLinkColumn); + if (jdVerifyRow == null || jdVerifyRow.size() <= jdBaseNeedIdx) { errorCount++; continue; } @@ -1610,8 +1609,8 @@ public class TencentDocController extends BaseController { continue; } - // 重新读取该行数据,验证单号和物流链接列 - String verifyRange = String.format("A%d:Z%d", row, row); + // 重新读取该行(列宽与批量读取一致,含 Z 列之后的京东单号列) + String verifyRange = String.format("A%d:%s%d", row, DATA_RANGE_COL_END, row); JSONObject verifyData = tencentDocService.readSheetData(accessToken, fileId, sheetId, verifyRange); if (verifyData == null || !verifyData.containsKey("values")) { @@ -1647,11 +1646,8 @@ public class TencentDocController extends BaseController { JSONArray verifyRow = verifyRows.getJSONArray(0); int verifyMinColIdx = Math.max(orderNoColumn, logisticsLinkColumn); - if (jdPlaceOrderNoColumn != null) { - verifyMinColIdx = Math.max(verifyMinColIdx, jdPlaceOrderNoColumn); - } if (verifyRow == null || verifyRow.size() <= verifyMinColIdx) { - log.warn("验证失败 - 行 {} 列数不足", row); + log.warn("验证失败 - 行 {} 列数不足(需覆盖单号列与物流列)", row); errorCount++; // 记录错误详情