Commit 66c18f25 by 宁斌

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

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