Commit e799c8b5 by 王宇航

ip打印

parent 3acc2de9
......@@ -2,27 +2,10 @@ package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.common.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils;
import com.joe.print.R;
import com.gingersoft.gsa.cloud.base.adapter.print.BillAdapter;
import com.gingersoft.gsa.cloud.base.adapter.print.FoodAdapter;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.utils.PrintUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
......@@ -31,8 +14,6 @@ import am.util.printer.PrinterUtils;
import am.util.printer.PrinterWriter;
import am.util.printer.PrinterWriter58mm;
import am.util.printer.PrinterWriter80mm;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/**
* Created by Wyh on 2020/1/9.
......@@ -40,14 +21,15 @@ import androidx.recyclerview.widget.RecyclerView;
*/
public class SendPrint implements PrintDataMaker {
private Context context;
private Context mContext;
private int parting = 255;//高度分割值,
private int width; // 打印的圖片寬度,紙張寬度
public SendPrint(Context context, int parting, int width) {
this.context = context;
private int printType;
public SendPrint(Context context, int parting, int width,int type) {
this.mContext = context;
this.parting = parting;
this.width = width;
this.printType = type;
}
@Override
......@@ -59,17 +41,24 @@ public class SendPrint implements PrintDataMaker {
printer.setAlignCenter();
data.add(printer.getDataAndReset());
View view = initView();
LayoutToBitmapUtils.layoutView(context, view);//先测量view
Bitmap bitmap = LayoutToBitmapUtils.loadBitmapFromView(view);//将view轉bitmap
//壓縮bitmap到指定大小
bitmap = ImageUtils.zoomDrawable(bitmap, width, bitmap.getHeight());
ArrayList<byte[]> image1 = PrinterUtils.decodeBitmapToDataList(bitmap, parting);//bitmap转字节码
data.addAll(image1);
// //壓縮bitmap到指定大小
// bitmap = ImageUtils.zoomDrawabe(bitmap, width, bitmap.getHeight());
// ArrayList<byte[]> image1 = PrinterUtils.decodeBitmapToDataList(bitmap, parting);//bitmap转字节码
List<Bitmap> bitmaps = PrintUtils.getPrintBitmap(mContext, printType, width);//根據打印類型獲得不同的bitmap
if (bitmaps.size() <= 0) {
ToastUtils.show(mContext, "打印失敗");
return null;
}
for (int i = 0; i < bitmaps.size(); i++) {
data.addAll(PrinterUtils.decodeBitmapToDataList(bitmaps.get(i), parting));
printer.printLineFeed();
printer.printLineFeed();
printer.printLineFeed();
printer.printLineFeed();
printer.printLineFeed();
printer.feedPaperCutPartial();
data.add(printer.getDataAndClose());
}
// String bitmapPath = FileUtils.getExternalFilesDir(context, "Temp") + "tmp_qr.jpg";
// if (QRCodeUtil.createQRImage(qr, 380, 380, null, bitmapPath)) {
// ArrayList<byte[]> image2 = printer.getImageByte(bitmapPath);
......@@ -79,90 +68,10 @@ public class SendPrint implements PrintDataMaker {
// .getImageByte(context.getResources(), R.drawable.ic_printer_qr);
// data.addAll(image2);
// }
printer.printLineFeed();
printer.printLineFeed();
printer.printLineFeed();
printer.printLineFeed();
printer.printLineFeed();
printer.feedPaperCutPartial();
data.add(printer.getDataAndClose());
return data;
} catch (Exception e) {
return new ArrayList<>();
}
}
private View view;
private TextView brandName;
private TextView restaurantName;
private TextView tableNum;//台號
private TextView people;//人數
private TextView orderNum;//單號
private TextView orderData;
private RecyclerView rvFood;
private RecyclerView rvBillAmount;
private TextView mTvTotalAmount;//總金額
private TextView checkOutTime;
private TextView line_food_info;
@NotNull
private View initView() {
if (view == null) {
view = LinearLayout.inflate(context, R.layout.print_layout_print, null);
brandName = view.findViewById(R.id.tv_brand_name);
restaurantName = view.findViewById(R.id.tv_restaurant_name);
tableNum = view.findViewById(R.id.tv_dining_table_number);
people = view.findViewById(R.id.tv_people);
orderNum = view.findViewById(R.id.tv_order_num);
orderData = view.findViewById(R.id.tv_date);
rvFood = view.findViewById(R.id.rv_food);
rvBillAmount = view.findViewById(R.id.rv_bill_amount);
mTvTotalAmount = view.findViewById(R.id.tv_total_amount);
checkOutTime = view.findViewById(R.id.tv_checkout_time);
line_food_info = view.findViewById(R.id.line_food_info);
}
List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
tableNum.setText(tableBean.getTableName());
people.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
orderData.setText(tableBean.getCreateTime());
checkOutTime.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
FoodAdapter foodAdapter = new FoodAdapter(foodList);
rvFood.setLayoutManager(new LinearLayoutManager(context));
rvFood.setAdapter(foodAdapter);
List<BillingBean> billingBeans = new ArrayList<>();
// billingBeans.add(new BillingBean("合計", 58.88));
// billingBeans.add(new BillingBean("10%服務費", 5.08));
// billingBeans.add(new BillingBean("賬單小數", -0.06));
if (billingBeans.size() <= 0) {
line_food_info.setVisibility(View.GONE);
} else {
BillAdapter billAdapter = new BillAdapter(billingBeans);
rvBillAmount.setLayoutManager(new LinearLayoutManager(context));
rvBillAmount.setAdapter(billAdapter);
}
if(OpenTableManage.getDefault().getTableBean() != null) {
tableNum.setText(OpenTableManage.getDefault().getTableBean().getTableName());
people.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
}
if(MyOrderManage.getInstance().getOrderId() != -1){
orderNum.setText(MyOrderManage.getInstance().getOrderId() + "");
}
BigDecimal totalAmount = new BigDecimal(0);
for (OrderDetail food : MyOrderManage.getInstance().getOrderFoodList()) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(food.getUnit_price(), food.getNumber()));
}
//總金額
mTvTotalAmount.setText(totalAmount +"");
//加载条形码
// ImageView ivBarCode = view.findViewById(R.id.iv_bar_code);
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
return view;
}
}
......@@ -40,7 +40,13 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
private String port;
private int paperType = 1;//打印紙類型 1:58mm,2::80mm
private int printWidth = 560;//打印出來的內容寬度
/**
* 0:上菜紙
* 1:印單
* 2:結賬單
* 3:廚房單
*/
private int type = -1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -56,6 +62,7 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
ip = intent.getStringExtra("ip");
port = intent.getStringExtra("port");
paperType = intent.getIntExtra("paperType", 1);
type = intent.getIntExtra("type", -1);
if (ip == null || ip.equals("")) {
ip = "192.168.1.217";
}
......@@ -83,7 +90,7 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
executor.setOnPrintResultListener(this);
}
if (maker == null) {
maker = new SendPrint(context, 255, printWidth);
maker = new SendPrint(context, 255, printWidth, type);
}
executor.setIp(ip, Integer.parseInt(port));
executor.doPrinterRequestAsync(maker);
......
......@@ -9,20 +9,14 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.util.Log;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.common.bean.PrinterManger.PrinterManager;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.utils.PrintUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.widget.DialogUtils;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.hyweb.n5.lib.constant.PrinterConstant;
import com.hyweb.n5.lib.exception.NoInitPrinterException;
......@@ -39,12 +33,7 @@ import com.joe.print.mvp.print.SunMiPrint;
import com.joe.print.mvp.ui.adapter.PrinterListAdapter;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -110,35 +99,34 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
public void initData(@Nullable Bundle savedInstanceState) {
type = CCUtil.getNavigateParam(this, "type", 1001);
List<Bitmap> bitmaps = PrintUtils.getPrintBitmap(mContext, type);
List<Bitmap> bitmaps = PrintUtils.getPrintBitmap(mContext, type, 500);
if (bitmaps.size() <= 0) {
ToastUtils.show(mContext, "打印失敗");
finish();
return;
}
selectDialog = new DialogUtils(mContext, R.layout.print_dialog_select_device) {
@Override
public void initLayout(ViewHepler hepler, Dialog dialog) {
dialogCount++;
hepler.setViewClick(R.id.local_print, v -> {
for (int i = 0; i < bitmaps.size(); i++) {
locationPrint(bitmaps.get(i));
}
// selectDialog = new DialogUtils(mContext, R.layout.print_dialog_select_device) {
// @Override
// public void initLayout(ViewHepler hepler, Dialog dialog) {
// dialogCount++;
// hepler.setViewClick(R.id.local_print, v -> {
// locationPrint(bitmap);
// });
// hepler.setViewClick(R.id.internet_print, v -> {
// //IP打印
// if (PrinterManager.getPrinterManager().getDeviceBeans() != null
// && PrinterManager.getPrinterManager().getDeviceBeans().size() > 0) {
// //如果本地保存有打印設備
// showPrinterList();
// } else {
// //網絡獲取打印設備
// mPresenter.getPrinterList(GsaCloudApplication.getRestaurantId(mContext));
// }
// });
// }
// }.createDialogView().show().setOnDismissListener(this);
});
hepler.setViewClick(R.id.internet_print, v -> {
//IP打印
if (PrinterManager.getPrinterManager().getDeviceBeans() != null
&& PrinterManager.getPrinterManager().getDeviceBeans().size() > 0) {
//如果本地保存有打印設備
showPrinterList();
} else {
//網絡獲取打印設備
mPresenter.getPrinterList(GsaCloudApplication.getRestaurantId(mContext));
}
});
}
}.createDialogView().show().setOnDismissListener(this);
}
/**
......@@ -270,6 +258,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
intent.putExtra("ip", deviceBeans.get(position).getIp());
intent.putExtra("port", deviceBeans.get(position).getPort());
intent.putExtra("paperType", deviceBeans.get(position).getType());
intent.putExtra("type", type);
startActivity(intent);
});
}
......
......@@ -6,7 +6,6 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.adapter.print.BillAdapter;
import com.gingersoft.gsa.cloud.base.adapter.print.BillTypeAdapter;
......@@ -19,10 +18,8 @@ import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils;
import com.gingersoft.gsa.cloud.database.bean.Food;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
......@@ -42,9 +39,20 @@ import androidx.recyclerview.widget.RecyclerView;
*/
public class PrintUtils {
public static List<Bitmap> getPrintBitmap(Context mContext, int type) {
private static int paperWidth = 380;
/**
*
* @param mContext 上下文
* @param type 打印類型 0:上菜紙
* * 1:印單
* * 2:結賬單
* * 3:廚房單
* @param paperWidth 紙張寬度
* @return 返回需要打印的圖片
*/
public static List<Bitmap> getPrintBitmap(Context mContext, int type, int paperWidth) {
List<Bitmap> bitmaps = new ArrayList<>();
PrintUtils.paperWidth = paperWidth;
if (type == 0) {
//上菜紙
bitmaps.add(PrintUtils.getPrintBitmap(mContext, MyOrderManage.getInstance().getNewFoodList()));
......@@ -73,7 +81,6 @@ public class PrintUtils {
}
}
}
//通過打印位置生成多張用於打印的bitmap
for (Map.Entry<String, List<OrderDetail>> entry : map.entrySet()) {
String key = entry.getKey();
......@@ -95,7 +102,7 @@ public class PrintUtils {
}
public static Bitmap getPrintBitmap(Context context) {
private static Bitmap getPrintBitmap(Context context) {
return getPrintBitmap(context, MyOrderManage.getInstance().getOrderFoodList());
}
......@@ -105,7 +112,7 @@ public class PrintUtils {
* @param context
* @return
*/
public static Bitmap getPrintBitmap(Context context, List<OrderDetail> foodList) {
private static Bitmap getPrintBitmap(Context context, List<OrderDetail> foodList) {
View view = LinearLayout.inflate(context, R.layout.print_layout_print, null);
TextView brandName = view.findViewById(R.id.tv_brand_name);
TextView restaurantName = view.findViewById(R.id.tv_restaurant_name);
......@@ -169,7 +176,7 @@ public class PrintUtils {
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), 580);//将view轉bitmap
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
}
/**
......@@ -178,7 +185,7 @@ public class PrintUtils {
* @param context
* @return
*/
public static Bitmap getPrintBillBitmap(Context context) {
private static Bitmap getPrintBillBitmap(Context context) {
View view = LinearLayout.inflate(context, R.layout.print_layout_print_bill, null);
TextView brandName = view.findViewById(R.id.tv_brand_name);
TextView restaurantName = view.findViewById(R.id.tv_restaurant_name);
......@@ -241,7 +248,7 @@ public class PrintUtils {
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), 580);//将view轉bitmap
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
}
......@@ -251,7 +258,7 @@ public class PrintUtils {
* @param context
* @return
*/
public static Bitmap getKitChenPrintBitmap(Context context, List<OrderDetail> foodList) {
private static Bitmap getKitChenPrintBitmap(Context context, List<OrderDetail> foodList) {
View view = LinearLayout.inflate(context, R.layout.print_kitchen, null);
TextView tvTableNumber = view.findViewById(R.id.tv_kitchen_print_table_number);
TextView tvOpeningTime = view.findViewById(R.id.tv_opening_time);
......@@ -286,7 +293,7 @@ public class PrintUtils {
tvOperator.setText(GsaCloudApplication.userName);
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), 580);//将view轉bitmap
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment