需求背景
物流渠道 US_AMAZON_GROUND_MLW 已对接上线,此前对接“运成”系统的 Amazon Shipping 渠道场景下,面单上已支持展示 SKU、数量及订单号 等业务信息,便于仓库拣货、复核、装箱及异常排查,实际操作中使用效果较好。
但目前西邮系统直连 Amazon Shipping 后,Amazon 官方返回的原始面单 不支持直接透出 SKU、数量及订单号信息。
结合现有业务需求,需参考此前“运成”Amazon渠道的展示方式,在 Amazon 官方面单空白区域 由系统进行二次加工补充打印,将订单相关业务信息绘制到面单上,以满足仓库实际操作需要。
需求描述
针对物流产品 US_AMAZON_GROUND_MLW,在系统获取 Amazon Shipping 官方面单后,支持对面单进行二次加工,在面单空白区域补充打印业务字段信息。
具体要求如下:
适用范围
适用于物流产品:US_AMAZON_GROUND_MLW补充展示内容
系统需在 Amazon 官方原始面单的空白区域,新增打印以下信息:
订单号
SKU
SKU 对应数量
如一个订单存在多个 SKU,则按可展示空间合理排版展示;避免影响原始面单核心信息识别及承运商扫码。
开发设计
标签模板ship_template新增亚马逊模板
INSERT INTO `westernfulfill`.`ship_template` (`st_id`, `st_name`, `st_path`, `st_status`, `warehouse_id`, `st_create_date`, `st_last_update`, `st_code`, `st_config_type`, `st_label_preview`, `agreemen_customer_code`, `agreemen_customer_name`, `return_unit`, `return_address`, `return_zip`, `return_phone`, `customer_code`, `customer_sign`, `customer_service_code`, `salespeople_code`, `customer_sign_en`, `show_location`, `province`, `city`, `user_id`, `st_order_waiting_status`, `st_custom_tracking_number`, `st_width`, `st_height`, `st_print_mode`, `st_rotate`, `st_print_select`, `cut_start_x`, `cut_start_y`, `cut_width`, `cut_length`, `text_start_x`, `text_start_y`, `text2_start_x`, `text2_start_y`, `size_ratio`, `text3_start_x`, `text3_start_y`) VALUES (26, 'AMAZON标签', '', 1, 0, '2026-03-12 18:09:23', '2026-03-12 18:09:23', 'AMAZON', 0, '', '', '', '', '', '', '', '', '', '', '', '', 0, NULL, NULL, 0, 0, 0, '100', '150', 'pdf', 0, '', NULL, NULL, NULL, NULL, 4, 265, 4, 256, 1.0000, NULL, NULL);亚马逊渠道保存标签时,新增工具方法:
private static boolean saveLabelPDF(String orderCode, PackageInfo packageInfo, ShipTemplate shipTemplate, String fileName, String filePath, String labelBase64, String sourceFilePath) { try { byte[] pdfBytes = Base64.decodeBase64(labelBase64); // 水印文字 String string1 = StringUtils.isNotBlank(packageInfo.getString1()) ? packageInfo.getString1() : ""; String string2 = StringUtils.isBlank(orderCode) ? null : orderCode; // 判断是否需要二次加工 if (shipTemplate != null && shipTemplate.getTextStartX() != null && shipTemplate.getTextStartY() != null) { pdfBytes = appendTextToPdf(pdfBytes, string1, shipTemplate.getTextStartX(), shipTemplate.getTextStartY(), string2, shipTemplate.getTextTwoStartX(), shipTemplate.getTextTwoStartY()); } // 存储文件 Path dir = Paths.get(sourceFilePath, filePath); Files.createDirectories(dir); Path file = dir.resolve(fileName + ".pdf"); Files.write(file, pdfBytes); return true; } catch (Exception e) { return false; } } private static byte[] appendTextToPdf(byte[] pdfBytes, String text1, Integer x1, Integer y1, String text2, Integer x2, Integer y2) throws IOException { try (PDDocument document = PDDocument.load(pdfBytes); ByteArrayOutputStream out = new ByteArrayOutputStream()) { PDPage page = document.getPage(0); try (PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true)) { contentStream.setFont(PDType1Font.HELVETICA_BOLD, 8); // 文本1 contentStream.beginText(); contentStream.newLineAtOffset(x1, y1); contentStream.showText(text1); contentStream.endText(); // 文本2 if (text2 != null && x2 != null && y2 != null) { contentStream.beginText(); contentStream.newLineAtOffset(x2, y2); contentStream.showText(text2); contentStream.endText(); } } document.save(out); return out.toByteArray(); } }保存标签时,改用上述方法即可

作者:黄天文 创建时间:2026-03-12 18:02
最后编辑:黄天文 更新时间:2026-04-17 09:34
最后编辑:黄天文 更新时间:2026-04-17 09:34