Commit f410baeb by Wyh

1、打印模塊優化 2、餐檯模式印單不打印食品問題 3、打印上菜紙閃退問題處理 4、餐檯模式結賬不打印食品問題

parent bc663d6d
......@@ -212,8 +212,6 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
mRootView.showMessage(OrderDetails.getVerifiAmountTip());
return;
}
//添加PRJ
addPrj(dataBean);
RequestBody requestBody = new FormBody.Builder()
.add("memberId", UserContext.newInstance().getMemberId() + "")
.add("orderId", dataBean.getID() + "")
......@@ -232,6 +230,8 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
@Override
public void onNext(@NonNull UpdateOrderStatusBean info) {
if (info != null) {
//添加PRJ
addPrj(dataBean);
if (TextUtil.isNotEmptyOrNullOrUndefined(info.getErrorMsg())) {
mRootView.showMessage(info.getErrorMsg());
}
......
......@@ -21,6 +21,7 @@ import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails.Companion.veri
import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails.Companion.verificationAmount
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
import com.gingersoft.gsa.cloud.common.core.user.UserContext
import com.gingersoft.gsa.cloud.common.logan.LoganManager
import com.gingersoft.gsa.cloud.common.service.GetInfoUpdateService
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
......@@ -261,6 +262,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
}, {
//報錯處理
LoganManager.w_delivery(LoganManager.EVENT_QUERY, "自動接單" + it.message)
})
}
}
......@@ -697,7 +699,6 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
// })
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_INSTRUCTION)
.addParam(PrintConstans.PRINT_LOADING, false)
.setActionName("printActivity")
.build()
.callAsyncCallbackOnMainThread { _, _ ->
......
......@@ -211,7 +211,7 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
private void organizeData(int position, List<PrjBean.DataBean.Bean> prjData) {
if (prjData.get(position).getParentId() == 0) {
//是主食品,判斷有沒有子食品,如果沒有子食品,直接打印主食品
if (position + 1 > prjData.size()) {
if (position + 1 >= prjData.size()) {
//沒有子食品
//直接打印
List<PrjBean.DataBean.Bean> printDatas = new ArrayList<>();
......
......@@ -24,6 +24,7 @@ import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
import com.gingersoft.gsa.cloud.common.core.user.UserContext
import com.gingersoft.gsa.cloud.common.function.FunctionManager
import com.gingersoft.gsa.cloud.common.ui.utils.BtnBuilder
import com.gingersoft.gsa.cloud.common.utils.ClipboardUtils
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils
......@@ -110,6 +111,11 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
getOrderDetails(orderId, binding)
}
initTopBar(qm_order_details_bar)
//訂單編號點擊事件
findViewById<TextView>(R.id.tv_order_no).setOnClickListener {
ClipboardUtils.copyText(tv_order_no.text)
showMessage("複製成功")
}
}
private fun initTopBar(topbar: QMUITopBar) {
......
......@@ -48,9 +48,6 @@ class HistoryFragment : BaseFragment(R.layout.fragment_other_order) {
//顯示彈窗
context?.let { context ->
var reasonDesc = it.reasonDesc
if (reasonDesc == null) {
reasonDesc = ""
}
OtherOrderUtils.showOrderDetailsDialog(context, it2, it.orderStatus, it.orderType,it.orderPayType,it.payType, it.status, reasonDesc, true) { _, _, _ ->
//重印
showLoading()
......
......@@ -113,7 +113,7 @@
<include layout="@layout/include_horizontal_color_eee_dividing_line" />
<!-- 訂單編號-->
<TextView
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_order_no"
style="@style/otherOrder_details_twelve_text_Style"
android:layout_width="wrap_content"
......
......@@ -401,7 +401,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
LoganManager.w_home(TAG, LoganManager.EVENT_CLICK + name);
switch (name) {
switch (name.trim()) {
case "餐檯模式":
CC.obtainBuilder(ComponentName.COMPONENT_TABLE)
.setActionName("showTableActivity")
......
......@@ -18,7 +18,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:maxLength="4"
android:layout_marginTop="@dimen/dp_8"
android:text="餐檯模式"
android:singleLine="true"
......
......@@ -377,7 +377,7 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
.setActionName("printActivity")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_BILL)
.addParam(PrintConstans.PRINT_CONTENT, printContent)
.addParam(PrintConstans.PRINT_ORDER_NO, mMealPayResultParam.getMealOrderPayRequest().getOrderId())
.addParam(PrintConstans.PRINT_ORDER_NO, String.valueOf(mMealPayResultParam.getMealOrderPayRequest().getOrderId()))
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
Log.e("error", "是否成功打印:" + result.isSuccess());
......
......@@ -46,8 +46,8 @@ public class EpsonPrint implements ReceiveListener {
try {
this.resultListener = resultListener;
this.receiveListener = receiveListener;
//第一個參數是機型,第二個參數是語言,
mPrinter = new Printer(Printer.TM_U220, Printer.MODEL_KOREAN, context);
//第一個參數是機型,第二個參數是語言,因為是打印圖片,語言沒有影響
mPrinter = new Printer(Printer.TM_U220, Printer.MODEL_TAIWAN, context);
} catch (Exception e) {
e.printStackTrace();
return false;
......@@ -166,12 +166,12 @@ public class EpsonPrint implements ReceiveListener {
public void putPrintString(String ip, int paperWidth, List<PrintInfoBean> printInfoBeans, PrintExecutor.OnPrintResultListener printResultListener) {
if (mPrinter == null) {
printResultListener.onResult(0, null);
printResultListener.onResult(0);
return;
}
connectByIp(ip, mPrinter.getStatus());
if (mPrinter == null) {
printResultListener.onResult(0, null);
printResultListener.onResult(0);
return;
}
mPrinter.clearCommandBuffer();
......@@ -196,7 +196,7 @@ public class EpsonPrint implements ReceiveListener {
mPrinter.sendData(Printer.PARAM_DEFAULT);
} catch (Exception e) {
e.printStackTrace();
printResultListener.onResult(0, null);
printResultListener.onResult(0);
mPrinter.clearCommandBuffer();
}
}
......@@ -290,7 +290,6 @@ public class EpsonPrint implements ReceiveListener {
mPrinter.sendData(Printer.PARAM_DEFAULT);
} catch (Exception e) {
updatePrintState(PrintSocketHolder.ERROR_4);
mPrinter.clearCommandBuffer();
disconnectPrinter();
isPrint = false;
......@@ -358,7 +357,7 @@ public class EpsonPrint implements ReceiveListener {
private void updatePrintState(int code){
if(resultListener != null){
resultListener.onResult(code,null);
resultListener.onResult(code);
}
}
......
......@@ -17,10 +17,14 @@ public class IpPrintMaker implements PrintDataMaker {
private int width; // 打印的圖片寬度,紙張寬度
private List<Bitmap> bitmaps;
private String ip;
private int port;
public IpPrintMaker(int width, List<Bitmap> bitmaps) {
public IpPrintMaker(int width, List<Bitmap> bitmaps, String ip, int port) {
this.width = width;
this.bitmaps = bitmaps;
this.ip = ip;
this.port = port;
}
@Override
......@@ -39,11 +43,12 @@ public class IpPrintMaker implements PrintDataMaker {
data.add(printer.getDataAndReset());
}
data.add(printer.getDataAndClose());
for (int i = 0; i < bitmaps.size(); i++){
for (int i = 0; i < bitmaps.size(); i++) {
bitmaps.get(i).recycle();
}
return data;
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<>();
}
}
......@@ -52,4 +57,15 @@ public class IpPrintMaker implements PrintDataMaker {
public String getPrjIds() {
return null;
}
@Override
public String getIp() {
return ip;
}
@Override
public int getPort() {
return port;
}
}
......@@ -13,6 +13,14 @@ import java.util.List;
*/
public class OpenCashBoxMaker implements PrintDataMaker {
private String ip;
private int port;
public OpenCashBoxMaker(String ip, int port) {
this.ip = ip;
this.port = port;
}
@Override
public List<byte[]> getPrintData() {
ArrayList<byte[]> data = new ArrayList<>();
......@@ -31,4 +39,14 @@ public class OpenCashBoxMaker implements PrintDataMaker {
public String getPrjIds() {
return null;
}
@Override
public String getIp() {
return ip;
}
@Override
public int getPort() {
return port;
}
}
......@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.common.constans.AppConstans;
import com.gingersoft.gsa.cloud.common.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails;
......@@ -12,6 +13,7 @@ import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInf
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.cart.ShoppingCart;
......@@ -51,7 +53,8 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext, PrinterDeviceBean deviceBean) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
List<Bitmap> bitmaps = new ArrayList<>();
bitmaps.add(getBitmap(mContext, deviceBean));
Bitmap bitmap = getBitmap(mContext, deviceBean);
bitmaps.add(bitmap);
bitmapMaps.put("", bitmaps);
return bitmapMaps;
}
......@@ -208,7 +211,7 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
layout.addView(getLine(mContext));
//食品信息
layout.addView(getDiningFoodList(mContext, mPrintBillContent.getFoodItemList(), deviceBean, 1, true));
layout.addView(getDiningFoodList(mContext, mPrintBillContent.getFoodItemList(), deviceBean, 1, true));
layout.addView(getHalfLine(mContext));
//訂單金額信息
......@@ -235,7 +238,7 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
layout.addView(getTableMealMemberIntegerView(mContext, getOrderMemberInfo(), mPrintBillContent.getIntegralQrCode()));
return zoomBitmap(deviceBean, viewToBitmap(mContext, layout));
return viewToZoomBitmap(mContext, layout, deviceBean);
}
......
......@@ -6,8 +6,10 @@ import android.view.Gravity;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
......@@ -31,6 +33,7 @@ import static com.joe.print.mvp.print.common.HtmlContract.LABLE_DIV;
public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
private PrintServingPaperContent mPrintServingPaperContent;
private final String TAG = getClass().getSimpleName();
@Override
protected void setPrintContent(PrintServingPaperContent printContent) {
......@@ -41,7 +44,11 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext, PrinterDeviceBean printerDeviceBean) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
List<Bitmap> bitmaps = new ArrayList<>();
bitmaps.add(getBitmap(mContext, printerDeviceBean));
Bitmap bitmap = getBitmap(mContext, printerDeviceBean);
if (bitmap == null) {
return null;
}
bitmaps.add(bitmap);
bitmapMaps.put("", bitmaps);
return bitmapMaps;
}
......@@ -135,6 +142,7 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
List<PrintFoodItem> foodItemList = mPrintServingPaperContent.getFoodItemList();
if (foodItemList == null || foodItemList.size() <= 0) {
LoganManager.w_printer(TAG, "生成打印數據失敗,上菜紙沒有食品");
return null;
}
......
......@@ -4,12 +4,15 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.view.Gravity;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.common.constans.AppConstans;
import com.gingersoft.gsa.cloud.common.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInfoUtils;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.cart.ShoppingCart;
......@@ -22,6 +25,7 @@ import com.joe.print.R;
import com.joe.print.mvp.model.bean.BillingBean;
import com.joe.print.mvp.model.bean.HtmlLable;
import com.joe.print.mvp.print.common.HtmlContract;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -37,6 +41,7 @@ import static com.joe.print.mvp.print.common.HtmlContract.LABLE_P;
public class PrintSlip extends PrinterRoot<PrintSlipContent> {
private PrintSlipContent mPrintSlipContent;
private final String TAG = getClass().getSimpleName();
@Override
protected void setPrintContent(PrintSlipContent printContent) {
......@@ -47,8 +52,13 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext, PrinterDeviceBean deviceBean) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
List<Bitmap> bitmaps = new ArrayList<>();
bitmaps.add(getBitmap(mContext, deviceBean));
bitmapMaps.put("", bitmaps);
Bitmap bitmap = getBitmap(mContext, deviceBean);
if (bitmap != null) {
bitmaps.add(getBitmap(mContext, deviceBean));
bitmapMaps.put("", bitmaps);
} else {
return null;
}
//這裡可能還需要加上廚房單的內容,有未送單的食品時。
// PrintKitchen kitchen = new PrintKitchen();
// Map<String, List<Bitmap>> bitmapMaps = new HashMap<>(kitchen.getPrintBitmap(mContext, deviceBean));
......@@ -69,7 +79,7 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
List<PrintFoodItem> foodList = mPrintSlipContent.getFoodItemList();
if (foodList.size() == 0 ) {
if (foodList.size() == 0) {
return new String[]{"<html><body></body></html>"};
}
......@@ -175,6 +185,7 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
List<PrintFoodItem> foodList = mPrintSlipContent.getFoodItemList();
if (foodList == null || foodList.size() <= 0) {
LoganManager.w_printer(TAG, "生成打印數據失敗,印單沒有食品");
return null;
}
......
......@@ -275,7 +275,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
if (isSuccess) {
listener.printSuccess();
} else {
listener.printFailure("打印失敗");
listener.printFailure("sunmi打印失敗");
}
}
......@@ -323,42 +323,41 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
}
public void ipDevicePrint(PrinterDeviceBean printerDeviceBean, List<Bitmap> bitmaps) {
ipDevicePrint(printerDeviceBean, bitmaps, this, this);
}
private EpsonPrint mPrinter;
private PrintExecutor executor;
/**
* ip設備打印
*/
private void ipDevicePrint(PrinterDeviceBean
printerDeviceBean, List<Bitmap> bitmaps, PrintSocketHolder.OnStateChangedListener
stateChangedListener, PrintExecutor.OnPrintResultListener resultListener) {
public void ipDevicePrint(PrinterDeviceBean
printerDeviceBean, List<Bitmap> bitmaps) {
//獲取打印機機型,如果是EPSON的打印機,調用EPSON的打印方法
if ((printerDeviceBean.getPrinterName() != null && printerDeviceBean.getPrinterName().toLowerCase().contains("EPSON".toLowerCase()))
&& (printerDeviceBean.getModel() != null && printerDeviceBean.getModel().toLowerCase().contains("TM-U220B".toLowerCase()))) {
ThreadPoolManager.getInstence().putExecutableTasks(() -> {
mPrinter = EpsonPrint.getInstance();
mPrinter.setPrint(false);
mPrinter.initializeObject(GsaCloudApplication.getAppContext(), PrinterRoot.this, PrinterRoot.this);
for (int j = 0; j < bitmaps.size(); j++) {
mPrinter.putPrintData(printerDeviceBean.getIp(), bitmaps.get(j));
}
}
);
} else {
if (executor == null) {
executor = new PrintExecutor(printerDeviceBean);
executor.setOnStateChangedListener(stateChangedListener);
executor.setOnPrintResultListener(resultListener);
} else {
executor.setPrinterDeviceBean(printerDeviceBean);
if ((printerDeviceBean.getPrinterName() != null && printerDeviceBean.getPrinterName().toLowerCase().contains("EPSON".toLowerCase()))) {
if (printerDeviceBean.getModel() != null) {
if (printerDeviceBean.getModel().toLowerCase().contains("TM-U220B".toLowerCase())) {
ThreadPoolManager.getInstence().putExecutableTasks(() -> {
EpsonPrint mPrinter = EpsonPrint.getInstance();
mPrinter.setPrint(false);
mPrinter.initializeObject(GsaCloudApplication.getAppContext(), PrinterRoot.this, PrinterRoot.this);
for (int j = 0; j < bitmaps.size(); j++) {
mPrinter.putPrintData(printerDeviceBean.getIp(), bitmaps.get(j));
}
}
);
return;
}
}
IpPrintMaker maker = new IpPrintMaker(480, bitmaps);
executor.doPrinterRequestAsync(maker);
}
ipPrint(printerDeviceBean, bitmaps, this, this);
}
private void ipPrint(PrinterDeviceBean printerDeviceBean, List<Bitmap> bitmaps, PrintSocketHolder.OnStateChangedListener stateChangedListener, PrintExecutor.OnPrintResultListener resultListener) {
if (executor == null) {
executor = new PrintExecutor()
.setOnStateChangedListener(stateChangedListener)
.setOnPrintResultListener(resultListener);
}
IpPrintMaker maker = new IpPrintMaker(480, bitmaps, printerDeviceBean.getIp(), printerDeviceBean.getPort());
executor.doPrinterRequestAsync(maker);
}
public void usbPrint(Context context, List<Bitmap> bitmaps) {
......@@ -408,31 +407,23 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
printerFinder.startFinder();
}
public void transmitPrjToPc(PrinterDeviceBean defaultPrint) {
}
/**
* view轉bitmap
*
* @param context
* @param view
* @return
* view轉為縮放後的bitmap
*/
final Bitmap viewToBitmap(Context context, View view) {
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//轉為bitmap
return LayoutToBitmapUtils.loadBitmapFromView(view);
}
final Bitmap viewToZoomBitmap(Context context, View view, PrinterDeviceBean printerDeviceBean) {
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//轉為bitmap
return zoomBitmap(printerDeviceBean, LayoutToBitmapUtils.loadBitmapFromView(view));
}
public Bitmap zoomBitmap(PrinterDeviceBean printerDeviceBean, Bitmap bitmap) {
/**
* 縮放bitmap
*
* @param printerDeviceBean
* @param bitmap
* @return
*/
private Bitmap zoomBitmap(PrinterDeviceBean printerDeviceBean, Bitmap bitmap) {
int printWidth;
if (printerDeviceBean != null && printerDeviceBean.getPaperSpecification() != null) {
printWidth = Double.valueOf(printerDeviceBean.getPaperSpecification()).intValue();
......@@ -444,10 +435,10 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
@Override
public void onResult(int errorCode, PrinterDeviceBean printerDeviceBean) {
public void onResult(int errorCode) {
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess(printerDeviceBean);
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
printSuccess();
return;
case PrintSocketHolder.ERROR_1:
......@@ -477,7 +468,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
LoganManager.w_printer(TAG, "打印失败");
break;
}
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(errorCode, printerDeviceBean);
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(errorCode);
setPrintState(errorCode);
}
......@@ -494,7 +485,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
@Override
public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
public void onStateChanged(int state) {
setPrintState(state);
}
......@@ -832,6 +823,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
/**
* 獲取食品列表
* 結賬單、印單。外送都用這個
*
* @param mContext
* @param foodList 食品信息
* @param deviceBean 打印設備
......@@ -854,6 +846,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
/**
* 結賬單和印單
*
* @param mContext
* @param billingBeans
* @return
......@@ -865,6 +858,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
/**
* 結賬單,支付方式
*
* @param mContext
* @param payBillMoneys 支付方式數據
* @return
......
......@@ -22,19 +22,14 @@ public class TestPrintMaker implements PrintDataMaker {
private List<PrintInfoBean> printInfoBeans;
private Bitmap bitmap;
public TestPrintMaker(PrinterWriter printer, List<PrintInfoBean> printInfoBeans) {
private String ip;
private int port;
public TestPrintMaker(PrinterWriter printer, List<PrintInfoBean> printInfoBeans, String ip, int port) {
this.printer = printer;
this.printInfoBeans = printInfoBeans;
}
public TestPrintMaker( List<PrintInfoBean> printInfoBeans) {
this.printInfoBeans = printInfoBeans;
}
public TestPrintMaker(PrinterWriter printer) {
this.printer = printer;
}
public TestPrintMaker(Bitmap bitmap) {
this.bitmap = bitmap;
this.ip = ip;
this.port = port;
}
@Override
......@@ -71,6 +66,16 @@ public class TestPrintMaker implements PrintDataMaker {
return null;
}
@Override
public String getIp() {
return ip;
}
@Override
public int getPort() {
return port;
}
private void print(PrintInfoBean printInfoBean, int i) throws IOException {
// if (i == 0) {
// location = 0;
......
......@@ -17,11 +17,16 @@ import java.util.Map;
public class PrjPrintMaker implements PrintDataMaker {
private Map<String, Bitmap> bitmapMap;
private String ip;
private int port;
public PrjPrintMaker(Map<String, Bitmap> bitmapMap) {
public PrjPrintMaker(Map<String, Bitmap> bitmapMap, String ip, int port) {
this.bitmapMap = bitmapMap;
this.ip = ip;
this.port = port;
}
@Override
public List<byte[]> getPrintData() {
ArrayList<byte[]> data = new ArrayList<>();
......@@ -48,4 +53,14 @@ public class PrjPrintMaker implements PrintDataMaker {
}
return "";
}
@Override
public String getIp() {
return ip;
}
@Override
public int getPort() {
return port;
}
}
......@@ -16,6 +16,7 @@ import com.epson.epos2.Epos2Exception;
import com.epson.epos2.printer.Printer;
import com.epson.epos2.printer.PrinterStatusInfo;
import com.epson.epos2.printer.ReceiveListener;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
......@@ -41,7 +42,10 @@ import com.gingersoft.gsa.cloud.print.bean.UpdateBean;
import com.hyweb.n5.lib.constant.PrinterConstant;
import com.hyweb.n5.lib.util.PrinterUtil;
import com.hyweb.n5.server.aidl.IOnPrintCallback;
import com.joe.print.mvp.print.EpsonPrint;
import com.joe.print.mvp.print.IpPrintMaker;
import com.joe.print.mvp.print.PrintPrjKitchen;
import com.joe.print.mvp.print.PrinterRoot;
import com.joe.print.mvp.print.common.PrinterFinderCallback;
import com.joe.print.mvp.print.common.SendResultCode;
import com.joe.print.mvp.print.maker.PrjPrintMaker;
......@@ -114,6 +118,11 @@ public class PrjService extends Service implements ReceiveListener {
@Override
public void onDestroy() {
super.onDestroy();
printerFinder.unregisterReceiver();
PrintSocketHolder.getInstance().closeSocket();
//關閉針式連接
EpsonPrint.getInstance().disconnectPrinter();
EpsonPrint.getInstance().finalizeObject();
LoganManager.w_printer(TAG, "onDestroy");
}
......@@ -160,6 +169,10 @@ public class PrjService extends Service implements ReceiveListener {
pollDisposable = RxJavaUtils.polling(10, 30, TimeUnit.SECONDS)
.subscribe(aLong -> {
LoganManager.w_printer(TAG, "獲取Prj數據-->");
//輪詢時,關閉打印機連接,避免一直佔用打印機socket連接
EpsonPrint.getInstance().disconnectPrinter();
EpsonPrint.getInstance().finalizeObject();
//獲取prj數據
getPrjInfo();
});
}
......@@ -215,8 +228,9 @@ public class PrjService extends Service implements ReceiveListener {
private int totalPrj;
private int currentIndex;
private String prjJson = "";
private void newPrint(String json) {
// json = prjJson;
Map<String, List<PrjBean.DataBean.Bean>> listMap = new HashMap<>();
currentIndex = 0;
totalPrj = 0;
......@@ -503,88 +517,61 @@ public class PrjService extends Service implements ReceiveListener {
hookPrinterBitmap(bitmapMaps, beans);
EpsIds = getPrintIds(bitmapMaps);
//第一個參數是機型,第二個參數是語言,
Printer mPrinter = null;
try {
mPrinter = new Printer(Printer.TM_U220, Printer.MODEL_KOREAN, this);
mPrinter.setReceiveEventListener(this);
} catch (Epos2Exception e) {
e.printStackTrace();
updatePrjFailure(getPrintIds(bitmapMaps));
}
if (mPrinter != null) {
try {
mPrinter.clearCommandBuffer();
for (int i = 0; i < bitmapMaps.size(); i++) {
for (Map.Entry<String, Bitmap> mapEntry : bitmapMaps.get(i).entrySet()) {
mPrinter.addImage(mapEntry.getValue(), 0, 0,
mapEntry.getValue().getWidth(),
mapEntry.getValue().getHeight(),
Printer.COLOR_1,
Printer.MODE_MONO_HIGH_DENSITY,//高密度
Printer.HALFTONE_DITHER,//半色調抖動
Printer.PARAM_DEFAULT,
Printer.COMPRESS_NONE);//壓縮
mPrinter.addCut(Printer.CUT_FEED);
}
}
} catch (Epos2Exception e) {
e.printStackTrace();
updatePrjFailure(getPrintIds(bitmapMaps));
mPrinter.clearCommandBuffer();
}
try {
PrinterPlugins.getOnPrinterFlowHandler().connectionBefore("針式打印機", printerDeviceBean.getIp(), printerDeviceBean.getPort(), 0, 0);
mPrinter.connect("TCP:" + printerDeviceBean.getIp(), Printer.PARAM_DEFAULT);
mPrinter.sendData(Printer.PARAM_DEFAULT);
} catch (Exception e) {
e.printStackTrace();
updatePrjFailure(getPrintIds(bitmapMaps));
PrinterPlugins.getOnPrinterFlowHandler().connectionError(e);
while (true) {
try {
PrinterPlugins.getOnPrinterFlowHandler().disconnect();
mPrinter.disconnect();
break;
} catch (final Exception ex) {
if (ex instanceof Epos2Exception) {
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING.
if (((Epos2Exception) ex).getErrorStatus() == Epos2Exception.ERR_PROCESSING) {
} else {
break;
}
} else {
break;
}
}
EpsonPrint mPrinter = EpsonPrint.getInstance();
mPrinter.setPrint(false);
boolean initResult = EpsonPrint.getInstance().initializeObject(this, this, new PrintExecutor.OnPrintResultListener() {
@Override
public void onResult(int errorCode) {
switch (errorCode) {
case PrintSocketHolder.ERROR_1:
LoganManager.w_printer(TAG, "針式創建打印數據失敗");
break;
case PrintSocketHolder.ERROR_2:
LoganManager.w_printer(TAG, "針式沒紙或未連接");
break;
case PrintSocketHolder.ERROR_4:
LoganManager.w_printer(TAG, "針式發送打印數據失敗");
break;
default:
break;
}
mPrinter.clearCommandBuffer();
mPrinter.setReceiveEventListener(null);
updatePrjFailure(EpsIds);
}
} else {
});
if (!initResult) {
updatePrjFailure(EpsIds);
return;
}
PrinterPlugins.getOnPrinterFlowHandler().connectionBefore("針式打印機", printerDeviceBean.getIp(), printerDeviceBean.getPort(), 0, 0);
for (int i = 0; i < bitmapMaps.size(); i++) {
for (Map.Entry<String, Bitmap> mapEntry : bitmapMaps.get(i).entrySet()) {
mPrinter.putPrintData(printerDeviceBean.getIp(), mapEntry.getValue());
}
}
}
PrintExecutor executor;
/**
* ip設備打印
*/
public void ipPrint(PrinterDeviceBean printerDeviceBean, List<Map<String, Bitmap>> bitmapMaps) {
for (int i = 0; i < bitmapMaps.size(); i++) {
PrintExecutor executor = new PrintExecutor(printerDeviceBean);
executor.setOnPrjPrintResultListener((errorCode, ids) -> {
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
//更新狀態
updatePrjSuccess(ids);
break;
case PrintSocketHolder.ERROR_2:
updatePrjFailure(ids);
break;
}
});
PrjPrintMaker maker = new PrjPrintMaker(bitmapMaps.get(i));
if (executor == null) {
executor = new PrintExecutor().setOnPrjPrintResultListener((errorCode, ids) -> {
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
//更新狀態
updatePrjSuccess(ids);
break;
case PrintSocketHolder.ERROR_2:
updatePrjFailure(ids);
break;
}
});
}
PrjPrintMaker maker = new PrjPrintMaker(bitmapMaps.get(i), printerDeviceBean.getIp(), printerDeviceBean.getPort());
executor.doPrinterRequestAsync(maker);
}
}
......@@ -599,10 +586,10 @@ public class PrjService extends Service implements ReceiveListener {
UsbPrint usbPrint = new UsbPrint(mContext, (code, printId) -> {
//打印結果
if (code == SendResultCode.SEND_SUCCESS) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess(null);
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
updatePrjSuccess(key);
} else if (code == SendResultCode.SEND_FAILED) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(code, null);
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(code);
updatePrjFailure(key);
}
});
......@@ -647,6 +634,12 @@ public class PrjService extends Service implements ReceiveListener {
}
}
/**
* 獲取本次打印的prj id
*
* @param bitmapMaps
* @return
*/
private String getPrintIds(List<Map<String, Bitmap>> bitmapMaps) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < bitmapMaps.size(); i++) {
......@@ -880,11 +873,11 @@ public class PrjService extends Service implements ReceiveListener {
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) {
//針式打印回調
if (i == 0) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess(null);
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
//打印成功
updatePrjSuccess(EpsIds);
} else {
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(i, null);
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(i);
//打印失敗
updatePrjFailure(EpsIds);
}
......
......@@ -14,6 +14,7 @@ import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import androidx.annotation.NonNull;
......@@ -25,11 +26,14 @@ import androidx.recyclerview.widget.RecyclerView;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.print.NewPrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
......@@ -47,6 +51,7 @@ import com.joe.print.R;
import com.joe.print.di.component.DaggerPrintComponent;
import com.joe.print.mvp.contract.PrintContract;
import com.joe.print.mvp.presenter.PrintPresenter;
import com.joe.print.mvp.print.EpsonPrint;
import com.joe.print.mvp.print.OpenCashBoxMaker;
import com.joe.print.mvp.print.PrintInstruction;
import com.joe.print.mvp.print.PrintListener;
......@@ -55,8 +60,17 @@ import com.joe.print.mvp.print.PrinterRoot;
import com.joe.print.mvp.print.utils.MyPrintUtils;
import com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter;
import com.joe.print.mvp.ui.adapter.PrintProgressAdapter;
import com.joe.print.mvp.ui.view.SelectPrintDevicePopup;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.CenterPopupView;
import com.lxj.xpopup.enums.PopupAnimation;
import com.lxj.xpopup.impl.LoadingPopupView;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import com.xuexiang.rxutil2.rxjava.task.RxAsyncTask;
import com.xuexiang.rxutil2.rxjava.task.RxUITask;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
......@@ -93,7 +107,6 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
public class PrintActivity extends BaseActivity<PrintPresenter> implements PrintContract.View, DialogInterface.OnDismissListener, PrintListener, PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener {
public final static int ADD_PRINT_CODE = 1001;//添加打印機回調
public final static int DIMISS_LOADING = 1002;//關閉加載窗
public final static int FINISH = 1003;//關閉頁面
public final static int ADD_PRINT_DEVICE = 1004;//添加打印機
public final static int LACK_OF_PAPER = 1005;//缺紙
......@@ -103,9 +116,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
private String callId;
private PrinterRoot printerInIt;
private Dialog mLoadingDialog;
private TextView mTvLoadingTip;
/**
* 0:上菜紙
* 1:印單
......@@ -117,8 +127,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
*/
private int type;
private String mOrderNo;
//是否顯示打印等待彈窗
private boolean isShowDialog;
/**
* 打印進度
*/
private LoadingPopupView loadingPopup;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
......@@ -134,169 +146,182 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
public int initView(@Nullable Bundle savedInstanceState) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
return 0; //R.layout.print_bitmap如果你不需要框架帮你设置 setContentView(id) 需要 自行设置,请返回 0
return 0;//R.layout.print_bitmap;如果你不需要框架帮你设置 setContentView(id) 需要 自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
loadingPopup = new XPopup.Builder(mContext)
.popupAnimation(PopupAnimation.ScaleAlphaFromCenter)
.asLoading("加载中...");
loadingPopup.show();
callId = CCUtil.getNavigateCallId(this);
//獲取打印類型,根據打印類型生成對應的bitmap
type = CCUtil.getNavigateParam(this, PrintConstans.PRINT_TYPE, PrintConstans.PRINT_TEST);
//獲取打印內容
PrintContent printContent = CCUtil.getNavigateParam(this, PrintConstans.PRINT_CONTENT, null);
//訂單編號
mOrderNo = CCUtil.getNavigateParam(this, PrintConstans.PRINT_ORDER_NO, "");
isShowDialog = CCUtil.getNavigateParam(this, PrintConstans.PRINT_LOADING, true);
//根據打印類型獲取對應的執行類
printerInIt = PrinterRoot.getPrinterByType(type, printContent);
if (printerInIt != null) {
printerInIt.setPrintListener(this);
}
//初始化打印配置
initPrintConfig(printContent);
}
private int selectPrint = -1;
/**
* 如果沒有默認打印機,彈窗彈出讓用戶選擇打印機
*/
private PrinterDeviceBean defaultPrint;
private void initPrintConfig(PrintContent printContent) {
PrintCurrencyBean printCurrencyBean;
PrinterDeviceBean defaultPrint;
//獲取通用打印配置,不同的打印
if (type == PRINT_OTHER_ORDER || type == PRINT_OTHER_CLOSING) {
//外賣的通用打印配置
printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, PRINT_BILL);
}
// else if (type == 0 || type == 1 || type == 2) {
// //堂食的通用打印配置
// printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, 1);
// }
else {
printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, PRINT_SLIP);
}
//獲取通用打印配置
PrintCurrencyBean printCurrencyBean = getCurrencyConfig();
//獲取打印機列表
printerDeviceBeans = mPresenter.getAllPrintList(this);
if (type == PrintConstans.PRINT_TEST) {
//如果是打印測試
//如果是打印測試,就取由頁面傳遞過來的打印機信息
defaultPrint = CCUtil.getNavigateParam(this, "deviceBean", null);
} else {
// 獲取默認打印機,如果用戶沒有配置默認打印機,就取最近使用的一個.
// 如果沒有最近使用的打印機,並且當前餐廳只有一台打印機,就用這一台打印機打印
defaultPrint = mPresenter.getDefaultPrintInList(printerDeviceBeans, (String) SPUtils.get("defaultPrint", ""));
}
//生成餐檯打印的一些信息
PrinterPlugins.getOnPrinterFlowHandler().onPrinterDataBefore(type, type, GsonUtils.GsonString(printContent), GsonUtils.GsonString(defaultPrint));
//廚房單
//如果是打印廚房單
if (type == PrintConstans.PRINT_KITCHEN) {
List<PrjBean.DataBean.Bean> printDatas = CCUtil.getNavigateParam(this, "prjBeans", null);
Map<String, List<PrjBean.DataBean.Bean>> prjMap = PrintPrjKitchen.getPrjMap();
String printLocation = null;
for (PrjBean.DataBean.Bean prjBean : printDatas) {
if (printLocation == null) {
if (TextUtil.isNotEmptyOrNullOrUndefined(prjBean.getPrintPosition())) {
printLocation = prjBean.getPrintPosition();
defaultPrint = mPresenter.getPrinterDeviceBeanByName(printerDeviceBeans, printLocation);
if (defaultPrint == null) {
printFailure("未找到對應的打印機");
return;
}
} else {
if (defaultPrint == null) {
printLocation = "";
} else {
printLocation = defaultPrint.getName();
}
}
}
prjBean.setPrintPosition(printLocation);
prjBean.setCurrentIndex(1);
}
prjMap.put("", printDatas);
//設置廚房單的信息,並且獲取到這個廚房單的打印位置
defaultPrint = setKitChenPrj(defaultPrint);
}
//如果沒有打印機
if (defaultPrint == null) {
//沒有默認打印機,查看當前餐廳有沒有打印機
//如果當前餐廳有打印機,彈出彈窗讓用戶選擇一個打印機打印
if (printerDeviceBeans != null && printerDeviceBeans.size() > 0) {
PrintCurrencyBean finalPrintCurrencyBean = printCurrencyBean;
new DialogUtils(mContext, R.layout.print_dialog_internet_list) {
@Override
public void initLayout(ViewHepler hepler, Dialog dialog) {
RecyclerView mRvPrintList = hepler.getView(R.id.rv_print_list);
DialogPrinterListAdapter printListAdapter = new DialogPrinterListAdapter(printerDeviceBeans, mContext);
mRvPrintList.setLayoutManager(new LinearLayoutManager(mContext));
//分割线
mRvPrintList.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(mContext, R.color.line_color)));
mRvPrintList.setAdapter(printListAdapter);
printListAdapter.setOnItemClickListener((adapter, view, position) -> {
//用戶選擇的ip打印機打印
PrinterDeviceBean defaultPrint = MyPrintUtils.configPrinterProperties(finalPrintCurrencyBean, printerDeviceBeans.get(position));
printByDevice(defaultPrint);
selectPrint = position;
SPUtils.put("defaultPrint", printerDeviceBeans.get(position).getName());
dialog.dismiss();
});
SelectPrintDevicePopup selectPrintDevicePopup = new SelectPrintDevicePopup(mContext, printerDeviceBeans);
selectPrintDevicePopup.setOnItemClickListener((adapter, view, position) -> {
//用戶選擇的ip打印機打印
//將打印機和通用配置合併
selectPrintDevicePopup.dismiss();
this.defaultPrint = MyPrintUtils.configPrinterProperties(printCurrencyBean, printerDeviceBeans.get(position));
printByDevice(this.defaultPrint);
SPUtils.put("defaultPrint", printerDeviceBeans.get(position).getName());
}).setOnDismissListener(() -> {
//如果彈窗已經關閉,打印機還是為空,說明用戶沒有選擇打印機
if (this.defaultPrint == null) {
printFailure("沒有找到打印機,無法打印");
finish();
}
}
.setHeight(ArmsUtils.getScreenHeidth(mContext) / 2)
.setWidth((int) (ArmsUtils.getScreenWidth(mContext) * 0.8))
.setOnDismissListener(dialog -> {
if (selectPrint == -1) {
printFailure("未選擇打印機");
}
})
.show();
});
new XPopup.Builder(mContext).asCustom(selectPrintDevicePopup).show();
} else {
//沒有打印機
ToastUtils.show(mContext, "沒有打印機,請先添加打印機");
}
} else {
//將打印機和通用配置合併
defaultPrint = MyPrintUtils.configPrinterProperties(printCurrencyBean, defaultPrint);
printByDevice(defaultPrint);
}
}
/**
* 設置廚房單打印數據
*
* @param defaultPrint 默認打印機
* @return 如果prj有指定打印機,並且找到了,就返回
*/
private PrinterDeviceBean setKitChenPrj(PrinterDeviceBean defaultPrint) {
List<PrjBean.DataBean.Bean> printDatas = CCUtil.getNavigateParam(this, "prjBeans", null);
Map<String, List<PrjBean.DataBean.Bean>> prjMap = PrintPrjKitchen.getPrjMap();
String printLocation = null;
for (PrjBean.DataBean.Bean prjBean : printDatas) {
if (printLocation == null) {
if (TextUtil.isNotEmptyOrNullOrUndefined(prjBean.getPrintPosition())) {
printLocation = prjBean.getPrintPosition();
return mPresenter.getPrinterDeviceBeanByName(printerDeviceBeans, printLocation);
} else {
if (defaultPrint == null) {
printLocation = "";
} else {
printLocation = defaultPrint.getName();
}
}
}
prjBean.setPrintPosition(printLocation);
prjBean.setCurrentIndex(1);
}
prjMap.put("", printDatas);
return null;
}
//打印邏輯,獲取對應的打印配置--打印機或是通用配置
//根據配置生成配置好的圖片----生成圖片邏輯:把打印的單分為幾個模塊,再由不同的單拼接出對應的單,(如果是針式,生成對應的文字)
//再獲取打印方式(IP、本機、USB、藍牙或其他的),調用打印
/**
* 獲取通用打印配置
*/
private PrintCurrencyBean getCurrencyConfig() {
PrintCurrencyBean printCurrencyBean;
if (type == PRINT_OTHER_ORDER || type == PRINT_OTHER_CLOSING) {
//外賣的通用打印配置
printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, PRINT_BILL);
}
// else if (type == 0 || type == 1 || type == 2) {
// //堂食的通用打印配置
// printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, 1);
// }
else {
printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, PRINT_SLIP);
}
return printCurrencyBean;
}
/**
* 打印邏輯,獲取對應的打印配置--打印機或是通用配置
* 根據配置生成配置好的圖片----生成圖片邏輯:把打印的單分為幾個模塊,再由不同的單拼接出對應的單,(如果是針式,生成對應的文字)
* 再獲取打印方式(IP、本機、USB、藍牙或其他的),調用打印
*
* @param defaultPrint 打印機
*/
private void printByDevice(PrinterDeviceBean defaultPrint) {
//獲取對應的打印類
if (printerInIt instanceof PrintInstruction) {
//開錢箱
PrintExecutor executor = new PrintExecutor(defaultPrint);
executor.doPrinterRequestAsync(new OpenCashBoxMaker());
PrintExecutor executor = new PrintExecutor();
executor.doPrinterRequestAsync(new OpenCashBoxMaker(defaultPrint.getIp(), defaultPrint.getPort()));
CC.sendCCResult(callId, CCResult.success());
} else {
if (isShowDialog) {
initDialog();
}
Map<String, List<Bitmap>> listMap;
List<Bitmap> zoomBitmaps = null;
String[] BBPosPrintDatas = null;
if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) {
//本機打印並且是BBPOS
//獲取打印數據
BBPosPrintDatas = printerInIt.getPrintDatas(mContext, defaultPrint);
if (BBPosPrintDatas == null) {
printFailure("暫不支持打印此單");
return;
}
} else {
//獲取打印圖片
listMap = printerInIt.getPrintBitmapByCount(mContext, defaultPrint);
if (listMap != null) {
zoomBitmaps = listMap.get("");
} else {
printFailure("暫不支持打印此單");
printFailure("打印失敗,生成打印數據失敗");
return;
}
if (zoomBitmaps != null && zoomBitmaps.size() > 0) {
} else {
if (zoomBitmaps == null) {
//打印失敗
printFailure("打印失敗,生成打印數據失敗");
} else {
//保存打印圖片到本地
setPrinterBitmapToLocation(type, type, mOrderNo, listMap);
}
setPrinterBitmapToLocation(type, type, mOrderNo, listMap);
}
//獲得對應的圖片
if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_IP) {
//IP打印
printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps);
......@@ -306,11 +331,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
} else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_USB) {
//USB打印打印
printerInIt.usbPrint(mContext, zoomBitmaps);
}
// else if (defaultPrint.getPrinterDeviceType() == 4) {
// printerInIt.transmitPrjToPc(defaultPrint);
// }
else {
} else {
printFailure("未找到對應的打印類型");
}
}
......@@ -326,105 +347,8 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
}
private Map<String, List<PrjBean.DataBean.Bean>> setPrjIndex(Map<String, List<PrjBean.DataBean.Bean>> listMap, int totalPrj) {
int currentIndex = 0;
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
for (PrjBean.DataBean.Bean bean : prjMap.getValue()) {
bean.setTotalPrj(totalPrj);
if (bean.getStatus() == 2) {
currentIndex++;
} else {
if (currentIndex == 0) {
currentIndex = 1;
}
}
bean.setCurrentIndex(currentIndex);
}
currentIndex++;
}
return listMap;
}
private Map<String, List<PrjBean.DataBean.Bean>> printDataToMap(List<PrjBean.DataBean.Bean> printData) {
Map<String, List<PrjBean.DataBean.Bean>> map = new HashMap<>();
PrinterDeviceBean defaultPainter = null;
//獲得默認的打印機
for (PrinterDeviceBean printerDeviceBean : printerDeviceBeans) {
if (printerDeviceBean.getType() == 2) {
defaultPainter = printerDeviceBean;
break;
}
}
//將prj集合通過打印位置轉成map
for (PrjBean.DataBean.Bean bean : printData) {
if (TextUtil.isNotEmptyOrNullOrUndefined(bean.getPrintPosition())) {
List<PrjBean.DataBean.Bean> mapByKey = map.get(bean.getPrintPosition());
if (mapByKey != null) {
mapByKey.add(bean);
} else {
map.put(bean.getPrintPosition(), Collections.singletonList(bean));
}
} else if (defaultPainter != null) {
//沒有打印位置的,由默認的位置去打印
bean.setPrintPosition(defaultPainter.getName());
List<PrjBean.DataBean.Bean> mapByKey = map.get(bean.getPrintPosition());
if (mapByKey != null) {
mapByKey.add(bean);
} else {
map.put(bean.getPrintPosition(), Collections.singletonList(bean));
}
} else {
ToastUtils.show(this, "未配置打印機");
}
}
return map;
}
private PrintProgressAdapter adapter;
private void setPrintProgress(int state) {
if (adapter != null) {
adapter.setProgress(state);
}
}
private void initDialog() {
try {
// new DialogUtils(this, R.layout.print_layout_print_progress) {
// @Override
// public void initLayout(ViewHepler hepler, Dialog dialog) {
// List<String> stauts = Arrays.asList("生成數據中", "連接打印機", "開始寫入數據", "打印成功");
// adapter = new PrintProgressAdapter(stauts);
// hepler.setAdapter(R.id.rv_print_progress, new LinearLayoutManager(mContext), adapter);
// }
// }.setWidth((int) (DeviceUtils.getScreenWidth(mContext) * 0.8))
// .show();
View view = LayoutInflater.from(mContext).inflate(R.layout.ui_dialog_loading, null);
mTvLoadingTip = view.findViewById(R.id.tv_loading_dialog_text);
mLoadingDialog = new Dialog(this, R.style.ui_loading_dialog);
mLoadingDialog.setCancelable(true);
mLoadingDialog.setCanceledOnTouchOutside(false);
Window window = mLoadingDialog.getWindow();
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mLoadingDialog.setContentView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
if (!this.isFinishing()) {
mLoadingDialog.show();
setLoadingText("加載中...");
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void setLoadingText(String tip) {
Observable.just(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(integer -> {
if (mLoadingDialog != null && mLoadingDialog.isShowing()) {
mTvLoadingTip.setText(tip);
}
});
private void addPrintProgress(String printState) {
loadingPopup.setTitle(printState);
}
@Override
......@@ -440,7 +364,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
switch (state) {
case PrintSocketHolder.ERROR_0:
tip = "打印成功";
setPrintProgress(3);
break;
case PrintSocketHolder.ERROR_1:
tip = "生成打印數據失敗";
......@@ -456,26 +379,20 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
tip = "必要的參數不能為空";
break;
case PrintSocketHolder.STATE_0:
setPrintProgress(0);
break;
case PrintSocketHolder.STATE_1:
tip = "開始創建連接";
break;
case PrintSocketHolder.STATE_2:
tip = "創建連接成功,開始發送數據";
setPrintProgress(1);
break;
case PrintSocketHolder.STATE_3:
tip = "開始寫入數據";
setPrintProgress(2);
break;
case PrintSocketHolder.STATE_4:
tip = "關閉中";
finish();
break;
case DIMISS_LOADING:
disLoadingDialog();
break;
case FINISH:
finish();
break;
......@@ -485,10 +402,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
case LACK_OF_PAPER:
//缺紙
printFailure("打印機缺紙");
tip = "打印機缺紙";
break;
default:
break;
}
LoganManager.w_printer(TAG, "printStateChanged state--->" + tip);
setLoadingText(tip);
addPrintProgress(tip);
}
/**
......@@ -497,14 +417,8 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void printSuccess() {
LoganManager.w_printer(TAG, "printFailure 打印成功");
// if (printCount <= 1) {
CC.sendCCResult(callId, CCResult.success());
disLoadingDialog();
finish();
// finish();
// } else {
// printCount--;
// }
}
@Override
......@@ -515,11 +429,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
} else {
CC.sendCCResult(callId, CCResult.error("print error"));
}
// if (printCount <= 1) {
finish();
// } else {
// printCount--;
// }
}
@Override
......@@ -612,28 +522,23 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
protected void onDestroy() {
super.onDestroy();
disLoadingDialog();
}
private void disLoadingDialog() {
Observable.just(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(integer -> {
if (mLoadingDialog != null) {
mLoadingDialog.dismiss();
mLoadingDialog = null;
}
});
loadingPopup.dismiss();
//關閉打印頁面時,關閉所有打印連接
//關閉ip打印連接
PrintSocketHolder.getInstance().closeSocket();
//關閉針式打印連接
EpsonPrint.getInstance().disconnectPrinter();
EpsonPrint.getInstance().finalizeObject();
}
@Override
public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
public void onStateChanged(int state) {
//ip打印狀態修改回調
}
@Override
public void onResult(int errorCode, PrinterDeviceBean printerDeviceBean) {
public void onResult(int errorCode) {
//ip打印結果回調
}
......
......@@ -259,14 +259,14 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
}
@Override
public void onResult(int errorCode, PrinterDeviceBean printerDeviceBean) {
public void onResult(int errorCode) {
if (errorCode == 0) {
ToastUtils.show(PrintTestActivity.this, "打印失败");
}
}
@Override
public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
public void onStateChanged(int state) {
}
......
package com.joe.print.mvp.ui.adapter;
import android.content.Context;
import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.joe.print.R;
......@@ -9,36 +13,31 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* 打印進度
*/
public class PrintProgressAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
private int progress = 0;
private int completeColor;
private int inProgressColor;
public PrintProgressAdapter(@Nullable List<String> data) {
public PrintProgressAdapter(Context context, @Nullable List<String> data) {
super(R.layout.print_progress_item, data);
}
public void setProgress(int progress) {
this.progress = progress;
super.notifyDataSetChanged();
completeColor = ContextCompat.getColor(context, R.color.order_state0_color);
inProgressColor = ContextCompat.getColor(context, R.color.theme_333_color);
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, String s) {
baseViewHolder.setText(R.id.tv_print_progressbar, s);
if (progress > baseViewHolder.getAdapterPosition()) {
if (baseViewHolder.getAdapterPosition() == getItemCount() - 1) {
baseViewHolder.setGone(R.id.pb_print_progressbar, true);
baseViewHolder.setTextColor(R.id.tv_print_progressbar, R.color.order_state0_color);
baseViewHolder.setTextColor(R.id.tv_print_progressbar, completeColor);
baseViewHolder.setGone(R.id.iv_checked, false);
} else if (progress == baseViewHolder.getAdapterPosition()) {
baseViewHolder.setGone(R.id.pb_print_progressbar, false);
baseViewHolder.setTextColor(R.id.tv_print_progressbar, R.color.theme_333_color);
baseViewHolder.setGone(R.id.iv_checked, true);
} else {
baseViewHolder.setGone(R.id.pb_print_progressbar, true);
baseViewHolder.setTextColor(R.id.tv_print_progressbar, R.color.color_ccc);
baseViewHolder.setGone(R.id.pb_print_progressbar, false);
baseViewHolder.setTextColor(R.id.tv_print_progressbar, inProgressColor);
baseViewHolder.setGone(R.id.iv_checked, true);
}
}
}
package com.joe.print.mvp.ui.view;
import android.content.Context;
import androidx.annotation.NonNull;
import com.lxj.xpopup.impl.LoadingPopupView;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/5
* Time: 18:31
* Use:
*/
public class PrintProgressPopup extends LoadingPopupView {
/**
* @param context
* @param bindLayoutId layoutId 如果要显示标题,则要求必须有id为tv_title的TextView,否则无任何要求
*/
public PrintProgressPopup(@NonNull Context context, int bindLayoutId) {
super(context, bindLayoutId);
}
}
package com.joe.print.mvp.ui.view;
import android.content.Context;
import android.widget.PopupMenu;
import android.widget.PopupWindow;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.joe.print.R;
import com.joe.print.mvp.print.utils.MyPrintUtils;
import com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter;
import com.lxj.xpopup.core.CenterPopupView;
import com.lxj.xpopup.impl.CenterListPopupView;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import java.util.List;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/5
* Time: 16:59
* Use:選擇打印彈窗
*/
public class SelectPrintDevicePopup extends CenterPopupView {
private List<PrinterDeviceBean> printerDeviceBeans;
private OnItemClickListener mOnItemClickListener;
private PopupWindow.OnDismissListener onDismissListener;
public SelectPrintDevicePopup(@NonNull Context context, List<PrinterDeviceBean> printerDeviceBeans) {
super(context);
this.printerDeviceBeans = printerDeviceBeans;
}
@Override
protected int getPopupLayoutId() {
return R.layout.print_dialog_internet_list;
}
@Override
protected void initPopupContent() {
RecyclerView mRvPrintList = findViewById(R.id.rv_print_list);
DialogPrinterListAdapter printListAdapter = new DialogPrinterListAdapter(printerDeviceBeans, getContext());
mRvPrintList.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(getContext(), R.color.line_color)));
mRvPrintList.setAdapter(printListAdapter);
printListAdapter.setOnItemClickListener(mOnItemClickListener);
}
public SelectPrintDevicePopup setOnItemClickListener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
return this;
}
public SelectPrintDevicePopup setOnDismissListener(PopupWindow.OnDismissListener onDismissListener) {
this.onDismissListener = onDismissListener;
return this;
}
@Override
protected void onDismiss() {
super.onDismiss();
if (onDismissListener != null)
onDismissListener.onDismiss();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/alpha_70_black"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_bitmap"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_print_progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:scaleType="fitXY" />
</androidx.core.widget.NestedScrollView>
\ No newline at end of file
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_white_eight_corners_bg"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/dp_10">
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_print_list"
<FrameLayout
android:layout_gravity="center"
android:id="@+id/centerPopupContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_30"
android:layout_marginRight="@dimen/dp_30"
android:background="@drawable/shape_white_eight_corners_bg"
android:orientation="vertical">
</LinearLayout>
\ No newline at end of file
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_print_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</FrameLayout>
</FrameLayout>
......@@ -3,15 +3,16 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_20"
android:orientation="horizontal">
android:orientation="horizontal"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_10"
android:paddingRight="@dimen/dp_10">
<TextView
android:id="@+id/tv_print_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_5"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16"
tools:text="狀態:" />
......
......@@ -3,6 +3,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
android:orientation="vertical"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10">
......@@ -36,13 +39,13 @@
<TextView
android:id="@+id/tv_printer_port"
android:layout_width="wrap_content"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:singleLine="true"
android:text="端口號:"
android:textColor="@color/normal_color"
android:textSize="@dimen/dp_14"
android:visibility="gone"
app:layout_constraintHorizontal_weight="0.5"
app:layout_constraintLeft_toRightOf="@id/tv_printer_ip"
app:layout_constraintRight_toRightOf="parent"
......
......@@ -295,6 +295,8 @@ public class NewSupplierPresenter extends BasePresenter<NewSupplierContract.Mode
public void onNext(@NonNull BaseResult info) {
if (info != null) {
if (info.isSuccess()) {
//供應商信息修改後,將購物車食品信息刪除掉,不然食品信息中的採購金額和地址不對
SupplyShoppingCart.getInstance().removeFoodsBySupplier(supplierBean.getId());
mRootView.saveSuccess();
} else if (TextUtil.isNotEmptyOrNullOrUndefined(info.getErrMsg())) {
mRootView.showMessage(info.getErrMsg());
......
......@@ -102,10 +102,9 @@ public class WarehousingInventoryPresenter extends BasePresenter<WarehousingInve
/**
* 查詢庫存盤點記錄
*/
public void getWarehousingRecord(int pageIndex) {
Map<String, Object> map = new HashMap<>(4);
Constant.addRestaurantId(map);
Constant.addBrandId(map);
public void getWarehousingRecord(String foodNo, int pageIndex) {
Map<String, Object> map = new HashMap<>(3);
map.put("foodNo", foodNo);
Constant.addPageSize(map);
map.put("pageIndex", pageIndex * Constant.PAGE_SIZE);
mModel.getWarehousingRecord(map)
......@@ -119,8 +118,7 @@ public class WarehousingInventoryPresenter extends BasePresenter<WarehousingInve
@Override
public void onNext(BaseResult baseResult) {
if (baseResult != null && baseResult.isSuccess()) {
//消耗完之後,關閉頁面
mRootView.loadRecord();
} else if (baseResult != null && TextUtil.isNotEmptyOrNullOrUndefined(baseResult.getErrMsg())) {
mRootView.showMessage(baseResult.getErrMsg());
} else {
......
package com.gingersoft.supply_chain.mvp.ui.activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import androidx.annotation.NonNull;
......@@ -17,9 +20,11 @@ import com.gingersoft.supply_chain.mvp.contract.SupplyChainMainContract;
import com.gingersoft.supply_chain.mvp.presenter.SupplyChainMainPresenter;
import com.gingersoft.supply_chain.mvp.ui.fragment.FunctionListFragment;
import com.gingersoft.supply_chain.mvp.utils.HideUtil;
import com.gingersoft.supply_chain.mvp.utils.NotDispatchListener;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -49,6 +54,25 @@ public class SupplyChainMainActivity extends BaseFragmentActivity<SupplyChainMai
loadRootFragment(R.id.layout_supply_chain_content, FunctionListFragment.newInstance());
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (getTopFragment() instanceof NotDispatchListener) {
return super.dispatchTouchEvent(event);
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int) event.getRawX(), (int) event.getRawY())) {
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
// @Override
// public boolean dispatchTouchEvent(MotionEvent ev) {
// if (getTopFragment() instanceof NotDispatchListener) {
......
......@@ -13,6 +13,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.SendSupplierMsgBean;
import com.gingersoft.supply_chain.mvp.bean.SupplierInfoBean;
import com.gingersoft.supply_chain.mvp.utils.DoubleClickUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
......@@ -81,6 +82,9 @@ public class SendSupplierMsgAdapter extends BaseQuickAdapter<SendSupplierMsgBean
viewHolder.setText(R.id.tv_item_pic_radio_title, SupplierInfoBean.SupplierContacts.getContractTitleByType(item.getType()));
viewHolder.setImageResource(R.id.iv_item_pic_radio_pic, getContractPicByType(item.getType()));
radioButton.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (DoubleClickUtils.isFastDoubleClick()) {
return;
}
if (isChecked) {
setSelectIndex(viewHolder.getAdapterPosition());
notifyDataSetChanged();
......
......@@ -332,7 +332,12 @@ public class FoodIngredientsFragment extends BaseSupplyChainFragment<FoodIngredi
if (foodListAdapter != null) {
mPresenter.getSelectFood(foodListAdapter.getIntegerMap());
}
start(ShoppingCatFragment.newInstance());
//需要先判斷是否有食品
if (SupplyShoppingCart.getInstance().getCartFoods().size() > 0) {
start(ShoppingCatFragment.newInstance());
} else {
showMessage("請選擇食品");
}
} else if (viewId == R.id.btn_food_ingredients_cancel) {
//取消
killMyself();
......
......@@ -81,7 +81,7 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
ScreenView screenView;
@BindView(R2.id.view_load_bg)
View loadBg;
// @BindView(R2.id.ed_food_ingredients_search)
// @BindView(R2.id.ed_food_ingredients_search)
// EditText edSearch;
@BindView(R2.id.srl_purchase_list)
SmartRefreshLayout refreshPurchaseList;
......@@ -166,7 +166,16 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
mTopBar.addRightView(view, R.id.qmui_shopping_cart, layoutParams);
view.setOnClickListener(v -> start(ShoppingCatFragment.newInstance()));
view.setOnClickListener(v -> {
//需要先判斷是否有食品
if (SupplyShoppingCart.getInstance().getCartFoods().size() > 0) {
start(ShoppingCatFragment.newInstance());
} else {
//跳轉到下單頁面
showMessage("請先選擇食品");
startForResult(FoodIngredientsFragment.newInstance(ADD_ORDER), REQUEST_ORDER_DETAILS_CODE);
}
});
}
private void initTabAndData() {
......
......@@ -91,13 +91,13 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
public void initData(@Nullable Bundle savedInstanceState) {
Bundle arguments = getArguments();
if (arguments != null) {
//獲取庫存盤點記錄
getWarehousingRecord();
int foodId = arguments.getInt(WarehouseDetailsFragment.FOOD_ID_KEY);
//食品編號
foodNo = arguments.getString(WarehouseDetailsFragment.FOOD_NO_KEY);
//食品庫存總數
foodNum = arguments.getInt(WarehouseDetailsFragment.FOOD_NUM_KEY);
//獲取庫存盤點記錄
getWarehousingRecord();
//加載食品圖片
loadFoodImage(arguments);
//初始化標題
......@@ -111,7 +111,7 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
}
private void getWarehousingRecord() {
mPresenter.getWarehousingRecord(pageIndex);
mPresenter.getWarehousingRecord(foodNo, pageIndex);
}
private void initEdit() {
......
package com.gingersoft.supply_chain.mvp.utils;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/6
* Time: 17:21
* Use:
*/
public class DoubleClickUtils {
private static long lastClickTime = 0;
public static boolean isFastDoubleClick() {
long nowTime = System.currentTimeMillis();
if (nowTime - lastClickTime < 500) {//500ms
return true;
}
lastClickTime = nowTime;
return false;
}
}
/*
* Copyright 2016 yinglan
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gingersoft.supply_chain.mvp.utils;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Rect;
import android.os.IBinder;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
/**
* Created by yinglan
*/
public class HideUtil {
/**
* Initialization method
*
* @param activity
*/
public static void init(Activity activity) {
new HideUtil(activity, null);
}
/**
* Can pass the outer layout
*
* @param activity
* @param content
*/
public static void init(Activity activity, ViewGroup content) {
new HideUtil(activity, content);
}
/**
* Forced hidden keyboard
*
* @param activity
*/
public static void hideSoftKeyboard(Activity activity) {
if (null == activity) {
throw new RuntimeException("参数错误");
}
View view = activity.getCurrentFocus();
if (null != view) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
/**
* Forced hidden keyboard
*
* @param view
*/
public static void hideSoftKeyboard(View view) {
if (null != view) {
InputMethodManager inputMethodManager = (InputMethodManager) view.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} else {
throw new RuntimeException("参数错误");
}
}
/**
* Forced hidden keyboard
*
* @param dialog
*/
public static void hideDialogSoftKeyboard(Dialog dialog) {
if (null == dialog) {
throw new RuntimeException("参数错误");
}
View view = dialog.getCurrentFocus();
if (null != view) {
InputMethodManager inputMethodManager = (InputMethodManager) dialog.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
/**
* @param activity
*/
private HideUtil(final Activity activity, ViewGroup content) {
if (content == null) {
content = (ViewGroup) activity.findViewById(android.R.id.content);
}
getScrollView(content, activity);
content.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.e("eee", "出賣人");
dispatchTouchEvent(activity, motionEvent);
return false;
}
});
}
private void getScrollView(ViewGroup viewGroup, final Activity activity) {
if (null == viewGroup) {
return;
}
int count = viewGroup.getChildCount();
for (int i = 0; i < count; i++) {
View view = viewGroup.getChildAt(i);
if (view instanceof ScrollView) {
ScrollView newDtv = (ScrollView) view;
newDtv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
dispatchTouchEvent(activity, motionEvent);
return false;
}
});
} else if (view instanceof AbsListView) {
AbsListView newDtv = (AbsListView) view;
newDtv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
dispatchTouchEvent(activity, motionEvent);
return false;
}
});
} else if (view instanceof RecyclerView) {
RecyclerView newDtv = (RecyclerView) view;
newDtv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
dispatchTouchEvent(activity, motionEvent);
return false;
}
});
} else if (view instanceof ViewGroup) {
this.getScrollView((ViewGroup) view, activity);
}
if (view.isClickable() && view instanceof TextView && !(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
dispatchTouchEvent(activity, motionEvent);
return false;
}
});
}
}
}
/**
* @param mActivity
* @param ev
* @return
*/
public boolean dispatchTouchEvent(Activity mActivity, MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = mActivity.getCurrentFocus();
if (null != v && isShouldHideInput(v, ev)) {
hideSoftInput(mActivity, v.getWindowToken());
}
}
return false;
}
/**
* @param v
* @param event
* @return
*/
private boolean isShouldHideInput(View v, MotionEvent event) {
if (v instanceof EditText) {
Rect rect = new Rect();
v.getHitRect(rect);
if (rect.contains((int) event.getX(), (int) event.getY())) {
return false;
}
}
return true;
}
/**
* @param mActivity
* @param token
*/
private void hideSoftInput(Activity mActivity, IBinder token) {
if (token != null) {
InputMethodManager im = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
......@@ -135,12 +135,12 @@ public class PrintServingPaperAction extends TableAction {
* 打印上菜紙
*/
private void printParper(TableBean.DataBean tableBean) {
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance(),tableBean);
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance(), tableBean);
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("printActivity")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_SERVE)
.addParam(PrintConstans.PRINT_CONTENT,printContent)
.addParam(PrintConstans.PRINT_ORDER_NO,tableBean.getOrderId())
.addParam(PrintConstans.PRINT_CONTENT, printContent)
.addParam(PrintConstans.PRINT_ORDER_NO, String.valueOf(tableBean.getOrderId()))
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
//清空賬單數據
......
......@@ -848,6 +848,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
});
}
/**
* 點餐送單
*
* @param isPrint
* @param afterToActivity
*/
@Override
public void addOrderFood(boolean isPrint, Class<?> afterToActivity) {
List<OrderDetail> foodLists = getOrderFoodLists();
......@@ -894,8 +900,13 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
//合并主食品
mergeMainFoodNumber(mOrderMealList);
}
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance(), mTableInfo);
//餐檯送單
if (DoshokuOrder.getInstance().getNewFoodList() == null || DoshokuOrder.getInstance().getNewFoodList().size() <= 0) {
//沒有新的食品時,不打印送單
IActivity.returnBeforeActivity(initTable);
return;
}
PrintContent printContent = new PrintContentAdapter().adaptationSendOrderPaperContent(DoshokuOrder.getInstance(), mTableInfo);
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("printActivity")
......
......@@ -388,8 +388,17 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
//合并主食品
mergeMainFoodNumber(mOrderMealList);
}
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance(), mTableInfo);
//賬單內容送單
if (DoshokuOrder.getInstance().getNewFoodList() == null || DoshokuOrder.getInstance().getNewFoodList().size() <= 0) {
//沒有新的食品時,不打印送單
if (afterToActivity == null) {
mRootView.sendSuccess();
mAppManager.killActivity(MealStandActivity.class);
}
return;
}
//賬單內容送單
PrintContent printContent = new PrintContentAdapter().adaptationSendOrderPaperContent(DoshokuOrder.getInstance(), mTableInfo);
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("printActivity")
......
......@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 29,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode : 23,
versionName : "1.2.3"
versionCode : 24,
versionName : "1.2.4"
]
version = [
......
......@@ -358,12 +358,12 @@ public class GsaCloudApplication extends BaseApplication {
}
@Override
public void onPrintSuccess(PrinterDeviceBean printerDeviceBean) {
public void onPrintSuccess() {
LoganManager.w_printer(TAG, "打印成功");
}
@Override
public void onPrintError(int errorCode, PrinterDeviceBean printerDeviceBean) {
public void onPrintError(int errorCode) {
LoganManager.w_printer(TAG, "打印失敗:" + errorCode);
}
......
......@@ -23,7 +23,6 @@ public class PrintConstans {
public static final String PRINT_TYPE = "print_type";//打印類型
public static final String PRINT_CONTENT = "print_content";//打印內容
public static final String PRINT_ORDER_NO = "print_order_no";//打印ID(唯一标识即可)
public static final String PRINT_LOADING = "is_show_loading";//是否顯示加載框
public final static int PRINT_TEST = -1;//測試頁
public final static int PRINT_SERVE = 0;//上菜紙
......
......@@ -69,6 +69,8 @@ public class LoganManager {
private static final String TABLEMODE_BUSINESS_TAG = "tableMode-> ";
private static final String ORDER_BUSINESS_TAG = "order-> ";
private static final String PAY_BUSINESS_TAG = "pay-> ";
private static final String DELIVERY_PICK_TAG = "delivery-> ";
/*******************************交互事件類型**************************************/
public static final String EVENT_CLICK = "點擊->";
......@@ -115,6 +117,9 @@ public class LoganManager {
w_business(PAY_BUSINESS_TAG, TAG, eventAndLog);
}
public static void w_delivery(String TAG, String... eventAndLog) {
w_business(DELIVERY_PICK_TAG, TAG, eventAndLog);
}
private static void w_business(String BUSINESS_TAG, String TAG, String... eventAndLog) {
if (eventAndLog != null) {
if (eventAndLog.length > 1) {
......
......@@ -19,7 +19,7 @@ public interface PrinterFlowListener extends ExternalPrinterConnection {
void onPrinterBitmapBefore(int orderType, int printType, String directoryName, List<Bitmap> bitmaps);
void onPrintSuccess(PrinterDeviceBean printerDeviceBean);
void onPrintSuccess();
void onPrintError(int errorCode, PrinterDeviceBean printerDeviceBean);
void onPrintError(int errorCode);
}
......@@ -22,4 +22,8 @@ public interface PrintDataMaker {
List<byte[]> getPrintData();
String getPrjIds();
String getIp();
int getPort();
}
/*
* Copyright (C) 2015 AlexMofer
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gingersoft.gsa.cloud.print;
import android.bluetooth.BluetoothDevice;
import android.os.AsyncTask;
import android.util.Log;
import com.elvishew.xlog.XLog;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;
/**
* 打印执行者
* Created by Alex on 2016/11/10.
*
* @author admin
*/
public class PrintExecutor {
protected final String TAG = this.getClass().getSimpleName();
private PrintSocketHolder holder;
private int mReconnectTimes = 0;
private int time = 0;
/**
* 存儲所有prj的id集合
*/
private String prjIds;
private PrintSocketHolder.OnStateChangedListener listener;
private OnPrintResultListener mListener;
private OnPrjPrintResultListener onPrjPrintResultListener;
public PrintExecutor(BluetoothDevice device) {
holder = new PrintSocketHolder(device);
}
public PrintExecutor(PrinterDeviceBean printerDeviceBean) {
holder = new PrintSocketHolder(printerDeviceBean);
}
public void setPrinterDeviceBean(PrinterDeviceBean printerDeviceBean) {
if (holder != null) {
holder.setPrinterDeviceBean(printerDeviceBean);
}
public PrintExecutor() {
holder = PrintSocketHolder.getInstance();
holder.closeSocket();
printDataMakers = new ArrayList<>();
}
/**
* 执行打印请求
*
* @return 错误代码
* 需要執行的任務隊列
*/
private int doRequest(PrintDataMaker maker) {
if (mReconnectTimes == 0) {
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
List<byte[]> data = maker.getPrintData();
prjIds = maker.getPrjIds();
if (!holder.isSocketPrepared()) {
int prepare = holder.prepareSocket();
if (prepare != PrintSocketHolder.ERROR_0) {
return prepare;
}
}
return holder.sendData(data);
} else {
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
List<byte[]> data = maker.getPrintData();
prjIds = maker.getPrjIds();
if (holder.isSocketPrepared()) {
if (sendData(data)) {
return PrintSocketHolder.ERROR_0;
} else {
return PrintSocketHolder.ERROR_100;
}
} else {
if (prepareSocket() && sendData(data)) {
return PrintSocketHolder.ERROR_0;
} else {
return PrintSocketHolder.ERROR_100;
}
}
}
}
List<PrintDataMaker> printDataMakers;
/**
* 执行打印请求
*
* @return 错误代码
* 重啟打印的服務
*/
public int doPrinterRequest(PrintDataMaker maker) {
holder.setOnStateChangedListener(listener);
return doRequest(maker);
}
private boolean prepareSocket() {
time++;
boolean prepareSocket = time < mReconnectTimes &&
(holder.prepareSocket() == PrintSocketHolder.ERROR_0 || prepareSocket());
return prepareSocket;
}
private boolean sendData(List<byte[]> data) {
if (holder.sendData(data) == PrintSocketHolder.ERROR_0) {
time = 0;
return true;
} else {
return prepareSocket() && sendData(data);
}
}
private Disposable resetPrintDis;
/**
* 异步执行打印请求
*/
public void doPrinterRequestAsync(PrintDataMaker maker) {
new PrintTask().execute(maker);
}
/**
* 销毁
*/
public int closeSocket() {
return holder.closeSocket();
}
/**
* 设置IP及端口
*/
public void setIp(PrinterDeviceBean printerDeviceBean) {
holder.setIp(printerDeviceBean);
}
/**
* 设置蓝牙
*
* @param device 设备
*/
public void setDevice(BluetoothDevice device) {
holder.setDevice(device);
}
/**
* 设置状态监听
*
* @param listener 监听
*/
public void setOnStateChangedListener(PrintSocketHolder.OnStateChangedListener listener) {
this.listener = listener;
if (printDataMakers.size() <= 0) {
printDataMakers.add(maker);
new PrintTask().execute(maker);
} else {
//如果隊列裡有任務在執行,只添加進去,等待執行完成之後,再來執行這個
printDataMakers.add(maker);
startReset();
}
}
/**
* 设置重连次数
*
* @param times 次数
*/
public void setReconnectTimes(int times) {
mReconnectTimes = times;
private void startReset() {
resetPrintDis = RxJavaUtils.delay(10, aLong -> {
//如果十秒之後,任務還沒在打印完成方法中取消,可能打印程序卡住了,在這裡執行下一個任務
if (printDataMakers.size() > 0) {
new PrintTask().execute(printDataMakers.get(0));
}
});
}
/**
* 设置结果回调
* 执行打印请求
*
* @param listener 回调
* @return 错误代码
*/
public void setOnPrintResultListener(OnPrintResultListener listener) {
this.mListener = listener;
}
public interface OnPrintResultListener {
void onResult(int errorCode, PrinterDeviceBean printerDeviceBean);
private int doRequest(PrintDataMaker maker) {
//通知狀態
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
//獲取打印數據
List<byte[]> data = maker.getPrintData();
//如果是打印prj,需要獲取prj的id
prjIds = maker.getPrjIds();
//判斷是否連接,如果未連接就先連接
int prepare = holder.prepareSocket(maker.getIp(), maker.getPort());
if (prepare != PrintSocketHolder.ERROR_0) {
return prepare;
}
return holder.sendData(data);
}
/**
* PRJ打印結果回調
* 打印任務
*/
public interface OnPrjPrintResultListener {
void onResult(int errorCode, String ids);
}
public void setOnPrjPrintResultListener(OnPrjPrintResultListener onPrjPrintResultListener) {
this.onPrjPrintResultListener = onPrjPrintResultListener;
}
private class PrintTask extends AsyncTask<PrintDataMaker, Integer, Integer> implements
PrintSocketHolder.OnStateChangedListener {
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.e("eee", "任務數量:" + printDataMakers.size());
holder.setOnStateChangedListener(this);
}
@Override
protected Integer doInBackground(PrintDataMaker... makers) {
holder.closeSocket();
if (makers == null || makers.length < 1) {
return PrintSocketHolder.ERROR_0;
}
......@@ -212,13 +114,27 @@ public class PrintExecutor {
return;
}
if (listener != null) {
listener.onStateChanged(values[0], holder.getPrinterDeviceBean());
listener.onStateChanged(values[0]);
}
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
if (resetPrintDis != null) {
resetPrintDis.dispose();
}
//移除掉當前任務
if (printDataMakers.size() > 0) {
printDataMakers.remove(0);
}
//執行下一個任務
if (printDataMakers.size() > 0) {
new PrintTask().execute(printDataMakers.get(0));
startReset();
}
Log.e("eee", "完成後任務數量:" + printDataMakers.size());
//返回結果
if (integer != null) {
onResult(integer);
}
......@@ -232,7 +148,7 @@ public class PrintExecutor {
private void onResult(int errorCode) {
try {
if (mListener != null) {
mListener.onResult(errorCode, holder.getPrinterDeviceBean());
mListener.onResult(errorCode);
}
if (onPrjPrintResultListener != null) {
onPrjPrintResultListener.onResult(errorCode, prjIds);
......@@ -243,26 +159,66 @@ public class PrintExecutor {
}
@Override
public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
public void onStateChanged(int state) {
switch (state) {
case PrintSocketHolder.STATE_0:
LoganManager.w_printer(TAG, "打印機狀態 --> 生成页面数据" );
LoganManager.w_printer(TAG, "打印機狀態 --> 生成页面数据");
break;
case PrintSocketHolder.STATE_1:
LoganManager.w_printer(TAG, "打印機狀態 --> 创建Socket连接" );
LoganManager.w_printer(TAG, "打印機狀態 --> 创建Socket连接");
break;
case PrintSocketHolder.STATE_2:
LoganManager.w_printer(TAG, "打印機狀態 --> 获取输出流" );
LoganManager.w_printer(TAG, "打印機狀態 --> 获取输出流");
break;
case PrintSocketHolder.STATE_3:
LoganManager.w_printer(TAG, "打印機狀態 --> 写入页面数据" );
LoganManager.w_printer(TAG, "打印機狀態 --> 写入页面数据");
break;
case PrintSocketHolder.STATE_4:
LoganManager.w_printer(TAG, "打印機狀態 --> 关闭输出流" );
LoganManager.w_printer(TAG, "打印機狀態 --> 关闭输出流");
break;
default:
break;
}
publishProgress(state);
}
}
/**
* 设置状态监听
*
* @param listener 监听
*/
public PrintExecutor setOnStateChangedListener(PrintSocketHolder.OnStateChangedListener listener) {
this.listener = listener;
return this;
}
/**
* 设置结果回调
*
* @param listener 回调
*/
public PrintExecutor setOnPrintResultListener(OnPrintResultListener listener) {
this.mListener = listener;
return this;
}
/**
* 打印結果回調
*/
public interface OnPrintResultListener {
void onResult(int errorCode);
}
public interface OnPrjPrintResultListener {
/**
* PRJ打印結果回調,prj service用
*/
void onResult(int errorCode, String ids);
}
public PrintExecutor setOnPrjPrintResultListener(OnPrjPrintResultListener onPrjPrintResultListener) {
this.onPrjPrintResultListener = onPrjPrintResultListener;
return this;
}
}
/*
* Copyright (C) 2015 AlexMofer
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gingersoft.gsa.cloud.print;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.util.Log;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.scwang.smartrefresh.layout.listener.OnStateChangedListener;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.List;
import java.util.UUID;
/**
* 打印Socket
* Created by Alex on 2016/11/10.
*/
@SuppressWarnings({"WeakerAccess", "unused"})
public class PrintSocketHolder {
private final static PrintSocketHolder printSocketHolder = new PrintSocketHolder();
public static PrintSocketHolder getInstance() {
synchronized (printSocketHolder) {
return printSocketHolder;
}
}
protected final String TAG = this.getClass().getSimpleName();
public static final int STATE_0 = 10;// 生成测试页面数据
......@@ -53,41 +45,25 @@ public class PrintSocketHolder {
public static final int ERROR_6 = -6;// 关闭Socket出错
public static final int ERROR_100 = -100;// 失败
private static final UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//蓝牙打印UUID
// private String ip;
// private int port = 9100;
private PrinterDeviceBean printerDeviceBean;
private BluetoothDevice mDevice;
private Socket socket;
private BluetoothSocket bluetoothSocket;
private OutputStream out;
private WeakReference<OnStateChangedListener> mListener;
public PrintSocketHolder(BluetoothDevice device) {
setDevice(device);
}
public PrintSocketHolder(PrinterDeviceBean printerDeviceBean) {
setIp(printerDeviceBean);
private PrintSocketHolder() {
}
public int createSocket() {
public int createSocket(String ip, int port) {
onPrinterStateChanged(STATE_1);
if (mDevice == null && (printerDeviceBean == null || printerDeviceBean.getIp() == null))
if (TextUtil.isEmptyOrNullOrUndefined(ip)) {
return ERROR_5;
}
try {
if (mDevice != null) {
PrinterPlugins.getOnPrinterFlowHandler().connectionBefore("藍牙打印機", printerDeviceBean.getIp(), printerDeviceBean.getPort(), 0, 0);
bluetoothSocket = mDevice.createRfcommSocketToServiceRecord(uuid);
bluetoothSocket.connect();
} else {
PrinterPlugins.getOnPrinterFlowHandler().connectionBefore("網絡打印機", printerDeviceBean.getIp(), printerDeviceBean.getPort(), PrintConstans.SO_TIMEOUT, PrintConstans.PRINT_TIMEOUT);
socket = new Socket();
InetSocketAddress socketAddress = new InetSocketAddress(printerDeviceBean.getIp(), printerDeviceBean.getPort());
//设置超时时间
socket.setSoTimeout(PrintConstans.SO_TIMEOUT);
socket.connect(socketAddress, PrintConstans.PRINT_TIMEOUT);//开始连接ip
}
PrinterPlugins.getOnPrinterFlowHandler().connectionBefore("網絡打印機", ip, port, PrintConstans.SO_TIMEOUT, PrintConstans.PRINT_TIMEOUT);
socket = new Socket();
//建立連接
InetSocketAddress socketAddress = new InetSocketAddress(ip, port);
//设置超时时间
socket.setSoTimeout(PrintConstans.SO_TIMEOUT);
socket.connect(socketAddress, PrintConstans.PRINT_TIMEOUT);//开始连接ip
} catch (Exception e) {
closeSocket();
e.printStackTrace();
......@@ -99,11 +75,7 @@ public class PrintSocketHolder {
public int getOutputStream() {
onPrinterStateChanged(STATE_2);
try {
if (mDevice != null) {
out = bluetoothSocket.getOutputStream();
} else {
out = socket.getOutputStream();
}
out = socket.getOutputStream();
} catch (IOException e) {
closeSocket();
return ERROR_3;
......@@ -111,11 +83,19 @@ public class PrintSocketHolder {
return ERROR_0;
}
/**
* 是否連接
*/
public boolean isSocketPrepared() {
boolean isPrepared = (bluetoothSocket != null || socket != null) && out != null;
return isPrepared;
return socket != null && out != null;
}
/**
* 發送數據
*
* @param data 需要發送的數據
* @return 發送狀態:是否成功
*/
public int sendData(List<byte[]> data) {
onPrinterStateChanged(STATE_3);
if (data == null || data.size() <= 0) {
......@@ -125,7 +105,7 @@ public class PrintSocketHolder {
try {
out.write(item);
out.flush();
} catch (IOException e) {
} catch (IOException | NullPointerException e) {
LoganManager.w_printer(TAG, "打印异常: " + e.getMessage());
closeSocket();
return ERROR_4;
......@@ -135,38 +115,15 @@ public class PrintSocketHolder {
return ERROR_0;
}
public int sendData(byte[] data) {
onPrinterStateChanged(STATE_3);
try {
out.write(data);
out.flush();
} catch (IOException e) {
closeSocket();
return ERROR_4;
}
return ERROR_0;
}
public int sendData(byte[]... data) {
onPrinterStateChanged(STATE_3);
for (byte[] item : data) {
try {
out.write(item);
out.flush();
} catch (IOException e) {
closeSocket();
return ERROR_4;
}
}
return ERROR_0;
}
public int prepareSocket() {
LoganManager.w_printer(TAG, "准备尝试连接打印机");
int create = createSocket();
public int prepareSocket(String ip, int port) {
LoganManager.w_printer(TAG, "准备尝试连接打印机" + ip + ":" + port);
//創建連接
int create = createSocket(ip, port);
//判斷連接狀態
if (create != PrintSocketHolder.ERROR_0) {
return create;
}
//獲取打印機寫入
int result = getOutputStream();
if (result == ERROR_0) {
PrinterPlugins.getOnPrinterFlowHandler().connectionSuccess();
......@@ -180,13 +137,13 @@ public class PrintSocketHolder {
* 销毁
*/
public int closeSocket() {
LoganManager.w_printer(TAG, "準備关闭打印机连接");
onPrinterStateChanged(STATE_4);
boolean error = false;
try {
if (out != null) {
out.close();
out = null;
LoganManager.w_printer(TAG, "关闭打印机輸出连接");
}
} catch (IOException e) {
LoganManager.w_printer(TAG, "关闭打印机连接异常");
......@@ -197,22 +154,13 @@ public class PrintSocketHolder {
if (socket != null) {
socket.close();
socket = null;
LoganManager.w_printer(TAG, "关闭打印机socket连接");
}
} catch (IOException e) {
LoganManager.w_printer(TAG, "关闭打印机连接异常");
socket = null;
error = true;
}
try {
if (bluetoothSocket != null) {
bluetoothSocket.close();
bluetoothSocket = null;
}
} catch (IOException e) {
LoganManager.w_printer(TAG, "关闭打印机连接异常");
bluetoothSocket = null;
error = true;
}
PrinterPlugins.getOnPrinterFlowHandler().disconnect();
return error ? ERROR_6 : ERROR_0;
}
......@@ -224,46 +172,15 @@ public class PrintSocketHolder {
*/
public void onPrinterStateChanged(int state) {
try {
if (mListener != null && mListener.get() != null)
mListener.get().onStateChanged(state, printerDeviceBean);
if (mListener != null && mListener.get() != null) {
mListener.get().onStateChanged(state);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 设置IP及端口
*/
public void setIp(PrinterDeviceBean printerDeviceBean) {
this.printerDeviceBean = printerDeviceBean;
}
// public String getIp() {
// return ip;
// }
//
// public int getPort() {
// return port;
// }
public PrinterDeviceBean getPrinterDeviceBean() {
return printerDeviceBean;
}
public void setPrinterDeviceBean(PrinterDeviceBean printerDeviceBean) {
this.printerDeviceBean = printerDeviceBean;
}
/**
* 设置蓝牙
*
* @param device 设备
*/
public void setDevice(BluetoothDevice device) {
this.mDevice = device;
}
/**
* 设置状态监听
*
* @param listener 监听
......@@ -273,6 +190,6 @@ public class PrintSocketHolder {
}
public interface OnStateChangedListener {
void onStateChanged(int state, PrinterDeviceBean printerDeviceBean);
void onStateChanged(int state);
}
}
......@@ -24,6 +24,8 @@ public interface AdaptationContent {
PrintContent adaptationPrintSlipContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean);
PrintContent adaptationSendOrderPaperContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean);
PrintContent adaptationServingPaperContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean);
PrintContent adaptationBillContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean);
......
......@@ -55,6 +55,11 @@ public class PrintContentAdapter implements AdaptationContent {
return getPrintTakeawayFormContent(data, 2);
}
/**
* 清機打印
* @param settlementReport
* @return
*/
@Override
public PrintContent adaptationPrintCleanMachineContent(SettlementReport settlementReport) {
PrintCleanMachineContent cleanMachineContent = new PrintCleanMachineContent();
......@@ -68,6 +73,12 @@ public class PrintContentAdapter implements AdaptationContent {
return cleanMachineContent;
}
/**
* 印單
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public PrintContent adaptationPrintSlipContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean) {
PrintSlipContent slipContent = new PrintSlipContent();
......@@ -77,15 +88,23 @@ public class PrintContentAdapter implements AdaptationContent {
slipContent.setPerson(tableBean.getPerson());
slipContent.setCreateTime(tableBean.getCreateTime());
slipContent.setOrderNo(doshokuOrder.getOrderNo());
slipContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getNewFoodList()));
// slipContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getNewFoodList()));
slipContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getShoppingCart().getOrderCommodityList()));
slipContent.setBillItemList(billItemCastPrintBillItemList(doshokuOrder.getShoppingCart().getBillItemList()));
slipContent.setWholeAmount(doshokuOrder.getShoppingCart().getWholeAmount());
slipContent.setTotalAmount(doshokuOrder.getShoppingCart().getTotalAmount());
slipContent.setPoliteLanguage("歡迎光臨!");
return slipContent;
}
/**
* 送單
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public PrintContent adaptationServingPaperContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean) {
public PrintContent adaptationSendOrderPaperContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean) {
PrintServingPaperContent servingPaperContent = new PrintServingPaperContent();
servingPaperContent.setBrand(RestaurantInfoManager.newInstance().getBrandName());
servingPaperContent.setResturantName(RestaurantInfoManager.newInstance().getRestaurantName());
......@@ -93,11 +112,39 @@ public class PrintContentAdapter implements AdaptationContent {
servingPaperContent.setPerson(tableBean.getPerson());
servingPaperContent.setCreateTime(tableBean.getCreateTime());
servingPaperContent.setOrderNo(doshokuOrder.getOrderNo());
//送單
servingPaperContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getNewFoodList()));
servingPaperContent.setPoliteLanguage("歡迎光臨!");
return servingPaperContent;
}
/**
* 上菜紙
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public PrintContent adaptationServingPaperContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean) {
PrintServingPaperContent servingPaperContent = new PrintServingPaperContent();
servingPaperContent.setBrand(RestaurantInfoManager.newInstance().getBrandName());
servingPaperContent.setResturantName(RestaurantInfoManager.newInstance().getRestaurantName());
servingPaperContent.setTableName(tableBean.getTableName());
servingPaperContent.setPerson(tableBean.getPerson());
servingPaperContent.setCreateTime(tableBean.getCreateTime());
servingPaperContent.setOrderNo(doshokuOrder.getOrderNo());
// servingPaperContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getNewFoodList()));
servingPaperContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getShoppingCart().getOrderCommodityList()));
servingPaperContent.setPoliteLanguage("歡迎光臨!");
return servingPaperContent;
}
/**
* 打印結賬單
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public PrintContent adaptationBillContent(DoshokuOrder doshokuOrder, TableBean.DataBean tableBean) {
PrintBillContent billContent = new PrintBillContent();
......@@ -107,7 +154,7 @@ public class PrintContentAdapter implements AdaptationContent {
billContent.setPerson(tableBean.getPerson());
billContent.setCreateTime(tableBean.getCreateTime());
billContent.setOrderNo(doshokuOrder.getOrderNo());
billContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getNewFoodList()));
billContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getShoppingCart().getOrderCommodityList()));
billContent.setBillItemList(billItemCastPrintBillItemList(doshokuOrder.getShoppingCart().getBillItemList()));
billContent.setPayMethodItemList(payMethodItemCastPrintBillItemList(doshokuOrder.getBillMoney()));
billContent.setWholeAmount(doshokuOrder.getShoppingCart().getWholeAmount());
......
......@@ -60,7 +60,7 @@ public class ConnectPrintUtil {
socketMap.put(ip, socket);
} catch (IOException e) {
socketMap.remove(ip);
setState(PrintSocketHolder.ERROR_1, "連接失敗" + e.getMessage());
setState(PrintSocketHolder.ERROR_2, "連接失敗" + e.getMessage());
e.printStackTrace();
}
}
......
package com.gingersoft.gsa.cloud.print.newprint;
import android.bluetooth.BluetoothDevice;
import android.os.AsyncTask;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.PrintDataMaker;
import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import java.util.List;
public class PrintUtil {
protected final String TAG = this.getClass().getSimpleName();
private PrintSocketHolder holder;
private int mReconnectTimes = 0;
private int time = 0;
private String prjIds;
private PrintSocketHolder.OnStateChangedListener listener;
private PrintExecutor.OnPrintResultListener mListener;
private PrintExecutor.OnPrjPrintResultListener onPrjPrintResultListener;
public PrintUtil() {
// holder = new PrintSocketHolder(printerDeviceBean);
}
/**
* 执行打印请求
*
* @return 错误代码
*/
private int doRequest(PrintDataMaker maker) {
LoganManager.w_printer(TAG,"PrintTask doRequest");
if (mReconnectTimes == 0) {
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
List<byte[]> data = maker.getPrintData();
prjIds = maker.getPrjIds();
if (!holder.isSocketPrepared()) {
int prepare = holder.prepareSocket();
if (prepare != PrintSocketHolder.ERROR_0)
return prepare;
}
return holder.sendData(data);
} else {
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
List<byte[]> data = maker.getPrintData();
prjIds = maker.getPrjIds();
if (holder.isSocketPrepared()) {
if (sendData(data))
return PrintSocketHolder.ERROR_0;
else
return PrintSocketHolder.ERROR_100;
} else {
if (prepareSocket() && sendData(data)) {
return PrintSocketHolder.ERROR_0;
} else {
return PrintSocketHolder.ERROR_100;
}
}
}
}
/**
* 执行打印请求
*
* @return 错误代码
*/
public int doPrinterRequest(PrintDataMaker maker) {
holder.setOnStateChangedListener(listener);
return doRequest(maker);
}
private boolean prepareSocket() {
time++;
return time < mReconnectTimes &&
(holder.prepareSocket() == PrintSocketHolder.ERROR_0 || prepareSocket());
}
private boolean sendData(List<byte[]> data) {
if (holder.sendData(data) == PrintSocketHolder.ERROR_0) {
time = 0;
return true;
} else {
return prepareSocket() && sendData(data);
}
}
/**
* 异步执行打印请求
*/
public void doPrinterRequestAsync(PrintDataMaker maker) {
// new PrintExecutor.PrintTask().execute(maker);
}
/**
* 销毁
*/
public int closeSocket() {
return holder.closeSocket();
}
/**
* 设置IP及端口
*/
public void setIp(PrinterDeviceBean printerDeviceBean) {
holder.setIp(printerDeviceBean);
}
/**
* 设置蓝牙
*
* @param device 设备
*/
public void setDevice(BluetoothDevice device) {
holder.setDevice(device);
}
/**
* 设置状态监听
*
* @param listener 监听
*/
public void setOnStateChangedListener(PrintSocketHolder.OnStateChangedListener listener) {
this.listener = listener;
}
/**
* 设置重连次数
*
* @param times 次数
*/
public void setReconnectTimes(int times) {
mReconnectTimes = times;
}
/**
* 设置结果回调
*
* @param listener 回调
*/
public void setOnPrintResultListener(PrintExecutor.OnPrintResultListener listener) {
this.mListener = listener;
}
public interface OnPrintResultListener {
void onResult(int errorCode, PrinterDeviceBean printerDeviceBean);
}
/**
* PRJ打印結果回調
*/
public interface OnPrjPrintResultListener {
void onResult(int errorCode, String ids);
}
public void setOnPrjPrintResultListener(PrintExecutor.OnPrjPrintResultListener onPrjPrintResultListener) {
this.onPrjPrintResultListener = onPrjPrintResultListener;
}
private class PrintTask extends AsyncTask<PrintDataMaker, Integer, Integer> implements
PrintSocketHolder.OnStateChangedListener {
@Override
protected void onPreExecute() {
super.onPreExecute();
holder.setOnStateChangedListener(this);
}
@Override
protected Integer doInBackground(PrintDataMaker... makers) {
if (makers == null || makers.length < 1)
return PrintSocketHolder.ERROR_0;
return doRequest(makers[0]);
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
if (values == null || values.length < 1)
return;
if (listener != null)
listener.onStateChanged(values[0], holder.getPrinterDeviceBean());
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
if (integer != null) {
onResult(integer);
}
}
/**
* 打印结果
*
* @param errorCode 错误代码
*/
private void onResult(int errorCode) {
try {
if (mListener != null)
mListener.onResult(errorCode, holder.getPrinterDeviceBean());
if (onPrjPrintResultListener != null) {
onPrjPrintResultListener.onResult(errorCode, prjIds);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
publishProgress(state);
}
}
}
//package com.gingersoft.gsa.cloud.print.newprint;
//
//import android.bluetooth.BluetoothDevice;
//import android.os.AsyncTask;
//
//import com.gingersoft.gsa.cloud.common.logan.LoganManager;
//import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
//import com.gingersoft.gsa.cloud.print.PrintDataMaker;
//import com.gingersoft.gsa.cloud.print.PrintExecutor;
//import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
//
//import java.util.List;
//
//public class PrintUtil {
//
// protected final String TAG = this.getClass().getSimpleName();
//
// private PrintSocketHolder holder;
// private int mReconnectTimes = 0;
// private int time = 0;
// private String prjIds;
// private PrintSocketHolder.OnStateChangedListener listener;
// private PrintExecutor.OnPrintResultListener mListener;
// private PrintExecutor.OnPrjPrintResultListener onPrjPrintResultListener;
//
// public PrintUtil() {
//// holder = new PrintSocketHolder(printerDeviceBean);
// }
//
// /**
// * 执行打印请求
// *
// * @return 错误代码
// */
// private int doRequest(PrintDataMaker maker) {
// LoganManager.w_printer(TAG,"PrintTask doRequest");
// if (mReconnectTimes == 0) {
// holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
// List<byte[]> data = maker.getPrintData();
// prjIds = maker.getPrjIds();
// if (!holder.isSocketPrepared()) {
// int prepare = holder.prepareSocket();
// if (prepare != PrintSocketHolder.ERROR_0)
// return prepare;
// }
// return holder.sendData(data);
// } else {
// holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
// List<byte[]> data = maker.getPrintData();
// prjIds = maker.getPrjIds();
// if (holder.isSocketPrepared()) {
// if (sendData(data))
// return PrintSocketHolder.ERROR_0;
// else
// return PrintSocketHolder.ERROR_100;
// } else {
// if (prepareSocket() && sendData(data)) {
// return PrintSocketHolder.ERROR_0;
// } else {
// return PrintSocketHolder.ERROR_100;
// }
// }
// }
// }
//
// /**
// * 执行打印请求
// *
// * @return 错误代码
// */
// public int doPrinterRequest(PrintDataMaker maker) {
// holder.setOnStateChangedListener(listener);
// return doRequest(maker);
// }
//
// private boolean prepareSocket() {
// time++;
// return time < mReconnectTimes &&
// (holder.prepareSocket() == PrintSocketHolder.ERROR_0 || prepareSocket());
// }
//
// private boolean sendData(List<byte[]> data) {
// if (holder.sendData(data) == PrintSocketHolder.ERROR_0) {
// time = 0;
// return true;
// } else {
// return prepareSocket() && sendData(data);
// }
// }
//
// /**
// * 异步执行打印请求
// */
// public void doPrinterRequestAsync(PrintDataMaker maker) {
//// new PrintExecutor.PrintTask().execute(maker);
// }
//
// /**
// * 销毁
// */
// public int closeSocket() {
// return holder.closeSocket();
// }
//
// /**
// * 设置IP及端口
// */
// public void setIp(PrinterDeviceBean printerDeviceBean) {
// holder.setIp(printerDeviceBean);
// }
//
// /**
// * 设置蓝牙
// *
// * @param device 设备
// */
// public void setDevice(BluetoothDevice device) {
// holder.setDevice(device);
// }
//
// /**
// * 设置状态监听
// *
// * @param listener 监听
// */
// public void setOnStateChangedListener(PrintSocketHolder.OnStateChangedListener listener) {
// this.listener = listener;
// }
//
// /**
// * 设置重连次数
// *
// * @param times 次数
// */
// public void setReconnectTimes(int times) {
// mReconnectTimes = times;
// }
//
// /**
// * 设置结果回调
// *
// * @param listener 回调
// */
// public void setOnPrintResultListener(PrintExecutor.OnPrintResultListener listener) {
// this.mListener = listener;
// }
//
// public interface OnPrintResultListener {
// void onResult(int errorCode, PrinterDeviceBean printerDeviceBean);
// }
//
// /**
// * PRJ打印結果回調
// */
// public interface OnPrjPrintResultListener {
// void onResult(int errorCode, String ids);
// }
//
// public void setOnPrjPrintResultListener(PrintExecutor.OnPrjPrintResultListener onPrjPrintResultListener) {
// this.onPrjPrintResultListener = onPrjPrintResultListener;
// }
//
// private class PrintTask extends AsyncTask<PrintDataMaker, Integer, Integer> implements
// PrintSocketHolder.OnStateChangedListener {
//
// @Override
// protected void onPreExecute() {
// super.onPreExecute();
// holder.setOnStateChangedListener(this);
// }
//
// @Override
// protected Integer doInBackground(PrintDataMaker... makers) {
// if (makers == null || makers.length < 1)
// return PrintSocketHolder.ERROR_0;
// return doRequest(makers[0]);
// }
//
// @Override
// protected void onProgressUpdate(Integer... values) {
// super.onProgressUpdate(values);
// if (values == null || values.length < 1)
// return;
// if (listener != null)
// listener.onStateChanged(values[0], holder.getPrinterDeviceBean());
// }
//
// @Override
// protected void onPostExecute(Integer integer) {
// super.onPostExecute(integer);
// if (integer != null) {
// onResult(integer);
// }
// }
//
// /**
// * 打印结果
// *
// * @param errorCode 错误代码
// */
// private void onResult(int errorCode) {
// try {
// if (mListener != null)
// mListener.onResult(errorCode, holder.getPrinterDeviceBean());
// if (onPrjPrintResultListener != null) {
// onPrjPrintResultListener.onResult(errorCode, prjIds);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//
// @Override
// public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
// publishProgress(state);
// }
// }
//}
......@@ -3,6 +3,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:orientation="horizontal">
<TextView
......
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