Commit 367c421b by Wyh

04-11 打印問題修復

parent 1354332c
...@@ -29,19 +29,23 @@ import java.util.Objects; ...@@ -29,19 +29,23 @@ import java.util.Objects;
*/ */
public class PrintKitchen extends PrinterInIt { public class PrintKitchen extends PrinterInIt {
String[] printLocation = new String[]{"k1", "k2"};
@Override @Override
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext) { public Map<String, List<Bitmap>> getPrintBitmap(Context mContext) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>(); Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
List<OrderDetail> orderDetails = MyOrderManage.getInstance().getNewFoodList(); List<OrderDetail> orderDetails = MyOrderManage.getInstance().getNewFoodList();
if (orderDetails != null) { if (orderDetails != null) {
for (int i = 0; i < orderDetails.size(); i++) {
orderDetails.get(i).setPrintseting(printLocation[i % 2]);
}
//廚房單,可能會有多個IP打印 //廚房單,可能會有多個IP打印
//獲得ip打印列表, //獲得ip打印列表,
//再將食品數據根據打印位置分組。 //再將食品數據根據打印位置分組。
//打印一組之後,關閉連接,切換第二台打印機ip,如此循環 //打印一組之後,關閉連接,切換第二台打印機ip,如此循環
//打印完成之後,返回所有打印結果。 //打印完成之後,返回所有打印結果。
Map<String, List<OrderDetail>> foodMaps = new HashMap<>(); Map<String, List<OrderDetail>> foodMaps = new HashMap<>();
String emptyPrintLocation = "null";//部分食品沒有打印位置時設置為此key,比如這是第一個食品,沒有打印位置時 String emptyPrintLocation = "";//部分食品沒有打印位置時設置為此key,比如這是第一個食品,沒有打印位置時
int lastEmptyPrintLocationIndex = 0;//上一次遍歷到第一個食品時都沒有打印位置時,開始的食品位置 int lastEmptyPrintLocationIndex = 0;//上一次遍歷到第一個食品時都沒有打印位置時,開始的食品位置
//將所有食品進行遍歷,分組 //將所有食品進行遍歷,分組
for (int i = 0; i < orderDetails.size(); i++) { for (int i = 0; i < orderDetails.size(); i++) {
......
...@@ -22,6 +22,7 @@ import com.joe.print.R; ...@@ -22,6 +22,7 @@ import com.joe.print.R;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -38,10 +39,27 @@ public class PrintSlip extends PrinterInIt { ...@@ -38,10 +39,27 @@ public class PrintSlip extends PrinterInIt {
//這裡可能還需要加上廚房單的內容,有未送單的食品時。 //這裡可能還需要加上廚房單的內容,有未送單的食品時。
PrintKitchen kitchen = new PrintKitchen(); PrintKitchen kitchen = new PrintKitchen();
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>(kitchen.getPrintBitmap(mContext)); Map<String, List<Bitmap>> bitmapMaps = new HashMap<>(kitchen.getPrintBitmap(mContext));
bitmapMaps.put("", bitmaps); merge2ResultMap(bitmapMaps, "", bitmaps);
return bitmapMaps; return bitmapMaps;
} }
/**
* 把Map中Key相同,则各个value添加到一起,汇总值
* 把partMap数据合并放到resultMap中。
*
* @param resultMap
*/
public static <T, F, K extends Collection<F>> Map merge2ResultMap(Map<T, K> resultMap, T key2, K value) {
for (Map.Entry<T, K> entry : resultMap.entrySet()) {
T key = entry.getKey();
if (resultMap.containsKey(key2)) {
resultMap.get(key2).addAll(value);
} else {
resultMap.put(key2, value);
}
}
return resultMap;
}
/** /**
* 獲取"印單"圖片 * 獲取"印單"圖片
......
...@@ -106,7 +106,7 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis ...@@ -106,7 +106,7 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis
// 第一步先查看map中的key是不是空的"",有key就要獲取打印機列表,找到對應打印機打印。如果沒有找到打印機再去找默認打印機 // 第一步先查看map中的key是不是空的"",有key就要獲取打印機列表,找到對應打印機打印。如果沒有找到打印機再去找默認打印機
// 如果沒有key,則是走默認打印機流程 // 如果沒有key,則是走默認打印機流程
for (Map.Entry<String, List<Bitmap>> entry : listMap.entrySet()) { for (Map.Entry<String, List<Bitmap>> entry : listMap.entrySet()) {
if (entry.getKey().equals("")) { if (entry.getKey().equals("") || entry.getKey().equals("null")) {
//沒有打印位置,獲取默認打印位置 //沒有打印位置,獲取默認打印位置
defaultPrint(deviceBeans, entry.getValue()); defaultPrint(deviceBeans, entry.getValue());
} else { } else {
...@@ -259,7 +259,7 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis ...@@ -259,7 +259,7 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis
int lastIndex = key.lastIndexOf(DELIMITER); int lastIndex = key.lastIndexOf(DELIMITER);
key = key.substring(lastIndex + 1); key = key.substring(lastIndex + 1);
if (key.replaceAll("\\*", "").trim().equals(printerDeviceBeans.get(i).getName().trim())) { if (key.replaceAll("\\*", "").trim().equals(printerDeviceBeans.get(i).getName())) {
//如果key(打印位置)去掉*號和打印機名稱相同,則在這台機器上打印 //如果key(打印位置)去掉*號和打印機名稱相同,則在這台機器上打印
ipDevicePrint(printerDeviceBeans.get(i), bitmaps); ipDevicePrint(printerDeviceBeans.get(i), bitmaps);
isPrint = true; isPrint = true;
...@@ -500,9 +500,10 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis ...@@ -500,9 +500,10 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis
recyclerView.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(mContext, R.color.line_color))); recyclerView.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(mContext, R.color.line_color)));
adapter.setOnItemClickListener((adapter12, view, position) -> { adapter.setOnItemClickListener((adapter12, view, position) -> {
//顯示打印失敗的食品。 //顯示打印失敗的食品。
PrintFileBitmapAdapter bitmapAdapter = new PrintFileBitmapAdapter(getPrintBitmapByPrintLocation(printerFileDevices.get(position).getName().trim())); if(printerFileDevices.get(position).getName() != null) {
PrintFileBitmapAdapter bitmapAdapter = new PrintFileBitmapAdapter(getPrintBitmapByPrintLocation(printerFileDevices.get(position).getName()));
recyclerView.setAdapter(bitmapAdapter); recyclerView.setAdapter(bitmapAdapter);
}
}); });
adapter.setSwitchPrintListenter(position -> { adapter.setSwitchPrintListenter(position -> {
if (printerDeviceBeans != null && printerDeviceBeans.size() > 0) { if (printerDeviceBeans != null && printerDeviceBeans.size() > 0) {
...@@ -522,7 +523,7 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis ...@@ -522,7 +523,7 @@ public abstract class PrinterInIt implements PrintSocketHolder.OnStateChangedLis
}); });
adapter.setTryAgainPrintListenter(position -> { adapter.setTryAgainPrintListenter(position -> {
//重試打印。 //重試打印。
ipDevicePrint(printerFileDevices.get(position), getPrintBitmapByPrintLocation(printerFileDevices.get(position).getName().trim()), (state, printerDeviceBean) -> { ipDevicePrint(printerFileDevices.get(position), getPrintBitmapByPrintLocation(printerFileDevices.get(position).getName()), (state, printerDeviceBean) -> {
//打印機打印狀態切換回調 //打印機打印狀態切換回調
}, (errorCode, printerDeviceBean) -> { }, (errorCode, printerDeviceBean) -> {
switch (errorCode) { switch (errorCode) {
......
...@@ -202,15 +202,16 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem ...@@ -202,15 +202,16 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
String port = etPort.getText().toString(); String port = etPort.getText().toString();
PrinterDeviceBean deviceBean; PrinterDeviceBean deviceBean;
if (TextUtil.isEmptyOrNullOrUndefined(port)) { if (TextUtil.isEmptyOrNullOrUndefined(port)) {
deviceBean = new PrinterDeviceBean(mEdPrintName.getText().toString().trim(), printerDeviceBean.getId(), GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), null, paperType); deviceBean = new PrinterDeviceBean(mEdPrintName.getText().toString().trim(), 0, GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), null, paperType);
} else { } else {
deviceBean = new PrinterDeviceBean(mEdPrintName.getText().toString().trim(), printerDeviceBean.getId(), GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), Integer.parseInt(port), paperType); deviceBean = new PrinterDeviceBean(mEdPrintName.getText().toString().trim(), 0, GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), Integer.parseInt(port), paperType);
} }
//添加打印機 //添加打印機
if (v.getId() == R.id.printer_add) { if (v.getId() == R.id.printer_add) {
if (isEditPrinter && printerDeviceBean != null) { if (isEditPrinter && printerDeviceBean != null) {
deviceBean.setRestaurantId(null); deviceBean.setRestaurantId(null);
deviceBean.setId(printerDeviceBean.getId());
mPresenter.updatePrinterInfo(deviceBean); mPresenter.updatePrinterInfo(deviceBean);
} else { } else {
mPresenter.addPrinter(deviceBean); mPresenter.addPrinter(deviceBean);
......
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