fix: paginate dropship pallet print details
This commit is contained in:
+29
-4
@@ -32,6 +32,8 @@ public class InboundCartonLabelPrintService {
|
||||
private static final BigDecimal PAGE_MM = new BigDecimal("100");
|
||||
private static final BigDecimal A4_WIDTH_MM = new BigDecimal("210");
|
||||
private static final BigDecimal A4_HEIGHT_MM = new BigDecimal("297");
|
||||
private static final int DROPSHIP_INBOUND_ROWS_PER_PAGE = 10;
|
||||
private static final int DROPSHIP_SKU_ROWS_PER_PAGE = 34;
|
||||
private static final List<String> SAFE_RESPONSE_HEADERS = List.of(
|
||||
HttpHeaders.CONTENT_DISPOSITION, HttpHeaders.CACHE_CONTROL, HttpHeaders.PRAGMA,
|
||||
"X-Print-Page-Count", "X-Request-Id", "X-Trace-Id");
|
||||
@@ -134,7 +136,7 @@ public class InboundCartonLabelPrintService {
|
||||
}
|
||||
Map<Long, String> customerNicknameCache = new HashMap<>();
|
||||
List<PrintPdfClient.DropshipPalletDocument> documents = pallets.stream()
|
||||
.map(pallet -> dropshipPalletDocument(pallet, customerNicknameCache)).toList();
|
||||
.flatMap(pallet -> dropshipPalletDocuments(pallet, customerNicknameCache).stream()).toList();
|
||||
String fileName = pallets.size() == 1
|
||||
? pallets.get(0).palletNo() + "-A4托盘信息单.pdf"
|
||||
: inboundCode + "-" + pallets.size() + "托-A4托盘信息单.pdf";
|
||||
@@ -148,7 +150,7 @@ public class InboundCartonLabelPrintService {
|
||||
}
|
||||
}
|
||||
|
||||
private PrintPdfClient.DropshipPalletDocument dropshipPalletDocument(
|
||||
private List<PrintPdfClient.DropshipPalletDocument> dropshipPalletDocuments(
|
||||
Pallet pallet, Map<Long, String> customerNicknameCache) {
|
||||
if (pallet == null || pallet.palletId() == null || !StringUtils.hasText(pallet.palletNo())) {
|
||||
throw new BizException(ResultCode.CONFLICT, "托盘码尚未生成,不能打印");
|
||||
@@ -172,8 +174,31 @@ public class InboundCartonLabelPrintService {
|
||||
.stream().map(row -> new PrintPdfClient.DropshipPalletSkuRow(
|
||||
row.getSkuCode(), number(row.getCartonCount()), number(row.getItemQuantity()),
|
||||
unitsPerCarton(row))).toList();
|
||||
return new PrintPdfClient.DropshipPalletDocument(
|
||||
pallet.palletNo(), destinationWarehouse, pallet.palletNo(), inboundRows, skuRows);
|
||||
int pageCount = Math.max(1, Math.max(pageCount(inboundRows.size(), DROPSHIP_INBOUND_ROWS_PER_PAGE),
|
||||
pageCount(skuRows.size(), DROPSHIP_SKU_ROWS_PER_PAGE)));
|
||||
List<PrintPdfClient.DropshipPalletDocument> documents = new ArrayList<>(pageCount);
|
||||
for (int page = 0; page < pageCount; page++) {
|
||||
documents.add(new PrintPdfClient.DropshipPalletDocument(
|
||||
pallet.palletNo(), destinationWarehouse, pallet.palletNo(),
|
||||
pageOrRepeat(inboundRows, page, DROPSHIP_INBOUND_ROWS_PER_PAGE),
|
||||
page(skuRows, page, DROPSHIP_SKU_ROWS_PER_PAGE)));
|
||||
}
|
||||
return List.copyOf(documents);
|
||||
}
|
||||
|
||||
private int pageCount(int size, int pageSize) {
|
||||
return size == 0 ? 0 : (size + pageSize - 1) / pageSize;
|
||||
}
|
||||
|
||||
private <T> List<T> page(List<T> rows, int page, int pageSize) {
|
||||
int from = Math.min(rows.size(), page * pageSize);
|
||||
int to = Math.min(rows.size(), from + pageSize);
|
||||
return rows.subList(from, to);
|
||||
}
|
||||
|
||||
private <T> List<T> pageOrRepeat(List<T> rows, int page, int pageSize) {
|
||||
List<T> selected = page(rows, page, pageSize);
|
||||
return selected.isEmpty() ? page(rows, 0, pageSize) : selected;
|
||||
}
|
||||
|
||||
private String unitsPerCarton(DropshipPalletizationMapper.PrintSkuRow row) {
|
||||
|
||||
Reference in New Issue
Block a user