小票打印bug修复
This commit is contained in:
@@ -243,7 +243,7 @@ public class FeieyunPrintUtil {
|
||||
//展示4列 b1代表名称列占用(14个字节) b2单价列(6个字节) b3数量列(3个字节) b4金额列(6个字节)-->这里的字节数可按自己需求自由改写,14+6+3+6再加上代码写的3个空格就是32了,58mm打印机一行总占32字节
|
||||
//String row = FeieYunUtil.getRow(productName, "",number, amount, 14, 6,3, 6)
|
||||
//展示3列 b1代表名称列占用(20个字节) b2单价列(0个字节) b3数量列(3个字节) b4金额列(6个字节)-->这里的字节数可按自己需求自由改写,20+0+3+6再加上代码写的3个空格就是32了,58mm打印机一行总占32字节
|
||||
String row = FeieYunUtil.getRow(productName, "", number, amount, 20, 0, 3, 6);
|
||||
String row = FeieYunUtil.getRow(productName, "", " "+number, amount, 20, 0, 4, 6);
|
||||
data.append(row);
|
||||
if (StrUtil.isNotBlank(detail.getSpec())) {
|
||||
data.append("规格:" + detail.getSpec() + "<BR>");
|
||||
@@ -259,7 +259,7 @@ public class FeieyunPrintUtil {
|
||||
for (int i = 0; i < subItems.size(); i++) {
|
||||
String proName = subItems.getJSONObject(i).getStr("proName");
|
||||
int qty = subItems.getJSONObject(i).getInt("number");
|
||||
String subRow = FeieYunUtil.getRow(" - "+proName, "", qty+"", "0.00", 20, 0, 3, 6);
|
||||
String subRow = FeieYunUtil.getRow(" - "+proName, "", qty+"", "0.00", 20, 0, 4, 6);
|
||||
data.append(subRow);
|
||||
}
|
||||
}
|
||||
@@ -276,9 +276,9 @@ public class FeieyunPrintUtil {
|
||||
} else {
|
||||
data.append(StrUtil.format("<B>应收:{}</B><BR>", t));
|
||||
}
|
||||
data.append("--------------------------------<BR>");
|
||||
if (ObjectUtil.isNotEmpty(detailPO.getPayType()) && ObjectUtil.isNotNull(detailPO.getPayType()) && detailPO.getPayType().equals("deposit")) {
|
||||
data.append(StrUtil.format("储值:{}<BR>", toPlainStr(detailPO.getReceiptsAmount())));
|
||||
data.append("--------------------------------<BR>");
|
||||
data.append(StrUtil.format("积分:{}<BR>", detailPO.getIntegral()));
|
||||
}
|
||||
data.append(StrUtil.format("余额:{}<BR>", toPlainStr(detailPO.getBalance())));
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.chaozhanggui.system.cashierservice.util;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
@@ -119,46 +118,29 @@ public class PrinterUtils {
|
||||
|
||||
|
||||
public static String getCashPrintData(OrderDetailPO detailPO, String type, String orderType) {
|
||||
|
||||
log.info("getCashPrintData detailPO:{},type:{},orderType:{}", JSONUtil.toJSONString(detailPO), type, orderType);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("<C><B>").append(detailPO.getMerchantName()).append("</B></C><BR><BR>");
|
||||
sb.append("<C><BOLD>").append(type).append("【").append(detailPO.getMasterId()).append("】</BOLD></C><BR><BR>");
|
||||
if (Objects.nonNull(detailPO.getOutNumber())) {
|
||||
sb.append("<CB><BOLD>").append(detailPO.getOutNumber()).append("</BOLD></CB><BR><BR>");
|
||||
}
|
||||
|
||||
sb.append("<S><L>订单号: ").append(detailPO.getOrderNo()).append(" </L></S><BR>");
|
||||
sb.append("<S><L>交易时间: ").append(detailPO.getTradeDate()).append(" </L></S><BR>");
|
||||
sb.append("<S><L>收银员: ").append(detailPO.getOperator()).append(" </L></S><BR><BR><BR>");
|
||||
char paddingCharacter = ' ';
|
||||
sb.append("<S>").append(String.format("%-15s", "品名").replace(' ', paddingCharacter)).append(String.format("%-4s", "数量").replace(' ', paddingCharacter)).append(String.format("%4s", "小计").replace(' ', paddingCharacter)).append("<S><BR>");
|
||||
sb.append("------------------------<BR>");
|
||||
StringBuffer data = new StringBuffer();
|
||||
data.append(StrUtil.format("<C><F>{}</F></C><BR>", detailPO.getMerchantName()));
|
||||
data.append("<BR>");
|
||||
data.append("<OUT:30>");
|
||||
data.append(StrUtil.format("<C><BOLD>{}【{}】</BOLD></C><BR>", type, detailPO.getMasterId()));
|
||||
//if (Objects.nonNull(detailPO.getOutNumber())) {
|
||||
// data.append(StrUtil.format("<CB><BOLD>{}</BOLD></CB>",detailPO.getOutNumber()));
|
||||
//}
|
||||
data.append("<OUT:30>");
|
||||
data.append("<BR>");
|
||||
data.append(StrUtil.format("<S>订单号:{}</S><BR>", detailPO.getOrderNo()));
|
||||
data.append(StrUtil.format("<S>交易时间:{}</S><BR>", detailPO.getTradeDate()));
|
||||
data.append(StrUtil.format("<S>收银员:{}</S><BR>", detailPO.getOperator()));
|
||||
data.append("<OUT:15>");
|
||||
data.append("<BR>");
|
||||
data.append("<S>品名 数量 小计</S><BR>");
|
||||
data.append("<S>--------------------------------</S><BR>");
|
||||
for (OrderDetailPO.Detail detail : detailPO.getDetailList()) {
|
||||
detail.setNumber(Convert.toBigDecimal(detail.getNumber()).setScale(0).toPlainString());
|
||||
if (detail.getProductName().length() > 4 && detail.getProductName().length() <= 10) {
|
||||
|
||||
int count = getProducrName(detail.getProductName());
|
||||
if (count <= 0) {
|
||||
int length = 15 - (detail.getProductName().length() - 4);
|
||||
sb.append("<S>").append(String.format("%-" + length + "s", detail.getProductName()).replace(' ', paddingCharacter)).append(String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter)).append(String.format("%8s", toPlainStr(detail.getAmount())).replace(' ', paddingCharacter)).append("</S><BR>");
|
||||
} else {
|
||||
int length = 15 + count - (detail.getProductName().length() - 4);
|
||||
sb.append("<S>").append(String.format("%-" + length + "s", detail.getProductName()).replace(' ', paddingCharacter)).append(String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter)).append(String.format("%8s", toPlainStr(detail.getAmount())).replace(' ', paddingCharacter)).append("</S><BR>");
|
||||
}
|
||||
|
||||
} else if (detail.getProductName().length() > 10) {
|
||||
|
||||
sb.append("<S>").append(detail.getProductName()).append("</S><BR>");
|
||||
sb.append("<S>").append(String.format("%20s", detail.getNumber()).replace(' ', paddingCharacter)).append(String.format("%11s", toPlainStr(detail.getAmount())).replace(' ', paddingCharacter)).append("</S><BR>");
|
||||
|
||||
} else {
|
||||
sb.append("<S>").append(String.format("%-15s", detail.getProductName()).replace(' ', paddingCharacter)).append(String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter)).append(String.format("%8s", toPlainStr(detail.getAmount())).replace(' ', paddingCharacter)).append("</S><BR>");
|
||||
}
|
||||
|
||||
if (detail.getSpec() != null && ObjectUtil.isNotEmpty(detail.getSpec())) {
|
||||
sb.append("<S>规格:").append(detail.getSpec()).append("</S><BR>");
|
||||
String row = YunXiangYinUtil.getRow(detail.getProductName(), "", " " + detail.getNumber(), toPlainStr(detail.getAmount()), 20, 0, 4, 6);
|
||||
data.append(row);
|
||||
if (StrUtil.isNotBlank(detail.getSpec())) {
|
||||
data.append("<S>规格:").append(detail.getSpec()).append("</S><BR>");
|
||||
}
|
||||
String proGroupInfo = detail.getProGroupInfo();
|
||||
if (StrUtil.isBlank(proGroupInfo)) {
|
||||
@@ -171,52 +153,38 @@ public class PrinterUtils {
|
||||
for (int i = 0; i < subItems.size(); i++) {
|
||||
String proName = subItems.getJSONObject(i).getStr("proName");
|
||||
int qty = subItems.getJSONObject(i).getInt("number");
|
||||
String subRow = YunXiangYinUtil.getRow(" - "+proName, "", qty+"", "0.00", 18, 0, 6, 4);
|
||||
sb.append(subRow);
|
||||
String subRow = YunXiangYinUtil.getRow(" - "+proName, "", " "+qty, "0.00", 20, 0, 4, 6);
|
||||
data.append(subRow);
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotNull(detailPO.getDiscountAmount()) && ObjectUtil.isNotNull(detailPO.getDiscountAdio())) {
|
||||
sb.append("------------------------<BR>");
|
||||
sb.append("<S>原价:".concat(String.format("%15s", toPlainStr(detailPO.getReceiptsAmount())).replace(' ', paddingCharacter)).concat("</S><BR>"));
|
||||
sb.append("<S>折扣: ".concat(String.format("%15s", "-".concat(toPlainStr(detailPO.getDiscountAmount()))).replace(' ', paddingCharacter)).concat("</S><BR>"));
|
||||
data.append("<S>--------------------------------</S><BR>");
|
||||
data.append(StrUtil.format("<S>原价:{}</S><BR>", toPlainStr(detailPO.getReceiptsAmount())));
|
||||
data.append(StrUtil.format("<S>折扣:-{}</S><BR>", toPlainStr(detailPO.getDiscountAmount())));
|
||||
}
|
||||
|
||||
|
||||
sb.append("------------------------<BR>");
|
||||
data.append("<S>--------------------------------</S><BR>");
|
||||
String t = "¥" + (ObjectUtil.isEmpty(detailPO.getDiscountAmount()) || ObjectUtil.isNull(detailPO.getDiscountAmount()) ? toPlainStr(detailPO.getReceiptsAmount()) : NumberUtil.sub(new BigDecimal(detailPO.getReceiptsAmount()), new BigDecimal(detailPO.getDiscountAmount())).setScale(2, RoundingMode.DOWN).toPlainString());
|
||||
t = String.format("%11s", t).replace(' ', paddingCharacter);
|
||||
if (orderType.equals("return")) {
|
||||
sb.append("<F>应退" + t + "</F><BR>");
|
||||
data.append("<F>应退" + t + "</F><BR>");
|
||||
data.append(StrUtil.format("<F>应收:{}</F><BR>", t));
|
||||
} else {
|
||||
sb.append("<F>实付" + t + "</F><BR>");
|
||||
|
||||
data.append(StrUtil.format("<F>应收:{}</F><BR>", t));
|
||||
}
|
||||
data.append("<S>--------------------------------</S><BR>");
|
||||
if (ObjectUtil.isNotEmpty(detailPO.getPayType()) && ObjectUtil.isNotNull(detailPO.getPayType()) && detailPO.getPayType().equals("deposit")) {
|
||||
sb.append("<S>储值¥" + toPlainStr(detailPO.getReceiptsAmount()) + " </S><BR>");
|
||||
sb.append("------------------------<BR>");
|
||||
sb.append("<S>积分:" + detailPO.getIntegral() + "</S><BR>");
|
||||
data.append(StrUtil.format("<S>储值:{}</S><BR>", toPlainStr(detailPO.getReceiptsAmount())));
|
||||
data.append(StrUtil.format("<S>积分:{}</S><BR>", detailPO.getIntegral()));
|
||||
}
|
||||
|
||||
sb.append("<S>余额:" + toPlainStr(detailPO.getBalance()) + "</S><BR>");
|
||||
sb.append("------------------------<BR>");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(detailPO.getRemark()) && ObjectUtil.isNotNull(detailPO.getRemark())) {
|
||||
sb.append("<L>备注:" + detailPO.getRemark() + "</L><BR>");
|
||||
}
|
||||
|
||||
|
||||
data.append(StrUtil.format("<S>余额:{}</S><BR>", toPlainStr(detailPO.getBalance())));
|
||||
data.append("<S>--------------------------------</S><BR>");
|
||||
data.append(StrUtil.format("<L><BOLD>备注:{}</BOLD></L><BR>", detailPO.getRemark()));
|
||||
if (Objects.nonNull(detailPO.getOutNumber())) {
|
||||
sb.append("<QR>".concat(detailPO.getOutNumber()).concat("</QR><BR>"));
|
||||
data.append("<QR>".concat(detailPO.getOutNumber()).concat("</QR><BR>"));
|
||||
}
|
||||
|
||||
|
||||
sb.append("<S>打印时间:" + DateUtils.getTime(new Date()) + "</S><BR>");
|
||||
|
||||
sb.append("<OUT:180>");
|
||||
sb.append("<PCUT>");
|
||||
return sb.toString();
|
||||
|
||||
data.append("<S>打印时间:" + DateUtils.getTime(new Date()) + "</S><BR>");
|
||||
data.append("<OUT:180>");
|
||||
data.append("<PCUT>");
|
||||
return data.toString();
|
||||
}
|
||||
|
||||
private static String toPlainStr(String str) {
|
||||
|
||||
@@ -30,10 +30,10 @@ public class YunXiangYinUtil {
|
||||
public static String getStringByEnter(int length, String string) throws Exception {
|
||||
for (int i = 1; i <= string.length(); i++) {
|
||||
if (string.substring(0, i).getBytes("GBK").length > length) {
|
||||
return "<S> " + string.substring(0, i - 1) + "</S><BR>" + getStringByEnter(length, string.substring(i - 1));
|
||||
return "<S>" + string.substring(0, i - 1) + "</S><BR>" + getStringByEnter(length, string.substring(i - 1));
|
||||
}
|
||||
}
|
||||
return "<S> " + string + "</S>";
|
||||
return "<S>" + string + "</S>";
|
||||
}
|
||||
|
||||
public static String addSpace(String str, int size) {
|
||||
@@ -128,7 +128,7 @@ public class YunXiangYinUtil {
|
||||
list = getStrList(title, b1 / 2);
|
||||
}
|
||||
String s0 = titleAddSpace(list.get(0), b1);
|
||||
title = "<S>" + s0 + otherStr + "</S><BR>";// 添加 单价 数量 总额
|
||||
title = "<S>"+s0 + otherStr + "</S><BR>";// 添加 单价 数量 总额
|
||||
String s = "";
|
||||
for (int k = 1; k < list.size(); k++) {
|
||||
s += list.get(k);
|
||||
|
||||
Reference in New Issue
Block a user