Commit d3cc4b0f by 宁斌

賬單管理功能button調整,N5支付取消,退款,補小費

parent b4efd6e3
package com.gingersoft.gsa.cloud.table; package com.gingersoft.gsa.cloud.table;
import android.content.Context;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult; import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil; import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent; import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.common.function.FModule; import com.gingersoft.gsa.cloud.common.function.FModule;
import com.gingersoft.gsa.cloud.component.ComponentAction; import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.order.order.TakeawayOrder;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderPayActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderPayActivity;
...@@ -13,15 +17,11 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity; ...@@ -13,15 +17,11 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity;
import com.jess.arms.integration.AppManager; import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.ArmsUtils;
import javax.inject.Inject;
public class ComponentTable implements IComponent { public class ComponentTable implements IComponent {
@Inject
AppManager mAppManager;
public static final class table { public static final class table {
/** /**
* 餐檯頁 * 餐檯頁
...@@ -57,7 +57,7 @@ public class ComponentTable implements IComponent { ...@@ -57,7 +57,7 @@ public class ComponentTable implements IComponent {
public String getName() { public String getName() {
//组件的名称,调用此组件的方式: //组件的名称,调用此组件的方式:
// CC.obtainBuilder("ComponentA")...build().callAsync() // CC.obtainBuilder("ComponentA")...build().callAsync()
return com.gingersoft.gsa.cloud.component.ComponentName.COMPONENT_TABLE ; return com.gingersoft.gsa.cloud.component.ComponentName.COMPONENT_TABLE;
} }
/** /**
...@@ -71,6 +71,7 @@ public class ComponentTable implements IComponent { ...@@ -71,6 +71,7 @@ public class ComponentTable implements IComponent {
*/ */
@Override @Override
public boolean onCall(CC cc) { public boolean onCall(CC cc) {
Context context = cc.getContext();
String actionName = cc.getActionName(); String actionName = cc.getActionName();
switch (actionName) { switch (actionName) {
case "showTableActivity": case "showTableActivity":
...@@ -98,11 +99,17 @@ public class ComponentTable implements IComponent { ...@@ -98,11 +99,17 @@ public class ComponentTable implements IComponent {
case "getInfo": case "getInfo":
getInfo(cc); getInfo(cc);
break; break;
case ComponentAction.Table.INT_ORDER:
//初始化堂食賬單類
DoshokuOrder.getInstance().initialization();
//初始化外賣賬單類
TakeawayOrder.getInstance().initialization();
break;
case ComponentAction.Table.KILL_MEAL_ORDER_PAY: case ComponentAction.Table.KILL_MEAL_ORDER_PAY:
mAppManager.findActivity(OrderPayActivity.class); AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
mAppManager.findActivity(OrderContentActivity.class); appManager.killActivity(OrderPayActivity.class);
mAppManager.findActivity(MealStandActivity.class); appManager.killActivity(OrderContentActivity.class);
appManager.killActivity(MealStandActivity.class);
break; break;
default: default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例 //这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
......
package com.gingersoft.gsa.cloud.table.mvp.model.bean.response; package com.gingersoft.gsa.cloud.table.mvp.model.bean.response;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo; import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.table.TableBean; import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse; import com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse;
...@@ -53,41 +55,87 @@ public class OrderManagerResponse implements Serializable { ...@@ -53,41 +55,87 @@ public class OrderManagerResponse implements Serializable {
* 7:自取 * 7:自取
*/ */
private int orderType; private int orderType;
/**總金額*/ /**
* 總金額
*/
private double totalAmount; private double totalAmount;
private int totalPoints; private int totalPoints;
/**支付金額*/ /**
* 支付金額
*/
private double amount; private double amount;
/**賬單小數*/ /**
* 賬單小數
*/
private Double rounding; private Double rounding;
/**服務費*/ /**
* 服務費
*/
private Double serviceAmount; private Double serviceAmount;
/**訂單碼*/ /**
* 訂單碼
*/
private String billNo; private String billNo;
/**取餐碼*/ /**
* 取餐碼
*/
private String takeFoodCode; private String takeFoodCode;
/**生成訂單時間*/ /**
* 生成訂單時間
*/
private String createTime; private String createTime;
/**結賬時間*/ /**
* 結賬時間
*/
private String endTime; private String endTime;
/**訂單食品詳情*/ /**
* 訂單食品詳情
*/
private List<OrderResponse.OrderDetailsBean> orderDetails; private List<OrderResponse.OrderDetailsBean> orderDetails;
/**折扣詳情*/ /**
* 折扣詳情
*/
private List<OrderDiscountResponse> discountDetails; private List<OrderDiscountResponse> discountDetails;
/**支付詳情*/ /**
* 支付詳情
*/
private List<OrderPayBean> orderPays; private List<OrderPayBean> orderPays;
/**餐檯信息*/ /**
* 餐檯信息
*/
private TableBean.DataBean restaurantTable; private TableBean.DataBean restaurantTable;
/**會員信息*/ /**
* 會員信息
*/
private MemberInfo memberInfo; private MemberInfo memberInfo;
/**會員積分碼*/ /**
* 會員積分碼
*/
private String verifyCode; private String verifyCode;
/**會員積分相关实体*/ /**
* 會員積分相关实体
*/
private OrderPayResponse integralInfo; private OrderPayResponse integralInfo;
/** /**
* N5相關,以下哪個參數不為Null說明為當前支付狀態
*/
/**
* N5 支付TXN_ID
*/
private String payTxnId;
/**
* N5取消支付TXN_ID
*/
private String cancelTxnId;
/**
* N5退款Refund_Id
*/
private String refundTxnId;
/**
* 訂單狀態:0:未支付;1:待確認(已支付, 待餐廳確認);2:制作中(餐厅确认);3:派送中;4:确认收货(完成);5:是否评论;6:取消; * 訂單狀態:0:未支付;1:待確認(已支付, 待餐廳確認);2:制作中(餐厅确认);3:派送中;4:确认收货(完成);5:是否评论;6:取消;
*/ */
public static final byte STATUS_UNPAID = 0; public static final byte STATUS_UNPAID = 0;
...@@ -98,7 +146,6 @@ public class OrderManagerResponse implements Serializable { ...@@ -98,7 +146,6 @@ public class OrderManagerResponse implements Serializable {
public static final byte STATUS_COMMENT = 5; public static final byte STATUS_COMMENT = 5;
public static final byte STATUS_CANCEL = 6; public static final byte STATUS_CANCEL = 6;
/** /**
* 订单类型1:堂食2:外賣3:掃碼點餐5:預點餐7:自取 * 订单类型1:堂食2:外賣3:掃碼點餐5:預點餐7:自取
*/ */
...@@ -106,8 +153,16 @@ public class OrderManagerResponse implements Serializable { ...@@ -106,8 +153,16 @@ public class OrderManagerResponse implements Serializable {
public static final byte ORDER_TYPE_TAKEAWAY = 2; public static final byte ORDER_TYPE_TAKEAWAY = 2;
public static final byte ORDER_TYPE_SELFCOLLECTION = 7; public static final byte ORDER_TYPE_SELFCOLLECTION = 7;
public boolean withHywebPay() {
if (!TextUtils.isEmpty(payTxnId) || !TextUtils.isEmpty(cancelTxnId) || !TextUtils.isEmpty(refundTxnId)) {
return true;
}
return false;
}
@Data @Data
public static final class OrderPayBean implements Serializable{ public static final class OrderPayBean implements Serializable {
private long id; private long id;
private long lineOrderId; private long lineOrderId;
private int payType; private int payType;
......
...@@ -28,7 +28,7 @@ public class OrderAssemblyUtil { ...@@ -28,7 +28,7 @@ public class OrderAssemblyUtil {
newOrderDetails.addAll(getOrdersItem2ByParentId(orderDetails, order.getId(),order.getProductId(), i)); newOrderDetails.addAll(getOrdersItem2ByParentId(orderDetails, order.getId(),order.getProductId(), i));
} }
} }
return newOrderDetails; return newOrderDetails;//10 + 7
} }
private static List<OrderDetail> getOrdersItem2ByParentId(List<OrderDetail> orderDetails, long id, long productId,int startIndex) { private static List<OrderDetail> getOrdersItem2ByParentId(List<OrderDetail> orderDetails, long id, long productId,int startIndex) {
......
...@@ -26,6 +26,9 @@ import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse; ...@@ -26,6 +26,9 @@ import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail; import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.BaseOrder; import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder; import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.table.FunctionTable; import com.gingersoft.gsa.cloud.table.FunctionTable;
import com.gingersoft.gsa.cloud.table.R; import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract; import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract;
...@@ -375,6 +378,21 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -375,6 +378,21 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
OrderResponse orderBean = respose.getData(); OrderResponse orderBean = respose.getData();
if (orderBean != null && respose.getData().getOrderDetails() != null) { if (orderBean != null && respose.getData().getOrderDetails() != null) {
if (!TextUtils.isEmpty(orderBean.getTxnId())) {
//有支付異常事項需要處理
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(orderBean.getTxnId());
statusExceptionParam.setAmount(orderBean.getTotalAmount());
statusExceptionParam.setOrderNum(orderBean.getId());
statusExceptionParam.setPayMethodName(orderBean.getPayName());
statusExceptionParam.setPosAction(PosAction.RETRIEVAL);
IActivity.loadRootFragment(R.id.fl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
return;
}
if (respose.getData().getCreateTime() != null && openTableBean != null) { if (respose.getData().getCreateTime() != null && openTableBean != null) {
//將開台時間設置為訂單創建時間 //將開台時間設置為訂單創建時間
openTableBean.setCreateTime(respose.getData().getCreateTime()); openTableBean.setCreateTime(respose.getData().getCreateTime());
......
...@@ -29,6 +29,7 @@ import com.gingersoft.gsa.cloud.order.billItem.BillItem; ...@@ -29,6 +29,7 @@ import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder; import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod; import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.contract.PayTypeContract; import com.gingersoft.gsa.cloud.pay.contract.PayTypeContract;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.SaleRequest; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.SaleRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayMethodConstant; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayMethodConstant;
...@@ -506,7 +507,7 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements ...@@ -506,7 +507,7 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
MealOrderPayRequest orderPayRequest = mPresenter.getOrderPayRequest(gsaPayView); MealOrderPayRequest orderPayRequest = mPresenter.getOrderPayRequest(gsaPayView);
List<BillItem> billItemList = DoshokuOrder.getInstance().getShoppingCart().getBillItemList(); List<BillItem> billItemList = DoshokuOrder.getInstance().getShoppingCart().getBillItemList();
DoshokuOrder.getInstance().pay(mContext, OrderPayActivity.this, saleRequest, txnIdRequest,DoshokuOrder.getInstance().getOpenTableInfo(),orderPayRequest,billItemList,mBillMoneyList); PosPay.pay(mContext, OrderPayActivity.this, saleRequest, txnIdRequest,DoshokuOrder.getInstance().getOpenTableInfo(),orderPayRequest,billItemList,mBillMoneyList);
} else { } else {
} }
......
...@@ -96,7 +96,7 @@ public class OrderCenterActivity extends BaseFragmentActivity<OrderCenterPresent ...@@ -96,7 +96,7 @@ public class OrderCenterActivity extends BaseFragmentActivity<OrderCenterPresent
refeshOrderList(); refeshOrderList();
} }
private void refeshOrderList(){ public void refeshOrderList(){
setPageIndex(0); setPageIndex(0);
mPresenter.loadOrderList(OrderManagerResponse.ORDER_TYPE_DOSHOKU+"", 0, 10, null, false); mPresenter.loadOrderList(OrderManagerResponse.ORDER_TYPE_DOSHOKU+"", 0, 10, null, false);
} }
......
...@@ -134,21 +134,23 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> { ...@@ -134,21 +134,23 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
} }
private void setOrderStatus(OrderManagerResponse item, int position) { private void setOrderStatus(OrderManagerResponse item, int position) {
btn_cancel_order.setVisibility(View.GONE); // btn_cancel_order.setVisibility(View.GONE);
if (item.getStatus() == 6) { if (item.getStatus() == 6) {
btn_print_order.setVisibility(View.GONE); btn_print_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE); btn_modify_order.setVisibility(View.GONE);
// btn_cancel_order.setVisibility(View.GONE); btn_cancel_order.setVisibility(View.GONE);
btn_order_status.setVisibility(View.VISIBLE); btn_order_status.setVisibility(View.VISIBLE);
} else { } else {
btn_print_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
if (item.withHywebPay()) {
setOrderStatusByTxnId(item.getPayTxnId(), item.getCancelTxnId(), item.getRefundTxnId());
}
btn_print_order.setText(LanguageUtils.get_language_system(mContext, "print.order", "打印賬單")); btn_print_order.setText(LanguageUtils.get_language_system(mContext, "print.order", "打印賬單"));
btn_tips.setText(LanguageUtils.get_language_system(mContext, "public.tips", "貼士")); btn_tips.setText(LanguageUtils.get_language_system(mContext, "public.tips", "貼士"));
btn_modify_order.setText(LanguageUtils.get_language_system(mContext, "modify.order", "修改訂單")); btn_modify_order.setText(LanguageUtils.get_language_system(mContext, "modify.order", "修改訂單"));
// btn_cancel_order.setText(LanguageUtils.get_language_system(mContext, "cancel.order", "取消訂單")); btn_cancel_order.setText(LanguageUtils.get_language_system(mContext, "cancel.order", "取消訂單"));
btn_print_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
// btn_cancel_order.setVisibility(View.VISIBLE);
btn_order_status.setVisibility(View.GONE);
btn_print_order.setOnClickListener(new View.OnClickListener() { btn_print_order.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
...@@ -173,6 +175,44 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> { ...@@ -173,6 +175,44 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
} }
} }
}); });
btn_refund.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onRefundClick(item, position);
}
}
});
btn_tips.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onTipsClick(item, position);
}
}
});
}
}
private void setOrderStatusByTxnId(String payTxnId, String cancelTxnId, String refundTxnId) {
if (!TextUtils.isEmpty(cancelTxnId)) {
btn_order_status.setText("已取消");
btn_order_status.setVisibility(View.VISIBLE);
return;
}
if (!TextUtils.isEmpty(refundTxnId)) {
btn_order_status.setVisibility(View.VISIBLE);
btn_order_status.setText("已退款");
return;
}
if (!TextUtils.isEmpty(payTxnId)) {
btn_print_order.setVisibility(View.VISIBLE);
btn_refund.setVisibility(View.VISIBLE);
btn_tips.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
} else {
btn_order_status.setVisibility(View.GONE);
} }
} }
...@@ -200,5 +240,9 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> { ...@@ -200,5 +240,9 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
void onModifyClick(OrderManagerResponse datasBean, int position); void onModifyClick(OrderManagerResponse datasBean, int position);
void onCancelClick(OrderManagerResponse datasBean, int position); void onCancelClick(OrderManagerResponse datasBean, int position);
void onRefundClick(OrderManagerResponse datasBean, int position);
void onTipsClick(OrderManagerResponse datasBean, int position);
} }
} }
...@@ -33,4 +33,10 @@ ...@@ -33,4 +33,10 @@
android:fitsSystemWindows="true"/> android:fitsSystemWindows="true"/>
</LinearLayout> </LinearLayout>
<FrameLayout
android:id="@+id/rl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.qmuiteam.qmui.widget.QMUIWindowInsetLayout> </com.qmuiteam.qmui.widget.QMUIWindowInsetLayout>
\ No newline at end of file
...@@ -273,4 +273,8 @@ ...@@ -273,4 +273,8 @@
android:layout_height="?attr/qmui_topbar_height" android:layout_height="?attr/qmui_topbar_height"
android:fitsSystemWindows="true"/> android:fitsSystemWindows="true"/>
<FrameLayout
android:id="@+id/rl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.qmuiteam.qmui.widget.QMUIWindowInsetLayout> </com.qmuiteam.qmui.widget.QMUIWindowInsetLayout>
\ No newline at end of file
...@@ -145,7 +145,7 @@ ...@@ -145,7 +145,7 @@
android:text="取消訂單" android:text="取消訂單"
android:textColor="@color/theme_white_color" android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_13" android:textSize="@dimen/sp_13"
android:visibility="gone"/> android:visibility="visible"/>
<com.qmuiteam.qmui.alpha.QMUIAlphaButton <com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_refund" android:id="@+id/btn_refund"
......
...@@ -98,4 +98,9 @@ ...@@ -98,4 +98,9 @@
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"/> app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout> </RelativeLayout>
...@@ -5,9 +5,12 @@ import android.app.Activity; ...@@ -5,9 +5,12 @@ import android.app.Activity;
import android.app.Application; import android.app.Application;
import android.os.Bundle; import android.os.Bundle;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication; import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.logan.LoganManager; import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.CommonConfiguration; import com.gingersoft.gsa.cloud.common.utils.CommonConfiguration;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils; import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils; import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
...@@ -59,10 +62,11 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac ...@@ -59,10 +62,11 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
}).subscribeOn(Schedulers.io()).subscribe(); }).subscribeOn(Schedulers.io()).subscribe();
} else if (name.equals("TableActivity") || name.equals("OrderCenterActivity") || name.equals("OrderDetailActivity")) { } else if (name.equals("TableActivity") || name.equals("OrderCenterActivity") || name.equals("OrderDetailActivity")) {
// //初始化堂食賬單類 //初始化堂食,外賣賬單類
// DoshokuOrder.getInstance().initialization(); CC.obtainBuilder(ComponentName.COMPONENT_TABLE)
// //初始化外賣賬單類 .setActionName(ComponentAction.Table.INT_ORDER)
// TakeawayOrder.getInstance().initialization(); .build()
.call();
} }
GsaCloudApplication.getAppContext().setCurrentActivity(activity); GsaCloudApplication.getAppContext().setCurrentActivity(activity);
} }
......
package com.gingersoft.gsa.cloud.common.core.table; package com.gingersoft.gsa.cloud.common.core.table;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
...@@ -60,7 +63,7 @@ public class TableBean { ...@@ -60,7 +63,7 @@ public class TableBean {
} }
@Data @Data
public static class DataBean implements Serializable { public static class DataBean implements Serializable , Parcelable {
/** /**
* id : 25839 * id : 25839
* tableName : ceshitai1* * tableName : ceshitai1*
...@@ -192,6 +195,79 @@ public class TableBean { ...@@ -192,6 +195,79 @@ public class TableBean {
this.summaryId = dataBean.summaryId; this.summaryId = dataBean.summaryId;
this.scanId = dataBean.scanId; this.scanId = dataBean.scanId;
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.id);
dest.writeString(this.tableName);
dest.writeInt(this.restaurantId);
dest.writeValue(this.orderId);
dest.writeString(this.qrCode);
dest.writeString(this.qrCodeImg);
dest.writeInt(this.seatCount);
dest.writeInt(this.maxSeatCount);
dest.writeInt(this.minSeatCount);
dest.writeString(this.createTime);
dest.writeString(this.createBy);
dest.writeInt(this.posTableId);
dest.writeInt(this.serviceCharge);
dest.writeLong(this.memberId);
dest.writeInt(this.status);
dest.writeInt(this.person);
dest.writeInt(this.useStatus);
dest.writeInt(this.sort);
dest.writeInt(this.type);
dest.writeInt(this.splitStatus);
dest.writeString(this.tableNumber);
dest.writeString(this.skyQrCode);
dest.writeLong(this.summaryId);
dest.writeValue(this.scanId);
}
protected DataBean(Parcel in) {
this.id = in.readInt();
this.tableName = in.readString();
this.restaurantId = in.readInt();
this.orderId = (Long) in.readValue(Long.class.getClassLoader());
this.qrCode = in.readString();
this.qrCodeImg = in.readString();
this.seatCount = in.readInt();
this.maxSeatCount = in.readInt();
this.minSeatCount = in.readInt();
this.createTime = in.readString();
this.createBy = in.readString();
this.posTableId = in.readInt();
this.serviceCharge = in.readInt();
this.memberId = in.readLong();
this.status = in.readInt();
this.person = in.readInt();
this.useStatus = in.readInt();
this.sort = in.readInt();
this.type = in.readInt();
this.splitStatus = in.readInt();
this.tableNumber = in.readString();
this.skyQrCode = in.readString();
this.summaryId = in.readLong();
this.scanId = (Long) in.readValue(Long.class.getClassLoader());
}
public static final Creator<DataBean> CREATOR = new Creator<DataBean>() {
@Override
public DataBean createFromParcel(Parcel source) {
return new DataBean(source);
}
@Override
public DataBean[] newArray(int size) {
return new DataBean[size];
}
};
} }
public static TableBean.DataBean splitTableTransformTable(TableBean.DataBean mainTable,TableExtBean.DataBean dataBean) { public static TableBean.DataBean splitTableTransformTable(TableBean.DataBean mainTable,TableExtBean.DataBean dataBean) {
......
...@@ -24,6 +24,10 @@ public class ComponentAction { ...@@ -24,6 +24,10 @@ public class ComponentAction {
public interface Table{ public interface Table{
String KILL_MEAL_ORDER_PAY = "kill_meal_order_pay"; String KILL_MEAL_ORDER_PAY = "kill_meal_order_pay";
/**
* 初始化餐檯,外賣訂單
*/
String INT_ORDER = "int_order";
} }
public interface Print{ public interface Print{
......
ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错 ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错
apply from: rootProject.file("cc-settings.gradle") apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
android { android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"] compileSdkVersion rootProject.ext.android["compileSdkVersion"]
...@@ -15,7 +16,17 @@ android { ...@@ -15,7 +16,17 @@ android {
targetSdkVersion rootProject.ext.android["targetSdkVersion"] targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"] versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"] versionName rootProject.ext.android["versionName"]
multiDexEnabled true
//配置注解处理器
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
} }
resourcePrefix "order"
buildTypes { buildTypes {
// Test { // Test {
// buildConfigField "boolean", "LOG_DEBUG", "false" // buildConfigField "boolean", "LOG_DEBUG", "false"
......
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.runtime.pay_module" /> package="com.gingersoft.gsa.cloud.order" />
package com.gingersoft.gsa.cloud.order.bean.event; package com.gingersoft.gsa.cloud.order.bean.event;
import android.os.Parcel;
import android.os.Parcelable;
import com.gingersoft.gsa.cloud.common.core.table.TableBean; import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest; import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest;
import com.gingersoft.gsa.cloud.order.billItem.BillItem; import com.gingersoft.gsa.cloud.order.billItem.BillItem;
...@@ -15,7 +18,7 @@ import lombok.Data; ...@@ -15,7 +18,7 @@ import lombok.Data;
* @描述: * @描述:
*/ */
@Data @Data
public class MealPayResultEvent { public class MealPayResultParam implements Parcelable {
private TableBean.DataBean tableBean; private TableBean.DataBean tableBean;
private MealOrderPayRequest mealOrderPayRequest; private MealOrderPayRequest mealOrderPayRequest;
...@@ -25,4 +28,42 @@ public class MealPayResultEvent { ...@@ -25,4 +28,42 @@ public class MealPayResultEvent {
private SaleRespose saleRespose; private SaleRespose saleRespose;
private String txnId; private String txnId;
public MealPayResultParam() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(this.tableBean, flags);
dest.writeParcelable(this.mealOrderPayRequest, flags);
dest.writeTypedList(this.billItemList);
dest.writeTypedList(this.payMethodList);
dest.writeParcelable(this.saleRespose, flags);
dest.writeString(this.txnId);
}
protected MealPayResultParam(Parcel in) {
this.tableBean = in.readParcelable(TableBean.DataBean.class.getClassLoader());
this.mealOrderPayRequest = in.readParcelable(MealOrderPayRequest.class.getClassLoader());
this.billItemList = in.createTypedArrayList(BillItem.CREATOR);
this.payMethodList = in.createTypedArrayList(PayMethod.CREATOR);
this.saleRespose = in.readParcelable(SaleRespose.class.getClassLoader());
this.txnId = in.readString();
}
public static final Creator<MealPayResultParam> CREATOR = new Creator<MealPayResultParam>() {
@Override
public MealPayResultParam createFromParcel(Parcel source) {
return new MealPayResultParam(source);
}
@Override
public MealPayResultParam[] newArray(int size) {
return new MealPayResultParam[size];
}
};
} }
package com.gingersoft.gsa.cloud.order.bean.request; package com.gingersoft.gsa.cloud.order.bean.request;
import android.os.Parcel;
import android.os.Parcelable;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter; import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -15,7 +18,7 @@ import lombok.Data; ...@@ -15,7 +18,7 @@ import lombok.Data;
* 描述:堂食支付請求數據 * 描述:堂食支付請求數據
*/ */
@Data @Data
public class MealOrderPayRequest { public class MealOrderPayRequest implements Parcelable{
private long orderId; private long orderId;
private int linePayType; private int linePayType;
...@@ -39,13 +42,100 @@ public class MealOrderPayRequest { ...@@ -39,13 +42,100 @@ public class MealOrderPayRequest {
*/ */
private PosMatter posMatter; private PosMatter posMatter;
public MealOrderPayRequest() {
}
@Data @Data
public static class OrderPay { public static class OrderPay implements Parcelable {
private int payType; private int payType;
private double amount; private double amount;
private double tipsPrice; private double tipsPrice;
/**積分支付 所消費的積分*/ /**積分支付 所消費的積分*/
private Double consumptionPoints; private Double consumptionPoints;
public OrderPay() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.payType);
dest.writeDouble(this.amount);
dest.writeDouble(this.tipsPrice);
dest.writeValue(this.consumptionPoints);
}
protected OrderPay(Parcel in) {
this.payType = in.readInt();
this.amount = in.readDouble();
this.tipsPrice = in.readDouble();
this.consumptionPoints = (Double) in.readValue(Double.class.getClassLoader());
}
public static final Creator<OrderPay> CREATOR = new Creator<OrderPay>() {
@Override
public OrderPay createFromParcel(Parcel source) {
return new OrderPay(source);
}
@Override
public OrderPay[] newArray(int size) {
return new OrderPay[size];
}
};
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(this.orderId);
dest.writeInt(this.linePayType);
dest.writeInt(this.orderPayType);
dest.writeInt(this.tableId);
dest.writeString(this.tableNumber);
dest.writeValue(this.memberId);
dest.writeValue(this.couponId);
dest.writeValue(this.pointsAdd);
dest.writeValue(this.pointsUse);
dest.writeInt(this.whetherFreeService);
dest.writeTypedList(this.orderPays);
dest.writeParcelable(this.posMatter, flags);
}
protected MealOrderPayRequest(Parcel in) {
this.orderId = in.readLong();
this.linePayType = in.readInt();
this.orderPayType = in.readInt();
this.tableId = in.readInt();
this.tableNumber = in.readString();
this.memberId = (Long) in.readValue(Long.class.getClassLoader());
this.couponId = (Long) in.readValue(Long.class.getClassLoader());
this.pointsAdd = (Double) in.readValue(Double.class.getClassLoader());
this.pointsUse = (Double) in.readValue(Double.class.getClassLoader());
this.whetherFreeService = in.readInt();
this.orderPays = in.createTypedArrayList(OrderPay.CREATOR);
this.posMatter = in.readParcelable(PosMatter.class.getClassLoader());
}
public static final Creator<MealOrderPayRequest> CREATOR = new Creator<MealOrderPayRequest>() {
@Override
public MealOrderPayRequest createFromParcel(Parcel source) {
return new MealOrderPayRequest(source);
}
@Override
public MealOrderPayRequest[] newArray(int size) {
return new MealOrderPayRequest[size];
}
};
} }
package com.gingersoft.gsa.cloud.order.bean.response; package com.gingersoft.gsa.cloud.order.bean.response;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo; import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import java.io.Serializable; import java.io.Serializable;
...@@ -36,6 +38,15 @@ public class OrderResponse { ...@@ -36,6 +38,15 @@ public class OrderResponse {
private List<OrderDiscountResponse> discountDetails; private List<OrderDiscountResponse> discountDetails;
private List<OrderDetailsBean> orderDetails; private List<OrderDetailsBean> orderDetails;
/**
* N5支付ID
* 有支付異常事項需要處理時才返回
*/
@Nullable
private String txnId;
@Nullable
private String payName;
public OrderResponse() { public OrderResponse() {
} }
...@@ -94,7 +105,9 @@ public class OrderResponse { ...@@ -94,7 +105,9 @@ public class OrderResponse {
* 是否参与服務費#0:不參與;1:參與; * 是否参与服務費#0:不參與;1:參與;
**/ **/
private byte scAble = 1; private byte scAble = 1;
/**折扣實體*/ /**
* 折扣實體
*/
private List<RestaurantDiscountVO> discountList; private List<RestaurantDiscountVO> discountList;
/** /**
...@@ -137,7 +150,7 @@ public class OrderResponse { ...@@ -137,7 +150,7 @@ public class OrderResponse {
private long memberId; private long memberId;
@Data @Data
public static class RestaurantDiscountVO implements Serializable{ public static class RestaurantDiscountVO implements Serializable {
private Long id; private Long id;
private long discountId; private long discountId;
private int type; private int type;
......
package com.gingersoft.gsa.cloud.order.billItem; package com.gingersoft.gsa.cloud.order.billItem;
import android.graphics.Color; import android.graphics.Color;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
...@@ -11,7 +13,7 @@ import lombok.Data; ...@@ -11,7 +13,7 @@ import lombok.Data;
* @description: 賬單項抽象類{@link BillItem} * @description: 賬單項抽象類{@link BillItem}
*/ */
@Data @Data
public abstract class BillItem { public class BillItem implements Parcelable {
protected String name; protected String name;
protected double money = 0.0; protected double money = 0.0;
...@@ -66,4 +68,43 @@ public abstract class BillItem { ...@@ -66,4 +68,43 @@ public abstract class BillItem {
this.status = status; this.status = status;
this.type = type; this.type = type;
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeDouble(this.money);
dest.writeInt(this.textSize);
dest.writeInt(this.textColor);
dest.writeInt(this.bgColor);
dest.writeInt(this.status);
dest.writeByte(this.type);
}
protected BillItem(Parcel in) {
this.name = in.readString();
this.money = in.readDouble();
this.textSize = in.readInt();
this.textColor = in.readInt();
this.bgColor = in.readInt();
this.status = in.readInt();
this.type = in.readByte();
}
public static final Creator<BillItem> CREATOR = new Creator<BillItem>() {
@Override
public BillItem createFromParcel(Parcel source) {
return new BillItem(source);
}
@Override
public BillItem[] newArray(int size) {
return new BillItem[size];
}
};
} }
...@@ -33,7 +33,11 @@ public class ShoppingCart { ...@@ -33,7 +33,11 @@ public class ShoppingCart {
public static ShoppingCart getInstance() { public static ShoppingCart getInstance() {
if (shoppingCart == null) { if (shoppingCart == null) {
shoppingCart = new ShoppingCart(); synchronized (ShoppingCart.class) {
if (shoppingCart == null) {
shoppingCart = new ShoppingCart();
}
}
} }
return shoppingCart; return shoppingCart;
} }
...@@ -83,7 +87,7 @@ public class ShoppingCart { ...@@ -83,7 +87,7 @@ public class ShoppingCart {
private ShoppingCartNumberChange cartNumberChange = new ShoppingCartNumberChange(orderCommodityList); private ShoppingCartNumberChange cartNumberChange = new ShoppingCartNumberChange(orderCommodityList);
public void changeNumber(int number, OrderDetail orderFood,OrderDetail orderMainFood, int select_Full_start_position, int select_Full_end_position, ShoppingCartNumberChange.OnNumberChangeListener listener) { public void changeNumber(int number, OrderDetail orderFood, OrderDetail orderMainFood, int select_Full_start_position, int select_Full_end_position, ShoppingCartNumberChange.OnNumberChangeListener listener) {
cartNumberChange.changeNumber(number, orderFood, orderMainFood, select_Full_start_position, select_Full_end_position, listener); cartNumberChange.changeNumber(number, orderFood, orderMainFood, select_Full_start_position, select_Full_end_position, listener);
} }
...@@ -212,7 +216,7 @@ public class ShoppingCart { ...@@ -212,7 +216,7 @@ public class ShoppingCart {
* @return * @return
*/ */
public MultyDiscount addNomalDiscountToLinked(MultyDiscount multyDiscounts, Discount discount, int status) { public MultyDiscount addNomalDiscountToLinked(MultyDiscount multyDiscounts, Discount discount, int status) {
MultyDiscount nomalDiscount = new NomalDiscount(discount.getRemark(), status, multyDiscounts, discount); MultyDiscount nomalDiscount = new NomalDiscount(discount.getRemark(), status, multyDiscounts, discount);
return nomalDiscount; return nomalDiscount;
} }
......
package com.gingersoft.gsa.cloud.order.order; package com.gingersoft.gsa.cloud.order.order;
import android.content.Context; import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo; import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.table.TableBean; import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.order.bean.request.DeleteOrderRequest; import com.gingersoft.gsa.cloud.order.bean.request.DeleteOrderRequest;
import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest;
import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse; import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail; import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod; import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.SaleRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.RefundActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.RetrievalActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.SaleActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.TipsActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.VoidActionImpl;
import com.jess.arms.mvp.IView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
...@@ -47,7 +30,11 @@ public class DoshokuOrder extends BaseOrder { ...@@ -47,7 +30,11 @@ public class DoshokuOrder extends BaseOrder {
public static DoshokuOrder getInstance() { public static DoshokuOrder getInstance() {
if (doshokuOrder == null) { if (doshokuOrder == null) {
doshokuOrder = new DoshokuOrder(); synchronized (DoshokuOrder.class) {
if (doshokuOrder == null) {
doshokuOrder = new DoshokuOrder();
}
}
} }
return doshokuOrder; return doshokuOrder;
} }
...@@ -146,6 +133,9 @@ public class DoshokuOrder extends BaseOrder { ...@@ -146,6 +133,9 @@ public class DoshokuOrder extends BaseOrder {
} }
public boolean needUpdateMemberInfo() { public boolean needUpdateMemberInfo() {
if (TextUtils.isEmpty(memberUpdateStatus)) {
return false;
}
String[] status = memberUpdateStatus.split("-"); String[] status = memberUpdateStatus.split("-");
if (status.length == 2) { if (status.length == 2) {
if (Boolean.parseBoolean(status[0]) != Boolean.parseBoolean(status[1])) { if (Boolean.parseBoolean(status[0]) != Boolean.parseBoolean(status[1])) {
...@@ -158,27 +148,6 @@ public class DoshokuOrder extends BaseOrder { ...@@ -158,27 +148,6 @@ public class DoshokuOrder extends BaseOrder {
} }
} }
public void pay(Context context, IView iView, SaleRequest saleRequest, GetTxnIdRequest getTxnIdRequest, TableBean.DataBean tableBean, MealOrderPayRequest orderPayRequest, List<BillItem> billItemList, List<PayMethod> payMethodList) {
PosPay.sendRequest(new SaleActionImpl(context, iView, PosAction.SALE, saleRequest, getTxnIdRequest, tableBean, orderPayRequest, billItemList, payMethodList, true));
}
public void refund(Context context, IView iView, RefundRequest request, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new RefundActionImpl(context, iView, PosAction.REFUND, request, getTxnIdRequest, onPosActionListener, true));
}
public void voidO(Context context, IView iView, VoidRequest request, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new VoidActionImpl(context, iView, PosAction.VOID, request, getTxnIdRequest, onPosActionListener, true));
}
public void tip(Context context, IView iView, GetTxnIdRequest txnIdRequest, AdjustTipRequest tipRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new TipsActionImpl(context, iView, PosAction.TIP, txnIdRequest, tipRequest, onPosActionListener, true));
}
public void retrieval(Context context, IView iView, RetrievalRequest request, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new RetrievalActionImpl(context, iView, PosAction.RETRIEVAL, request, onPosActionListener, true));
}
@Override @Override
public void initialization() { public void initialization() {
if (deleteMealOrders != null) { if (deleteMealOrders != null) {
......
...@@ -16,7 +16,11 @@ public class TakeawayOrder extends BaseOrder { ...@@ -16,7 +16,11 @@ public class TakeawayOrder extends BaseOrder {
public static TakeawayOrder getInstance() { public static TakeawayOrder getInstance() {
if (takeawayOrder == null) { if (takeawayOrder == null) {
takeawayOrder = new TakeawayOrder(); synchronized (TakeawayOrder.class) {
if (takeawayOrder == null) {
takeawayOrder = new TakeawayOrder();
}
}
} }
return takeawayOrder; return takeawayOrder;
} }
......
package com.gingersoft.gsa.cloud.pay.bean;
import android.os.Parcel;
import android.os.Parcelable;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import lombok.Data;
/**
* @作者: bin
* @創建時間: 2020-12-30 16:11
* @更新時間: 2020-12-30 16:11
* @描述:
*/
@Data
public class PosActionStatusExceptionParam implements Parcelable {
private String txnId;
private PosAction posAction;
private long orderNum;
private double amount;
private String payMethodName;
public PosActionStatusExceptionParam() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.txnId);
dest.writeInt(this.posAction == null ? -1 : this.posAction.ordinal());
dest.writeLong(this.orderNum);
dest.writeDouble(this.amount);
dest.writeString(this.payMethodName);
}
protected PosActionStatusExceptionParam(Parcel in) {
this.txnId = in.readString();
int tmpPosAction = in.readInt();
this.posAction = tmpPosAction == -1 ? null : PosAction.values()[tmpPosAction];
this.orderNum = in.readLong();
this.amount = in.readDouble();
this.payMethodName = in.readString();
}
public static final Creator<PosActionStatusExceptionParam> CREATOR = new Creator<PosActionStatusExceptionParam>() {
@Override
public PosActionStatusExceptionParam createFromParcel(Parcel source) {
return new PosActionStatusExceptionParam(source);
}
@Override
public PosActionStatusExceptionParam[] newArray(int size) {
return new PosActionStatusExceptionParam[size];
}
};
}
...@@ -12,6 +12,9 @@ public interface PayErrorCode { ...@@ -12,6 +12,9 @@ public interface PayErrorCode {
* pos回調為Null * pos回調為Null
*/ */
String pos_response_null = "[100]"; String pos_response_null = "[100]";
/**
* pos回調status != 00
*/
String pos_response_101 = "[101]"; String pos_response_101 = "[101]";
/** /**
......
...@@ -31,7 +31,7 @@ public abstract class IPosAction { ...@@ -31,7 +31,7 @@ public abstract class IPosAction {
private final String mLoadingActionText = "中..."; private final String mLoadingActionText = "中...";
private final String mLoadingActionComplteText = "成功"; private final String mLoadingActionComplteText = "成功";
private final long mCancelDelayMillis = 1000; private final long mCancelDelayMillis = 1500;
public IPosAction(Context context, IView iView, PosAction action, boolean showLoading) { public IPosAction(Context context, IView iView, PosAction action, boolean showLoading) {
this.mContext = context; this.mContext = context;
...@@ -80,7 +80,7 @@ public abstract class IPosAction { ...@@ -80,7 +80,7 @@ public abstract class IPosAction {
} }
if (e.getMessage().contains(PayErrorCode.pos_response_null)) { if (e.getMessage().contains(PayErrorCode.pos_response_null)) {
if (mOnPosActionListener != null) { if (mOnPosActionListener != null) {
mOnPosActionListener.onResponseNull(); mOnPosActionListener.onPosException(null);
} }
} }
} }
...@@ -92,44 +92,19 @@ public abstract class IPosAction { ...@@ -92,44 +92,19 @@ public abstract class IPosAction {
} }
/** /**
* 根據Pos事件類型獲取業務類型
*
* @param eventName
* @return
*/
protected String getActionNameByEventName(String eventName) {
switch (eventName) {
case com.etps.aca.lib.constant.Constant.EVENT.NAME.SALE_RESP:
return PosAction.SALE.getActionName();
case com.etps.aca.lib.constant.Constant.EVENT.NAME.VOID_RESP:
return PosAction.VOID.getActionName();
case com.etps.aca.lib.constant.Constant.EVENT.NAME.REFUND_RESP:
return PosAction.RETRIEVAL.getActionName();
case com.etps.aca.lib.constant.Constant.EVENT.NAME.ADJUST_RESP:
return PosAction.TIP.getActionName();
case "RETRIEVAL_RESP":
return PosAction.RETRIEVAL.getActionName();
case "SETTLE_RESP":
return PosAction.SETTLEMENT.getActionName();
}
return "未知動作";
}
/**
* 根據業務回調狀態,返回事項上傳狀態 * 根據業務回調狀態,返回事項上傳狀態
* *
* @param status * @param status
* @return * @return
*/ */
protected byte getPosMatterStatus(String status) { protected byte getPosMatterStatus(String status) {
switch (status) { if (PayStatusCode.withSuccess(status)) {
case PayStatusCode.PAY_STATUS_00: return PosMatter.status_1;
return PosMatter.status_0; } else if (PayStatusCode.withException(status)) {
default: return PosMatter.status_0;
return PosMatter.status_2; } else {
return PosMatter.status_2;
} }
} }
} }
package com.gingersoft.gsa.cloud.pay.pos;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RetrievalRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SaleRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SettlementRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019-11-01
* 修订历史:2019-11-01
* 描述:
*/
public interface IPosCallback {
void onSaleCall(SaleRespose response);
void onVoidCall(VoidRespose response);
void onRefundCall(RefundRespose response);
void onRetrievalCall(RetrievalRespose response);
void onAdjustCall(AdjustTipRespose response);
void onSettleCall(SettlementRespose response);
void onPrinterCall(String response);
}
...@@ -10,12 +10,26 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosRespo ...@@ -10,12 +10,26 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosRespo
*/ */
public interface OnPosActionListener { public interface OnPosActionListener {
void onSuccess(HywebPosResponse response); /**
* N5回調成功
* @param response
*/
void onPosSuccess(HywebPosResponse response);
void onError(Throwable e); /**
* N6回調狀態異常,需要去重試查詢
*/
void onPosException(HywebPosResponse response);
/** /**
* N6回調失敗,需要去重試查詢 * 更新狀態成功
* @param response
*/ */
void onResponseNull(); void onSuccess(HywebPosResponse response);
/**
* 更新狀態失敗
* @param e
*/
void onError(Throwable e);
} }
...@@ -27,4 +27,5 @@ public enum PosAction { ...@@ -27,4 +27,5 @@ public enum PosAction {
return actionName + "回調異常"; return actionName + "回調異常";
} }
} }
package com.gingersoft.gsa.cloud.pay.pos; package com.gingersoft.gsa.cloud.pay.pos;
import android.content.Context;
import com.etps.aca.lib.activity.CommandActivity; import com.etps.aca.lib.activity.CommandActivity;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.SaleRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.command.CommandImpl; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.command.CommandImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.RefundActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.RetrievalActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.SaleActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.TipsActionImpl;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.imp.VoidActionImpl;
import com.jess.arms.mvp.IView;
import java.util.List;
/** /**
* @作者: bin * @作者: bin
...@@ -9,7 +29,7 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.command.CommandImpl; ...@@ -9,7 +29,7 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.command.CommandImpl;
* @更新時間: 2020-12-26 10:32 * @更新時間: 2020-12-26 10:32
* @描述: * @描述:
*/ */
public class PosPay { public final class PosPay {
public static void sendRequest(IPosAction action) { public static void sendRequest(IPosAction action) {
...@@ -23,4 +43,25 @@ public class PosPay { ...@@ -23,4 +43,25 @@ public class PosPay {
// } // }
} }
public static void pay(Context context, IView iView, SaleRequest saleRequest, GetTxnIdRequest getTxnIdRequest, TableBean.DataBean tableBean, MealOrderPayRequest orderPayRequest, List<BillItem> billItemList, List<PayMethod> payMethodList) {
PosPay.sendRequest(new SaleActionImpl(context, iView, PosAction.SALE, saleRequest, getTxnIdRequest, tableBean, orderPayRequest, billItemList, payMethodList, true));
}
public static void tip(Context context, IView iView, GetTxnIdRequest txnIdRequest, AdjustTipRequest tipRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new TipsActionImpl(context, iView, PosAction.TIP, txnIdRequest, tipRequest, onPosActionListener, true));
}
public static void refund(Context context, IView iView, RefundRequest request, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new RefundActionImpl(context, iView, PosAction.REFUND, request, getTxnIdRequest, onPosActionListener, true));
}
public static void voidO(Context context, IView iView, VoidRequest request, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new VoidActionImpl(context, iView, PosAction.VOID, request, getTxnIdRequest, onPosActionListener, true));
}
public static void retrieval(Context context, IView iView, RetrievalRequest request, OnPosActionListener onPosActionListener) {
PosPay.sendRequest(new RetrievalActionImpl(context, iView, PosAction.RETRIEVAL, 111, request, onPosActionListener, false));
}
} }
package com.gingersoft.gsa.cloud.pay.pos.bbpos;
import com.gingersoft.gsa.cloud.pay.pos.IPosCallback;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RetrievalRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SaleRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SettlementRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
/**
* @作者: bin
* @創建時間: 2020-12-26 10:38
* @更新時間: 2020-12-26 10:38
* @描述:
*/
public class BBPosCallback implements IPosCallback {
@Override
public void onSaleCall(SaleRespose response) {
}
@Override
public void onVoidCall(VoidRespose response) {
}
@Override
public void onRefundCall(RefundRespose response) {
}
@Override
public void onRetrievalCall(RetrievalRespose response) {
}
@Override
public void onAdjustCall(AdjustTipRespose response) {
}
@Override
public void onSettleCall(SettlementRespose response) {
}
@Override
public void onPrinterCall(String response) {
}
}
package com.gingersoft.gsa.cloud.pay.pos.bean; package com.gingersoft.gsa.cloud.pay.pos.bean;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -9,7 +12,7 @@ import lombok.Data; ...@@ -9,7 +12,7 @@ import lombok.Data;
* @描述: 事項實體 * @描述: 事項實體
*/ */
@Data @Data
public class PosMatter { public class PosMatter implements Parcelable {
private Long id; private Long id;
/** /**
...@@ -74,4 +77,59 @@ public class PosMatter { ...@@ -74,4 +77,59 @@ public class PosMatter {
public static final double POINTS = 0.00; public static final double POINTS = 0.00;
public PosMatter() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(this.id);
dest.writeString(this.payId);
dest.writeString(this.refundId);
dest.writeString(this.deviceId);
dest.writeValue(this.orderId);
dest.writeValue(this.businessType);
dest.writeValue(this.status);
dest.writeValue(this.tableId);
dest.writeValue(this.tableExtId);
dest.writeValue(this.payMethodId);
dest.writeValue(this.amount);
dest.writeString(this.content);
dest.writeValue(this.linePayType);
dest.writeValue(this.tipsPrice);
}
protected PosMatter(Parcel in) {
this.id = (Long) in.readValue(Long.class.getClassLoader());
this.payId = in.readString();
this.refundId = in.readString();
this.deviceId = in.readString();
this.orderId = (Long) in.readValue(Long.class.getClassLoader());
this.businessType = (Byte) in.readValue(Byte.class.getClassLoader());
this.status = (Byte) in.readValue(Byte.class.getClassLoader());
this.tableId = (Long) in.readValue(Long.class.getClassLoader());
this.tableExtId = (Long) in.readValue(Long.class.getClassLoader());
this.payMethodId = (Long) in.readValue(Long.class.getClassLoader());
this.amount = (Double) in.readValue(Double.class.getClassLoader());
this.content = in.readString();
this.linePayType = (Byte) in.readValue(Byte.class.getClassLoader());
this.tipsPrice = (Double) in.readValue(Double.class.getClassLoader());
}
public static final Creator<PosMatter> CREATOR = new Creator<PosMatter>() {
@Override
public PosMatter createFromParcel(Parcel source) {
return new PosMatter(source);
}
@Override
public PosMatter[] newArray(int size) {
return new PosMatter[size];
}
};
} }
package com.gingersoft.gsa.cloud.pay.pos.fragment;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.common.constans.AppConstans;
import com.gingersoft.gsa.cloud.order.R;
import com.gingersoft.gsa.cloud.order.R2;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.mvp.IView;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import butterknife.BindView;
import butterknife.OnClick;
/**
* @作者: bin
* @創建時間: 2020-12-30 10:37
* @更新時間: 2020-12-30 10:37
* @描述:支付狀態異常頁面,POS未回調成功的情況下顯示此頁面,重試POS查詢狀態
*/
public class PosActionStatusExceptionFragment extends BaseFragment implements IView {
@BindView(R2.id.tv_order_num)
TextView tvOrderNum;
@BindView(R2.id.tv_pay_status)
TextView tvPayStatus;
@BindView(R2.id.pro_pay_status)
ProgressBar proPayStatus;
@BindView(R2.id.tv_loading_text)
TextView tvLoadingText;
@BindView(R2.id.tv_amount)
TextView tvAmount;
@BindView(R2.id.tv_paymethod)
TextView tvPaymethod;
@BindView(R2.id.btn_refresh_status)
QMUIAlphaButton btnRefreshStatus;
@BindView(R2.id.btn_back)
QMUIAlphaButton btnBack;
@BindView(R2.id.ll_content)
LinearLayout llContent;
@BindView(R2.id.rl_container)
RelativeLayout rlContainer;
private PosActionStatusExceptionParam mPosStatusExceptionParam;
public static PosActionStatusExceptionFragment newInstance(PosActionStatusExceptionParam posStatusExceptionParam) {
Bundle args = new Bundle();
PosActionStatusExceptionFragment fragment = new PosActionStatusExceptionFragment();
args.putParcelable("posStatusExceptionParam", posStatusExceptionParam);
fragment.setArguments(args);
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.pay_fragment_pos_status_exception, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
Bundle bundle = getArguments();
mPosStatusExceptionParam = bundle.getParcelable("posStatusExceptionParam");
showStatusLoading();
initPage();
retrievalStatus();
}
private void initPage() {
tvOrderNum.setText("單號:" + mPosStatusExceptionParam.getOrderNum());
tvAmount.setText(AppConstans.CARSH_STR + mPosStatusExceptionParam.getAmount());
tvPaymethod.setText(mPosStatusExceptionParam.getPayMethodName());
}
private void showStatusLoading() {
tvPayStatus.setVisibility(View.INVISIBLE);
proPayStatus.setVisibility(View.VISIBLE);
tvLoadingText.setVisibility(View.VISIBLE);
}
private void hideStatusLoading() {
tvPayStatus.setVisibility(View.VISIBLE);
proPayStatus.setVisibility(View.INVISIBLE);
tvLoadingText.setVisibility(View.INVISIBLE);
}
private void retrievalStatus() {
RetrievalRequest retrievalRequest = new RetrievalRequest();
retrievalRequest.setTXN_ID(mPosStatusExceptionParam.getTxnId());
PosPay.retrieval(mContext, this, retrievalRequest, new OnPosActionListener() {
@Override
public void onPosSuccess(HywebPosResponse response) {
Drawable drawable;
if (PayStatusCode.withSuccess(response.getSTATUS())) {
drawable = getResources().getDrawable(R.mipmap.pay_status_success);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
tvPayStatus.setCompoundDrawables(null, drawable, null, null);
tvPayStatus.setText(PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()));
} else {
drawable = getResources().getDrawable(R.mipmap.pay_status_exception);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
}
tvPayStatus.setCompoundDrawables(null, drawable, null, null);
tvPayStatus.setText(PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()));
hideStatusLoading();
}
@Override
public void onPosException(HywebPosResponse response) {
hideStatusLoading();
}
@Override
public void onSuccess(HywebPosResponse response) {
}
@Override
public void onError(Throwable e) {
hideStatusLoading();
}
});
}
// private MealOrderPayRequest getMealOrderPayRequest(){
// SaleRequest saleRequest = new SaleRequest();
// saleRequest.setPAYMENT_APP_ID(PayMethodConstant.PAY_TYPE_CC);
// saleRequest.setTXN_AMT(DoshokuOrder.getInstance().getShoppingCart().getTotalAmount());
// saleRequest.setTIPS(0);
//
// GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
// txnIdRequest.setOrderId(DoshokuOrder.getInstance().getOrderId());
// if (!TextUtils.isEmpty(DoshokuOrder.getInstance().getOpenTableInfo().getTableNumber())) {
// txnIdRequest.setTableExtId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
// } else {
// txnIdRequest.setTableId(DoshokuOrder.getInstance().getOpenTableInfo().getId());
// }
// txnIdRequest.setPayMethodId(hywebPayMethod.getId());
// txnIdRequest.setAmount(hywebPayMethod.getPayMoney());
//
// MealOrderPayRequest orderPayRequest = mPresenter.getOrderPayRequest(gsaPayView);
// List<BillItem> billItemList = DoshokuOrder.getInstance().getShoppingCart().getBillItemList();
// }
@Override
public void setData(@Nullable Object data) {
}
@OnClick({R2.id.btn_refresh_status, R2.id.btn_back})
public void onViewClicked(View view) {
int id = view.getId();
if (id == R.id.btn_back) {
killMyself();
} else if (id == R.id.btn_refresh_status) {
retrievalStatus();
}
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
}
@Override
public void launchActivity(@NonNull Intent intent) {
}
@Override
public void killMyself() {
_mActivity.onBackPressed();
}
}
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg;
import lombok.Getter;
import lombok.Setter;
/**
* @作者: bin
* @創建時間: 2020-12-26 16:46
* @更新時間: 2020-12-26 16:46
* @描述:
*/
@Getter
@Setter
public class GetTipTxnIdResponse {
private String tipTxnId;
}
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -10,7 +13,7 @@ import lombok.Data; ...@@ -10,7 +13,7 @@ import lombok.Data;
* 描述: * 描述:
*/ */
@Data @Data
public class AdjustTipRespose extends HywebPosResponse { public class AdjustTipRespose extends HywebPosResponse implements Parcelable {
/** /**
* EVENT_NAME : ADJUST_RESP * EVENT_NAME : ADJUST_RESP
...@@ -27,9 +30,45 @@ public class AdjustTipRespose extends HywebPosResponse { ...@@ -27,9 +30,45 @@ public class AdjustTipRespose extends HywebPosResponse {
private String PAYMENT_TYPE; private String PAYMENT_TYPE;
private String RESP_CODE; private String RESP_CODE;
private double TIPS; // private double TIPS;
private String HOST_REF; private String HOST_REF;
private String TXN_TIME; private String TXN_TIME;
private String TXN_DATE; private String TXN_DATE;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(this.PAYMENT_TYPE);
dest.writeString(this.RESP_CODE);
dest.writeString(this.HOST_REF);
dest.writeString(this.TXN_TIME);
dest.writeString(this.TXN_DATE);
}
protected AdjustTipRespose(Parcel in) {
super(in);
this.PAYMENT_TYPE = in.readString();
this.RESP_CODE = in.readString();
this.HOST_REF = in.readString();
this.TXN_TIME = in.readString();
this.TXN_DATE = in.readString();
}
public static final Creator<AdjustTipRespose> CREATOR = new Creator<AdjustTipRespose>() {
@Override
public AdjustTipRespose createFromParcel(Parcel source) {
return new AdjustTipRespose(source);
}
@Override
public AdjustTipRespose[] newArray(int size) {
return new AdjustTipRespose[size];
}
};
} }
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -9,11 +12,36 @@ import lombok.Data; ...@@ -9,11 +12,36 @@ import lombok.Data;
* @描述: * @描述:
*/ */
@Data @Data
public abstract class HywebPosResponse { public class HywebPosResponse implements Parcelable {
protected String EVENT_NAME; protected String EVENT_NAME;
protected String STATUS; protected String STATUS;
protected String TXN_ID; protected String TXN_ID;
protected double TXN_AMT; protected double TXN_AMT = 0.0;
protected double TIPS = 0.0;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.EVENT_NAME);
dest.writeString(this.STATUS);
dest.writeString(this.TXN_ID);
dest.writeDouble(this.TXN_AMT);
dest.writeDouble(this.TIPS);
}
protected HywebPosResponse(Parcel in) {
this.EVENT_NAME = in.readString();
this.STATUS = in.readString();
this.TXN_ID = in.readString();
this.TXN_AMT = in.readDouble();
this.TIPS = in.readDouble();
}
} }
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -10,7 +13,7 @@ import lombok.Data; ...@@ -10,7 +13,7 @@ import lombok.Data;
* 描述: * 描述:
*/ */
@Data @Data
public class RefundRespose extends HywebPosResponse { public class RefundRespose extends HywebPosResponse implements Parcelable {
//N5取消回调数据 //N5取消回调数据
private String RESP_CODE; private String RESP_CODE;
...@@ -19,4 +22,40 @@ public class RefundRespose extends HywebPosResponse { ...@@ -19,4 +22,40 @@ public class RefundRespose extends HywebPosResponse {
private String TXN_DATE; private String TXN_DATE;
private String HOST_REF; private String HOST_REF;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(this.RESP_CODE);
dest.writeString(this.TRACE_NO);
dest.writeString(this.TXN_TIME);
dest.writeString(this.TXN_DATE);
dest.writeString(this.HOST_REF);
}
protected RefundRespose(Parcel in) {
super(in);
this.RESP_CODE = in.readString();
this.TRACE_NO = in.readString();
this.TXN_TIME = in.readString();
this.TXN_DATE = in.readString();
this.HOST_REF = in.readString();
}
public static final Creator<RefundRespose> CREATOR = new Creator<RefundRespose>() {
@Override
public RefundRespose createFromParcel(Parcel source) {
return new RefundRespose(source);
}
@Override
public RefundRespose[] newArray(int size) {
return new RefundRespose[size];
}
};
} }
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -10,7 +13,7 @@ import lombok.Data; ...@@ -10,7 +13,7 @@ import lombok.Data;
* 描述: * 描述:
*/ */
@Data @Data
public class RetrievalRespose extends HywebPosResponse { public class RetrievalRespose extends HywebPosResponse implements Parcelable {
private String TXN_TYPE; private String TXN_TYPE;
// private String TXN_ID; // private String TXN_ID;
...@@ -18,7 +21,7 @@ public class RetrievalRespose extends HywebPosResponse { ...@@ -18,7 +21,7 @@ public class RetrievalRespose extends HywebPosResponse {
//仅当STATUS = 00时才返回以下字段 //仅当STATUS = 00时才返回以下字段
private String TXN_STATUS ; private String TXN_STATUS ;
// private String TXN_AMT ; // private String TXN_AMT ;
private double TIPS ; // private double TIPS ;
private String PAYMENT_TYPE ; private String PAYMENT_TYPE ;
private String RESP_CODE; private String RESP_CODE;
private String LOYALTY_TYPE; private String LOYALTY_TYPE;
...@@ -42,4 +45,75 @@ public class RetrievalRespose extends HywebPosResponse { ...@@ -42,4 +45,75 @@ public class RetrievalRespose extends HywebPosResponse {
private String EXPIRY_DATE ; private String EXPIRY_DATE ;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(this.TXN_TYPE);
dest.writeString(this.TXN_STATUS);
dest.writeString(this.PAYMENT_TYPE);
dest.writeString(this.RESP_CODE);
dest.writeString(this.LOYALTY_TYPE);
dest.writeString(this.CAMPAIGN_ID);
dest.writeString(this.TRACE_NO);
dest.writeString(this.TXN_DATE);
dest.writeString(this.TXN_TIME);
dest.writeString(this.HOST_REF);
dest.writeString(this.COUPON_ID);
dest.writeString(this.AUTH_CODE);
dest.writeInt(this.TENDER);
dest.writeDouble(this.AUTH_AMT);
dest.writeDouble(this.DISCOUNT);
dest.writeString(this.LOCAL_CUR);
dest.writeString(this.FOREIGN_CUR);
dest.writeDouble(this.FXRATE);
dest.writeDouble(this.FOREIGN_AMT);
dest.writeString(this.MID);
dest.writeString(this.TID);
dest.writeString(this.PAN);
dest.writeString(this.EXPIRY_DATE);
}
protected RetrievalRespose(Parcel in) {
super(in);
this.TXN_TYPE = in.readString();
this.TXN_STATUS = in.readString();
this.PAYMENT_TYPE = in.readString();
this.RESP_CODE = in.readString();
this.LOYALTY_TYPE = in.readString();
this.CAMPAIGN_ID = in.readString();
this.TRACE_NO = in.readString();
this.TXN_DATE = in.readString();
this.TXN_TIME = in.readString();
this.HOST_REF = in.readString();
this.COUPON_ID = in.readString();
this.AUTH_CODE = in.readString();
this.TENDER = in.readInt();
this.AUTH_AMT = in.readDouble();
this.DISCOUNT = in.readDouble();
this.LOCAL_CUR = in.readString();
this.FOREIGN_CUR = in.readString();
this.FXRATE = in.readDouble();
this.FOREIGN_AMT = in.readDouble();
this.MID = in.readString();
this.TID = in.readString();
this.PAN = in.readString();
this.EXPIRY_DATE = in.readString();
}
public static final Creator<RetrievalRespose> CREATOR = new Creator<RetrievalRespose>() {
@Override
public RetrievalRespose createFromParcel(Parcel source) {
return new RetrievalRespose(source);
}
@Override
public RetrievalRespose[] newArray(int size) {
return new RetrievalRespose[size];
}
};
} }
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -10,7 +13,7 @@ import lombok.Data; ...@@ -10,7 +13,7 @@ import lombok.Data;
* 描述: * 描述:
*/ */
@Data @Data
public class SaleRespose extends HywebPosResponse { public class SaleRespose extends HywebPosResponse implements Parcelable {
//N5支付回调数据 //N5支付回调数据
/** /**
...@@ -36,7 +39,7 @@ public class SaleRespose extends HywebPosResponse { ...@@ -36,7 +39,7 @@ public class SaleRespose extends HywebPosResponse {
private String PAYMENT_TYPE; private String PAYMENT_TYPE;
private String PAN; private String PAN;
private String TRACE_NO; private String TRACE_NO;
private double TIPS; // private double TIPS;
private String RESP_CODE; private String RESP_CODE;
private String HOST_REF; private String HOST_REF;
private String TXN_TIME; private String TXN_TIME;
...@@ -47,4 +50,52 @@ public class SaleRespose extends HywebPosResponse { ...@@ -47,4 +50,52 @@ public class SaleRespose extends HywebPosResponse {
private String TID; private String TID;
// private double TXN_AMT; // private double TXN_AMT;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(this.MID);
dest.writeString(this.PAYMENT_TYPE);
dest.writeString(this.PAN);
dest.writeString(this.TRACE_NO);
dest.writeString(this.RESP_CODE);
dest.writeString(this.HOST_REF);
dest.writeString(this.TXN_TIME);
dest.writeString(this.TXN_DATE);
dest.writeString(this.EXPIRY_DATE);
dest.writeString(this.AUTH_CODE);
dest.writeString(this.TID);
}
protected SaleRespose(Parcel in) {
super(in);
this.MID = in.readString();
this.PAYMENT_TYPE = in.readString();
this.PAN = in.readString();
this.TRACE_NO = in.readString();
this.RESP_CODE = in.readString();
this.HOST_REF = in.readString();
this.TXN_TIME = in.readString();
this.TXN_DATE = in.readString();
this.EXPIRY_DATE = in.readString();
this.AUTH_CODE = in.readString();
this.TID = in.readString();
}
public static final Creator<SaleRespose> CREATOR = new Creator<SaleRespose>() {
@Override
public SaleRespose createFromParcel(Parcel source) {
return new SaleRespose(source);
}
@Override
public SaleRespose[] newArray(int size) {
return new SaleRespose[size];
}
};
} }
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -10,7 +13,7 @@ import lombok.Data; ...@@ -10,7 +13,7 @@ import lombok.Data;
* 描述: * 描述:
*/ */
@Data @Data
public class SettlementRespose extends HywebPosResponse { public class SettlementRespose extends HywebPosResponse implements Parcelable {
/** /**
* EVENT_NAME : SETTLE_RESP * EVENT_NAME : SETTLE_RESP
...@@ -18,4 +21,29 @@ public class SettlementRespose extends HywebPosResponse { ...@@ -18,4 +21,29 @@ public class SettlementRespose extends HywebPosResponse {
*/ */
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
}
protected SettlementRespose(Parcel in) {
super(in);
}
public static final Creator<SettlementRespose> CREATOR = new Creator<SettlementRespose>() {
@Override
public SettlementRespose createFromParcel(Parcel source) {
return new SettlementRespose(source);
}
@Override
public SettlementRespose[] newArray(int size) {
return new SettlementRespose[size];
}
};
} }
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data; import lombok.Data;
/** /**
...@@ -10,7 +13,7 @@ import lombok.Data; ...@@ -10,7 +13,7 @@ import lombok.Data;
* 描述: * 描述:
*/ */
@Data @Data
public class VoidRespose extends HywebPosResponse { public class VoidRespose extends HywebPosResponse implements Parcelable {
//N5取消回调数据 //N5取消回调数据
// private String TXN_ID; // private String TXN_ID;
...@@ -21,4 +24,40 @@ public class VoidRespose extends HywebPosResponse { ...@@ -21,4 +24,40 @@ public class VoidRespose extends HywebPosResponse {
private String TXN_DATE; private String TXN_DATE;
private String HOST_REF; private String HOST_REF;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(this.RESP_CODE);
dest.writeString(this.TRACE_NO);
dest.writeString(this.TXN_TIME);
dest.writeString(this.TXN_DATE);
dest.writeString(this.HOST_REF);
}
protected VoidRespose(Parcel in) {
super(in);
this.RESP_CODE = in.readString();
this.TRACE_NO = in.readString();
this.TXN_TIME = in.readString();
this.TXN_DATE = in.readString();
this.HOST_REF = in.readString();
}
public static final Creator<VoidRespose> CREATOR = new Creator<VoidRespose>() {
@Override
public VoidRespose createFromParcel(Parcel source) {
return new VoidRespose(source);
}
@Override
public VoidRespose[] newArray(int size) {
return new VoidRespose[size];
}
};
} }
...@@ -92,7 +92,6 @@ public class CommandImpl implements ICommand { ...@@ -92,7 +92,6 @@ public class CommandImpl implements ICommand {
String eventName = msgObj.getString(Constant.EVENT.ATTR.EVENT_NAME); String eventName = msgObj.getString(Constant.EVENT.ATTR.EVENT_NAME);
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager(); AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
//kill掉n5頁回到原來的頁面 //kill掉n5頁回到原來的頁面
appManager.killActivity(CommandActivity.class); appManager.killActivity(CommandActivity.class);
...@@ -104,13 +103,11 @@ public class CommandImpl implements ICommand { ...@@ -104,13 +103,11 @@ public class CommandImpl implements ICommand {
LoganManager.w_code(TAG, "currentActivity : " + currentActivity.getClass().getName()); LoganManager.w_code(TAG, "currentActivity : " + currentActivity.getClass().getName());
HywebPosResponse posResponse = parsePosResponse(response, eventName); HywebPosResponse posResponse = parsePosResponse(response, eventName);
if (posResponse == null) { if (posResponse != null) {
onActionError(new Exception("回調異常" + PayErrorCode.pos_response_101));
} else {
/**
* 回調成功
*/
onActionComplte(context, posResponse, currentActivity); onActionComplte(context, posResponse, currentActivity);
} else {
// onActionError(new Exception("回調異常" + PayErrorCode.pos_response_101));
onActionError(new Exception(PayErrorCode.pos_response_101));
} }
} catch (JSONException e) { } catch (JSONException e) {
......
package com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant; package com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant;
import android.text.TextUtils;
/** /**
* @作者: bin * @作者: bin
* @創建時間: 2020-12-24 9:41 * @創建時間: 2020-12-24 9:41
...@@ -21,7 +23,7 @@ public class PayStatusCode { ...@@ -21,7 +23,7 @@ public class PayStatusCode {
*/ */
public static final String PAY_STATUS_00 = "00"; //成功 √ public static final String PAY_STATUS_00 = "00"; //成功 √
public static final String PAY_STATUS_02 = "02"; //微信、支付宝正在处理这笔退款请求(可认为已成功) √ public static final String PAY_STATUS_02 = "02"; //微信、支付宝正在处理这笔退款请求(可认为已成功) √
public static final String PAY_STATUS_03 = "03"; //确认/处理 (支付、清機 同步接口防止N5機器關機未收到結果) √
public static final String PAY_STATUS_09 = "09"; //用户取消 √ public static final String PAY_STATUS_09 = "09"; //用户取消 √
public static final String PAY_STATUS_10 = "10"; //主持人拒绝 √ public static final String PAY_STATUS_10 = "10"; //主持人拒绝 √
public static final String PAY_STATUS_11 = "11"; //用户撤销(应用于仅限微信/支付宝) √ public static final String PAY_STATUS_11 = "11"; //用户撤销(应用于仅限微信/支付宝) √
...@@ -31,10 +33,31 @@ public class PayStatusCode { ...@@ -31,10 +33,31 @@ public class PayStatusCode {
public static final String PAY_STATUS_91 = "91"; //功能或 付款方式没有 支持的 √ public static final String PAY_STATUS_91 = "91"; //功能或 付款方式没有 支持的 √
public static final String PAY_STATUS_97 = "97"; //N5 POS忙碌 √ public static final String PAY_STATUS_97 = "97"; //N5 POS忙碌 √
public static final String PAY_STATUS_98 = "98"; //超时 √ public static final String PAY_STATUS_98 = "98"; //超时 √
/**
* 以下狀態認為是異常情況
*/
public static final String PAY_STATUS_03 = "03"; //确认/处理 (支付、清機 同步接口防止N5機器關機未收到結果) √
public static final String PAY_STATUS_99 = "99"; //未知错误 √ public static final String PAY_STATUS_99 = "99"; //未知错误 √
public static final String PAY_STATUS_200 = "200"; //自定義錯誤提示 √
public static boolean withSuccess(String status) {
if (TextUtils.isEmpty(status)) {
return false;
}
//這二种狀態都可認為已成功
if (status.equals(PAY_STATUS_00) || status.equals(PAY_STATUS_02)) {
return true;
}
return false;
}
public static boolean withException(String status) {
if (status.equals(PAY_STATUS_99) || status.equals(PAY_STATUS_03)) {
return true;
}
return false;
}
public static String getHywebRequestTextByCode(String status) { public static String getHywebRequestTextByCode(String status) {
switch (status) { switch (status) {
......
...@@ -44,8 +44,8 @@ public class RefundActionImpl extends IPosAction { ...@@ -44,8 +44,8 @@ public class RefundActionImpl extends IPosAction {
private RefundRequest mRefundRequest; private RefundRequest mRefundRequest;
public RefundActionImpl(Context context , IView iView, PosAction action,RefundRequest refundRequest, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener ,boolean showLoading) { public RefundActionImpl(Context context, IView iView, PosAction action, RefundRequest refundRequest, GetTxnIdRequest getTxnIdRequest, OnPosActionListener onPosActionListener, boolean showLoading) {
super(context,iView,action,showLoading); super(context, iView, action, showLoading);
this.mRefundRequest = refundRequest; this.mRefundRequest = refundRequest;
this.mGetTxnIdRequest = getTxnIdRequest; this.mGetTxnIdRequest = getTxnIdRequest;
this.mOnPosActionListener = onPosActionListener; this.mOnPosActionListener = onPosActionListener;
...@@ -104,24 +104,28 @@ public class RefundActionImpl extends IPosAction { ...@@ -104,24 +104,28 @@ public class RefundActionImpl extends IPosAction {
@Override @Override
public void onError(Throwable t) { public void onError(Throwable t) {
onActionError(new Exception(t.getMessage())); if (mOnPosActionListener != null) {
mOnPosActionListener.onError(new Exception(t.getMessage()));
}
} }
}); });
} }
/** /**
* 退款回調成功 * 退款回調成功
* 1、顯示退款結果 * 1、更新上傳退款狀態
* 2、更新上傳退款狀態 * 2、顯示退款結果
* *
* @param context * @param context
* @param response * @param response
* @param originalActivity * @param originalActivity
*/ */
@Override @Override
public void onActionComplte(Context context,HywebPosResponse response, Activity originalActivity) { public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
showRefundResult(context, response, originalActivity); if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(response);
}
//1、更新上傳退款狀態 //1、更新上傳退款狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/add", getPosMatterRequest((RefundRespose) response)) OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/add", getPosMatterRequest((RefundRespose) response))
...@@ -142,11 +146,16 @@ public class RefundActionImpl extends IPosAction { ...@@ -142,11 +146,16 @@ public class RefundActionImpl extends IPosAction {
@Override @Override
public void onNext(String result) { public void onNext(String result) {
showRefundResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) { if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class); BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) { if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) { if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
} else { } else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412)); onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412));
} }
...@@ -160,6 +169,7 @@ public class RefundActionImpl extends IPosAction { ...@@ -160,6 +169,7 @@ public class RefundActionImpl extends IPosAction {
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {
showRefundResult(context, response, originalActivity);
if (mOnPosActionListener != null) { if (mOnPosActionListener != null) {
mOnPosActionListener.onError(e); mOnPosActionListener.onError(e);
} }
...@@ -167,9 +177,6 @@ public class RefundActionImpl extends IPosAction { ...@@ -167,9 +177,6 @@ public class RefundActionImpl extends IPosAction {
@Override @Override
public void onComplete() { public void onComplete() {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
} }
}); });
} }
...@@ -182,7 +189,7 @@ public class RefundActionImpl extends IPosAction { ...@@ -182,7 +189,7 @@ public class RefundActionImpl extends IPosAction {
* @param originalActivity * @param originalActivity
*/ */
private void showRefundResult(Context context, HywebPosResponse response, Activity originalActivity) { private void showRefundResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (response.getSTATUS().equals(PayStatusCode.PAY_STATUS_00)) { if (PayStatusCode.withSuccess(response.getSTATUS())) {
//退款成功 //退款成功
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager(); AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
Activity activity = appManager.getCurrentActivity(); Activity activity = appManager.getCurrentActivity();
......
...@@ -13,6 +13,7 @@ import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode; ...@@ -13,6 +13,7 @@ import com.gingersoft.gsa.cloud.pay.contract.PayErrorCode;
import com.gingersoft.gsa.cloud.pay.pos.IPosAction; import com.gingersoft.gsa.cloud.pay.pos.IPosAction;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener; import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction; import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RetrievalRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
...@@ -36,9 +37,11 @@ import okhttp3.RequestBody; ...@@ -36,9 +37,11 @@ import okhttp3.RequestBody;
public class RetrievalActionImpl extends IPosAction { public class RetrievalActionImpl extends IPosAction {
private RetrievalRequest mRetrievalRequest; private RetrievalRequest mRetrievalRequest;
private long mOrderId;
public RetrievalActionImpl(Context context, IView iView, PosAction action, RetrievalRequest request, OnPosActionListener onPosActionListener, boolean showLoading) { public RetrievalActionImpl(Context context, IView iView, PosAction action, long orderId,RetrievalRequest request, OnPosActionListener onPosActionListener, boolean showLoading) {
super(context, iView, action, showLoading); super(context, iView, action, showLoading);
this.mOrderId = mOrderId;
this.mRetrievalRequest = request; this.mRetrievalRequest = request;
this.mOnPosActionListener = onPosActionListener; this.mOnPosActionListener = onPosActionListener;
} }
...@@ -60,11 +63,15 @@ public class RetrievalActionImpl extends IPosAction { ...@@ -60,11 +63,15 @@ public class RetrievalActionImpl extends IPosAction {
@Override @Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) { public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onPosSuccess(response);
}
String url = null; String url = null;
RequestBody requestBody; RequestBody requestBody;
switch (response.getEVENT_NAME()) { switch (response.getEVENT_NAME()) {
case Constant.EVENT.NAME.SALE_RESP: case Constant.EVENT.NAME.SALE_RESP:
// url = url = "posPay/updatePosMatter";
requestBody = getPosMatterSaleRequest((SaleRespose) response); requestBody = getPosMatterSaleRequest((SaleRespose) response);
break; break;
case Constant.EVENT.NAME.REFUND_RESP: case Constant.EVENT.NAME.REFUND_RESP:
...@@ -92,7 +99,9 @@ public class RetrievalActionImpl extends IPosAction { ...@@ -92,7 +99,9 @@ public class RetrievalActionImpl extends IPosAction {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class); BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) { if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) { if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
} else { } else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412)); onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412));
} }
...@@ -113,9 +122,6 @@ public class RetrievalActionImpl extends IPosAction { ...@@ -113,9 +122,6 @@ public class RetrievalActionImpl extends IPosAction {
@Override @Override
public void onComplete() { public void onComplete() {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
} }
}); });
...@@ -123,9 +129,15 @@ public class RetrievalActionImpl extends IPosAction { ...@@ -123,9 +129,15 @@ public class RetrievalActionImpl extends IPosAction {
private RequestBody getPosMatterSaleRequest(SaleRespose response) { private RequestBody getPosMatterSaleRequest(SaleRespose response) {
PosMatter posMatter = new PosMatter();
posMatter.setOrderId(mOrderId);
posMatter.setPayId(response.getTXN_ID());
posMatter.setContent(GsonUtils.GsonString(response));
posMatter.setStatus(getPosMatterStatus(response.getSTATUS()));
// mMealOrderPayRequest.setPosMatter(posMatter);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(response)); RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(posMatter));
String json = GsonUtils.GsonString(response); String json = GsonUtils.GsonString(posMatter);
return requestBody; return requestBody;
} }
......
...@@ -12,7 +12,7 @@ import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils; ...@@ -12,7 +12,7 @@ import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils; import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.component.ComponentAction; import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName; import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.order.bean.event.MealPayResultEvent; import com.gingersoft.gsa.cloud.order.bean.event.MealPayResultParam;
import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest; import com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest;
import com.gingersoft.gsa.cloud.order.billItem.BillItem; import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod; import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
...@@ -25,15 +25,10 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.SaleRequest; ...@@ -25,15 +25,10 @@ import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.SaleRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetTxnIdResponse; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetTxnIdResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SaleRespose; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.SaleRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
import com.gingersoft.gsa.cloud.pay.widget.StatusLoadingDialog; import com.gingersoft.gsa.cloud.pay.widget.StatusLoadingDialog;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.RxLifecycleUtils; import com.jess.arms.utils.RxLifecycleUtils;
import org.simple.eventbus.EventBus;
import java.util.List; import java.util.List;
import io.reactivex.Observer; import io.reactivex.Observer;
...@@ -118,7 +113,7 @@ public class SaleActionImpl extends IPosAction { ...@@ -118,7 +113,7 @@ public class SaleActionImpl extends IPosAction {
mTxnIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetTxnIdResponse.class); mTxnIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetTxnIdResponse.class);
if (mSaleRequest != null) { if (mSaleRequest != null) {
mSaleRequest.setTXN_ID(mTxnIdResponse.getTxnId()); mSaleRequest.setTXN_ID(mTxnIdResponse.getTxnId());
//調起N5支付 //調起N5支付 936E4F01A0A5473C971503433F78027E
onRequestPOS(GsonUtils.GsonString(mSaleRequest)); onRequestPOS(GsonUtils.GsonString(mSaleRequest));
canCelLoadingDialog(); canCelLoadingDialog();
} else { } else {
...@@ -148,8 +143,8 @@ public class SaleActionImpl extends IPosAction { ...@@ -148,8 +143,8 @@ public class SaleActionImpl extends IPosAction {
/** /**
* 支付回調成功 * 支付回調成功
* 1、顯示支付結果 * 1、更新上傳支付狀態
* 2、更新上傳支付狀態 * 2、顯示支付結果
* 3、跳轉支付詳情頁 * 3、跳轉支付詳情頁
* *
* @param context * @param context
...@@ -158,6 +153,9 @@ public class SaleActionImpl extends IPosAction { ...@@ -158,6 +153,9 @@ public class SaleActionImpl extends IPosAction {
*/ */
@Override @Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) { public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
//1、更新上傳支付狀態 //1、更新上傳支付狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/add", getPosMatterRequest((SaleRespose) response)) OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/add", getPosMatterRequest((SaleRespose) response))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
...@@ -184,7 +182,10 @@ public class SaleActionImpl extends IPosAction { ...@@ -184,7 +182,10 @@ public class SaleActionImpl extends IPosAction {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class); BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) { if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) { if (baseResult.isSuccess() && baseResult.getData() != null) {
startPayResultActivity(response); if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
startPayResultActivity(context, response);
} else { } else {
onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412)); onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.sale_412));
} }
...@@ -199,7 +200,7 @@ public class SaleActionImpl extends IPosAction { ...@@ -199,7 +200,7 @@ public class SaleActionImpl extends IPosAction {
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {
showPayResult(context, response, originalActivity); showPayResult(context, response, originalActivity);
startPayResultActivity(response); startPayResultActivity(context, response);
} }
@Override @Override
...@@ -216,17 +217,7 @@ public class SaleActionImpl extends IPosAction { ...@@ -216,17 +217,7 @@ public class SaleActionImpl extends IPosAction {
* @param originalActivity * @param originalActivity
*/ */
private void showPayResult(Context context, HywebPosResponse response, Activity originalActivity) { private void showPayResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (response.getSTATUS().equals(PayStatusCode.PAY_STATUS_00)) { super.onActionComplte(context, response, originalActivity);
//支付成功
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
Activity activity = appManager.getCurrentActivity();
if (activity.getClass().equals(originalActivity.getClass())) {
super.onActionComplte(context, response, originalActivity);
}
} else {
//支付失敗
onActionError(new Exception(mPosAction.getActionName() + PayStatusCode.getHywebRequestTextByCode(response.getSTATUS()) + PayErrorCode.tips_710));
}
} }
/** /**
...@@ -234,19 +225,27 @@ public class SaleActionImpl extends IPosAction { ...@@ -234,19 +225,27 @@ public class SaleActionImpl extends IPosAction {
* *
* @param response * @param response
*/ */
private void startPayResultActivity(HywebPosResponse response) { private void startPayResultActivity(Context context, HywebPosResponse response) {
MealPayResultParam payResultParam = new MealPayResultParam();
payResultParam.setTxnId(mTxnIdResponse.getTxnId());
payResultParam.setTableBean(mTableBean);
payResultParam.setMealOrderPayRequest(mMealOrderPayRequest);
payResultParam.setBillItemList(mBillItemList);
payResultParam.setPayMethodList(mPayMethodList);
payResultParam.setSaleRespose((SaleRespose) response);
//kill orderPayActivity,orderContentActivity,mealActivity
CC.obtainBuilder(ComponentName.COMPONENT_TABLE)
.setActionName(ComponentAction.Table.KILL_MEAL_ORDER_PAY)
.build()
.call();
CC.obtainBuilder(ComponentName.COMPONENT_PAY) CC.obtainBuilder(ComponentName.COMPONENT_PAY)
.setActionName(ComponentAction.Pay.OPEN_PAY_RESULT) .setActionName(ComponentAction.Pay.OPEN_PAY_RESULT)
.addParam("payResultParam", payResultParam)
.build() .build()
.call(); .call();
MealPayResultEvent payResultEvent = new MealPayResultEvent();
payResultEvent.setTxnId(mTxnIdResponse.getTxnId());
payResultEvent.setTableBean(mTableBean);
payResultEvent.setMealOrderPayRequest(mMealOrderPayRequest);
payResultEvent.setBillItemList(mBillItemList);
payResultEvent.setPayMethodList(mPayMethodList);
payResultEvent.setSaleRespose((SaleRespose) response);
EventBus.getDefault().post(payResultEvent, "onIntentPayStatusSuccess");
} }
private RequestBody getPosMatterRequest(SaleRespose response) { private RequestBody getPosMatterRequest(SaleRespose response) {
......
...@@ -15,7 +15,7 @@ import com.gingersoft.gsa.cloud.pay.pos.PosAction; ...@@ -15,7 +15,7 @@ import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter; import com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetTxnIdResponse; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.bg.GetTipTxnIdResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode; import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayStatusCode;
...@@ -43,7 +43,7 @@ public class TipsActionImpl extends IPosAction { ...@@ -43,7 +43,7 @@ public class TipsActionImpl extends IPosAction {
private AdjustTipRequest mAdjustTipRequest; private AdjustTipRequest mAdjustTipRequest;
private GetTxnIdRequest mTxnIdRequest; private GetTxnIdRequest mTxnIdRequest;
private GetTxnIdResponse mTxnIdResponse; private GetTipTxnIdResponse mTxnIdResponse;
private OnPosActionListener mOnPosActionListener; private OnPosActionListener mOnPosActionListener;
...@@ -56,7 +56,11 @@ public class TipsActionImpl extends IPosAction { ...@@ -56,7 +56,11 @@ public class TipsActionImpl extends IPosAction {
@Override @Override
protected void onRequestBefore() { protected void onRequestBefore() {
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getTipTxnId", null)
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(mTxnIdRequest));
String json = GsonUtils.GsonString(mTxnIdRequest);
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getTipTxnId", requestBody)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(Schedulers.io()) .observeOn(Schedulers.io())
.doOnSubscribe(disposable -> { .doOnSubscribe(disposable -> {
...@@ -77,9 +81,9 @@ public class TipsActionImpl extends IPosAction { ...@@ -77,9 +81,9 @@ public class TipsActionImpl extends IPosAction {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class); BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) { if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) { if (baseResult.isSuccess() && baseResult.getData() != null) {
mTxnIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetTxnIdResponse.class); mTxnIdResponse = GsonUtils.GsonToBean(baseResult.getData(), GetTipTxnIdResponse.class);
if (mAdjustTipRequest != null) { if (mAdjustTipRequest != null) {
mAdjustTipRequest.setTXN_ID(mTxnIdResponse.getTxnId()); mAdjustTipRequest.setTXN_ID(mTxnIdResponse.getTipTxnId());
//調起N5補小費 //調起N5補小費
onRequestPOS(GsonUtils.GsonString(mAdjustTipRequest)); onRequestPOS(GsonUtils.GsonString(mAdjustTipRequest));
canCelLoadingDialog(); canCelLoadingDialog();
...@@ -87,7 +91,11 @@ public class TipsActionImpl extends IPosAction { ...@@ -87,7 +91,11 @@ public class TipsActionImpl extends IPosAction {
onActionError(new Exception(error + PayErrorCode.tips_701)); onActionError(new Exception(error + PayErrorCode.tips_701));
} }
} else { } else {
onActionError(new Exception(error + PayErrorCode.tips_702)); if (!TextUtils.isEmpty(baseResult.getErrMsg())) {
onActionError(new Exception(baseResult.getErrMsg()));
} else {
onActionError(new Exception(error + PayErrorCode.tips_702));
}
} }
} else { } else {
onActionError(new Exception(error + PayErrorCode.tips_703)); onActionError(new Exception(error + PayErrorCode.tips_703));
...@@ -110,8 +118,8 @@ public class TipsActionImpl extends IPosAction { ...@@ -110,8 +118,8 @@ public class TipsActionImpl extends IPosAction {
/** /**
* 補小費回調成功 * 補小費回調成功
* 1、顯示小費結果 * 1、更新上傳小費狀態
* 2、更新上傳小費狀態 * 2、顯示小費結果
* 3、刷新當前頁面 * 3、刷新當前頁面
* *
* @param context * @param context
...@@ -121,10 +129,11 @@ public class TipsActionImpl extends IPosAction { ...@@ -121,10 +129,11 @@ public class TipsActionImpl extends IPosAction {
@Override @Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) { public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
//1、顯示小費結果 if (mOnPosActionListener != null) {
showTipsResult(context, response, originalActivity); mOnPosActionListener.onPosSuccess(response);
}
//2、更新上傳小費狀態 //1、更新上傳小費狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/updatePosTip", getPosMatterRequest((AdjustTipRespose) response)) OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/updatePosTip", getPosMatterRequest((AdjustTipRespose) response))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(Schedulers.io()) .observeOn(Schedulers.io())
...@@ -137,31 +146,37 @@ public class TipsActionImpl extends IPosAction { ...@@ -137,31 +146,37 @@ public class TipsActionImpl extends IPosAction {
}) })
.compose(RxLifecycleUtils.bindToLifecycle(mView)) .compose(RxLifecycleUtils.bindToLifecycle(mView))
.subscribe(new Observer<String>() { .subscribe(new Observer<String>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
} }
@Override @Override
public void onNext(String result) { public void onNext(String result) {
showTipsResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) { if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class); BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) { if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) { if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
} else { } else {
// onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_711)); onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_711));
} }
} else { } else {
// onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_712)); onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_712));
} }
} else { } else {
// onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_713)); onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_713));
} }
} }
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {
showTipsResult(context, response, originalActivity);
if (mOnPosActionListener != null) { if (mOnPosActionListener != null) {
mOnPosActionListener.onError(e); mOnPosActionListener.onError(e);
} }
...@@ -169,22 +184,19 @@ public class TipsActionImpl extends IPosAction { ...@@ -169,22 +184,19 @@ public class TipsActionImpl extends IPosAction {
@Override @Override
public void onComplete() { public void onComplete() {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
} }
}); });
} }
/** /**
* 1、顯示小費結果 * 2、顯示小費結果
* *
* @param context * @param context
* @param response * @param response
* @param originalActivity * @param originalActivity
*/ */
private void showTipsResult(Context context, HywebPosResponse response, Activity originalActivity) { private void showTipsResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (response.getSTATUS().equals(PayStatusCode.PAY_STATUS_00)) { if (PayStatusCode.withSuccess(response.getSTATUS())) {
//補小費成功 //補小費成功
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager(); AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
Activity activity = appManager.getCurrentActivity(); Activity activity = appManager.getCurrentActivity();
......
...@@ -55,7 +55,11 @@ public class VoidActionImpl extends IPosAction { ...@@ -55,7 +55,11 @@ public class VoidActionImpl extends IPosAction {
@Override @Override
protected void onRequestBefore() { protected void onRequestBefore() {
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getRefundTxnId", null)
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(mTxnIdRequest));
String json = GsonUtils.GsonString(mTxnIdRequest);
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "posPay/getCancelTxnId", requestBody)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(Schedulers.io()) .observeOn(Schedulers.io())
.doOnSubscribe(disposable -> { .doOnSubscribe(disposable -> {
...@@ -109,8 +113,9 @@ public class VoidActionImpl extends IPosAction { ...@@ -109,8 +113,9 @@ public class VoidActionImpl extends IPosAction {
/** /**
* 取消回調成功 * 取消回調成功
* 1、顯示取消結果 *
* 2、更新上傳取消狀態 * 1、更新上傳取消狀態
* 2、顯示取消結果
* 3、刷新當前頁面 * 3、刷新當前頁面
* *
* @param context * @param context
...@@ -120,10 +125,11 @@ public class VoidActionImpl extends IPosAction { ...@@ -120,10 +125,11 @@ public class VoidActionImpl extends IPosAction {
@Override @Override
public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) { public void onActionComplte(Context context, HywebPosResponse response, Activity originalActivity) {
//1、顯示取消結果 if (mOnPosActionListener != null) {
showVoidResult(context, response, originalActivity); mOnPosActionListener.onPosSuccess(response);
}
//2、更新上傳取消狀態 //1、更新上傳取消狀態
OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/updatePosCancel", getPosMatterRequest((VoidRespose) response)) OkHttp3Utils.post(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL + "orderPay/updatePosCancel", getPosMatterRequest((VoidRespose) response))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(Schedulers.io()) .observeOn(Schedulers.io())
...@@ -142,11 +148,16 @@ public class VoidActionImpl extends IPosAction { ...@@ -142,11 +148,16 @@ public class VoidActionImpl extends IPosAction {
@Override @Override
public void onNext(String result) { public void onNext(String result) {
showVoidResult(context, response, originalActivity);
if (!TextUtils.isEmpty(result)) { if (!TextUtils.isEmpty(result)) {
BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class); BaseResult baseResult = GsonUtils.GsonToBean(result, BaseResult.class);
if (baseResult != null) { if (baseResult != null) {
if (baseResult.isSuccess() && baseResult.getData() != null) { if (baseResult.isSuccess() && baseResult.getData() != null) {
if (mOnPosActionListener != null) {
mOnPosActionListener.onSuccess(response);
}
} else { } else {
// onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_711)); // onActionError(new Exception(mPosAction.getCallbackExceptionText() + PayErrorCode.tips_711));
} }
...@@ -160,6 +171,7 @@ public class VoidActionImpl extends IPosAction { ...@@ -160,6 +171,7 @@ public class VoidActionImpl extends IPosAction {
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {
showVoidResult(context, response, originalActivity);
if (mOnPosActionListener != null) { if (mOnPosActionListener != null) {
mOnPosActionListener.onError(e); mOnPosActionListener.onError(e);
} }
...@@ -175,14 +187,14 @@ public class VoidActionImpl extends IPosAction { ...@@ -175,14 +187,14 @@ public class VoidActionImpl extends IPosAction {
} }
/** /**
* 1、顯示小費結果 * 2、顯示小費結果
* *
* @param context * @param context
* @param response * @param response
* @param originalActivity * @param originalActivity
*/ */
private void showVoidResult(Context context, HywebPosResponse response, Activity originalActivity) { private void showVoidResult(Context context, HywebPosResponse response, Activity originalActivity) {
if (response.getSTATUS().equals(PayStatusCode.PAY_STATUS_00)) { if (PayStatusCode.withSuccess(response.getSTATUS())) {
//補小費成功 //補小費成功
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager(); AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
Activity activity = appManager.getCurrentActivity(); Activity activity = appManager.getCurrentActivity();
......
...@@ -12,7 +12,7 @@ import android.graphics.RectF; ...@@ -12,7 +12,7 @@ import android.graphics.RectF;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.gingersoft.runtime.pay_module.R; import com.gingersoft.gsa.cloud.order.R;
/** /**
* *
......
...@@ -7,9 +7,8 @@ import android.view.View; ...@@ -7,9 +7,8 @@ import android.view.View;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.gingersoft.gsa.cloud.order.R;
import com.gingersoft.gsa.cloud.pay.view.customstatus.CustomStatusView; import com.gingersoft.gsa.cloud.pay.view.customstatus.CustomStatusView;
import com.gingersoft.runtime.pay_module.R;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
...@@ -22,7 +21,7 @@ public class StatusLoadingDialog { ...@@ -22,7 +21,7 @@ public class StatusLoadingDialog {
private CustomStatusView as_status; private CustomStatusView as_status;
private TextView tv_status; private TextView tv_status;
private long mCancelDelayMillis = 1000; private long mCancelDelayMillis = 1500;
private String mLoadingText; private String mLoadingText;
public StatusLoadingDialog(Context context, String loadingText, long cancelDelayMillis) { public StatusLoadingDialog(Context context, String loadingText, long cancelDelayMillis) {
...@@ -53,7 +52,6 @@ public class StatusLoadingDialog { ...@@ -53,7 +52,6 @@ public class StatusLoadingDialog {
} }
public void loadSuccess() { public void loadSuccess() {
setStatusText(mLoadingText + "成功");
as_status.loadSuccess(); as_status.loadSuccess();
as_status.postDelayed(new Runnable() { as_status.postDelayed(new Runnable() {
@Override @Override
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/theme_white_color"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/tv_order_num"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_60"
android:gravity="center"
android:text="單號:123571416"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal3" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_50">
<TextView
android:id="@+id/tv_pay_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:drawablePadding="@dimen/dp_6"
android:drawableTop="@mipmap/pay_status_exception"
android:text="支付失敗"
android:textSize="@dimen/font_normal2"
android:textColor="@color/theme_black"/>
<ProgressBar
android:id="@+id/pro_pay_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:theme="@style/AppTheme"
android:visibility="invisible" />
<TextView
android:id="@+id/tv_loading_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/theme_black"
android:textSize="@dimen/font_normal"
android:text="@string/loading"
android:visibility="invisible"
android:layout_gravity="center_horizontal|bottom"/>
</FrameLayout>
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:text="$500"
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_32" />
<TextView
android:id="@+id/tv_paymethod"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_50"
android:gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:text="微信,支付寶"/>
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_refresh_status"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:layout_marginTop="@dimen/dp_50"
android:background="@color/theme_color"
android:text="刷新"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2"
app:cornerRadius="@dimen/dp_6" />
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_back"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:layout_marginTop="@dimen/dp_20"
android:background="@color/theme_grey_color"
android:text="返回"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2"
app:cornerRadius="@dimen/dp_6" />
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
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