Commit 9d1b9379 by Wyh

凍鏈接單優化,打印回調優化

parent 25817e40
......@@ -12,15 +12,14 @@ import com.gingersoft.coldchain_module.mvp.model.bean.PickUpBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ShipAnyOrdersNewBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ThirdItem;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateRestaurantStateBean;
import com.gingersoft.gsa.cloud.common.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInfoUtils;
import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.order.order.TakeawayOrder;
......@@ -330,6 +329,8 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
third.add(thirdItemItem);
}
}
Log.e("eee", "調用第三方物流接口開始");
//第三方物流
RequestBody requestBody = new FormBody.Builder()
.add("orderId", dataBean.getID() + "")
.add("items", GsonUtils.GsonString(third))
......@@ -346,6 +347,7 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
.subscribe(new ErrorHandleSubscriber<ShipAnyOrdersNewBean>(mErrorHandler) {
@Override
public void onNext(@NonNull ShipAnyOrdersNewBean info) {
Log.e("eee", "調用第三方物流接口結束:");
if (info != null && info.isSuccess()) {
//修改訂單狀態
updateOrderState(dataBean, ColdChainConstants.ORDER_CONFIRMED);
......@@ -355,13 +357,14 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
}
private void printColdChainOrder(OrderDetails.DataBean dataBean) {
LogUtil.w("eee", "凍鏈自動上菜紙" + RestaurantExpandInfoUtils.getValue(ExpandConstant.AutoPrinterPaper, true));
if (RestaurantExpandInfoUtils.getValue(ExpandConstant.AutoPrinterPaper, true)) {
//打印凍鏈上菜紙
dataBean.setOrder_type(8);
TakeawayOrder.getInstance().getShoppingCart().setDeliveryAndPickupData(dataBean);
PrintContentAdapter contentAdapter = new PrintContentAdapter();
PrintContent printContent = contentAdapter.adaptationPrintTakeawayFormContent(dataBean);
Log.e("eee", "打印凍鏈上菜紙");
LogUtil.w("eee", "打印凍鏈上菜紙");
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_OTHER_ORDER)
.addParam(PrintConstans.PRINT_CONTENT, printContent)
......@@ -390,27 +393,34 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
}
//添加PRJ
addPrj(dataBean);
RequestBody requestBody = new FormBody.Builder()
.add("memberId", UserContext.newInstance().getMemberId() + "")
.add("orderId", dataBean.getID() + "")
.add("status", status + "")
.add("", UserContext.newInstance().getMemberName())
.build();
mModel.updateOrderStatus(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("確認訂單中,請稍候..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<UpdateOrderStatusBean>(mErrorHandler) {
@Override
public void onNext(@NonNull UpdateOrderStatusBean info) {
mRootView.refreshOrderState(dataBean.getID());
//打印凍鏈上菜紙
printColdChainOrder(dataBean);
}
});
//打印凍鏈上菜紙
printColdChainOrder(dataBean);
//修改訂單狀態
//後台會修改狀態,這裡就不修改
// RequestBody requestBody = new FormBody.Builder()
// .add("memberId", UserContext.newInstance().getMemberId() + "")
// .add("orderId", dataBean.getID() + "")
// .add("status", status + "")
// .add("", UserContext.newInstance().getMemberName())
// .build();
// LogUtil.w("eee", "修改訂單狀態開始----start");
// mModel.updateOrderStatus(requestBody)
// .subscribeOn(Schedulers.io())
// .doOnSubscribe(disposable -> mRootView.showLoading("確認訂單中,請稍候..."))
// .subscribeOn(AndroidSchedulers.mainThread())
// .observeOn(AndroidSchedulers.mainThread())
// .doAfterTerminate(() -> mRootView.hideLoading())
// .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
// .subscribe(new ErrorHandleSubscriber<UpdateOrderStatusBean>(mErrorHandler) {
// @Override
// public void onNext(@NonNull UpdateOrderStatusBean info) {
// LogUtil.w("eee", "修改訂單狀態結束----end----" + info.toString());
// mRootView.refreshOrderState(dataBean.getID());
// //打印凍鏈上菜紙
// printColdChainOrder(dataBean);
// }
// });
}
private void addPrj(OrderDetails.DataBean dataBean) {
......@@ -439,6 +449,7 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
.add("restaurantId", RestaurantInfoManager.newInstance().getRestaurantId() + "")
.add("orderDetailsIds", ids.toString())
.build();
LogUtil.i("eee", "添加prj");
Disposable subscribe = mModel.addPrj(requestBody)
.subscribeOn(Schedulers.io()).subscribe(s -> {
});
......
......@@ -40,7 +40,7 @@ import com.gingersoft.gsa.cloud.common.constans.DeliveryPickConstans;
import com.gingersoft.gsa.cloud.common.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInfoUtils;
import com.gingersoft.gsa.cloud.common.service.GetInfoUpdateService;
import com.gingersoft.gsa.cloud.common.service.DataNotificationService;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.utils.AppDialog;
......@@ -53,7 +53,6 @@ import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import java.lang.reflect.Method;
import java.util.ArrayList;
......@@ -62,7 +61,6 @@ import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
import io.reactivex.disposables.Disposable;
import static androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -207,7 +205,7 @@ public class ColdChainMainActivity extends BaseFragmentActivity<ColdChainMainPre
private void initService() {
//開啟websocket
Intent intent = new Intent(getApplicationContext(), GetInfoUpdateService.class);
Intent intent = new Intent(getApplicationContext(), DataNotificationService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent);
} else {
......@@ -222,28 +220,33 @@ public class ColdChainMainActivity extends BaseFragmentActivity<ColdChainMainPre
registerReceiver(clearHeartBroadcastReceiver, intentFilter);
}
private GetInfoUpdateService.MyBind bind = null;
private DataNotificationService.MyBind bind = null;
private long lastClickTime = 0;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
bind = (GetInfoUpdateService.MyBind) service;
bind = (DataNotificationService.MyBind) service;
if (bind != null) {
bind.setOnPostCallBack(type -> {
// -1斷開連接,\n-2:消息傳輸錯誤,\n0:連接消息,\n1:登錄通知,\n2:登出通知,\n3:外賣送單通知,\n4:自取送單通知,\n5:歷史訂單通知,\n6:修改訂單狀態通知,\n7:支付成功通知"
if (type == 3 || type == 5
|| type == 6 || type == 7) {//ColdChainConstants.orderType
|| type == 6 || type == 7) {
long nowTime = System.currentTimeMillis();
if (nowTime - lastClickTime < 8000) {
return;
}
lastClickTime = nowTime;
fragments.get(viewPager.getCurrentItem()).onRefreshData();
mPresenter.getBalance();
if (type != 5) {
getNumByOrderTypeInvoke("loadNumber");
}
//判斷要不要自動接單
if(autoReceivingOrders.isChecked()){
if (autoReceivingOrders.isChecked()) {
mPresenter.startToBeConfirmedOrderList(restaurantId);
}
}
if (type == 3 || type == 6 || type == 7) {
getNumByOrderTypeInvoke("loadNumber");
}
});
bind.execute(aBoolean -> null);
bind.setJumpActivity(ColdChainMainActivity.class);
......@@ -255,7 +258,6 @@ public class ColdChainMainActivity extends BaseFragmentActivity<ColdChainMainPre
}
};
private int confirmedOrderNum;
@Override
......
......@@ -28,7 +28,7 @@
</intent-filter>
</activity>
<service android:name="com.gingersoft.gsa.cloud.common.service.GetInfoUpdateService" />
<service android:name="com.gingersoft.gsa.cloud.common.service.DataNotificationService" />
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
......
......@@ -7,7 +7,7 @@ import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.common.service.GetInfoUpdateService;
import com.gingersoft.gsa.cloud.common.service.DataNotificationService;
import com.gingersoft.gsa.delivery_pick_mode.data.network.ServiceCreator;
import com.gingersoft.gsa.delivery_pick_mode.mvp.ui.activity.PrjQueryActivity;
import com.gingersoft.gsa.delivery_pick_mode.mvp.ui.activity.SendOrderActivity;
......@@ -52,7 +52,7 @@ public class DeliveryPickComponent implements IComponent {
CC.sendCCResult(cc.getCallId(), CCResult.success());
break;
case "closeHeart":
Intent intent = new Intent(cc.getContext(), GetInfoUpdateService.class);
Intent intent = new Intent(cc.getContext(), DataNotificationService.class);
cc.getContext().stopService(intent);
break;
case "historyActivity":
......
......@@ -22,7 +22,7 @@ import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails.Companion.veri
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.service.DataNotificationService
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil
......@@ -232,7 +232,8 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
} else {
}
} else {}
} else {
}
}
//獲取預約單
repository.requestOrderList(restaurantId.toString(), fragmentStatus[1], fragmentType[0], "1", orderNo, phone, 1).apply {
......@@ -420,11 +421,11 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
thirdSend(restaurantId, dataBean, trafficType, status, isPrintPrj, isPrintBill, listener)
}
}
}, {
}, { e ->
listener.invoke(getMsgBean(0, "", false))
it.printStackTrace()
GetInfoUpdateService.loginfo.append("錯誤信息111:" + it.message + " LOCALIZEDMESSAGE:" + it.localizedMessage + it.cause)
GetInfoUpdateService.loginfo.append("\n")
e.printStackTrace()
DataNotificationService.loginfo.append("錯誤信息111:" + e.message + " LOCALIZEDMESSAGE:" + e.localizedMessage + e.cause)
DataNotificationService.loginfo.append("\n")
})
}
......@@ -564,12 +565,12 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
//添加PRJ
//單獨包起來,哪怕這接口報錯也不要影響到正常的邏輯
repository.addPrj(dataBean.Order_ID.toString(), restaurantId.toString(), ids.toString())
GetInfoUpdateService.loginfo.append("添加PRJ:orderId:" + dataBean.Order_ID.toString() + "restaurantId:" + restaurantId + "orderDetailsIds:" + ids.toString())
GetInfoUpdateService.loginfo.append("\n")
DataNotificationService.loginfo.append("添加PRJ:orderId:" + dataBean.Order_ID.toString() + "restaurantId:" + restaurantId + "orderDetailsIds:" + ids.toString())
DataNotificationService.loginfo.append("\n")
}, {
it.printStackTrace()
GetInfoUpdateService.loginfo.append("錯誤信息222:" + it.message + " LOCALIZEDMESSAGE:" + it.localizedMessage + it.cause)
GetInfoUpdateService.loginfo.append("\n")
DataNotificationService.loginfo.append("錯誤信息222:" + it.message + " LOCALIZEDMESSAGE:" + it.localizedMessage + it.cause)
DataNotificationService.loginfo.append("\n")
})
}
if (isPrintBill) {
......
......@@ -31,7 +31,7 @@ import com.gingersoft.gsa.cloud.common.constans.ExpandConstant
import com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans.TAKEAWAY_TYPE
import com.gingersoft.gsa.cloud.common.constans.FunctionManagerConstants
import com.gingersoft.gsa.cloud.common.function.FunctionManager
import com.gingersoft.gsa.cloud.common.service.GetInfoUpdateService
import com.gingersoft.gsa.cloud.common.service.DataNotificationService
import com.gingersoft.gsa.cloud.common.service.PostCallBack
import com.gingersoft.gsa.cloud.order.order.BaseOrder
import com.gingersoft.gsa.cloud.ui.utils.AppDialog
......@@ -387,7 +387,7 @@ class DeliveryOrderMainActivity : BaseActivity<IPresenter>(), View.OnClickListen
private fun initWebsocket() {
//開啟websocket
val service = Intent(applicationContext, GetInfoUpdateService::class.java)
val service = Intent(applicationContext, DataNotificationService::class.java)
val notification: NotificationManagerCompat = NotificationManagerCompat.from(this)
if (!notification.areNotificationsEnabled()) {
//未開啟通知權限
......@@ -437,12 +437,12 @@ class DeliveryOrderMainActivity : BaseActivity<IPresenter>(), View.OnClickListen
unbindService(serviceConnection)
}
var bind: GetInfoUpdateService.MyBind? = null
var bind: DataNotificationService.MyBind? = null
var lastRefreshTime: Long = 0
private var serviceConnection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName, service: IBinder) {
bind = service as GetInfoUpdateService.MyBind
bind = service as DataNotificationService.MyBind
bind?.let { it ->
it.setOnPostCallBack(object : PostCallBack {
override fun callBack(type: Int) {
......
......@@ -3,7 +3,7 @@ package com.gingersoft.gsa.delivery_pick_mode.ui.activity;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.gingersoft.gsa.cloud.common.service.GetInfoUpdateService;
import com.gingersoft.gsa.cloud.common.service.DataNotificationService;
import com.gingersoft.gsa.delivery_pick_mode.R;
public class LogActivity extends AppCompatActivity {
......@@ -14,13 +14,13 @@ public class LogActivity extends AppCompatActivity {
setContentView(R.layout.activity_log);
loadInfo();
findViewById(R.id.btn_clear_log).setOnClickListener(v -> {
GetInfoUpdateService.loginfo.setLength(0);
DataNotificationService.loginfo.setLength(0);
loadInfo();
});
findViewById(R.id.btn_back).setOnClickListener(v ->finish());
}
private void loadInfo() {
((TextView) findViewById(R.id.tv_log)).setText(GetInfoUpdateService.loginfo.toString());
((TextView) findViewById(R.id.tv_log)).setText(DataNotificationService.loginfo.toString());
}
}
package com.joe.print.mvp.print;
public interface PrintListener {
void printStateChanged(int state);
void printSuccess();
void printFailure(String msg);
}
......@@ -37,6 +37,8 @@ import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInf
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.AidlUtil;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
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.view.ImageUtils;
......@@ -81,6 +83,7 @@ import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import com.xuexiang.rxutil2.rxjava.task.RxIOTask;
import java.io.IOException;
import java.net.ConnectException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
......@@ -96,7 +99,7 @@ import static com.joe.print.mvp.print.common.HtmlContract.LABLE_DIV;
import static com.joe.print.mvp.print.common.HtmlContract.LABLE_P;
@Getter
public abstract class PrinterRoot<T extends PrintContent> implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, ReceiveListener {
public abstract class PrinterRoot<T extends PrintContent> implements PrintExecutor.OnPrintResultListener, ReceiveListener {
private final String TAG = getClass().getSimpleName();
@Inject
......@@ -106,7 +109,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
private final static int N5_PAPER_WIDTH = 500;//N5打印機紙張寬度
final static String DELIMITER = "/";//將打印位置區分開來。。。。,暫時只有廚房單用到
private PrintListener printListener;
// private PrintListener printListener;
private static SparseArray<PrinterRoot> mPrinterStrategy = new SparseArray<>();
......@@ -140,10 +143,10 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
protected void setPrintContent(T printContent) {
}
public PrinterRoot setPrintListener(PrintListener printListener) {
this.printListener = printListener;
return this;
}
// public PrinterRoot setPrintListener(PrintListener printListener) {
// this.printListener = printListener;
// return this;
// }
/**
* 把Map中Key相同,则各个value添加到一起,汇总值
......@@ -220,20 +223,20 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
/**
* 本機打印
*/
public void locationPrint(List<Bitmap> bitmaps, String[] BBPosPrintDatas, PrintListener listener) {
public void locationPrint(List<Bitmap> bitmaps, String[] BBPosPrintDatas) {
//本機打印
String model = Build.MODEL;
if (PrintConstans.PRINT_MODEL_V2.contains(model)) {
sunmiPrint(bitmaps, listener);
sunmiPrint(bitmaps);
} else if (PrintConstans.PRINT_MODEL_N5.contains(model)) {
//N5打印
n5Print(bitmaps, listener);
n5Print(bitmaps);
} else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) {
//BBPOS Wisepos 打印 localhost 192.168.1.162
//打印結果示例:<?xml version="1.0" encoding= "UTF-8" ?><WAPIResult><status>SUCCESS</status><requestType>PRINT</requestType><state>IDLE</state><systemInfo><appVersion>1.22.4.4.007</appVersion><OSVersion>9</OSVersion><ip>192.168.1.162</ip><mac>2059a018d3d6</mac><serialNumber>WSS503013000075</serialNumber><firmware>WSS50.501-02 (5.00.01.02.beta7)</firmware><hardware></hardware><terminalConfig>GNZZ_MTIPD_v13_with_AE_v1</terminalConfig><key>034040XXXXXXXXXXXXXX</key><bootloader>6.00.00.20 (6.00.00.34)</bootloader></systemInfo><timestamp>1601021267673</timestamp></WAPIResult>
new BBposPrint().print(BBPosPrintDatas, listener, false);
new BBposPrint().print(BBPosPrintDatas, false);
} else {
listener.printFailure("暫不支持本機型打印");
printFailure("暫不支持本機型打印", UpdateBean.FAIL_LOCAL_PRINT_NOT_DEVICE);
}
}
......@@ -241,20 +244,18 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
* n5打印
*
* @param bitmaps
* @param listener
*/
private void n5Print(List<Bitmap> bitmaps, PrintListener listener) {
private void n5Print(List<Bitmap> bitmaps) {
try {
for (int i = 0; i < bitmaps.size(); i++) {
PrinterUtil.appendImage(ImageUtils.zoomDrawable(bitmaps.get(i), N5_PAPER_WIDTH), PrinterConstant.ALIGN_CENTER);
PrinterUtil.appendPrnStr("\n", 24, PrinterConstant.ALIGN_CENTER, false);
PrinterUtil.appendPrnStr("\n", 24, PrinterConstant.ALIGN_CENTER, false);
}
startN5Print(listener);
startN5Print();
} catch (RemoteException e) {
e.printStackTrace();
listener.printFailure("打印失敗,請重試");
printFailure(e.getMessage(), UpdateBean.FAILED_PRINT_N5);
}
}
......@@ -262,9 +263,8 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
* 商米打印
*
* @param bitmaps
* @param listener
*/
private void sunmiPrint(List<Bitmap> bitmaps, PrintListener listener) {
private void sunmiPrint(List<Bitmap> bitmaps) {
//商米打印
PrinterPlugins.getOnPrinterFlowHandler().connectionSuccess();
AidlUtil.getInstance().printBitmaps(bitmaps, SUNMI_PAPER_WIDTH, new InnerResultCallbcak() {
......@@ -272,9 +272,9 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
public void onRunResult(boolean isSuccess) {
//返回接⼝执⾏的情况(并⾮真实打印):成功或失败
if (isSuccess) {
listener.printSuccess();
printSuccess();
} else {
listener.printFailure("sunmi打印失敗");
printFailure("sunmi打印失敗", UpdateBean.FAILED_PRINT);
}
}
......@@ -299,19 +299,18 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
private void startN5Print(PrintListener listener) {
private void startN5Print() {
try {
PrinterUtil.startPrint(true, new IOnPrintCallback.Stub() {
@Override
public void onPrintResult(int i) {
if (i == 0) {
//打印成功
listener.printSuccess();
printSuccess();
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
} else {
//打印失敗
listener.printFailure("打印失敗");
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(UpdateBean.getStateByCode(i)), i);
printFailure("打印失敗", i);
}
}
......@@ -320,11 +319,10 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
return this;
}
});
} catch (
RemoteException e) {
} catch (RemoteException e) {
e.printStackTrace();
//打印失敗
listener.printFailure("打印失敗");
printFailure(e.getMessage(), UpdateBean.FAILED_PRINT_N5);
}
}
......@@ -360,7 +358,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
}
}
ipPrint(printerDeviceBean, bitmaps, this, this);
ipPrint(printerDeviceBean, bitmaps);
}
public void disconnectEpson() {
......@@ -369,24 +367,51 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
}
private void ipPrint(PrinterDeviceBean printerDeviceBean, List<Bitmap> bitmaps, PrintSocketHolder.OnStateChangedListener stateChangedListener, PrintExecutor.OnPrintResultListener resultListener) {
private void ipPrint(PrinterDeviceBean printerDeviceBean, List<Bitmap> bitmaps) {
if (executor == null) {
executor = new PrintExecutor()
.setOnStateChangedListener(stateChangedListener)
.setOnPrintResultListener(resultListener);
.setOnStateChangedListener(state -> {
// switch (state) {
// case PrintSocketHolder.STATE_1:
// tip = "開始創建連接";
// break;
// case PrintSocketHolder.STATE_2:
// tip = "創建連接成功,開始發送數據";
// break;
// case PrintSocketHolder.STATE_3:
// tip = "開始寫入數據";
// break;
// case PrintSocketHolder.STATE_4://关闭输出流
// tip = "關閉中";
// killMyself();
// break;
// default:
// break;
// }
LogUtil.e("eee", "打印狀態:" + state);
if(state == PrintSocketHolder.STATE_4){
printSuccess();
}
})
.setOnPrintResultListener(this::onResult);
}
IpPrintMaker maker = new IpPrintMaker(480, bitmaps, printerDeviceBean.getIp(), printerDeviceBean.getPort());
executor.doPrinterRequestAsync(maker);
}
/**
* usb打印
*
* @param context
* @param bitmaps
*/
public void usbPrint(Context context, List<Bitmap> bitmaps) {
UsbPrint usbPrint = new UsbPrint(context, (code, printId) -> {
//打印結果
if (code == SendResultCode.SEND_SUCCESS) {
printSuccess();
} else if (code == SendResultCode.SEND_FAILED) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception("usb打印失敗"), 0);
printFailure("打印失敗");
printFailure("usb打印失敗", UpdateBean.FAIL_USB_PRINT);
}
});
UsbPrinterFinder printerFinder = new UsbPrinterFinder(context, new PrinterFinderCallback<UsbPrinter>() {
......@@ -420,7 +445,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
} else {
boolean hasPermission = new Intent().getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);
printListener.printFailure("未找到USB打印機");
printFailure("未找到USB打印機", UpdateBean.FAIL_USB_PRINT_NOT_FIND);
}
}
});
......@@ -463,68 +488,62 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
return;
case PrintSocketHolder.ERROR_6:
LoganManager.w_printer(TAG, "生成打印數據失敗");
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception("生成打印數據失敗"));
printFailure("生成打印數據失敗");
printConnectError(UpdateBean.getStateByCode(errorCode));
break;
case PrintSocketHolder.ERROR_7:
LoganManager.w_printer(TAG, "連接打印機失敗");
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception("連接打印機失敗"));
printFailure("連接打印機失敗");
printConnectError(UpdateBean.getStateByCode(errorCode));
break;
case PrintSocketHolder.ERROR_10:
LoganManager.w_printer(TAG, "打印機連接成功,發送數據出現問題");
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception("打印機連接成功,發送數據出現問題"), errorCode);
printFailure("打印失敗,錯誤碼:" + errorCode);
printFailure(UpdateBean.getStateByCode(errorCode), errorCode);
break;
case PrintSocketHolder.ERROR_9:
LoganManager.w_printer(TAG, "IP地址為空");
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception("IP地址為空"));
printFailure("IP地址為空");
printConnectError(UpdateBean.getStateByCode(errorCode));
break;
case PrintSocketHolder.ERROR_66:
LoganManager.w_printer(TAG, "關閉Socket出錯");
PrinterPlugins.getOnPrinterFlowHandler().disconnect(new Exception("關閉打印機連接出错"));
printDisconnect("關閉打印機連接出错");
break;
case PrintSocketHolder.ERROR_11:
printFailure("打印機沒紙了", UpdateBean.FAIL_NOT_PAPER);
break;
case PrintSocketHolder.ERROR_12:
//暫時只有針式打印機有
printConnectError("打印機初始化失敗");
break;
case PrintSocketHolder.ERROR_TIMEOUT:
printConnectError("連接打印機超時");
break;
default:
break;
}
setPrintState(errorCode);
}
private void printSuccess() {
if (printListener != null) {
printListener.printSuccess();
@Override
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) {
if (i == 0) {
printSuccess();
} else {
printFailure("打印失敗", UpdateBean.FAILED_PRINT);
}
}
private void printFailure(String state) {
if (printListener != null) {
printListener.printFailure(state);
}
private void printSuccess() {
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
}
@Override
public void onStateChanged(int state) {
setPrintState(state);
private void printFailure(String msg, int code) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(msg), code);
}
private void setPrintState(int state) {
if (printListener != null) {
printListener.printStateChanged(state);
}
private void printConnectError(String msg) {
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception(msg));
}
@Override
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) {
if (printListener != null) {
if (i == 0) {
printSuccess();
} else {
printFailure("打印失敗");
}
}
// EpsonPrint.getInstance().disconnectPrinter();
// EpsonPrint.getInstance().finalizeObject();
private void printDisconnect(String msg) {
PrinterPlugins.getOnPrinterFlowHandler().disconnect(new Exception(msg));
}
......@@ -621,7 +640,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
if (TextUtil.isEmptyOrNullOrUndefined(data.getBillNo())) {
if (DeliveryPickConstans.COLD_CHAIN_TYPE.equals(data.getOrder_type() + "")) {
//凍鏈
tvOrderNumber.setText("訂單號:" +data.getID());
tvOrderNumber.setText("訂單號:" + data.getID());
tvOrderNumber.setVisibility(View.VISIBLE);
} else {
tvOrderNumber.setVisibility(View.GONE);
......@@ -1405,4 +1424,5 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
protected String getBrLable() {
return "<br/>\n";
}
}
\ No newline at end of file
......@@ -5,8 +5,8 @@ import android.text.TextUtils;
import android.util.Xml;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.joe.print.mvp.print.PrintListener;
import com.joe.print.mvp.ui.activity.PrintActivity;
import org.xmlpull.v1.XmlPullParser;
......@@ -15,11 +15,8 @@ import org.xmlpull.v1.XmlPullParserException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.ConnectException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.TimeoutException;
......@@ -43,7 +40,6 @@ public class BBposPrint {
* RESULT_UNKNOWN_MERCHANT : -7
* RESULT_INPUT_INVALID : -8
*/
private static final String RESULT_OK = "RESULT_OK"; //成功
private static final String RESULT_FAILED = "RESULT_FAILED";//失敗
private static final String RESULT_CANCELED = "RESULT_CANCELED";//取消
......@@ -84,10 +80,9 @@ public class BBposPrint {
* 递归打印
*
* @param printDatas 打印数据
* @param listener 回调监听
* @param recursion 是否递归从队列中取打印数据
*/
public void print(String[] printDatas, PrintListener listener, boolean recursion) {
public void print(String[] printDatas, boolean recursion) {
if (!recursion) {
if (printXMLQueues.size() > 0) {
printXMLQueues.clear();
......@@ -117,7 +112,7 @@ public class BBposPrint {
@Override
public void onNext(String s) {
try {
Map<String, String> xmlContentMaps = analysisPrintResult(s, printDatas, listener, recursion);
Map<String, String> xmlContentMaps = analysisPrintResult(s, printDatas, recursion);
String status = xmlContentMaps.get(STATUS);
if (status != null && status.equals("SUCCESS")) {
printSuccesCount++;
......@@ -125,13 +120,13 @@ public class BBposPrint {
String errorMessage = xmlContentMaps.get("ErrorMessage");
if (!TextUtils.isEmpty(errorMessage)) {
if (errorMessage.equals(HTML_FORMAT_ERR)) {
listener.printFailure("內容格式錯誤,無法打印!");
printFailure("內容格式錯誤,無法打印!", 0);
backPrintActivity();
return;
} else if (s.contains("Please login first")) {
login(printDatas, listener, recursion);
login(printDatas, recursion);
} else {
listener.printFailure(errorMessage);
printFailure(errorMessage, 0);
}
}
printErrorCount++;
......@@ -139,11 +134,10 @@ public class BBposPrint {
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
if (s.contains("Failed to connect")) {
listener.printFailure("無法連接打印,請檢查WisePay是否打開");
printFailure("無法連接打印,請檢查WisePay是否打開", 0);
backPrintActivity();
return;
} else if (s.contains("Please login first")) {
login(printDatas, listener, recursion);
login(printDatas, recursion);
}
}
}
......@@ -153,38 +147,38 @@ public class BBposPrint {
public void onError(Throwable e) {
e.printStackTrace();
if (e instanceof ConnectException) {
listener.printFailure("無法連接打印,請檢查WisePay是否打開");
printFailure("無法連接打印,請檢查WisePay是否打開", 0);
backPrintActivity();
return;
} else if (e instanceof TimeoutException) {
listener.printFailure("已超時");
printFailure("已超時", 0);
}
printErrorCount++;
maxRecursionCount--;
printBefore(printDatas,listener);
printBefore(printDatas);
}
@Override
public void onComplete() {
maxRecursionCount--;
printBefore(printDatas,listener);
printBefore(printDatas);
}
});
}
private void printBefore(String[] printDatas,PrintListener listener){
private void printBefore(String[] printData) {
int totalCount = printSuccesCount + printErrorCount;
if (totalCount == printXMLQueues.size()) {
//打印完畢
if (printSuccesCount > 0 && printErrorCount > 0) {
//部分打印失敗
listener.printFailure("打印成功" + printSuccesCount + "張,失敗" + printErrorCount + "張");
printFailure("打印成功" + printSuccesCount + "張,失敗" + printErrorCount + "張", 0);
} else if (printSuccesCount > 0) {
listener.printSuccess();
printSuccess();
}
backPrintActivity();
}else {
printNext(printDatas, listener);
} else {
printNext(printData);
}
}
......@@ -192,10 +186,9 @@ public class BBposPrint {
* 登录bbpos
*
* @param printDatas
* @param listener
* @param recursion
*/
public void login(String[] printDatas, PrintListener listener, boolean recursion) {
public void login(String[] printDatas, boolean recursion) {
OkHttp3Utils.get("http://localhost:8080/pos?UserName=gs01&Password=88888888&transactionType=LOGIN&isExternal=true&apiVersion=21")
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
......@@ -208,14 +201,14 @@ public class BBposPrint {
@Override
public void onNext(String s) {
//登录成功 开始打印
print(printDatas, listener, recursion);
print(printDatas, recursion);
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
if (e instanceof ConnectException) {
listener.printFailure("登錄失敗,無法打印!");
printFailure("登錄失敗,無法打印!", 0);
}
}
......@@ -235,7 +228,7 @@ public class BBposPrint {
GsaCloudApplication.getAppContext().startActivity(intent);
}
private Map<String, String> analysisPrintResult(String s, String[] printDatas, PrintListener listener, boolean recursion) throws XmlPullParserException, IOException {
private Map<String, String> analysisPrintResult(String s, String[] printDatas, boolean recursion) throws XmlPullParserException, IOException {
XmlPullParser xmlPullParser = Xml.newPullParser();
xmlPullParser.setInput(new ByteArrayInputStream(s.getBytes()), "utf-8");
int eventType = xmlPullParser.getEventType();
......@@ -279,11 +272,11 @@ public class BBposPrint {
return xmlContents;
}
private void printNext(String[] printDatas, PrintListener listener) {
private void printNext(String[] printData) {
//打印完一張就移除
printXMLQueues.remove();
//递归进行打印
print(printDatas, listener, true);
print(printData, true);
}
private void closePrintObservable() {
......@@ -292,4 +285,13 @@ public class BBposPrint {
stringObservable = null;
}
}
private void printSuccess() {
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
}
private void printFailure(String msg, int code) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(msg), code);
}
}
package com.joe.print.mvp.ui.activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
......@@ -20,6 +19,7 @@ import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterFlowListener;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
......@@ -37,7 +37,6 @@ 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.PrintInstruction;
import com.joe.print.mvp.print.PrintListener;
import com.joe.print.mvp.print.PrintPrjKitchen;
import com.joe.print.mvp.print.PrinterRoot;
import com.joe.print.mvp.print.maker.OpenCashBoxMaker;
......@@ -46,7 +45,6 @@ import com.joe.print.mvp.ui.view.PrinterLoadingDialog;
import com.joe.print.mvp.ui.view.SelectPrintDevicePopup;
import com.lxj.xpopup.XPopup;
import java.net.ConnectException;
import java.util.List;
import java.util.Map;
......@@ -75,12 +73,9 @@ 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 class PrintActivity extends BaseActivity<PrintPresenter> implements PrintContract.View, PrintExecutor.OnPrintResultListener {
public final static int ADD_PRINT_CODE = 1001;//添加打印機回調
public final static int FINISH = 1003;//關閉頁面
public final static int ADD_PRINT_DEVICE = 1004;//添加打印機
public final static int LACK_OF_PAPER = 1005;//缺紙
public static List<PrinterDeviceBean> printerDeviceBeans;
......@@ -162,12 +157,14 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
public void onPrintSuccess() {
printerResult = true;
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_RESULT, PrinterLoadingDialog.STATUS_SUCCESS, null);
printSuccess();
}
@Override
public void onPrintError(Exception e, int errorCode) {
LogUtil.d("PrinterLoadingDialog", "onPrintError");
printerResult = false;
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_RESULT, PrinterLoadingDialog.STATUS_ERROR, e.getMessage());
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_PRINTING, PrinterLoadingDialog.STATUS_ERROR, e.getMessage());
}
});
}
......@@ -179,7 +176,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
private void actionPrinter() {
LogUtil.d("", "actionPrinter");
showPrintLoadingDialog();
callId = CCUtil.getNavigateCallId(this);
......@@ -191,9 +188,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
mOrderNo = CCUtil.getNavigateParam(this, PrintConstans.PRINT_ORDER_NO, "");
//根據打印類型獲取對應的執行類
printerInIt = PrinterRoot.getPrinterByType(type, printContent);
if (printerInIt != null) {
printerInIt.setPrintListener(this);
}
//初始化打印配置
initPrintConfig(printContent);
}
......@@ -221,7 +215,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
private PrinterDeviceBean defaultPrint;
private void initPrintConfig(PrintContent printContent) {
//開始
PrinterPlugins.getOnPrinterFlowHandler().onPrinterDataBefore(type, type, GsonUtils.GsonString(printContent), GsonUtils.GsonString(defaultPrint));
//獲取通用打印配置
......@@ -246,27 +240,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
if (defaultPrint == null) {
//沒有默認打印機,查看當前餐廳有沒有打印機
//如果當前餐廳有打印機,彈出彈窗讓用戶選擇一個打印機打印
if (printerDeviceBeans != null && printerDeviceBeans.size() > 0) {
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("沒有找到打印機,無法打印");
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception("沒有找到打印機,無法打印"), UpdateBean.FAIL_PRINT_BY_NOT_FIND_DEVICE);
}
});
new XPopup.Builder(mContext).asCustom(selectPrintDevicePopup).show();
} else {
//沒有打印機
ToastUtils.show(mContext, "沒有打印機,請先添加打印機");
}
showSelectPrint(printCurrencyBean);
} else {
//將打印機和通用配置合併
defaultPrint = MyPrintUtils.configPrinterProperties(printCurrencyBean, defaultPrint);
......@@ -275,6 +249,35 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
/**
* 顯示選擇打印機
*
* @param printCurrencyBean
*/
private void showSelectPrint(PrintCurrencyBean printCurrencyBean) {
if (printerDeviceBeans != null && printerDeviceBeans.size() > 0) {
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("沒有找到打印機,無法打印");
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception("沒有找到打印機,無法打印"), UpdateBean.FAIL_PRINT_BY_NOT_FIND_DEVICE);
}
});
new XPopup.Builder(mContext).asCustom(selectPrintDevicePopup).show();
} else {
//沒有打印機
ToastUtils.show(mContext, "沒有打印機,請先添加打印機");
}
}
/**
* 設置廚房單打印數據
*
* @param defaultPrint 默認打印機
......@@ -373,7 +376,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps);
} else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL) {
//本地N5或Sunmi打印
printerInIt.locationPrint(zoomBitmaps, BBPosPrintDatas, this);
printerInIt.locationPrint(zoomBitmaps, BBPosPrintDatas);
} else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_USB) {
//USB打印打印
printerInIt.usbPrint(mContext, zoomBitmaps);
......@@ -394,12 +397,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
private void addPrintProgress(String printState) {
runOnUiThread(new Runnable() {
@Override
public void run() {
printerLoadingDialog.setTitle(printState);
}
});
runOnUiThread(() -> printerLoadingDialog.setTitle(printState));
}
@Override
......@@ -409,96 +407,52 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
return true;
}
@Override
public void printStateChanged(int state) {
String tip = "加載中...";
switch (state) {
case PrintSocketHolder.ERROR_0:
tip = "打印成功";
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
break;
case PrintSocketHolder.ERROR_6:
tip = "生成打印數據失敗";
break;
case PrintSocketHolder.ERROR_7:
tip = "連接打印機失敗";
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new ConnectException(tip));
break;
case PrintSocketHolder.ERROR_4:
tip = "寫入數據失敗";
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(tip), 0);
break;
case PrintSocketHolder.ERROR_9:
tip = "ip地址不能為空";
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new ConnectException(tip));
break;
case PrintSocketHolder.ERROR_10:
tip = "打印機連接成功,獲取輸入流失敗或者發送數據出現問題";
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(tip), 0);
break;
case PrintSocketHolder.ERROR_11:
tip = "打印機沒紙了";
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(tip), 0);
break;
case PrintSocketHolder.ERROR_12:
tip = " 打印機初始化失敗,暫時只有針式打印機有";
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new ConnectException(tip));
break;
case PrintSocketHolder.ERROR_TIMEOUT:
tip = "連接打印機超時";
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new ConnectException(tip));
break;
case PrintSocketHolder.STATE_0:
break;
case PrintSocketHolder.STATE_1:
tip = "開始創建連接";
break;
case PrintSocketHolder.STATE_2:
tip = "創建連接成功,開始發送數據";
break;
case PrintSocketHolder.STATE_3:
tip = "開始寫入數據";
break;
case PrintSocketHolder.STATE_4://关闭输出流
tip = "關閉中";
killMyself();
break;
case FINISH:
killMyself();
break;
case ADD_PRINT_DEVICE:
addPrintDevice();
break;
case LACK_OF_PAPER:
//缺紙
printFailure("打印機缺紙");
tip = "打印機缺紙";
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(tip), 0);
break;
default:
break;
}
LoganManager.w_printer(TAG, "printStateChanged state--->" + tip);
addPrintProgress(tip);
}
/**
* 打印成功
*/
@Override
//
// @Override
// public void printStateChanged(int state) {
// String tip = "加載中...";
// switch (state) {
// case PrintSocketHolder.STATE_1:
// tip = "開始創建連接";
// break;
// case PrintSocketHolder.STATE_2:
// tip = "創建連接成功,開始發送數據";
// break;
// case PrintSocketHolder.STATE_3:
// tip = "開始寫入數據";
// break;
// case PrintSocketHolder.STATE_4://关闭输出流
// tip = "關閉中";
// killMyself();
// break;
// default:
// break;
// }
// LoganManager.w_printer(TAG, "printStateChanged state--->" + tip);
// addPrintProgress(tip);
// }
//
// /**
// * 打印成功
// */
// @Override
public void printSuccess() {
LoganManager.w_printer(TAG, "printFailure 打印成功");
killMyself();
CC.sendCCResult(callId, CCResult.success());
}
@Override
//
// @Override
public void printFailure(String msg) {
LogUtil.d("PrinterLoadingDialog", "printFailure");
if (!TextUtil.isEmptyOrNullOrUndefined(msg)) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception(msg), 0);
ToastUtils.show(GsaCloudApplication.getAppContext(), msg);
CC.sendCCResult(callId, CCResult.error(msg));
} else {
CC.sendCCResult(callId, CCResult.error("print error"));
PrinterPlugins.getOnPrinterFlowHandler().onPrintError(new Exception("print error"), 0);
}
}
......@@ -562,10 +516,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
// printerInIt.print(printerDeviceBeans);
}
private void addPrintDevice() {
printFailure("沒有打印機,請添加");
// startActivityForResult(new Intent(mContext, PrinterAddActivity.class), ADD_PRINT_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
......@@ -587,11 +537,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
@Override
public void onDismiss(DialogInterface dialog) {
}
@Override
protected void onDestroy() {
super.onDestroy();
//關閉打印頁面時,關閉所有打印連接
......@@ -605,12 +550,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
@Override
public void onStateChanged(int state) {
//ip打印狀態修改回調
}
@Override
public void onResult(int errorCode) {
//ip打印結果回調
......
......@@ -4,7 +4,9 @@ import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
......@@ -13,6 +15,7 @@ import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.airbnb.lottie.LottieAnimationView;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog;
import com.joe.print.R;
import com.qmuiteam.qmui.layout.QMUILinearLayout;
......@@ -64,13 +67,13 @@ public class PrinterLoadingDialog extends BaseRetryDialog {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCanceledOnTouchOutside(true);
}
@Override
public void show() {
super.show();
LogUtil.d("PrinterLoadingDialog", "show");
}
@Override
......@@ -107,8 +110,17 @@ public class PrinterLoadingDialog extends BaseRetryDialog {
return view;
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Log.e("PrinterLoadingDialog", "onAttachedToWindow");
}
public void setStep(int step, int status, String errorMsg) {
tvGeneratePrintData.post(() -> {
LogUtil.d("PrinterLoadingDialog", "進入setStep:" + step + "--status:" + status + "線程:" + Thread.currentThread().getId() + "/" + Looper.getMainLooper().getThread().getId());
tvErrorMsg.post(() -> {
LogUtil.d("PrinterLoadingDialog-", "--start----setStep:" + step + "--status:" + status);
if (!TextUtils.isEmpty(errorMsg)) {
tvErrorMsg.setText(errorMsg);
tvErrorMsg.setVisibility(View.VISIBLE);
......@@ -127,6 +139,7 @@ public class PrinterLoadingDialog extends BaseRetryDialog {
});
}
private void setStatusResult(int step, int status) {
switch (step) {
case PrinterLoadingDialog.PROGRESS_PRINTING:
......@@ -149,6 +162,7 @@ public class PrinterLoadingDialog extends BaseRetryDialog {
}
break;
default:
LogUtil.d("PrinterLoadingDialog", "default----setStatusResult");
break;
}
}
......
......@@ -12,7 +12,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 com.gingersoft.gsa.cloud.common.utils.DoubleClickUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
......
......@@ -327,13 +327,10 @@ class OrderDetails {
}
}
}
Log.e("eee", "食品總金額$foodAmount")
//食品金額加上餐盒費,配送費,應該等於總金額
foodAmount = MoneyUtil.sum(MoneyUtil.sum(foodAmount, orderDetail.Lunchbox), orderDetail.DELIVERY_CHARGE)
Log.e("eee", "總金額$foodAmount")
//後台返回的總金額與計算的總金額相減,如果不等於0,則是金額有問題,攔截
var differenceAmount = MoneyUtil.sub(MoneyUtil.sub(totalAmount, foodAmount), allowableError)
Log.e("eee", "金額差$differenceAmount")
differenceAmount = abs(differenceAmount)
if (MoneyUtil.compareTo(differenceAmount, allowableError) == 1) {
return true
......@@ -345,11 +342,9 @@ class OrderDetails {
payAmount = MoneyUtil.sub(payAmount, coupon.discount_amount)
}
}
Log.e("eee", "減去折扣之後的總金額$payAmount")
//計算折扣後的金額,減去支付金額,如果不為0,則是有問題
differenceAmount = MoneyUtil.sub(MoneyUtil.sub(payAmount, orderDetail.PAY_AMOUNT), allowableError)
Log.e("eee", "支付金額差$differenceAmount")
differenceAmount = abs(differenceAmount)
if (MoneyUtil.compareTo(differenceAmount, allowableError) == 1) {
return true
......
......@@ -31,10 +31,10 @@ public class RestaurantInfoManager {
if (restaurantInfo == null) {
restaurantInfo = new RestaurantInfo();
}
brandInfo.setBrandId((Integer) SPUtils.get(UserConstans.brandId, 1));
brandInfo.setBrandId((Integer) SPUtils.get(UserConstans.brandId, 0));
brandInfo.setBrandName((String) SPUtils.get(UserConstans.brandName, ""));
restaurantInfo.setGsPosShopId((String) SPUtils.get(UserConstans.gsPosShopId, "-1"));
restaurantInfo.setRestaurantId((Integer) SPUtils.get(UserConstans.restaurantId, 26));
restaurantInfo.setRestaurantId((Integer) SPUtils.get(UserConstans.restaurantId, 0));
restaurantInfo.setRestaurantName((String) SPUtils.get(UserConstans.restaurantName, ""));
}
......
package com.gingersoft.gsa.cloud.common.service
import android.annotation.SuppressLint
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
......@@ -15,16 +14,13 @@ import android.os.Build
import android.os.IBinder
import android.os.PowerManager
import android.util.Log
import android.view.View
import android.widget.RemoteViews
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import com.billy.cc.core.component.CC
import com.billy.cc.core.component.CCResult
import com.gingersoft.gsa.cloud.common.R
import com.gingersoft.gsa.cloud.common.constans.AppConstans
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
import com.gingersoft.gsa.cloud.common.core.user.UserContext
import com.gingersoft.gsa.cloud.common.logan.LoganManager
......@@ -129,9 +125,10 @@ class DataNotificationService : Service() {
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
//获取当前长连类型
mCurrConnectionType = intent!!.getIntExtra(CONNECTION_TYPE, OPEN_DELIVET_ORDER_CONNECTION)
intent?.let {
mCurrConnectionType = it.getIntExtra(CONNECTION_TYPE, OPEN_DELIVET_ORDER_CONNECTION)
}
initNotification()
......
package com.gingersoft.supply_chain.mvp.utils;
package com.gingersoft.gsa.cloud.common.utils;
import android.util.Log;
import android.view.View;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
/**
......@@ -15,12 +19,42 @@ public class DoubleClickUtils {
public static boolean isFastDoubleClick() {
long nowTime = System.currentTimeMillis();
if (nowTime - lastClickTime < 500) {//500ms
ToastUtils.show(GsaCloudApplication.getAppContext(), "請慢一點");
if (nowTime - lastClickTime < 1000) {//500ms
LogUtil.w("eee", "間隔小於1000");
// ToastUtils.show(GsaCloudApplication.getAppContext(), "請慢一點");
return true;
}
lastClickTime = nowTime;
return false;
}
/**
* 最近一次点击的时间
*/
private static long mLastClickTime;
/**
* 最近一次点击的控件ID
*/
private static int mLastClickViewId;
/**
* 是否是快速点击
*
* @param v 点击的控件
* @param intervalMillis 时间间期(毫秒)
* @return true:是,false:不是
*/
public static boolean isFastDoubleClick(View v, long intervalMillis) {
int viewId = v.getId();
long time = System.currentTimeMillis();
long timeInterval = Math.abs(time - mLastClickTime);
if (timeInterval < intervalMillis && viewId == mLastClickViewId) {
return true;
} else {
mLastClickTime = time;
mLastClickViewId = viewId;
return false;
}
}
}
......@@ -87,6 +87,29 @@ public class UpdateBean {
*/
public static final int FAIL_LOCAL_PRINT_NOT_DEVICE = 17;
/**
* 18 USB打印失敗,未添加到後台
*/
public static final int FAIL_USB_PRINT = 18;
/**
* 19 未找到USB打印機,未添加到後台
*/
public static final int FAIL_USB_PRINT_NOT_FIND = 19;
/**
* 20 生成打印數據失敗
*/
public static final int FAIL_GENERATE_PRINT_INFO = 20;
/**
* 505 SUNMI未查詢到打印機請查詢打印管理配置是否正確
* 通過打印位置沒有找到對應的打印機
*/
......
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