Commit 49b19237 by 宁斌

账单管理 订单操作封装

parent c18e0afb
/build
\ No newline at end of file
ext.mainApp = true //设置为true,表示此module为主app module,一直以application方式编译
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'com.didi.dokit'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
applicationId 'com.gingersoft.gsa.cloud'
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
multiDexEnabled true
// ndk{
// abiFilters "armeabi-v7a"
// }
}
resourcePrefix "app"
buildTypes {
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
buildConfigField "boolean", "USE_CANARY", "true"
minifyEnabled false
proguardFiles 'proguard.cfg'
}
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "boolean", "USE_CANARY", "false"
minifyEnabled false
zipAlignEnabled false
proguardFiles 'proguard.cfg'
}
}
lintOptions {
abortOnError false
}
dataBinding {
enabled = true
}
//修改生成的apk名字
applicationVariants.all { variant ->
variant.outputs.all {
def fileName
def date = new Date()
def formattedDate = date.format('yyyy-MM-dd')
if (variant.buildType.name == 'release') {
fileName = "${formattedDate}_GSA-Cloud_${variant.mergedFlavor.versionName}_正式版_.apk"
} else if (variant.buildType.name == 'Test') {
fileName = "${formattedDate}_GSA-Cloud_${variant.mergedFlavor.versionName}_測試版_.apk"
} else if (variant.buildType.name == 'debug') {
fileName = "${formattedDate}_GSA-Cloud_${variant.mergedFlavor.versionName}_debug_.apk"
}
outputFileName = fileName
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
\ No newline at end of file
package com.example.gsa_cloud2;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.example.gsa_cloud2", appContext.getPackageName());
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gsa_cloud2">
<!-- <application-->
<!-- android:allowBackup="true"-->
<!-- android:icon="@mipmap/ic_launcher"-->
<!-- android:label="@string/app_name"-->
<!-- android:roundIcon="@mipmap/ic_launcher_round"-->
<!-- android:supportsRtl="true"-->
<!-- android:theme="@style/AppTheme">-->
<!-- <activity android:name=".MainActivity">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<!-- </application>-->
</manifest>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<LinerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinerLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">GSA-Cloud2</string>
</resources>
\ No newline at end of file
<resources>
<!-- &lt;!&ndash; Base application theme. &ndash;&gt;-->
<!-- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">-->
<!-- &lt;!&ndash; Customize your theme here. &ndash;&gt;-->
<!-- <item name="colorPrimary">@color/colorPrimary</item>-->
<!-- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->
<!-- <item name="colorAccent">@color/colorAccent</item>-->
<!-- </style>-->
</resources>
\ No newline at end of file
package com.example.gsa_cloud2;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.mvp.model.discount;
package com.gingersoft.gsa.cloud.table.mvp.action.discount;
import android.app.Activity;
import android.text.InputType;
......@@ -76,6 +76,11 @@ public class BillDiscountAction implements Strategy<Discount> {
}
}
@Override
public void destroy() {
}
private void exclusiveDiscount(Discount discount) {
if (mListener != null) {
showExclusiveTipDialog(discount);
......
package com.gingersoft.gsa.cloud.table.mvp.model.discount;
package com.gingersoft.gsa.cloud.table.mvp.action.discount;
import android.app.Activity;
import android.text.InputType;
......@@ -93,6 +93,11 @@ public class MealDiscountAction implements Strategy<Discount> {
}
}
@Override
public void destroy() {
}
private void exclusiveDiscount(Discount discount) {
if (mListener != null) {
showExclusiveTipDialog(discount);
......
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.mvp.IView;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:取消订单
*/
public class CancelOrder implements Strategy<OrderManagerResponse> {
private final String TAG = "CancelOrder";
private BaseFragmentActivity mActivity;
private IView mRootView;
public CancelOrder(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
showCancelDialog(orderItem);
}
@Override
public void destroy() {
}
private void showCancelDialog(OrderManagerResponse datasBean) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(mActivity);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage("是否取消訂單?");
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
if (datasBean.withHywebPay()) {
hywebOrderCancle(datasBean);
} else {
if(cancelListener != null){
cancelListener.cancel(datasBean.getId());
}
}
});
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.create(R.style.MyDialogTheme2).show();
}
private void hywebOrderCancle(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
VoidRequest voidRequest = new VoidRequest();
PosPay.voidO(mActivity, mRootView, voidRequest, txnIdRequest, new OnPosActionListener<VoidRespose>() {
@Override
public void onPosSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
if(cancelListener != null){
cancelListener.refeshOrders();
}
}
@Override
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
@Override
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onUpdateStatusSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
private OnCancelListener cancelListener;
public void setCancelListener(OnCancelListener cancelListener) {
this.cancelListener = cancelListener;
}
public interface OnCancelListener{
void cancel(long orderId);
void refeshOrders();
}
}
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.cart.ShoppingCart;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.base.delegate.IActivity;
import com.jess.arms.mvp.IView;
import java.util.Date;
import java.util.List;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:修改订单
*/
public class ModifyOrderAction implements Strategy<OrderManagerResponse> {
private final String TAG = "ModifyOrderAction";
private BaseFragmentActivity mActivity;
private IView mRootView;
public ModifyOrderAction(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
//設置為修改訂單操作
doshokuOrder.setModifyOrder(true);
/**
* 緩存訂單信息
*/
OrderResponse orderBean = new OrderResponse();
orderBean.setId(orderItem.getId());
orderBean.setStatus(orderItem.getStatus());
orderBean.setOrderNo(orderItem.getOrderNo());
orderBean.setPerson(orderItem.getPerson());
orderBean.setCreateTime(orderItem.getCreateTime());
if (orderItem.getDiscountDetails() != null) {
orderBean.setDiscountDetails(orderItem.getDiscountDetails());
}
doshokuOrder.setOrderId(orderItem.getId());
doshokuOrder.setOrderPlaced(orderBean);
TableBean.DataBean tableBean = new TableBean.DataBean(orderItem.getRestaurantTable());
if (!TextUtils.isEmpty(tableBean.getTableNumber())) {
tableBean.setTableName(tableBean.getTableName() + "-" + tableBean.getTableNumber());
} else {
tableBean.setTableName(tableBean.getTableName());
}
tableBean.setId(orderItem.getTableId());
tableBean.setPerson(orderItem.getPerson());
doshokuOrder.setOpenTableInfo(tableBean);
List<OrderResponse.OrderDetailsBean> orderDetailsBeans = orderItem.getOrderDetails();
List<OrderDetail> orderDetailList = OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(orderDetailsBeans));
doshokuOrder.getShoppingCart().addCommodityList(orderDetailList);
if (orderItem.getMemberInfo() != null) {
doshokuOrder.setMemberInfo(orderItem.getMemberInfo());
}
Intent intent = new Intent(mActivity, MealStandActivity.class);
mActivity.startActivityForResult(intent, OrderCenterActivity.MODIFY_ORDER_RETURN_CODE);
}
@Override
public void destroy() {
}
}
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.mvp.IView;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import java.util.List;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:订单退款
*/
public class RefundOrder implements Strategy<OrderManagerResponse> {
private final String TAG = "RefundlOrder";
private BaseFragmentActivity mActivity;
private IView mRootView;
public RefundOrder(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
showHywebRefundDialog(orderItem);
}
@Override
public void destroy() {
}
private void showHywebRefundDialog(OrderManagerResponse datasBean) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(mActivity);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage("是否退款?");
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
hywebRefund(datasBean);
});
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.create(R.style.MyDialogTheme2).show();
}
private void hywebRefund(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
RefundRequest refundRequest = new RefundRequest();
refundRequest.setPAYMENT_APP_ID(getPaymentAppIdByPays(datasBean.getOrderPays()));
refundRequest.setTXN_AMT(datasBean.getAmount());
PosPay.refund(mActivity, mRootView, refundRequest, txnIdRequest, new OnPosActionListener<RefundRespose>() {
@Override
public void onPosSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
if(refundListener != null){
refundListener.refeshOrders();
}
}
@Override
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
@Override
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onUpdateStatusSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
private String getPaymentAppIdByPays(List<OrderManagerResponse.OrderPayBean> orderPays) {
String hywebPayMethod = "";
for (OrderManagerResponse.OrderPayBean orderPayBean : orderPays) {
hywebPayMethod = orderPayBean.getHywebPayMethodByType();
}
return hywebPayMethod;
}
private RefundOrder.OnRefundListener refundListener;
public void setRefundListener(RefundOrder.OnRefundListener refundListener) {
this.refundListener = refundListener;
}
public interface OnRefundListener{
void refeshOrders();
}
}
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.ui.widget.dialog.KeyboardDialog;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.mvp.IView;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:補小費
*/
public class TipsOrder implements Strategy<OrderManagerResponse> {
private final String TAG = "TipsOrder";
private BaseFragmentActivity mActivity;
private IView mRootView;
public TipsOrder(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
showKeyboardDialog(orderItem);
}
@Override
public void destroy() {
}
private void showKeyboardDialog(OrderManagerResponse datasBean) {
new KeyboardDialog(mActivity)
.build()
.setOnCallBackListener(new KeyboardDialog.OnCallBackListener() {
@Override
public void onSure(String number) {
if (!TextUtils.isEmpty(number)) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
PosPay.tip(mActivity, mRootView, txnIdRequest,
getTipsRequest(datasBean.getPayTxnId(), datasBean.getAmount(), Double.parseDouble(number)), new OnPosActionListener<AdjustTipRespose>() {
@Override
public void onPosSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
if(tipsListener != null){
tipsListener.refeshOrders();
}
}
@Override
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
@Override
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e.toString());
}
@Override
public void onUpdateStatusSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
}
})
.show();
}
private AdjustTipRequest getTipsRequest(String txnId, double amount, double tips) {
AdjustTipRequest tipRequest = new AdjustTipRequest();
tipRequest.setTXN_ID(txnId);
tipRequest.setTOTAL_TXN_AMT(MoneyUtil.sum(amount, tips));
return tipRequest;
}
private TipsOrder.OnRefundListener tipsListener;
public void setTipsListener(TipsOrder.OnRefundListener tipsListener) {
this.tipsListener = tipsListener;
}
public interface OnRefundListener{
void refeshOrders();
}
}
......@@ -37,7 +37,7 @@ public abstract class TableAction implements Strategy<TableBean.DataBean> {
*/
public abstract boolean filterTableCondition(TableBean.DataBean dataBean);
public abstract void destroy();
// public abstract void destroy();
protected void setOperatContentText(String content) {
if (actionListener != null) {
......
package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import io.reactivex.Observable;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/13/2020 16:25
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface BaseOrderConterContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
package com.gingersoft.gsa.cloud.table.mvp.model.function;
import com.gingersoft.gsa.cloud.common.function.FModule;
import com.gingersoft.gsa.cloud.table.R;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
public class TableFunctionFactory {
public static final String BottomGroup = "/bottom/";
public static final class Bottom {
}
/**
* 餐檯頁
*/
public static final FModule[] bottom = {
new FModule("init", R.mipmap.table_init, 0),
new FModule("initSkyorder", R.mipmap.table_paper, 0),
new FModule("move", R.mipmap.table_move, 0),
new FModule("skyorder", 0, 0),
new FModule("splite", R.mipmap.table_splite, 0),
new FModule("table/bottom/parper", R.mipmap.table_paper, 0),
};
}
......@@ -38,7 +38,7 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.FoodReason;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.MealDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.action.discount.MealDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.DiscountAdapter;
......@@ -199,6 +199,9 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
if(mMealDiscountAction != null){
mMealDiscountAction.destroy();
}
}
public void startScanActivity() {
......
......@@ -39,7 +39,7 @@ import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.BillDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.action.discount.BillDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
......@@ -150,7 +150,9 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
if(mNomalDiscountAction != null){
mNomalDiscountAction.destroy();
}
stopTablePolling();
}
......
package com.gingersoft.gsa.cloud.table.mvp.presenter.orderManager;
import android.app.Application;
import com.gingersoft.gsa.cloud.table.mvp.action.order.CancelOrder;
import com.gingersoft.gsa.cloud.table.mvp.action.order.ModifyOrderAction;
import com.gingersoft.gsa.cloud.table.mvp.action.order.PrintOrderAction;
import com.gingersoft.gsa.cloud.table.mvp.action.order.RefundOrder;
import com.gingersoft.gsa.cloud.table.mvp.action.order.TipsOrder;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/13/2020 16:25
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class BaseOrderConterPresenter<M extends IModel,V extends IView> extends BasePresenter{
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
protected M mModel;
protected V mRootView;
@Inject
public BaseOrderConterPresenter(IModel model, IView rootView) {
super(model, rootView);
this.mModel = (M) model;
this.mRootView = (V) rootView;
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void printOrder(BaseFragmentActivity activity,OrderManagerResponse orderItem){
new PrintOrderAction(activity,mRootView)
.action(orderItem);
}
public void modifyOrder(BaseFragmentActivity activity,OrderManagerResponse orderItem){
new ModifyOrderAction(activity,mRootView)
.action(orderItem);
}
public void orderTips(BaseFragmentActivity activity,OrderManagerResponse orderItem,TipsOrder.OnRefundListener listener){
TipsOrder tipsOrder = new TipsOrder(activity,mRootView);
tipsOrder.action(orderItem);
tipsOrder.setTipsListener(listener);
}
public void orderCancel(BaseFragmentActivity activity,OrderManagerResponse orderItem,CancelOrder.OnCancelListener listener){
CancelOrder cancelOrder = new CancelOrder(activity,mRootView);
cancelOrder.action(orderItem);
cancelOrder.setCancelListener(listener);
}
public void orderRefund(BaseFragmentActivity activity,OrderManagerResponse orderItem,RefundOrder.OnRefundListener listener){
RefundOrder refundOrder = new RefundOrder(activity,mRootView);
refundOrder.action(orderItem);
refundOrder.setRefundListener(listener);
}
}
......@@ -5,9 +5,11 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.contract.OrderStatusContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderCenterContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
......@@ -41,7 +43,7 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
* ================================================
*/
@ActivityScope
public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Model, OrderCenterContract.View> {
public class OrderCenterPresenter extends BaseOrderConterPresenter<OrderCenterContract.Model, OrderCenterContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
......@@ -51,15 +53,12 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
@Inject
AppManager mAppManager;
private OrderCenterActivity IActivity;
//是否可以繼續上拉刷新
private boolean noMoreData = false;
@Inject
public OrderCenterPresenter(OrderCenterContract.Model model, OrderCenterContract.View rootView) {
super(model, rootView);
this.IActivity = (OrderCenterActivity) rootView;
}
......@@ -210,49 +209,6 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
});
}
public void printOrder(OrderManagerResponse orderItem){
}
public void modifyOrder(OrderManagerResponse orderItem){
}
public void orderTips(OrderManagerResponse orderItem){
}
public void orderCancel(OrderManagerResponse orderItem){
}
public void orderRefund(OrderManagerResponse orderItem){
}
private void filterOrderItemsByStatus(List<OrderManagerResponse> orderItemList){
for (int i = orderItemList.size() -1; i >= 0 ; i--) {
OrderManagerResponse orderManagerResponse = orderItemList.get(i);
if(!getStatusByCurrentFragmentIndex().contains(String.valueOf(orderManagerResponse.getStatus()))){
orderItemList.remove(i);
}
}
}
private String getStatusByCurrentFragmentIndex(){
if(mRootView.getCurrentFragmentIndex() == 0){
return OrderStatusContract.STATUS_4 +","+OrderStatusContract.STATUS_5;
}else if(mRootView.getCurrentFragmentIndex() == 1){
return String.valueOf(OrderStatusContract.STATUS_6);
}
return "";
}
public boolean isNoMoreData() {
return noMoreData;
}
......
......@@ -4,8 +4,15 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.util.PayMethodUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderDetailContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem3;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
......@@ -14,6 +21,9 @@ import com.jess.arms.utils.RxLifecycleUtils;
import org.simple.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
......@@ -36,7 +46,7 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
* ================================================
*/
@ActivityScope
public class OrderDetailPresenter extends BasePresenter<OrderDetailContract.Model, OrderDetailContract.View> {
public class OrderDetailPresenter extends BaseOrderConterPresenter<OrderDetailContract.Model, OrderDetailContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
......@@ -49,6 +59,7 @@ public class OrderDetailPresenter extends BasePresenter<OrderDetailContract.Mode
@Inject
public OrderDetailPresenter(OrderDetailContract.Model model, OrderDetailContract.View rootView) {
super(model, rootView);
}
@Override
......@@ -115,4 +126,157 @@ public class OrderDetailPresenter extends BasePresenter<OrderDetailContract.Mode
}
});
}
public boolean containCardPayment(List<OrderManagerResponse.OrderPayBean> orderPays){
if (orderPays != null && orderPays.size() > 0) {
List<PayMethod> payMethods = new ArrayList<>();
for (OrderManagerResponse.OrderPayBean orderPayBean : orderPays) {
PayMethod payMethod = new PayMethod();
payMethod.setPayType(orderPayBean.getPayType());
payMethod.setPayMoney(orderPayBean.getAmount());
payMethod.setTipsPrice(orderPayBean.getTipsPrice());
payMethods.add(payMethod);
}
PayMethod payMethod = PayMethodUtils.filterPaymentMethodById(payMethods, PayMethod.HYWEB_POS_TYPE_CC);
if (payMethod != null) {
//只有卡片支付才支持補小費
return true;
}
}
return false;
}
public List<SectionTextItem3> orderPayMethodTransSectionTextItem3(List<PayMethod> payMethodList) {
List<SectionTextItem3> sectionTextItem3List = new ArrayList<>();
for (PayMethod payMethod : payMethodList) {
SectionTextItem3 sectionTextItem3 = new SectionTextItem3();
sectionTextItem3.setLeftText(payMethod.getPayName());
sectionTextItem3.setCenterText(String.valueOf(0));
sectionTextItem3.setRightText(String.valueOf(payMethod.getPayMoney()));
sectionTextItem3.setLeftTextStyle(R.style.order_paymethod_text_style);
sectionTextItem3.setRightTextStyle(R.style.order_paymethod_text_style);
sectionTextItem3List.add(sectionTextItem3);
}
return sectionTextItem3List;
}
public List<SectionTextItem3> orderDetailTransSectionTextItem3(List<OrderDetail> orderDetailList) {
List<SectionTextItem3> sectionTextItem3List = new ArrayList<>();
for (OrderDetail orderDetail : orderDetailList) {
SectionTextItem3 sectionTextItem3 = new SectionTextItem3();
String foodName;
switch (orderDetail.getItemType()) {
case 2:
foodName = " " + orderDetail.getProductName();
break;
case 3:
foodName = " " + orderDetail.getProductName();
break;
default:
foodName = orderDetail.getProductName();
break;
}
sectionTextItem3.setLeftText(foodName);
sectionTextItem3.setCenterText(String.valueOf(orderDetail.getNumber()));
sectionTextItem3.setRightText(String.valueOf(orderDetail.getPrice()));
sectionTextItem3List.add(sectionTextItem3);
}
return sectionTextItem3List;
}
/**
* 獲取支付方式
*
* @param orderPays
* @return
*/
public List<PayMethod> getPayMethodList(List<OrderManagerResponse.OrderPayBean> orderPays) {
List<PayMethod> payMethodList = new ArrayList<>();
if (orderPays != null) {
for (OrderManagerResponse.OrderPayBean orderPayBean : orderPays) {
PayMethod payMethod = new PayMethod();
payMethod.setPayName(orderPayBean.getPayName());
payMethod.setPayMoney(orderPayBean.getAmount());
payMethodList.add(payMethod);
if (orderPayBean.getTipsPrice() != 0) {
//打印添加找零或貼士行
String linePayType = orderPayBean.getLinePayType() == 1 ? "找零" : "貼士";
PayMethod payMethod2 = new PayMethod();
//這裡打印退一格
payMethod2.setPayName(" " + linePayType);
payMethod2.setPayMoney(orderPayBean.getTipsPrice());
payMethodList.add(payMethod2);
}
}
}
return payMethodList;
}
/**
* 獲取賬單折扣列
*
* @param orderDetailItem
* @return
*/
public List<SectionTextItem3> getOrderDiscountSections(OrderManagerResponse orderDetailItem) {
List<SectionTextItem3> sectionTextItem3s = null;
if (orderDetailItem.getDiscountDetails() != null) {
sectionTextItem3s = new ArrayList<>();
//折扣
for (OrderDiscountResponse discount : orderDetailItem.getDiscountDetails()) {
sectionTextItem3s.add(discountTransSectionTextItem3(discount));
}
}
return sectionTextItem3s;
}
public SectionTextItem3 discountTransSectionTextItem3(OrderDiscountResponse discount) {
SectionTextItem3 sectionTextItem3 = new SectionTextItem3();
sectionTextItem3.setLeftText(discount.getRemark());
sectionTextItem3.setCenterText(String.valueOf(0));
sectionTextItem3.setRightText(String.valueOf(discount.getDiscountAmount()));
sectionTextItem3.setLeftTextStyle(com.gingersoft.gsa.cloud.common.R.style.order_paymethod_text_style);
sectionTextItem3.setRightTextStyle(com.gingersoft.gsa.cloud.common.R.style.order_paymethod_text_style);
return sectionTextItem3;
}
/**
* 獲取賬單小數列
*
* @param orderDetailItem
* @return
*/
public SectionTextItem3 getOrderRoudingSection(OrderManagerResponse orderDetailItem) {
if (orderDetailItem.getRounding() != null && orderDetailItem.getRounding() != 0) {
return SectionTextItem3.roundingTransSectionTextItem3(orderDetailItem.getRounding());
}
return null;
}
/**
* 获取服務費
*
* @param orderDetailItem
* @return
*/
public SectionTextItem3 getOrderServiceAmountSection(OrderManagerResponse orderDetailItem) {
if (orderDetailItem.getServiceAmount() != null && orderDetailItem.getServiceAmount() != 0) {
return SectionTextItem3.serviceAmountTransSectionTextItem3(orderDetailItem.getServiceAmount());
}
return null;
}
/**
* 返回合計金額
*
* @return
*/
public double getTotalMoney(List<SectionTextItem3> orderCenterDetailFoodList) {
double otherMoney = 0.0;
for (SectionTextItem3 item : orderCenterDetailFoodList) {
otherMoney = MoneyUtil.sum(otherMoney, Double.parseDouble(item.getRightText()));
}
return MoneyUtil.get_ItemDecimals_money(otherMoney);
}
}
......@@ -18,12 +18,16 @@ import com.gingersoft.gsa.cloud.order.contract.OrderStatusContract;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerOrderCenterComponent;
import com.gingersoft.gsa.cloud.table.mvp.action.order.CancelOrder;
import com.gingersoft.gsa.cloud.table.mvp.action.order.RefundOrder;
import com.gingersoft.gsa.cloud.table.mvp.action.order.TipsOrder;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderCenterContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.table.mvp.presenter.orderManager.OrderCenterPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.AllOrderFragment;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.base.delegate.IActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.arch.QMUIFragmentPagerAdapter;
......@@ -134,17 +138,42 @@ public class OrderCenterActivity extends BaseFragmentActivity<OrderCenterPresent
if(orderItem != null){
int id = v.getId();
if(id == R.id.btn_print_order){
mPresenter.printOrder(orderItem);
mPresenter.printOrder(this,orderItem);
}else if(id == R.id.btn_modify_order){
mPresenter.modifyOrder(orderItem);
if (orderItem.getRestaurantTable() == null) {
showMessage("餐檯不存在,無法修改訂單");
return;
}
mPresenter.modifyOrder(this,orderItem);
}else if(id == R.id.btn_tips){
mPresenter.orderTips(orderItem);
mPresenter.orderTips(this, orderItem, new TipsOrder.OnRefundListener() {
@Override
public void refeshOrders() {
refeshOrderList(getStatusByFragmentIndex());
}
});
}else if(id == R.id.btn_cancel_order){
mPresenter.orderCancel(orderItem);
mPresenter.orderCancel(this, orderItem, new CancelOrder.OnCancelListener() {
@Override
public void cancel(long orderId) {
cancelOrder(orderId, getOrderType(),getStatusByFragmentIndex());
}
@Override
public void refeshOrders() {
}
});
}else if(id == R.id.btn_refund){
mPresenter.orderRefund(orderItem);
mPresenter.orderRefund(this, orderItem, new RefundOrder.OnRefundListener() {
@Override
public void refeshOrders() {
refeshOrderList(getStatusByFragmentIndex());
}
});
}
}else {
showMessage("請選中需要操作的訂單!");
}
}
......@@ -360,6 +389,11 @@ public class OrderCenterActivity extends BaseFragmentActivity<OrderCenterPresent
}
}
public String getOrderType() {
//TODO 账单管理现在只显示餐台模式订单
return String.valueOf(OrderManagerResponse.ORDER_TYPE_DOSHOKU);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
......
......@@ -19,6 +19,7 @@ import com.gingersoft.gsa.cloud.pay.util.PayMethodUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.google.android.material.checkbox.MaterialCheckBox;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
......@@ -65,7 +66,7 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
@BindView(R2.id.ll_root_container)
LinearLayout ll_root_container;
@BindView(R2.id.cb_order)
CheckBox cb_order;
MaterialCheckBox cb_order;
@BindView(R2.id.tv_table_name)
TextView tv_table_name;
@BindView(R2.id.tv_order_num)
......@@ -106,9 +107,7 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
public void setData(OrderManagerResponse item, int position) {
setOrderItemDetail(item);
setBtnVisible(item, position);
setBtnListener(item, position);
btn_refund.setVisibility(View.GONE);
ll_root_container.setOnClickListener(new View.OnClickListener() {
@Override
......@@ -151,63 +150,14 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
tv_table_name.setText(tableName + item.getTableName());
tv_order_num.setText(orderNumber + item.getId());
}
}
private void setBtnVisible(OrderManagerResponse item, int position) {
if (item.getRestaurantOperationId() != null) {
//已清機
btn_modify_order.setVisibility(View.GONE);
btn_tips.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
} else {
//未清機
List<OrderManagerResponse.OrderPayBean> orderPays = item.getOrderPays();
if (orderPays != null && orderPays.size() > 0) {
List<PayMethod> payMethods = new ArrayList<>();
for (OrderManagerResponse.OrderPayBean orderPayBean : orderPays) {
PayMethod payMethod = new PayMethod();
payMethod.setPayType(orderPayBean.getPayType());
payMethod.setPayMoney(orderPayBean.getAmount());
payMethod.setTipsPrice(orderPayBean.getTipsPrice());
payMethods.add(payMethod);
}
PayMethod payMethod = PayMethodUtils.filterPaymentMethodById(payMethods, PayMethod.HYWEB_POS_TYPE_CC);
if (payMethod != null) {
//只有卡片支付才支持補小費
btn_tips.setVisibility(View.VISIBLE);
} else {
btn_tips.setVisibility(View.GONE);
}
}
if (item.getStatus() == OrderStatusContract.STATUS_6) {
btn_print_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
btn_order_status.setVisibility(View.VISIBLE);
cb_order.setVisibility(View.GONE);
ll_pos_bottom.setVisibility(View.GONE);
} else {
btn_print_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
btn_order_status.setVisibility(View.GONE);
cb_order.setVisibility(View.VISIBLE);
if (AppDevices.isHywebPos() && item.withHywebPay()) {
setOrderStatusVisivbleByTxnId(item.getPayTxnId(), item.getCancelTxnId(), item.getRefundTxnId());
ll_pos_bottom.setVisibility(View.VISIBLE);
} else {
ll_pos_bottom.setVisibility(View.GONE);
}
cb_order.setChecked(item.isChecked());
}
int orderType = item.getOrderType();
if (orderType == OrderTypeConstans.order_type_2 || orderType == OrderTypeConstans.order_type_7) {
//外賣自取 不可以修改訂單 取消訂單
btn_modify_order.setVisibility(View.GONE);
btn_cancel_order.setVisibility(View.GONE);
}
//先将check回调情况,防止setChecked时反复调用onCheckedChanged方法
cb_order.setOnCheckedChangeListener(null);
if (item.getStatus() == OrderStatusContract.STATUS_6) {
cb_order.setVisibility(View.GONE);
}else {
cb_order.setChecked(item.isChecked());
}
}
private void setBtnListener(OrderManagerResponse item, int position) {
......@@ -265,34 +215,6 @@ public class OrderCenterAdapter extends DefaultAdapter<OrderManagerResponse> {
});
}
}
private void setOrderStatusVisivbleByTxnId(String payTxnId, String cancelTxnId, String refundTxnId) {
if (!TextUtils.isEmpty(cancelTxnId)) {
btn_order_status.setText("已取消");
btn_order_status.setVisibility(View.VISIBLE);
setOrderCancelVisbility();
return;
}
if (!TextUtils.isEmpty(refundTxnId)) {
btn_order_status.setVisibility(View.VISIBLE);
btn_order_status.setText("已退款");
setOrderCancelVisbility();
return;
}
if (!TextUtils.isEmpty(payTxnId)) {
btn_print_order.setVisibility(View.VISIBLE);
btn_refund.setVisibility(View.VISIBLE);
btn_cancel_order.setVisibility(View.VISIBLE);
btn_modify_order.setVisibility(View.VISIBLE);
}
}
private void setOrderCancelVisbility() {
btn_print_order.setVisibility(View.GONE);
btn_modify_order.setVisibility(View.GONE);
btn_refund.setVisibility(View.GONE);
btn_tips.setVisibility(View.GONE);
}
}
......
......@@ -17,7 +17,7 @@
android:layout_marginBottom="@dimen/dp_5"
android:orientation="horizontal">
<CheckBox
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/cb_order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
......
......@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 29,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode : 17,
versionName : "1.1.7"
versionCode : 20,
versionName : "1.2.0"
]
version = [
......
......@@ -130,7 +130,7 @@ public class GsaCloudApplication extends BaseApplication {
//初始化主題管理器
// QDSkinManager.install(this);
//初始化哆啦A夢
initDoraemonKit();
// initDoraemonKit();
//初始化上下拉刷新
initRefresh();
//初始化加载反馈页管理框架
......
......@@ -13,4 +13,9 @@ public interface Strategy<T> {
* 具體行為實現方法
*/
void action(T t);
/**
* 释放资源
*/
void destroy();
}
include ':library-print'
include ':library'
include 'cc-register',
'cc',
'pools',
......
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