From 265f1647b0ddbed419f514131c7466b7c8f5e524 Mon Sep 17 00:00:00 2001 From: Kroytz Date: Fri, 24 Jul 2026 16:45:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(print):=20=E5=AE=A2=E6=88=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=84=B1=E6=95=8F,=20=E6=96=B0=E5=A2=9E=E6=80=BB?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../print/xpyun/OrderReceiptBuilder.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/yshop-drink-boot3/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/print/xpyun/OrderReceiptBuilder.java b/yshop-drink-boot3/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/print/xpyun/OrderReceiptBuilder.java index 74a8058..12db603 100644 --- a/yshop-drink-boot3/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/print/xpyun/OrderReceiptBuilder.java +++ b/yshop-drink-boot3/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/print/xpyun/OrderReceiptBuilder.java @@ -33,6 +33,7 @@ public class OrderReceiptBuilder { sb.append("商品").append(pad("数量", 6)).append(pad("单价", 6)).append("
"); sb.append(LINE); + int totalPieces = 0; if (items != null) { for (StoreOrderCartInfoDO item : items) { String name = nullToEmpty(item.getTitle()); @@ -41,6 +42,7 @@ public class OrderReceiptBuilder { } sb.append(name).append("
"); Integer number = item.getNumber() == null ? 0 : item.getNumber(); + totalPieces += number; BigDecimal price = item.getPrice() == null ? BigDecimal.ZERO : item.getPrice(); sb.append(" x").append(number) .append(" ").append(price.toPlainString()) @@ -48,6 +50,8 @@ public class OrderReceiptBuilder { } } sb.append(LINE); + sb.append("总计:").append(totalPieces).append("件
"); + sb.append(LINE); if (order.getCouponPrice() != null && order.getCouponPrice().compareTo(BigDecimal.ZERO) > 0) { sb.append("优惠:-").append(order.getCouponPrice().toPlainString()).append("
"); @@ -62,13 +66,13 @@ public class OrderReceiptBuilder { sb.append(LINE); if (StrUtil.isNotBlank(order.getRealName())) { - sb.append("姓名:").append(order.getRealName()).append("
"); + sb.append("顾客姓名:").append(maskName(order.getRealName())).append("
"); } if (StrUtil.isNotBlank(order.getUserPhone())) { - sb.append("电话:").append(order.getUserPhone()).append("
"); + sb.append("顾客电话:").append(maskPhone(order.getUserPhone())).append("
"); } - if (takeout && StrUtil.isNotBlank(order.getUserAddress())) { - sb.append("地址:").append(order.getUserAddress()).append("
"); + if (takeout) { + sb.append("[隐私保护]顾客地址已隐藏,您可登录配送APP查看").append("
"); } if (order.getPayTime() != null) { sb.append("支付时间:").append(order.getPayTime().format(PAY_TIME_FMT)).append("
"); @@ -85,6 +89,27 @@ public class OrderReceiptBuilder { return s == null ? "" : s; } + /** 只保留姓氏,其余用 * 代替,如 张三 -> 张* */ + private static String maskName(String name) { + String trimmed = name.trim(); + if (trimmed.isEmpty()) { + return trimmed; + } + if (trimmed.length() == 1) { + return trimmed; + } + return trimmed.charAt(0) + "*".repeat(trimmed.length() - 1); + } + + /** 手机号保留前三位和后四位,如 13812345678 -> 138****5678 */ + private static String maskPhone(String phone) { + String trimmed = phone.trim(); + if (trimmed.length() < 7) { + return trimmed.charAt(0) + "****"; + } + return trimmed.substring(0, 3) + "****" + trimmed.substring(trimmed.length() - 4); + } + private static String pad(String text, int width) { if (text == null) { text = "";