fix: count split picking facts in trip operations
This commit is contained in:
+27
@@ -34,6 +34,33 @@ class TripOperationsServiceTest {
|
||||
assertThatThrownBy(()->service.project(new TripOperationsRepository.Departure("TR-A","IN_TRANSIT",null,null,null))).hasMessageContaining("不可变历史");
|
||||
assertThatThrownBy(()->service.project(new TripOperationsRepository.Departure("TR-A","IN_TRANSIT",null,DEPARTURE.replace("\"receivedPackages\":4","\"receivedPackages\":20").replace("\"packages\":4","\"packages\":20"),null))).hasMessageContaining("超过实际发车");
|
||||
}
|
||||
/** 同一排车明细的分次拣货必须逐段计数,实托只计一次且客户和目的地仍严格核对。 */
|
||||
@Test void splitPicksOfOneDispatchItemSumWithoutDuplicatingPhysicalPallets() throws Exception {
|
||||
var mapper=new ObjectMapper().registerModule(new JavaTimeModule());
|
||||
var snapshot=mapper.readTree(DEPARTURE);
|
||||
var cargo=(com.fasterxml.jackson.databind.node.ArrayNode)snapshot.path("confirmedLoad").path("cargo");
|
||||
var first=(com.fasterxml.jackson.databind.node.ObjectNode)cargo.get(0);
|
||||
first.put("packages",2);
|
||||
var second=first.deepCopy().put("packages",8);
|
||||
cargo.add(second);
|
||||
var service=new TripOperationsService(mock(TripOperationsRepository.class),mapper,mock(FleetTripCostService.class));
|
||||
var row=service.project(new TripOperationsRepository.Departure("TR-A","IN_TRANSIT",null,mapper.writeValueAsString(snapshot),null));
|
||||
assertThat(row.ownPackages()).isEqualTo(11);
|
||||
assertThat(row.externalPackages()).isEqualTo(4);
|
||||
assertThat(row.physicalPallets()).isEqualTo(1);
|
||||
assertThat(row.palletSpaces()).isEqualTo(2);
|
||||
for(String field:List.of("customerId","destinationKey","destinationLabel","warehousePalletId")) {
|
||||
var invalid=snapshot.deepCopy();
|
||||
((com.fasterxml.jackson.databind.node.ObjectNode)invalid.path("confirmedLoad").path("cargo").get(2)).put(field,"OTHER");
|
||||
String value=mapper.writeValueAsString(invalid);
|
||||
assertThatThrownBy(()->service.project(new TripOperationsRepository.Departure("TR-A","IN_TRANSIT",null,value,null)))
|
||||
.isInstanceOf(IllegalStateException.class).hasMessageContaining("发车装载");
|
||||
}
|
||||
second.put("packages",0);
|
||||
String zero=mapper.writeValueAsString(snapshot);
|
||||
assertThatThrownBy(()->service.project(new TripOperationsRepository.Departure("TR-A","IN_TRANSIT",null,zero,null)))
|
||||
.hasMessageContaining("未核平");
|
||||
}
|
||||
@Test void summaryUsesAllFilteredDeparturesNotCurrentPageAndSeparatesCurrencies() {
|
||||
var repo=mock(TripOperationsRepository.class);var service=new TripOperationsService(repo,new ObjectMapper().registerModule(new JavaTimeModule()),mock(FleetTripCostService.class));
|
||||
var query=new TripOperationsModels.Query(1,1,Instant.parse("2026-10-01T00:00:00Z"),Instant.parse("2026-10-03T00:00:00Z"),null,null,"EXTERNAL",null);
|
||||
|
||||
Reference in New Issue
Block a user