perf(lastleg): reuse warehouse directory within sync generation
This commit is contained in:
+16
-2
@@ -20,8 +20,22 @@ public class AppointmentWorkRequirementProvider implements AppointmentWorkFactGa
|
||||
public AppointmentWorkRequirementProvider(AppointmentSourceService sources,AppointmentCargoVerificationService cargo,InboundFbaAppointmentService appointments,AppointmentWorkSourceMapper sourceMapping) {
|
||||
this.sources=sources; this.cargo=cargo; this.appointments=appointments; this.sourceMapping=sourceMapping;
|
||||
}
|
||||
/** 同次生成仅共享按需读取的目录;原业务数据继续逐需求核实。 */
|
||||
public RequirementReader openRequirements() {
|
||||
return new RequirementReader() {
|
||||
private AppointmentSourceService.ReadScope scope;
|
||||
/** 直送和未建立尾程来源的需求不创建目录读取依赖。 */
|
||||
public List<Requirement> read(ContainerSource container,Flow flow) {
|
||||
return requirements(container,flow,refs->{
|
||||
if(scope==null) scope=sources.openReadScope();
|
||||
return scope.resolveBatch(refs);
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
/** 按当前实物分配生成客户需求,保留已撤销批次身份以退役旧事项。 */
|
||||
public List<Requirement> requirements(ContainerSource container,Flow effectiveFlow) {
|
||||
private List<Requirement> requirements(ContainerSource container,Flow effectiveFlow,
|
||||
java.util.function.Function<List<AppointmentCoverageService.SourceRef>,List<AppointmentSourceService.Source>> resolver) {
|
||||
var original=container.requirements().stream().map(r->"PRIVATE".equals(r.destinationKind())?new Requirement(r.requirementKey(),r.batchKey(),r.batchNo(),"CUSTOMER",r.originName(),r.destinationName(),r.timezone(),r.references(),r.replacesRequirementKeys(),r.sources()):r).toList();
|
||||
if(effectiveFlow==Flow.DIRECT) return original;
|
||||
if(effectiveFlow!=Flow.TRANSFER) throw conflict("需求清单必须明确有效作业路线");
|
||||
@@ -38,7 +52,7 @@ public class AppointmentWorkRequirementProvider implements AppointmentWorkFactGa
|
||||
if(!"FBA".equals(requirement.destinationKind())) { result.put(requirement.requirementKey(),requirement); continue; }
|
||||
var refs=canonical(sourceOrders.stream().map(s->new SourceReference(s.customerId(),"ORDER:"+s.id(),null)).toList());
|
||||
List<AppointmentSourceService.Source> resolved;
|
||||
try { resolved=sources.resolveBatch(refs); }
|
||||
try { resolved=resolver.apply(refs); }
|
||||
catch(org.springframework.web.server.ResponseStatusException error) {
|
||||
if(!AppointmentWorkSourceAvailability.unresolved(error)) throw error;
|
||||
// Keep the complete physical obligation and its canonical source identities. The fact
|
||||
|
||||
Reference in New Issue
Block a user