打印样式修改

This commit is contained in:
Tankaikai 2024-10-15 16:34:37 +08:00
parent e5da3ebb30
commit 12e67e3956
2 changed files with 61 additions and 61 deletions

View File

@ -2,6 +2,7 @@ package com.chaozhanggui.system.cashierservice.util;
import cn.hutool.core.text.UnicodeUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
@ -21,6 +22,7 @@ import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
public class FeieyunPrintUtil {
@ -120,10 +122,10 @@ public class FeieyunPrintUtil {
builder.append("<L>时间: " + date + " </L><BR><BR><BR>");
remark = StrUtil.emptyToDefault(remark, "");
if (productName.length() > 4 || remark.length() > 4) {
builder.append("<B><BOLD>" + productName + " x " + number + "</BOLD></B><BR><BR>");
builder.append("<B><BOLD>" + productName + " x " + number + "</BOLD></B><BR><BR>");
builder.append("<B><BOLD>" + remark + " </BOLD></B><BR>");
} else {
builder.append("<B><BOLD>" + productName + " x " + number + "</BOLD></B><BR><BR>");
builder.append("<B><BOLD>" + productName + " x " + number + "</BOLD></B><BR><BR>");
builder.append("<B><BOLD>" + remark + " </BOLD></B><BR>");
}
@ -198,67 +200,63 @@ public class FeieyunPrintUtil {
}
public static String[] getCashPrintData(OrderDetailPO detailPO, String sn, String type, String orderType) {
StringBuilder sb = new StringBuilder();
sb.append("<CB>" + detailPO.getMerchantName() + "</CB><BR><BR>");
sb.append("<C><BOLD>" + type + "" + detailPO.getMasterId() + "】</BOLD></C><BR><BR>");
sb.append("订单号: " + detailPO.getOrderNo() + " <BR>");
sb.append("交易时间: " + detailPO.getTradeDate() + " <BR>");
sb.append("收银员: " + detailPO.getOperator() + " <BR><BR><BR>");
sb.append("------------------------<BR>");
char paddingCharacter = ' ';
sb.append("<S>" + String.format("%-15s", "品名").replace(' ', paddingCharacter) + String.format("%-4s", "数量").replace(' ', paddingCharacter) + String.format("%4s", "小计").replace(' ', paddingCharacter) + "</S><BR>");
public static String buildPrintContent(OrderDetailPO detailPO, String type, String orderType) {
StringBuffer data = new StringBuffer();
data.append(StrUtil.format("<CB>{}</CB><BR>", detailPO.getMerchantName()));
data.append("<BR>");
data.append(StrUtil.format("<C><BOLD>{}【{}】</C></BOLD><BR>", type, detailPO.getMasterId()));
data.append("<BR>");
data.append(StrUtil.format("订单号:{}<BR>", detailPO.getOrderNo()));
data.append(StrUtil.format("交易时间:{}<BR>", detailPO.getTradeDate()));
data.append(StrUtil.format("收银员:{}<BR>", detailPO.getOperator()));
data.append("<BR>");
data.append("品名 数量 小计<BR>");
data.append("--------------------------------<BR>");
for (OrderDetailPO.Detail detail : detailPO.getDetailList()) {
if (detail.getProductName().length() > 4) {
int count = getProducrName(detail.getProductName());
if (count <= 0) {
int length = 15 - (detail.getProductName().length() - 4);
sb.append("" + String.format("%-" + length + "s", detail.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%8s", detail.getAmount()).replace(' ', paddingCharacter) + "<BR>");
} else {
int length = 15 + count - (detail.getProductName().length() - 4);
sb.append("" + String.format("%-" + length + "s", detail.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%8s", detail.getAmount()).replace(' ', paddingCharacter) + "<BR>");
}
} else {
sb.append("" + String.format("%-15s", detail.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%8s", detail.getAmount()).replace(' ', paddingCharacter) + "<BR>");
String productName = detail.getProductName();
String number = detail.getNumber();
String amount = detail.getAmount();
//58mm的机器,一行打印16个汉字,32个字母;80mm的机器,一行打印24个汉字,48个字母
//展示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);
data.append(row);
if (StrUtil.isBlank(detail.getSpec())) {
continue;
}
if (detail.getSpec() != null && ObjectUtil.isNotEmpty(detail.getSpec())) {
sb.append("规格:" + detail.getSpec() + "<BR>");
}
sb.append("<BR>");
data.append("规格:" + detail.getSpec() + "<BR>");
}
sb.append("------------------------<BR>");
String t = "" + detailPO.getReceiptsAmount();
t = String.format("%11s", t).replace(' ', paddingCharacter);
if (ObjectUtil.isNotNull(detailPO.getDiscountAmount()) && ObjectUtil.isNotNull(detailPO.getDiscountAdio())) {
data.append("--------------------------------<BR>");
data.append(StrUtil.format("原价:{}<BR>", detailPO.getReceiptsAmount()));
data.append(StrUtil.format("折扣:-{}<BR>", NumberUtil.null2Zero(new BigDecimal(detailPO.getDiscountAmount())).toPlainString()));
}
data.append("--------------------------------<BR>");
String t = "" + (ObjectUtil.isEmpty(detailPO.getDiscountAmount()) || ObjectUtil.isNull(detailPO.getDiscountAmount()) ? detailPO.getReceiptsAmount() : new BigDecimal(detailPO.getReceiptsAmount()).subtract(new BigDecimal(detailPO.getDiscountAmount())).toPlainString());
t = String.format("%11s", t).replace(' ', ' ');
if (orderType.equals("return")) {
sb.append("<B>应退" + t + "</B><BR>");
data.append(StrUtil.format("应退:{}<BR>", t));
} else {
sb.append("<B>应收" + t + "</B><BR>");
data.append(StrUtil.format("应收:{}<BR>", t));
}
if (ObjectUtil.isNotEmpty(detailPO.getPayType()) && ObjectUtil.isNotNull(detailPO.getPayType()) && detailPO.getPayType().equals("deposit")) {
sb.append("储值¥" + detailPO.getReceiptsAmount() + " <BR>");
sb.append("------------------------<BR>");
sb.append("积分:" + detailPO.getIntegral() + "<BR>");
data.append("--------------------------------<BR>");
data.append(StrUtil.format("储值:{}<BR>", detailPO.getReceiptsAmount()));
data.append(StrUtil.format("积分:{}<BR>", detailPO.getIntegral()));
}
sb.append("余额:" + detailPO.getBalance() + "<BR>");
sb.append("------------------------<BR>");
data.append(StrUtil.format("余额:{}<BR>", detailPO.getBalance()));
data.append("--------------------------------<BR>");
if (ObjectUtil.isNotEmpty(detailPO.getRemark()) && ObjectUtil.isNotNull(detailPO.getRemark())) {
sb.append("<L>备注:" + detailPO.getRemark() + "</L><BR>");
data.append(StrUtil.format("<L><BOLD>备注:{}</BOLD></L><BR>", detailPO.getRemark()));
}
data.append("打印时间:" + DateUtils.getTime(new Date()) + "<BR>");
data.append("<CUT>");
return data.toString();
}
sb.append("打印时间:" + DateUtils.getTime(new Date()) + "<BR>");
sb.append("<CUT>");
String content = sb.toString();
public static String[] getCashPrintData(OrderDetailPO detailPO, String sn, String type, String orderType) {
String content = buildPrintContent(detailPO, type, orderType);
//通过POST请求发送打印信息到服务器
RequestConfig requestConfig = RequestConfig.custom()
@ -342,10 +340,11 @@ public class FeieyunPrintUtil {
/**
* 检查飞鹅打印机是否在线
*
* @param sn 设备编号
* @return 在线工作状态正常/离线/未知错误
*/
public static String checkOnline(String sn){
public static String checkOnline(String sn) {
String STIME = String.valueOf(System.currentTimeMillis() / 1000);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("user", USER);
@ -360,7 +359,7 @@ public class FeieyunPrintUtil {
//成功 离线 {"msg":"ok","ret":0,"data":"离线。","serverExecutedTime":7}
JSONObject json = JSONUtil.parseObj(UnicodeUtil.toString(resp));
msg = json.getStr("data");
}catch (Exception e){
} catch (Exception e) {
msg = "未知错误";
}
return msg;
@ -368,10 +367,11 @@ public class FeieyunPrintUtil {
/**
* 检查飞鹅打印机打印任务是否已打印
*
* @param printOrderId 打印订单编号
* @return null-未知错误true-已打印false-未打印
*/
public static Boolean checkPrintStatus(String printOrderId){
public static Boolean checkPrintStatus(String printOrderId) {
String STIME = String.valueOf(System.currentTimeMillis() / 1000);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("user", USER);
@ -386,7 +386,7 @@ public class FeieyunPrintUtil {
//失败 {"msg":"ok","ret":0,"data":false,"serverExecutedTime":4}
JSONObject json = JSONUtil.parseObj(UnicodeUtil.toString(resp));
ret = json.getBool("data");
}catch (Exception e){
} catch (Exception e) {
ret = null;
}
return ret;
@ -399,7 +399,7 @@ public class FeieyunPrintUtil {
testPrint3();
}
public static void testPrint(){
public static void testPrint() {
String STIME = String.valueOf(System.currentTimeMillis() / 1000);
String content = buildPrintContent("123456789", "2024-10-10 18:11:11", "澳洲大龙虾", 1, "一只吃爽爽");
Map<String, Object> paramMap = new HashMap<>();
@ -422,7 +422,7 @@ public class FeieyunPrintUtil {
/**
* 查询打印机状态
*/
public static void testPrint2(){
public static void testPrint2() {
String STIME = String.valueOf(System.currentTimeMillis() / 1000);
String content = buildPrintContent("123456789", "2024-10-10 18:11:11", "澳洲大龙虾", 1, "一只吃爽爽");
Map<String, Object> paramMap = new HashMap<>();
@ -442,7 +442,7 @@ public class FeieyunPrintUtil {
/**
* 查询打印任务是否打印成功
*/
public static void testPrint3(){
public static void testPrint3() {
String STIME = String.valueOf(System.currentTimeMillis() / 1000);
String content = buildPrintContent("123456789", "2024-10-10 18:11:11", "澳洲大龙虾", 1, "一只吃爽爽");
Map<String, Object> paramMap = new HashMap<>();

View File

@ -120,9 +120,9 @@ public class PrinterUtils {
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>");
sb.append("------------------------<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("<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>");
for (OrderDetailPO.Detail detail : detailPO.getDetailList()) {
if (detail.getProductName().length() > 4 && detail.getProductName().length() <= 10) {