Commit 66c18f25 by 宁斌

1、N5支付,小費,退款,取消完善 2、餐檯模式送單第三層細項消失

parent 0cb22cb8
......@@ -50,7 +50,8 @@
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!--相机权限-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!--获取Activity任务栈 权限-->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-feature
android:name="android.hardware.camera"
......
......@@ -61,5 +61,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<!--获取Activity任务栈 权限-->
<uses-permission android:name="android.permission.GET_TASKS" />
</manifest>
package com.gingersoft.gsa.cloud.login;
import android.content.Intent;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.etps.aca.lib.activity.CommandActivity;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.ChooseRestaurantActivity;
......@@ -42,6 +46,9 @@ public class ComponentLogin implements IComponent {
case ComponentAction.Login.OPEN_LOGIN:
openLoginActivity(cc);
break;
case ComponentAction.Login.OPEN_INIT_HYWEB_PAGE:
hywebOpenActivity();
break;
case "getInfo":
getInfo(cc);
break;
......@@ -82,4 +89,9 @@ public class ComponentLogin implements IComponent {
CC.sendCCResult(cc.getCallId(), CCResult.success());
}
private void hywebOpenActivity(){
Intent intent = new Intent(GsaCloudApplication.getAppContext(),LoginActivity.class);
GsaCloudApplication.getAppContext().startActivity(intent);
}
}
package com.gingersoft.gsa.cloud.main;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.common.function.FModule;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.SettlementReportActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.menu.FoodMenuManageActivity;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.ArmsUtils;
public class ComponentMain implements IComponent {
......@@ -68,6 +74,7 @@ public class ComponentMain implements IComponent {
*/
@Override
public boolean onCall(CC cc) {
Context context = cc.getContext();
String actionName = cc.getActionName();
switch (actionName) {
case "showMainActivity":
......
......@@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.gingersoft.gsa.cloud.common.config.LoganConfig
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
import com.gingersoft.gsa.cloud.common.utils.FileUtils
import com.gingersoft.gsa.cloud.main.R
......@@ -26,10 +27,14 @@ class LookLogActivity : AppCompatActivity() {
log_top_bar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color))
val file = File(FileUtils.ERRORLOG_PATH)
// val file = File((getExternalFilesDir(null)!!.absolutePath
// + File.separator + LoganConfig.FILE_NAME))
val files = file.listFiles()
files?.let {
val ml = ArrayList<File>()
for(i in files.size-1 downTo 0){
for (i in files.size - 1 downTo 0) {
ml.add(files[i])
}
rv_log.layoutManager = LinearLayoutManager(this)
......
......@@ -33,6 +33,7 @@ import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.function.FunctionManager;
import com.gingersoft.gsa.cloud.common.function.jump.ActivityJumpBean;
import com.gingersoft.gsa.cloud.common.function.jump.ActivityJumpStrategy;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
......@@ -224,13 +225,14 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
if (BuildConfig.DEBUG) {
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "複製Token"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
// mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_mall_center, "商城中心"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_about_us, "關於我們"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_password, "修改密碼"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "設置"));
}
// mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "上傳日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_settlement_report, "清機"));
if (BuildConfig.DEBUG) {
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "切換環境"));
......@@ -265,6 +267,9 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
case "查看日誌":
launchActivity(new Intent(mContext, LookLogActivity.class));
break;
case "上傳日誌":
LoganManager.uploadLog(mContext, true);
break;
}
});
}
......
......@@ -3,7 +3,9 @@
package="com.gingersoft.gsa.cloud.pay">
<application>
<activity android:name=".mvp.ui.activity.PayResultActivity" />
<activity
android:name=".mvp.ui.activity.PayResultActivity"
android:launchMode="singleTop"/>
</application>
</manifest>
\ No newline at end of file
......@@ -11,7 +11,9 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.PayResultActivity" />
<activity
android:name=".mvp.ui.activity.PayResultActivity"
android:launchMode="singleTop"/>
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
......
package com.gingersoft.gsa.cloud.pay.mvp.ui.activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
......@@ -12,9 +14,17 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.common.constans.AppConstans;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.loadsir.ErrorCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.BasePosCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosPayStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.order.bean.event.MealPayResultParam;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.R;
......@@ -30,15 +40,21 @@ import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SaleRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
import com.gingersoft.gsa.cloud.ui.widget.dialog.KeyboardDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.google.android.material.snackbar.BaseTransientBottomBar;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.core.LoadService;
import com.kingja.loadsir.core.LoadSir;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.widget.QMUITopBar;
import java.util.List;
......@@ -82,12 +98,21 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
TextView tvTips;
@BindView(R2.id.tv_printer)
TextView tvPrinter;
@BindView(R2.id.tv_complate)
TextView tvComplate;
// @BindView(R2.id.tv_complate)
// TextView tvComplate;
@BindView(R2.id.ll_bottom)
LinearLayout llBottom;
@BindView(R2.id.rl_container)
RelativeLayout rlContainer;
// @BindView(R2.id.pro_pay_status)
// ProgressBar proPayStatus;
// @BindView(R2.id.tv_loading_text)
// TextView tvLoadingText;
@BindView(R2.id.btn_refresh_status)
QMUIAlphaButton btnRefreshStatus;
@BindView(R2.id.btn_complate)
QMUIAlphaButton btnComplate;
private LoadService loadService;
private MealPayResultParam mMealPayResultParam;
......@@ -95,6 +120,11 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
private String mPayMehodNames;
/**
* 異常情況下 嘗試查詢多少次 顯示提示
*/
private int retryCount = 3;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerPayResultComponent //如找不到该类,请编译一下项目
......@@ -112,49 +142,117 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
@Override
public void initData(@Nullable Bundle savedInstanceState) {
// loadService = LoadSir.getDefault().register(rlContainer, new Callback.OnReloadListener() {
// @Override
// public void onReload(View v) {
//// onRetrievalRequest(mPayResultEvent.getTxnId());
// }
// });
// loadService.showSuccess();
loadService = LoadSir.getDefault().register(llContent, new Callback.OnReloadListener() {
@Override
public void onReload(View v) {
if (retryCount == 0) {
Class<BasePosCallback> callback = loadService.getCurrentCallback();
BasePosCallback callback1 = callback.cast(BasePosCallback.class);
callback1.showFinalStrategy(true);
}
//支付状态异常 重试查询
retrievalStatus();
retryCount--;
}
});
showPaymentStatus();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
@Override
public void initIntent() {
MealPayResultParam payResultParam = CCUtil.getNavigateParam(this, "payResultParam", null);
if (payResultParam != null) {
this.mMealPayResultParam = payResultParam;
mMealPayResultParam = payResultParam;
mSaleRespose = mMealPayResultParam.getSaleRespose();
initMealPayResultParam();
}
}
private void initMealPayResultParam() {
mSaleRespose = mMealPayResultParam.getSaleRespose();
if (PayStatusCode.withSuccess(mSaleRespose.getSTATUS())) {
mPayMehodNames = getPayMehodStr(mMealPayResultParam.getPayMethodList());
tvAmount.setText(getPayAmount(mSaleRespose.getTXN_AMT()));
tvAmount.setText(getPayAmount());
tvPaymethod.setText(mPayMehodNames);
tvTableName.setText("檯號: " + mMealPayResultParam.getTableBean().getTableName());
tvOrderNum.setText("單號: " + mMealPayResultParam.getMealOrderPayRequest().getOrderId());
// loadService.showSuccess();
}
private void showPaymentStatus() {
if (PayStatusCode.withSuccess(mSaleRespose.getSTATUS())) {
loadService.showSuccess();
llBottom.setVisibility(View.VISIBLE);
btnComplate.setVisibility(View.VISIBLE);
} else if (PayStatusCode.withException(mSaleRespose.getSTATUS())) {
loadService.showCallback(PosPayStatusExceptionCallback.class);
llBottom.setVisibility(View.INVISIBLE);
btnComplate.setVisibility(View.INVISIBLE);
}
tvPayStatus.setCompoundDrawables(null, getPaymentDrawableByStatus(mSaleRespose.getSTATUS()), null, null);
tvPayStatus.setText(PayStatusCode.getHywebRequestTextByCode(mSaleRespose.getSTATUS()));
}
private Drawable getPaymentDrawableByStatus(String status) {
Drawable drawable;
if (PayStatusCode.withSuccess(status)) {
drawable = getResources().getDrawable(R.mipmap.pay_status_success);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
} else {
// loadService.showCallback(ErrorCallback.class);
drawable = getResources().getDrawable(R.mipmap.pay_status_exception);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
}
return drawable;
}
private String getPayAmount(double payAmount) {
return AppConstans.CARSH_STR + payAmount;
private void retrievalStatus() {
RetrievalRequest retrievalRequest = new RetrievalRequest();
retrievalRequest.setTXN_ID(mMealPayResultParam.getTxnId());
PosPay.retrieval(mContext, this, mMealPayResultParam.getMealOrderPayRequest().getOrderId(), retrievalRequest, new OnPosActionListener() {
@Override
public void onPosSuccess(HywebPosResponse response) {
mSaleRespose = mMealPayResultParam.getSaleRespose();
showPaymentStatus();
}
@Override
public void onPosException(Exception e) {
loadService.showCallback(PosPayStatusExceptionCallback.class);
}
@Override
public void onPosInvalid(String e) {
}
@Override
public void onUpdateStatusSuccess(HywebPosResponse response) {
}
@Override
public void onUpdateStatusError(Throwable e) {
}
});
}
private String getPayAmount() {
if (mSaleRespose.getTIPS() != 0) {
return AppConstans.CARSH_STR + MoneyUtil.sum(mSaleRespose.getTXN_AMT(), mSaleRespose.getTIPS()) + "(含小費" + mSaleRespose.getTIPS() + ")";
} else {
return AppConstans.CARSH_STR + mSaleRespose.getTXN_AMT();
}
}
private String getPayMehodStr(List<PayMethod> payMethodList) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < payMethodList.size(); i++) {
PayMethod payMethod = payMethodList.get(i);
if (i < payMethodList.size() && payMethodList.size() != 0) {
if (i < (payMethodList.size() - 1)) {
sb.append(payMethod.getPayName() + ",");
} else {
sb.append(payMethod.getPayName());
......@@ -219,18 +317,18 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
killMyself();
}
@OnClick({R2.id.tv_tips, R2.id.tv_printer, R2.id.tv_complate})
@OnClick({R2.id.tv_tips, R2.id.tv_printer, R2.id.btn_complate})
public void onViewClicked(View view) {
if (view.getId() == R.id.tv_tips) {
showKeyboardDialog();
} else if (view.getId() == R.id.tv_printer) {
} else if (view.getId() == R.id.tv_complate) {
} else if (view.getId() == R.id.btn_complate) {
//返回餐檯頁面
// CC.obtainBuilder(ComponentName.COMPONENT_TABLE)
// .setActionName(ComponentAction.Table.KILL_MEAL_ORDER_PAY)
// .build()
// .call();
CC.obtainBuilder(ComponentName.COMPONENT_TABLE)
.setActionName(ComponentAction.Table.KILL_MEAL_ORDER_PAY)
.build()
.call();
killMyself();
}
}
......@@ -242,35 +340,32 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
@Override
public void onSure(String number) {
if (!TextUtils.isEmpty(number)) {
// GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
// txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
// txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
// txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
// txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
TableBean.DataBean tableBean = mMealPayResultParam.getTableBean();
txnIdRequest.setOrderId(mMealPayResultParam.getMealOrderPayRequest().getOrderId());
if (!TextUtils.isEmpty(tableBean.getTableNumber())) {
txnIdRequest.setTableExtId(tableBean.getId());
} else {
txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setTableId(tableBean.getId());
}
txnIdRequest.setAmount(mSaleRespose.getTXN_AMT());
PosPay.tip(mContext, PayResultActivity.this, txnIdRequest, getTipsRequest(mMealPayResultParam.getSaleRespose(), Double.parseDouble(number)), new OnPosActionListener() {
PosPay.tip(mContext, PayResultActivity.this, txnIdRequest, getTipsRequest(mMealPayResultParam.getSaleRespose(), Double.parseDouble(number)), new OnPosActionListener<AdjustTipRespose>() {
@Override
public void onPosSuccess(HywebPosResponse response) {
public void onPosSuccess(AdjustTipRespose response) {
mSaleRespose.setTIPS(mSaleRespose.getTIPS() + response.getTIPS());
initMealPayResultParam();
}
@Override
public void onPosException(HywebPosResponse response) {
public void onPosException(Exception e) {
//POS回调异常,去重试查询
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mMealPayResultParam.getTxnId());
statusExceptionParam.setAmount(mSaleRespose.getTXN_AMT());
statusExceptionParam.setOrderNum(mMealPayResultParam.getMealOrderPayRequest().getOrderId());
statusExceptionParam.setOrderId(mMealPayResultParam.getMealOrderPayRequest().getOrderId());
statusExceptionParam.setPayMethodName(mPayMehodNames);
statusExceptionParam.setPosAction(PosAction.TIP);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -278,14 +373,27 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
}
@Override
public void onSuccess(HywebPosResponse response) {
public void onPosInvalid(String e) {
}
@Override
public void onError(Throwable e) {
public void onUpdateStatusSuccess(AdjustTipRespose response) {
}
@Override
public void onUpdateStatusError(Throwable e) {
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mMealPayResultParam.getTxnId());
statusExceptionParam.setAmount(mSaleRespose.getTXN_AMT());
statusExceptionParam.setOrderId(mMealPayResultParam.getMealOrderPayRequest().getOrderId());
statusExceptionParam.setPayMethodName(mPayMehodNames);
statusExceptionParam.setPosAction(PosAction.TIP);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
}
......
......@@ -60,18 +60,22 @@
android:layout_height="wrap_content"
android:gravity="center"
android:drawablePadding="@dimen/dp_6"
android:layout_marginTop="@dimen/dp_50"
android:drawableTop="@mipmap/pay_status_success"
android:layout_marginTop="@dimen/dp_50"
android:text="支付成功"
android:textSize="@dimen/font_normal2"/>
android:textSize="@dimen/font_normal2"
android:textColor="@color/theme_black"
android:textStyle="bold"
android:visibility="visible"/>
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:textStyle="bold"
android:text="$500"
android:textSize="@dimen/sp_32"
android:textSize="@dimen/sp_24"
android:textColor="@color/theme_black"/>
<TextView
......@@ -84,15 +88,29 @@
android:textSize="@dimen/sp_16" />
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/tv_complate"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_30"
android:text="完成"
android:id="@+id/btn_refresh_status"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:layout_marginTop="@dimen/dp_50"
android:background="@color/green_400"
android:text="刷新"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2"
app:cornerRadius="@dimen/dp_6"
android:visibility="gone"/>
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_complate"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:layout_marginTop="@dimen/dp_20"
android:background="@drawable/shape_app_btn"
app:cornerRadius="@dimen/dp_6"/>
android:text="完成"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2"
android:visibility="visible"/>
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/rv_bill_and_paymethod"-->
......@@ -132,16 +150,5 @@
android:text="打印"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2" />
<!-- <com.qmuiteam.qmui.alpha.QMUIAlphaTextView-->
<!-- android:id="@+id/tv_complate"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_weight="1"-->
<!-- android:background="@color/theme_color"-->
<!-- android:gravity="center"-->
<!-- android:text="完成"-->
<!-- android:textColor="@color/theme_white_color"-->
<!-- android:textSize="@dimen/font_normal3" />-->
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
......@@ -11,21 +11,23 @@ import android.util.Log;
import androidx.annotation.Nullable;
import com.elvishew.xlog.XLog;
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.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.utils.threadPool.ThreadPoolManager;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.AidlUtil;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.threadPool.ThreadPoolManager;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.common.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.database.bean.PrintCurrencyBean;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.database.utils.PrinterDeviceDaoUtils;
......@@ -84,6 +86,8 @@ import static com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean.PRINT_USB
*/
public class PrjService extends Service implements ReceiveListener {
// private static final String TAG = PrjService.class.getSimpleName();
private Disposable disposable;
private Disposable wakeDisposable;
private List<PrinterDeviceBean> printerDeviceBeans;
......@@ -104,6 +108,7 @@ public class PrjService extends Service implements ReceiveListener {
public int onStartCommand(Intent intent, int flags, int startId) {
mContext = this;
ThreadPoolManager.getInstence().putExecutableTasks(() -> {
LoganManager.w_printer(TAG,"開始請求 PRJ 數據");
getPrintList();
//開始請求
startGetPrjInfo();
......@@ -165,21 +170,23 @@ public class PrjService extends Service implements ReceiveListener {
@Override
public void onSubscribe(Disposable d) {
disposable = d;
LoganManager.w_printer(TAG,"startGetPrjInfo onSubscribe");
}
@Override
public void onNext(Long aLong) {
LoganManager.w_printer(TAG,"startGetPrjInfo onNext");
getPrjInfo();
}
@Override
public void onError(Throwable e) {
LoganManager.w_printer(TAG,"startGetPrjInfo onError:" + e.getMessage());
}
@Override
public void onComplete() {
LoganManager.w_printer(TAG,"startGetPrjInfo onComplete");
}
});
}
......@@ -195,11 +202,12 @@ public class PrjService extends Service implements ReceiveListener {
@Override
public void onSubscribe(Disposable d) {
LoganManager.w_printer(TAG,"getPrjInfo onSubscribe");
}
@Override
public void onNext(String s) {
LoganManager.w_printer(TAG,"getPrjInfo onNext: " + s);
//請求到數據,停止輪詢,開始打印,在打印完之後再重新開始輪詢
// startPrint(s);
newPrint(s);
......@@ -210,32 +218,35 @@ public class PrjService extends Service implements ReceiveListener {
@Override
public void onSubscribe(Disposable d) {
wakeDisposable = d;
LoganManager.w_printer(TAG,"getPrjInfo timer onSubscribe");
}
@Override
public void onNext(Long aLong) {
LoganManager.w_printer(TAG,"getPrjInfo timer onNext");
startGetPrjInfo();
}
@Override
public void onError(Throwable e) {
LoganManager.w_printer(TAG,"getPrjInfo timer onError: " + e.getMessage());
}
@Override
public void onComplete() {
LoganManager.w_printer(TAG,"getPrjInfo timer onComplete");
}
});
}
@Override
public void onError(Throwable e) {
LoganManager.w_printer(TAG,"getPrjInfo onError:" + e.getMessage());
}
@Override
public void onComplete() {
LoganManager.w_printer(TAG,"getPrjInfo onComplete");
}
});
}
......@@ -340,6 +351,7 @@ public class PrjService extends Service implements ReceiveListener {
totalPrj = 0;
PrjBean prjBean = JsonUtils.parseObject(json, PrjBean.class);
if (prjBean == null || prjBean.getData() == null) {
LoganManager.w_printer(TAG,"newPrint prjBean == null || prjBean.getData() == null ");
return;
}
//有數據,取消輪詢,等待打印結束。
......@@ -376,6 +388,7 @@ public class PrjService extends Service implements ReceiveListener {
}
} catch (JSONException e) {
e.printStackTrace();
LoganManager.w_printer(TAG,"newPrint JSONException: " + e.getMessage());
}
setPrjIndex(listMap, totalPrj);
initPrinterDevices();
......@@ -383,6 +396,7 @@ public class PrjService extends Service implements ReceiveListener {
}
private Map<String, List<PrjBean.DataBean.Bean>> setPrjIndex(Map<String, List<PrjBean.DataBean.Bean>> listMap, int totalPrj) {
LoganManager.w_printer(TAG,"setPrjIndex totalPrj: "+totalPrj);
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
for (PrjBean.DataBean.Bean bean : prjMap.getValue()) {
bean.setTotalPrj(totalPrj);
......@@ -438,6 +452,7 @@ public class PrjService extends Service implements ReceiveListener {
}
private void foreachPrint(Map<String, List<PrjBean.DataBean.Bean>> listMap) {
LoganManager.w_printer(TAG,"foreachPrint");
//雙重遍歷可以以後優化
//第二步:遍歷 Map<廚房位置,需要打印的數據>,通過廚房位置找到對應的打印機,並且通過數據拿到對應的通用配置
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
......@@ -459,6 +474,7 @@ public class PrjService extends Service implements ReceiveListener {
}
private void initPrinterDevices() {
LoganManager.w_printer(TAG,"initPrinterDevices");
//讀取打印機和通用配置,可以優化
//獲取所有打印機
PrinterDeviceDaoUtils printerDeviceDaoUtils = new PrinterDeviceDaoUtils(this);
......@@ -470,7 +486,7 @@ public class PrjService extends Service implements ReceiveListener {
private PrintCurrencyBean getPrintCurrencyBean(List<PrjBean.DataBean.Bean> beans) {
PrintCurrencyBean printCurrencyBean = null;
if (beans != null && beans.size() > 0) {
if (beans.get(0).getOrderType() == 1 || beans.get(0).getOrderType() == 3 ) {
if (beans.get(0).getOrderType() == 1 || beans.get(0).getOrderType() == 3) {
//堂食,skyorder
printCurrencyBean = MyPrintUtils.getPrintCurrencyBeanByType(mContext, 1);
} else {
......@@ -488,6 +504,10 @@ public class PrjService extends Service implements ReceiveListener {
* 生成用於打印的prj的Bitmap
*/
private void generatePrintData(String key, List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) {
LoganManager.w_printer(TAG,"generatePrintData PrinterDeviceBean deviceType: " + printerDeviceBean.getPrinterDeviceType()
+ " ip: " + printerDeviceBean.getIp());
if (isPinPrinter(printerDeviceBean) && printerDeviceBean.getPrinterDeviceType() == PRINT_IP) {
//針式打印機並且打印機類型為IP打印,生成獨特的格式
List<Map<String, Bitmap>> bitmapMaps = generatePrintMaps(key, beans, printerDeviceBean);
......@@ -665,7 +685,6 @@ public class PrjService extends Service implements ReceiveListener {
usbPrint(bitmapMaps);
break;
default:
break;
}
}
......@@ -677,21 +696,27 @@ public class PrjService extends Service implements ReceiveListener {
* ip設備打印
*/
public void ipPrint(PrinterDeviceBean printerDeviceBean, List<Map<String, Bitmap>> bitmapMaps) {
LoganManager.w_printer(TAG,"ipPrint: " + printerDeviceBean.getPrinterDeviceType()
+ " ip: " + printerDeviceBean.getIp());
for (int i = 0; i < bitmapMaps.size(); i++) {
PrintExecutor executor = new PrintExecutor(printerDeviceBean);
int finalI = i;
executor.setOnPrjPrintResultListener((errorCode, ids) -> {
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
//更新狀態
LoganManager.w_printer(TAG,"ipPrint errorCode ERROR_0 i: " + finalI);
updatePrjSuccess(ids);
Log.e(TAG, "打印成功");
break;
case PrintSocketHolder.ERROR_2:
LoganManager.w_printer(TAG,"ipPrint errorCode ERROR_2 i: " + finalI);
Log.e(TAG, "创建Socket失败");
updatePrjFailure(ids);
break;
}
});
LoganManager.w_printer(TAG,"ipPrint for doPrinterRequestAsync i:" + i);
PrjPrintMaker maker = new PrjPrintMaker(bitmapMaps.get(i));
executor.doPrinterRequestAsync(maker);
}
......
......@@ -27,6 +27,7 @@ import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
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.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
......@@ -466,6 +467,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printFailure("打印機缺紙");
break;
}
LoganManager.w_printer(TAG,"printStateChanged state--->" + tip);
setLoadingText(tip);
}
......@@ -474,6 +476,7 @@ 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();
......@@ -486,10 +489,11 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void printFailure(String msg) {
LoganManager.w_printer(TAG,"printFailure 打印失敗--->" + msg);
if (!TextUtil.isEmptyOrNullOrUndefined(msg)) {
ToastUtils.show(GsaCloudApplication.getAppContext(), msg);
CC.sendCCResult(callId, CCResult.error(msg));
}else {
} else {
CC.sendCCResult(callId, CCResult.error("print error"));
}
// if (printCount <= 1) {
......
......@@ -20,17 +20,20 @@
android:name=".mvp.ui.activity.MealStandActivity"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.OrderPayActivity"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.OrderContentActivity"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.orderManager.OrderCenterActivity"
android:screenOrientation="portrait" />
android:name=".mvp.ui.activity.OrderPayActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.orderManager.OrderDetailActivity"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.orderManager.OrderCenterActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.SoldoutCtrlActivity"
android:screenOrientation="portrait" />
......
......@@ -10,8 +10,15 @@
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_android"
android:theme="@style/AppTheme">
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderDetailActivity"/>
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity" />
<activity
android:name=".mvp.ui.activity.orderManager.OrderDetailActivity"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.orderManager.OrderCenterActivity"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.OrderPayActivity"
android:screenOrientation="portrait" />
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity" />
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity">
<intent-filter>
......
package com.gingersoft.gsa.cloud.table;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.etps.aca.lib.activity.CommandActivity;
import com.gingersoft.gsa.cloud.common.function.FModule;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
......@@ -16,6 +19,7 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderPayActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderDetailActivity;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.ArmsUtils;
......@@ -121,6 +125,7 @@ public class ComponentTable implements IComponent {
}
private void lifecycleFragmentDoubleText(CC cc) {
// LifecycleFragment lifecycleFragment = cc.getParamItem("fragment");
// if (lifecycleFragment != null) {
......
......@@ -48,6 +48,7 @@ public class OrderManagerResponse implements Serializable {
private int status;
private String orderNo;
private String tableName;
private String tableNumber;
private int tableId;
private int person;
/**
......
......@@ -15,7 +15,7 @@ import java.util.List;
public class OrderAssemblyUtil {
/**
* 組裝食品結構
* 組裝食品位置和結構
* @param orderDetails
* @return
*/
......
......@@ -1099,7 +1099,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
OrderDetail item = foodList.get(j);
boolean myIndex = item.getMyIndex() != parentItem.getMyIndex();
boolean parentIndex = item.getParentIndex() != parentItem.getMyIndex();
if (myIndex && parentIndex) {
if (myIndex && parentIndex && item.getType() != OrderDetail.MODIFIER_TYPE) {
//已經循環過當前套餐 退出循環
break;
}
......
......@@ -814,6 +814,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
//緩存訂單信息
mDoshokuOrder.setOrderPlaced(new OrderResponse(info.getData()));
//緩存食品信息
// List<OrderDetail> orderDetailList = OrderDetail.orderTransOrderDetails(info.getData().getOrderDetails());
List<OrderDetail> orderDetailList = OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(info.getData().getOrderDetails()));
mOrderMealList.clear();
......
......@@ -43,6 +43,7 @@ import com.gingersoft.gsa.cloud.table.mvp.model.table.action.ResetSkyorderAction
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.ResetTableAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.SplitTableAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.TableAction;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BottomFunctionAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.SplitTableDialog;
......@@ -385,7 +386,8 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(orderBean.getTxnId());
statusExceptionParam.setAmount(orderBean.getTotalAmount());
statusExceptionParam.setOrderNum(orderBean.getId());
statusExceptionParam.setOrderId(orderBean.getId());
statusExceptionParam.setOrderNo(orderBean.getOrderNo());
statusExceptionParam.setPayMethodName(orderBean.getPayName());
statusExceptionParam.setPosAction(PosAction.RETRIEVAL);
IActivity.loadRootFragment(R.id.fl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -410,7 +412,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
doshokuOrder.setOrderId(orderBean.getId());
doshokuOrder.setOrderNo(orderBean.getOrderNo());
doshokuOrder.setOrderPlaced(new OrderResponse(orderBean));
doshokuOrder.getShoppingCart().addCommodityList(OrderDetail.orderTransOrderDetails(mealCommoditysBeans));
doshokuOrder.getShoppingCart().addCommodityList(OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(mealCommoditysBeans)));
if (orderBean.getMemberInfo() != null) {
//设置会员信息
doshokuOrder.setMemberInfo(orderBean.getMemberInfo());
......
......@@ -30,7 +30,10 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter;
import com.gingersoft.gsa.cloud.table.R;
......@@ -84,6 +87,7 @@ public class AllOrderPresenter extends BasePresenter<AllOrderContract.Model, All
AppManager mAppManager;
private OrderCenterActivity IActivity;
private OrderCenterAdapter mOrderCenterAdapter;
private List<OrderManagerResponse> mOrderItemList = new ArrayList<>();
......@@ -202,30 +206,32 @@ public class AllOrderPresenter extends BasePresenter<AllOrderContract.Model, All
if (!TextUtils.isEmpty(number)) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
PosPay.tip(IActivity, IActivity, txnIdRequest,
getTipsRequest(datasBean.getPayTxnId(), datasBean.getAmount(), Double.parseDouble(number)), new OnPosActionListener() {
getTipsRequest(datasBean.getPayTxnId(), datasBean.getAmount(), Double.parseDouble(number)), new OnPosActionListener<AdjustTipRespose>() {
@Override
public void onPosSuccess(HywebPosResponse response) {
public void onPosSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
IActivity.refeshOrderList();
}
@Override
public void onPosException(HywebPosResponse response) {
LoganManager.w_code(TAG, "onPosException: " + response.toString());
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderNum(datasBean.getId());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
IActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -233,14 +239,28 @@ public class AllOrderPresenter extends BasePresenter<AllOrderContract.Model, All
}
@Override
public void onSuccess(HywebPosResponse response) {
LoganManager.w_code(TAG, "onSuccess: " + response.toString());
IActivity.refeshOrderList();
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e.toString());
}
@Override
public void onError(Throwable e) {
LoganManager.w_code(TAG, "onError: " + e.getMessage());
public void onUpdateStatusSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
IActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
......@@ -271,33 +291,35 @@ public class AllOrderPresenter extends BasePresenter<AllOrderContract.Model, All
private void hywebRefund(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
RefundRequest refundRequest = new RefundRequest();
refundRequest.setPAYMENT_APP_ID(getPaymentAppIdByPays(datasBean.getOrderPays()));
PosPay.refund(IActivity, IActivity, refundRequest, txnIdRequest, new OnPosActionListener() {
refundRequest.setTXN_AMT(datasBean.getAmount());
PosPay.refund(IActivity, IActivity, refundRequest, txnIdRequest, new OnPosActionListener<RefundRespose>() {
@Override
public void onPosSuccess(HywebPosResponse response) {
public void onPosSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
IActivity.refeshOrderList();
}
@Override
public void onPosException(HywebPosResponse response) {
LoganManager.w_code(TAG, "onPosException: " + response.toString());
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderNum(datasBean.getId());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
IActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -305,14 +327,29 @@ public class AllOrderPresenter extends BasePresenter<AllOrderContract.Model, All
}
@Override
public void onSuccess(HywebPosResponse response) {
LoganManager.w_code(TAG, "onSuccess: " + response.toString());
IActivity.refeshOrderList();
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onError(Throwable e) {
LoganManager.w_code(TAG, "onError: " + e.getMessage());
public void onUpdateStatusSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
IActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
......@@ -344,31 +381,33 @@ public class AllOrderPresenter extends BasePresenter<AllOrderContract.Model, All
private void hywebOrderCancle(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
VoidRequest voidRequest = new VoidRequest();
PosPay.voidO(IActivity, IActivity, voidRequest, txnIdRequest, new OnPosActionListener() {
PosPay.voidO(IActivity, IActivity, voidRequest, txnIdRequest, new OnPosActionListener<VoidRespose>() {
@Override
public void onPosSuccess(HywebPosResponse response) {
public void onPosSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
IActivity.refeshOrderList();
}
@Override
public void onPosException(HywebPosResponse response) {
LoganManager.w_code(TAG, "onPosException: " + response.toString());
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderNum(datasBean.getId());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
IActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -376,14 +415,28 @@ public class AllOrderPresenter extends BasePresenter<AllOrderContract.Model, All
}
@Override
public void onSuccess(HywebPosResponse response) {
LoganManager.w_code(TAG, "onSuccess: " + response.toString());
IActivity.refeshOrderList();
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onError(Throwable e) {
LoganManager.w_code(TAG, "onError: " + e.getMessage());
public void onUpdateStatusSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
IActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
......
......@@ -380,7 +380,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
public void initFoodGroupView(List<Food> foodGroupList) {
//总的页数向上取整
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / GoldConstants.foodGriupPageSize);
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / (foodGroupColumn * foodGroupRow));
int Rows = foodGroupRow;
if (foodGroupList.size() <= foodGroupColumn) {
......@@ -440,13 +440,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
} else {
ivPoints[i].setImageResource(R.drawable.meal_food_group_point_unfocused);
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ArmsUtils.dip2px(this,20),ArmsUtils.dip2px(this,12));
lp.leftMargin = ArmsUtils.dip2px(this,5);
ivPoints[i].setLayoutParams(lp);
ivPoints[i].setPadding(0, 0, 0, 0);
ll_food_group_point.addView(ivPoints[i]);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) ivPoints[i].getLayoutParams();
layoutParams.height = ll_food_group_point.getLayoutParams().height;
layoutParams.width = ArmsUtils.getScreenWidth(this) / totalPage;
ivPoints[i].setLayoutParams(layoutParams);
}
if (foodGroupList.size() > (Rows * foodGroupColumn)) {
ll_food_group_point.setVisibility(View.VISIBLE);
......
......@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.print.PrintManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
......@@ -19,12 +20,21 @@ import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.common.utils.BigDecimalUtils;
import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.common.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.contract.PayTypeContract;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.SaleRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayMethodConstant;
import com.gingersoft.gsa.cloud.pay.util.PayMethodUtils;
import com.gingersoft.gsa.cloud.print.PrinterUtils;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter;
......@@ -49,6 +59,7 @@ import org.simple.eventbus.EventBus;
import java.util.Date;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import javax.inject.Inject;
......@@ -127,7 +138,6 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.table_activity_order_pay; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
......@@ -143,6 +153,11 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
initMemberInfo();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
private void initOrderPayView() {
gsaPayView.setOnSelectPayClickLisenter(new OrderPayView.OnSelectPayClickLisenter() {
@Override
......@@ -417,14 +432,19 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
}
}
if (openInstruction) {
printBillAndOpenInstruction();
} else {
printBill();
}
}
private void printBillAndOpenInstruction() {
printBill();
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("printActivity")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_INSTRUCTION)
.build();
} else {
printBill();
}
.build()
.call();
}
private void printBill() {
......@@ -474,38 +494,46 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
gsaPayView.loadInfo(this, payMethods, mPresenter.getTotalAmount(), mPresenter.getFoodCount());
gsaPayView.setmOnSureClickLisenter(mBillMoneyList -> {
// PayMethod hywebPayMethod = PayMethodUtils.filterPaymentMethodById(mBillMoneyList, PayTypeContract.PAY_METHOD_ID_1001);
//
// if (AppDevice.isHywebPos()) {
//
// if (hywebPayMethod != null) {
//
// SaleRequest saleRequest = new SaleRequest();
// saleRequest.setPAYMENT_APP_ID(PayMethodConstant.PAY_TYPE_CC);
// saleRequest.setTXN_AMT(DoshokuOrder.getInstance().getShoppingCart().getTotalAmount());
// saleRequest.setTIPS(0);
//
// GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
// txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
// if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
// txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
// } else {
// txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
// }
// txnIdRequest.setPayMethodId(hywebPayMethod.getId());
// txnIdRequest.setAmount(hywebPayMethod.getPayMoney());
//
// MealOrderPayRequest orderPayRequest = mPresenter.getOrderPayRequest(gsaPayView);
// List<BillItem> billItemList = DoshokuOrder.getInstance().getShoppingCart().getBillItemList();
//
// PosPay.pay(mContext, OrderPayActivity.this, saleRequest, txnIdRequest,DoshokuOrder.getInstance().getOpenTableInfo(),orderPayRequest,billItemList,mBillMoneyList);
// } else {
//
// }
// } else {
if (AppDevices.isHywebPos()) {
int hywebPayMethodIndex = PayMethodUtils.hasHywebPayMethod(mBillMoneyList);
if (hywebPayMethodIndex != -1) {
PayMethod hywebPayMethod = mBillMoneyList.get(hywebPayMethodIndex);
SaleRequest saleRequest = new SaleRequest();
if (hywebPayMethod.getPayType() == PayTypeContract.PAY_METHOD_ID_1030) {
//卡片支付
saleRequest.setPAYMENT_APP_ID(PayMethodConstant.PAY_TYPE_CC);
} else {
//掃碼支付
saleRequest.setPAYMENT_APP_ID(PayMethodConstant.PAY_TYPE_QRC);
}
saleRequest.setTXN_AMT(DoshokuOrder.getInstance().getShoppingCart().getTotalAmount());
saleRequest.setTIPS(0);
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
} else {
txnIdRequest.setTableId((DoshokuOrder.getInstance().getOpenTableInfo().getId()));
}
txnIdRequest.setPayMethodId(hywebPayMethod.getId());
txnIdRequest.setAmount(hywebPayMethod.getPayMoney());
MealOrderPayRequest orderPayRequest = mPresenter.getOrderPayRequest(gsaPayView);
List<BillItem> billItemList = DoshokuOrder.getInstance().getShoppingCart().getBillItemList();
PosPay.pay(mContext, OrderPayActivity.this, saleRequest, txnIdRequest, DoshokuOrder.getInstance().getOpenTableInfo(), orderPayRequest, billItemList, mBillMoneyList);
} else {
mPresenter.setBillMoneyList(mBillMoneyList);
mPresenter.sendOrderBefore();
// }
}
} else {
mPresenter.setBillMoneyList(mBillMoneyList);
mPresenter.sendOrderBefore();
}
});
}
......
......@@ -224,7 +224,7 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
.addParam("fromPage", 2)
.build()
.call();
LoganManager.uploadLog(mContext, true);
// LoganManager.uploadLog(mContext, true);
}
});
mTopBar.setTitle("餐檯模式");
......
......@@ -91,6 +91,11 @@ public class OrderCenterActivity extends BaseFragmentActivity<OrderCenterPresent
mPresenter.loadOrderList(OrderManagerResponse.ORDER_TYPE_DOSHOKU+"", 0, 10, null, false);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
@Subscriber(tag = "updateOrderListEvent")
private void updateOrderList(boolean update) {
refeshOrderList();
......
......@@ -13,10 +13,12 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.constans.OrderTypeConstans;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
......@@ -41,7 +43,10 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter;
import com.gingersoft.gsa.cloud.table.R;
......@@ -98,7 +103,7 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
FrameLayout rl_container;
@BindView(R2.id.scrollview)
ScrollView scrollview;
NestedScrollView scrollview;
@BindView(R2.id.tv_table_name)
TextView tv_table_name;
@BindView(R2.id.tv_people_num)
......@@ -190,41 +195,23 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
scrollview.scrollTo(0, 0);
}
});
initAdapter();
initOrderDetail(mOrderDetailItem);
setTitleByOrderType(mOrderDetailItem);
setBtnVisibilityByOrderType(mOrderDetailItem.getOrderType());
setBtnVisibilityByOrderStatus(mOrderDetailItem);
updateOrderItems(mOrderDetailItem,mOrderDetailList);
}
private void setOrderBtnVisbilityByTxnId(String payTxnId, String cancelTxnId, String refundTxnId) {
if (!TextUtils.isEmpty(cancelTxnId)) {
tv_order_status.setText("已取消");
tv_order_status.setVisibility(View.VISIBLE);
setOrderCancelVisbility();
return;
}
if (!TextUtils.isEmpty(refundTxnId)) {
tv_order_status.setVisibility(View.VISIBLE);
tv_order_status.setText("已退款");
setOrderCancelVisbility();
return;
}
if (!TextUtils.isEmpty(payTxnId)) {
btn_print_order.setVisibility(View.VISIBLE);
btn_refund.setVisibility(View.VISIBLE);
btn_tips.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
}
}
private void setOrderCancelVisbility() {
btn_print_order.setVisibility(View.GONE);
btn_refund.setVisibility(View.GONE);
btn_tips.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
private void initOrderDetail(OrderManagerResponse orderDetailItem) {
if (orderDetailItem != null) {
mOrderDetailList = OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(orderDetailItem.getOrderDetails()));
String payBill = LanguageUtils.get_language_system(this, "opentable.paybill", "結賬") + ":";
String pax = LanguageUtils.get_language_system(this, "Meal.Mannumber", "人數") + ":";
String openTable = LanguageUtils.get_language_system(this, "open.table", "開台") + ":";
......@@ -235,35 +222,59 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
}
tv_total_money.setText("$" + orderDetailItem.getTotalAmount());
setTitleByOrderType(orderDetailItem);
setOrderStatus(orderDetailItem);
setBtnVisibilityByOrderType(orderDetailItem);
mOrderDetailList = OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(orderDetailItem.getOrderDetails()));
setOrderDetailAdapter(mOrderDetailList);
double totalMoney = getTotalMoney();
tv_total.setText("$" + totalMoney);
}
setOrderMoneyAdpater(orderDetailItem, totalMoney);
setOrderPayMethodAdapter(orderDetailItem);
private void setTitleByOrderType(OrderManagerResponse item) {
String orderCode = LanguageUtils.get_language_system(mContext, "order.code", "訂單碼") + ": ";
String mealCode = LanguageUtils.get_language_system(mContext, "meal.code", "取餐碼") + ": ";
if (item.getOrderType() == OrderTypeConstans.order_type_2) {
tv_table_name.setText("外賣");
tv_order_num.setText(orderCode + item.getTakeFoodCode());
} else if (item.getOrderType() == OrderTypeConstans.order_type_7) {
tv_table_name.setText("自取");
tv_order_num.setText(orderCode + item.getBillNo() + " " + mealCode + item.getTakeFoodCode());
} else {
String tableName = LanguageUtils.get_language_system(this, "table.number", "檯號") + ": ";
String orderNumber = LanguageUtils.get_language_system(this, "order.number", "訂單號") + ": ";
tv_table_name.setText(tableName + item.getTableName());
tv_order_num.setText(orderNumber + item.getId());
}
if (orderDetailItem.withHywebPay()) {
tv_order_status.setVisibility(View.VISIBLE);
btn_tips.setVisibility(View.VISIBLE);
setOrderBtnVisbilityByTxnId(orderDetailItem.getPayTxnId(), orderDetailItem.getCancelTxnId(), orderDetailItem.getRefundTxnId());
}
// btn_modify_order.setVisibility(View.GONE);
// else {
// tv_order_status.setVisibility(View.GONE);
// btn_tips.setVisibility(View.GONE);
// }
private void initAdapter() {
if (mOrderCenterDetailFoodAdapter == null) {
mOrderCenterDetailFoodAdapter = new OrderCenterDetailFoodAdapter(mOrderCenterDetailFoodList);
recycler_food.setAdapter(mOrderCenterDetailFoodAdapter);
LinearLayoutManager allOrderRecycleLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recycler_food.setLayoutManager(allOrderRecycleLayoutManager);
}
if (mOrderDetailPayMethodAdapter == null) {
mOrderDetailPayMethodAdapter = new OrderCenterMoneyAdapter(mOrderCenterPayMethodList);
recycler_pay_method.setAdapter(mOrderDetailPayMethodAdapter);
LinearLayoutManager allOrderRecycleLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recycler_pay_method.setLayoutManager(allOrderRecycleLayoutManager);
}
if (mOrderCenterMoneyAdapter == null) {
mOrderCenterMoneyAdapter = new OrderCenterMoneyAdapter(mOrderCenterMoneyList);
recycler_order_moeny.setAdapter(mOrderCenterMoneyAdapter);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recycler_order_moeny.setLayoutManager(linearLayoutManager);
}
}
private void setOrderMoneyAdpater(OrderManagerResponse orderDetailItem, double totalMoney) {
if (mOrderCenterMoneyList.size() > 0) {
public void updateOrderItems(OrderManagerResponse orderDetailItem,List<OrderDetail> orderDetailList){
if(mOrderCenterDetailFoodList.size() > 0){
mOrderCenterDetailFoodList.clear();
}
if(mOrderCenterMoneyList.size() > 0){
mOrderCenterMoneyList.clear();
}
if(mOrderCenterPayMethodList.size() > 0){
mOrderCenterPayMethodList.clear();
}
SectionTextItem3 serviceAmountSection = getOrderServiceAmountSection(orderDetailItem);
if (serviceAmountSection != null) {
mOrderCenterMoneyList.add(serviceAmountSection);
......@@ -276,46 +287,72 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
if (roudingSection != null) {
mOrderCenterMoneyList.add(roudingSection);
}
if (mOrderCenterMoneyAdapter == null) {
mOrderCenterMoneyAdapter = new OrderCenterMoneyAdapter(mOrderCenterMoneyList);
recycler_order_moeny.setAdapter(mOrderCenterMoneyAdapter);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recycler_order_moeny.setLayoutManager(linearLayoutManager);
} else {
List<PayMethod> payMethodList = getPayMethodList(orderDetailItem.getOrderPays());
List<SectionTextItem3> orderPayMethodList = orderPayMethodTransSectionTextItem3(payMethodList);
mOrderCenterDetailFoodList.addAll(orderDetailTransSectionTextItem3(orderDetailList));
mOrderCenterPayMethodList.addAll(orderPayMethodList);
mOrderCenterDetailFoodAdapter.notifyDataSetChanged();
mOrderCenterMoneyAdapter.notifyDataSetChanged();
}
mOrderDetailPayMethodAdapter.notifyDataSetChanged();
//設置打印所需支付方式
mDoshokuOrder.setBillMoney(payMethodList);
}
private void setOrderDetailAdapter(List<OrderDetail> orderDetailList) {
if (mOrderCenterDetailFoodAdapter == null) {
mOrderCenterDetailFoodList.addAll(orderDetailTransSectionTextItem3(orderDetailList));
mOrderCenterDetailFoodAdapter = new OrderCenterDetailFoodAdapter(mOrderCenterDetailFoodList);
recycler_food.setAdapter(mOrderCenterDetailFoodAdapter);
LinearLayoutManager allOrderRecycleLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recycler_food.setLayoutManager(allOrderRecycleLayoutManager);
private void setBtnVisibilityByOrderStatus(OrderManagerResponse orderDetailItem) {
if (orderDetailItem.getStatus() == 6) {
//訂單已取消
btn_print_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
tv_order_status.setVisibility(View.VISIBLE);
} else {
mOrderCenterDetailFoodList.clear();
mOrderCenterDetailFoodList.addAll(orderDetailTransSectionTextItem3(orderDetailList));
mOrderCenterDetailFoodAdapter.notifyDataSetChanged();
btn_print_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
tv_order_status.setVisibility(View.GONE);
if (orderDetailItem.withHywebPay()) {
setOrderBtnVisbilityByTxnId(orderDetailItem.getPayTxnId(), orderDetailItem.getCancelTxnId(), orderDetailItem.getRefundTxnId());
}
}
}
private void setOrderPayMethodAdapter(OrderManagerResponse orderDetailItem) {
List<PayMethod> payMethodList = getPayMethodList(orderDetailItem.getOrderPays());
List<SectionTextItem3> sectionTextItem3List = orderPayMethodTransSectionTextItem3(payMethodList);
if (mOrderDetailPayMethodAdapter == null) {
mOrderCenterPayMethodList.addAll(sectionTextItem3List);
mOrderDetailPayMethodAdapter = new OrderCenterMoneyAdapter(mOrderCenterPayMethodList);
recycler_pay_method.setAdapter(mOrderDetailPayMethodAdapter);
LinearLayoutManager allOrderRecycleLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recycler_pay_method.setLayoutManager(allOrderRecycleLayoutManager);
} else {
mOrderCenterPayMethodList.clear();
mOrderCenterPayMethodList.addAll(sectionTextItem3List);
mOrderDetailPayMethodAdapter.notifyDataSetChanged();
private void setBtnVisibilityByOrderType(int orderType) {
if (orderType == OrderTypeConstans.order_type_2 || orderType == OrderTypeConstans.order_type_7) {
//外賣自取 不可以修改訂單 取消訂單
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
}
//設置打印所需支付方式
mDoshokuOrder.setBillMoney(payMethodList);
}
private void setOrderBtnVisbilityByTxnId(String payTxnId, String cancelTxnId, String refundTxnId) {
if (!TextUtils.isEmpty(cancelTxnId)) {
tv_order_status.setText("已取消");
tv_order_status.setVisibility(View.VISIBLE);
setOrderCancelVisbility();
return;
}
if (!TextUtils.isEmpty(refundTxnId)) {
tv_order_status.setVisibility(View.VISIBLE);
tv_order_status.setText("已退款");
setOrderCancelVisbility();
return;
}
if (!TextUtils.isEmpty(payTxnId)) {
btn_print_order.setVisibility(View.VISIBLE);
btn_refund.setVisibility(View.VISIBLE);
btn_tips.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
}
}
private void setOrderCancelVisbility() {
btn_print_order.setVisibility(View.GONE);
btn_refund.setVisibility(View.GONE);
btn_tips.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
}
public static List<SectionTextItem3> orderPayMethodTransSectionTextItem3(List<PayMethod> payMethodList) {
......@@ -325,8 +362,8 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
sectionTextItem3.setLeftText(payMethod.getPayName());
sectionTextItem3.setCenterText(String.valueOf(0));
sectionTextItem3.setRightText(String.valueOf(payMethod.getPayMoney()));
sectionTextItem3.setLeftTextStyle(com.gingersoft.gsa.cloud.common.R.style.order_paymethod_text_style);
sectionTextItem3.setRightTextStyle(com.gingersoft.gsa.cloud.common.R.style.order_paymethod_text_style);
sectionTextItem3.setLeftTextStyle(R.style.order_paymethod_text_style);
sectionTextItem3.setRightTextStyle(R.style.order_paymethod_text_style);
sectionTextItem3List.add(sectionTextItem3);
}
return sectionTextItem3List;
......@@ -451,49 +488,7 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
return otherMoney;
}
private void setTitleByOrderType(OrderManagerResponse item) {
String orderCode = LanguageUtils.get_language_system(mContext, "order.code", "訂單碼") + ": ";
String mealCode = LanguageUtils.get_language_system(mContext, "meal.code", "取餐碼") + ": ";
if (item.getOrderType() == 2) {
tv_table_name.setText("外賣");
tv_order_num.setText(orderCode + item.getTakeFoodCode());
} else if (item.getOrderType() == 7) {
tv_table_name.setText("自取");
tv_order_num.setText(orderCode + item.getBillNo() + " " + mealCode + item.getTakeFoodCode());
} else {
String tableName = LanguageUtils.get_language_system(this, "table.number", "檯號") + ": ";
String orderNumber = LanguageUtils.get_language_system(this, "order.number", "訂單號") + ": ";
tv_table_name.setText(tableName + item.getTableName());
tv_order_num.setText(orderNumber + item.getId());
}
}
/**
* 設置訂單狀態
*
* @param item
*/
private void setOrderStatus(OrderManagerResponse item) {
if (item.getStatus() == 6) {
btn_print_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
tv_order_status.setVisibility(View.VISIBLE);
} else {
btn_print_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
tv_order_status.setVisibility(View.GONE);
}
}
private void setBtnVisibilityByOrderType(@NotNull OrderManagerResponse item) {
if (item.getOrderType() == 2 || item.getOrderType() == 7) {
//外賣自取 不可以修改訂單 取消訂單
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
}
}
@OnClick({R2.id.btn_print_order, R2.id.btn_cancel_order, R2.id.btn_modify_order, R2.id.btn_tips, R2.id.btn_refund})
public void onClick(View v) {
......@@ -528,31 +523,33 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
private void hywebRefund(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setOrderId(mOrderDetailItem.getId());
if (!TextUtils.isEmpty(mOrderDetailItem.getTableNumber())) {
txnIdRequest.setTableExtId(mOrderDetailItem.getTableId());
} else {
txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setTableId(mOrderDetailItem.getTableId());
}
txnIdRequest.setAmount(mOrderDetailItem.getTotalAmount());
RefundRequest refundRequest = new RefundRequest();
refundRequest.setPAYMENT_APP_ID(getPaymentAppIdByPays(mOrderDetailItem.getOrderPays()));
PosPay.refund(mContext, this, refundRequest, txnIdRequest, new OnPosActionListener() {
refundRequest.setTXN_AMT(mOrderDetailItem.getTotalAmount());
PosPay.refund(mContext, this, refundRequest, txnIdRequest, new OnPosActionListener<RefundRespose>() {
@Override
public void onPosSuccess(HywebPosResponse response) {
public void onPosSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
}
@Override
public void onPosException(HywebPosResponse response) {
LoganManager.w_code(TAG, "onPosException: " + response.toString());
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mOrderDetailItem.getPayTxnId());
statusExceptionParam.setAmount(mOrderDetailItem.getAmount());
statusExceptionParam.setOrderNum(mOrderDetailItem.getId());
statusExceptionParam.setAmount(mOrderDetailItem.getTotalAmount());
statusExceptionParam.setOrderId(mOrderDetailItem.getId());
statusExceptionParam.setOrderNo(mOrderDetailItem.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -560,14 +557,28 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
}
@Override
public void onSuccess(HywebPosResponse response) {
LoganManager.w_code(TAG, "onSuccess: " + response.toString());
refreafshOrderDetail();
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onUpdateStatusSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onError(Throwable e) {
LoganManager.w_code(TAG, "onError: " + e.getMessage());
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mOrderDetailItem.getPayTxnId());
statusExceptionParam.setAmount(mOrderDetailItem.getTotalAmount());
statusExceptionParam.setOrderId(mOrderDetailItem.getId());
statusExceptionParam.setOrderNo(mOrderDetailItem.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
......@@ -599,31 +610,33 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
private void hywebOrderCancle(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setOrderId(mOrderDetailItem.getId());
if (!TextUtils.isEmpty(mOrderDetailItem.getTableNumber())) {
txnIdRequest.setTableExtId(mOrderDetailItem.getTableId());
} else {
txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setTableId(mOrderDetailItem.getTableId());
}
txnIdRequest.setAmount(mOrderDetailItem.getTotalAmount());
VoidRequest voidRequest = new VoidRequest();
PosPay.voidO(mContext, this, voidRequest, txnIdRequest, new OnPosActionListener() {
@Override
public void onPosSuccess(HywebPosResponse response) {
PosPay.voidO(mContext, this, voidRequest, txnIdRequest, new OnPosActionListener<VoidRespose>() {
@Override
public void onPosSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
refreafshOrderDetail();
}
@Override
public void onPosException(HywebPosResponse response) {
LoganManager.w_code(TAG, "onPosException: " + response.toString());
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mOrderDetailItem.getPayTxnId());
statusExceptionParam.setAmount(mOrderDetailItem.getAmount());
statusExceptionParam.setOrderNum(mOrderDetailItem.getId());
statusExceptionParam.setAmount(mOrderDetailItem.getTotalAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -631,14 +644,28 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
}
@Override
public void onSuccess(HywebPosResponse response) {
LoganManager.w_code(TAG, "onSuccess: " + response.toString());
refreafshOrderDetail();
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onUpdateStatusSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onError(Throwable e) {
LoganManager.w_code(TAG, "onError: " + e.getMessage());
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mOrderDetailItem.getPayTxnId());
statusExceptionParam.setAmount(mOrderDetailItem.getTotalAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
......@@ -652,30 +679,32 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
if (!TextUtils.isEmpty(number)) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setOrderId(mOrderDetailItem.getId());
if (!TextUtils.isEmpty(mOrderDetailItem.getTableNumber())) {
txnIdRequest.setTableExtId(mOrderDetailItem.getTableId());
} else {
txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
txnIdRequest.setTableId(mOrderDetailItem.getTableId());
}
txnIdRequest.setAmount(mOrderDetailItem.getAmount());
txnIdRequest.setAmount(mOrderDetailItem.getTotalAmount());
PosPay.tip(mContext, OrderDetailActivity.this, txnIdRequest,
getTipsRequest(mOrderDetailItem.getPayTxnId(), mOrderDetailItem.getAmount(), Double.parseDouble(number)), new OnPosActionListener() {
getTipsRequest(mOrderDetailItem.getPayTxnId(), mOrderDetailItem.getTotalAmount(), Double.parseDouble(number)), new OnPosActionListener<AdjustTipRespose>() {
@Override
public void onPosSuccess(HywebPosResponse response) {
public void onPosSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
refreafshOrderDetail();
}
@Override
public void onPosException(HywebPosResponse response) {
LoganManager.w_code(TAG, "onPosException: " + response.toString());
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mOrderDetailItem.getPayTxnId());
statusExceptionParam.setAmount(mOrderDetailItem.getAmount());
statusExceptionParam.setOrderNum(mOrderDetailItem.getId());
statusExceptionParam.setAmount(mOrderDetailItem.getTotalAmount());
statusExceptionParam.setOrderId(mOrderDetailItem.getId());
statusExceptionParam.setOrderNo(mOrderDetailItem.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
......@@ -683,13 +712,28 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
}
@Override
public void onSuccess(HywebPosResponse response) {
refreafshOrderDetail();
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e.toString());
}
@Override
public void onError(Throwable e) {
public void onUpdateStatusSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(mOrderDetailItem.getPayTxnId());
statusExceptionParam.setAmount(mOrderDetailItem.getTotalAmount());
statusExceptionParam.setOrderId(mOrderDetailItem.getId());
statusExceptionParam.setOrderNo(mOrderDetailItem.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
......@@ -886,6 +930,10 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
public void returnOrderDetail(OrderManagerResponse orderDetailItem) {
this.mOrderDetailItem = orderDetailItem;
initOrderDetail(orderDetailItem);
setTitleByOrderType(mOrderDetailItem);
setBtnVisibilityByOrderType(mOrderDetailItem.getOrderType());
setBtnVisibilityByOrderStatus(mOrderDetailItem);
updateOrderItems(mOrderDetailItem,mOrderDetailList);
}
@Override
......
......@@ -6,6 +6,7 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.common.constans.OrderTypeConstans;
import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.table.R;
......@@ -92,21 +93,9 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
@Override
public void setData(OrderManagerResponse item, int position) {
String pax = LanguageUtils.get_language_system(mContext, "Meal.Mannumber", "人數") + ":";
String openTable = LanguageUtils.get_language_system(mContext, "open.table", "開台") + ":";
String payTable = LanguageUtils.get_language_system(mContext, "open.table", "結賬") + ":";
String amount = LanguageUtils.get_language_system(mContext, "amount", "金額") + ":$";
tv_people_num.setText(pax + item.getPerson());
tv_open_time.setText(openTable + TimeUtils.getStringByFormat(new Date(item.getCreateTime()), TimeUtils.DEFAULT_DATE_FORMAT_YMDHM));
if (!TextUtils.isEmpty(item.getEndTime())) {
tv_pay_time.setText(payTable + TimeUtils.getStringByFormat(new Date(item.getEndTime()), TimeUtils.DEFAULT_DATE_FORMAT_YMDHM));
}
tv_pay_money.setText(amount + item.getTotalAmount());
setTitleByOrderType(item);
setOrderStatus(item, position);
setBtnVisibilityByOrderType(item);
setOrderItemDetail(item);
setBtnVisibilityByOrderType(item.getOrderType());
setBtnVisibilityByOrderStatus(item, position);
ll_root_container.setOnClickListener(new View.OnClickListener() {
@Override
......@@ -118,13 +107,28 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
});
}
private void setTitleByOrderType(OrderManagerResponse item) {
private void setOrderItemDetail(OrderManagerResponse item) {
String pax = LanguageUtils.get_language_system(mContext, "Meal.Mannumber", "人數") + ":";
String openTable = LanguageUtils.get_language_system(mContext, "open.table", "開台") + ":";
String payTable = LanguageUtils.get_language_system(mContext, "open.table", "結賬") + ":";
String amount = LanguageUtils.get_language_system(mContext, "amount", "金額") + ":$";
String orderCode = LanguageUtils.get_language_system(mContext, "order.code", "訂單碼") + ": ";
String mealCode = LanguageUtils.get_language_system(mContext, "meal.code", "取餐碼") + ": ";
if (item.getOrderType() == 2) {
tv_people_num.setText(pax + item.getPerson());
tv_open_time.setText(openTable + TimeUtils.getStringByFormat(new Date(item.getCreateTime()), TimeUtils.DEFAULT_DATE_FORMAT_YMDHM));
if (!TextUtils.isEmpty(item.getEndTime())) {
tv_pay_time.setText(payTable + TimeUtils.getStringByFormat(new Date(item.getEndTime()), TimeUtils.DEFAULT_DATE_FORMAT_YMDHM));
}
tv_pay_money.setText(amount + item.getTotalAmount());
btn_print_order.setText(LanguageUtils.get_language_system(mContext, "print.order", "打印賬單"));
btn_tips.setText(LanguageUtils.get_language_system(mContext, "public.tips", "貼士"));
btn_modify_order.setText(LanguageUtils.get_language_system(mContext, "modify.order", "修改訂單"));
btn_cancel_order.setText(LanguageUtils.get_language_system(mContext, "cancel.order", "取消訂單"));
if (item.getOrderType() == OrderTypeConstans.order_type_2) {
tv_table_name.setText("外賣");
tv_order_num.setText(orderCode + item.getTakeFoodCode());
} else if (item.getOrderType() == 7) {
} else if (item.getOrderType() == OrderTypeConstans.order_type_7) {
tv_table_name.setText("自取");
tv_order_num.setText(orderCode + item.getBillNo() + " " + mealCode + item.getTakeFoodCode());
} else {
......@@ -135,8 +139,7 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
}
}
private void setOrderStatus(OrderManagerResponse item, int position) {
// btn_cancel_order.setVisibility(View.GONE);
private void setBtnVisibilityByOrderStatus(OrderManagerResponse item, int position) {
if (item.getStatus() == 6) {
btn_print_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
......@@ -149,15 +152,11 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
btn_cancel_order.setVisibility(View.VISIBLE);
btn_order_status.setVisibility(View.GONE);
if (item.withHywebPay()) {
ll_pos_bottom.setVisibility(View.VISIBLE);
setOrderStatusByTxnId(item.getPayTxnId(), item.getCancelTxnId(), item.getRefundTxnId());
ll_pos_bottom.setVisibility(View.VISIBLE);
} else {
ll_pos_bottom.setVisibility(View.GONE);
}
btn_print_order.setText(LanguageUtils.get_language_system(mContext, "print.order", "打印賬單"));
btn_tips.setText(LanguageUtils.get_language_system(mContext, "public.tips", "貼士"));
btn_modify_order.setText(LanguageUtils.get_language_system(mContext, "modify.order", "修改訂單"));
btn_cancel_order.setText(LanguageUtils.get_language_system(mContext, "cancel.order", "取消訂單"));
btn_print_order.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
......@@ -199,15 +198,6 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
}
});
}
// btn_modify_order.setVisibility(View.GONE);
}
private void setOrderCancelVisbility() {
btn_print_order.setVisibility(View.GONE);
btn_refund.setVisibility(View.GONE);
btn_tips.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
}
private void setOrderStatusByTxnId(String payTxnId, String cancelTxnId, String refundTxnId) {
......@@ -232,8 +222,16 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
}
}
private void setBtnVisibilityByOrderType(OrderManagerResponse item) {
if (item.getOrderType() == 2 || item.getOrderType() == 7) {
private void setOrderCancelVisbility() {
btn_print_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
btn_refund.setVisibility(View.GONE);
btn_tips.setVisibility(View.GONE);
}
private void setBtnVisibilityByOrderType(int orderType) {
if (orderType == OrderTypeConstans.order_type_2 || orderType == OrderTypeConstans.order_type_7) {
//外賣自取 不可以修改訂單 取消訂單
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
......
......@@ -4,8 +4,10 @@
<solid android:color="@color/red_400" />
<corners android:radius="@dimen/dp_6"/>
<size
android:width="15dp"
android:height="2dp" />
android:width="@dimen/dp_12"
android:height="@dimen/dp_3" />
</shape>
\ No newline at end of file
......@@ -4,7 +4,10 @@
<solid android:color="@color/theme_grey_color" />
<corners android:radius="@dimen/dp_6"/>
<size
android:width="15dp"
android:height="2dp" />
android:width="@dimen/dp_12"
android:height="@dimen/dp_3" />
</shape>
\ No newline at end of file
......@@ -87,7 +87,7 @@
android:background="@color/gray"
android:orientation="horizontal"/>
<ScrollView
<androidx.core.widget.NestedScrollView
android:id="@+id/scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
......@@ -265,7 +265,7 @@
android:focusable="false"
android:scrollbars="none" />
</LinearLayout>
</ScrollView>
</androidx.core.widget.NestedScrollView>
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/topbar"
......
......@@ -482,15 +482,18 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_food_group"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical" />
<LinearLayout
android:id="@+id/ll_food_group_point"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_5"
android:background="@color/theme_grey_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal"
android:visibility="invisible" />
android:visibility="visible" />
</LinearLayout>
<RelativeLayout
......
......@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 29,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode : 16,
versionName : "1.1.6"
versionCode : 17,
versionName : "1.1.7"
]
version = [
......@@ -26,7 +26,7 @@ ext {
dependencies = [
//support
"appcompat-v7" : 'androidx.appcompat:appcompat:1.1.0',//不要超過1.0.2,不然android5.1.1用webview會有問題
"appcompat-v7" : 'androidx.appcompat:appcompat:1.0.2',//不要超過1.0.2,不然android5.1.1用webview會有問題
"design" : 'com.google.android.material:material:1.0.0',
"support-v4" : 'androidx.legacy:legacy-support-v4:1.0.0',
"cardview-v7" : 'androidx.cardview:cardview:1.0.0',
......
......@@ -16,9 +16,11 @@
package com.jess.arms.integration;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.app.Dialog;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Message;
......@@ -40,6 +42,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import androidx.appcompat.app.AppCompatActivity;
import timber.log.Timber;
/**
......@@ -245,6 +248,28 @@ public final class AppManager {
return mActivityList.size() > 0 ? mActivityList.get(mActivityList.size() - 1) : null;
}
// /**
// * 獲取棧頂的{@link Activity}此方法可以保證與AMS任務棧中 topActivity一致,一般用於與調起其他應用返回上一次打開的{@link Activity}
// *
// * @return
// */
// public void startTaskTopActivity() {
// ComponentName topActivity;
// ActivityManager manager = (ActivityManager) mApplication.getSystemService(Context.ACTIVITY_SERVICE);
// ActivityManager.RunningTaskInfo info = manager.getRunningTasks(1).get(0);
//
// topActivity = info.topActivity;
//
// List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = manager.getRunningAppProcesses();
// List<ActivityManager.AppTask> appTasks;
// if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
// appTasks = manager.getAppTasks();
// }
// //返回上次操作的頁面
// Intent intent = new Intent();
// intent.setComponent(topActivity);
// mApplication.startActivity(intent);
// }
/**
* 返回一个存储所有未销毁的 {@link Activity} 的集合
......@@ -368,6 +393,7 @@ public final class AppManager {
/**
* 打开指定 {@link Activity}
*
* @param openClass
*/
public void changeRootActivityByClass(Class openClass) {
......
......@@ -41,3 +41,6 @@
-keep class com.zui.deviceidservice.** { *; }
-keep interface com.zui.deviceidservice.** { *; }
# loadsir
-dontwarn com.kingja.loadsir.**
-keep class com.kingja.loadsir.** {*;}
......@@ -38,9 +38,15 @@ import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.loadsir.ErrorCallback;
import com.gingersoft.gsa.cloud.common.loadsir.LoadingCallback;
import com.gingersoft.gsa.cloud.common.loadsir.TimeoutCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosPayStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosRefundStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosSettlementStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosTipsStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosVoidStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.oaId.DeviceID;
import com.gingersoft.gsa.cloud.common.utils.AidlUtil;
import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.common.utils.FileUtils;
import com.gingersoft.gsa.cloud.common.utils.crash.AppCrashHandler;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
......@@ -158,6 +164,7 @@ public class GsaCloudApplication extends BaseApplication {
+ File.separator + LoganConfig.FILE_NAME)
.setEncryptKey16(LoganConfig.EncryptKey16.getBytes())
.setEncryptIV16(LoganConfig.EncryptIV16.getBytes())
.setDay(LoganConfig.DAY)
.build();
Logan.init(config);
Logan.setOnLoganProtocolStatus(new OnLoganProtocolStatus() {
......@@ -188,10 +195,12 @@ public class GsaCloudApplication extends BaseApplication {
* 初始化Hyweb支付回調
*/
private void initHywebCommandImpl() {
// if (AppDevices.isHywebPos()) {
CC.obtainBuilder(ComponentName.COMPONENT_LOGIN)
.setActionName(ComponentAction.Login.INIT_HYWEB_COMMAND_IMPL)
.build()
.call();
// }
}
public Activity getCurrentActivity() {
......@@ -229,6 +238,11 @@ public class GsaCloudApplication extends BaseApplication {
.addCallback(new LoadingCallback())
.addCallback(new TimeoutCallback())
.addCallback(new CustomCallback())
.addCallback(new PosPayStatusExceptionCallback())
.addCallback(new PosRefundStatusExceptionCallback())
.addCallback(new PosVoidStatusExceptionCallback())
.addCallback(new PosTipsStatusExceptionCallback())
.addCallback(new PosSettlementStatusExceptionCallback())
.commit();
}
......@@ -318,7 +332,6 @@ public class GsaCloudApplication extends BaseApplication {
.backupStrategy(new MyBackupStrategy(FileUtils.ACTION_MAX_SIZE)) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024)
.cleanStrategy(new FileLastModifiedCleanStrategy(FileUtils.ACTION_MAX_FILE_TIME)) // 指定日志文件清除策略,默认为 NeverCleanStrategy()
.build();
XLog.init( // 初始化 XLog
config, // 指定日志配置,如果不指定,会默认使用 new LogConfiguration.Builder().build()
androidPrinter, // 添加任意多的打印器。如果没有添加任何打印器,会默认使用 AndroidPrinter(Android)/ConsolePrinter(java)
......
......@@ -15,6 +15,11 @@ public class LoganConfig {
public static final String UPLOAD_LOG_URL = "http://192.168.1.113:8082/logan/upload.json";
/**
* 日誌保留天數
*/
public static final int DAY = 1;
/**
* 代码日志
*/
public static final byte CODE_LEVLE = 1;
......@@ -38,4 +43,9 @@ public class LoganConfig {
* native日誌
*/
public static final byte native_LEVLE = 6;
/**
* 打印相關日誌
*/
public static final byte PRINTER_LEVLE = 7;
}
......@@ -38,6 +38,17 @@ public class FunctionExtendedConfiguration {
.remark("外送結賬打印次數")
.build();
private ExpandInfoSetting OrderReceivingTimeout = ExpandInfoSetting.builder()
.valueInt(60 * 60 * 1000)
.remark("外送接單超時時間")
.build();
private ExpandInfoSetting FrozenChainAutoOrder = ExpandInfoSetting.builder()
.valueBoolean(true)
.remark("是否自動接單 為0true")
.build();
private ExpandInfoSetting TableModePrintCount = ExpandInfoSetting.builder()
.valueInt(1)
.remark("餐檯印單打印次數")
......@@ -48,11 +59,6 @@ public class FunctionExtendedConfiguration {
.remark("餐檯模式結賬單打印次數")
.build();
private ExpandInfoSetting OrderReceivingTimeout = ExpandInfoSetting.builder()
.valueInt(60 * 60 * 1000)
.remark("外送接單超時時間")
.build();
private ExpandInfoSetting PrintMemberInfo = ExpandInfoSetting.builder()
.valueBoolean(false)
.remark("是否打印會員信息")
......@@ -78,11 +84,6 @@ public class FunctionExtendedConfiguration {
.remark("是否打印\"頭單\"文字")
.build();
private ExpandInfoSetting FrozenChainAutoOrder = ExpandInfoSetting.builder()
.valueBoolean(true)
.remark("是否自動接單 為0true")
.build();
private ExpandInfoSetting MergeSendFood = ExpandInfoSetting.builder()
.valueBoolean(false)
.remark("送單是否自動合併食品")
......@@ -113,6 +114,11 @@ public class FunctionExtendedConfiguration {
.remark("餐檯模式開檯自動彈出輸入人數彈窗")
.build();
private ExpandInfoSetting PluNumberChar = ExpandInfoSetting.builder()
.valueChar("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
.remark("PLU左側滑動信息配置")
.build();
/**
* skyorder相關
*/
......@@ -137,7 +143,9 @@ public class FunctionExtendedConfiguration {
.build();
public <T> T getPluNumberCharVaule() {
return PluNumberChar.getValue();
}
public <T> T getRoundingVaule() {
return Rounding.getValue();
......
package com.gingersoft.gsa.cloud.common.constans;
public interface OrderTypeConstans {
/**
* 堂食
*/
int order_type_1 = 1;
/**
* 外賣
*/
int order_type_2 = 2;
/**
* 掃碼點餐
*/
int order_type_3 = 3;
/**
* 預點餐
*/
int order_type_4 = 4;
/**
* 自取
*/
int order_type_7 = 7;
}
package com.gingersoft.gsa.cloud.common.loadsir.pos;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.common.R;
import com.kingja.loadsir.callback.Callback;
public abstract class BasePosCallback extends Callback {
private TextView tv_order_num;
private TextView tv_final_prompt;
private TextView tv_exception;
private TextView tv_amount;
private TextView tv_pay_method;
public BasePosCallback() {
}
@Override
protected void onViewCreate(Context context, View rootView) {
tv_order_num = rootView.findViewById(R.id.tv_order_num);
tv_final_prompt = rootView.findViewById(R.id.tv_final_prompt);
tv_exception = rootView.findViewById(R.id.tv_exception);
tv_amount = rootView.findViewById(R.id.tv_amount);
tv_pay_method = rootView.findViewById(R.id.tv_pay_method);
}
public void setTvOrderNum(String orderNum) {
tv_order_num.setText(orderNum);
}
public void setTvException(String orderNum) {
tv_exception.setText(orderNum);
}
public void setTvAmount(String amount) {
tv_amount.setText(amount);
}
public void setTvPayMethod(String payMethod) {
tv_pay_method.setText(payMethod);
}
/**
* 顯示重試多次還是無法查詢到狀態 顯示提示信息
*
* @param show
*/
public void showFinalStrategy(boolean show) {
if (show) {
tv_final_prompt.setVisibility(View.VISIBLE);
} else {
tv_final_prompt.setVisibility(View.INVISIBLE);
}
}
}
package com.gingersoft.gsa.cloud.common.loadsir.pos;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.common.R;
import com.kingja.loadsir.callback.Callback;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public class PosPayStatusExceptionCallback extends BasePosCallback {
@Override
protected int onCreateView() {
return R.layout.loadsir_pos_pay_status_exception;
}
}
package com.gingersoft.gsa.cloud.common.loadsir.pos;
import android.view.View;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.common.R;
import com.kingja.loadsir.callback.Callback;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public class PosRefundStatusExceptionCallback extends BasePosCallback {
@Override
protected int onCreateView() {
return R.layout.loadsir_pos_refund_status_exception;
}
}
package com.gingersoft.gsa.cloud.common.loadsir.pos;
import android.view.View;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.common.R;
import com.kingja.loadsir.callback.Callback;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public class PosSettlementStatusExceptionCallback extends BasePosCallback {
@Override
protected int onCreateView() {
return R.layout.loadsir_pos_settlement_status_exception;
}
}
package com.gingersoft.gsa.cloud.common.loadsir.pos;
import com.gingersoft.gsa.cloud.common.R;
import com.kingja.loadsir.callback.Callback;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public class PosTipsStatusExceptionCallback extends BasePosCallback {
@Override
protected int onCreateView() {
return R.layout.loadsir_pos_tips_status_exception;
}
}
package com.gingersoft.gsa.cloud.common.loadsir.pos;
import com.gingersoft.gsa.cloud.common.R;
import com.kingja.loadsir.callback.Callback;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public class PosVoidStatusExceptionCallback extends BasePosCallback {
@Override
protected int onCreateView() {
return R.layout.loadsir_pos_void_status_exception;
}
}
......@@ -53,6 +53,12 @@ public class LoganManager {
printLog("AppCrashHandler", log);
}
public static void w_printer(String TAG,String log) {
Logan.w(log, LoganConfig.PRINTER_LEVLE);
// Logan.f();
printLog(TAG, log);
}
public static void w_H5(String log) {
Logan.w(log, LoganConfig.H5_LEVLE);
}
......@@ -92,7 +98,7 @@ public class LoganManager {
}
}
});
Log.d(TAG, "upload result, httpCode: " + statusCode + ", details: " + resultData);
LoganManager.w_code(TAG,"upload result, httpCode: " + statusCode + ", details: " + resultData);
}
});
}
......
......@@ -8,7 +8,7 @@ import android.os.Build;
* @更新時間: 2020-12-26 10:49
* @描述:
*/
public class AppDevice {
public class AppDevices {
/**
* 是不是N5設備
......
......@@ -6,45 +6,55 @@ package com.gingersoft.gsa.cloud.component;
* @update date: 2020-11-26
* @description:
*/
public class ComponentAction {
public interface ComponentAction {
public interface Login{
interface Login {
String OPEN_WELCOME = "open_welcome";
String OPEN_LOGIN = "open_login";
String OPEN_INIT_HYWEB_PAGE = "open_init_hyweb_page";
String INIT_HYWEB_COMMAND_IMPL = "init_hyweb_command_impl";
}
public interface Download{
interface Download {
}
public interface Main{
interface Main {
}
public interface Table{
interface Table {
String KILL_MEAL_ORDER_PAY = "kill_meal_order_pay";
/**
* 初始化餐檯,外賣訂單
*/
String INT_ORDER = "int_order";
}
public interface Print{
interface Print {
}
public interface Manager{
interface Manager {
}
public interface DeliveryPick{
interface DeliveryPick {
}
public interface ColdChain{
interface ColdChain {
}
public interface SupplyChain{
interface SupplyChain {
}
public interface Pay{
interface Pay {
String OPEN_PAY_RESULT = "open_pay_result";
}
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_order_num"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:gravity="center"
android:text="單號:123571416"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal3" />
<TextView
android:id="@+id/tv_exception"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/pay_status_exception"
android:gravity="center"
android:drawablePadding="@dimen/dp_10"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_pay"
android:layout_marginBottom="@dimen/head_height"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/tv_final_prompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:textColor="@color/red"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_final_prompt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_exception"/>
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="$500"
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_32"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_final_prompt"/>
<TextView
android:id="@+id/tv_pay_method"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:text="微信,支付寶"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_amount"/>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
android:id="@+id/btn_reload"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:background="@color/theme_color"
android:layout_margin="@dimen/dp_10"
android:textSize="@dimen/text_size_default"
android:textColor="@color/theme_white_color"
android:text="@string/emptyView_mode_desc_retry_query"
app:qmui_radius="@dimen/dp_5"
app:qmui_backgroundColor="@color/theme_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_order_num"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:gravity="center"
android:text="單號:123571416"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal3" />
<TextView
android:id="@+id/tv_exception"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/pay_status_exception"
android:gravity="center"
android:drawablePadding="@dimen/dp_10"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_refund"
android:layout_marginBottom="@dimen/head_height"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/tv_final_prompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:textColor="@color/red"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_final_prompt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_exception"/>
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="$500"
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_32"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_final_prompt"/>
<TextView
android:id="@+id/tv_pay_method"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:text="微信,支付寶"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_amount"/>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
android:id="@+id/btn_reload"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:background="@color/theme_color"
android:layout_margin="@dimen/dp_10"
android:textSize="@dimen/text_size_default"
android:textColor="@color/theme_white_color"
android:text="@string/emptyView_mode_desc_retry_query"
app:qmui_radius="@dimen/dp_5"
app:qmui_backgroundColor="@color/theme_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_order_num"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:gravity="center"
android:text="單號:123571416"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal3" />
<TextView
android:id="@+id/tv_exception"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/pay_status_exception"
android:gravity="center"
android:drawablePadding="@dimen/dp_10"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_settlement"
android:layout_marginBottom="@dimen/head_height"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/tv_final_prompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:textColor="@color/red"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_final_prompt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_exception"/>
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="$500"
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_32"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_final_prompt"/>
<TextView
android:id="@+id/tv_pay_method"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:text="微信,支付寶"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_amount"/>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
android:id="@+id/btn_reload"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:background="@color/theme_color"
android:layout_margin="@dimen/dp_10"
android:textSize="@dimen/text_size_default"
android:textColor="@color/theme_white_color"
android:text="@string/emptyView_mode_desc_retry_query"
app:qmui_radius="@dimen/dp_5"
app:qmui_backgroundColor="@color/theme_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_order_num"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:gravity="center"
android:text="單號:123571416"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal3" />
<TextView
android:id="@+id/tv_exception"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/pay_status_exception"
android:gravity="center"
android:drawablePadding="@dimen/dp_10"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_tips"
android:layout_marginBottom="@dimen/head_height"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/tv_final_prompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:textColor="@color/red"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_final_prompt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_exception"/>
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="$500"
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_32"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_final_prompt"/>
<TextView
android:id="@+id/tv_pay_method"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:text="微信,支付寶"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_amount"/>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
android:id="@+id/btn_reload"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:background="@color/theme_color"
android:layout_margin="@dimen/dp_10"
android:textSize="@dimen/text_size_default"
android:textColor="@color/theme_white_color"
android:text="@string/emptyView_mode_desc_retry_query"
app:qmui_radius="@dimen/dp_5"
app:qmui_backgroundColor="@color/theme_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_order_num"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:gravity="center"
android:text="單號:123571416"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal3" />
<TextView
android:id="@+id/tv_exception"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/pay_status_exception"
android:gravity="center"
android:drawablePadding="@dimen/dp_10"
android:textStyle="bold"
android:textColor="@color/theme_black"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_void"
android:layout_marginBottom="@dimen/head_height"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/tv_final_prompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:textColor="@color/red"
android:textSize="@dimen/load_dialog_text_size"
android:text="@string/emptyView_mode_desc_pos_final_prompt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_exception"/>
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="$500"
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_32"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_final_prompt"/>
<TextView
android:id="@+id/tv_pay_method"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:text="微信,支付寶"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_amount"/>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
android:id="@+id/btn_reload"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:background="@color/theme_color"
android:layout_margin="@dimen/dp_10"
android:textSize="@dimen/text_size_default"
android:textColor="@color/theme_white_color"
android:text="@string/emptyView_mode_desc_retry_query"
app:qmui_radius="@dimen/dp_5"
app:qmui_backgroundColor="@color/theme_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -130,7 +130,15 @@
<string name="emptyView_mode_desc_timeout_desc">網絡加載超時,請檢查網絡重試</string>
<string name="emptyView_mode_desc_retry">點擊重試</string>
<string name="emptyView_mode_desc_double">未獲取到數據</string>
<string name="emptyView_mode_desc_retry_query">重試查詢</string>
<string name="emptyView_mode_desc_pos_pay">支付狀態異常,請嘗試重試查詢</string>
<string name="emptyView_mode_desc_pos_refund">退款狀態異常,請嘗試重試查詢</string>
<string name="emptyView_mode_desc_pos_void">取消狀態異常,請嘗試重試查詢</string>
<string name="emptyView_mode_desc_pos_tips">補小費狀態異常,請嘗試重試查詢</string>
<string name="emptyView_mode_desc_pos_settlement">清機狀態異常,請嘗試重試查詢</string>
<string name="emptyView_mode_desc_pos_final_prompt">重試多次無效?請聯繫開發人員</string>
<!-- HttpError -->
<string name="response_error_unknown_error">未知錯誤</string>
<string name="response_error_network_unavailable">網絡不可用</string>
......
......@@ -46,6 +46,25 @@ public class MealOrderPayRequest implements Parcelable{
public MealOrderPayRequest() {
}
@Override
public String toString() {
return "MealOrderPayRequest{" +
"orderId=" + orderId +
", linePayType=" + linePayType +
", orderPayType=" + orderPayType +
", tableId=" + tableId +
", tableNumber='" + tableNumber + '\'' +
", memberId=" + memberId +
", couponId=" + couponId +
", pointsAdd=" + pointsAdd +
", pointsUse=" + pointsUse +
", whetherFreeService=" + whetherFreeService +
", orderPays=" + orderPays +
", posMatter=" + posMatter +
'}';
}
@Data
public static class OrderPay implements Parcelable {
private int payType;
......@@ -58,6 +77,16 @@ public class MealOrderPayRequest implements Parcelable{
}
@Override
public String toString() {
return "OrderPay{" +
"payType=" + payType +
", amount=" + amount +
", tipsPrice=" + tipsPrice +
", consumptionPoints=" + consumptionPoints +
'}';
}
@Override
public int describeContents() {
return 0;
}
......@@ -138,4 +167,6 @@ public class MealOrderPayRequest implements Parcelable{
return new MealOrderPayRequest[size];
}
};
}
......@@ -1288,12 +1288,12 @@ public class OrderDetail implements Commodity, Serializable ,Cloneable{
public static List<OrderDetail> transNewOrderDetails(List<OrderDetail> orderDetailList) {
List<OrderDetail> newOrderList = new ArrayList<>();
for (OrderDetail orderDetail : orderDetailList) {
// newOrderList.add(new OrderDetail(orderDetail));
try {
newOrderList.add(orderDetail.clone());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
newOrderList.add(new OrderDetail(orderDetail));
// try {
// newOrderList.add(orderDetail.clone());
// } catch (CloneNotSupportedException e) {
// e.printStackTrace();
// }
}
return newOrderList;
}
......
package com.gingersoft.gsa.cloud.pay.base;
/**
* @作者: bin
* @創建時間: 2020-12-16 15:46
* @更新時間: 2020-12-16 15:46
* @描述:
*/
public class BBPosPay {
}
package com.gingersoft.gsa.cloud.pay.base;
/**
* @作者: bin
* @創建時間: 2020-12-16 15:45
* @更新時間: 2020-12-16 15:45
* @描述:
*/
public abstract class BasePay {
}
package com.gingersoft.gsa.cloud.pay.base;
/**
* @作者: bin
* @創建時間: 2020-12-16 15:47
* @更新時間: 2020-12-16 15:47
* @描述:
*/
public class N5PosPay {
}
package com.gingersoft.gsa.cloud.pay.base;
/**
* @作者: bin
* @創建時間: 2020-12-16 15:48
* @更新時間: 2020-12-16 15:48
* @描述:
*/
public class NomalPay {
}
......@@ -91,7 +91,7 @@ public class PayMethod implements Parcelable {
*/
private double amountValue;
/**
* 支付方式(1:寶達通 8:支付寶 1001:現金 1023:支付寶HK,1030:N5刷卡 1031:N5掃碼
* 支付方式(1:寶達通 8:支付寶 1001:現金 1023:支付寶HK,1031:N5掃碼 1031:N5刷卡
*/
private int payType;
......
......@@ -18,7 +18,8 @@ public class PosActionStatusExceptionParam implements Parcelable {
private String txnId;
private PosAction posAction;
private long orderNum;
private long orderId;
private String orderNo;
private double amount;
private String payMethodName;
......@@ -34,7 +35,8 @@ public class PosActionStatusExceptionParam implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.txnId);
dest.writeInt(this.posAction == null ? -1 : this.posAction.ordinal());
dest.writeLong(this.orderNum);
dest.writeLong(this.orderId);
dest.writeString(this.orderNo);
dest.writeDouble(this.amount);
dest.writeString(this.payMethodName);
}
......@@ -43,7 +45,8 @@ public class PosActionStatusExceptionParam implements Parcelable {
this.txnId = in.readString();
int tmpPosAction = in.readInt();
this.posAction = tmpPosAction == -1 ? null : PosAction.values()[tmpPosAction];
this.orderNum = in.readLong();
this.orderId = in.readLong();
this.orderNo = in.readString();
this.amount = in.readDouble();
this.payMethodName = in.readString();
}
......
......@@ -6,7 +6,7 @@ package com.gingersoft.gsa.cloud.pay.contract;
* @更新時間: 2020-12-28 14:49
* @描述: 支付異常碼,每個支付相關的error對應一個唯一的code,方便出問題時定位
*/
public interface PayErrorCode {
public interface PayExceptionCode {
/**
* pos回調為Null
......@@ -17,9 +17,13 @@ public interface PayErrorCode {
*/
String pos_response_101 = "[101]";
/**
* pos回調 withException == true
* pos回调解析发生JSONException
*/
String pos_response_102 = "[102]";
/**
* pos回調 withException == true
*/
String pos_response_105 = "[105]";
/**
* SaleActionImp getTxnId
......@@ -30,7 +34,7 @@ public interface PayErrorCode {
String sale_404 = "[404]";
/**
* SaleActionImp onActionComplte
* SaleActionImp onPosException
*/
String sale_410 = "[410]";
String sale_411 = "[411]";
......@@ -49,7 +53,7 @@ public interface PayErrorCode {
String tips_704 = "[704]";
/**
* SaleActionImp onActionComplte
* TipsActionImpl onPosException
*/
String tips_710 = "[710]";
String tips_711 = "[711]";
......@@ -57,4 +61,23 @@ public interface PayErrorCode {
String tips_713 = "[713]";
String tips_714 = "[714]";
/**
* VoidActionImpl getTxnId
*/
String void_801 = "[801]";
String void_802 = "[802]";
String void_803 = "[803]";
String void_804 = "[804]";
/**
* VoidActionImpl onPosException
*/
String void_810 = "[810]";
String void_811 = "[811]";
String void_812 = "[812]";
String void_813 = "[813]";
String void_814 = "[814]";
}
......@@ -14,6 +14,7 @@ public interface PayTypeContract {
* 8:支付寶
* 1001:現金
* 1023:支付寶HK
*
* 1030:N5卡支付
* 1031:N5掃碼支付
*/
......
......@@ -4,7 +4,6 @@ import android.app.Activity;
import android.content.Context;
import com.etps.aca.lib.util.CommandUtil;
import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
......@@ -31,7 +30,7 @@ public abstract class IPosAction {
private final String mLoadingActionText = "中...";
private final String mLoadingActionComplteText = "成功";
private final long mCancelDelayMillis = 1500;
private final long mCancelDelayMillis = 2000;
public IPosAction(Context context, IView iView, PosAction action, boolean showLoading) {
this.mContext = context;
......@@ -44,58 +43,99 @@ public abstract class IPosAction {
}
/**
* 對POS幾發起請求前的業務處理,如將操作記錄添加到後台日誌表,事項表
* 對POS幾發起操作前的業務處理,如將操作記錄添加到後台日誌表,事項表
*/
protected abstract void onRequestBefore();
protected abstract void onBeforeActionPOS();
/**
* 像POS發起請求的方法
* 向POS發起操作的方法
*/
protected void onRequestPOS(String requestJson) {
protected void onActionToPOS(String requestJson) {
CommandUtil.sendRequest(mContext, requestJson);
}
/**
* 對POS幾發起操作前的業務處理异常 如记录事项调用出错
*
* @param e
*/
public void onBeforeActionPosError(Exception e) {
if (mStatusLoadingDialog != null) {
mStatusLoadingDialog.setStatusText(mPosAction.getActionName() + e.getMessage());
mStatusLoadingDialog.cancel();
}
}
/**
* POS回調成功的方法
*
* @param posResponse
*/
public void onActionComplte(Context context, HywebPosResponse posResponse, Activity originalActivity) {
public void onPosSuccess(Context context, HywebPosResponse posResponse, Activity originalActivity) {
if (mStatusLoadingDialog != null) {
mStatusLoadingDialog.setStatusText(mPosAction.getActionName() + mLoadingActionComplteText);
mStatusLoadingDialog.loadSuccess();
}
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(posResponse);
}
}
/**
* POS回調失敗的方法
*
* @param e
* POS回調為null或狀態異常
*/
public void onActionError(Exception e) {
public void onPosException(Exception e) {
if (mStatusLoadingDialog != null) {
mStatusLoadingDialog.setStatusText(e.getMessage());
mStatusLoadingDialog.setStatusText(mPosAction.getCallbackExceptionText() + e.getMessage());
mStatusLoadingDialog.loadFailure();
}
String errorMsg = e.getMessage();
if (errorMsg.contains(PayErrorCode.pos_response_null) || errorMsg.contains(PayErrorCode.pos_response_102)) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosException(null);
}
mOnPosActionListener.onPosException(e);
}
}
/**
* POS回調為null或狀態異常
* POS調起失敗
*/
public void onPosException(HywebPosResponse posResponse) {
public void onPosInvalid(String e) {
if (mStatusLoadingDialog != null) {
mStatusLoadingDialog.setStatusText("回調異常");
mStatusLoadingDialog.setStatusText(mPosAction.getActionName() + e);
mStatusLoadingDialog.loadFailure();
mStatusLoadingDialog.cancel();
}
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosInvalid(e);
}
}
/**
* 更新狀態成功
*
* @param response
*/
public void onUpdateStatusSuccess(HywebPosResponse response) {
if (mStatusLoadingDialog != null) {
mStatusLoadingDialog.setStatusText(mPosAction.getActionName() + PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()));
mStatusLoadingDialog.cancel();
}
if (mOnPosActionListener != null) {
mOnPosActionListener.onUpdateStatusSuccess(response);
}
}
/**
* 更新狀態失败
*
* @param e
*/
public void onUpdateStatusError(Exception e) {
if (mStatusLoadingDialog != null) {
mStatusLoadingDialog.setStatusText(mPosAction.getActionName() + e.getMessage());
mStatusLoadingDialog.cancel();
}
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosException(null);
mOnPosActionListener.onUpdateStatusError(e);
}
}
......
package com.gingersoft.gsa.cloud.pay.pos;
import com.gingersoft.gsa.cloud.common.loadsir.pos.BasePosCallback;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
/**
* @作者: bin
* @創建時間: 2020-12-29 20:15
* @更新時間: 2020-12-29 20:15
* @描述:POS事件回調,需要回調的實現這個接口
* @描述:POS事件回調
*/
public interface OnPosActionListener {
public interface OnPosActionListener<T extends HywebPosResponse> {
/**
* N5回調成功
* @param response
*/
void onPosSuccess(HywebPosResponse response);
void onPosSuccess(T response);
/**
* N6回調狀態異常,需要去重試查詢
* N5回調狀態異常,需要去重試查詢
* @param e
*/
void onPosException(Exception e);
/**
* N5調起失敗
* @param e
*/
void onPosException(HywebPosResponse response);
void onPosInvalid(String e);
/**
* 更新狀態成功
* @param response
*/
void onSuccess(HywebPosResponse response);
void onUpdateStatusSuccess(T response);
/**
* 更新狀態失敗
* @param e
*/
void onError(Throwable e);
void onUpdateStatusError(Throwable e);
}
......@@ -31,12 +31,11 @@ import java.util.List;
*/
public final class PosPay {
public static void sendRequest(IPosAction action) {
CommandActivity.setCommand(new CommandImpl(action));
// if (AppDevice.isHywebPos()) {
if (action != null) {
action.onRequestBefore();
action.onBeforeActionPOS();
}
// } else if (AppDevice.isBBPos()) {
// } else {
......@@ -53,15 +52,14 @@ public final class PosPay {
public static void refund(Context context, IView iView, RefundRequest request, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new RefundActionImpl(context, iView, PosAction.REFUND, request, getTxnIdRequest, onPosActionListener, true));
}
public static void voidO(Context context, IView iView, VoidRequest request, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new VoidActionImpl(context, iView, PosAction.VOID, request, getTxnIdRequest, onPosActionListener, true));
}
public static void retrieval(Context context, IView iView, RetrievalRequest request, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new RetrievalActionImpl(context, iView, PosAction.RETRIEVAL, 111, request, onPosActionListener, false));
public static void retrieval(Context context, IView iView,Long orderId, RetrievalRequest request, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new RetrievalActionImpl(context, iView, PosAction.RETRIEVAL, orderId, request, onPosActionListener, false));
}
}
......@@ -19,7 +19,8 @@ public class BBPosAction extends IPosAction {
}
@Override
protected void onRequestBefore() {
protected void onBeforeActionPOS() {
}
}
......@@ -82,6 +82,26 @@ public class PosMatter implements Parcelable {
}
@Override
public String toString() {
return "PosMatter{" +
"id=" + id +
", payId='" + payId + '\'' +
", refundId='" + refundId + '\'' +
", deviceId='" + deviceId + '\'' +
", orderId=" + orderId +
", businessType=" + businessType +
", status=" + status +
", tableId=" + tableId +
", tableExtId=" + tableExtId +
", payMethodId=" + payMethodId +
", amount=" + amount +
", content='" + content + '\'' +
", linePayType=" + linePayType +
", tipsPrice=" + tipsPrice +
'}';
}
@Override
public int describeContents() {
return 0;
}
......
package com.gingersoft.gsa.cloud.pay.pos.fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
......@@ -15,17 +16,30 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.common.constans.AppConstans;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.BasePosCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosPayStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosRefundStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosSettlementStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosTipsStatusExceptionCallback;
import com.gingersoft.gsa.cloud.common.loadsir.pos.PosVoidStatusExceptionCallback;
import com.gingersoft.gsa.cloud.order.R;
import com.gingersoft.gsa.cloud.order.R2;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
import com.gingersoft.gsa.cloud.pay.widget.StatusLoadingDialog;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.mvp.IView;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.core.LoadService;
import com.kingja.loadsir.core.LoadSir;
import com.kingja.loadsir.core.Transport;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import butterknife.BindView;
......@@ -41,18 +55,12 @@ public class PosActionStatusExceptionFragment extends BaseFragment implements IV
@BindView(R2.id.tv_order_num)
TextView tvOrderNum;
@BindView(R2.id.tv_pay_status)
TextView tvPayStatus;
@BindView(R2.id.pro_pay_status)
ProgressBar proPayStatus;
@BindView(R2.id.tv_loading_text)
TextView tvLoadingText;
@BindView(R2.id.tv_pos_status)
TextView tvPosStatus;
@BindView(R2.id.tv_amount)
TextView tvAmount;
@BindView(R2.id.tv_paymethod)
@BindView(R2.id.tv_pay_method)
TextView tvPaymethod;
@BindView(R2.id.btn_refresh_status)
QMUIAlphaButton btnRefreshStatus;
@BindView(R2.id.btn_back)
QMUIAlphaButton btnBack;
@BindView(R2.id.ll_content)
......@@ -60,9 +68,13 @@ public class PosActionStatusExceptionFragment extends BaseFragment implements IV
@BindView(R2.id.rl_container)
RelativeLayout rlContainer;
private LoadService loadService;
private PosActionStatusExceptionParam mPosStatusExceptionParam;
private TextView tv_order_num, tv_final_prompt, tv_exception, tv_amount, tv_pay_method;
private int retryCount;
public static PosActionStatusExceptionFragment newInstance(PosActionStatusExceptionParam posStatusExceptionParam) {
Bundle args = new Bundle();
PosActionStatusExceptionFragment fragment = new PosActionStatusExceptionFragment();
......@@ -71,10 +83,8 @@ public class PosActionStatusExceptionFragment extends BaseFragment implements IV
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
}
@Override
......@@ -87,64 +97,108 @@ public class PosActionStatusExceptionFragment extends BaseFragment implements IV
Bundle bundle = getArguments();
mPosStatusExceptionParam = bundle.getParcelable("posStatusExceptionParam");
showStatusLoading();
initPage();
initLoadService();
retrievalStatus();
}
private void initLoadService() {
BasePosCallback posCallback = null;
loadService = LoadSir.getDefault().register(rlContainer, new Callback.OnReloadListener() {
@Override
public void onReload(View v) {
if (retryCount == 0) {
tv_final_prompt.setVisibility(View.VISIBLE);
}
//支付状态异常 重试查询
retrievalStatus();
retryCount--;
}
});
switch (mPosStatusExceptionParam.getPosAction()) {
case SALE:
posCallback = new PosPayStatusExceptionCallback();
break;
case REFUND:
posCallback = new PosRefundStatusExceptionCallback();
break;
case VOID:
posCallback = new PosVoidStatusExceptionCallback();
break;
case TIP:
posCallback = new PosTipsStatusExceptionCallback();
break;
case SETTLEMENT:
posCallback = new PosSettlementStatusExceptionCallback();
break;
default:
break;
}
if (posCallback != null) {
loadService.setCallBack(PosTipsStatusExceptionCallback.class, new Transport() {
@Override
public void order(Context context, View rootView) {
tv_order_num = rootView.findViewById(com.gingersoft.gsa.cloud.common.R.id.tv_order_num);
tv_final_prompt = rootView.findViewById(com.gingersoft.gsa.cloud.common.R.id.tv_final_prompt);
tv_exception = rootView.findViewById(com.gingersoft.gsa.cloud.common.R.id.tv_exception);
tv_amount = rootView.findViewById(com.gingersoft.gsa.cloud.common.R.id.tv_amount);
tv_pay_method = rootView.findViewById(com.gingersoft.gsa.cloud.common.R.id.tv_pay_method);
tv_order_num.setText("單號:" + mPosStatusExceptionParam.getOrderId());
tv_amount.setText(AppConstans.CARSH_STR + mPosStatusExceptionParam.getAmount());
tv_pay_method.setText(mPosStatusExceptionParam.getPayMethodName());
}
});
loadService.showCallback(PosTipsStatusExceptionCallback.class);
}
}
private void initPage() {
tvOrderNum.setText("單號:" + mPosStatusExceptionParam.getOrderNum());
tvOrderNum.setText("單號:" + mPosStatusExceptionParam.getOrderId());
tvAmount.setText(AppConstans.CARSH_STR + mPosStatusExceptionParam.getAmount());
tvPaymethod.setText(mPosStatusExceptionParam.getPayMethodName());
}
private void showStatusLoading() {
tvPayStatus.setVisibility(View.INVISIBLE);
proPayStatus.setVisibility(View.VISIBLE);
tvLoadingText.setVisibility(View.VISIBLE);
private void setPosActionStatus(String status) {
Drawable drawable;
if (PayStatusCode.withSuccess(status)) {
drawable = getResources().getDrawable(R.mipmap.pay_status_success);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
} else {
drawable = getResources().getDrawable(R.mipmap.pay_status_exception);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
}
private void hideStatusLoading() {
tvPayStatus.setVisibility(View.VISIBLE);
proPayStatus.setVisibility(View.INVISIBLE);
tvLoadingText.setVisibility(View.INVISIBLE);
tvPosStatus.setCompoundDrawables(null, drawable, null, null);
tvPosStatus.setText(PayStatusCode.getHywebRequestTextByCode(status));
}
private void retrievalStatus() {
RetrievalRequest retrievalRequest = new RetrievalRequest();
retrievalRequest.setTXN_ID(mPosStatusExceptionParam.getTxnId());
PosPay.retrieval(mContext, this, retrievalRequest, new OnPosActionListener() {
PosPay.retrieval(mContext, this, mPosStatusExceptionParam.getOrderId(), retrievalRequest, new OnPosActionListener() {
@Override
public void onPosSuccess(HywebPosResponse response) {
Drawable drawable;
if (PayStatusCode.withSuccess(response.getSTATUS())) {
drawable = getResources().getDrawable(R.mipmap.pay_status_success);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
tvPayStatus.setCompoundDrawables(null, drawable, null, null);
tvPayStatus.setText(PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()));
} else {
drawable = getResources().getDrawable(R.mipmap.pay_status_exception);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
}
tvPayStatus.setCompoundDrawables(null, drawable, null, null);
tvPayStatus.setText(PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()));
hideStatusLoading();
loadService.showSuccess();
setPosActionStatus(response.getSTATUS());
}
@Override
public void onPosException(HywebPosResponse response) {
hideStatusLoading();
public void onPosException(Exception e) {
}
@Override
public void onSuccess(HywebPosResponse response) {
public void onPosInvalid(String e) {
}
@Override
public void onUpdateStatusSuccess(HywebPosResponse response) {
}
@Override
public void onError(Throwable e) {
hideStatusLoading();
public void onUpdateStatusError(Throwable e) {
}
});
}
......@@ -169,22 +223,19 @@ public class PosActionStatusExceptionFragment extends BaseFragment implements IV
// List<BillItem> billItemList = DoshokuOrder.getInstance().getShoppingCart().getBillItemList();
// }
@Override
public void setData(@Nullable Object data) {
}
@OnClick({R2.id.btn_refresh_status, R2.id.btn_back})
@OnClick({R2.id.btn_back})
public void onViewClicked(View view) {
int id = view.getId();
if (id == R.id.btn_back) {
killMyself();
} else if (id == R.id.btn_refresh_status) {
retrievalStatus();
}
}
@Override
public void setData(@Nullable Object data) {
}
@Override
public void showLoading(String message) {
......
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg;
import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest;
import lombok.Data;
/**
......@@ -16,6 +18,11 @@ public class GetTxnIdRequest {
private Integer tableExtId;
private Integer payMethodId;
private Double amount;
private Double tipsPrice;
/**
* 支付信息優惠券id,積分等信息..
*/
private String content;
}
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg;
import lombok.Getter;
import lombok.Setter;
/**
* @作者: bin
* @創建時間: 2020-12-26 16:46
* @更新時間: 2020-12-26 16:46
* @描述:
*/
@Getter
@Setter
public class GetCancelTxnIdResponse {
private String cancelTxnId;
}
......@@ -13,5 +13,5 @@ import lombok.Setter;
@Setter
public class GetRefundIdResponse {
private String refund_id;
private String refundId;
}
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.command;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import com.billy.cc.core.component.CC;
import com.etps.aca.lib.action.ICommand;
import com.etps.aca.lib.activity.CommandActivity;
import com.etps.aca.lib.constant.Constant;
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.utils.ReflectionUtils;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode;
import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
......@@ -22,12 +28,18 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RetrievalResp
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SaleRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SettlementRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.ArmsUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CommandImpl implements ICommand {
private static final String TAG = CommandImpl.class.getSimpleName();
......@@ -50,21 +62,20 @@ public class CommandImpl implements ICommand {
JSONObject msgObj = new JSONObject(request);
String eventName = msgObj.getString(Constant.EVENT.ATTR.EVENT_NAME);
if (Constant.EVENT.NAME.SALE.equals(eventName)) {
startWelcomeActivity();
startInitHywebActivity(context);
} else if (Constant.EVENT.NAME.REFUND.equals(eventName)) {
startWelcomeActivity();
startInitHywebActivity(context);
} else if (Constant.EVENT.NAME.VOID.equals(eventName)) {
startWelcomeActivity();
startInitHywebActivity(context);
} else if (Constant.EVENT.NAME.GOTO.equals(eventName)) {
startWelcomeActivity();
startInitHywebActivity(context);
}
} catch (JSONException e) {
startWelcomeActivity();
startInitHywebActivity(context);
}
}
private void startWelcomeActivity() {
//跳轉啟動頁面
private void startInitHywebActivity(Context context) {
CC.obtainBuilder(ComponentName.COMPONENT_LOGIN)
.setActionName(ComponentAction.Login.OPEN_WELCOME)
.build()
......@@ -82,37 +93,67 @@ public class CommandImpl implements ICommand {
LoganManager.w_code(TAG, "onResponse : " + response);
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
//kill掉hyweb支付頁
appManager.killActivity(CommandActivity.class);
Activity currentActivity = appManager.getTopActivity();
if (TextUtils.isEmpty(response)) {
onActionError(new Exception("回調異常" + PayErrorCode.pos_response_null));
onPosException(new Exception(PayExceptionCode.pos_response_null));
return;
}
try {
JSONObject msgObj = new JSONObject(response);
String eventName = msgObj.getString(Constant.EVENT.ATTR.EVENT_NAME);
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
//kill掉n5頁回到原來的頁面
appManager.killActivity(CommandActivity.class);
Activity currentActivity = null;
if (appManager.getActivityList() != null && appManager.getActivityList().size() > 0) {
currentActivity = appManager.getActivityList().get(appManager.getActivityList().size() - 1);
}
LoganManager.w_code(TAG, "currentActivity : " + currentActivity.getClass().getName());
HywebPosResponse posResponse = parsePosResponse(response, eventName);
if (posResponse != null) {
onActionComplte(context, posResponse, currentActivity);
if (PayStatusCode.withInvalid(posResponse.getSTATUS())) {
//調起POS失敗
onPosInvalid(PayStatusCode.getHywebRequestTextByCode(posResponse.getSTATUS()));
} else {
// onActionError(new Exception("回調異常" + PayErrorCode.pos_response_101));
onActionError(new Exception(PayErrorCode.pos_response_101));
//回調成功
onPosSuccess(context, posResponse, currentActivity);
}
} else {
//回調異常
onPosException(new Exception(PayExceptionCode.pos_response_101));
}
} catch (JSONException e) {
e.printStackTrace();
onActionError(e);
try {
JSONObject msgObj = new JSONObject(response);
String status = msgObj.getString("STATUS");
if (PayStatusCode.withInvalid(status)) {
//調起POS失敗
onPosInvalid(PayStatusCode.getHywebRequestTextByCode(status));
} else {
//回調異常
onPosException(new Exception(PayStatusCode.getHywebRequestTextByCode(status)));
}
} catch (JSONException ex) {
ex.printStackTrace();
//回調異常
onPosException(e);
}
} finally {
returnLastActivity(context, currentActivity);
}
}
/**
* 返回操作頁
* @param context
* @param currentActivity
*/
private void returnLastActivity(Context context, Activity currentActivity) {
if (currentActivity != null) {
LoganManager.w_code(TAG, "currentActivity : " + currentActivity.getClass().getName());
//返回上次操作的頁面
Intent intent = new Intent();
intent.setComponent(currentActivity.getComponentName());
context.startActivity(intent);
}
}
......@@ -147,9 +188,9 @@ public class CommandImpl implements ICommand {
* @param posResponse
* @param actionActivity
*/
private void onActionComplte(Context context, HywebPosResponse posResponse, Activity actionActivity) {
private void onPosSuccess(Context context, HywebPosResponse posResponse, Activity actionActivity) {
if (mPosAction != null) {
mPosAction.onActionComplte(context, posResponse, actionActivity);
mPosAction.onPosSuccess(context, posResponse, actionActivity);
}
}
......@@ -158,9 +199,22 @@ public class CommandImpl implements ICommand {
*
* @param e
*/
private void onActionError(Exception e) {
public void onPosException(Exception e) {
if (mPosAction != null) {
mPosAction.onPosException(e);
}
}
/**
* 調起失敗轉發到具體的實現類
*
* @param e
*/
public void onPosInvalid(String e) {
if (mPosAction != null) {
mPosAction.onActionError(e);
mPosAction.onPosInvalid(e);
}
}
}
......@@ -19,11 +19,13 @@ public class PayStatusCode {
*
*/
/**
* 支付状态
* 以下狀態認為是成功情況
*/
public static final String PAY_STATUS_00 = "00"; //成功 √
public static final String PAY_STATUS_02 = "02"; //微信、支付宝正在处理这笔退款请求(可认为已成功) √
/**
* 以下狀態認為是无效情況
*/
public static final String PAY_STATUS_09 = "09"; //用户取消 √
public static final String PAY_STATUS_10 = "10"; //主持人拒绝 √
public static final String PAY_STATUS_11 = "11"; //用户撤销(应用于仅限微信/支付宝) √
......@@ -32,15 +34,19 @@ public class PayStatusCode {
public static final String PAY_STATUS_90 = "90"; //通讯/格式 错误 √
public static final String PAY_STATUS_91 = "91"; //功能或 付款方式没有 支持的 √
public static final String PAY_STATUS_97 = "97"; //N5 POS忙碌 √
public static final String PAY_STATUS_98 = "98"; //超时 √
/**
* 以下狀態認為是異常情況
*/
public static final String PAY_STATUS_03 = "03"; //确认/处理 (支付、清機 同步接口防止N5機器關機未收到結果) √
public static final String PAY_STATUS_98 = "98"; //超时 √
public static final String PAY_STATUS_99 = "99"; //未知错误 √
/**
* 回調成功
* @param status
* @return
*/
public static boolean withSuccess(String status) {
if (TextUtils.isEmpty(status)) {
return false;
......@@ -52,13 +58,33 @@ public class PayStatusCode {
return false;
}
/**
* 回調異常,比如突然斷網或關機沒有收到回調
* @param status
* @return
*/
public static boolean withException(String status) {
if (status.equals(PAY_STATUS_99) || status.equals(PAY_STATUS_03)) {
if (TextUtils.isEmpty(status)) {
return true;
}
if (status.equals(PAY_STATUS_98) || status.equals(PAY_STATUS_99) || status.equals(PAY_STATUS_03)) {
return true;
}
return false;
}
/**
* 本次操作無效
* @param status
* @return
*/
public static boolean withInvalid(String status){
if(withSuccess(status) || withException(status)){
return false;
}
return true;
}
public static String getHywebRequestTextByCode(String status) {
switch (status) {
case PAY_STATUS_00:
......
......@@ -20,29 +20,13 @@ import me.jessyan.rxerrorhandler.core.RxErrorHandler;
*/
public class PrintActionImpl extends IPosAction {
@Inject
RxErrorHandler mErrorHandler;
public PrintActionImpl(Context context, IView iView, PosAction action, boolean showLoading) {
super(context,iView,action,showLoading);
}
@Override
protected void onRequestBefore() {
}
@Override
public void onRequestPOS(String requestJson) {
super.onRequestPOS(requestJson);
}
@Override
public void onActionComplte(Context context,HywebPosResponse result, Activity originalActivity) {
protected void onBeforeActionPOS() {
}
@Override
public void onActionError(Exception error) {
}
}
......@@ -8,13 +8,14 @@ import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode;
import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetRefundIdResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetTxnIdResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
......@@ -23,11 +24,10 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.IView;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.RxLifecycleUtils;
import com.xuexiang.rxutil2.rxjava.RxSchedulerUtils;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.RequestBody;
......@@ -40,7 +40,7 @@ import okhttp3.RequestBody;
public class RefundActionImpl extends IPosAction {
private GetTxnIdRequest mGetTxnIdRequest;
private GetTxnIdResponse mTxnIdResponse;
private GetRefundIdResponse mGetRefundIdResponse;
private RefundRequest mRefundRequest;
......@@ -52,23 +52,17 @@ public class RefundActionImpl extends IPosAction {
}
@Override
protected void onRequestBefore() {
protected void onBeforeActionPOS() {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(mGetTxnIdRequest));
String json = GsonUtils.GsonString(mGetTxnIdRequest);
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getRefundTxnId", requestBody)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
......@@ -78,23 +72,23 @@ public class RefundActionImpl extends IPosAction {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) {
mTxnIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetTxnIdResponse.class);
mGetRefundIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetRefundIdResponse.class);
if (mRefundRequest != null) {
mRefundRequest.setTXN_ID(mTxnIdResponse.getTxnId());
mRefundRequest.setTXN_ID(mGetRefundIdResponse.getRefundId());
//調起N5退款
onRequestPOS(GsonUtils.GsonString(mRefundRequest));
canCelLoadingDialog();
onActionToPOS(GsonUtils.GsonString(mRefundRequest));
// canCelLoadingDialog();
} else {
onActionError(new Exception(error + PayErrorCode.tips_701));
onBeforeActionPosError(new Exception(error + PayExceptionCode.tips_701));
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_702));
onBeforeActionPosError(new Exception(error + baseResult.getErrMsg()));
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_703));
onBeforeActionPosError(new Exception(error + PayExceptionCode.tips_703));
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_704));
onBeforeActionPosError(new Exception(error + PayExceptionCode.tips_704));
}
}
......@@ -104,9 +98,7 @@ public class RefundActionImpl extends IPosAction {
@Override
public void onError(Throwable t) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onError(new Exception(t.getMessage()));
}
onBeforeActionPosError(new Exception(t.getMessage()));
}
});
}
......@@ -121,25 +113,10 @@ public class RefundActionImpl extends IPosAction {
* @param originalActivity
*/
@Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
onActionError(new Exception("回調異常" + PayErrorCode.pos_response_102));
} else {
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(response);
}
}
public void onPosSuccess(Context context, HywebPosResponse response, Activity originalActivity) {
//1、更新上傳退款狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/add", getPosMatterRequest((RefundRespose) response))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> {
})
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
@Override
......@@ -149,32 +126,28 @@ public class RefundActionImpl extends IPosAction {
@Override
public void onNext(String result) {
showRefundResult(context, response, originalActivity);
displayRefundResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
onUpdateStatusSuccess(response);
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + "["+baseResult.getErrMsg()+"]"));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_413));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.sale_413));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_414));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.sale_414));
}
}
@Override
public void onError(Throwable e) {
showRefundResult(context, response, originalActivity);
if (mOnPosActionListener != null) {
mOnPosActionListener.onError(e);
}
onUpdateStatusError(new Exception(e.getMessage()));
displayRefundResult(context, response, originalActivity);
}
@Override
......@@ -190,17 +163,11 @@ public class RefundActionImpl extends IPosAction {
* @param response
* @param originalActivity
*/
private void showRefundResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withSuccess(response.getSTATUS())) {
//退款成功
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
Activity activity = appManager.getCurrentActivity();
if (activity.getClass().equals(originalActivity.getClass())) {
super.onActionComplte(context, response, originalActivity);
}
private void displayRefundResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
super.onPosException(new Exception(response.getSTATUS()));
} else {
//退款失敗
onActionError(new Exception(mPosAction.getActionName() + PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()) + PayErrorCode.tips_710));
super.onPosSuccess(context,response,originalActivity);
}
}
......
......@@ -9,23 +9,25 @@ import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode;
import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SaleRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SettlementRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
import com.jess.arms.mvp.IView;
import com.jess.arms.utils.RxLifecycleUtils;
import com.xuexiang.rxutil2.rxjava.RxSchedulerUtils;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.RequestBody;
......@@ -38,39 +40,31 @@ import okhttp3.RequestBody;
public class RetrievalActionImpl extends IPosAction {
private RetrievalRequest mRetrievalRequest;
private long mOrderId;
private Long mOrderId;
public RetrievalActionImpl(Context context, IView iView, PosAction action, long orderId,RetrievalRequest request, OnPosActionListener onPosActionListener, boolean showLoading) {
public RetrievalActionImpl(Context context, IView iView, PosAction action, Long orderId,RetrievalRequest request, OnPosActionListener onPosActionListener, boolean showLoading) {
super(context, iView, action, showLoading);
this.mOrderId = mOrderId;
this.mOrderId = orderId;
this.mRetrievalRequest = request;
this.mOnPosActionListener = onPosActionListener;
}
@Override
protected void onRequestBefore() {
protected void onBeforeActionPOS() {
//調起N5狀態查詢
onRequestPOS(GsonUtils.GsonString(mRetrievalRequest));
onActionToPOS(GsonUtils.GsonString(mRetrievalRequest));
}
/**
* 查詢回調成功
* 1、更新上傳狀態
*
* 2、顯示查询結果
* @param context
* @param response
* @param originalActivity
*/
@Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
onActionError(new Exception("回調異常" + PayErrorCode.pos_response_102));
} else {
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(response);
}
}
public void onPosSuccess(Context context, HywebPosResponse response, Activity originalActivity) {
String url = null;
RequestBody requestBody;
......@@ -83,15 +77,21 @@ public class RetrievalActionImpl extends IPosAction {
url = "posPay/updatePosRefund";
requestBody = getPosMatterRefundRequest((RefundRespose) response);
break;
case Constant.EVENT.NAME.VOID_RESP:
requestBody = getPosMatterVoidRequest((VoidRespose) response);
break;
case Constant.EVENT.NAME.ADJUST_RESP:
requestBody = getPosMatterTipsRequest((AdjustTipRespose) response);
break;
case "SETTLE_RESP":
requestBody = getPosMatterSettlementRequest((SettlementRespose) response);
break;
default:
return;
}
//1、更新上傳支付狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + url, requestBody)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
@Override
......@@ -100,38 +100,51 @@ public class RetrievalActionImpl extends IPosAction {
@Override
public void onNext(String result) {
displayRetrievalResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
onUpdateStatusSuccess(response);
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + "["+baseResult.getErrMsg()+"]"));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_413));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.sale_413));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_414));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.sale_414));
}
}
@Override
public void onError(Throwable e) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onError(e);
}
displayRetrievalResult(context, response, originalActivity);
}
@Override
public void onComplete() {
}
});
}
/**
* 2、顯示查询結果
*
* @param context
* @param response
* @param originalActivity
*/
private void displayRetrievalResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
super.onPosException(new Exception(response.getSTATUS()));
} else {
super.onPosSuccess(context,response,originalActivity);
}
}
private RequestBody getPosMatterSaleRequest(SaleRespose response) {
PosMatter posMatter = new PosMatter();
......@@ -148,10 +161,27 @@ public class RetrievalActionImpl extends IPosAction {
}
private RequestBody getPosMatterRefundRequest(RefundRespose response) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(response));
String json = GsonUtils.GsonString(response);
return requestBody;
}
private RequestBody getPosMatterVoidRequest(VoidRespose response) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(response));
String json = GsonUtils.GsonString(response);
return requestBody;
}
private RequestBody getPosMatterTipsRequest(AdjustTipRespose response) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(response));
String json = GsonUtils.GsonString(response);
return requestBody;
}
private RequestBody getPosMatterSettlementRequest(SettlementRespose response) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(response));
String json = GsonUtils.GsonString(response);
return requestBody;
}
......
......@@ -16,7 +16,7 @@ import com.gingersoft.gsa.cloud.order.bean.event.MealPayResultParam;
import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode;
import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
......@@ -29,13 +29,15 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
import com.gingersoft.gsa.cloud.pay.widget.StatusLoadingDialog;
import com.jess.arms.mvp.IView;
import com.jess.arms.utils.RxLifecycleUtils;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import com.xuexiang.rxutil2.rxjava.RxSchedulerUtils;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.functions.Consumer;
import okhttp3.MediaType;
import okhttp3.RequestBody;
......@@ -78,25 +80,17 @@ public class SaleActionImpl extends IPosAction {
}
});
}
}
@Override
protected void onRequestBefore() {
protected void onBeforeActionPOS() {
mTxnIdRequest.setContent(mMealOrderPayRequest.toString());
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(mTxnIdRequest));
String json = GsonUtils.GsonString(mTxnIdRequest);
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getTxnId", requestBody)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> {
})
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
......@@ -115,19 +109,19 @@ public class SaleActionImpl extends IPosAction {
if (mSaleRequest != null) {
mSaleRequest.setTXN_ID(mTxnIdResponse.getTxnId());
//調起N5支付 936E4F01A0A5473C971503433F78027E
onRequestPOS(GsonUtils.GsonString(mSaleRequest));
canCelLoadingDialog();
onActionToPOS(GsonUtils.GsonString(mSaleRequest));
// canCelLoadingDialog();
} else {
onActionError(new Exception(error + PayErrorCode.sale_401));
onBeforeActionPosError(new Exception(error + PayExceptionCode.sale_401));
}
} else {
onActionError(new Exception(error + PayErrorCode.sale_402));
onBeforeActionPosError(new Exception(error + baseResult.getErrMsg()));
}
} else {
onActionError(new Exception(error + PayErrorCode.sale_403));
onBeforeActionPosError(new Exception(error + PayExceptionCode.sale_403));
}
} else {
onActionError(new Exception(error + PayErrorCode.sale_404));
onBeforeActionPosError(new Exception(error + PayExceptionCode.sale_404));
}
}
......@@ -137,7 +131,7 @@ public class SaleActionImpl extends IPosAction {
@Override
public void onError(Throwable t) {
onActionError(new Exception(t.getMessage()));
onBeforeActionPosError(new Exception(t.getMessage()));
}
});
}
......@@ -153,25 +147,10 @@ public class SaleActionImpl extends IPosAction {
* @param originalActivity 原來跳轉到pos的支付頁
*/
@Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
onActionError(new Exception("回調異常" + PayErrorCode.pos_response_102));
} else {
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(response);
}
}
public void onPosSuccess(Context context, HywebPosResponse response, Activity originalActivity) {
//1、更新上傳支付狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/add", getPosMatterRequest((SaleRespose) response))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> {
})
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
@Override
......@@ -181,31 +160,29 @@ public class SaleActionImpl extends IPosAction {
@Override
public void onNext(String result) {
showPayResult(context, response, originalActivity);
displayPaymentResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
startPayResultActivity(context, response);
onUpdateStatusSuccess(response);
startPaymentDetailActivity(context, response);
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText()+ "["+baseResult.getErrMsg()+"]"));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_413));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.sale_413));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_414));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.sale_414));
}
}
@Override
public void onError(Throwable e) {
showPayResult(context, response, originalActivity);
startPayResultActivity(context, response);
displayPaymentResult(context, response, originalActivity);
startPaymentDetailActivity(context, response);
}
@Override
......@@ -214,6 +191,7 @@ public class SaleActionImpl extends IPosAction {
});
}
/**
* 2、顯示支付結果
*
......@@ -221,8 +199,12 @@ public class SaleActionImpl extends IPosAction {
* @param response
* @param originalActivity
*/
private void showPayResult(Context context, HywebPosResponse response, Activity originalActivity) {
super.onActionComplte(context, response, originalActivity);
private void displayPaymentResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
super.onPosException(new Exception(response.getSTATUS()));
} else {
super.onPosSuccess(context, response, originalActivity);
}
}
/**
......@@ -230,8 +212,7 @@ public class SaleActionImpl extends IPosAction {
*
* @param response
*/
private void startPayResultActivity(Context context, HywebPosResponse response) {
private void startPaymentDetailActivity(Context context, HywebPosResponse response) {
MealPayResultParam payResultParam = new MealPayResultParam();
payResultParam.setTxnId(mTxnIdResponse.getTxnId());
payResultParam.setTableBean(mTableBean);
......@@ -240,18 +221,24 @@ public class SaleActionImpl extends IPosAction {
payResultParam.setPayMethodList(mPayMethodList);
payResultParam.setSaleRespose((SaleRespose) response);
//等待Dialog動畫加載完再跳轉支付結果頁面
RxJavaUtils.delay(2, TimeUnit.SECONDS)
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
//kill orderPayActivity,orderContentActivity,mealActivity
CC.obtainBuilder(ComponentName.COMPONENT_TABLE)
.setActionName(ComponentAction.Table.KILL_MEAL_ORDER_PAY)
.build()
.call();
CC.obtainBuilder(ComponentName.COMPONENT_PAY)
.setActionName(ComponentAction.Pay.OPEN_PAY_RESULT)
.addParam("payResultParam", payResultParam)
.build()
.call();
}
});
}
private RequestBody getPosMatterRequest(SaleRespose response) {
......@@ -268,10 +255,5 @@ public class SaleActionImpl extends IPosAction {
return requestBody;
}
@Override
public void onActionError(Exception error) {
super.onActionError(error);
}
}
......@@ -9,6 +9,8 @@ import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.jess.arms.mvp.IView;
import com.jess.arms.utils.RxLifecycleUtils;
import com.xuexiang.rxutil2.rxjava.RxSchedulerUtils;
import javax.inject.Inject;
......@@ -25,44 +27,18 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
*/
public class SettlementActionImpl extends IPosAction {
@Inject
RxErrorHandler mErrorHandler;
public SettlementActionImpl(Context context, IView iView, PosAction action, boolean showLoading) {
super(context,iView,action,showLoading);
}
@Override
protected void onRequestBefore() {
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getRefundTxnId", null)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new ErrorHandleSubscriber<String>(mErrorHandler) {
@Override
public void onNext(String s) {
}
});
protected void onBeforeActionPOS() {
}
@Override
public void onRequestPOS(String requestJson) {
super.onRequestPOS(requestJson);
}
@Override
public void onActionComplte(Context context,HywebPosResponse result, Activity actionActivity) {
public void onPosSuccess(Context context,HywebPosResponse result, Activity actionActivity) {
}
@Override
public void onActionError(Exception error) {
}
}
......@@ -8,7 +8,7 @@ import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode;
import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
......@@ -23,11 +23,10 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.IView;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.RxLifecycleUtils;
import com.xuexiang.rxutil2.rxjava.RxSchedulerUtils;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.RequestBody;
......@@ -45,8 +44,6 @@ public class TipsActionImpl extends IPosAction {
private GetTxnIdRequest mTxnIdRequest;
private GetTipTxnIdResponse mTxnIdResponse;
private OnPosActionListener mOnPosActionListener;
public TipsActionImpl(Context context, IView iView, PosAction action, GetTxnIdRequest txnIdRequest, AdjustTipRequest adjustTipRequest, OnPosActionListener onPosActionListener, boolean showLoading) {
super(context, iView, action, showLoading);
this.mTxnIdRequest = txnIdRequest;
......@@ -55,19 +52,14 @@ public class TipsActionImpl extends IPosAction {
}
@Override
protected void onRequestBefore() {
protected void onBeforeActionPOS() {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(mTxnIdRequest));
String json = GsonUtils.GsonString(mTxnIdRequest);
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getTipTxnId", requestBody)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
@Override
......@@ -85,23 +77,23 @@ public class TipsActionImpl extends IPosAction {
if (mAdjustTipRequest != null) {
mAdjustTipRequest.setTXN_ID(mTxnIdResponse.getTipTxnId());
//調起N5補小費
onRequestPOS(GsonUtils.GsonString(mAdjustTipRequest));
canCelLoadingDialog();
onActionToPOS(GsonUtils.GsonString(mAdjustTipRequest));
// canCelLoadingDialog();
} else {
onActionError(new Exception(error + PayErrorCode.tips_701));
onBeforeActionPosError(new Exception(error + baseResult.getErrMsg()));
}
} else {
if (!TextUtils.isEmpty(baseResult.getErrMsg())) {
onActionError(new Exception(baseResult.getErrMsg()));
onBeforeActionPosError(new Exception(baseResult.getErrMsg()));
} else {
onActionError(new Exception(error + PayErrorCode.tips_702));
onBeforeActionPosError(new Exception(error + PayExceptionCode.tips_702));
}
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_703));
onBeforeActionPosError(new Exception(error + PayExceptionCode.tips_703));
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_704));
onBeforeActionPosError(new Exception(error + PayExceptionCode.tips_704));
}
}
......@@ -111,7 +103,7 @@ public class TipsActionImpl extends IPosAction {
@Override
public void onError(Throwable t) {
onActionError(new Exception(t.getMessage()));
onBeforeActionPosError(new Exception(t.getMessage()));
}
});
}
......@@ -127,27 +119,10 @@ public class TipsActionImpl extends IPosAction {
* @param originalActivity
*/
@Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
onActionError(new Exception("回調異常" + PayErrorCode.pos_response_102));
} else {
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(response);
}
}
public void onPosSuccess(Context context, HywebPosResponse response, Activity originalActivity) {
//1、更新上傳小費狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/updatePosTip", getPosMatterRequest((AdjustTipRespose) response))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> {
})
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/updatePosTip", getPosMatterRequest((AdjustTipRespose) response))
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
......@@ -158,32 +133,28 @@ public class TipsActionImpl extends IPosAction {
@Override
public void onNext(String result) {
showTipsResult(context, response, originalActivity);
displayTipsResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
if (baseResult.isSuccess()) {
onUpdateStatusSuccess(response);
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_711));
// onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.tips_711));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + "["+baseResult.getErrMsg()+"]"));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_712));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.tips_712));
}
} else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_713));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.tips_713));
}
}
@Override
public void onError(Throwable e) {
showTipsResult(context, response, originalActivity);
if (mOnPosActionListener != null) {
mOnPosActionListener.onError(e);
}
displayTipsResult(context, response, originalActivity);
}
@Override
......@@ -199,17 +170,11 @@ public class TipsActionImpl extends IPosAction {
* @param response
* @param originalActivity
*/
private void showTipsResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withSuccess(response.getSTATUS())) {
//補小費成功
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
Activity activity = appManager.getCurrentActivity();
if (activity.getClass().equals(originalActivity.getClass())) {
super.onActionComplte(context, response, originalActivity);
}
private void displayTipsResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
super.onPosException(new Exception(response.getSTATUS()));
} else {
//補小費失敗
onActionError(new Exception(mPosAction.getActionName() + PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()) + PayErrorCode.tips_710));
super.onPosSuccess(context,response,originalActivity);
}
}
......@@ -217,8 +182,8 @@ public class TipsActionImpl extends IPosAction {
PosMatter posMatter = new PosMatter();
posMatter.setOrderId(mTxnIdRequest.getOrderId());
posMatter.setTipsPrice(mTxnIdRequest.getTipsPrice());
posMatter.setPayId(response.getTXN_ID());
posMatter.setTipsPrice(response.getTIPS());
// posMatter.setPayId(response.getTXN_ID());
posMatter.setContent(GsonUtils.GsonString(response));
posMatter.setStatus(getPosMatterStatus(response.getSTATUS()));
......
......@@ -8,13 +8,14 @@ import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode;
import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetCancelTxnIdResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetTxnIdResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
......@@ -23,11 +24,10 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.IView;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.RxLifecycleUtils;
import com.xuexiang.rxutil2.rxjava.RxSchedulerUtils;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.RequestBody;
......@@ -42,9 +42,7 @@ public class VoidActionImpl extends IPosAction {
private VoidRequest mVoidRequest;
private GetTxnIdRequest mTxnIdRequest;
private GetTxnIdResponse mTxnIdResponse;
private OnPosActionListener mOnPosActionListener;
private GetCancelTxnIdResponse mTxnIdResponse;
public VoidActionImpl(Context context, IView iView, PosAction action, VoidRequest voidRequest, GetTxnIdRequest txnIdRequest, OnPosActionListener onPosActionListener, boolean showLoading) {
super(context, iView, action, showLoading);
......@@ -54,19 +52,14 @@ public class VoidActionImpl extends IPosAction {
}
@Override
protected void onRequestBefore() {
protected void onBeforeActionPOS() {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(mTxnIdRequest));
String json = GsonUtils.GsonString(mTxnIdRequest);
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getCancelTxnId", requestBody)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
......@@ -79,23 +72,23 @@ public class VoidActionImpl extends IPosAction {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) {
mTxnIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetTxnIdResponse.class);
mTxnIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetCancelTxnIdResponse.class);
if (mVoidRequest != null) {
mVoidRequest.setTXN_ID(mTxnIdResponse.getTxnId());
mVoidRequest.setTXN_ID(mTxnIdResponse.getCancelTxnId());
//調起N5取消訂單
onRequestPOS(GsonUtils.GsonString(mVoidRequest));
canCelLoadingDialog();
onActionToPOS(GsonUtils.GsonString(mVoidRequest));
// canCelLoadingDialog();
} else {
onActionError(new Exception(error + PayErrorCode.tips_701));
onBeforeActionPosError(new Exception(error + PayExceptionCode.void_801));
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_702));
onBeforeActionPosError(new Exception(error + baseResult.getErrMsg()));
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_703));
onBeforeActionPosError(new Exception(error + PayExceptionCode.void_803));
}
} else {
onActionError(new Exception(error + PayErrorCode.tips_704));
onBeforeActionPosError(new Exception(error + PayExceptionCode.void_804));
}
}
......@@ -105,7 +98,7 @@ public class VoidActionImpl extends IPosAction {
@Override
public void onError(Throwable t) {
onActionError(new Exception(t.getMessage()));
onBeforeActionPosError(new Exception(t.getMessage()));
}
});
}
......@@ -123,27 +116,10 @@ public class VoidActionImpl extends IPosAction {
* @param originalActivity
*/
@Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
onActionError(new Exception("回調異常" + PayErrorCode.pos_response_102));
} else {
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(response);
}
}
public void onPosSuccess(Context context, HywebPosResponse response, Activity originalActivity) {
//1、更新上傳取消狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/updatePosCancel", getPosMatterRequest((VoidRespose) response))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> {
})
.compose(RxSchedulerUtils._io_main_o())
.compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() {
@Override
......@@ -153,61 +129,47 @@ public class VoidActionImpl extends IPosAction {
@Override
public void onNext(String result) {
showVoidResult(context, response, originalActivity);
displayVoidResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
onUpdateStatusSuccess(response);
} else {
// onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_711));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + baseResult.getErrMsg()));
}
} else {
// onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_712));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.void_811));
}
} else {
// onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_713));
onUpdateStatusError(new Exception(mPosAction.getCallbackExceptionText() + PayExceptionCode.void_812));
}
}
@Override
public void onError(Throwable e) {
showVoidResult(context, response, originalActivity);
if (mOnPosActionListener != null) {
mOnPosActionListener.onError(e);
}
displayVoidResult(context, response, originalActivity);
}
@Override
public void onComplete() {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
}
});
}
/**
* 2、顯示小費結果
* 2、顯示取消結果
*
* @param context
* @param response
* @param originalActivity
*/
private void showVoidResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withSuccess(response.getSTATUS())) {
//補小費成功
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
Activity activity = appManager.getCurrentActivity();
if (activity.getClass().equals(originalActivity.getClass())) {
super.onActionComplte(context, response, originalActivity);
}
private void displayVoidResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (PayStatusCode.withException(response.getSTATUS())) {
super.onPosException(new Exception(response.getSTATUS()));
} else {
//補小費失敗
onActionError(new Exception(mPosAction.getActionName() + PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()) + PayErrorCode.tips_710));
super.onPosSuccess(context,response,originalActivity);
}
}
......
package com.gingersoft.gsa.cloud.pay.util;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.contract.PayTypeContract;
import java.util.ArrayList;
import java.util.List;
......@@ -14,7 +15,7 @@ import java.util.List;
public class PayMethodUtils {
public static List<PayMethod> filterPaymentsMethodById(List<PayMethod> payMethods, int... types) {
public static List<PayMethod> filterPaymentsMethodById(List<PayMethod> payMethods, int[] types) {
List<PayMethod> payMethodList = new ArrayList<>();
if (payMethods != null && payMethods.size() > 0 && types.length > 0) {
for (int type : types) {
......@@ -38,4 +39,31 @@ public class PayMethodUtils {
}
return null;
}
/**
* 存在hyweb支付方式
*
* @param payMethods
* @return
*/
public static int hasHywebPayMethod(List<PayMethod> payMethods) {
if (payMethods != null && payMethods.size() > 0) {
int[] payTypes = {PayTypeContract.PAY_METHOD_ID_1030, PayTypeContract.PAY_METHOD_ID_1031};
for (int i = 0; i < payMethods.size(); i++) {
PayMethod payMethod = payMethods.get(i);
if (payMethod.getPayType() == payTypes[0] || payMethod.getPayType() == payTypes[1]) {
return i;
}
}
}
return -1;
}
public static boolean hasHywebPayMethod(PayMethod payMethod) {
int[] payTypes = {PayTypeContract.PAY_METHOD_ID_1030, PayTypeContract.PAY_METHOD_ID_1031};
if (payMethod.getPayType() == payTypes[0] || payMethod.getPayType() == payTypes[1]) {
return true;
}
return false;
}
}
......@@ -22,7 +22,14 @@ public class StatusLoadingDialog {
private TextView tv_status;
private long mCancelDelayMillis = 1500;
private String mLoadingText;
private String mLoadingText= "支付中...";
public StatusLoadingDialog(Context context, String loadingText) {
this.mContext = context;
this.mLoadingText = loadingText;
initView();
}
public StatusLoadingDialog(Context context, String loadingText, long cancelDelayMillis) {
this.mContext = context;
......@@ -43,39 +50,33 @@ public class StatusLoadingDialog {
dialog.setContentView(view);
dialog.setCancelable(false);
tv_status.setText(mLoadingText);
ll_container.setLayoutParams(new FrameLayout.LayoutParams((int) (ArmsUtils.getScreenWidth(mContext) * 0.4), (int) (ArmsUtils.getScreenWidth(mContext) * 0.4)));
}
public void loadLoading() {
as_status.loadLoading();
}
public void loadSuccess() {
as_status.loadSuccess();
as_status.postDelayed(new Runnable() {
@Override
public void run() {
if (mOnClickListener != null) {
mOnClickListener.loadSuccessEnd();
}
cancel();
}
}, mCancelDelayMillis);
}
public void loadFailure() {
as_status.loadFailure();
}
public void cancel() {
clearLoadingAnim();
if (dialog != null && dialog.isShowing()) {
as_status.postDelayed(new Runnable() {
@Override
public void run() {
if (mOnClickListener != null) {
mOnClickListener.loadFailureEnd();
}
cancel();
dialog.cancel();
}
}, mCancelDelayMillis);
}
}
public void setStatusText(String text) {
tv_status.setText(text);
......@@ -94,18 +95,6 @@ public class StatusLoadingDialog {
loadLoading();
}
public void cancel() {
clearLoadingAnim();
if (dialog != null && dialog.isShowing()) {
as_status.postDelayed(new Runnable() {
@Override
public void run() {
dialog.cancel();
}
}, mCancelDelayMillis);
}
}
private OnLoadStautsListener mOnClickListener;
public void setOnLoadStautsListener(OnLoadStautsListener onClickListener) {
......
......@@ -7,7 +7,6 @@
android:background="@color/theme_white_color"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
......@@ -17,47 +16,26 @@
<TextView
android:id="@+id/tv_order_num"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:gravity="center"
android:text="單號:123571416"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal3" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_50">
android:textSize="@dimen/font_normal3"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_pay_status"
android:id="@+id/tv_pos_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="@dimen/dp_50"
android:drawableTop="@mipmap/pay_status_success"
android:drawablePadding="@dimen/dp_6"
android:drawableTop="@mipmap/pay_status_exception"
android:text="支付失敗"
android:textSize="@dimen/font_normal2"
android:textColor="@color/theme_black"/>
<ProgressBar
android:id="@+id/pro_pay_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:theme="@style/AppTheme"
android:visibility="invisible" />
<TextView
android:id="@+id/tv_loading_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="支付成功"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal"
android:text="@string/loading"
android:visibility="invisible"
android:layout_gravity="center_horizontal|bottom"/>
</FrameLayout>
android:textSize="@dimen/font_normal2"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_amount"
......@@ -66,40 +44,31 @@
android:layout_marginTop="@dimen/dp_10"
android:text="$500"
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_32" />
android:textSize="@dimen/sp_32"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_paymethod"
android:id="@+id/tv_pay_method"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_20"
android:gravity="center"
android:text="微信,支付寶"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:text="微信,支付寶"/>
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_refresh_status"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:layout_marginTop="@dimen/dp_50"
android:background="@color/theme_color"
android:text="刷新"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2"
app:cornerRadius="@dimen/dp_6" />
android:textSize="@dimen/font_normal3" />
</LinearLayout>
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_back"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_40"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_margin="@dimen/dp_20"
android:gravity="center"
android:layout_marginTop="@dimen/dp_20"
android:background="@color/theme_grey_color"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@drawable/shape_app_btn"
android:text="返回"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2"
app:cornerRadius="@dimen/dp_6" />
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
......@@ -19,6 +19,8 @@ package com.gingersoft.gsa.cloud.print;
import android.bluetooth.BluetoothDevice;
import android.os.AsyncTask;
import com.elvishew.xlog.XLog;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import java.util.List;
......@@ -28,6 +30,7 @@ import java.util.List;
* Created by Alex on 2016/11/10.
*/
public class PrintExecutor {
protected final String TAG = this.getClass().getSimpleName();
private PrintSocketHolder holder;
private int mReconnectTimes = 0;
private int time = 0;
......@@ -62,23 +65,31 @@ public class PrintExecutor {
prjIds = maker.getPrjIds();
if (!holder.isSocketPrepared()) {
int prepare = holder.prepareSocket();
if (prepare != PrintSocketHolder.ERROR_0)
if (prepare != PrintSocketHolder.ERROR_0) {
return prepare;
}
}
LoganManager.w_printer(TAG,"PrintTask doRequest holder.sendData(data) ------------------------------->");
return holder.sendData(data);
} else {
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
List<byte[]> data = maker.getPrintData();
prjIds = maker.getPrjIds();
if (holder.isSocketPrepared()) {
if (sendData(data))
LoganManager.w_printer(TAG,"PrintTask doRequest sendData(data) --------------连接打印机完成----------------->");
if (sendData(data)) {
LoganManager.w_printer(TAG,"PrintTask doRequest sendData(data) -------------打印成功------------------>");
return PrintSocketHolder.ERROR_0;
else
} else {
LoganManager.w_printer(TAG,"PrintTask doRequest sendData(data) -------------打印失败------------------>");
return PrintSocketHolder.ERROR_100;
}
} else {
if (prepareSocket() && sendData(data)) {
LoganManager.w_printer(TAG,"PrintTask doRequest sendData(data) -------------打印成功------------------>");
return PrintSocketHolder.ERROR_0;
} else {
LoganManager.w_printer(TAG,"PrintTask doRequest sendData(data) -------------打印失败------------------>");
return PrintSocketHolder.ERROR_100;
}
}
......@@ -97,8 +108,9 @@ public class PrintExecutor {
private boolean prepareSocket() {
time++;
return time < mReconnectTimes &&
boolean prepareSocket = time < mReconnectTimes &&
(holder.prepareSocket() == PrintSocketHolder.ERROR_0 || prepareSocket());
return prepareSocket;
}
private boolean sendData(List<byte[]> data) {
......@@ -188,28 +200,35 @@ public class PrintExecutor {
@Override
protected void onPreExecute() {
super.onPreExecute();
LoganManager.w_printer(TAG,"PrintTask onPreExecute");
holder.setOnStateChangedListener(this);
}
@Override
protected Integer doInBackground(PrintDataMaker... makers) {
if (makers == null || makers.length < 1)
LoganManager.w_printer(TAG,"PrintTask doInBackground makers.length:" + makers.length);
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)
LoganManager.w_printer(TAG,"PrintTask onProgressUpdate values:" + values);
if (values == null || values.length < 1) {
return;
if (listener != null)
}
if (listener != null) {
listener.onStateChanged(values[0], holder.getPrinterDeviceBean());
}
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
LoganManager.w_printer(TAG,"PrintTask onPostExecute values:" + integer);
if (integer != null) {
onResult(integer);
}
......@@ -222,6 +241,7 @@ public class PrintExecutor {
*/
private void onResult(int errorCode) {
try {
LoganManager.w_printer(TAG,"PrintTask onResult errorCode:" + errorCode);
if (mListener != null)
mListener.onResult(errorCode, holder.getPrinterDeviceBean());
if (onPrjPrintResultListener != null) {
......@@ -229,11 +249,13 @@ public class PrintExecutor {
}
} catch (Exception e) {
e.printStackTrace();
LoganManager.w_printer(TAG,"PrintTask onResult Exception:" + e.getMessage());
}
}
@Override
public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
LoganManager.w_printer(TAG,"PrintTaskonStateChanged state: " + state);
publishProgress(state);
}
}
......
......@@ -19,7 +19,9 @@ package com.gingersoft.gsa.cloud.print;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import com.elvishew.xlog.XLog;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import java.io.IOException;
......@@ -36,6 +38,9 @@ import java.util.UUID;
*/
@SuppressWarnings({"WeakerAccess", "unused"})
public class PrintSocketHolder {
protected final String TAG = this.getClass().getSimpleName();
public static final int STATE_0 = 10;// 生成测试页面数据
public static final int STATE_1 = 1;// 创建Socket连接
public static final int STATE_2 = 2;// 获取输出流
......@@ -113,6 +118,7 @@ public class PrintSocketHolder {
public int sendData(List<byte[]> data) {
onPrinterStateChanged(STATE_3);
LoganManager.w_printer(TAG,"PrintSocketHolder sendData ----------准备往打印机写入数据-------->");
if (data == null || data.size() <= 0)
return ERROR_0;
for (byte[] item : data) {
......@@ -120,6 +126,7 @@ public class PrintSocketHolder {
out.write(item);
out.flush();
} catch (IOException e) {
LoganManager.w_printer(TAG,"PrintSocketHolder sendData !!!!!!!!打印异常!!!!!!!! IOException: " + e.getMessage());
closeSocket();
return ERROR_4;
}
......@@ -155,16 +162,21 @@ public class PrintSocketHolder {
}
public int prepareSocket() {
LoganManager.w_printer(TAG,"PrintTask doRequest sendData(data) --------------准备尝试连接打印机----------------->");
int create = createSocket();
if (create != PrintSocketHolder.ERROR_0)
if (create != PrintSocketHolder.ERROR_0) {
return create;
return getOutputStream();
}
int result = getOutputStream();
LoganManager.w_printer(TAG,"PrintSocketHolder prepareSocket--------------连接打印机结果----------------->" + (result == ERROR_0 ? "成功" : "失败"));
return result;
}
/**
* 销毁
*/
public int closeSocket() {
LoganManager.w_printer(TAG,"PrintSocketHolder closeSocket ----------关闭打印机连接-------->");
onPrinterStateChanged(STATE_4);
boolean error = false;
try {
......@@ -173,6 +185,7 @@ public class PrintSocketHolder {
out = null;
}
} catch (IOException e) {
LoganManager.w_printer(TAG,"PrintSocketHolder closeSocket out----------关闭打印机连接异常-------->");
out = null;
error = true;
}
......@@ -182,6 +195,7 @@ public class PrintSocketHolder {
socket = null;
}
} catch (IOException e) {
LoganManager.w_printer(TAG,"PrintSocketHolder closeSocket socket----------关闭打印机连接异常-------->");
socket = null;
error = true;
}
......@@ -191,6 +205,7 @@ public class PrintSocketHolder {
bluetoothSocket = null;
}
} catch (IOException e) {
LoganManager.w_printer(TAG,"PrintSocketHolder closeSocket bluetoothSocket----------关闭打印机连接异常-------->");
bluetoothSocket = null;
error = true;
}
......
......@@ -3,6 +3,7 @@ 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;
......@@ -12,6 +13,8 @@ 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;
......@@ -30,6 +33,7 @@ public class PrintUtil {
* @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();
......@@ -77,9 +81,11 @@ public class PrintUtil {
private boolean sendData(List<byte[]> data) {
if (holder.sendData(data) == PrintSocketHolder.ERROR_0) {
LoganManager.w_printer(TAG,"PrintTask sendData(List<byte[]> data) -------------打印完成------------------>");
time = 0;
return true;
} else {
LoganManager.w_printer(TAG,"PrintTask sendData(List<byte[]> data) -------------递归打印------------------>");
return prepareSocket() && sendData(data);
}
}
......
......@@ -17,6 +17,7 @@ import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.common.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.util.PayMethodUtils;
import com.gingersoft.gsa.cloud.ui.R;
import com.gingersoft.gsa.cloud.ui.adapter.BillMethodAdapter;
import com.gingersoft.gsa.cloud.ui.adapter.BillMoneyAdapter;
......@@ -146,11 +147,6 @@ public class OrderPayView extends LinearLayout {
return;
}
if (mBillMoneyList.size() == MAX_COUNT_PAY_MEMBER) {
//替换掉第一个
mBillMoneyList.remove(0);
}
boolean useFreeServicePayMethod = isUseFreeServicePayMethod(method);
if (useFreeServicePayMethod) {
//有使用免服務費支付方式 重新獲取一遍尚欠金額
......@@ -183,9 +179,21 @@ public class OrderPayView extends LinearLayout {
}
}
}
if (mBillMoneyList.size() > 0 && PayMethodUtils.hasHywebPayMethod(method)) {
int hywebPayMethodIndex = PayMethodUtils.hasHywebPayMethod(mBillMoneyList);
if (hywebPayMethodIndex != -1) {
//只允許存在一個hyweb支付
mBillMoneyList.remove(hywebPayMethodIndex);
}
}
//添加選中支付方式
if (mBillMoneyList.size() >= MAX_COUNT_PAY_MEMBER) {
//替换掉第一个
mBillMoneyList.remove(0);
mBillMoneyList.add(method);
} else {
mBillMoneyList.add(method);
}
int notifyPosition = mBillMoneyList.size() - 1;
mBillMoneyAdapter.setSelect_position(notifyPosition);
......
......@@ -15,6 +15,7 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.ui.R;
/**
......@@ -44,8 +45,13 @@ public class SearchKeyBoardView extends FrameLayout {
}
private void init(Context context) {
for (int i = 0; i < 26; i++) {
en[i] = ((char) (65 + i)) + "";//输出A-Z 26个大写字母
// for (int i = 0; i < 26; i++) {
// en[i] = ((char) (65 + i)) + "";//输出A-Z 26个大写字母
// }
String PluNumberChar = GsaCloudApplication.functionConfiguration.getPluNumberCharVaule();
String[] en = new String[PluNumberChar.length()];
for (int i = 0; i < PluNumberChar.length(); i++) {
en[i] = PluNumberChar.charAt(i) + "";//输出A-Z 26个大写字母
}
View view = LayoutInflater.from(context).inflate(R.layout.ui_layout_search_keyborder, null);
......
......@@ -37,4 +37,6 @@ public class NoScrollRecyclerView extends RecyclerView {
int expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
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