fix(appointment): exclude cancelled batches without active allocations

This commit is contained in:
2026-10-16 16:21:51 +08:00
parent 000125c3ec
commit 58685945b1
3 changed files with 62 additions and 8 deletions
@@ -60,14 +60,19 @@ class AppointmentWorkSyncServiceTest {
when(f.gateway.discover(null,10)).thenReturn(new SourcePage(List.of(container),null,true,"scope"));
assertThrows(ResponseStatusException.class,()->f.sync.synchronize(new SyncRequest(null,10)));
}
/** 空取消批次回到原货源时退役客户送仓及运输事项,并使版本门禁恢复可读。 */
@Test void cancellationReopensOriginalDemandAndRestoringTheSameAppointmentDoesNotDuplicateWork() {
var f=new WorkTestFixture();
var root=new Requirement("INBOUND:1",null,null,"FBA",null,"ONT8",null,List.of(),List.of("FBA_APPOINTMENT:1"),List.of());
var batch=new Requirement("FBA_APPOINTMENT:1","FBA_APPOINTMENT:1","AP-1","FBA",null,"ONT8",null,List.of(),List.of("INBOUND:1"),List.of(new SourceReference("C","ORDER:1","FBA:ONT8")));
var refs=List.of(new SourceReference("C","ORDER:1","FBA:ONT8"));
var root=new Requirement("INBOUND:1",null,null,"FBA",null,"ONT8",null,List.of(),List.of("FBA_APPOINTMENT:1","FBA_APPOINTMENT:1|CUSTOMER:C"),refs);
var batch=new Requirement("FBA_APPOINTMENT:1|CUSTOMER:C","FBA_APPOINTMENT:1","AP-1","FBA",null,"ONT8",null,List.of(),List.of("INBOUND:1"),refs);
for(var requirement:List.of(root,batch,root,batch)) {
f.guard.setRequirementVersion(f.guard.getRequirementVersion()+1);
assertThrows(ResponseStatusException.class,f.store::requireInitialized);
var source=new ContainerSource("1","CNT",null,LocalDateTime.parse("2026-10-01T10:00:00"),null,"v1",Flow.TRANSFER,null,List.of(requirement));
when(f.gateway.discover(null,10)).thenReturn(new SourcePage(List.of(source),null,true,"scope"));
f.sync.synchronize(new SyncRequest(null,10));
assertDoesNotThrow(f.store::requireInitialized);
var deliveries=f.store.all().stream().filter(s->s.getType()==Type.DELIVERY && !s.isRetired()).toList();
assertEquals(1,deliveries.size()); assertEquals(requirement.requirementKey(),deliveries.get(0).getRequirementKey());
}