From 0743cb3eb2fd83df087b92f2d5178b7679876127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 12 Mar 2025 11:43:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A5=A8=E6=89=93=E5=8D=B0=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/service/order/print/PrinterImpl.java | 63 +++++++++++++------ 1 file changed, 44 insertions(+), 19 deletions(-) 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 b7918091..25f9a068 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 @@ -5,12 +5,14 @@ import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.czg.order.entity.OrderDetail; import lombok.Data; import lombok.experimental.Accessors; +import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; @@ -87,7 +89,7 @@ public interface PrinterImpl { price = addSpace(price, b2); num = addSpace(num, b3); total = addSpace(total, b4); - String otherStr = " %s%s %s".formatted(price, num, total); + String otherStr = " %s%s%s".formatted(price, num, total); int titleByteLen = StrUtil.bytes(title, CharsetUtil.CHARSET_GBK).length; StringBuilder sb = new StringBuilder(); @@ -171,7 +173,7 @@ public interface PrinterImpl { // data.append(""); // data.append("
"); // 18个空格 12 - data.append(getFormatLabel("品名 数量 小计", signLabelInfo.s)) + data.append(getFormatLabel("品名 数量 小计 ", signLabelInfo.s)) .append(signLabelInfo.br); // data.append("品名 数量 小计
"); data.append(getFormatLabel("--------------------------------", signLabelInfo.s)) @@ -180,7 +182,7 @@ public interface PrinterImpl { for (OrderDetail detail : detailList) { String number = detail.getNum().stripTrailingZeros().toPlainString(); String row = getRow(detail.getProductName(), "", number, - toPlainStr(detail.getPayAmount().stripTrailingZeros().toPlainString()), 23, 0, 5, 4); + toPlainStr(detail.getPayAmount().stripTrailingZeros().toPlainString()), 21, 0, 5, 6); data.append(row); if (StrUtil.isNotBlank(detail.getSkuName())) { data.append(getFormatLabel(StrUtil.format("规格:{}", detail.getSkuName()), signLabelInfo.s)) @@ -194,12 +196,15 @@ public interface PrinterImpl { if (!JSONUtil.isTypeJSONArray(proGroupInfo)) { continue; } - JSONArray subItems = JSONUtil.parseArray(proGroupInfo); - for (int i = 0; i < subItems.size(); i++) { - String proName = subItems.getJSONObject(i).getStr("proName"); - int qty = subItems.getJSONObject(i).getInt("number"); - String subRow = getRow(" - " + proName, "", qty + ".00", "0.00", 20, 0, 3, 6); - data.append(subRow); + JSONArray subItems = com.alibaba.fastjson2.JSONArray.parseArray(proGroupInfo); + for (Object subItem : subItems) { + JSONObject jsonObject = (JSONObject) subItem; + jsonObject.getJSONArray("goods").forEach(item -> { + String proName = ((JSONObject) item).getString("proName"); + String qty = ((JSONObject) item).getString("number"); + String subRow = getRow(" - " + proName, "", qty, "0.00", 21, 0, 5, 6); + data.append(subRow); + }); } } if (ObjectUtil.isNotNull(printInfoDTO.getDiscountAmount())) { @@ -319,12 +324,16 @@ public interface PrinterImpl { // builder.append("备注: ").append(note).append("
"); } if (!StrUtil.isBlank(proGroupInfo) && JSONUtil.isTypeJSONArray(proGroupInfo)) { - JSONArray subItems = JSONUtil.parseArray(proGroupInfo); - for (int i = 0; i < subItems.size(); i++) { - String proName = subItems.getJSONObject(i).getStr("proName"); - int qty = subItems.getJSONObject(i).getInt("number"); - builder.append(StrUtil.format("({}) x {}", proName, qty)) - .append(signLabelInfo.br); + JSONArray subItems = JSONArray.parseArray(proGroupInfo); + for (Object subItem : subItems) { + JSONObject jsonObject = (JSONObject) subItem; + jsonObject.getJSONArray("goods").forEach(item -> { + String proName = ((JSONObject) item).getString("proName"); + String qty = ((JSONObject) item).getString("number -> 1"); + builder.append(StrUtil.format("({}) x {}", proName, qty)) + .append(signLabelInfo.br); + }); + // builder.append("(").append(i + 1).append(")").append(proName).append(" x ").append(qty).append("
"); } } @@ -390,7 +399,11 @@ public interface PrinterImpl { * @return 填充之后的字符串 */ default String addSpace(String str, int size) { - return StrUtil.fillAfter(str, ' ', size); + int len = str.length(); + if (len < size) { + str = str + " ".repeat(size - len); + } + return str; } /** @@ -427,8 +440,20 @@ public interface PrinterImpl { * @return 添加间距的字符串 */ default String titleAddSpace(String str, int b1) { - int byteLen = StrUtil.bytes(str, CharsetUtil.CHARSET_GBK).length; - return StrUtil.fillAfter(str, ' ', b1 - byteLen); + int k = 0; + try { + k = str.getBytes("GBK").length; + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + str = str + " ".repeat(Math.max(0, b1 - k)); + return str; + } + + public static void main(String[] args) { + System.out.println("水煮肉片".length()); + System.out.println( StrUtil.repeat(' ', 8)); + System.out.println(StrUtil.fillAfter("水煮肉片", ' ', 21)); } /**