diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java index 98d8602c..a07a9869 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java @@ -700,43 +700,36 @@ public class StructuralPackageOrderController extends BaseController { } /** - * 导出托盘标签图片(多个托盘合并为一张长图) + * 导出托盘标签图片ZIP(多个托盘分别生成图片并打包成ZIP) * @param id 订单id */ - @GetMapping(value = "exportTrayImage", produces = MediaType.IMAGE_PNG_VALUE) - public ResponseEntity exportTrayImage(@Valid @RequestParam @NotNull Long id) throws Exception { + @PostMapping(value = "exportTrayImageZip", produces = "application/zip") + public ResponseEntity exportTrayImageZip(@Valid @RequestParam @NotNull Long id) throws Exception { // 根据订单ID获取所有托盘 List trays = structuralPackageOrderTrayService.getList(id); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在"); - // 为每个托盘生成HTML内容,并拼接成一个完整的HTML - StringBuilder mergedHtml = new StringBuilder(); - mergedHtml.append(""); - - for (WmsStructuralPackageOrderTray tray : trays) { - DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(tray.getId()); - VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在"); - trayVO.setQrCode(QRCodeUtil.generateQRCodeBase64(trayVO.getTrayNo(), 200, 200)); - Map variables = new HashMap<>(); - variables.put("info", trayVO); - String html = ThymeleafUtil.generator("/template/qrcode/", "tray-label", ".html", variables); - // 提取body内容并追加 - int bodyStart = html.indexOf("", bodyStart) + 1; - int bodyEnd = html.lastIndexOf(""); - if (bodyStart != -1 && bodyEnd != -1) { - mergedHtml.append(html.substring(bodyEndStart, bodyEnd)); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ZipOutputStream zos = new ZipOutputStream(baos)) { + for (WmsStructuralPackageOrderTray tray : trays) { + DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(tray.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在"); + trayVO.setQrCode(QRCodeUtil.generateQRCodeBase64(trayVO.getTrayNo(), 200, 200)); + Map variables = new HashMap<>(); + variables.put("info", trayVO); + String html = ThymeleafUtil.generator("/template/qrcode/", "tray-label", ".html", variables); + ZipEntry entry = new ZipEntry(trayVO.getTrayNo() + ".png"); + zos.putNextEntry(entry); + byte[] imageBytes = HtmlToImageUtil.convertToPng(html, 600); + zos.write(imageBytes, 0, imageBytes.length); + zos.closeEntry(); } } - - mergedHtml.append(""); - - // 将合并后的HTML转换为图片 - byte[] imageBytes = HtmlToImageUtil.convertToPng(mergedHtml.toString(), 600); + byte[] zipBytes = baos.toByteArray(); HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.IMAGE_PNG); - headers.setContentLength(imageBytes.length); - return new ResponseEntity<>(imageBytes, headers, HttpStatus.OK); + headers.setContentType(MediaType.valueOf("application/zip")); + headers.setContentLength(zipBytes.length); + return new ResponseEntity<>(zipBytes, headers, HttpStatus.OK); } /**