diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java index 70561523a..16181531c 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java @@ -662,6 +662,7 @@ public abstract class PrinterHandler { .setOperator(operator) .setReturn(true) .setPrintTitle(printTitle); + printInfoDTO.setSeatNum(orderInfo.getSeatNum() == null ? "" : orderInfo.getSeatNum().toString()); printInfoDTO.setPickupNum(getTableAreaAndName(orderInfo.getShopId(), orderInfo.getTableCode(), orderInfo.getTableName())); printInfoDTO.setRefundAmount(refundAmount); printInfoDTO.setRefundReason(refundReason); @@ -707,7 +708,8 @@ public abstract class PrinterHandler { originalAmount = originalAmount.add((orderDetail.getNum().subtract(orderDetail.getReturnNum()).subtract(orderDetail.getRefundNum())).multiply(orderDetail.getPrice())); } } - printInfoDTO.setOriginalAmount((originalAmount.add(orderInfo.getSeatAmount()).add(orderInfo.getPackFee())).toPlainString()); + printInfoDTO.setOriginalAmount((originalAmount.add(orderInfo.getSeatAmount()).add(orderInfo.getPackFee())) + .setScale(2, RoundingMode.HALF_UP).toPlainString()); printInfoDTO.setPayAmount(originalAmount.add(orderInfo.getSeatAmount()).add(orderInfo.getPackFee()) .subtract(orderInfo.getDiscountAllAmount()).setScale(2, RoundingMode.HALF_UP).toPlainString()); if (orderInfo.getPackFee().compareTo(BigDecimal.ZERO) > 0) { @@ -754,11 +756,9 @@ public abstract class PrinterHandler { } else { printInfoDTO.setOperator(""); } + printInfoDTO.setSeatNum(orderInfo.getSeatNum() == null ? "" : orderInfo.getSeatNum().toString()); if (orderInfo.getSeatNum() != null && orderInfo.getSeatAmount().compareTo(BigDecimal.ZERO) > 0) { - printInfoDTO.setSeatNum(orderInfo.getSeatNum() + ""); printInfoDTO.setSeatAmount(orderInfo.getSeatAmount().divide(BigDecimal.valueOf(orderInfo.getSeatNum()), 2, RoundingMode.DOWN).toPlainString()); - } else { - printInfoDTO.setSeatNum(""); } if ("结算单".equals(printTitle)) { if (StrUtil.isNotBlank(orderInfo.getPayType())) { diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java index b7f62eb9b..0fecb7ae1 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java @@ -266,7 +266,7 @@ public interface PrinterImpl { data.append(getFormatLabel(formatItemLine("品名", "单价", "数量", 18, 9), signLabelInfo.s)).append(signLabelInfo.br); for (OrderDetail detail : detailList) { - String number = detail.getNum().stripTrailingZeros().toPlainString(); + String number = detail.getNum().subtract(detail.getReturnNum()).stripTrailingZeros().toPlainString(); String unitPrice = toPlainStr(detail.getUnitPrice().stripTrailingZeros().toPlainString()); data.append(getFormatLabel(formatItemLine(detail.getProductName(), unitPrice, number, 18, 7), signLabelInfo.s)).append(signLabelInfo.br); @@ -310,12 +310,9 @@ public interface PrinterImpl { data.append(getFormatLabel("--------------------------------", signLabelInfo.s)).append(signLabelInfo.br); data.append(getFormatLabel(leftRightAlign("应付:", printInfoDTO.getPayAmount(), 16), signLabelInfo.f)).append(signLabelInfo.br); - if (StrUtil.isNotBlank(printInfoDTO.getPrintTitle())) { + if ("结算单".equals(printInfoDTO.getPrintTitle())) { data.append(getFormatLabel("--------------------------------", signLabelInfo.s)).append(signLabelInfo.br); data.append(getFormatLabel(leftRightAlign("已付:", printInfoDTO.getPayAmount(), 16), signLabelInfo.f)).append(signLabelInfo.br); - - data.append(signLabelInfo.br); - data.append(signLabelInfo.br); data.append(getFormatLabel(leftRightAlign("支付方式:", printInfoDTO.getPayType(), 32), signLabelInfo.s)).append(signLabelInfo.br); } @@ -350,7 +347,7 @@ public interface PrinterImpl { data.append(getFormatLabel(formatItemLine("品名", "单价", "数量", 18, 9), signLabelInfo.s)).append(signLabelInfo.br); for (OrderDetail detail : detailList) { - String number = detail.getNum().stripTrailingZeros().toPlainString(); + String number = detail.getNum().subtract(detail.getReturnNum()).stripTrailingZeros().toPlainString(); String unitPrice = toPlainStr(detail.getUnitPrice().stripTrailingZeros().toPlainString()); data.append(getFormatLabel(formatItemLine(detail.getProductName(), unitPrice, number, 18, 7), signLabelInfo.s)).append(signLabelInfo.br); @@ -425,7 +422,7 @@ public interface PrinterImpl { if ("退款单".equals(printInfoDTO.getPrintTitle())) { amount = detail.getReturnAmount().stripTrailingZeros().toPlainString(); } - data.append(getFormatLabel(formatItemLine(detail.getProductName(), amount, number, 18, 7), signLabelInfo.s)).append(signLabelInfo.br); + data.append(getFormatLabel(formatItemLine(detail.getProductName(), number, amount, 18, 7), signLabelInfo.s)).append(signLabelInfo.br); if (StrUtil.isNotBlank(detail.getSkuName())) { data.append(getFormatLabel(StrUtil.format("规格:{}", detail.getSkuName()), signLabelInfo.s)) .append(signLabelInfo.br); @@ -454,10 +451,10 @@ public interface PrinterImpl { data.append(getFormatLabel(leftRightAlign("退款总计:", printInfoDTO.getRefundAmount(), 16), signLabelInfo.f)).append(signLabelInfo.br); data.append(getFormatLabel(StrUtil.format("退款方式:{}", toPlainStr(printInfoDTO.getRefundType())), signLabelInfo.s)) .append(signLabelInfo.br); - data.append(getFormatLabel(StrUtil.format("退款原因:{}", printInfoDTO.getRefundReason()), signLabelInfo.l, signLabelInfo.bold)) + data.append(getFormatLabel(StrUtil.format("退款原因:{}", printInfoDTO.getRefundReason()), signLabelInfo.s)) .append(signLabelInfo.br); } else { - data.append(getFormatLabel(StrUtil.format("退菜原因:{}", printInfoDTO.getRefundReason()), signLabelInfo.l, signLabelInfo.bold)) + data.append(getFormatLabel(StrUtil.format("退菜原因:{}", printInfoDTO.getRefundReason()), signLabelInfo.s)) .append(signLabelInfo.br); } data.append(getFormatLabel("--------------------------------", signLabelInfo.s)) @@ -751,6 +748,9 @@ public interface PrinterImpl { key2 = Objects.toString(key2, ""); key3 = Objects.toString(key3, ""); + // 👉 核心:key1 超长截取 + 加 ... + key1 = truncateWithEllipsis(key1, key1Width); + int w1 = getStringWidth(key1); int w2 = getStringWidth(key2); int w3 = getStringWidth(key3); @@ -768,4 +768,29 @@ public interface PrinterImpl { + " ".repeat(space3) + key3; } + + private String truncateWithEllipsis(String text, int maxWidth) { + if (maxWidth <= 0) return ""; + if (getStringWidth(text) <= maxWidth) { + return text; + } + + StringBuilder sb = new StringBuilder(); + int currentWidth = 0; + int ellipsisWidth = getStringWidth("..."); + + for (char c : text.toCharArray()) { + int charWidth = (c > 127) ? 2 : 1; + + // 剩下的宽度必须能放下 当前字符 + ... + if (currentWidth + charWidth + ellipsisWidth > maxWidth) { + break; + } + + sb.append(c); + currentWidth += charWidth; + } + + return sb + "..."; // 超长自动加... + } }