1
This commit is contained in:
@@ -61,6 +61,8 @@ public class TencentDocController extends BaseController {
|
|||||||
private static final int API_MAX_ROWS_PER_REQUEST = 200;
|
private static final int API_MAX_ROWS_PER_REQUEST = 200;
|
||||||
/** 回溯行数:下次起始行 = 本次扫描终点 + 1 - 回溯,用于覆盖物流变更或延后补填 */
|
/** 回溯行数:下次起始行 = 本次扫描终点 + 1 - 回溯,用于覆盖物流变更或延后补填 */
|
||||||
private static final int BACKTRACK_ROWS = 80;
|
private static final int BACKTRACK_ROWS = 80;
|
||||||
|
/** 整批都跳过(0 写入)时使用的回溯行数,减小回溯以尽快扫到后续行(如 308) */
|
||||||
|
private static final int BACKTRACK_ROWS_WHEN_ALL_SKIPPED = 20;
|
||||||
/** 最小前进行数:本次至少“扫过”这么多行,下次起始行至少 = 本次起始 + 最小前进(避免空行多时原地打转) */
|
/** 最小前进行数:本次至少“扫过”这么多行,下次起始行至少 = 本次起始 + 最小前进(避免空行多时原地打转) */
|
||||||
private static final int MIN_ADVANCE_ROWS = 50;
|
private static final int MIN_ADVANCE_ROWS = 50;
|
||||||
|
|
||||||
@@ -1231,11 +1233,12 @@ public class TencentDocController extends BaseController {
|
|||||||
log.warn("sheetData内容预览: {}", sheetData.toJSONString().substring(0, Math.min(500, sheetData.toJSONString().length())));
|
log.warn("sheetData内容预览: {}", sheetData.toJSONString().substring(0, Math.min(500, sheetData.toJSONString().length())));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 无数据时也推进进度,避免大量空行时原地打转;下次起始 = 本批终点 + 1 - 回溯
|
// 无数据时也推进进度,使用较小回溯尽快扫到后续行
|
||||||
int emptyCurrentMax = effectiveEndRow;
|
int emptyCurrentMax = effectiveEndRow;
|
||||||
|
int emptyBacktrack = BACKTRACK_ROWS_WHEN_ALL_SKIPPED;
|
||||||
int emptyNextStart = Math.max(effectiveStartRow,
|
int emptyNextStart = Math.max(effectiveStartRow,
|
||||||
Math.max(startRow + MIN_ADVANCE_ROWS, emptyCurrentMax + 1 - BACKTRACK_ROWS));
|
Math.max(startRow + MIN_ADVANCE_ROWS, emptyCurrentMax + 1 - emptyBacktrack));
|
||||||
int emptyProgressToSave = Math.max(emptyCurrentMax, startRow + MIN_ADVANCE_ROWS + BACKTRACK_ROWS - 1);
|
int emptyProgressToSave = Math.max(emptyCurrentMax, startRow + MIN_ADVANCE_ROWS + emptyBacktrack - 1);
|
||||||
redisCache.setCacheObject(redisKey, emptyProgressToSave, 30, TimeUnit.DAYS);
|
redisCache.setCacheObject(redisKey, emptyProgressToSave, 30, TimeUnit.DAYS);
|
||||||
log.info("本批无数据,已推进进度: nextStartRow={}, Redis 进度={}", emptyNextStart, emptyProgressToSave);
|
log.info("本批无数据,已推进进度: nextStartRow={}, Redis 进度={}", emptyNextStart, emptyProgressToSave);
|
||||||
|
|
||||||
@@ -1732,16 +1735,17 @@ public class TencentDocController extends BaseController {
|
|||||||
// 完美推送回溯:根据本次扫描/写入结果决定下次起始行与 Redis 进度
|
// 完美推送回溯:根据本次扫描/写入结果决定下次起始行与 Redis 进度
|
||||||
// currentMaxRow = 本批实际涉及的最大行(有写入用最大成功行,否则用本批扫描终点)
|
// currentMaxRow = 本批实际涉及的最大行(有写入用最大成功行,否则用本批扫描终点)
|
||||||
int currentMaxRow = (maxSuccessRow > 0) ? maxSuccessRow : effectiveEndRow;
|
int currentMaxRow = (maxSuccessRow > 0) ? maxSuccessRow : effectiveEndRow;
|
||||||
// 下次起始 = 本批最大行 + 1 - 回溯行数,且不小于配置起始行;并保证至少前进行数(避免大量空行时原地打转)
|
// 整批都跳过时用较小回溯,尽快扫到后续行(如 308);有写入时用完整回溯覆盖物流变更
|
||||||
|
int backtrack = (successUpdates > 0) ? BACKTRACK_ROWS : BACKTRACK_ROWS_WHEN_ALL_SKIPPED;
|
||||||
int nextStartRow = Math.max(effectiveStartRow,
|
int nextStartRow = Math.max(effectiveStartRow,
|
||||||
Math.max(startRow + MIN_ADVANCE_ROWS, currentMaxRow + 1 - BACKTRACK_ROWS));
|
Math.max(startRow + MIN_ADVANCE_ROWS, currentMaxRow + 1 - backtrack));
|
||||||
// 进度写入 Redis:至少推进到 (startRow + 最小前进 + 回溯 - 1),保证下次不会重复扫同一段
|
// 进度写入 Redis:至少推进到 (startRow + 最小前进 + 回溯 - 1),保证下次不会重复扫同一段
|
||||||
int progressToSave = Math.max(currentMaxRow, startRow + MIN_ADVANCE_ROWS + BACKTRACK_ROWS - 1);
|
int progressToSave = Math.max(currentMaxRow, startRow + MIN_ADVANCE_ROWS + backtrack - 1);
|
||||||
redisCache.setCacheObject(redisKey, progressToSave, 30, TimeUnit.DAYS);
|
redisCache.setCacheObject(redisKey, progressToSave, 30, TimeUnit.DAYS);
|
||||||
|
|
||||||
String nextSyncHint = String.format(
|
String nextSyncHint = String.format(
|
||||||
"下次将从第 %d 行开始(本批最大行: %d,回溯 %d 行;已写入 %d 条,跳过 %d 条)",
|
"下次将从第 %d 行开始(本批最大行: %d,回溯 %d 行;已写入 %d 条,跳过 %d 条)",
|
||||||
nextStartRow, currentMaxRow, BACKTRACK_ROWS, successUpdates, skippedCount);
|
nextStartRow, currentMaxRow, backtrack, successUpdates, skippedCount);
|
||||||
log.info("========== 更新Redis进度 ==========");
|
log.info("========== 更新Redis进度 ==========");
|
||||||
log.info("本批范围: {}~{},实际最大行: {},下次起始: {},Redis 进度: {}", startRow, effectiveEndRow, currentMaxRow, nextStartRow, progressToSave);
|
log.info("本批范围: {}~{},实际最大行: {},下次起始: {},Redis 进度: {}", startRow, effectiveEndRow, currentMaxRow, nextStartRow, progressToSave);
|
||||||
log.info("Redis Key: {}", redisKey);
|
log.info("Redis Key: {}", redisKey);
|
||||||
@@ -1768,7 +1772,7 @@ public class TencentDocController extends BaseController {
|
|||||||
" %s",
|
" %s",
|
||||||
filledCount, skippedCount, errorCount,
|
filledCount, skippedCount, errorCount,
|
||||||
startRow, effectiveEndRow,
|
startRow, effectiveEndRow,
|
||||||
currentMaxRow, nextStartRow, BACKTRACK_ROWS,
|
currentMaxRow, nextStartRow, backtrack,
|
||||||
skipPushedOrders ? "已启用(跳过已推送订单)" : "已禁用",
|
skipPushedOrders ? "已启用(跳过已推送订单)" : "已禁用",
|
||||||
nextSyncHint
|
nextSyncHint
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user