IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【Android】Android 集成商米内置打印机打印票据 -> 正文阅读

[移动开发]【Android】Android 集成商米内置打印机打印票据

【Android】Android 集成商米内置打印机打印票据

1、集成商米打印依赖

也可以去Maven看一下有没得最新的版本

implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.7'

implementation group: 'com.sunmi', name: 'printerlibrary', version: '1.0.14'

2、规范接口接口

个人习惯,先写接口,再写功能实现类

import android.content.Context;

/**
 * sunMi 内置打印机
 *
 * @author Tellsea
 * @date 2021-8-2
 */
public interface SunMiPrintingService {

    /**
     * 连接打印机
     */
    void bindServicePrinting();
  
    /**
     * 预结账单
     *
     * @param param
     */
    void beforeOrderPrinting(String param);

}

实现接口

/**
 * @author Tellsea
 * @date 2021-8-11
 */
public class SunMiPrintingServiceImpl implements SunMiPrintingService {

    private SunmiPrinterService sunmiPrinterService;

    /**
     * 连接打印机
     */
    @Override
    @JavascriptInterface
    public void bindServicePrinting() {
        try {
            boolean result = InnerPrinterManager.getInstance().bindService(MainActivity.CONTEXT, new InnerPrinterCallback() {
                @Override
                protected void onConnected(SunmiPrinterService service) {
                    //这?即获取到绑定服务成功连接后的远程服务接?句柄
                    //可以通过service调??持的打印?法
                    if (service != null) {
                        sunmiPrinterService = service;
                    }
                }

                @Override
                protected void onDisconnected() {
                    //当服务异常断开后,会回调此?法,建议在此做重连策略
                }
            });
            if (!result) {
                Toast.makeText(MainActivity.CONTEXT, "没有绑定到服务,请检查机型是否支持", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(MainActivity.CONTEXT, "打印机连接成功", Toast.LENGTH_LONG).show();
            }
        } catch (InnerPrinterException e) {
            e.printStackTrace();
        }
    }

    /**
     * 预结账单
     *
     * @param param
     */
    @Override
    @JavascriptInterface
    public void beforeOrderPrinting(String param) {
        System.out.println("预结单参数:" + param);
        if (param.isEmpty()) {
            Toast.makeText(MainActivity.CONTEXT, "打印参数不能为空", Toast.LENGTH_LONG).show();
        }
        OrderPrinting entity = new Gson().fromJson(param, OrderPrinting.class);
        try {
            if (sunmiPrinterService == null) {
                Toast.makeText(MainActivity.CONTEXT, "商米打印机:打印对象为空", Toast.LENGTH_LONG).show();
                return;
            }

            if (entity.getOrderDetailList().isEmpty()) {
                Toast.makeText(MainActivity.CONTEXT, "商米打印机:商品为空", Toast.LENGTH_LONG).show();
                return;
            }

            sunmiPrinterService.printerInit(null);
            int paper = sunmiPrinterService.getPrinterPaper();
            sunmiPrinterService.setAlignment(1, null);
            sunmiPrinterService.printTextWithFont("预结账单 " + entity.getTakeOrderNumber() + "\n", null, 48F, null);
            sunmiPrinterService.printTextWithFont(entity.getStoreName() + "\n", null, 40F, null);
            sunmiPrinterService.printText("    \n", null);
            setInterval(paper);
            sunmiPrinterService.setAlignment(0, null);
            sunmiPrinterService.setPrinterStyle(WoyouConsts.SET_LINE_SPACING, 0);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.printTextWithFont("桌台号:" + entity.getDeskName() + "\n", null, 28F, null);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.printTextWithFont("配送类型:" + entity.getDeskType() + "\n", null, 28F, null);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.printTextWithFont("订单号:" + entity.getOrderNumber() + "\n", null, 28F, null);
            sunmiPrinterService.printText("    \n", null);
            setInterval(paper);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.setPrinterStyle(WoyouConsts.ENABLE_BOLD, WoyouConsts.ENABLE);
            String[] txts = new String[]{"商品", "数量", "单价"};
            int[] width = new int[]{2, 2, 2};
            int[] align = new int[]{0, 1, 2};
            sunmiPrinterService.printColumnsString(txts, width, align, null);
            sunmiPrinterService.setPrinterStyle(WoyouConsts.ENABLE_BOLD, WoyouConsts.DISABLE);
            for (OrderPrintingDetail item : entity.getOrderDetailList()) {
                sunmiPrinterService.printText("    \n", null);
                if (IntegerUtils.eq(item.getSpuAttrType(), 2)) {
                    txts[0] = isEmptyValue(item.getSpuTitle());
                    txts[1] = "";
                    txts[2] = "";
                    sunmiPrinterService.printColumnsString(txts, width, align, null);
                    txts[0] = isEmptyValue(item.getSpuDescription());
                } else {
                    txts[0] = isEmptyValue(item.getSpuTitle());
                }
                txts[1] = isEmptyValue(item.getNumber());
                txts[2] = isEmptyValue(item.getSpuSellPrice());
                sunmiPrinterService.printColumnsString(txts, width, align, null);
                if (item.getSpuRemark() != null) {
                    txts[0] = isEmptyValue(item.getSpuRemark());
                    txts[1] = "";
                    txts[2] = "";
                    sunmiPrinterService.printColumnsString(txts, width, align, null);
                }
            }
            sunmiPrinterService.printText("    \n", null);
            setInterval(paper);
            if (entity.getOrderRemark() != null) {
                sunmiPrinterService.printText("    \n", null);
                sunmiPrinterService.printTextWithFont("订单备注:" + entity.getOrderRemark() + "\n", null, 28F, null);
            }
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.printTextWithFont("预付金额:" + entity.getOriginPrice() + "\n", null, 40F, null);
            setInterval(paper);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.printText("    \n", null);
            sunmiPrinterService.cutPaper(null);
        } catch (RemoteException e) {
            Toast.makeText(MainActivity.CONTEXT, "打印异常:" + e.getMessage(), Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
    }
    
    /**
     * 判断参数是否为空
     *
     * @param value
     * @return
     */
    public String isEmptyValue(Object value) {
        if (value == null) {
            return "";
        }
        return String.valueOf(value);
    }

    /**
     * 设置间隔
     *
     * @param paper
     * @throws RemoteException
     */
    public void setInterval(int paper) throws RemoteException {
        if (paper == 1) {
            sunmiPrinterService.printText("--------------------------------\n", null);
        } else {
            sunmiPrinterService.printText("------------------------------------------------\n", null);
        }
    }
}

3、使用到的相关对象以及工具类

订单对象

/**
 * 预结账单
 *
 * @author Tellsea
 * @date 2021/07/22
 */
@Data
@Accessors(chain = true)
public class OrderPrinting {

    private Long id;

    private String storeName;

    private String takeOrderNumber;

    private String deskName;

    private String deskType;

    private String orderNumber;

    private String serialNumber;

    private List<OrderPrintingDetail> orderDetailList;

    private BigDecimal originPrice;

    private BigDecimal reducePrice;

    private BigDecimal integerPrice;

    private String payWayName;

    private BigDecimal payMoney;

    private String placeOrderTime;

    private String payTime;

    private String orderRemark;
}

订单商品对象

/**
 * 商品信息
 *
 * @author Tellsea
 * @date 2021/07/22
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class OrderPrintingDetail {

    private Long spuAttrType;

    private String spuTitle;

    private String spuDescription;

    private BigDecimal number;

    private BigDecimal spuSellPrice;

    private String spuRemark;

}

使用到的比较工具类

/**
 * Integer 类型工具类
 * 原符号       <       <=      >       >=      <>
 * 对应函数    lt()     le()    gt()    ge()    ne()
 *
 * @author Tellsea
 * @date 2021/04/12
 */
public class IntegerUtils {

    /**
     * 等于
     *
     * @param val1
     * @param val2
     * @return
     */
    public static boolean eq(Integer val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return val1.intValue() == val2.intValue();
        }
        return false;
    }

    public static boolean eq(Long val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return val1.intValue() == val2.intValue();
        }
        return false;
    }

    /**
     * 大于
     *
     * @param val1
     * @param val2
     * @return
     */
    public static boolean gt(Integer val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return val1.intValue() > val2.intValue();
        }
        return false;
    }

    public static boolean gt(Long val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return val1.intValue() > val2.intValue();
        }
        return false;
    }

    /**
     * 小于
     *
     * @param val1
     * @param val2
     * @return
     */
    public static boolean lt(Integer val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return val1.intValue() < val2.intValue();
        }
        return false;
    }

    /**
     * 大于等于
     *
     * @param val1
     * @param val2
     * @return
     */
    public static boolean ge(Integer val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return (val1.intValue() > val2.intValue()) || (val1.intValue() == val2.intValue());
        }
        return false;
    }

    /**
     * 小于等于
     *
     * @param val1
     * @param val2
     * @return
     */
    public static boolean le(Integer val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return (val1.intValue() < val2.intValue()) || (val1.intValue() == val2.intValue());
        }
        return false;
    }

    /**
     * 不等于
     *
     * @param val1
     * @param val2
     * @return
     */
    public static boolean ne(Integer val1, Integer val2) {
        if (val1 != null && val2 != null) {
            return val1.intValue() != val2.intValue();
        }
        return false;
    }
}

4、MainActivity初始化接口

// 商米打印机初始化
SunMiPrintingService sunmiPrintingService = new SunMiPrintingServiceImpl();
sunmiPrintingService.bindServicePrinting();

5、Uniapp调用方法

在接口方法已经使用了@JavascriptInterface注解,可以使用JavaScript直接调用

/**
 * 打印制作单
 * @param param
 */
function makeOrderPrinting(param) {
    window.sunMiPrinting.makeOrderPrinting(param);
}

微信公众号

每天Get一个小技巧

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:30:08  更:2021-10-28 12:31:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:49:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码