Android之收银机称重和打印及抹零
文章目录
- Android之收银机称重和打印及抹零
- 前言
- 一、收银机称重
- 1.效果图
- 2.引入库
- 3.代码实现
- 二、收银机本机打印
- 1.效果图
- 2.引入库
- 3.代码实现
- 三、抹零设置
- 1.代码实现
前言
随着公司发展需要,要求做收银机的称重,去皮,清零及收银机本机打印功能,既然有称重肯定也少不了抹零,所以抹零代码也给放上了(打印机为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;
}