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);
RequestParms parms = RequestParms.builder()
.action(PayAction.RETRIEVAL)
.txnId(txnId)
.resultCallback(new ResultCallback() {
@Override
public void onSuccess() {
}
return;
@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);
}
});
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(billDiscountFragment);
MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
if (memberInfo != null) {
fragments.add(couponFragment);
}
return fragments;
......
......@@ -12,6 +12,7 @@ import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;
......@@ -75,7 +76,9 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.CouponFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.DiscountFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.NomalDiscountFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.CancelFoodDialog;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.CustomFoodDialog;
......@@ -184,24 +187,9 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
RecyclerView rvFood;
@BindView(R2.id.ll_food_container)
LinearLayout llFoodContainer;
@BindView(R2.id.rv_combo)
NoScrollRecyclerView rvCombo;
@BindView(R2.id.rv_modifier)
NoScrollRecyclerView rvModifier;
@BindView(R2.id.scroll_combo)
NestedScrollView scrollCombo;
@BindView(R2.id.ll_fine)
LinearLayout llFine;
@BindView(R2.id.tabs_fine)
QMUITabSegment2 tabSegmentFine;
@BindView(R2.id.pager_fine)
ViewPager2 vPager2Fine;
@BindView(R2.id.meal_stand_search_keyboard_view)
SearchKeyBoardView mealStandSearchKeyboardView;
@BindView(R2.id.fl_discount_fragment)
FrameLayout flDiscountFragment;
@BindView(R2.id.btn_select_all)
QMUIAlphaTextView btnSelectAll;
......@@ -220,6 +208,27 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
@BindView(R2.id.fl_container)
LinearLayout flContainer;
@BindView(R2.id.scroll_combo)
NestedScrollView scrollCombo;
@BindView(R2.id.rv_combo)
NoScrollRecyclerView rvCombo;
@BindView(R2.id.rv_modifier)
NoScrollRecyclerView rvModifier;
@BindView(R2.id.ll_fine)
LinearLayout llFine;
@BindView(R2.id.tabs_fine)
QMUITabSegment2 tabSegmentFine;
@BindView(R2.id.pager_fine)
ViewPager2 vPager2Fine;
@BindView(R2.id.ll_discount)
LinearLayout llDiscount;
@BindView(R2.id.tabs_discount)
QMUITabSegment2 tabSegmentDiscount;
@BindView(R2.id.pager_discount)
ViewPager2 vPager2Discount;
@Inject
FoodGroupAdapter mFoodGroupAdapter;
@Inject
......@@ -245,10 +254,8 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
private int mCurrentViewMode;
private boolean isPluMode = false;
/**
* 是否已初始化 已送單的折扣
*/
private boolean isLoadFineFragment = false;
private boolean isLoadDiscountFragment = false;
private ImageView[] ivPoints;
private int totalPage;
......@@ -259,7 +266,6 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
private int comboColumn = 4;
private int modColumn = 4;
private DiscountFragment discountFragment;
private CancelFoodDialog mCancelFoodDialog;
public static SetMealFragment newInstance() {
......@@ -286,13 +292,11 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
public void initData(@Nullable Bundle savedInstanceState) {
mActivity = (MealStandActivity2) _mActivity;
discountFragment = findChildFragment(DiscountFragment.class);
initRecyclerConfiguration();
initViewMap();
initAdapter();
initLayoutManager();
initListener();
initLayoutManager();
mPresenter.initMealData();
mPresenter.getCurrentSoldoutFood();
}
......@@ -326,8 +330,8 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
map.put(MealConstant.food_group_ViewMode, llFoodGroup);
map.put(MealConstant.food_ViewMode, rvFood);
map.put(MealConstant.combo_ViewMode, scrollCombo);
map.put(MealConstant.discount_ViewMode, flDiscountFragment);
map.put(MealConstant.fine_ViewMode, llFine);
map.put(MealConstant.discount_ViewMode, llDiscount);
map.put(MealConstant.keys_viewMode, mealStandSearchKeyboardView);
}
......@@ -399,29 +403,9 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
recordOperat(true);
mPresenter.sendOrder(false, null);
});
//折扣,优惠券
if (discountFragment != null) {
discountFragment.setOnDiscountItemClickListener(new DiscountFragment.OnDiscountItemClickListener() {
@Override
public void onBillDiscountClick(Discount discountBean, int position) {
recordOperat(true);
LoganManager.w_tableMode(TAG, LoganManager.EVENT_ADD + "折扣【" + discountBean.getRemark() + "】");
mPresenter.discountAndCouponClick(discountBean);
}
@Override
public void onCouponClick(MemberWalletCoupon coupon, int position) {
recordOperat(true);
LoganManager.w_tableMode(TAG, LoganManager.EVENT_ADD + "優惠券【" + coupon.getCouponTypeName() + "】");
mPresenter.discountAndCouponClick(coupon);
}
});
}
}
@Override
public void initFoodGroupAdapter(List<Food> foodGroupList) {
//总的页数向上取整
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / (foodGroupColumn * foodGroupRow));
......@@ -479,22 +463,82 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
}
}
@OnClick(R2.id.iv_fine_back)
void onFineBackViewClick(View view) {
setCurrViewMode(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
/**
* 显示折扣
*/
public void showDiscountLayout() {
setCurrViewMode(MealConstant.discount_ViewMode);
if (!isLoadDiscountFragment) {
isLoadDiscountFragment = true;
initDiscountViewPager();
} else {
vPager2Discount.setCurrentItem(0);
}
}
private void initDiscountViewPager() {
final List<String> tabList = getDiscountTabTitles();
QMUITabBuilder builder = tabSegmentDiscount.tabBuilder();
for (final String tabTitle : tabList) {
QMUITab tab = builder
.setText(tabTitle)
.build(mContext);
tabSegmentDiscount.addTab(tab);
}
vPager2Discount.setAdapter(new ViewPager2Adapter(this, createDiscountFragments()));
vPager2Discount.setCurrentItem(0);
QMUITabSegmentUtils.setNomalTabSegmentStyle(tabSegmentDiscount, vPager2Discount);
}
private List<String> getDiscountTabTitles() {
List<String> tabList = new ArrayList<>();
tabList.add("折扣");
MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
if (memberInfo != null) {
tabList.add("會員錢包");
}
return tabList;
}
private List<Fragment> createDiscountFragments() {
List<Fragment> fragments = new ArrayList<>();
NomalDiscountFragment billDiscountFragment = NomalDiscountFragment.newInstance();
billDiscountFragment.setOnDiscountItemClickListener(new NomalDiscountFragment.OnBillDiscountItemClickListener() {
@Override
public void onItemClick(Discount discount, int position) {
recordOperat(true);
LoganManager.w_tableMode(TAG, LoganManager.EVENT_ADD + "折扣【" + discount.getRemark() + "】");
mPresenter.discountAndCouponClick(discount);
}
});
fragments.add(billDiscountFragment);
MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
if (memberInfo != null) {
CouponFragment couponFragment = CouponFragment.newInstance(CouponFragment.FOOD_LIMIT_DISCOUNT);
couponFragment.setOnCouponItemClickListener(new CouponFragment.OnCouponItemClickListener() {
@Override
public void onItemClick(MemberWalletCoupon coupon, int position) {
recordOperat(true);
LoganManager.w_tableMode(TAG, LoganManager.EVENT_ADD + "優惠券【" + coupon.getCouponTypeName() + "】");
mPresenter.discountAndCouponClick(coupon);
}
});
fragments.add(couponFragment);
}
return fragments;
}
/**
* 显示公共細項
*/
public void showFineLayout(int currFinePage) {
setCurrViewMode(MealConstant.fine_ViewMode);
if (!isLoadFineFragment) {
isLoadFineFragment = true;
initFineViewPager(currFinePage);
} else {
vPager2Fine.setCurrentItem(currFinePage);
}
setCurrViewMode(MealConstant.fine_ViewMode);
}
private void initFineViewPager(int currFinePage) {
......@@ -506,35 +550,14 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
.build(mContext);
tabSegmentFine.addTab(tab);
}
vPager2Fine.setAdapter(new ViewPager2Adapter(this, createFragments()));
vPager2Fine.setAdapter(new ViewPager2Adapter(this, createFineFragments()));
vPager2Fine.setCurrentItem(currFinePage);
tabSegmentFine.addOnTabSelectedListener(new QMUITabSegment.OnTabSelectedListener() {
@Override
public void onTabSelected(int index) {
LoganManager.w_tableMode(TAG, "當前頁面【" + tabList[index] + "】");
}
@Override
public void onTabUnselected(int index) {
}
@Override
public void onTabReselected(int index) {
}
@Override
public void onDoubleTap(int index) {
}
});
QMUITabSegmentUtils.setNomalTabSegmentStyle(tabSegmentFine, vPager2Fine);
}
private List<Fragment> createFragments() {
private List<Fragment> createFineFragments() {
LoadFineEvent loadFineData = mPresenter.getLoadFineData(0);
LoadFineEvent loadFineData2 = mPresenter.getLoadFineData(1);
List<Fragment> fragments = new ArrayList<>();
FineChildAllFragment modSasteFineItemFragment = FineChildAllFragment.newInstance(loadFineData);
FineChildAllFragment modMsgFineItemFragment = FineChildAllFragment.newInstance(loadFineData2);
......@@ -883,7 +906,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
showMessage("此食品不能參與折扣!");
return;
}
setCurrViewMode(MealConstant.discount_ViewMode);
showDiscountLayout();
}
@OnClick(R2.id.btn_multiple_selection)
......@@ -1058,8 +1081,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
}
private void showRiceponMemberDialogFragment() {
recordOperat(false);
RiceponMemberDialogFragment dialogFragment = RiceponMemberDialogFragment.newInstance(DoshokuOrder.getInstance().getOpenTableInfo(),DoshokuOrder.getInstance().getMemberInfo());
RiceponMemberDialogFragment dialogFragment = RiceponMemberDialogFragment.newInstance(DoshokuOrder.getInstance().getOpenTableInfo(), DoshokuOrder.getInstance().getMemberInfo());
dialogFragment.setOnUseMemberListener(new RiceponMemberDialogFragment.OnUseMemberListener() {
@Override
public void onUseMember(MemberInfo memberInfo) {
......
<?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> {
private static PhonePayCommandImp sPhonePayCommand;
@Override
public void pay(Object params) {
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);
......
......@@ -3,26 +3,33 @@ package com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.presenter;
import android.app.Application;
import android.content.Intent;
import android.net.Uri;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.rxjava.ErrorHandleSingleSubscriber;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.pay.PayStep;
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;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.YedpayCommand;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.constant.YedpayConstant;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.YedpayFindSaleStatusBean;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.request.GetYedPayRefundTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.request.GetYedPayTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.response.YedpayFindSaleStatusBean;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.model.bean.response.bg.GetYedPayTxnIdResponse;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.pay.device.pos.yedpay.lifecycle.contract.YedpayContract;
import com.jess.arms.utils.RxLifecycleUtils;
......@@ -67,12 +74,81 @@ public class YedpayPresenter extends BasePresenter<YedpayContract.Model, YedpayC
this.mApplication = null;
}
public void findSaleStatus(String transactionId, long orderId, int payType, int restaurantId) {
public void getYedPayTxnId(GetYedPayTxnIdRequest payTxnIdRequest) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(payTxnIdRequest));
String json = GsonUtils.GsonString(payTxnIdRequest);
mModel.getYedPayTxnId(requestBody)
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSingleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onSuccess(BaseResult result) {
if (result.isSuccess() && result.getData() != null) {
final GetYedPayTxnIdResponse yedPayTxnIdResponse = GsonUtils.GsonToBean(result.getData(), GetYedPayTxnIdResponse.class);
mRequestParms.setTxnId(yedPayTxnIdResponse.getTxnId());
executeAction();
} else {
mRootView.showStatusLoadingDialog(PayStep.FAILURE_OBTAIN_ID);
if (mResultCallback != null) {
mResultCallback.onFailure(null);
}
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showStatusLoadingDialog(PayStep.FAILURE_OBTAIN_ID);
if (mResultCallback != null) {
mResultCallback.onFailure(t);
}
}
});
}
public void getYedPayRefundTxnId(GetYedPayRefundTxnIdRequest refundTxnIdRequest) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(refundTxnIdRequest));
String json = GsonUtils.GsonString(refundTxnIdRequest);
mModel.getYedPayRefundTxnId(requestBody)
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSingleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onSuccess(BaseResult result) {
if (result.isSuccess() && result.getData() != null) {
final GetYedPayTxnIdResponse yedPayTxnIdResponse = GsonUtils.GsonToBean(result.getData(), GetYedPayTxnIdResponse.class);
mRequestParms.setTxnId(yedPayTxnIdResponse.getTxnId());
executeAction();
} else {
mRootView.showStatusLoadingDialog(PayStep.FAILURE_OBTAIN_ID);
if (mResultCallback != null) {
mResultCallback.onFailure(null);
}
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showStatusLoadingDialog(PayStep.FAILURE_OBTAIN_ID);
if (mResultCallback != null) {
mResultCallback.onFailure(t);
}
}
});
}
public void findSaleStatus(String transactionId, long orderId, int payType, int restaurantId, String txnId) {
RequestBody requestBody = new FormBody.Builder()
.add("transactionId", transactionId)
.add("orderId", orderId + "")
.add("payType", payType + "")
.add("restaurantId", restaurantId + "")
.add("txnId", txnId)
.build();
mModel.findSaleStatus(requestBody)
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
......@@ -83,17 +159,19 @@ public class YedpayPresenter extends BasePresenter<YedpayContract.Model, YedpayC
if (result.isSuccess()) {
YedpayFindSaleStatusBean saleStatusBean = GsonUtils.GsonToBean(result.getData(), YedpayFindSaleStatusBean.class);
if (saleStatusBean != null) {
if (saleStatusBean.getStatus() == YedpayConstant.Status.PAY_STATUS_0) {
mRootView.showStatusLoadingDialog(PayStep.SUCCESS);
final Integer status = saleStatusBean.getStatus();
if (status != null) {
mRootView.showStatusLoadingDialog(getPayStepByStatus(status));
if (status == YedpayConstant.Status.PAY_STATUS_0) {
if (mResultCallback != null) {
mResultCallback.onSuccess();
}
} else {
mRootView.showStatusLoadingDialog(PayStep.FAILURE);
if (mResultCallback != null) {
mResultCallback.onFailure(null);
}
}
}
} else {
mRootView.showStatusLoadingDialog(PayStep.FAILURE);
if (mResultCallback != null) {
......@@ -120,12 +198,13 @@ public class YedpayPresenter extends BasePresenter<YedpayContract.Model, YedpayC
});
}
public void refundOrder(String refundReason, long orderId, int payType, int restaurantId) {
public void refundOrder(String refundReason, long orderId, int payType, int restaurantId, String txnId) {
RequestBody requestBody = new FormBody.Builder()
.add("refundReason", refundReason)
.add("orderId", String.valueOf(orderId))
.add("payType", String.valueOf(payType))
.add("restaurantId", String.valueOf(restaurantId))
.add("txnId", txnId)
.build();
mModel.refundOrder(requestBody)
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
......@@ -157,49 +236,104 @@ public class YedpayPresenter extends BasePresenter<YedpayContract.Model, YedpayC
});
}
public void excutePayFlow(RequestParms requestParms) {
public void apply(RequestParms requestParms) {
this.mRequestParms = requestParms;
this.mResultCallback = mRequestParms.getResultCallback();
mRequestParms.setCallback(yedpayCommand);
switch (requestParms.getAction()) {
case SALE:
PaymentControl.newInstance().pay(requestParms);
getYedPayTxnId(getTxnIdRequestBean(requestParms));
break;
case REFUND:
getYedPayRefundTxnId(getRefundTxnIdRequestBean(requestParms));
break;
case RETRIEVAL:
executeAction();
break;
}
}
public void executeAction() {
if (mRequestParms == null) {
mRootView.showStatusLoadingDialog(PayStep.FAILURE_OBTAIN_ID);
return;
}
mRequestParms.setCommandCallback(yedpayCommand);
switch (mRequestParms.getAction()) {
case SALE:
PaymentCommand.newInstance().pay(mRequestParms);
break;
case REFUND:
PaymentControl.newInstance().refund(requestParms);
PaymentCommand.newInstance().refund(mRequestParms);
break;
case RETRIEVAL:
PaymentCommand.newInstance().retrieval(mRequestParms);
break;
}
}
private GetYedPayRefundTxnIdRequest getRefundTxnIdRequestBean(RequestParms requestParms) {
GetYedPayRefundTxnIdRequest refundTxnIdRequest = new GetYedPayRefundTxnIdRequest();
refundTxnIdRequest.setOrderId(requestParms.getOrderId());
refundTxnIdRequest.setTableId(requestParms.getTableId());
refundTxnIdRequest.setTableExtId(requestParms.getTableExtId());
refundTxnIdRequest.setAmount(requestParms.getPayMoney());
return refundTxnIdRequest;
}
private GetYedPayTxnIdRequest getTxnIdRequestBean(RequestParms requestParms) {
GetYedPayTxnIdRequest txnIdRequest = new GetYedPayTxnIdRequest();
txnIdRequest.setOrderId(requestParms.getOrderId());
txnIdRequest.setTableId(requestParms.getTableId());
txnIdRequest.setTableExtId(requestParms.getTableExtId());
PayMethod currPosPaymethod = requestParms.getCurrPosPaymethod();
txnIdRequest.setPayMethodId(currPosPaymethod.getId());
txnIdRequest.setPayType(currPosPaymethod.getPayType());
txnIdRequest.setPayName(currPosPaymethod.getPayName());
txnIdRequest.setAmount(requestParms.getPayMoney());
return txnIdRequest;
}
private YedpayCommand yedpayCommand = new YedpayCommand() {
@Override
public void callSaleUri(String uri) {
Uri uri2 = Uri.parse(uri);
Intent intent = new Intent(Intent.ACTION_VIEW, uri2);
mRootView.startActivityForResult(intent);
mRootView.startActivityForResult(intent, YedpayConstant.CallRequestCode.SALE_REQUEST_CODE);
}
@Override
public void refundResult(boolean result) {
refundOrder(mRequestParms.getRefundReason(), mRequestParms.getOrderId(), mRequestParms.getPayType(), mRequestParms.getResturantId());
refundOrder(mRequestParms.getRefundReason(), mRequestParms.getOrderId(), mRequestParms.getPayType(), mRequestParms.getResturantId(), mRequestParms.getTxnId());
}
@Override
public void querySaleStatus(String uri) {
public void retrieval(String uri) {
Uri uri2 = Uri.parse(uri);
Intent intent = new Intent(Intent.ACTION_VIEW, uri2);
mRootView.startActivityForResult(intent);
mRootView.startActivityForResult(intent, YedpayConstant.CallRequestCode.RETRIEVAL_REQUEST_CODE);
}
@Override
public void queryRefundStatus(String uri) {
Uri uri2 = Uri.parse(uri);
Intent intent = new Intent(Intent.ACTION_VIEW, uri2);
mRootView.startActivityForResult(intent);
}
};
private PayStep getPayStepByStatus(Integer status) {
switch (status) {
case YedpayConstant.Status.PAY_STATUS_0:
return PayStep.LOADING;
case YedpayConstant.Status.PAY_STATUS_1:
return PayStep.FAILURE;
case YedpayConstant.Status.PAY_STATUS_2:
return PayStep.SUCCESS;
case YedpayConstant.Status.PAY_STATUS_3:
return PayStep.NOT_ARRIVED;
case YedpayConstant.Status.PAY_STATUS_4:
return PayStep.LOADING;
case YedpayConstant.Status.PAY_STATUS_5:
return PayStep.REFUNDED;
case YedpayConstant.Status.PAY_STATUS_6:
return PayStep.REPEAL;
default:
return PayStep.FAILURE_OBTAIN_ID;
}
}
}
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