Android之收银机称重和打印及抹零

Android之收银机称重和打印及抹零


前言

随着公司发展需要,要求做收银机的称重,去皮,清零及收银机本机打印功能,既然有称重肯定也少不了抹零,所以抹零代码也给放上了(打印机为LONGFLY龙飞)。


一、收银机称重

1.效果图

在这里插入图片描述

2.引入库

引入下列jar到libs目录下并引用so文件库,所有文件我会上传资源可下载:

Longfly_SDK_Scale_RF-210510.jar
libserial_port.so

3.代码实现

在AndroidManifest.xml中增加写日志文件操作的权限
<!-- File -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
//定义变量
Longfly_Scale mLongflgScale;//称重对象
  @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        if (mLongflgScale == null) {//构造函数 Context主要用于系统信息的获取,不能为nulll; Handler 重量事件异步方式处理,如例程中的case 100;如果为null,应用可以定期100ms调用重量读取函数获取重量
            mLongflgScale = new Longfly_Scale(CashierHome.this, handler);
        }
        super.onStart();
    }
     //去皮
    public void Order_Tare() {
        // TODO Auto-generated method stub
        if (g_iTare == 0) {
            if (mLongflgScale.Order_Tare() >= 0) {
            } else {
            }
        } else {
            //消皮函数 返回值说明:0-成功;-1-失败
            if (mLongflgScale.Order_Cancel_Tare() >= 0) {
            } else {
            }
        }
    }

    //清零
    public void Order_Clear_Zero() {
        // TODO Auto-generated method stub
        if (mLongflgScale.Order_Clear_Zero() >= 0) {
//            wait_state.setText(getString(R.string.succes));
        } else {
//            wait_state.setText(getString(R.string.fail));
        }
    }
     protected void onStop() {
        Scale_Close();
        // TODO Auto-generated method stub
        super.onStop();
    }
    //需要放在onCreate里面,定义变量都会默认0和false
      private void init_data() {
        // TODO Auto-generated method stub
        g_iTare = 0;
        b_QXFlg = false;
    }

    public void Scale_Close() {
        if (mLongflgScale != null) {
            mLongflgScale.stop();
            mLongflgScale.finish();
            mLongflgScale = null;
        }
    }
        //Handler 
        public Handler handler = new Handler() {
        double weight = 0;
        double tare = 0;
        int iRet = 0;
        int[] p_net = new int[1];
        int[] p_tare = new int[1];
        int[] p_status = new int[1];

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 100:
                    if (mLongflgScale != null) {//取重函数 参数说明:净重;皮重;稳定状态:1->稳定;0->不稳定 返回值说明:0-正常;-1:负载;-2:超重;-3:零点未标定;-4:任意点未标定;-5:开机自动清零失败;-6:串口无数据;-7:数据校验错;-8:接收数据错;-10:其它错误
                        iRet = mLongflgScale.get_weights_longfly(p_net, p_tare, p_status);
                        if (iRet >= 0 || iRet == -1) {
                            if (p_status[0] == 1) {
                                state.setText("已稳定");
                            } else {
                                state.setText("称重中");
                            }

                            weight = (double) p_net[0];
                            weight = weight * 0.001;

                            DecimalFormat decimalFormat = new DecimalFormat("0.000");
                            String p = decimalFormat.format(weight);

                            date.setText(p);//显示称重
                            if (iftype.equals("2")) {//是否为弹框称重
                                textxsje.setText(p + "KG");//显示称重
                                //单价*重量
                                double xjc = (Double.parseDouble(czdj)) * (Double.parseDouble(p));
                                //保留小数点后两位
                                DecimalFormat df = new DecimalFormat("######0.00");
                                if (maLingType.equals("2")) {//商品抹零
                                    if (mlfs.equals("no_maling")) {//不抹零
                                        textxjcz.setText("¥" + df.format(xjc));
                                    } else {//抹零  后面相关抹零代码
                                        textxjcz.setText("¥" + df.format(ZeroSetting(mlfs, xjc)));
                                    }
                                } else {
                                    textxjcz.setText("¥" + df.format(xjc));
                                }
                            }
//            			tare = (double)p_tare[0];
//            			tare = tare*0.001;
//						p = decimalFormat.format(tare);
                            if (p_tare[0] == 0) {
                                g_iTare = 0;
                            } else {
                                g_iTare = p_tare[0];
                            }
                        } else {
                            state.setText("称重中");
//                            if (iRet == -2) {
//                                date.setText("overweighted");
//                            }
//                            if (iRet == -3) {
//                                date.setText("No Calibration Zero");
//                            }
//                            if (iRet == -4) {
//                                date.setText("No Calibration kg");
//                            }
//                            if (iRet == -5) {
//                                date.setText("Pls Clear Zero");
//                            }
//                            if (iRet == -6) {
//                                date.setText("No Data");
//                            }
//                            if (iRet == -7) {
	            			date.setText(getString(R.string.crc_wrong));
//                            }
//                            if (iRet == -8) {
	            			date.setText(getString(R.string.data_wrong));
//                            }
                        }
                    }
                    break;
                default:
                    break;
            }
            super.handleMessage(msg);
        }
    };

二、收银机本机打印

1.效果图

在这里插入图片描述

2.引入库

引入下列jar到项目并引用,so文件用收银机称重so文件即可:

Longfly_SDK_UsbPrt_210531.jar
Qrcode.jar
ZXing.jar

3.代码实现

    //定义变量  龙飞打印机本机打印
    Prt_USB Longfly_UsbPrt = null;
    //实例化
    Longfly_UsbPrt = new Prt_USB(this, 0);
    //onDestroy停止它
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onStop();
        Longfly_UsbPrt.Stop();
   }
     /**
     * 调用打印地方组装打印模板并调用打印
     */
               //结账单
                content = "           易荣德尚店\n\n";
                content += "            结账单\n";
                content += "-------------------------------\n";
                content += "流水号:001\n";
                content += "单  号:13001564942313\n";
                content += "收银员:曹刘浪\n";
                content += "时间:2021-10-21 9:47\n\n";
                content += "            销售明细\n";
                content += "菜品         数量   重量   金额\n";
                content += "-------------------------------\n";
                content += "虎皮青椒      1      -      12\n";
                content += "美蛙鱼头      -     3.2     35\n";
                content += "带皮牛肉      -     4.8     92\n";
                content += "梅菜扣肉      1      -      32\n\n";
                content += "            收款明细\n";
                content += "收款方式                收款金额\n";
                content += "-------------------------------\n";
                content += "付款码                  ¥299.9\n\n";
                content += "     谢谢光临!谢谢下次光临\n";
                Print_test_CN(content);
      /**
     * 本机打印
     */
    private void Print_test_CN(String content) {
        Longfly_UsbPrt.PrintInitSet_LF();//打印机初始化
        Longfly_UsbPrt.SetDHFontCmd_LF();//设置打印倍高字体
        Longfly_UsbPrt.PrintTicket_GBK_LF(content);// 打印content并自动换行  中国字符编码打印
        Longfly_UsbPrt.SetDefFontCmd_LF();//设置打印机默认字体
        Longfly_UsbPrt.FeedPaper_LF((byte) 50);//走纸点行
        Longfly_UsbPrt.CutPaper_LF();//打印机切纸
        Longfly_UsbPrt.OpenCashBox_LF();//开钱箱
    }
    

三、抹零设置

1.代码实现

    /**
     * 抹零设置
     *mlfs 抹零类型 ,money 传入相应金额进行抹零
     * @return
     */
    public static double ZeroSetting(String mlfs, Double money) {
        Double cll = 0.00;
        if (mlfs.equals("down_to_angle")) {//向下抹零到角
            String str = money + "";
            String zz = str.substring(0, str.indexOf(".") + 2);
            cll = Double.parseDouble(zz);
        } else if (mlfs.equals("up_to_angle")) {//向上抹零到角
            String str = money + "";
            String zz = str.substring(0, str.indexOf(".") + 2);
            Double cc = Double.parseDouble(str.substring(str.indexOf(".")));
            if (cc > 0) {
                cll = Double.parseDouble(zz) + 0.1;
            } else {
                cll = Double.parseDouble(zz);
            }
        } else if (mlfs.equals("down_to_yuan")) {//向下抹零到元
            String str = money + "";
            String zz = str.substring(0, str.indexOf("."));
            Double cc = Double.parseDouble(str.substring(str.indexOf(".")));
            if (cc > 0) {
                cll = Double.parseDouble(zz);
            } else {
                cll = Double.parseDouble(zz);
            }
        } else if (mlfs.equals("up_to_yuan")) {//向上抹零到元
            String str = money + "";
            String zz = str.substring(0, str.indexOf("."));
            Double cc = Double.parseDouble(str.substring(str.indexOf(".")));
            if (cc > 0) {
                cll = Double.parseDouble(zz) + 1;
            } else {
                cll = Double.parseDouble(zz);
            }
        } else if (mlfs.equals("rounded_to_angle")) {//四舍五入到角
            DecimalFormat df = new DecimalFormat("######0.0");
            Double c = Double.parseDouble(df.format(money) + "");
            cll = c;
        } else if (mlfs.equals("rounded_to_yuan")) {//四舍五入到元
            DecimalFormat df = new DecimalFormat("######0");
            Double c = Double.parseDouble(df.format(money) + "");
            cll = c;
        } else if (mlfs.equals("up_to_five_angle")) {//向上抹零到五角
            String str = money + "";
            String zz = str.substring(0, str.indexOf("."));
            Double cc = Double.parseDouble(str.substring(str.indexOf(".")));
            if (cc < 0.5) {
                cc = 0.5;
            } else if (cc > 0.5) {
                cc = 1.0;
            }
            cll = Double.parseDouble(zz) + cc;
        } else if (mlfs.equals("down_to_five_angle")) {//向下抹零到五角
            String str = money + "";
            String zz = str.substring(0, str.indexOf("."));
            Double cc = Double.parseDouble(str.substring(str.indexOf(".")));
            if (cc < 0.5) {
                cc = 0.0;
            } else if (cc > 0.5) {
                cc = 0.5;
            }
            cll = Double.parseDouble(zz) + cc;
        }
        System.out.println("返回价格:" + cll + "   " + mlfs);
        return cll;
    }

资料下载

文件下载

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶已初秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值