Commit f85dede9 by 宁斌

1、yedpay事項查詢調整

parent b08655a8
......@@ -7,7 +7,7 @@ import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.PaymentControl;
import com.gingersoft.gsa.cloud.pay.PaymentCommand;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.ResultCallback;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
......@@ -111,7 +111,7 @@ public class CancelOrder implements Strategy<OrderManagerResponse> {
}
@Override
public void externalPayment() {
public void fakePayment() {
if (cancelListener != null) {
cancelListener.cancel(datasBean.getId());
}
......@@ -123,7 +123,7 @@ public class CancelOrder implements Strategy<OrderManagerResponse> {
}
})
.build();
PaymentControl.newInstance().showPayFlowFragment(mActivity, build);
PaymentCommand.newInstance().action(mActivity.getSupportFragmentManager(), build);
// PosPay.builder()
// .context(GsaCloudApplication.getAppContext())
......
......@@ -1416,6 +1416,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
RequestBody requestBody = new FormBody.Builder()
.add("orderId", String.valueOf(mDoshokuOrder.getOrderId()))
.add("person", String.valueOf(peopleNumber))
.add("scanId", String.valueOf(mDoshokuOrder.getOpenTableInfo().getScanId()))
.build();
mModel.updateOrder(requestBody)
.doOnSubscribe(disposable -> mRootView.showLoading(null))
......
......@@ -1432,6 +1432,7 @@ public abstract class BaseOrderPresenter2<M extends BaseOrderContract.Model, V e
RequestBody requestBody = new FormBody.Builder()
.add("orderId", String.valueOf(mDoshokuOrder.getOrderId()))
.add("person", String.valueOf(peopleNumber))
.add("scanId", String.valueOf(mDoshokuOrder.getOpenTableInfo().getScanId()))
.build();
mModel.updateOrder(requestBody)
.doOnSubscribe(disposable -> mRootView.showLoading(null))
......
......@@ -154,14 +154,11 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), payRequest);
mModel.toOrderPay(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
if (show) {
mRootView.showLoading(null);
}
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSingleSubscriber<BaseResult>(mErrorHandler) {
......
......@@ -28,9 +28,11 @@ import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.PaymentCommand;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.ResultCallback;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.device.pos.base.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.table.FunctionTable;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract;
......@@ -72,14 +74,12 @@ import javax.inject.Inject;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import lombok.Data;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
......@@ -485,23 +485,50 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
OrderResponse orderBean = respose.getData();
if (orderBean != null && respose.getData().getOrderDetails() != null) {
if (!TextUtils.isEmpty(orderBean.getTxnId())) {
final String txnId = orderBean.getTxnId();
if (!TextUtils.isEmpty(txnId)) {
//有支付異常事項需要處理
PosActionStatusExceptionFragment statusExceptionFragment = IActivity.findFragment(PosActionStatusExceptionFragment.class);
if (statusExceptionFragment == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(orderBean.getTxnId());
statusExceptionParam.setAmount(orderBean.getTotalAmount());
statusExceptionParam.setOrderId(orderBean.getId());
statusExceptionParam.setOrderNo(orderBean.getOrderNo());
statusExceptionParam.setPayMethodName(orderBean.getPayName());
statusExceptionParam.setPosAction(PayAction.RETRIEVAL);
IActivity.loadRootFragment(R.id.fl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
} else {
IActivity.start(statusExceptionFragment);
}
return;
RequestParms parms = RequestParms.builder()
.action(PayAction.RETRIEVAL)
.txnId(txnId)
.resultCallback(new ResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailure(Throwable t) {
}
@Override
public void fakePayment() {
}
@Override
public void hybridPayment(List<PayMethod> payMethods) {
}
})
.build();
PaymentCommand.newInstance().matter(IActivity.getSupportFragmentManager(), parms);
// PosActionStatusExceptionFragment statusExceptionFragment = IActivity.findFragment(PosActionStatusExceptionFragment.class);
// if (statusExceptionFragment == null) {
// PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
// statusExceptionParam.setTxnId(orderBean.getTxnId());
// statusExceptionParam.setAmount(orderBean.getTotalAmount());
// statusExceptionParam.setOrderId(orderBean.getId());
// statusExceptionParam.setOrderNo(orderBean.getOrderNo());
// statusExceptionParam.setPayMethodName(orderBean.getPayName());
// statusExceptionParam.setPosAction(PayAction.RETRIEVAL);
// IActivity.loadRootFragment(R.id.fl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
// } else {
// IActivity.start(statusExceptionFragment);
// }
// return;
}
if (respose.getData().getCreateTime() != null && openTableBean != null) {
......
......@@ -1715,6 +1715,7 @@ public class SetMealPresenter extends BaseOrderPresenter2<SetMealContract.Model,
return true;
}
String User_Qty = foodBean.getCurrentMaxNumber();
if (!TextUtils.isEmpty(User_Qty)) {
String msg = "[" + foodBean.getFoodName() + "]" + LanguageUtils.get_language_system(mRootView.getActivity2(), "Comm.pause", "已暫停");
......
......@@ -242,8 +242,8 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
tvOrderNo.setVisibility(View.GONE);
} else {
TableBean.DataBean tableInfo = mDoshokuOrder.getOpenTableInfo();
Date dd = mDoshokuOrder.getOpenTableTime();
String openTime = String.format("%tH:%tM", dd, dd);
// Date dd = mDoshokuOrder.getOpenTableTime();
// String openTime = String.format("%tH:%tM", dd, dd);
String tableno;
if (tableInfo.getSplitStatus() != 0) {
tableno = tableInfo.getTableName().trim() + "-" + tableInfo.getTableNumber().trim();
......@@ -253,7 +253,7 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
btn_table.setText(tableno);
tvOrderNo.setText(String.format(getString(R.string.meal_order_number), DoshokuOrder.getInstance().getOrderNo()));
btn_people_num.setText(String.format(getString(R.string.meal_numberman_colon), tableInfo.getPerson()));
tv_time.setText("時間:" + openTime);
// tv_time.setText("時間:" + openTime);
tv_server_main.setText(UserContext.newInstance().getMemberName());
}
}
......
......@@ -32,7 +32,7 @@ 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.PayAction;
import com.gingersoft.gsa.cloud.pay.PaymentControl;
import com.gingersoft.gsa.cloud.pay.PaymentCommand;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.ResultCallback;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
......@@ -63,7 +63,6 @@ import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import org.simple.eventbus.EventBus;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
......@@ -207,8 +206,8 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
TableBean.DataBean tableInfo = DoshokuOrder.getInstance().getOpenTableInfo();
Date dd = DoshokuOrder.getInstance().getOpenTableTime();
String openTime = String.format("%tH:%tM", dd, dd);
// Date dd = DoshokuOrder.getInstance().getOpenTableTime();
// String openTime = String.format("%tH:%tM", dd, dd);
String tableno = "";
if (tableInfo.getSplitStatus() != 0) {
......@@ -217,7 +216,7 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
tableno = tableInfo.getTableName();
}
btn_table.setText(tableno);
tv_time.setText("時間:" + openTime);
// tv_time.setText("時間:" + openTime);
btn_people_num.setText(tableInfo.getPerson() + "");
tv_server_main.setText(UserContext.newInstance().getMemberName());
......@@ -554,11 +553,14 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
//
// List<BillItem> billItemList = DoshokuOrder.getInstance().getShoppingCart().getBillItemList();
TableBean.DataBean tableInfo = DoshokuOrder.getInstance().getOpenTableInfo();
RequestParms parms = RequestParms.builder()
.action(PayAction.SALE)
.resturantId(RestaurantInfoManager.newInstance().getRestaurantId())
.orderId(DoshokuOrder.getInstance().getOrderId())
.resturantId(RestaurantInfoManager.newInstance().getRestaurantId())
.tableId(tableInfo.getId())
.tableExtId(tableInfo.getTableNumber())
.payMethods(mBillMoneyList)
.payType(payMethod.getPayType())
.payMoney(payMethod.getPayMoney())
......@@ -575,7 +577,7 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
}
@Override
public void externalPayment() {
public void fakePayment() {
mPresenter.sendOrderBefore();
}
......@@ -585,7 +587,7 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
}
})
.build();
PaymentControl.newInstance().showPayFlowFragment(this, parms);
PaymentCommand.newInstance().action(getSupportFragmentManager(), parms);
// PosPay.builder()
// .context(GsaCloudApplication.getAppContext())
......
......@@ -129,15 +129,15 @@ public class DiscountFragment extends BaseFragment<BasePresenter> {
onDiscountItemClickListener.onBillDiscountClick(item, position);
}
});
CouponFragment couponFragment = CouponFragment.newInstance(CouponFragment.FOOD_LIMIT_DISCOUNT);
couponFragment.setOnCouponItemClickListener((item, position) -> {
if (onDiscountItemClickListener != null) {
onDiscountItemClickListener.onCouponClick(item, position);
}
});
fragments.add(billDiscountFragment);
MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
if (memberInfo != null) {
CouponFragment couponFragment = CouponFragment.newInstance(CouponFragment.FOOD_LIMIT_DISCOUNT);
couponFragment.setOnCouponItemClickListener((item, position) -> {
if (onDiscountItemClickListener != null) {
onDiscountItemClickListener.onCouponClick(item, position);
}
});
fragments.add(couponFragment);
}
return fragments;
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登錄"
tools:layout_editor_absoluteX="114dp"
tools:layout_editor_absoluteY="59dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/ll_discount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.qmuiteam.qmui.widget.tab.QMUITabSegment2
android:id="@+id/tabs_discount"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager_discount"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
\ No newline at end of file
......@@ -42,27 +42,11 @@
android:orientation="vertical" />
</LinearLayout>
<include
layout="@layout/meal_layout_combo_modifier"
android:visibility="gone" />
<include layout="@layout/meal_layout_combo_modifier" />
<include
layout="@layout/meal_layout_meal_fine"
android:visibility="gone" />
<include layout="@layout/meal_layout_meal_fine" />
<FrameLayout
android:id="@+id/fl_discount_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/ll_modify"
android:visibility="gone">
<fragment
android:id="@+id/fragment_discount"
android:name="com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.DiscountFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
<include layout="@layout/meal_layout_discount" />
<!--鍵盤-->
<com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView
......
......@@ -8,6 +8,6 @@ import android.os.Parcelable;
* @更新時間: 2021-04-14 15:05
* @描述:
*/
public interface Callback<T> {
public interface CommandCallback<T> {
}
......@@ -26,17 +26,25 @@ public enum PayAction {
switch (status) {
case LOADING:
return actionName + "中...";
case FAILURE_OBTAIN_ID:
return "調起" + actionName + "失敗";
case SUCCESS:
return actionName + "成功";
case FAILURE:
return actionName + "失敗";
case NOT_ARRIVED:
return "已支付未到賬";
case REFUNDED:
return "已退款";
case REPEAL:
return "廢棄(二次結賬)";
default:
return "";
}
}
public String getLoadingStepText(String errMsg) {
return actionName+" "+errMsg;
return actionName + " " + errMsg;
}
public String getCallbackExceptionText() {
......
......@@ -11,6 +11,40 @@ import lombok.Getter;
@Getter
public enum PayStep {
LOADING, SUCCESS, FAILURE
/**
* 未支付
* 支付中
*/
LOADING,
/**
* 獲取事項ID失敗
*/
FAILURE_OBTAIN_ID,
/**
* 支付成功
*/
SUCCESS,
/**
* 支付失败
*/
FAILURE,
/**
* 已支付未到账
*/
NOT_ARRIVED,
/**
* 已退款
*/
REFUNDED,
/**
* 廢棄(第二次結賬)
*/
REPEAL
}
package com.gingersoft.gsa.cloud.pay;
import androidx.fragment.app.FragmentManager;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.device.pos.PosCommand;
import com.jess.arms.utils.Preconditions;
import java.util.List;
import lombok.Getter;
/**
* @作者: bin
* @創建時間: 2021-04-15 16:38
* @更新時間: 2021-04-15 16:38
* @描述:
*/
@Getter
public class PaymentCommand {
private static PaymentCommand sPaymentControl;
public static PaymentCommand newInstance() {
if (sPaymentControl == null) {
sPaymentControl = new PaymentCommand();
}
return sPaymentControl;
}
private PaymentCommand() {
}
public void action(FragmentManager fragmentManager, RequestParms requestParms) {
final PayMethod currPosPaymethod = requestParms.getCurrPosPaymethod();
if (currPosPaymethod != null) {
final PosCommand command = PaymentFactory.createPosCommand();
command.showActionDialog(fragmentManager, requestParms);
} else {
final ResultCallback resultCallback = requestParms.getResultCallback();
if (resultCallback != null) {
resultCallback.fakePayment();
}
}
}
public void matter(FragmentManager fragmentManager, RequestParms requestParms) {
// final PosCommand command = PaymentFactory.createPosCommand();
// command.showActionDialog(fragmentManager, requestParms);
}
public void pay(RequestParms requestParms) {
final PosCommand command = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(command);
command.pay(requestParms);
}
public void tip(RequestParms requestParms) {
final PosCommand command = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(command);
command.tip(requestParms);
}
public void refund(RequestParms requestParms) {
final PosCommand command = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(command);
command.refund(requestParms);
}
public void voidO(RequestParms requestParms) {
final PosCommand command = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(command);
command.void0(this);
}
public void retrieval(RequestParms requestParms) {
final PosCommand command = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(command);
command.retrieval(this);
}
public void printStub(RequestParms requestParms) {
final PosCommand command = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(command);
command.printStub(this);
}
public void settlement(RequestParms requestParms) {
final PosCommand command = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(command);
command.settlement(this);
}
}
package com.gingersoft.gsa.cloud.pay;
import androidx.fragment.app.FragmentActivity;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.contract.YedpayContract;
import com.gingersoft.gsa.cloud.pay.lifecycle.fragment.PayFlowFragment;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPayAction;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.Preconditions;
import lombok.Getter;
/**
* @作者: bin
* @創建時間: 2021-04-15 16:38
* @更新時間: 2021-04-15 16:38
* @描述:
*/
@Getter
public class PaymentControl {
private static PaymentControl sPaymentControl;
public static PaymentControl newInstance() {
if (sPaymentControl == null) {
sPaymentControl = new PaymentControl();
}
return sPaymentControl;
}
private PaymentControl() {
}
public void pay(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.pay(requestParms);
}
public void tip(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.tip(requestParms);
}
public void refund(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.refund(requestParms);
}
public void voidO(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.void0(this);
}
public void retrieval(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.retrieval(this);
}
public void printStub(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.printStub(this);
}
public void settlement(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.settlement(this);
}
public void showPayFlowFragment(FragmentActivity fragmentActivity,RequestParms requestParms){
PayFlowFragment<BasePresenter<YedpayContract.Model, YedpayContract.View>> payFlowFragment = PayFlowFragment.newInstance(requestParms);
payFlowFragment.show(fragmentActivity.getSupportFragmentManager(), "PayFlowDialogFragment");
}
}
package com.gingersoft.gsa.cloud.pay;
import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPayAction;
import com.gingersoft.gsa.cloud.pay.device.pos.bbpos.BBPosDevice;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.HywebDevice;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.YedpayDevice;
import com.gingersoft.gsa.cloud.pay.device.pos.PosCommand;
import com.gingersoft.gsa.cloud.pay.device.pos.bbpos.BBPosCommandImp;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.HywebCommandImp;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.YedpayCommandImp;
/**
* @作者: bin
......@@ -12,17 +12,17 @@ import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.YedpayDevice;
* @更新時間: 2021-04-14 12:28
* @描述:
*/
public class PayDeviceFactory {
public class PaymentFactory {
public static PosPayAction createPayDevice() {
public static PosCommand createPosCommand() {
if (AppDevices.isHywebPos()) {
return HywebDevice.newInstance();
return HywebCommandImp.newInstance();
} else if (AppDevices.isBBPos()) {
return BBPosDevice.newInstance();
return BBPosCommandImp.newInstance();
} else if (AppDevices.isYedpay()) {
return YedpayDevice.newInstance();
return YedpayCommandImp.newInstance();
}
return YedpayDevice.newInstance();
return YedpayCommandImp.newInstance();
}
}
......@@ -3,20 +3,12 @@ package com.gingersoft.gsa.cloud.pay;
import android.os.Parcel;
import android.os.Parcelable;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.google.gson.annotations.SerializedName;
import com.gingersoft.gsa.cloud.pay.contract.PayMethodContract;
import java.io.Serializable;
import java.util.List;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
/**
* @作者: bin
......@@ -28,10 +20,12 @@ import retrofit2.Retrofit;
public class RequestParms implements Parcelable {
private PayAction action;
private final long orderId;
private final int resturantId;
private int tableId;
private String tableExtId;
private final List<PayMethod> payMethods;
private final int payType;
private final long orderId;
private final double payMoney;
/**
* 自定義ID,與POS方綁定交易ID綁定,可用此ID查詢對應的交易記錄
......@@ -44,7 +38,7 @@ public class RequestParms implements Parcelable {
/**
* 操作行为回调如支付,退款等
*/
private Callback callback;
private CommandCallback commandCallback;
/**
* 结果回调
*/
......@@ -53,15 +47,33 @@ public class RequestParms implements Parcelable {
private RequestParms(Builder builder) {
this.action = builder.action;
this.resturantId = builder.resturantId;
this.orderId = builder.orderId;
this.tableId = builder.tableId;
this.tableExtId = builder.tableExtId;
this.payMethods = builder.payMethods;
this.payType = builder.payType;
this.orderId = builder.orderId;
this.payMoney = builder.payMoney;
this.refundReason = builder.refundReason;
this.callback = builder.callback;
this.txnId = builder.txnId;
this.commandCallback = builder.commandCallback;
this.resultCallback = builder.resultCallback;
}
public PayMethod getCurrPosPaymethod() {
if (payMethods != null) {
List<Integer> posPaymethods = PayMethodContract.getPosPaymethods();
for (PayMethod payMethod : payMethods) {
for (Integer posPaymethod : posPaymethods) {
if (payMethod.getPayType() == posPaymethod) {
return payMethod;
}
}
}
}
return null;
}
public static Builder builder() {
return new Builder();
}
......@@ -69,13 +81,16 @@ public class RequestParms implements Parcelable {
public static final class Builder {
private PayAction action;
private long orderId;
private int resturantId;
private int tableId;
private String tableExtId;
private List<PayMethod> payMethods;
private int payType;
private long orderId;
private double payMoney;
private String txnId;
private String refundReason;
private Callback callback;
private CommandCallback commandCallback;
private ResultCallback resultCallback;
public Builder action(PayAction action) {
......@@ -88,6 +103,16 @@ public class RequestParms implements Parcelable {
return this;
}
public Builder tableId(int tableId) {
this.tableId = tableId;
return this;
}
public Builder tableExtId(String tableExtId) {
this.tableExtId = tableExtId;
return this;
}
public Builder payMethods(List<PayMethod> payMethods) {
this.payMethods = payMethods;
return this;
......@@ -108,13 +133,18 @@ public class RequestParms implements Parcelable {
return this;
}
public Builder txnId(String txnId) {
this.txnId = txnId;
return this;
}
public Builder refundReason(String refundReason) {
this.refundReason = refundReason;
return this;
}
public Builder callback(Callback callback) {
this.callback = callback;
public Builder commandCallback(CommandCallback commandCallback) {
this.commandCallback = commandCallback;
return this;
}
......
......@@ -19,10 +19,9 @@ public interface ResultCallback {
void onFailure(Throwable t);
/**
* 外部支付,交给回调方处
* 假支付,交给外部處
*/
void externalPayment();
void fakePayment();
/**
* 混合支付,选择二种以上支付方式
*/
......
package com.gingersoft.gsa.cloud.pay.contract;
import java.util.ArrayList;
import java.util.List;
/**
* @作者: bin
* @創建時間: 2020-12-28 10:40
......@@ -10,7 +13,7 @@ public class PayMethodContract {
/**
* 支付方式
*
* <p>
* 1:寶達通
* 8:支付寶
* 1001:現金
......@@ -25,7 +28,7 @@ public class PayMethodContract {
/**
* Hyweb POS支付方式
*
* <p>
* 1030:N5卡片
* 1031:N5掃碼
* 1032:N5八達通
......@@ -35,8 +38,7 @@ public class PayMethodContract {
public static final int PAY_METHOD_ID_1031 = 1031;
public static final int PAY_METHOD_ID_1032 = 1032;
public static final int PAY_METHOD_ID_1033 = 1033;
public static final int[] HYWEB_PAY_METHODS = {PAY_METHOD_ID_1030,PAY_METHOD_ID_1031,PAY_METHOD_ID_1032,PAY_METHOD_ID_1033};
public static final int[] HYWEB_PAY_METHODS = {PAY_METHOD_ID_1030, PAY_METHOD_ID_1031, PAY_METHOD_ID_1032, PAY_METHOD_ID_1033};
/**
* Yedpay POS支付方式
......@@ -44,7 +46,24 @@ public class PayMethodContract {
public static final int PAY_METHOD_ID_1040 = 1106;
public static final int PAY_METHOD_ID_1041 = 1041;
public static final int PAY_METHOD_ID_1042 = 1042;
public static final int[] YEDPAY_PAY_METHODS = {PAY_METHOD_ID_1040,PAY_METHOD_ID_1041,PAY_METHOD_ID_1042};
public static final int[] YEDPAY_PAY_METHODS = {PAY_METHOD_ID_1040, PAY_METHOD_ID_1041, PAY_METHOD_ID_1042};
/**
* 獲取所有POS支付方式
* @return
*/
public static final List<Integer> getPosPaymethods() {
List<Integer> POS_PAY_METHODS = new ArrayList<>();
for (int hywebPayMethod : HYWEB_PAY_METHODS) {
POS_PAY_METHODS.add(hywebPayMethod);
}
for (int yedpayPayMethod : YEDPAY_PAY_METHODS) {
POS_PAY_METHODS.add(yedpayPayMethod);
}
return POS_PAY_METHODS;
}
/**
* 积分支付
......
package com.gingersoft.gsa.cloud.pay.device.phone;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.base.BasePayAction;
/**
* @作者: bin
......@@ -8,7 +8,7 @@ import com.gingersoft.gsa.cloud.pay.Callback;
* @更新時間: 2021-04-15 17:18
* @描述:
*/
public interface PhoneCommand extends Callback {
public interface PhoneCommand<T> extends BasePayAction<T> {
}
package com.gingersoft.gsa.cloud.pay.device.phone;
import com.gingersoft.gsa.cloud.pay.base.BasePayAction;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:10
* @更新時間: 2021-04-14 12:10
* @描述:
*/
public interface PhonePayAction<T> extends BasePayAction<T> {
void printStub(T params);
}
package com.gingersoft.gsa.cloud.pay.device.phone;
import com.gingersoft.gsa.cloud.pay.RequestParms;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:10
* @更新時間: 2021-04-14 12:10
* @描述:
*/
public class PhonePayActionImp implements PhonePayAction {
public class PhonePayCommandImp implements PhoneCommand<RequestParms> {
@Override
public void pay(Object params) {
private static PhonePayCommandImp sPhonePayCommand;
public static PhonePayCommandImp newInstance() {
if (sPhonePayCommand == null) {
sPhonePayCommand = new PhonePayCommandImp();
}
return sPhonePayCommand;
}
@Override
public void refund(Object params) {
public void pay(RequestParms params) {
}
@Override
public void printStub(Object params) {
public void refund(RequestParms params) {
}
}
package com.gingersoft.gsa.cloud.pay.device.pos;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.base.BasePayAction;
/**
......@@ -8,7 +12,9 @@ import com.gingersoft.gsa.cloud.pay.base.BasePayAction;
* @更新時間: 2021-04-14 12:06
* @描述:
*/
public interface PosPayAction<T> extends BasePayAction<T> {
public interface PosCommand<T> extends BasePayAction<T> {
void showActionDialog(FragmentManager fragmentManager, RequestParms requestParms);
void void0(T params);
......
......@@ -2,9 +2,9 @@ package com.gingersoft.gsa.cloud.pay.device.pos;
import android.content.Context;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.CommandCallback;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.PayDeviceFactory;
import com.gingersoft.gsa.cloud.pay.PaymentFactory;
import com.gingersoft.gsa.cloud.pay.device.pos.base.bean.BaseBgRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.base.bean.BasePosRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.YedpayCommand;
......@@ -30,7 +30,7 @@ public final class PosPay {
final BasePosRequest posRequest;
final BaseBgRequest bgRequest;
final PayAction retrievalAction;
final Callback callback;
final CommandCallback callback;
final boolean showLoading;
final long orderId;
final String txnId;
......@@ -40,43 +40,43 @@ public final class PosPay {
final YedpayCommand yedpayCallback;
public void pay() {
final PosPayAction payDevice = PayDeviceFactory.createPayDevice();
final PosCommand payDevice = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(payDevice);
payDevice.pay(this);
}
public void tip() {
final PosPayAction payDevice = PayDeviceFactory.createPayDevice();
final PosCommand payDevice = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(payDevice);
payDevice.tip(this);
}
public void refund() {
final PosPayAction payDevice = PayDeviceFactory.createPayDevice();
final PosCommand payDevice = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(payDevice);
payDevice.refund(this);
}
public void voidO() {
final PosPayAction payDevice = PayDeviceFactory.createPayDevice();
final PosCommand payDevice = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(payDevice);
payDevice.void0(this);
}
public void retrieval() {
final PosPayAction payDevice = PayDeviceFactory.createPayDevice();
final PosCommand payDevice = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(payDevice);
payDevice.retrieval(this);
}
public void printStub() {
final PosPayAction payDevice = PayDeviceFactory.createPayDevice();
final PosCommand payDevice = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(payDevice);
payDevice.printStub(this);
}
public void settlement() {
final PosPayAction payDevice = PayDeviceFactory.createPayDevice();
final PosCommand payDevice = PaymentFactory.createPosCommand();
Preconditions.checkNotNull(payDevice);
payDevice.settlement(this);
}
......
......@@ -23,6 +23,7 @@ import com.gingersoft.gsa.cloud.common.loadsir.pos.PosTipsStatusExceptionCallbac
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.PaymentCommand;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.constant.HywebActionStatusCode;
......@@ -173,8 +174,9 @@ public class PosActionStatusExceptionFragment extends BaseFragment implements IV
}
private void retrievalStatus() {
RetrievalRequest retrievalRequest = new RetrievalRequest();
retrievalRequest.setTXN_ID(mPosStatusExceptionParam.getTxnId());
PaymentCommand.newInstance().retrieval(null);
// RetrievalRequest retrievalRequest = new RetrievalRequest();
// retrievalRequest.setTXN_ID(mPosStatusExceptionParam.getTxnId());
// PosPay.retrieval(mContext, this, mPosStatusExceptionParam.getOrderId(), mPosStatusExceptionParam.getPosAction(),retrievalRequest, new OnPosActionListener() {
//
// @Override
......
package com.gingersoft.gsa.cloud.pay.lifecycle.contract;
import android.app.Activity;
import android.content.Intent;
package com.gingersoft.gsa.cloud.pay.device.pos.base.lifecycle.contract;
import androidx.fragment.app.Fragment;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.pay.PayStep;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import io.reactivex.Single;
import okhttp3.RequestBody;
/**
* ================================================
......@@ -32,7 +25,6 @@ public interface PayFlowContract {
void showStatusLoadingDialog(PayStep status);
Fragment getFragment();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
package com.gingersoft.gsa.cloud.pay.lifecycle.fragment;
package com.gingersoft.gsa.cloud.pay.device.pos.base.lifecycle.fragment;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
......@@ -19,15 +19,12 @@ import com.gingersoft.gsa.cloud.order.R;
import com.gingersoft.gsa.cloud.order.R2;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.PayStep;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.contract.YedpayContract;
import com.gingersoft.gsa.cloud.pay.lifecycle.di.component.DaggerPayFlowComponent;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.view.customstatus.CustomStatusView;
import com.jess.arms.base.BaseDialogFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract;
import com.gingersoft.gsa.cloud.pay.device.pos.base.lifecycle.contract.PayFlowContract;
import butterknife.BindView;
......@@ -46,7 +43,7 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public class PayFlowFragment<P extends BasePresenter> extends BaseDialogFragment implements PayFlowContract.View {
public abstract class PayFlowFragment<P extends BasePresenter> extends BaseDialogFragment<P> implements PayFlowContract.View {
@BindView(R2.id.ll_container)
LinearLayout ll_container;
......@@ -55,30 +52,12 @@ public class PayFlowFragment<P extends BasePresenter> extends BaseDialogFragment
@BindView(R2.id.tv_status)
TextView tv_status;
protected P mPresenter;
protected RequestParms requestParms;
protected PayAction action;
private final long mCancelDelayMillis = 2000;
private String mLoadingText = "支付中...";
public static PayFlowFragment newInstance(RequestParms parms) {
PayFlowFragment fragment = new PayFlowFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("requestParms", parms);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerPayFlowComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
......@@ -95,11 +74,6 @@ public class PayFlowFragment<P extends BasePresenter> extends BaseDialogFragment
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mPresenter = (P) mPresenter;
Bundle arguments = getArguments();
requestParms = arguments.getParcelable("requestParms");
action = requestParms.getAction();
tv_status.setText(mLoadingText);
ll_container.setLayoutParams(new FrameLayout.LayoutParams((int) (ArmsUtils.getScreenWidth(mContext) * 0.4), (int) (ArmsUtils.getScreenWidth(mContext) * 0.4)));
......@@ -117,7 +91,7 @@ public class PayFlowFragment<P extends BasePresenter> extends BaseDialogFragment
case SUCCESS:
loadSuccess();
break;
case FAILURE:
default:
loadFailure();
break;
}
......@@ -183,11 +157,6 @@ public class PayFlowFragment<P extends BasePresenter> extends BaseDialogFragment
}, mCancelDelayMillis);
}
@Override
public Fragment getFragment() {
return this;
}
public RequestParms getRequestParms() {
return requestParms;
}
......
package com.gingersoft.gsa.cloud.pay.device.pos.bbpos;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPayAction;
import androidx.fragment.app.FragmentManager;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.device.pos.PosCommand;
/**
* @作者: bin
......@@ -8,18 +10,24 @@ import com.gingersoft.gsa.cloud.pay.device.pos.PosPayAction;
* @更新時間: 2021-04-14 12:08
* @描述:
*/
public class BBPosDevice implements PosPayAction {
public class BBPosCommandImp implements PosCommand {
private static BBPosDevice sBBPosDevice;
private static BBPosCommandImp sBBPosDevice;
public static BBPosDevice newInstance() {
public static BBPosCommandImp newInstance() {
if (sBBPosDevice == null) {
sBBPosDevice = new BBPosDevice();
sBBPosDevice = new BBPosCommandImp();
}
return sBBPosDevice;
}
private BBPosDevice() {
private BBPosCommandImp() {
}
@Override
public void showActionDialog(FragmentManager fragmentManager, RequestParms requestParms) {
}
@Override
......
package com.gingersoft.gsa.cloud.pay.device.pos.bbpos;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.CommandCallback;
/**
* @作者: bin
......@@ -8,7 +8,7 @@ import com.gingersoft.gsa.cloud.pay.Callback;
* @更新時間: 2021-04-15 9:50
* @描述:
*/
public interface BBposCommand extends Callback {
public interface BBposCommand extends CommandCallback {
......
package com.gingersoft.gsa.cloud.pay.device.pos.bbpos;
/**
* @作者: bin
* @創建時間: 2021-04-23 10:08
* @更新時間: 2021-04-23 10:08
* @描述:
*/
public class BBposCommandImp implements BBposCommand {
}
package com.gingersoft.gsa.cloud.pay.device.pos.hyweb;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.CommandCallback;
/**
* @作者: bin
......@@ -8,7 +8,7 @@ import com.gingersoft.gsa.cloud.pay.Callback;
* @更新時間: 2021-04-15 9:50
* @描述:
*/
public interface HywebCommand extends Callback {
public interface HywebCommand extends CommandCallback {
......
package com.gingersoft.gsa.cloud.pay.device.pos.hyweb;
import androidx.fragment.app.FragmentManager;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.device.pos.PosCommand;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.SaleRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.PrintPaymentStubImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.RefundActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.RetrievalActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.SaleActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.SettlementActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.TipsActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.VoidActionImpl;
/**
* @作者: bin
* @創建時間: 2021-04-23 10:09
* @更新時間: 2021-04-23 10:09
* @創建時間: 2021-04-14 12:08
* @更新時間: 2021-04-14 12:08
* @描述:
*/
public class HywebCommandImp implements HywebCommand {
public class HywebCommandImp implements PosCommand<PosPay> {
private static HywebCommandImp sHywebDevice;
public static HywebCommandImp newInstance() {
if (sHywebDevice == null) {
sHywebDevice = new HywebCommandImp();
}
return sHywebDevice;
}
private HywebCommandImp() {
}
@Override
public void showActionDialog(FragmentManager fragmentManager, RequestParms requestParms) {
}
@Override
public void void0(PosPay posPay) {
new VoidActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.VOID,
(VoidRequest) posPay.getPosRequest(),
(GetTxnIdRequest) posPay.getBgRequest(), (PosCallbackListener) (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void tip(PosPay posPay) {
new TipsActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.TIP, (GetTxnIdRequest) posPay.getBgRequest(),
(AdjustTipRequest) posPay.getPosRequest(), (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void retrieval(PosPay posPay) {
new RetrievalActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.RETRIEVAL, posPay.getRetrievalAction(), posPay.getOrderId(),
(RetrievalRequest) posPay.getPosRequest(), (PosCallbackListener) posPay.getCallback(), false);
}
@Override
public void printStub(PosPay posPay) {
new PrintPaymentStubImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.PRINT, posPay.getTxnId(),
(PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void settlement(PosPay posPay) {
new SettlementActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.SETTLEMENT, (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void pay(PosPay posPay) {
new SaleActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.SALE, (SaleRequest) posPay.getPosRequest(),
(GetTxnIdRequest) posPay.getBgRequest(), (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void refund(PosPay posPay) {
new RefundActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.REFUND, (RefundRequest) posPay.getPosRequest(),
(GetTxnIdRequest) posPay.getBgRequest(), (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
}
package com.gingersoft.gsa.cloud.pay.device.pos.hyweb;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPayAction;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.SaleRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.PrintPaymentStubImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.RefundActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.RetrievalActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.SaleActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.SettlementActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.TipsActionImpl;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.imp.VoidActionImpl;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:08
* @更新時間: 2021-04-14 12:08
* @描述:
*/
public class HywebDevice implements PosPayAction<PosPay> {
private static HywebDevice sHywebDevice;
public static HywebDevice newInstance() {
if (sHywebDevice == null) {
sHywebDevice = new HywebDevice();
}
return sHywebDevice;
}
private HywebDevice() {
}
@Override
public void void0(PosPay posPay) {
new VoidActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.VOID,
(VoidRequest) posPay.getPosRequest(),
(GetTxnIdRequest) posPay.getBgRequest(), (PosCallbackListener) (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void tip(PosPay posPay) {
new TipsActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.TIP, (GetTxnIdRequest) posPay.getBgRequest(),
(AdjustTipRequest) posPay.getPosRequest(), (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void retrieval(PosPay posPay) {
new RetrievalActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.RETRIEVAL, posPay.getRetrievalAction(), posPay.getOrderId(),
(RetrievalRequest) posPay.getPosRequest(), (PosCallbackListener) posPay.getCallback(), false);
}
@Override
public void printStub(PosPay posPay) {
new PrintPaymentStubImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.PRINT, posPay.getTxnId(),
(PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void settlement(PosPay posPay) {
new SettlementActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.SETTLEMENT, (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void pay(PosPay posPay) {
new SaleActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.SALE, (SaleRequest) posPay.getPosRequest(),
(GetTxnIdRequest) posPay.getBgRequest(), (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
@Override
public void refund(PosPay posPay) {
new RefundActionImpl(posPay.getContext(), posPay.getLifecycleView(), PayAction.REFUND, (RefundRequest) posPay.getPosRequest(),
(GetTxnIdRequest) posPay.getBgRequest(), (PosCallbackListener) posPay.getCallback(), true)
.onPosActionBefore();
}
}
package com.gingersoft.gsa.cloud.pay.device.pos.hyweb;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.CommandCallback;
import com.gingersoft.gsa.cloud.pay.device.pos.base.bean.BasePosResponse;
/**
......@@ -10,7 +10,7 @@ import com.gingersoft.gsa.cloud.pay.device.pos.base.bean.BasePosResponse;
* @更新時間: 2020-12-29 20:15
* @描述:POS事件回調
*/
public interface PosCallbackListener<T extends BasePosResponse> extends Callback<BasePosResponse> {
public interface PosCallbackListener<T extends BasePosResponse> extends CommandCallback<BasePosResponse> {
/**
* 回調成功
......
......@@ -63,7 +63,7 @@ public class RefundActionImpl extends IHywebAction<RefundRespose> {
@Override
public void onNext(String result) {
String error = "調起退款異常";
String error = "調起退款異常";
if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) {
......
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.CommandCallback;
/**
* @作者: bin
......@@ -8,13 +8,12 @@ import com.gingersoft.gsa.cloud.pay.Callback;
* @更新時間: 2021-04-15 9:50
* @描述:
*/
public interface YedpayCommand extends Callback {
public interface YedpayCommand extends CommandCallback {
void callSaleUri(String uri);
void refundResult(boolean result);
void querySaleStatus(String uri);
void retrieval(String uri);
void queryRefundStatus(String uri);
}
......@@ -2,9 +2,12 @@ package com.gingersoft.gsa.cloud.pay.device.pos.yedpay;
import android.util.SparseArray;
import androidx.fragment.app.FragmentManager;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPayAction;
import com.gingersoft.gsa.cloud.pay.device.pos.PosCommand;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.constant.YedpayConstant;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.fragment.YedpayFragment;
/**
* @作者: bin
......@@ -12,19 +15,19 @@ import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.constant.YedpayConstant;
* @更新時間: 2021-04-14 12:08
* @描述:
*/
public class YedpayDevice implements PosPayAction<RequestParms> {
public class YedpayCommandImp implements PosCommand<RequestParms> {
private static YedpayDevice sYedpayDevice;
private static YedpayCommandImp sYedpayCommand;
private final SparseArray<String> mYedpayTypeMap = new SparseArray<>();
public static YedpayDevice newInstance() {
if (sYedpayDevice == null) {
sYedpayDevice = new YedpayDevice();
public static YedpayCommandImp newInstance() {
if (sYedpayCommand == null) {
sYedpayCommand = new YedpayCommandImp();
}
return sYedpayDevice;
return sYedpayCommand;
}
private YedpayDevice() {
private YedpayCommandImp() {
initPayTypeMap();
}
......@@ -41,6 +44,12 @@ public class YedpayDevice implements PosPayAction<RequestParms> {
}
@Override
public void showActionDialog(FragmentManager fragmentManager, RequestParms requestParms) {
YedpayFragment yedpayFragment = YedpayFragment.newInstance(requestParms);
yedpayFragment.show(fragmentManager, yedpayFragment.getClass().getSimpleName());
}
@Override
public void void0(RequestParms params) {
}
......@@ -52,9 +61,9 @@ public class YedpayDevice implements PosPayAction<RequestParms> {
@Override
public void retrieval(RequestParms params) {
String uriString = "yedpayapp://transaction_detail?c=" +params.getTxnId();
YedpayCommand callback = (YedpayCommand) params.getCallback();
callback.querySaleStatus(uriString);
String uriString = "yedpayapp://transaction_detail?c=" + params.getTxnId();
YedpayCommand callback = (YedpayCommand) params.getCommandCallback();
callback.retrieval(uriString);
}
@Override
......@@ -70,14 +79,14 @@ public class YedpayDevice implements PosPayAction<RequestParms> {
@Override
public void pay(RequestParms params) {
//String uriString = "yedpayapp://transaction?g={{ 支付方式 }}&a={{ 銀碼 }}(&c={{ 自定義編號 }})";
String uriString = "yedpayapp://transaction?g=" + getPayType(params.getPayType()) + "&a=" + params.getPayMoney() + "&c=" +params.getTxnId();
YedpayCommand callback = (YedpayCommand) params.getCallback();
String uriString = "yedpayapp://transaction?g=" + getPayType(params.getPayType()) + "&a=" + params.getPayMoney() + "&c=" + params.getTxnId();
YedpayCommand callback = (YedpayCommand) params.getCommandCallback();
callback.callSaleUri(uriString);
}
@Override
public void refund(RequestParms params) {
YedpayCommand callback = (YedpayCommand) params.getCallback();
YedpayCommand callback = (YedpayCommand) params.getCommandCallback();
callback.refundResult(true);
}
......
......@@ -10,6 +10,7 @@ public interface YedpayConstant {
interface CallRequestCode {
int SALE_REQUEST_CODE = 555;
int RETRIEVAL_REQUEST_CODE = 556;
}
......@@ -28,7 +29,7 @@ public interface YedpayConstant {
*/
interface Status {
/**
* 0 未支付 1 支付失败 2 支成功 3 已支付未到账 4.支付中 5.已退款 6.廢棄(第二次結賬)
* 0 未支付 1 支付失败 2 支成功 3 已支付未到账 4.支付中 5.已退款 6.廢棄(第二次結賬)
*/
int PAY_STATUS_0 = 0;
int PAY_STATUS_1 = 1;
......
......@@ -31,7 +31,7 @@ public interface YedpayContract {
void showStatusLoadingDialog(PayStep status);
void startActivityForResult(Intent intent);
void startActivityForResult(Intent intent,int requestCode);
Fragment getFragment();
}
......@@ -39,6 +39,10 @@ public interface YedpayContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Single<BaseResult> getYedPayTxnId(RequestBody body);
Single<BaseResult> getYedPayRefundTxnId(RequestBody body);
Single<BaseResult> findSaleStatus(RequestBody body);
Single<BaseResult> refundOrder(RequestBody body);
......
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.fragment;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;
......@@ -15,14 +10,14 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.order.R;
import com.gingersoft.gsa.cloud.order.R2;
import com.gingersoft.gsa.cloud.pay.PayStep;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.constant.YedpayConstant;
import com.gingersoft.gsa.cloud.pay.lifecycle.fragment.PayFlowFragment;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.di.component.DaggerYedpayComponent;
import com.gingersoft.gsa.cloud.pay.device.pos.base.lifecycle.fragment.PayFlowFragment;
import com.gingersoft.gsa.cloud.pay.view.customstatus.CustomStatusView;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.contract.YedpayContract;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.presenter.YedpayPresenter;
......@@ -52,6 +47,14 @@ public class YedpayFragment extends PayFlowFragment<YedpayPresenter> implements
@BindView(R2.id.tv_status)
TextView tv_status;
public static YedpayFragment newInstance(RequestParms parms) {
YedpayFragment fragment = new YedpayFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("requestParms", parms);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerYedpayComponent //如找不到该类,请编译一下项目
......@@ -63,9 +66,18 @@ public class YedpayFragment extends PayFlowFragment<YedpayPresenter> implements
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
Bundle arguments = getArguments();
requestParms = arguments.getParcelable("requestParms");
action = requestParms.getAction();
super.onCreate(savedInstanceState);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
super.initData(savedInstanceState);
mPresenter.excutePayFlow(requestParms);
mPresenter.apply(requestParms);
}
@Override
......@@ -74,12 +86,13 @@ public class YedpayFragment extends PayFlowFragment<YedpayPresenter> implements
LoganManager.w_code(TAG, "onActivityResult->" + "resultCode=" + resultCode + " requestCode=" + requestCode);
if (resultCode == android.app.Activity.RESULT_OK) {
switch (requestCode) {
case YedpayConstant.CallRequestCode.SALE_REQUEST_CODE: {
case YedpayConstant.CallRequestCode.SALE_REQUEST_CODE:
case YedpayConstant.CallRequestCode.RETRIEVAL_REQUEST_CODE:{
if (intent.getExtras() != null) {
String status = (String) intent.getExtras().get("status");
String transaction_id = (String) intent.getExtras().get("transaction_id");
LoganManager.w_code(TAG, "onActivityResult-》" + "status=" + status + " transaction_id=" + transaction_id);
mPresenter.findSaleStatus(transaction_id, requestParms.getOrderId(), requestParms.getPayType(), requestParms.getResturantId());
mPresenter.findSaleStatus(transaction_id, requestParms.getOrderId(), requestParms.getPayType(), requestParms.getResturantId(), requestParms.getTxnId());
}
break;
}
......@@ -93,8 +106,8 @@ public class YedpayFragment extends PayFlowFragment<YedpayPresenter> implements
}
@Override
public void startActivityForResult(Intent intent) {
startActivityForResult(intent, YedpayConstant.CallRequestCode.SALE_REQUEST_CODE);
public void startActivityForResult(Intent intent,int requestCode) {
startActivityForResult(intent,requestCode);
}
@Override
......
......@@ -51,6 +51,20 @@ public class YedpayModel extends BaseModel implements YedpayContract.Model {
}
@Override
public Single<BaseResult> getYedPayTxnId(RequestBody body) {
return mRepositoryManager.obtainRetrofitService(YedpayService.class)
.getYedPayTxnId(body)
.compose(MyRxSchedulerUtils._io_main_f());
}
@Override
public Single<BaseResult> getYedPayRefundTxnId(RequestBody body) {
return mRepositoryManager.obtainRetrofitService(YedpayService.class)
.getYedPayRefundTxnId(body)
.compose(MyRxSchedulerUtils._io_main_f());
}
@Override
public Single<BaseResult> findSaleStatus(RequestBody body) {
return mRepositoryManager.obtainRetrofitService(YedpayService.class)
.findSaleStatus(body)
......
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.request;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import lombok.Data;
/**
* @作者: bin
* @創建時間: 2021-05-06 15:01
* @更新時間: 2021-05-06 15:01
* @描述:
*/
@Data
public class GetYedPayRefundTxnIdRequest {
private Long orderId;
private Integer tableId;
private String tableExtId;
private Double amount;
}
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.request;
import lombok.Data;
/**
* @作者: bin
* @創建時間: 2021-05-06 15:01
* @更新時間: 2021-05-06 15:01
* @描述:
*/
@Data
public class GetYedPayTxnIdRequest {
private Long orderId;
private Integer tableId;
private String tableExtId;
private Integer payMethodId;
private Double amount;
private Integer payType;
private String payName;
}
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean;
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.response;
/**
* @作者: bin
......
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.response.bg;
import lombok.Getter;
import lombok.Setter;
/**
* @作者: bin
* @創建時間: 2020-12-26 16:46
* @更新時間: 2020-12-26 16:46
* @描述:
*/
@Getter
@Setter
public class GetYedPayRefundTxnIdResponse {
private String refundId;
}
package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.response.bg;
import lombok.Getter;
import lombok.Setter;
/**
* @作者: bin
* @創建時間: 2020-12-26 16:46
* @更新時間: 2020-12-26 16:46
* @描述:
*/
@Getter
@Setter
public class GetYedPayTxnIdResponse {
private String txnId;
}
......@@ -17,6 +17,12 @@ import retrofit2.http.POST;
*/
public interface YedpayService {
@POST("posPay/getYedPayTxnId" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Single<BaseResult> getYedPayTxnId(@Body RequestBody requestBody);
@POST("posPay/getYedPayRefundTxnId" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Single<BaseResult> getYedPayRefundTxnId(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_pay"})
@POST("gsaYedPay/updatePayStatus" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Single<BaseResult> findSaleStatus(@Body RequestBody requestBody);
......
package com.gingersoft.gsa.cloud.pay.lifecycle.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.contract.YedpayContract;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.pay.lifecycle.di.module.PayFlowModule;
import com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.pay.lifecycle.fragment.PayFlowFragment;
import com.jess.arms.mvp.BasePresenter;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component(modules = PayFlowModule.class, dependencies = AppComponent.class)
public interface PayFlowComponent {
void inject(PayFlowFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
PayFlowComponent.Builder view(PayFlowContract.View view);
PayFlowComponent.Builder appComponent(AppComponent appComponent);
PayFlowComponent build();
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.pay.lifecycle.di.module;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract;
import com.jess.arms.mvp.BaseModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public abstract class PayFlowModule {
@Binds
abstract PayFlowContract.Model bindPayFlowModel(BaseModel model);
}
\ No newline at end of file
......@@ -215,6 +215,10 @@ public class OrderPayView extends LinearLayout {
if (onSelectPayClickLisenter != null) {
onSelectPayClickLisenter.addClick(method);
}
}else {
int notifyPosition = mBillMoneyList.size() - 1;
mBillMoneyAdapter.setSelect_position(notifyPosition);
mBillMoneyAdapter.notifyDataSetChanged();
}
});
mBillMoneyAdapter.setOnItemClickListener(new BillMoneyAdapter.OnItemClickListener() {
......
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