This commit is contained in:
van
2026-04-04 16:30:21 +08:00
parent 74e7990947
commit bce83f680c

View File

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