fix(selfop): avoid loading routing manifests during idle planning

This commit is contained in:
2026-10-14 17:26:41 +08:00
parent 1112d11c80
commit 814eb11d2f
2 changed files with 16 additions and 2 deletions
@@ -73,7 +73,10 @@ public class SelfopSchedulePlanner {
var last=today.minusDays(local.toLocalTime().isBefore(LocalTime.of(0,5))?2:1);
var first=today.minusMonths(2);
String digest=hash(config.getWarehouses());
var roots=tasks.selectList(new QueryWrapper<SelfopSyncTask>().eq("source_account",config.getSourceAccount())
// Idle planning needs only day identity; routing manifests can contain thousands of orders.
var roots=tasks.selectList(new QueryWrapper<SelfopSyncTask>()
.select("request_key","query_from_utc","query_until_utc","scope_hash","status","query_scope_json")
.eq("source_account",config.getSourceAccount())
.eq("execution_purpose","BUSINESS").eq("task_role","ACCOUNT_DISCOVERY").eq("task_type","BACKFILL")
.eq("discovery_scope_id",account.getId()).isNull("upstream_task_id").isNull("validation_root_task_id")
.ge("query_from_utc",first.atStartOfDay().minusHours(8)).le("query_until_utc",last.plusDays(1).atStartOfDay().minusHours(8)));
@@ -103,7 +103,18 @@ class SelfopSchedulePlannerTest {
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<?> query=call.getArgument(0);query.getSqlSegment();
return query.getParamNameValuePairs().containsValue("INVENTORY")?List.of(stock):List.of(scope);});
var account=new SelfopOutboundDiscoveryScope();account.setId(30L);when(taskService.initializeAccount()).thenReturn(account);
var state=new ArrayList<SelfopSyncTask>();when(tasks.selectList(any())).thenAnswer(call->new ArrayList<>(state));
var state=new ArrayList<SelfopSyncTask>();when(tasks.selectList(any())).thenAnswer(call->{
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<?> query=call.getArgument(0);query.getSqlSegment();
if(!query.getParamNameValuePairs().containsValue("BACKFILL"))return new ArrayList<>(state);
// Model the actual database projection so deduplication tests cannot rely on unselected fields.
assertThat(query.getSqlSelect()).isEqualTo("request_key,query_from_utc,query_until_utc,scope_hash,status,query_scope_json");
return state.stream().map(source->{
var row=new SelfopSyncTask();row.setRequestKey(source.getRequestKey());
row.setQueryFromUtc(source.getQueryFromUtc());row.setQueryUntilUtc(source.getQueryUntilUtc());
row.setScopeHash(source.getScopeHash());row.setStatus(source.getStatus());row.setQueryScopeJson(source.getQueryScopeJson());
return row;
}).toList();
});
when(tasks.selectCount(any())).thenAnswer(call->{
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<?> query=call.getArgument(0);query.getSqlSegment();
var values=query.getParamNameValuePairs().values();