打印样式修改
This commit is contained in:
parent
e5da3ebb30
commit
12e67e3956
|
|
@ -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<>();
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue