fix(lastleg): export all pages when pagination caps batch size
This commit is contained in:
@@ -91,7 +91,7 @@ public class LastlegOrderService {
|
|||||||
|
|
||||||
public PageResult<LastlegOrderSummary> page(String customerId, LastlegOrderRequests.Query query, String relabelNo) {
|
public PageResult<LastlegOrderSummary> page(String customerId, LastlegOrderRequests.Query query, String relabelNo) {
|
||||||
Page<LastlegOrder> page = orderMapper.selectPage(
|
Page<LastlegOrder> page = orderMapper.selectPage(
|
||||||
new Page<>(query.page(), query.size()), filter(customerId, query, relabelNo).orderByDesc(LastlegOrder::getCreatedAt));
|
new Page<>(query.page(), query.size()), filter(customerId, query, relabelNo).orderByDesc(LastlegOrder::getCreatedAt).orderByDesc(LastlegOrder::getId));
|
||||||
Map<Long, List<LastlegOrderMapper.PalletMergeRelationRow>> mergeRelations = palletMergeRelations(page.getRecords());
|
Map<Long, List<LastlegOrderMapper.PalletMergeRelationRow>> mergeRelations = palletMergeRelations(page.getRecords());
|
||||||
Map<String, String> containerNodes = containerNodes(page.getRecords());
|
Map<String, String> containerNodes = containerNodes(page.getRecords());
|
||||||
Map<Long, String> dispatchStatuses = dispatchStatuses(page.getRecords());
|
Map<Long, String> dispatchStatuses = dispatchStatuses(page.getRecords());
|
||||||
@@ -537,8 +537,9 @@ public class LastlegOrderService {
|
|||||||
final int batchSize = 1000;
|
final int batchSize = 1000;
|
||||||
long page = 1;
|
long page = 1;
|
||||||
while (true) {
|
while (true) {
|
||||||
List<LastlegOrder> orders = orderMapper.selectPage(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, batchSize),
|
Page<LastlegOrder> result = orderMapper.selectPage(new Page<>(page, batchSize),
|
||||||
filter(customerId, query).orderByDesc(LastlegOrder::getCreatedAt).orderByDesc(LastlegOrder::getId)).getRecords();
|
filter(customerId, query).orderByDesc(LastlegOrder::getCreatedAt).orderByDesc(LastlegOrder::getId));
|
||||||
|
List<LastlegOrder> orders = result.getRecords();
|
||||||
if (orders.isEmpty()) break;
|
if (orders.isEmpty()) break;
|
||||||
Map<String, String> containerNodes = containerNodes(orders);
|
Map<String, String> containerNodes = containerNodes(orders);
|
||||||
for (LastlegOrder order : orders) {
|
for (LastlegOrder order : orders) {
|
||||||
@@ -558,7 +559,8 @@ public class LastlegOrderService {
|
|||||||
output.write(line.getBytes(StandardCharsets.UTF_8));
|
output.write(line.getBytes(StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
output.flush();
|
output.flush();
|
||||||
if (orders.size() < batchSize) break;
|
// The pagination interceptor may cap the requested batch size.
|
||||||
|
if (!result.hasNext()) break;
|
||||||
page++;
|
page++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -414,6 +414,27 @@ class LastlegOrderServiceTest {
|
|||||||
assertEquals("处理中", LastlegOrderStatus.labelOf("PROCESSING"));
|
assertEquals("处理中", LastlegOrderStatus.labelOf("PROCESSING"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void exportContinuesAfterThePaginationInterceptorCapsTheBatchSize() {
|
||||||
|
when(orders.selectPage(any(), any())).thenAnswer(invocation -> {
|
||||||
|
com.baomidou.mybatisplus.extension.plugins.pagination.Page<LastlegOrder> page = invocation.getArgument(0);
|
||||||
|
page.setSize(500);
|
||||||
|
page.setTotal(501);
|
||||||
|
long start = (page.getCurrent() - 1) * page.getSize() + 1;
|
||||||
|
page.setRecords(java.util.stream.LongStream.rangeClosed(start, Math.min(start + 499, 501))
|
||||||
|
.mapToObj(id -> order(id, "100", "PENDING_ASSIGNMENT", null)).toList());
|
||||||
|
return page;
|
||||||
|
});
|
||||||
|
var query = new LastlegOrderRequests.Query(1L, 20L, null, null, null, null, null, null,
|
||||||
|
null, null, null, null, null, null, null, null, LastlegOrderRequests.SailingStage.BEFORE_DEPARTURE);
|
||||||
|
|
||||||
|
String csv = new String(service.exportCsv("100", query), StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
assertEquals(502, csv.lines().count());
|
||||||
|
assertTrue(csv.contains("\"LM-501\""));
|
||||||
|
verify(orders, org.mockito.Mockito.times(2)).selectPage(any(), any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void pageWarehouseFilterMatchesFrozenWarehouseName() {
|
void pageWarehouseFilterMatchesFrozenWarehouseName() {
|
||||||
assertWarehouseFilter("洛杉矶仓", "洛杉矶仓", true);
|
assertWarehouseFilter("洛杉矶仓", "洛杉矶仓", true);
|
||||||
|
|||||||
Reference in New Issue
Block a user