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 = "";