diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java index a193926..a9df198 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java @@ -31,6 +31,7 @@ public class PrinterUtils { /** * 获取TOKEN值 + * * @param timestamp 时间戳,13位 * @param requestId 请求ID,自定义 * @return @@ -51,10 +52,10 @@ public class PrinterUtils { token += key + value; encode += key + "=" + value + "&"; } - System.out.println("token"+token); + System.out.println("token" + token); Map finalMap = new HashMap<>(); - finalMap.put("ENCODE",encode); - System.out.println("+++++++++++++++"+token + APP_SECRET); + finalMap.put("ENCODE", encode); + System.out.println("+++++++++++++++" + token + APP_SECRET); finalMap.put("TOKEN", MD5Util.encrypt(token + APP_SECRET).toUpperCase()); return finalMap; } @@ -62,6 +63,7 @@ public class PrinterUtils { /** * 厨房打印机 + * * @param pickupNumber * @param date * @param productName @@ -69,23 +71,23 @@ public class PrinterUtils { * @param remark * @return */ - public static String getPrintData(String type,String pickupNumber,String date,String productName,Integer number,String remark) { + public static String getPrintData(String type, String pickupNumber, String date, String productName, Integer number, String remark) { StringBuilder builder = new StringBuilder(); - if("return".equals(type)){ - builder.append(""+pickupNumber+"【退】

"); - }else { - builder.append(""+pickupNumber+"

"); + if ("return".equals(type)) { + builder.append("" + pickupNumber + "【退】

"); + } else { + builder.append("" + pickupNumber + "

"); } - builder.append("时间: "+date+"


"); + builder.append("时间: " + date + "


"); - if(productName.length()>4||remark.length()>4){ - builder.append(""+productName+" "+number+"
"); - builder.append(""+remark+"
"); - }else { - builder.append(""+productName+" "+number+"
"); - builder.append(""+remark+"
"); + if (productName.length() > 4 || remark.length() > 4) { + builder.append("" + productName + " " + number + "
"); + builder.append("" + remark + "
"); + } else { + builder.append("" + productName + " " + number + "
"); + builder.append("" + remark + "
"); } builder.append(""); builder.append(""); @@ -94,66 +96,66 @@ public class PrinterUtils { } - public static String getCashPrintData(OrderDetailPO detailPO,String type,String orderType){ + public static String getCashPrintData(OrderDetailPO detailPO, String type, String orderType) { StringBuilder sb = new StringBuilder(); - sb.append(""+detailPO.getMerchantName()+"

"); - sb.append(""+type+"【"+detailPO.getMasterId()+"】

"); - if(Objects.nonNull(detailPO.getOutNumber())){ - sb.append(""+detailPO.getOutNumber()+"

"); + sb.append("" + detailPO.getMerchantName() + "

"); + sb.append("" + type + "【" + detailPO.getMasterId() + "】

"); + if (Objects.nonNull(detailPO.getOutNumber())) { + sb.append("" + detailPO.getOutNumber() + "

"); } - sb.append("订单号: "+detailPO.getOrderNo()+"
"); - sb.append("交易时间: "+detailPO.getTradeDate()+"
"); - sb.append("收银员: "+detailPO.getOperator()+"


"); + sb.append("订单号: " + detailPO.getOrderNo() + "
"); + sb.append("交易时间: " + detailPO.getTradeDate() + "
"); + sb.append("收银员: " + detailPO.getOperator() + "


"); sb.append("------------------------
"); char paddingCharacter = ' '; - sb.append(""+String.format("%-15s","品名").replace(' ', paddingCharacter)+String.format("%-4s","数量").replace(' ', paddingCharacter)+String.format("%4s","小计").replace(' ', paddingCharacter)+"
"); + sb.append("" + String.format("%-15s", "品名").replace(' ', paddingCharacter) + String.format("%-4s", "数量").replace(' ', paddingCharacter) + String.format("%4s", "小计").replace(' ', paddingCharacter) + "
"); for (OrderDetailPO.Detail detail : detailPO.getDetailList()) { - if(detail.getProductName().length()>8){ - sb.append(""+detail.getProductName()+"
"); - sb.append(""+String.format("%16s",detail.getNumber()).replace(' ', paddingCharacter)+String.format("%10s",detail.getAmount()).replace(' ', paddingCharacter)+"
"); - }else { - int tt=16-detail.getProductName().length(); - sb.append(""+String.format("%-"+tt+"s",detail.getProductName()).replace(' ', paddingCharacter)+String.format("%-4s",detail.getNumber()).replace(' ', paddingCharacter)+String.format("%6s",detail.getAmount()).replace(' ', paddingCharacter)+"
"); + if (detail.getProductName().length() > 8) { + sb.append("" + detail.getProductName() + "
"); + sb.append("" + String.format("%16s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%10s", detail.getAmount()).replace(' ', paddingCharacter) + "
"); + } else { + int tt = 16 - detail.getProductName().length(); + sb.append("" + String.format("%-" + tt + "s", detail.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%6s", detail.getAmount()).replace(' ', paddingCharacter) + "
"); } - if(detail.getSpec()!=null&& ObjectUtil.isNotEmpty(detail.getSpec())){ - sb.append("规格:"+detail.getSpec()+"
"); + if (detail.getSpec() != null && ObjectUtil.isNotEmpty(detail.getSpec())) { + sb.append("规格:" + detail.getSpec() + "
"); } sb.append("
"); } sb.append("------------------------
"); - String t="¥"+detailPO.getReceiptsAmount(); - t=String.format("%11s",t).replace(' ', paddingCharacter); - if(orderType.equals("return")){ - sb.append("应退"+t+"
"); - }else { - sb.append("应收"+t+"
"); + String t = "¥" + detailPO.getReceiptsAmount(); + t = String.format("%11s", t).replace(' ', paddingCharacter); + if (orderType.equals("return")) { + sb.append("应退" + t + "
"); + } else { + sb.append("应收" + t + "
"); } - if(ObjectUtil.isNotEmpty(detailPO.getPayType())&&ObjectUtil.isNotNull(detailPO.getPayType())&&detailPO.getPayType().equals("deposit")){ - sb.append("储值¥"+detailPO.getReceiptsAmount()+"
"); + if (ObjectUtil.isNotEmpty(detailPO.getPayType()) && ObjectUtil.isNotNull(detailPO.getPayType()) && detailPO.getPayType().equals("deposit")) { + sb.append("储值¥" + detailPO.getReceiptsAmount() + "
"); sb.append("------------------------
"); - sb.append("积分:"+detailPO.getIntegral()+"
"); + sb.append("积分:" + detailPO.getIntegral() + "
"); } - sb.append("余额:"+detailPO.getBalance()+"
"); + sb.append("余额:" + detailPO.getBalance() + "
"); sb.append("------------------------
"); - if(ObjectUtil.isNotEmpty(detailPO.getRemark())&&ObjectUtil.isNotNull(detailPO.getRemark())){ - sb.append("备注:"+detailPO.getRemark()+"
"); + if (ObjectUtil.isNotEmpty(detailPO.getRemark()) && ObjectUtil.isNotNull(detailPO.getRemark())) { + sb.append("备注:" + detailPO.getRemark() + "
"); } - if(Objects.nonNull(detailPO.getOutNumber())){ + if (Objects.nonNull(detailPO.getOutNumber())) { sb.append("".concat(detailPO.getOutNumber()).concat("
")); } - sb.append("打印时间:"+DateUtils.getTime(new Date())+"
"); + sb.append("打印时间:" + DateUtils.getTime(new Date()) + "
"); sb.append(""); sb.append(""); @@ -162,87 +164,91 @@ public class PrinterUtils { } - public static String handoverprintData(HandoverInfo handoverInfo){ + public static String handoverprintData(HandoverInfo handoverInfo) { StringBuilder sb = new StringBuilder(); - sb.append(""+handoverInfo.getMerchantName()+"

"); + sb.append("" + handoverInfo.getMerchantName() + "

"); sb.append("

"); sb.append("交班小票
"); - sb.append("当班时间: "+handoverInfo.getStartTime()+"
"); - sb.append("交班时间: "+handoverInfo.getEndTime()+"
"); - sb.append("收银员: "+handoverInfo.getStaff()+"
"); - sb.append("当班收入: "+handoverInfo.getTotalAmount()+"
"); - if(ObjectUtil.isNotEmpty(handoverInfo.getPayInfos())&&handoverInfo.getPayInfos().size()>0){ + sb.append("当班时间: " + handoverInfo.getStartTime() + "
"); + sb.append("交班时间: " + handoverInfo.getEndTime() + "
"); + sb.append("收银员: " + handoverInfo.getStaff() + "
"); + sb.append("当班收入: " + handoverInfo.getTotalAmount() + "
"); + if (ObjectUtil.isNotEmpty(handoverInfo.getPayInfos()) && handoverInfo.getPayInfos().size() > 0) { for (HandoverInfo.PayInfo payInfo : handoverInfo.getPayInfos()) { - sb.append(" "+payInfo.getPayType()+": "+payInfo.getAmount()+"
"); + sb.append(" " + payInfo.getPayType() + ": " + payInfo.getAmount() + "
"); } } - if(ObjectUtil.isNotEmpty(handoverInfo.getMemberData())&&handoverInfo.getMemberData().size()>0){ + if (ObjectUtil.isNotEmpty(handoverInfo.getMemberData()) && handoverInfo.getMemberData().size() > 0) { sb.append("会员数据
"); for (HandoverInfo.MemberData memberDatum : handoverInfo.getMemberData()) { - sb.append(" "+memberDatum.getDeposit()+": "+memberDatum.getAmount()+"
"); + sb.append(" " + memberDatum.getDeposit() + ": " + memberDatum.getAmount() + "
"); } } - if(ObjectUtil.isNotEmpty(handoverInfo.getProductCategories())&&handoverInfo.getProductCategories().size()>0){ + if (ObjectUtil.isNotEmpty(handoverInfo.getProductCategories()) && handoverInfo.getProductCategories().size() > 0) { sb.append("分类数据
"); - for(HandoverInfo.ProductCategory productCategory:handoverInfo.getProductCategories()){ - sb.append(" "+productCategory.getCategoryName()+" "+ productCategory.getNum()+" "+productCategory.getAmount()+"
"); + for (HandoverInfo.ProductCategory productCategory : handoverInfo.getProductCategories()) { + sb.append(" " + productCategory.getCategoryName() + " " + productCategory.getNum() + " " + productCategory.getAmount() + "
"); } } - if(ObjectUtil.isNotEmpty(handoverInfo.getProductInfos())&&handoverInfo.getProductInfos().size()>0) { + if (ObjectUtil.isNotEmpty(handoverInfo.getProductInfos()) && handoverInfo.getProductInfos().size() > 0) { sb.append("商品数据
"); char paddingCharacter = ' '; - sb.append(" 品名"+String.format("%22s","数量").replace(' ', paddingCharacter)+"
"); + sb.append(" 品名" + String.format("%22s", "数量").replace(' ', paddingCharacter) + "
"); for (ProductInfo productInfo : handoverInfo.getProductInfos()) { - if(productInfo.getProductName().length()>=14){ - sb.append(" "+productInfo.getProductName()+"
"); - sb.append(" "+String.format("%27s",productInfo.getNum()).replace(' ', paddingCharacter)+"
"); + if (productInfo.getProductName().length() >= 14) { - }else { - int tt=22-productInfo.getProductName().length(); - sb.append(" "+productInfo.getProductName()+String.format("%"+tt+"s",productInfo.getNum()).replace(' ', paddingCharacter)+"
"); - } + sb.append(" " + productInfo.getProductName() + "
"); + sb.append(" " + String.format("%27s", "*" + productInfo.getNum()).replace(' ', paddingCharacter) + "
"); + + } else { + //计算英文和数字数量 + //计算中文数量 + int m = getProducrName(productInfo.getProductName()); + int tt = 23 - productInfo.getProductName().length(); + + sb.append(" " + productInfo.getProductName() + String.format("%" + 6 + "s", "*" + productInfo.getNum()).replace(' ', paddingCharacter) + "
"); + } sb.append("
"); } } - - if(ObjectUtil.isNotEmpty(handoverInfo.getProductInfoPOS())&&handoverInfo.getProductInfoPOS().size()>0){ + if (ObjectUtil.isNotEmpty(handoverInfo.getProductInfoPOS()) && handoverInfo.getProductInfoPOS().size() > 0) { sb.append("商品数据
"); char paddingCharacter = ' '; for (ProductInfoPO productInfoPO : handoverInfo.getProductInfoPOS()) { - if(ObjectUtil.isNotEmpty(productInfoPO.getSkuName())){ + if (ObjectUtil.isNotEmpty(productInfoPO.getSkuName())) { productInfoPO.setProductName(productInfoPO.getProductName().concat("(").concat(productInfoPO.getSkuName()).concat(")")); } - if(productInfoPO.getProductName().length()>4&&productInfoPO.getProductName().length()<=10){ + if (productInfoPO.getProductName().length() > 4 && productInfoPO.getProductName().length() <= 10) { - int count=getProducrName(productInfoPO.getProductName()); - if(count<=0){ - int length=15-(productInfoPO.getProductName().length()-4); - sb.append(""+String.format("%-"+length+"s",productInfoPO.getProductName()).replace(' ', paddingCharacter)+String.format("%-2s", productInfoPO.getNum()).replace(' ', paddingCharacter)+String.format("%8s",productInfoPO.getAmount()).replace(' ', paddingCharacter)+"
"); - }else { - int length=15+count-(productInfoPO.getProductName().length()-4); - sb.append(""+String.format("%-"+length+"s",productInfoPO.getProductName()).replace(' ', paddingCharacter)+String.format("%-2s",productInfoPO.getNum()).replace(' ', paddingCharacter)+String.format("%8s",productInfoPO.getAmount()).replace(' ', paddingCharacter)+"
"); + int count = getProducrName(productInfoPO.getProductName()); + if (count <= 0) { + int length = 15 - (productInfoPO.getProductName().length() - 4); + sb.append("" + String.format("%-" + length + "s", productInfoPO.getProductName()).replace(' ', paddingCharacter) + String.format("%-2s", productInfoPO.getNum()).replace(' ', paddingCharacter) + String.format("%8s", productInfoPO.getAmount()).replace(' ', paddingCharacter) + "
"); + } else { + int length = 15 + count - (productInfoPO.getProductName().length() - 4); + sb.append("" + String.format("%-" + length + "s", productInfoPO.getProductName()).replace(' ', paddingCharacter) + String.format("%-2s", productInfoPO.getNum()).replace(' ', paddingCharacter) + String.format("%8s", productInfoPO.getAmount()).replace(' ', paddingCharacter) + "
"); } - }else if(productInfoPO.getProductName().length()>10){ + } else if (productInfoPO.getProductName().length() > 10) { - sb.append(""+productInfoPO.getProductName()+"
"); - sb.append(""+String.format("%20s",productInfoPO.getNum()).replace(' ', paddingCharacter)+String.format("%11s",productInfoPO.getAmount()).replace(' ', paddingCharacter)+"
"); + sb.append("" + productInfoPO.getProductName() + "
"); + sb.append("" + String.format("%20s", productInfoPO.getNum()).replace(' ', paddingCharacter) + String.format("%11s", productInfoPO.getAmount()).replace(' ', paddingCharacter) + "
"); - }else { - sb.append(""+String.format("%-15s",productInfoPO.getProductName()).replace(' ', paddingCharacter)+String.format("%-4s",productInfoPO.getNum()).replace(' ', paddingCharacter)+String.format("%8s",productInfoPO.getAmount()).replace(' ', paddingCharacter)+"
"); + } else { + sb.append("" + String.format("%-15s", productInfoPO.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", productInfoPO.getNum()).replace(' ', paddingCharacter) + String.format("%8s", productInfoPO.getAmount()).replace(' ', paddingCharacter) + "
"); } sb.append("
"); @@ -250,19 +256,16 @@ public class PrinterUtils { } - - - - sb.append("快捷收款金额 :".concat(ObjectUtil.isNull(handoverInfo.getQuickAmount())?"0":handoverInfo.getQuickAmount())+"
"); - sb.append("退款金额 :".concat(handoverInfo.getReturnAmount())+"
"); - sb.append("总收入: "+handoverInfo.getTotalAmount()+"
"); - sb.append("备用金: "+handoverInfo.getImprest()+"
"); - sb.append("应交金额: "+handoverInfo.getPayable()+"
"); - sb.append("上交金额: "+handoverInfo.getHandIn()+"
"); + sb.append("快捷收款金额 :".concat(ObjectUtil.isNull(handoverInfo.getQuickAmount()) ? "0" : handoverInfo.getQuickAmount()) + "
"); + sb.append("退款金额 :".concat(handoverInfo.getReturnAmount()) + "
"); + sb.append("总收入: " + handoverInfo.getTotalAmount() + "
"); + sb.append("备用金: " + handoverInfo.getImprest() + "
"); + sb.append("应交金额: " + handoverInfo.getPayable() + "
"); + sb.append("上交金额: " + handoverInfo.getHandIn() + "
"); sb.append("

"); - sb.append("总订单数:"+handoverInfo.getOrderNum()+"
"); - sb.append("打印时间:"+DateUtils.getTime(new Date())+"
"); + sb.append("总订单数:" + handoverInfo.getOrderNum() + "
"); + sb.append("打印时间:" + DateUtils.getTime(new Date()) + "
"); // sb.append("".concat(handoverInfo.getMerchantName())+"
"); sb.append(""); @@ -272,29 +275,22 @@ public class PrinterUtils { } - - - - - public static String printInvoice(String content,String remark,String amount){ - StringBuilder sb=new StringBuilder(); - sb.append("".concat(content.concat("
"))); - sb.append("".concat(remark).concat("
")); - sb.append("【开票金额:".concat(amount).concat("】")); - sb.append(""); - sb.append(""); - return sb.toString(); + public static String printInvoice(String content, String remark, String amount) { + String sb = "".concat(content.concat("
")) + + "".concat(remark).concat("
") + + "【开票金额:".concat(amount).concat("】") + + "" + + ""; + return sb; } - - - /** * 打印票据 + * * @throws Exception */ - public static void printTickets(String voiceJson,Integer actWay ,Integer cn,String devName,String data) { + public static void printTickets(String voiceJson, Integer actWay, Integer cn, String devName, String data) { //设备名称 //行为方式 1:只打印数据 2:只播放信息 3:打印数据并播放信息 // actWay = 3; @@ -308,32 +304,30 @@ public class PrinterUtils { Map param = getToken(time, uuid); //参数 MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); - multiValueMap.add("token",param.get("TOKEN")); - multiValueMap.add("devName",devName); - multiValueMap.add("actWay",actWay); - multiValueMap.add("cn",cn); - multiValueMap.add("data",data); - multiValueMap.add("voiceJson",voiceJson); - multiValueMap.add("appId",APP_ID); - multiValueMap.add("timestamp",time); - multiValueMap.add("requestId",uuid); - multiValueMap.add("userCode",USER_CODE); + multiValueMap.add("token", param.get("TOKEN")); + multiValueMap.add("devName", devName); + multiValueMap.add("actWay", actWay); + multiValueMap.add("cn", cn); + multiValueMap.add("data", data); + multiValueMap.add("voiceJson", voiceJson); + multiValueMap.add("appId", APP_ID); + multiValueMap.add("timestamp", time); + multiValueMap.add("requestId", uuid); + multiValueMap.add("userCode", USER_CODE); RestTemplate restTemplate = new RestTemplate(); HttpHeaders header = new HttpHeaders(); header.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity> httpEntity = new HttpEntity<>(multiValueMap,header); + HttpEntity> httpEntity = new HttpEntity<>(multiValueMap, header); String httpResponse = restTemplate.postForObject(URL_STR, httpEntity, String.class); - System.out.println("map"+httpResponse); + System.out.println("map" + httpResponse); } - - - public static int getProducrName(String str){ - int count=0; + public static int getProducrName(String str) { + int count = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c >= '0' && c <= '9') { @@ -345,35 +339,35 @@ public class PrinterUtils { return count; } - public static void main(String[] args)throws Exception { + public static void main(String[] args) throws Exception { // - List payInfos=new ArrayList<>(); + List payInfos = new ArrayList<>(); - payInfos.add(new HandoverInfo.PayInfo("现金","39.00")); - payInfos.add(new HandoverInfo.PayInfo("微信支付","0.01")); - payInfos.add(new HandoverInfo.PayInfo("储值卡支付","43.00")); - payInfos.add(new HandoverInfo.PayInfo("银行卡支付","20.00")); + payInfos.add(new HandoverInfo.PayInfo("现金", "39.00")); + payInfos.add(new HandoverInfo.PayInfo("微信支付", "0.01")); + payInfos.add(new HandoverInfo.PayInfo("储值卡支付", "43.00")); + payInfos.add(new HandoverInfo.PayInfo("银行卡支付", "20.00")); - List memberDatas=new ArrayList<>(); - memberDatas.add(new HandoverInfo.MemberData("43.00","会员消费")); - memberDatas.add(new HandoverInfo.MemberData("43.00","储值支付")); + List memberDatas = new ArrayList<>(); + memberDatas.add(new HandoverInfo.MemberData("43.00", "会员消费")); + memberDatas.add(new HandoverInfo.MemberData("43.00", "储值支付")); - List productInfos=new ArrayList<>(); + List productInfos = new ArrayList<>(); - productInfos.add(new ProductInfo("161616161616161616161616161",16,new BigDecimal(65.00))); + productInfos.add(new ProductInfo("161616161616161616161616161", 16, new BigDecimal("65.00"))); - productInfos.add(new ProductInfo("张三",16,new BigDecimal(65.00))); + productInfos.add(new ProductInfo("张三", 16, new BigDecimal("65.00"))); - productInfos.add(new ProductInfo("牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪",16,new BigDecimal(65.00))); + productInfos.add(new ProductInfo("牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪牛叉闪闪", 16, new BigDecimal("65.00"))); - HandoverInfo handoverInfo=new HandoverInfo("牛叉闪闪",DateUtils.getTime(new Date()),DateUtils.getTime(new Date()),"李四",payInfos,memberDatas,"5000.00","5000.00","5000.00","5000.00","50.00","80",null,"5000.00",null,productInfos); + HandoverInfo handoverInfo = new HandoverInfo("牛叉闪闪", DateUtils.getTime(new Date()), DateUtils.getTime(new Date()), "李四", payInfos, memberDatas, "5000.00", "5000.00", "5000.00", "5000.00", "50.00", "80", null, "5000.00", null, productInfos); - printTickets("3",1,1,"ZF544PG03W00005",handoverprintData(handoverInfo)); + printTickets("3", 1, 1, "ZF544PG03W00005", handoverprintData(handoverInfo)); // // List detailList= new ArrayList<>(); @@ -390,7 +384,6 @@ public class PrinterUtils { // printTickets(voiceJson,1,1,"ZF544PG03W00002",getCashPrintData(detailPO,"结算单",""));\\ - // String voiceJson = "{\"bizType\":\"1\",\"content\":\"您有一笔新的订单,请及时处理\"}"; // printTickets(voiceJson,1,1,"ZF544PG03W00002", printInvoice("http://weixin.qq.com/q/020fVS8lcLeiG1ID3SxCcH","【30天内开票有效】","1000000"));