Commit 3f6c41b6 by 宁斌

1、餐牌页拆分

parent 0028c801
......@@ -101,7 +101,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
LoganManager.w_code(TAG, "setupActivityComponent");
LoganManager.w_printer(TAG, "setupActivityComponent");
DaggerPrintComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
......@@ -112,7 +112,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public int initView(@Nullable Bundle savedInstanceState) {
LoganManager.w_code(TAG, "initView");
LoganManager.w_printer(TAG, "initView");
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
return 0;//R.layout.print_bitmap;如果你不需要框架帮你设置 setContentView(id) 需要 自行设置,请返回 0
......@@ -120,7 +120,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void configImmersionBar(ImmersionBar immersionBar) {
LoganManager.w_code(TAG, "configImmersionBar");
LoganManager.w_printer(TAG, "configImmersionBar");
immersionBar
.fitsSystemWindows(true)
.statusBarColor(R.color.trans)
......@@ -130,7 +130,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void initData(@Nullable Bundle savedInstanceState) {
LoganManager.w_code(TAG, "initData");
LoganManager.w_printer(TAG, "initData");
PrinterFlowProxy.newInstance().registerPrinterFlowListener(printerFlowListener);
}
......@@ -227,7 +227,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
private void actionPrinter() {
LoganManager.w_code(TAG, "actionPrinter start");
LoganManager.w_printer(TAG, "actionPrinter start");
showPrintLoadingDialog();
......@@ -243,7 +243,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
//初始化打印配置
initPrintConfig(printContent);
LoganManager.w_code(TAG, "actionPrinter end");
LoganManager.w_printer(TAG, "actionPrinter end");
}
private void showPrintLoadingDialog() {
......@@ -273,7 +273,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
private void initPrintConfig(PrintContent printContent) {
LoganManager.w_code(TAG, "initPrintConfig start");
LoganManager.w_printer(TAG, "initPrintConfig start");
//開始
PrinterFlowProxy.newInstance().dispatchPrinterDataBefore(type, type, GsonUtils.GsonString(printContent), GsonUtils.GsonString(defaultPrint));
......@@ -307,8 +307,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printByDevice(defaultPrint);
}
LoganManager.w_code(TAG, "initPrintConfig defaultPrint-->" + defaultPrint.toString());
LoganManager.w_code(TAG, "initPrintConfig end");
if (defaultPrint != null) {
LoganManager.w_printer(TAG, "initPrintConfig defaultPrint-->" + defaultPrint.toString());
}
LoganManager.w_printer(TAG, "initPrintConfig end");
}
/**
......@@ -398,7 +400,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
* @param defaultPrint 打印機
*/
private void printByDevice(PrinterDeviceBean defaultPrint) {
LoganManager.w_code(TAG, "printByDevice start");
LoganManager.w_printer(TAG, "printByDevice start");
//獲取對應的打印類
if (printerInIt instanceof PrintInstruction) {
//開錢箱
......@@ -447,7 +449,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printFailure("未找到對應的打印類型");
}
}
LoganManager.w_code(TAG, "printByDevice end");
LoganManager.w_printer(TAG, "printByDevice end");
}
/**
......
......@@ -561,7 +561,7 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
* 添加或測試打印機
*/
private void addOrTestPrint(View v) {
LoganManager.w_code(TAG, "addOrTestPrint start");
LoganManager.w_printer(TAG, "addOrTestPrint start");
if (!editTextIsNull(mEdPrintName)) {
ToastUtils.show(mContext, "請輸入打印機名稱");
return;
......@@ -652,8 +652,8 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
}
} else if (v.getId() == R.id.print_test) {
//打印測試
LoganManager.w_code(TAG, "打印測試 start");
LoganManager.w_code(TAG, "打印測試 printerDeviceBean->" + printerDeviceBean.toString());
LoganManager.w_printer(TAG, "打印測試 start");
LoganManager.w_printer(TAG, "打印測試 printerDeviceBean->" + printerDeviceBean.toString());
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_TEST)
.addParam("deviceBean", printerDeviceBean)
......@@ -664,10 +664,10 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
// if (!result.isSuccess()) {
// ToastUtils.show(this, "打印失敗");
// }
LoganManager.w_code(TAG, "打印測試 end");
LoganManager.w_printer(TAG, "打印測試 end");
});
}
LoganManager.w_code(TAG, "addOrTestPrint end");
LoganManager.w_printer(TAG, "addOrTestPrint end");
}
......
......@@ -23,6 +23,9 @@
android:name=".mvp.ui.activity.MealStandActivity"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.MealStandActivity2"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.OrderContentActivity"
android:screenOrientation="portrait" />
<activity
......
......@@ -10,7 +10,13 @@
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_android"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.CoordinatorlayoutActivity" />
<activity
android:name=".mvp.ui.activity.MealStandActivity2"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.orderManager.OrderDetailActivity"
android:launchMode="singleTop"/>
......
package com.gingersoft.gsa.cloud.table.di.component;
import com.gingersoft.gsa.cloud.table.di.module.MealStand2Module;
import com.gingersoft.gsa.cloud.table.di.module.MealStandModule;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity2;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.ActivityScope;
import dagger.BindsInstance;
import dagger.Component;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 12/27/2019 19:17
* <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>
* ================================================
*/
@ActivityScope
@Component(modules = MealStand2Module.class, dependencies = AppComponent.class)
public interface MealStand2Component {
void inject(MealStandActivity2 activity);
@Component.Builder
interface Builder {
@BindsInstance
MealStand2Component.Builder view(MealStandContract.View view);
MealStand2Component.Builder appComponent(AppComponent appComponent);
MealStand2Component build();
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.di.module;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.MealStandModel;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.DiscountAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.jess.arms.di.scope.ActivityScope;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 12/27/2019 19:17
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public abstract class MealStand2Module {
@Binds
abstract MealStandContract.Model bindMealStandModel(MealStandModel model);
@ActivityScope
@Provides
@Named("foodGroupList")
static List<Food> provideFoodGroupList() {
return new ArrayList<>();
}
@ActivityScope
@Provides
@Named("foodList")
static List<Food> provideFoodList() {
return new ArrayList<>();
}
@ActivityScope
@Provides
static List<ComboItem> provideFoodCombo() {
return new ArrayList<>();
}
@ActivityScope
@Provides
static List<Modifier> provideModifierList() {
return new ArrayList<>();
}
@ActivityScope
@Provides
static List<Discount> provideDiscountList() {
return new ArrayList<>();
}
@ActivityScope
@Provides
static List<SoldoutCtrFood> provideSoldoutCtrList() {
return new ArrayList<>();
}
@Inject
protected SelectMealAdapter mSelectMealAdapter;
/**
* 賬單項適配器
*/
@Inject
protected BillItemAdapter mBillItemAdapter;
@ActivityScope
@Provides
static FoodAdapter provideFoodAdapter(MealStandContract.View IView, @Named("foodList") List<Food> foodList) {
return new FoodAdapter(IView.getActivity(), foodList, IView.getFromType());
}
@ActivityScope
@Provides
static ComboAdapter provideComboAdapter(MealStandContract.View IView, List<ComboItem> comboItemList) {
return new ComboAdapter(IView.getActivity(), comboItemList);
}
@ActivityScope
@Provides
static ModifierAdapter provideModifierAdapter(MealStandContract.View IView, List<Modifier> modifierList) {
return new ModifierAdapter(IView.getActivity(), modifierList);
}
@ActivityScope
@Provides
static DiscountAdapter provideDiscountAdapter(MealStandContract.View IView, List<Discount> discountList) {
return new DiscountAdapter(IView.getActivity(), discountList);
}
}
\ No newline at end of file
......@@ -6,11 +6,19 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.SetMealPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter2;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.di.scope.FragmentScope;
......@@ -20,11 +28,13 @@ import dagger.Provides;
import com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract;
import com.gingersoft.gsa.cloud.table.mvp.model.SetMealModel;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.mvp.IView;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
......@@ -46,6 +56,18 @@ public abstract class SetMealModule {
@Binds
abstract SetMealContract.Model bindSetMealModel(SetMealModel model);
// @FragmentScope
// @Provides
// static List<OrderDetail> provideOrderMealList() {
// return new ArrayList<>();
// }
//
// @FragmentScope
// @Provides
// static List<BillItem> provideBillItemList() {
// return new ArrayList<>();
// }
@FragmentScope
@Provides
@Named("foodGroupList")
......@@ -72,7 +94,6 @@ public abstract class SetMealModule {
return new ArrayList<>();
}
@FragmentScope
@Provides
@Named("fineTabTitles")
......@@ -80,6 +101,18 @@ public abstract class SetMealModule {
return new ArrayList<>();
}
// @FragmentScope
// @Provides
// static SelectMealAdapter2 provideSelectMealAdapter2(SetMealContract.View IView, List<OrderDetail> orderMealList, BasePresenter presenter) {
// return new SelectMealAdapter2(IView.getActivity2(), orderMealList,presenter);
// }
//
// @FragmentScope
// @Provides
// static BillItemAdapter provideBillItemAdapter(SetMealContract.View IView, List<BillItem> billItems) {
// return new BillItemAdapter(IView.getActivity2(), billItems,"$");
// }
@FragmentScope
@Provides
static FoodGroupAdapter provideFoodGroupAdapter(SetMealContract.View IView, @Named("foodGroupList") List<Food> foodGroupList) {
......@@ -104,23 +137,23 @@ public abstract class SetMealModule {
return new ModifierAdapter(IView.getActivity2(), modifierList);
}
@Named("foodGridLayoutManager")
@FragmentScope
@Provides
@Named("foodGridLayoutManager")
static GridLayoutManager provideFoodRecycleLayoutManager(SetMealContract.View IView) {
return new GridLayoutManager(IView.getActivity2(), 1, LinearLayoutManager.HORIZONTAL, false);
}
@Named("comboGridLayoutManager")
@FragmentScope
@Provides
@Named("comboGridLayoutManager")
static GridLayoutManager provideComboRecycleLayoutManager(SetMealContract.View IView) {
return new GridLayoutManager(IView.getActivity2(), 1, LinearLayoutManager.HORIZONTAL, false);
}
@Named("modifierGridLayoutManager")
@FragmentScope
@Provides
@Named("modifierGridLayoutManager")
static GridLayoutManager provideModifierRecycleLayoutManager(SetMealContract.View IView) {
return new GridLayoutManager(IView.getActivity2(), 1, LinearLayoutManager.HORIZONTAL, false);
}
......
......@@ -10,6 +10,7 @@ import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.PaymentControl;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.ResultCallback;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.table.R;
......@@ -108,6 +109,18 @@ public class CancelOrder implements Strategy<OrderManagerResponse> {
public void onFailure(Throwable t) {
}
@Override
public void externalPayment() {
if (cancelListener != null) {
cancelListener.cancel(datasBean.getId());
}
}
@Override
public void hybridPayment(List<PayMethod> payMethods) {
}
})
.build();
PaymentControl.newInstance().showPayFlowFragment(mActivity, build);
......
......@@ -8,6 +8,11 @@ import com.gingersoft.gsa.cloud.database.bean.FoodCombo;
import com.gingersoft.gsa.cloud.database.bean.FoodModifier;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity2;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
......@@ -16,6 +21,7 @@ import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import dagger.Lazy;
import io.reactivex.Single;
......@@ -59,6 +65,8 @@ public interface SetMealContract {
void setMealRvScrollToPosition(int position);
void resetSelect(int position, Food datasBean);
void returnFoodGroupList(List<Food> foodGroupList);
void returnFoodList(List<Food> foodList);
......@@ -67,7 +75,17 @@ public interface SetMealContract {
void returnModifierList(List<Modifier> modifierList);
MealStandActivity getActivity2();
void initFoodGroupAdapter(List<Food> foodGroupList);
void notifyFoodGroupAdapter();
void notifyFoodAdapter();
void notifyComboAdapterAdapter();
void notifyModifierAdapterAdapter();
MealStandActivity2 getActivity2();
int getFromType();
}
......
......@@ -40,9 +40,11 @@ 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.presenter.mealstand.MealStandPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity2;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand.SetMealFragment;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.AppManager;
......@@ -151,7 +153,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
public abstract void addOrderFood(boolean isPrint, Class<?> afterToActivity);
public void saveCreateTime(long createTime) {
public void saveCreateTime(long createTime) {
if (mDoshokuOrder == null) {
mDoshokuOrder.setOpenTableInfo(new TableBean.DataBean());
}
......@@ -163,13 +165,14 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
this.mModel = (M) model;
this.mRootView = (V) rootView;
this.mBaseOrderPresenter = this;
this.IActivity = (Activity) mRootView;
this.IActivity = (Activity) rootView;
if (IActivity instanceof MealStandActivity) {
mMealStandActivity = (MealStandActivity) IActivity;
} else if (IActivity instanceof OrderContentActivity) {
mOrderContentActivity = (OrderContentActivity) IActivity;
}
if (this instanceof MealStandPresenter) {
mMealStandPresenter = (MealStandPresenter) this;
}
......
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import android.widget.TextView;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInfoUtils;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.order.bean.discount.CouponDiscountBean;
import com.gingersoft.gsa.cloud.order.bean.request.OrderDiscountRequest;
import com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse;
import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.billItem.DiscountItem;
import com.gingersoft.gsa.cloud.order.billItem.RoundingItem;
import com.gingersoft.gsa.cloud.order.billItem.ServiceChargeItem;
import com.gingersoft.gsa.cloud.order.cart.ShoppingCart;
import com.gingersoft.gsa.cloud.order.cart.ShoppingCartNumberChange;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.discount.CouponDiscount;
import com.gingersoft.gsa.cloud.order.discount.NomalDiscount;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.order.order.OrderFactory;
import com.gingersoft.gsa.cloud.order.order.TakeawayOrder;
import com.gingersoft.gsa.cloud.table.mvp.contract.BaseOrderContract;
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.presenter.mealstand.MealStandPresenter;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.MealStandPresenter2;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity2;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter2;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand.SetMealFragment;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.DeviceUtils;
import com.jess.arms.utils.PermissionUtil;
import com.jess.arms.utils.RxLifecycleUtils;
import com.tbruyelle.rxpermissions2.RxPermissions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
import static com.gingersoft.gsa.cloud.order.commodity.OrderDetail.DISCOUNT_TYPE;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-01-11
* 修订历史:2020-01-11
* 描述:
*/
@ActivityScope
public abstract class BaseOrderPresenter2<M extends BaseOrderContract.Model, V extends BaseOrderContract.View> extends BasePresenter<BaseOrderContract.Model, BaseOrderContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
AppManager mAppManager;
protected M mModel;
protected V mRootView;
protected BaseOrderPresenter2 mBaseOrderPresenter;
private Activity IActivity;
private MealStandActivity2 mMealStandActivity;
private OrderContentActivity mOrderContentActivity;
private MealStandPresenter2 mMealStandPresenter;
/**
* 訂單美食適配器
*/
protected SelectMealAdapter2 mSelectMealAdapter;
/**
* 賬單項適配器
*/
protected BillItemAdapter mBillItemAdapter;
/**
* 美食列表
*/
protected List<OrderDetail> mOrderMealList;
/**
* 賬單項列表
*/
protected List<BillItem> mBillItemList;
/**
* 餐檯信息
*/
public TableBean.DataBean mTableInfo;
/**
* 訂單信息
*/
// protected BaseOrder mOrder;
/**
* 堂食訂單信息
*/
protected DoshokuOrder mDoshokuOrder;
/**
* 外賣訂單信息
*/
protected TakeawayOrder mTakeawayOrder;
/**
* 美食購物車
*/
protected ShoppingCart mShoppingCart;
/**
* 已下單信息
*/
private OrderResponse orderPlaced;
protected String cashStr = "$";
protected String serviceChargeStr = "服務費";
protected String roundingStr = "賬單小數";
private final String noFoodDeliveryTip = "賬單沒有食品,是否開台?";
public abstract void createOrder(boolean isPrint, Class<?> afterToActivity);
public abstract void addOrderFood(boolean isPrint, Class<?> afterToActivity);
public void saveCreateTime(long createTime) {
if (mDoshokuOrder == null) {
mDoshokuOrder.setOpenTableInfo(new TableBean.DataBean());
}
mDoshokuOrder.getOpenTableInfo().setCreateTime(TimeUtils.getTime(createTime, TimeUtils.DEFAULT_DATE_FORMAT));
}
public BaseOrderPresenter2(BaseOrderContract.Model model, BaseOrderContract.View rootView) {
super(model, rootView);
this.mModel = (M) model;
this.mRootView = (V) rootView;
this.mBaseOrderPresenter = this;
if (mRootView instanceof SetMealFragment) {
this.IActivity = (MealStandActivity2) ((SetMealFragment) mRootView).getActivity2();
} else {
if (IActivity instanceof MealStandActivity2) {
mMealStandActivity = (MealStandActivity2) IActivity;
} else if (IActivity instanceof OrderContentActivity) {
mOrderContentActivity = (OrderContentActivity) IActivity;
}
}
if (this instanceof MealStandPresenter2) {
mMealStandPresenter = (MealStandPresenter2) this;
}
BaseOrder baseOrder = OrderFactory.createOrder(BaseOrder.orderType);
if (BaseOrder.isTableToMeal()) {
mDoshokuOrder = (DoshokuOrder) baseOrder;
mTableInfo = mDoshokuOrder.getOpenTableInfo();
} else {
mTakeawayOrder = (TakeawayOrder) baseOrder;
}
mShoppingCart = baseOrder.getShoppingCart();
mOrderMealList = mShoppingCart.getOrderCommodityList();
mBillItemList = mShoppingCart.getBillItemList();
if (mMealStandPresenter != null && mDoshokuOrder != null) {
orderPlaced = mDoshokuOrder.getOrderPlaced();
}
resetSelected();
initOrderAdapter();
initItemClickListener();
updateBillInfo();
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mApplication = null;
}
private void initOrderAdapter() {
if (mSelectMealAdapter == null) {
mSelectMealAdapter = new SelectMealAdapter2(IActivity, mOrderMealList, this);
//設置子父級下標
mSelectMealAdapter.setIndex();
}
if (mBillItemAdapter == null) {
mBillItemAdapter = new BillItemAdapter(IActivity, mBillItemList, cashStr);
}
}
private void initItemClickListener() {
mSelectMealAdapter.setOnItemClickListener(new SelectMealAdapter2.OnItemClickListener() {
@Override
public void onItemClick(OrderDetail datasBean, int position) {
mRootView.recordOperat(true);
}
@Override
public void onMealCountDelete(OrderDetail datasBean, int position) {
mRootView.recordOperat(true);
if (datasBean.getNumber() == 1) {
mSelectMealAdapter.removeFoodItem();
mSelectMealAdapter.notifyDataSetChanged();
updateBillInfo();
} else {
changeNumber(datasBean.getNumber() - 1);
}
}
@Override
public void onMealCountAdd(OrderDetail datasBean, int position) {
mRootView.recordOperat(true);
changeNumber(datasBean.getNumber() + 1);
}
@Override
public void onCurrentOrderDetail(OrderDetail datasBean, int position) {
}
});
}
public void updateBillInfo() {
updateBillInfo(null);
}
/**
* 更新賬單信息
* 1、更新食品折扣
* 2、更新合計
* 3、更新食品折扣
* 4、更新服務費項{@link ServiceChargeItem}
* 5、更新賬單折扣項{@link NomalDiscount}
* 6、更新賬單小數項{@link RoundingItem}
* 7、更新總金額
*/
public void updateBillInfo(UpdateBillInfoEndListener updateBillInfoEndListener) {
mShoppingCart.resetBeforeBillCalculation();
//更新食品折扣
updateFoodDiscount();
//更新合計
double wholeAmount = getFoodTotal();
mShoppingCart.setWholeAmount(wholeAmount);
LoganManager.w_tableMode(TAG, "合計金額=" + wholeAmount);
Disposable disposable = Observable.just(wholeAmount)
.subscribeOn(Schedulers.computation())
/**
* 計算服務費(堂食)
*/
.map(new Function<Double, Double>() {
@Override
public Double apply(Double totalAmount) throws Exception {
if (mDoshokuOrder != null) {
int serviceCharge = mDoshokuOrder.getOpenTableInfo().getServiceCharge();
if (serviceCharge > 0) {
ServiceChargeItem item = new ServiceChargeItem(serviceChargeStr);
double serviceChargeMoney = getServiceableAmout();
totalAmount = item.updateBillItem(serviceChargeMoney, serviceCharge);
if (Double.doubleToLongBits(item.getMoney()) != 0.0) {
mBillItemList.add(item);
mShoppingCart.setServiceCharge(item.getMoney());
}
LoganManager.w_tableMode(TAG, "服務費=" + serviceChargeMoney);
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CALCULATE, "服務費後總金額=" + totalAmount);
}
}
return totalAmount;
}
})
/**
* 計算折扣
*/
.map(new Function<Double, Double>() {
@Override
public Double apply(Double totalAmount) throws Exception {
if (mMealStandActivity != null && orderPlaced != null) {
//添加已送單折扣
List<OrderDiscountResponse> orderDiscounts = orderPlaced.getDiscountDetails();
if (orderDiscounts != null) {
for (OrderDiscountResponse orderDiscount : orderDiscounts) {
if (orderDiscount.getType() == OrderDiscountRequest.ORDER_DISCOUNT) {
LoganManager.w_tableMode(TAG, "已下單整單折扣金額=" + orderDiscount.getDiscountAmount());
//整單折扣
Discount discount = new Discount();
discount.setId(orderDiscount.getDiscountId());
discount.setDiscountRecordId(orderDiscount.getId());
discount.setType(orderDiscount.getDiscountType());
discount.setRemark(orderDiscount.getRemark());
discount.setDiscountValue(orderDiscount.getDiscountValue());
discount.setAmount(orderDiscount.getDiscountAmount());
mShoppingCart.addMultyDiscount(mShoppingCart.createNomalDiscount(discount, BillItem.BILL_ITEM_ORDER_SENT_STATUS));
} else if (orderDiscount.getType() == OrderDiscountRequest.MEMBER_DISCOUNT) {
//會員折扣
MemberInfo memberInfo = mDoshokuOrder.getMemberInfo();
if (memberInfo != null) {
mShoppingCart.addMultyDiscount(mShoppingCart.createMemberDiscount(memberInfo, BillItem.BILL_ITEM_ORDER_SENT_STATUS));
}
LoganManager.w_tableMode(TAG, "已下單會員折扣比例=" + memberInfo.getMemberPoint());
} else if (orderDiscount.getType() == OrderDiscountRequest.COUPON_DISCOUNT) {
LoganManager.w_tableMode(TAG, "已下單優惠券折扣金額=" + orderDiscount.getDiscountAmount());
//優惠券折扣
CouponDiscountBean couponDiscount = new CouponDiscountBean();
couponDiscount.setDiscountRecordId(orderDiscount.getId());
couponDiscount.setCouponTypeName1(orderDiscount.getRemark());
couponDiscount.setCouponTypeName2(orderDiscount.getRemark2());
couponDiscount.setCouponTypeName3(orderDiscount.getRemark3());
couponDiscount.setAccumulate(orderDiscount.getAccumulate());
couponDiscount.setSpend(orderDiscount.getSpend());
couponDiscount.setDiscount(orderDiscount.getDiscountValue());
couponDiscount.setAmount(orderDiscount.getDiscountAmount());
mShoppingCart.addMultyDiscount(mShoppingCart.createCouponDiscount(couponDiscount, BillItem.BILL_ITEM_ORDER_SENT_STATUS));
}
}
}
}
//打上折上折,免服務費標記
setOrderMealPasteDSMark();
//計算折扣金額
double discountableMoney = getDiscountableAmount();
LoganManager.w_tableMode(TAG, "可折扣金額=" + discountableMoney);
if (mShoppingCart.getMultyDiscountList().size() > 0) {
//調用折扣鏈進行計算
totalAmount = MoneyUtil.sub(totalAmount, mShoppingCart.calculateLinkedDiscounts(discountableMoney));
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CALCULATE, "賬單後總金額=" + totalAmount);
}
return totalAmount;
}
})
/**
* 計算賬單小數
*/
.map(new Function<Double, Double>() {
@Override
public Double apply(Double totalAmount) throws Exception {
double roundingTotalAmount = getTotalAmountFilterByType(BillItem.ROUNDING_TYPE);
if (roundingTotalAmount > 0) {
LoganManager.w_tableMode(TAG, "賬單小數=" + roundingTotalAmount);
RoundingItem item = new RoundingItem(roundingStr);
totalAmount = item.updateBillItem(roundingTotalAmount);
if (Double.doubleToLongBits(item.getMoney()) != 0.0) {
mBillItemList.add(item);
mShoppingCart.setRounding(item.getMoney());
}
}
return totalAmount;
}
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Double>() {
@Override
public void accept(Double totalAmount) {
//更新總金額
mShoppingCart.setTotalAmount(totalAmount);
//刷新賬單Item數據
mBillItemAdapter.notifyDataSetChanged();
//刷新美食Item數據
mSelectMealAdapter.notifyDataSetChanged();
LoganManager.w_tableMode(TAG, "總金額=" + totalAmount);
if (mOrderContentActivity != null) {
mOrderContentActivity.initOrderBill(wholeAmount, totalAmount);
}
if (updateBillInfoEndListener != null) {
updateBillInfoEndListener.onUpdateEnd();
}
}
});
addDispose(disposable);
}
/**
* 給不參與折上折,參與免服務費的美食打上標記貼上
*/
private void setOrderMealPasteDSMark() {
for (int i = 0; i < mOrderMealList.size(); i++) {
OrderDetail orderMealItem = mOrderMealList.get(i);
//初始化標記
orderMealItem.setAdditionalDiscount((byte) 1);
orderMealItem.setFreeServiceCharge((byte) 0);
//查找當前套餐下是否存在折扣
OrderDetail discountItem = findCurrentMixOrderWithDiscount(orderMealItem);
if (discountItem != null) {
Discount discount = discountItem.getDiscount();
//打上標記
orderMealItem.setAdditionalDiscount(discount.getAdditionalDiscount());
orderMealItem.setFreeServiceCharge(discount.getFreeServiceCharge());
}
}
}
/**
* 查找當前套餐下折扣
*
* @param orderMealItem
* @return
*/
private OrderDetail findCurrentMixOrderWithDiscount(OrderDetail orderMealItem) {
int parentIndex = orderMealItem.getParentIndex();
int myIndex = orderMealItem.getMyIndex();
for (OrderDetail orderItem : mOrderMealList) {
if (orderItem.getType() == DISCOUNT_TYPE && (parentIndex == orderItem.getParentIndex() || myIndex == orderItem.getParentIndex())) {
//查找到是同組套餐
return orderItem;
}
}
return null;
}
/**
* 查詢對應的BillItem類
*
* @param cla
* @return
*/
public BillItem findBillItemByClass(Class<?> cla) {
BillItem billItem = null;
for (BillItem item : mBillItemList) {
if (item.getClass().equals(cla)) {
billItem = item;
break;
}
}
return billItem;
}
protected void toScanActivity() {
PermissionUtil.launchCamera(new PermissionUtil.RequestPermission() {
@Override
public void onRequestPermissionSuccess() {
String title = null;
if (IActivity instanceof MealStandActivity) {
title = "掃描會員碼";
} else if (IActivity instanceof OrderContentActivity) {
title = "掃描優惠券碼";
}
CC.obtainBuilder(ComponentName.COMPONENT_SCAN)
.setActionName("openScanActivity")
.addParam("title", title)
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
});
}
@Override
public void onRequestPermissionFailure(List<String> permissions) {
DeviceUtils.startSetting(IActivity);
mRootView.showMessage(LanguageUtils.get_language_system(IActivity, "please.open.camera.permissions", "請前往設置開放照相機權限"));
}
@Override
public void onRequestPermissionFailureWithAskNeverAgain(List<String> permissions) {
DeviceUtils.startSetting(IActivity);
mRootView.showMessage(LanguageUtils.get_language_system(IActivity, "please.open.camera.permissions", "請前往設置開放照相機權限"));
}
}, new RxPermissions(IActivity), mErrorHandler);
}
public void changeNumber(int number) {
if (!changeNumberCondition(number)) {
return;
}
OrderDetail orderFood = mOrderMealList.get(mSelectMealAdapter.getSelect_full_start_position());
OrderDetail orderMainFood = mOrderMealList.get(mSelectMealAdapter.getMainStartPos());
LoganManager.w_tableMode(TAG, LoganManager.EVENT_MODIFY, orderFood.getProductName() + " 數量=" + number);
mShoppingCart.changeNumber(number, orderFood, orderMainFood,
mSelectMealAdapter.getSelect_full_start_position(),
mSelectMealAdapter.getSelect_full_end_position(),
new ShoppingCartNumberChange.OnNumberChangeListener() {
@Override
public void achieveMaximum(String name) {
String msg = "[" + name + "]" + "已售罄";
LoganManager.w_tableMode(TAG, msg);
CommonTipDialog.showSurpisedDialog(IActivity, msg, null, null, null, null, null);
}
});
// if (mMealStandPresenter != null) {
// mMealStandPresenter.updateMealSoldoutCtrData();
// mMealStandPresenter.updateOrderFoodNumber();
// }
mSelectMealAdapter.notifyDataSetChanged();
updateBillInfo();
}
public boolean changeNumberCondition(int i) {
if (mOrderMealList.size() <= 0) {
return false;
}
if (mSelectMealAdapter.getSelect_start_position() == -1 || mSelectMealAdapter.getSelect_start_position() >= mSelectMealAdapter.getInfos().size()) {
return false;
}
if (mOrderMealList.get(mSelectMealAdapter.getSelect_start_position()).isIsfood() == false) {
return false;
}
//旧食品不可以修改数量
if (mDoshokuOrder != null && !mDoshokuOrder.isModifyOrder() && mOrderMealList.get(mSelectMealAdapter.getSelect_start_position()).isNew() == false && i != 0) {
return false;
}
if (mSelectMealAdapter.getSelect_position() == -1) {
return false;
}
if (mOrderMealList.size() <= 0) {
return false;
}
if (mSelectMealAdapter.getMainStartPos() > mOrderMealList.size()) {
return false;
}
OrderDetail orderMainFood = mOrderMealList.get(mSelectMealAdapter.getMainStartPos());
if (mDoshokuOrder != null && mMealStandPresenter != null && orderMainFood != null) {
//積分是否滿足
// if (!mMealStandPresenter.memberPointsCondition(orderMainFood.getPointsRedeem() * i, orderMainFood.getProductName())) {
// return false;
// }
}
return true;
}
/**
* 送單
*
* @param isPrint 是否印單
*/
public void sendOrder(boolean isPrint, Class<?> afterToActivity) {
if (!sendOrderConditionFilter()) {
return;
}
if (mDoshokuOrder.getOrderId() < 1) {
if (getFoodSize() == 0) {
Class[] parameterTypes = {boolean.class, Class.class};
Object[] parameters = {isPrint, afterToActivity};
CommonTipDialog.showDoubtDialog(IActivity, noFoodDeliveryTip, BaseOrderPresenter2.class, this,
"executeCreateOrder", parameterTypes, parameters);
} else {
executeCreateOrder(isPrint, afterToActivity);
}
} else {
executeAddOrderFood(isPrint, afterToActivity);
}
}
private void executeCreateOrder(boolean isPrint, Class<?> afterToActivity) {
createOrder(isPrint, afterToActivity);
}
private void executeAddOrderFood(boolean isPrint, Class<?> afterToActivity) {
addOrderFood(isPrint, afterToActivity);
}
/**
* 送單條件過濾
*
* @return
*/
public boolean sendOrderConditionFilter() {
if (mDoshokuOrder == null) {
return false;
}
MemberInfo memberInfo = mDoshokuOrder.getMemberInfo();
if (memberInfo == null) {
for (OrderDetail item : getNewOrderFoodLists()) {
if (item.getPointsAdd() != 0 || item.getPointsRedeem() != 0) {
String msg = "有積分食品,請使用會員后結賬!";
CommonTipDialog.showSurpisedDialog(IActivity, msg, BaseOrderPresenter2.class, this,
"", null, null);
return false;
}
}
}
return true;
}
/**
* 更新食品折扣
*/
protected void updateFoodDiscount() {
boolean updateData = false;
double totalMoney = 0;
List<OrderDetail> orderDetailList = getOrderFoodLists();
int start_position = mSelectMealAdapter.getSelect_full_start_position();
int end_position = mSelectMealAdapter.getSelect_full_end_position();
boolean hasFoodDiscount = OrderDetail.hasFoodDiscount(orderDetailList, start_position, end_position);
if (hasFoodDiscount) {
for (int i = 0; i < orderDetailList.size(); i++) {
if (start_position <= i && i <= end_position) {
OrderDetail orderDetailsBean = orderDetailList.get(i);
if (orderDetailsBean.getDiscount() != null && orderDetailsBean.getType() == DISCOUNT_TYPE) {
updateData = true;
double discountPrice = NomalDiscount.calculationDiscount(orderDetailsBean.getDiscount(), totalMoney);
//更新折扣金額
orderDetailsBean.setPrice(discountPrice);
break;
} else {
if (!orderDetailsBean.canAbleDiscount()) {
//此食品或细项不支持折扣 直接跳过
continue;
}
//保存每個食品套餐折扣總額
totalMoney = MoneyUtil.sum(totalMoney, orderDetailsBean.getPrice());
//往下找
int nextIndex = i + 1;
if (orderDetailList.size() == nextIndex || orderDetailList.get(nextIndex).getParentId() == 0) {
//已到結尾或者下一個食品是主食品
//找到下一個主食品 重置折扣價格
totalMoney = 0;
}
//參與折扣
// orderDetailsBean.setAblediscount(1);
if (!orderDetailsBean.isNew()) {
if (orderDetailsBean.getDiscountStatus() == 0) {
//此食品新增折扣
orderDetailsBean.setDiscountStatus(1);
}
}
}
}
}
} else {
for (int i = 0; i < orderDetailList.size(); i++) {
if (start_position <= i && i <= end_position) {
OrderDetail orderDetailsBean = orderDetailList.get(i);
// orderDetailsBean.setAblediscount(0);
orderDetailsBean.setDiscountStatus(0);
}
}
}
if (updateData) {
mSelectMealAdapter.notifyDataSetChanged();
}
}
/**
* 創建訂單后保存OrderId
*
* @param orderId
*/
protected void setOrderId(double orderId) {
mDoshokuOrder.setOrderId((long) orderId);
}
/**
* 創建訂單后保存OrderNo
*
* @param orderNo
*/
protected void setOrderNo(String orderNo) {
mDoshokuOrder.setOrderNo(orderNo);
}
/**
* 重置選中狀態
*/
public void resetSelected() {
for (int i = 0; i < mOrderMealList.size(); i++) {
OrderDetail datasBean = mOrderMealList.get(i);
datasBean.setSelected(0);
}
if (mSelectMealAdapter != null) {
mSelectMealAdapter.notifyDataSetChanged();
}
}
/**
* 獲取食品合計
*
* @return
*/
public double getFoodTotal() {
double total = 0.0;
for (OrderDetail food : mOrderMealList) {
if (food.getNumber() == 0) {
continue;
}
if (food.getType() == DISCOUNT_TYPE) {
//折扣金额直接减掉
total = MoneyUtil.sub(total, Math.abs(food.getPrice()));
} else {
total = MoneyUtil.sum(total, food.getPrice());
}
}
if (total < 0) {
total = 0;
}
return MoneyUtil.get_ItemDecimals_money(total);
}
/**
* 獲取可折扣金額
*
* @return
*/
private double getDiscountableAmount() {
double total = 0.0;
int orderSize = mOrderMealList.size();
for (int i = 0; i < orderSize; i++) {
OrderDetail orderMealItem = mOrderMealList.get(i);
if (orderMealItem.getNumber() == 0 || orderMealItem.getAdditionalDiscount() == 0) {
//不可折上折
continue;
}
if (orderMealItem.getItemType() == 1) {
if (orderMealItem.canAbleDiscount()) {
total = MoneyUtil.sum(total, orderMealItem.getPrice());
}
} else {
int parentIndex = orderMealItem.getParentIndex() - 1;
OrderDetail parentFood = mOrderMealList.get(parentIndex);
if (orderSize > parentIndex && parentFood.canAbleDiscount()) {
if (orderMealItem.getType() == DISCOUNT_TYPE) {
//主食品参与折扣,折扣金额直接减掉
total = MoneyUtil.sub(total, Math.abs(orderMealItem.getPrice()));
} else {
//主食品可參與折扣 子食品才能參與折扣
if (orderMealItem.canAbleDiscount()) {
total = MoneyUtil.sum(total, orderMealItem.getPrice());
}
}
}
}
}
return total;
}
/**
* 獲取可服务费食品合計
*
* @return
*/
private double getServiceableAmout() {
double total = 0.0;
int orderSize = mOrderMealList.size();
for (int i = 0; i < orderSize; i++) {
OrderDetail orderMealItem = mOrderMealList.get(i);
if (orderMealItem.getNumber() == 0 || orderMealItem.getFreeServiceCharge() == 1) {
//免服務費
continue;
}
if (orderMealItem.getItemType() == 1) {
if (orderMealItem.getScAble() == 1) {
total = MoneyUtil.sum(total, orderMealItem.getPrice());
}
} else {
int parentIndex = orderMealItem.getParentIndex() - 1;
if (orderSize > parentIndex && mOrderMealList.get(parentIndex).getScAble() == 1) {
if (orderMealItem.getType() == DISCOUNT_TYPE) {
//主食品参与服务费,折扣金额直接减掉
total = MoneyUtil.sub(total, Math.abs(orderMealItem.getPrice()));
} else {
//主食品可參與服务费 子食品才能參與服务费
if (orderMealItem.getScAble() == 1) {
total = MoneyUtil.sum(total, orderMealItem.getPrice());
}
}
}
}
}
if (total < 0) {
total = 0;
}
return MoneyUtil.get_ItemDecimals_money(total);
}
/**
* 獲取總金額
*
* @return
*/
public double getTotalAmountFilterByType(int... filterTypes) {
double foodTotal = getFoodTotal();
for (BillItem item : mBillItemList) {
if (!filterType(item.getType(), filterTypes)) {
if (item instanceof ServiceChargeItem && mBillItemAdapter.getFreeServiceStauts()) {
//TODO 免服務費
} else {
foodTotal = MoneyUtil.sum(foodTotal, item.getMoney());
if (0 > foodTotal) {
//折扣金額不能超出總額
foodTotal = 0;
}
}
}
}
if (foodTotal < 0) {
foodTotal = 0;
}
return MoneyUtil.get_ItemDecimals_money(foodTotal);
}
private boolean filterType(int curType, int... filterTypes) {
for (int type : filterTypes) {
if (curType == type) {
return true;
}
}
return false;
}
/**
* 獲取總金額:已減去折扣,服務費
*
* @return
*/
public double getTotalAmount() {
double foodTotal = getFoodTotal();
for (BillItem item : mBillItemList) {
if (item instanceof ServiceChargeItem && mBillItemAdapter.getFreeServiceStauts()) {
//TODO 免服務費
} else {
foodTotal = MoneyUtil.sum(foodTotal, item.getMoney());
if (0 > foodTotal) {
//折扣金額不能超出總額
foodTotal = 0;
}
}
}
if (foodTotal < 0) {
foodTotal = 0;
}
return MoneyUtil.get_ItemDecimals_money(foodTotal);
}
/**
* 獲取賬單小數
*
* @return
*/
protected Double getRounding() {
for (BillItem item : mBillItemList) {
if (item instanceof RoundingItem) {
return item.getMoney();
}
}
return null;
}
/**
* 獲取食品總數量
*
* @return
*/
public int getFoodCount() {
int count = 0;
for (OrderDetail food : mOrderMealList) {
if (food.getType() != DISCOUNT_TYPE) {
//排除掉折扣
count += food.getNumber();
}
}
return count;
}
/**
* 獲取食品Item個數
*
* @return
*/
public int getFoodSize() {
return getOrderFoodLists().size();
}
/**
* 返回選中已送單食品ID
*
* @return
*/
protected String getSelectedOldFoodIds() {
StringBuilder builder = new StringBuilder();
List<OrderDetail> orderDetails = getOldOrderFoodLists();
for (int i = orderDetails.size() - 1; i >= 0; i--) {
OrderDetail orderDetail1 = orderDetails.get(i);
if (orderDetail1.getSelected() != 0 && orderDetail1.getType() != DISCOUNT_TYPE) {
builder.append(orderDetail1.getId());
builder.append(",");
}
}
String str = builder.toString();
if (str.endsWith(",")) {
str = str.substring(0, str.length() - 1);
}
return str;
}
/**
* 返回選中已送單食品
*
* @return
*/
protected List<OrderDetail> getSelectedOldFood() {
List<OrderDetail> selectedOldOrders = new ArrayList<>();
List<OrderDetail> oldOrders = getOldOrderFoodLists();
int start_position = mSelectMealAdapter.getSelect_full_start_position();
int end_position = mSelectMealAdapter.getSelect_full_end_position();
for (int i = oldOrders.size() - 1; i >= 0; i--) {
if (start_position <= i && i <= end_position) {
OrderDetail orderDetail1 = oldOrders.get(i);
if (orderDetail1.getType() != DISCOUNT_TYPE) {
selectedOldOrders.add(orderDetail1);
}
}
}
return selectedOldOrders;
}
/**
* 返回選中已送單食品、折扣
*
* @return
*/
protected List<OrderDetail> getSelectedOldFoodAndDiscount() {
List<OrderDetail> selectedOldOrders = new ArrayList<>();
List<OrderDetail> oldOrders = getOldOrderFoodLists();
int start_position = mSelectMealAdapter.getSelect_full_start_position();
int end_position = mSelectMealAdapter.getSelect_full_end_position();
for (int i = oldOrders.size() - 1; i >= 0; i--) {
if (start_position <= i && i <= end_position) {
OrderDetail orderDetail1 = oldOrders.get(i);
selectedOldOrders.add(orderDetail1);
}
}
return selectedOldOrders;
}
protected CreateOrderRequest getCreateOrderRequest(List<OrderDetail> foodList) {
List<OrderDetail> newFoodList = OrderDetail.transNewOrderDetails(foodList);
if (RestaurantExpandInfoUtils.getValue(ExpandConstant.MergeSendFood, true)) {
//合并未送单主食品
mergeMainFoodNumber(newFoodList);
}
setChildScAbleByMainAble(newFoodList);
setChildDiscountByMainAblediscount(newFoodList);
TableBean.DataBean tableBean = mDoshokuOrder.getOpenTableInfo();
int restaurantId = RestaurantInfoManager.newInstance().getRestaurantId();
CreateOrderRequest request = new CreateOrderRequest();
request.setTableNumber(tableBean.getTableNumber());
request.setOrderDetails(orderDetailBeanToFoodRequest(newFoodList));
request.setPerson(tableBean.getPerson());
request.setTableId(tableBean.getId());
request.setTableName(tableBean.getTableName());
request.setScanId(tableBean.getScanId());
request.setRounding(getRounding());
request.setRestaurantId(restaurantId);
List<OrderDiscountRequest> discountDetails = getOrderDiscountDetails();
request.setDiscountDetails(discountDetails);
return request;
}
protected AddOrderRequest getAddOrderRequest(List<OrderDetail> foodList) {
List<OrderDetail> newFoodList = OrderDetail.transNewOrderDetails(foodList);
if (RestaurantExpandInfoUtils.getValue(ExpandConstant.MergeSendFood, true)) {
//合并未送单主食品
mergeMainFoodNumber(newFoodList);
}
setChildScAbleByMainAble(newFoodList);
setChildDiscountByMainAblediscount(newFoodList);
AddOrderRequest request = new AddOrderRequest();
request.setOrderId(mDoshokuOrder.getOrderId());
request.setTableId(mDoshokuOrder.getOpenTableInfo().getId());
if (mDoshokuOrder.getMemberInfo() != null) {
request.setMemberId(mDoshokuOrder.getMemberInfo().getId());
}
request.setTableNumber(mDoshokuOrder.getOpenTableInfo().getTableNumber());
request.setMaps(orderDetailBeanToAddFoodRequest(newFoodList));
if (mDoshokuOrder.getDeleteMealOrders() != null) {
request.setDeleteOrders(mDoshokuOrder.getDeleteMealOrders());
}
if (mDoshokuOrder.getDeleteDiscountIds() != null) {
request.setDeleteDiscountIds(mDoshokuOrder.getDeleteDiscountIds());
}
Double rounding = getRounding();
request.setRounding(rounding != null ? rounding : 0);
List<OrderDiscountRequest> discountDetails = getOrderDiscountDetails();
request.setDiscountDetails(discountDetails);
return request;
}
/**
* 獲取賬單折扣
*
* @return
*/
private List<OrderDiscountRequest> getOrderDiscountDetails() {
List<OrderDiscountRequest> discountRequests = new ArrayList<>();
for (BillItem item : mBillItemList) {
if (item instanceof DiscountItem) {
if (item.getType() == BillItem.NOMAL_DISCOUNT_TYPE) {
discountRequests.add(OrderDiscountRequest.orderDiscountTransRequest((DiscountItem) item));
continue;
}
if (item.getType() == BillItem.MEMBER_DISCOUNT_TYPE) {
discountRequests.add(OrderDiscountRequest.memberDiscountTransRequest((DiscountItem) item));
continue;
}
if (item.getType() == BillItem.COUPON_DISCOUNT_TYPE) {
discountRequests.add(OrderDiscountRequest.couponDiscountTransRequest((DiscountItem) item));
continue;
}
}
}
return discountRequests;
}
protected Map<String, List<OrderResponse.OrderDetailsBean>> orderDetailBeanToFoodRequest(List<OrderDetail> foodList) {
Map<String, List<OrderResponse.OrderDetailsBean>> orderDetails = new HashMap<>();
if (foodList != null) {
//套餐明細ID
long mapIndex = 0;
//打印用到,清理掉之前保存的食品
mDoshokuOrder.getNewFoodList().clear();
for (int i = 0; i < foodList.size(); i++) {
OrderDetail item = foodList.get(i);
if (item.getItemType() != 1) {
//不是主食品直接跳過
continue;
}
mapIndex += 1;
List<OrderResponse.OrderDetailsBean> orderItems = getOrderMapItems(1, i, item, foodList);
if (orderItems.size() > 0) {
orderDetails.put(String.valueOf(mapIndex), orderItems);
}
}
}
return orderDetails;
}
protected Map<String, List<OrderResponse.OrderDetailsBean>> orderDetailBeanToAddFoodRequest(List<OrderDetail> foodList) {
/**
* 1#主食品(完全新點)
* 2#主食品+子食品+細項(主食品基礎上新加)
*/
long type1 = 1;
long type2 = 2;
//打印用到,清理掉之前保存的食品
mDoshokuOrder.getNewFoodList().clear();
//可重複的map
Map<String, List<OrderResponse.OrderDetailsBean>> orderDetails = new HashMap<>();
if (foodList != null) {
//套餐明細ID
String mapIndex;
int indexCount = 0;
for (int i = 0; i < foodList.size(); i++) {
OrderDetail item = foodList.get(i);
if (item.getItemType() != 1) {
//不是主食品直接跳過
continue;
}
indexCount += 1;
if (item.isNew()) {
//完全新點的一個食品
mapIndex = indexCount + "-" + type1;
} else {
//基礎上新加
mapIndex = indexCount + "-" + type2;
}
List<OrderResponse.OrderDetailsBean> orderItems = getOrderMapItems(2, i, item, foodList);
if (orderItems.size() > 0) {
orderDetails.put(mapIndex, orderItems);
}
}
}
return orderDetails;
}
private List<OrderResponse.OrderDetailsBean> getOrderMapItems(int orderAction, int startIndex, OrderDetail parentItem, List<OrderDetail> foodList) {
List<OrderResponse.OrderDetailsBean> orderItems = new ArrayList<>();
for (int j = startIndex; j < foodList.size(); j++) {
OrderDetail item = foodList.get(j);
boolean myIndex = item.getMyIndex() != parentItem.getMyIndex();
boolean parentIndex = item.getParentIndex() != parentItem.getMyIndex();
if (myIndex && parentIndex && item.getType() != OrderDetail.MODIFIER_TYPE) {
//已經循環過當前套餐 退出循環
break;
}
if (item.getType() == DISCOUNT_TYPE) {
//折扣直接跳過
continue;
}
OrderResponse.OrderDetailsBean orderItem = new OrderResponse.OrderDetailsBean();
if (orderAction == 2) {
orderItem.setOrderId(item.getOrderId());
if (item.getId() != 0) {
orderItem.setId(item.getId());
}
}
orderItem.setMemberId(UserContext.newInstance().getMemberId());
orderItem.setProductName(item.getProductName());
orderItem.setProductId(item.getProductId());
orderItem.setParentId(item.getParentId());
orderItem.setTopId(item.getTopId());
orderItem.setNumber(item.getNumber());
orderItem.setPrice(item.getUnit_price());
orderItem.setCost(item.getCost());
orderItem.setType(item.getType());
orderItem.setPrintSetIng(item.getPrintseting());
orderItem.setAblediscount(item.getAblediscount());
orderItem.setScAble(item.getScAble());
if (item.canAbleDiscount()) {
//可參與折扣
List<OrderResponse.OrderDetailsBean.RestaurantDiscountVO> discountList = getRestaurantDiscountList(foodList, parentItem);
if (discountList.size() > 0) {
orderItem.setDiscountList(discountList);
}
}
// orderItem.setLunchboxPrice(0);
orderItem.setPointsAdd(item.getPointsAdd());
orderItem.setPointsRedeem(item.getPointsRedeem());
if (orderAction == 2) {
if (item.isNew() || item.getDiscountStatus() == 1) {
//這裡只添加新食品或有新折扣食品
orderItems.add(orderItem);
//保存新食品,打印用到
mDoshokuOrder.getNewFoodList().add(item);
}
} else {
if (item.isNew()) {
//這裡只添加新食品
orderItems.add(orderItem);
//保存新食品,打印用到
mDoshokuOrder.getNewFoodList().add(item);
}
}
}
return orderItems;
}
/**
* 送单前根据主食品Ablediscount更新子食品Ablediscount(前端处理后台直接存即可)
*
* @param newFoodList
*/
private void setChildDiscountByMainAblediscount(List<OrderDetail> newFoodList) {
int orderSize = newFoodList.size();
for (int i = 0; i < orderSize; i++) {
OrderDetail food = newFoodList.get(i);
if (food.getItemType() != 1) {
int parentIndex = food.getParentIndex() - 1;
if (orderSize > parentIndex && !newFoodList.get(parentIndex).canAbleDiscount()) {
//主食品不可參與折扣 子食品也不能參與折扣
food.setAblediscount(0);
}
}
}
}
/**
* 送单前根据主食品ScAble更新子食品ScAble(前端处理后台直接存即可)
*
* @param newFoodList
*/
private void setChildScAbleByMainAble(List<OrderDetail> newFoodList) {
int orderSize = newFoodList.size();
for (int i = 0; i < orderSize; i++) {
OrderDetail food = newFoodList.get(i);
if (food.getItemType() != 1) {
int parentIndex = food.getParentIndex() - 1;
if (orderSize > parentIndex && !newFoodList.get(parentIndex).canAbleDiscount()) {
//主食品不可參與折扣 子食品也不能參與折扣
food.setScAble((byte) 0);
}
}
}
}
/**
* 合并新下单主食品数量
*
* @param foodList
*/
protected void mergeMainFoodNumber(List<OrderDetail> foodList) {
List<Integer> removeIndexs = new ArrayList<>();
for (int i = 0; i < foodList.size(); i++) {
OrderDetail orderFood = foodList.get(i);
if (!orderFood.isNew() || orderFood.getItemType() != 1) {
continue;
}
if (hasChildFood(foodList, orderFood)) {
continue;
}
//合并总数量
int mergeNum = orderFood.getNumber();
for (int j = i; j < foodList.size(); j++) {
if (!orderFood.isNew() || i == j) {
continue;
}
OrderDetail mergeFood = foodList.get(j);
boolean canMerge = mergeFood.getItemType() == 1 && mergeFood.getProductId() == orderFood.getProductId() && !hasChildFood(foodList, mergeFood);
if (canMerge) {
//合并数量
mergeNum += mergeFood.getNumber();
if (!removeIndexs.contains(mergeFood.getMyIndex())) {
//添加所需移除已合并的食品
removeIndexs.add(mergeFood.getMyIndex());
}
}
}
orderFood.setNumber(mergeNum);
}
for (int i = removeIndexs.size() - 1; i >= 0; i--) {
for (int j = foodList.size() - 1; j >= 0; j--) {
if (removeIndexs.get(i) == foodList.get(j).getMyIndex()) {
foodList.remove(j);
break;
}
}
}
}
/**
* 是否包含子项
*
* @param orderDetailList
* @param orderDetail
* @return
*/
private boolean hasChildFood(List<OrderDetail> orderDetailList, OrderDetail orderDetail) {
List<OrderDetail> orderList = getChildFoods(orderDetailList, orderDetail);
if (orderList.size() == 0) {
return false;
} else {
return true;
}
}
/**
* 獲取食品下所有子項
*
* @param orderDetailList
* @param orderDetail
* @return
*/
protected List<OrderDetail> getChildFoods(List<OrderDetail> orderDetailList, OrderDetail orderDetail) {
List<OrderDetail> orderList = new ArrayList<>();
if (orderDetail.getItemType() == 3) {
return orderList;
}
for (int i = 0; i < orderDetailList.size(); i++) {
if (orderDetailList.get(i).getParentIndex() == orderDetail.getMyIndex()) {
orderList.add(orderDetailList.get(i));
}
}
return orderList;
}
/**
* 根據主食品ID獲取折扣列表
*
* @param orderItems
* @param parentItem
* @return
*/
private List<OrderResponse.OrderDetailsBean.RestaurantDiscountVO> getRestaurantDiscountList(List<OrderDetail> orderItems, OrderDetail parentItem) {
long mainParentId = parentItem.isNew() ? parentItem.getProductId() : parentItem.getId();
List<OrderResponse.OrderDetailsBean.RestaurantDiscountVO> discountList = new ArrayList<>();
for (OrderDetail item : orderItems) {
if (item.getDiscount() != null && item.getParentId() == mainParentId) {
Discount discount = item.getDiscount();
OrderResponse.OrderDetailsBean.RestaurantDiscountVO discountVO = new OrderResponse.OrderDetailsBean.RestaurantDiscountVO();
discountVO.setId(discount.getDiscountRecordId());
discountVO.setDiscountId(discount.getId());
discountVO.setType(discount.getType());
discountVO.setRemark(discount.getRemark());
discountVO.setDiscountValue(discount.getDiscountValue());
discountVO.setDiscountAmount(item.getPrice());
discountList.add(discountVO);
if (item.isNew()) {
//设置当前食品下包含为送单折扣状态
parentItem.setDiscountStatus(1);
}
}
}
return discountList;
}
/**
* 獲取優惠券折扣ID
*
* @return
*/
protected Long getCouponDiscountId() {
CouponDiscount couponDiscount = (CouponDiscount) mShoppingCart.getDiscountByType(BillItem.COUPON_DISCOUNT_TYPE);
if (couponDiscount != null) {
return couponDiscount.getCouponDiscountId();
}
return null;
}
/**
* 返回未送單整單折扣
*
* @return
*/
protected BillItem getNewDiscount() {
for (BillItem item : mBillItemList) {
if (item.getStatus() == BillItem.BILL_ITEM_NO_ORDER_STATUS &&
(item.getType() == BillItem.NOMAL_DISCOUNT_TYPE ||
item.getType() == BillItem.MEMBER_DISCOUNT_TYPE ||
item.getType() == BillItem.COUPON_DISCOUNT_TYPE)) {
return item;
}
}
return null;
}
/**
* 返回未送單食品列表
*
* @return
*/
protected List<OrderDetail> getNewOrderFoodLists() {
List<OrderDetail> orderDetails = new ArrayList<>();
for (int i = 0; i < getOrderFoodLists().size(); i++) {
OrderDetail orderDetail = getOrderFoodLists().get(i);
if (orderDetail.isNew()) {
orderDetails.add(orderDetail);
}
}
return orderDetails;
}
/**
* 返回已送單食品列表
*
* @return
*/
protected List<OrderDetail> getOldOrderFoodLists() {
List<OrderDetail> orderDetails = new ArrayList<>();
for (int i = 0; i < getOrderFoodLists().size(); i++) {
OrderDetail orderDetail = getOrderFoodLists().get(i);
if (!orderDetail.isNew()) {
orderDetails.add(orderDetail);
}
}
return orderDetails;
}
public boolean hasNesOrderFoods() {
if (getNewOrderFoodLists().size() > 0) {
return true;
}
return false;
}
protected boolean hasOldOrderFoods() {
if (getOldOrderFoodLists().size() > 0) {
return true;
}
return false;
}
public List<OrderDetail> getOrderFoodLists() {
return mOrderMealList;
}
/**
* 修改訂單
*
* @param //orderId 訂單號
* @param //person 人數
*/
public void updateOrderPerson(String peopleNumber, TextView textView) {
RequestBody requestBody = new FormBody.Builder()
.add("orderId", String.valueOf(mDoshokuOrder.getOrderId()))
.add("person", String.valueOf(peopleNumber))
.build();
mModel.updateOrder(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if (baseResult.isSuccess()) {
if (mOrderContentActivity != null) {
textView.setText(peopleNumber);
} else {
textView.setText("人數:" + peopleNumber);
}
mDoshokuOrder.getOpenTableInfo().setPerson(Integer.parseInt(peopleNumber));
}
}
});
}
public ShoppingCart getShoppingCart() {
return mShoppingCart;
}
public SelectMealAdapter2 getSelectMealAdapter(){
return mSelectMealAdapter;
}
public interface UpdateBillInfoEndListener {
void onUpdateEnd();
}
}
package com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand;
import android.app.Application;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.View;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans;
import com.gingersoft.gsa.cloud.common.constans.MealConstant;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInfoUtils;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.FoodCombo;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.order.bean.request.DeleteOrderRequest;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.action.discount.MealDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
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.presenter.BaseOrderPresenter;
import com.gingersoft.gsa.cloud.table.mvp.presenter.BaseOrderPresenter2;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity2;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.DiscountAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.CancelFoodDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.google.gson.internal.LinkedTreeMap;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.RxLifecycleUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import org.simple.eventbus.Subscriber;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.FOOD_GROUP_TYPE;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.FOOD_TYPE;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.MODIFIER_TYPE;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 12/27/2019 19:17
* <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>
* ================================================
*/
@ActivityScope
public class MealStandPresenter2 extends BaseOrderPresenter2<MealStandContract.Model, MealStandContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public MealStandPresenter2(MealStandContract.Model model, MealStandContract.View rootView) {
super(model, rootView);
}
@Override
public void createOrder(boolean isPrint, Class<?> afterToActivity) {
}
@Override
public void addOrderFood(boolean isPrint, Class<?> afterToActivity) {
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
......@@ -3,12 +3,17 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand;
import android.app.Application;
import android.text.TextUtils;
import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.constans.MealConstant;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.rxjava.ErrorHandleSingleSubscriber;
import com.gingersoft.gsa.cloud.common.rxjava.MyRxSchedulerUtils;
import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.database.bean.Food;
......@@ -19,6 +24,7 @@ import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.presenter.BaseOrderPresenter;
import com.gingersoft.gsa.cloud.table.mvp.presenter.BaseOrderPresenter2;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
......@@ -31,6 +37,7 @@ import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import dagger.Lazy;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
......@@ -71,7 +78,7 @@ import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity
* ================================================
*/
@FragmentScope
public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model, SetMealContract.View> {
public class SetMealPresenter extends BaseOrderPresenter2<SetMealContract.Model, SetMealContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
......@@ -92,24 +99,16 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
@Inject
List<Modifier> mModifierList; //细项数据
@Inject
FoodGroupAdapter mFoodGroupAdapter;
@Inject
FoodAdapter mFoodAdapter;
@Inject
ComboAdapter mComboAdapter;
@Inject
ModifierAdapter mModifierAdapter;
private OrderDetail mCurrentOrderDetailBean;
//沽清食品數據
private List<SoldoutCtrFood> mSoldoutCtrList;
private List<SoldoutCtrFood> mSoldoutCtrList = new ArrayList<>();
private boolean RvMealClicked;
@Inject
public SetMealPresenter(SetMealContract.Model model, SetMealContract.View rootView) {
super(model, rootView);
initMealData();
}
@Override
......@@ -131,6 +130,71 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
this.mApplication = null;
}
public void initMealData() {
mModel.queryDB_FoodGroupList(BaseOrder.orderType)
.compose(MyRxSchedulerUtils._io_main_f())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSingleSubscriber<List<Food>>(mErrorHandler) {
@Override
public void onSuccess(List<Food> foodGroupList) {
if (foodGroupList != null && foodGroupList.size() > 0) {
mFoodGroupList.addAll(foodGroupList);
setDefalutFoodGroup(foodGroupList);
updateFoodSoldoutCtrData();
mRootView.initFoodGroupAdapter(foodGroupList);
}
}
});
}
public void changedFoodByParentId(long parentId) {
mModel.queryDB_FoodList(parentId, BaseOrder.orderType)
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSingleSubscriber<List<Food>>(mErrorHandler) {
@Override
public void onSuccess(@NonNull List<Food> foodList) {
mRootView.resetSelect(-1, null);
if (foodList != null) {
updateFoodData(foodList, parentId);
}
mRootView.showViewModeVisibility(MealConstant.food_ViewMode, MealConstant.food_group_ViewMode);
}
});
}
private void setDefalutFoodGroup(List<Food> foodGroupList) {
for (Food food : foodGroupList) {
if (food.getInvisible() == 0) {
//默認選中第一組
food.setSelected(true);
changedFoodByParentId(food.getParentId());
}
}
}
public void initSelectMealAdapter(RecyclerView rvSelectMeal) {
if (mSelectMealAdapter != null) {
rvSelectMeal.setAdapter(mSelectMealAdapter);
}
}
public void foodGroupItemClick(Food datasBean) {
if (!foodGroupConditionFilter(datasBean, false)) {
return;
}
RvMealClicked = true;
datasBean.setSelected(true);
changedFoodByParentId(datasBean.getId());
updateOrderFoodNumber();
updateFoodSoldoutCtrData();
}
public void modifierItemClick(Modifier datasBean) {
RvMealClicked = false;
......@@ -144,7 +208,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
addModifierItem(datasBean);
//更新賬單數
// updateOrderFoodNumber();
updateOrderFoodNumber();
//沽清細項沽清數
updateModifierSoldoutCtrData();
}
......@@ -170,7 +234,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
//更新賬單金額
updateBillInfo();
//更新賬單數
// updateOrderFoodNumber();
updateOrderFoodNumber();
}
public void foodItemClick(Food datasBean) {
......@@ -196,6 +260,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
}
}
}
private void addFoodItemBefore(OrderDetail datasBean) {
int addPosition = addFoodItem(datasBean);
//这里主食品作为选中主体
......@@ -270,24 +335,6 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
mRootView.setMealRvScrollToPosition(addPosition);
}
private void addDiscountItem(Discount datasBean) {
//主食品ID
long id = 0;
if (mSelectMealAdapter.getCurrentMainOrderDetail() != null) {
if (mCurrentOrderDetailBean.isNew()) {
id = mSelectMealAdapter.getCurrentMainOrderDetail().getProductId();
} else {
id = mSelectMealAdapter.getCurrentMainOrderDetail().getId();
}
}
// mCurrentOrderDetailBean = OrderDetail.discountTransOrderDetail(datasBean, true, id, getDisountSourcePrice());
int addPosition = mSelectMealAdapter.addFoodItem(mCurrentOrderDetailBean);
mRootView.setMealRvScrollToPosition(addPosition);
//更新賬單金額
updateBillInfo();
}
private void loadComboData(OrderDetail food, boolean isSelectedMeal) {
Observable.create(new ObservableOnSubscribe<List>() {
@Override
......@@ -372,7 +419,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
//更新賬單金額
updateBillInfo();
}
// updateOrderFoodNumber();
updateOrderFoodNumber();
}
/**
......@@ -530,7 +577,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
}
return -1;
}
public void queryFoodListByParentId(long parentId) {
mModel.queryDB_FoodList(parentId, BaseOrder.orderType)
.compose(MyRxSchedulerUtils._io_main_f())
......@@ -539,7 +586,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
@Override
public void onSuccess(List<Food> foods) {
mFoodAdapter.resetSelect(-1, null);
mRootView.resetSelect(-1, null);
if (foods != null) {
updateFoodData(foods, parentId);
}
......@@ -701,7 +748,6 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
mFoodList.addAll(foodList);
//根据Item个数显示每一行的个数
mRootView.setFoodRecycleSpanCount(mFoodList.size());
mFoodAdapter.notifyDataSetChanged();
}
/**
......@@ -716,7 +762,6 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
updateComboItemSoldoutCtrData();
//根据Item个数显示每一行的个数
mRootView.setComboRecycleSpanCount(mComboList.size());
mComboAdapter.notifyDataSetChanged();
}
/**
......@@ -731,7 +776,6 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
updateModifierSoldoutCtrData();
//根据Item个数显示每一行的个数
mRootView.setModifierRecycleSpanCount(mModifierList.size());
mComboAdapter.notifyDataSetChanged();
}
private void setTopId(List<Food> foodList, long topId) {
......@@ -874,7 +918,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
public void updateComboItemSoldoutCtrData() {
if (mSoldoutCtrList.size() > 0) {
updateFoodSoldoutCtrData();
mComboAdapter.notifyDataSetChanged();
mRootView.notifyComboAdapterAdapter();
}
}
......@@ -886,7 +930,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
clearModifierSoldoutCtrData();
addModifierCtrItem(mSoldoutCtrList);
setModifierSoldoutCtrData(mModifierList, mSoldoutCtrList);
mModifierAdapter.notifyDataSetChanged();
mRootView.notifyModifierAdapterAdapter();
}
}
......@@ -967,10 +1011,8 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
}
}
}
if (mFoodGroupAdapter != null) {
mFoodGroupAdapter.notifyDataSetChanged();
}
mFoodAdapter.notifyDataSetChanged();
mRootView.notifyFoodGroupAdapter();
mRootView.notifyFoodAdapter();
}
private void addModifierCtrItem(List<SoldoutCtrFood> soldoutCtrFoods) {
......@@ -1122,7 +1164,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
}
}
}
mComboAdapter.notifyDataSetChanged();
mRootView.notifyComboAdapterAdapter();
}
public void setModifierMaxQty(Modifier modfier) {
......@@ -1147,7 +1189,7 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
}
}
}
mModifierAdapter.notifyDataSetChanged();
mRootView.notifyModifierAdapterAdapter();
}
/**
......@@ -1261,4 +1303,91 @@ public class SetMealPresenter extends BaseOrderPresenter<SetMealContract.Model,
}
return true;
}
/**
* 獲取所要折扣金額
*
* @return
*/
private double getDisountSourcePrice() {
double discount = 0.0;
int start_position = mSelectMealAdapter.getSelect_full_start_position();
int end_position = mSelectMealAdapter.getSelect_full_end_position();
for (int i = 0; i < mOrderMealList.size(); i++) {
if (start_position <= i && i <= end_position) {
OrderDetail orderDetailsBean = mOrderMealList.get(i);
if (orderDetailsBean.getProp() == OrderDetail.DISCOUNT_PROP) {
//折上折減去以折扣金額
discount = MoneyUtil.sum(discount, orderDetailsBean.getPrice());
} else {
discount = MoneyUtil.sum(discount, orderDetailsBean.getPrice());
}
//參與折扣
// orderDetailsBean.setAblediscount(1);
if (!orderDetailsBean.isNew()) {
if (orderDetailsBean.getDiscountStatus() == 0) {
//此食品新增折扣
orderDetailsBean.setDiscountStatus(1);
}
}
}
}
return discount;
}
public void updateOrderFoodNumber() {
setFoodBtnNumber();
setFoodGroupBtnNumber();
mRootView.setOrderFoodCount(getOrderFoodNumber());
}
private void setFoodBtnNumber() {
for (int i = 0; i < mFoodList.size(); i++) {
Food foodBean = mFoodList.get(i);
foodBean.setNumber(0);
int iNumber = 0;
for (int j = 0; j < mOrderMealList.size(); j++) {
OrderDetail datasBean = mOrderMealList.get(j);
if (datasBean.isNew() && datasBean.getProductId() == foodBean.getId()) {
iNumber = iNumber + datasBean.getNumber();
foodBean.setNumber(iNumber);
}
}
}
mRootView.notifyFoodAdapter();
}
private void setFoodGroupBtnNumber() {
List<OrderDetail> orderDetailList = getOrderFoodLists();
for (int i = 0; i < mFoodGroupList.size(); i++) {
Food foodGroupBean = mFoodGroupList.get(i);
foodGroupBean.setNumber(0);
int iNumber = 0;
if (orderDetailList != null) {
for (int j = 0; j < orderDetailList.size(); j++) {
OrderDetail food = orderDetailList.get(j);
if (food.isNew() && food.getTopId() == foodGroupBean.getId()) {
iNumber = iNumber + food.getNumber();
foodGroupBean.setNumber(iNumber);
}
}
}
}
mRootView.notifyFoodGroupAdapter();
}
private String getOrderFoodNumber() {
int i = 0;
if (getOrderFoodLists() != null) {
for (int j = 0; j < getOrderFoodLists().size(); j++) {
OrderDetail order = getOrderFoodLists().get(j);
if (order.isNew() && order.getItemType() != 3) {
i = i + order.getNumber();
}
}
}
return String.valueOf(i);
}
}
package com.gingersoft.gsa.cloud.table.mvp.ui.activity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.SparseArray;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans;
import com.gingersoft.gsa.cloud.common.constans.MealConstant;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.scan.ScanHelper;
import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.common.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.billItem.DiscountItem;
import com.gingersoft.gsa.cloud.order.cart.ShoppingCart;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.discount.MemberDiscount;
import com.gingersoft.gsa.cloud.order.discount.MultyDiscount;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.print.PrinterUtils;
import com.gingersoft.gsa.cloud.table.BuildConfig;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerMealStand2Component;
import com.gingersoft.gsa.cloud.table.di.component.DaggerMealStandComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.event.InitTableEvent;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.MealStandPresenter;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.MealStandPresenter2;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BaseFragmentAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemAllFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand.SetMealFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.CustomFoodDialog;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.UseMemberDialog;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerConfig;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerGridLayoutManager;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerGridSnapHelper;
import com.gingersoft.gsa.cloud.ui.recylcler.RecyclerViewNoBugLinearLayoutManager;
import com.gingersoft.gsa.cloud.ui.recylcler.decorator.DividerItemDecoration;
import com.gingersoft.gsa.cloud.ui.recylcler.decorator.GridDividerItemDecoration;
import com.gingersoft.gsa.cloud.ui.view.PagerSlidingTabStrip;
import com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gyf.immersionbar.ImmersionBar;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import org.simple.eventbus.EventBus;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView;
import butterknife.OnClick;
import butterknife.OnLongClick;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 12/27/2019 19:17
* <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 class MealStandActivity2 extends BaseFragmentActivity<MealStandPresenter2> implements MealStandContract.View, PagerGridLayoutManager.PageListener {
private SparseArray<View> map = new SparseArray<>(10);
@BindView(R2.id.meal_stand_search_keyboard_view)
SearchKeyBoardView keyboard_view;
@BindView(R2.id.fl_meal_discount)
FrameLayout fl_meal_discount;
private int mCurrentViewMode;
private boolean isPluMode;
private static final int ORDER_CONTENT_CODE = 1002;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerMealStand2Component //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
EventBus.getDefault().registerSticky(this);
super.onCreate(savedInstanceState);
}
@Override
public void configImmersionBar(ImmersionBar immersionBar) {
immersionBar
.fitsSystemWindows(true)
.statusBarColor(R.color.theme_white_color)
.statusBarDarkFont(true)
.init();
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.table_activity_meal_stand2; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
if (findFragment(SetMealFragment.class) == null) {
loadRootFragment(R.id.fl_food_plate, SetMealFragment.newInstance());
}
}
@Override
public boolean isInitFineItemLayout() {
return true;
}
@Override
public int getRestaurantId() {
return RestaurantInfoManager.newInstance().getRestaurantId();
}
@Override
public void initFineItemTabBarViewPage() {
}
@Override
public void setCurrentFinePage() {
}
@Override
public void setPluMode() {
}
@Override
public void resetPluMode() {
}
@Override
public void updateMemberInfo(MemberInfo memberInfo) {
}
@OnClick({ R2.id.btn_send_order, R2.id.tv_no_save_return, R2.id.tv_order_content})
public void onClick(View v) {
recordOperat(true);
//防抖處理
int id = v.getId();
if (id == R.id.btn_numberman) {
if (!BaseOrder.isTableToMeal()) {
return;
}
showChoosePeopleNumDialog(true);
} else if (id == R.id.btn_fid) {
setPluMode();
} else if (id == R.id.btn_send_order) {
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.TAKEAWAY_TYPE)) {
CC.obtainBuilder(ComponentName.COMPONENT_DELIVERYPICK)
.setActionName("SendOrder")
.build()
.call();
return;
}
mPresenter.sendOrder(false, null);
} else if (id == R.id.tv_order_content) {
//如果打印成功會回調
Intent intent = new Intent(mContext, OrderContentActivity.class);
startActivityForResult(intent, ORDER_CONTENT_CODE);
} else if (id == R.id.tv_no_save_return) {
returnTableActivity(true);
}
}
@Override
public void onBackPressedSupport() {
returnTableActivity(true);
}
public void returnTableActivity(boolean initTable) {
if (mPresenter.hasNesOrderFoods()) {
//没有过重复下单提示且有未送单食品,提示用户
String tip = LanguageUtils.get_language_system(this, "food.not.delivered.tip", "有食品未送單, 確認離開?");
Class[] parameterTypes = {boolean.class};
Object[] parameters = {initTable};
CommonTipDialog.showSurpisedDialog(this, tip, MealStandActivity2.class, this,
"returnBeforeActivity", parameterTypes, parameters);
} else {
returnBeforeActivity(initTable);
}
}
public void returnBeforeActivity(boolean initTable) {
if (BaseOrder.isTableToMeal() && initTable && !DoshokuOrder.getInstance().isModifyOrder()) {
TableBean.DataBean dataBean = DoshokuOrder.getInstance().getOpenTableInfo();
if (dataBean != null) {
//通知更新餐台状态
EventBus.getDefault().post(new InitTableEvent(dataBean.getId(), dataBean.getTableNumber()), "initTable_status_event");
}
}
killMyself();
}
@Override
public void recordOperat(boolean isPressButtonSound) {
if (isPressButtonSound) {
VibratorUtils.pressButtonSound(this);
}
}
@Override
public void showChoosePeopleNumDialog(boolean isNeedCancel) {
}
@Override
public void setPrinterLocalmachine(boolean isPrint) {
}
@Override
public void setTableInfoDialogAdapter(BaseAdapter adapter) {
}
@Override
public void setSelectFoodAdapter(RecyclerView.Adapter adapter) {
}
@Override
public void setFoodGroupAdapter(DefaultAdapter adapter) {
}
@Override
public void setFoodAdapter(DefaultAdapter adapter) {
}
@Override
public void setOrderDetailAdapter(DefaultAdapter adapter) {
}
@Override
public void setComboAdapter(DefaultAdapter adapter) {
}
@Override
public void setModifierAdapter(DefaultAdapter adapter) {
}
@Override
public void setDiscountAdapter(DefaultAdapter adapter) {
}
private GridLayoutManager foodRecycleLayoutManager, comboRecycleLayoutManager, modifierRecycleLayoutManager, discountRecycleLayoutManager;
@Override
public void setSelectFoodRecycleLayoutManager() {
}
@Override
public void setFoodGroupRecycleLayoutManager(int orientation) {
}
@Override
public void setFoodRecycleLayoutManager(int orientation) {
}
@Override
public void setComboRecycleLayoutManager(int orientation) {
}
@Override
public void setModifierRecycleLayoutManager(int orientation) {
}
@Override
public void setDiscountRecycleLayoutManager(int orientation) {
}
@Override
public void setFoodGroupRecycleSpanCount(int size) {
}
@Override
public void setFoodRecycleSpanCount(int size) {
}
@Override
public void setComboRecycleSpanCount(int size) {
}
@Override
public void setModifierRecycleSpanCount(int size) {
}
@Override
public void setDiscountRecycleSpanCount(int size) {
}
@Override
public void showViewModeVisibility(int... viewMode) {
//將所有的view隱藏
for (int i = 0; i < map.size(); i++) {
map.valueAt(i).setVisibility(View.INVISIBLE);
}
//設置當前mode為第一個傳入的mode
for (int mode : viewMode) {
this.mCurrentViewMode = mode;
break;
}
//顯示所有傳入的需要顯示的view
for (int mode : viewMode) {
map.get(mode).setVisibility(View.VISIBLE);
}
//設置當前模式為輸入Plu模式
if (viewMode != null && viewMode[0] == MealConstant.ViewMode_keys) {
isPluMode = true;
} else {
isPluMode = false;
}
switch (mCurrentViewMode) {
case MealConstant.food_group_ViewMode:
case MealConstant.food_ViewMode:
showModifyLayoutVisibility(false);
break;
case MealConstant.combo_ViewMode:
// case MealConstant.modifier_ViewMode:
case MealConstant.discount_ViewMode:
case MealConstant.fine_ViewMode:
showModifyLayoutVisibility(true);
break;
default:
break;
}
}
@Override
public void showModifyLayoutVisibility(boolean show) {
}
@Override
public void setOrderFoodCount(String number) {
}
@Override
public void setMealRvScrollToPosition(int position) {
}
@Override
public List<Food> getFoodGroupList() {
return null;
}
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
}
@Override
public void initLanguage() {
}
@Override
public void initLayoutParams() {
}
@Override
public void initLayoutVisible() {
}
@Override
public void showLoading(String message) {
if (message != null)
LoadingDialog.showDialogForLoading(this, message, true);
else
LoadingDialog.showDialogForLoading(this);
}
@Override
public void hideLoading() {
LoadingDialog.cancelDialogForLoading();
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.makeText(MealStandActivity2.this, message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
@Override
public Activity getActivity() {
return this;
}
@Override
public int getFromType() {
return 1;
}
public void clearInput() {
}
/**
* 显示公共信息
*/
public void showRemarkLayout() {
//没有初始化细项布局则初始化
if (!isInitFineItemLayout()) {
} else {
setCurrentFinePage();
showViewModeVisibility(MealConstant.fine_ViewMode, MealConstant.fine_tabs_ViewMode);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ORDER_CONTENT_CODE) {
//訂單內容回調
if (resultCode == Activity.RESULT_OK) {
//打印成功
//結賬成功
//關閉當前頁面
killMyself();
}
} else if (requestCode == ScanHelper.CALL_BACK_QR_RESULT) {
String qrCodeResult = data.getStringExtra("qrCodeResult");
if (TextUtils.isEmpty(qrCodeResult)) {
return;
}
TableBean.DataBean dataBean = DoshokuOrder.getInstance().getOpenTableInfo();
// mPresenter.queryMember(1, qrCodeResult, RestaurantInfoManager.newInstance().getGsPosShopId(), dataBean.getId(), dataBean.getTableNumber());
}
}
public int getCurrentViewMode() {
return mCurrentViewMode;
}
@Override
public void onPageSizeChanged(int pageSize) {
}
@Override
public void onPageSelect(int pageIndex) {
}
@Override
public void setModifierTop(int margins) {
}
@Override
public void setCustomFoodDialog(int customType, OrderDetail foodItem) {
new CustomFoodDialog(mContext, customType)
.create(R.style.MyEditDialogTheme)
.setOnEditListener((dialog, name, money) -> {
dialog.dismiss();
if (customType == Food.CUSTOM_TYPE_101) {
foodItem.setProductName(name);
}
if (!TextUtils.isEmpty(money)) {
foodItem.setUnit_price(Double.parseDouble(money));
foodItem.setPrice(foodItem.getUnit_price());
// mPresenter.toAddFoodItem(foodItem);
}
})
.show();
}
@Override
public void showBtnMealModifyRestoreVisibility(boolean show) {
}
private void setSelectFunctionVisibility(int visibility) {
}
}
......@@ -256,30 +256,7 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
String memberInfo;
String memberName = memberBean.getMemberName();
String LevelName1 = memberBean.getLevelName1();
// if (!TextUtils.isEmpty(LevelName1)) {
// memberInfo = LanguageUtils.get_language_system(this, "meal.info.member.name", "會員名稱:")
// + memberName
// + "(" + LevelName1 + ")";
// } else {
memberInfo = LanguageUtils.get_language_system(this, "meal.info.member.name", "會員:") + memberName;
// }
// boolean showPoints = false;
// if (mPresenter.getPointsAdd() != 0 && mPresenter.getPointsRedeem() != 0) {
// memberInfo = memberInfo + ":" + memberBean.getMemberPoint() + " +" + mPresenter.getPointsAdd() + " -" + mPresenter.getPointsRedeem();
// showPoints = true;
// } else {
// if (mPresenter.getPointsAdd() != 0) {
// memberInfo = memberInfo + ":" + memberBean.getMemberPoint() + " +" + mPresenter.getPointsAdd();
// showPoints = true;
// }
// if (mPresenter.getPointsRedeem() != 0) {
// memberInfo = memberInfo + ":" + memberBean.getMemberPoint() + " -" + mPresenter.getPointsRedeem();
// showPoints = true;
// }
// }
// if (!showPoints) {
// memberInfo = memberInfo + ":" + memberBean.getMemberPoint();
// }
memberIntegral = memberBean.getMemberPoint();
memberPointRedeemCash = memberBean.getPointRedeemCash();
//獲取積分支付抵扣金額
......@@ -581,9 +558,11 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
.action(PayAction.SALE)
.resturantId(RestaurantInfoManager.newInstance().getRestaurantId())
.orderId(DoshokuOrder.getInstance().getOrderId())
.payMethods(mBillMoneyList)
.payType(payMethod.getPayType())
.payMoney(payMethod.getPayMoney())
.resultCallback(new ResultCallback() {
@Override
public void onSuccess() {
paySuccess();
......@@ -593,14 +572,20 @@ public class OrderPayActivity extends BaseFragmentActivity<OrderPayPresenter> im
public void onFailure(Throwable t) {
}
@Override
public void externalPayment() {
mPresenter.sendOrderBefore();
}
@Override
public void hybridPayment(List<PayMethod> payMethods) {
}
})
.build();
PaymentControl.newInstance().showPayFlowFragment(this, parms);
// Intent intent = new Intent(mContext, PayFlowActivity.class);
// intent.putExtra("requestParms",build);
// launchActivity(intent);
// PosPay.builder()
// .context(GsaCloudApplication.getAppContext())
// .lifecycleView(OrderPayActivity.this)
......
......@@ -394,7 +394,7 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
@Override
public void startMealStandActivity() {
startActivity(new Intent(this, MealStandActivity.class));
startActivity(new Intent(this, MealStandActivity2.class));
}
@Override
......
......@@ -18,6 +18,8 @@ import com.jess.arms.base.DefaultAdapter;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
/**
......
......@@ -24,6 +24,8 @@ import com.jess.arms.utils.ArmsUtils;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
......
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.constans.MealConstant;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.mvp.presenter.OrderContentPresenter;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.MealStandPresenter;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.SetMealPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity2;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.ArmsUtils;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2018/9/16
* 修订历史:2018/9/17
* 描述:
*/
public class SelectMealAdapter2 extends DefaultAdapter<OrderDetail> {
private Context mContext;
private MealStandActivity2 mMealStandActivity;
private OrderContentPresenter mOrderContentPresenter;
private int BillListFontSize = 18;
private String carshStr = "$";
private int mainStartPos = 0;
private int mainEndPos = 0;
private int select_position = -1;
private int select_start_position = 0;
private int select_end_position = 0;
public int select_full_start_position = 0;
public int select_full_end_position = 0;
/**
* 選中模式(1=單選,2=多選)
*/
public static final int SINGLE_SELECTED = 1;
public static final int MULTIPLE_SELECTED = 2;
private int selectedMode = SINGLE_SELECTED;
public SelectMealAdapter2(Context context, List<OrderDetail> data, BasePresenter presenter) {
super(data);
this.mContext = context;
this.BillListFontSize = GsaCloudApplication.uiStyleConfiguration.getBillListFontSizeValue();
if (presenter instanceof SetMealPresenter) {
this.mMealStandActivity = (MealStandActivity2) context;
} else if (presenter instanceof OrderContentPresenter) {
this.mOrderContentPresenter = (OrderContentPresenter) presenter;
}
}
@Override
public int getItemCount() {
return mInfos == null ? 0 : mInfos.size();
}
@Override
public SelectMealItemHolder getHolder(View v, int viewType) {
return new SelectMealItemHolder(v);
}
@Override
public int getLayoutId(int viewType) {
return R.layout.meal_item_select_meal_stand;
}
class SelectMealItemHolder extends BaseHolder<OrderDetail> implements View.OnClickListener {
@BindView(R2.id.rl_container)
RelativeLayout rl_container;
@BindView(R2.id.rl_select)
RelativeLayout rl_select;
@BindView(R2.id.ll_tvname)
RelativeLayout ll_tvname;
@BindView(R2.id.tv_number)
TextView tv_number;
@BindView(R2.id.tv_food_table_mode)
TextView tv_food_table_mode;
@BindView(R2.id.tv_modify_before_number)
TextView tv_modify_before_number;
@BindView(R2.id.tv_name)
TextView tv_name;
@BindView(R2.id.tv_money)
TextView tv_money;
@BindView(R2.id.tv_D)
TextView tv_D;
@BindView(R2.id.tv_S)
TextView tv_S;
@BindView(R2.id.tv_D_1)
TextView tv_D_1;
@BindView(R2.id.tv_S_1)
TextView tv_S_1;
@BindView(R2.id.tv_discount_money)
TextView tv_discount_money;
@BindView(R2.id.tv_mix)
TextView tv_mix;
@BindView(R2.id.iv_add_count)
ImageView iv_add_count;
@BindView(R2.id.iv_delete_count)
ImageView iv_delete_count;
public SelectMealItemHolder(View itemView) {
super(itemView);
}
@Override
public void onClick(View view) {
if (mOnItemClickListener != null) {
int position = this.getPosition();
if (position < mInfos.size()) {
if (selectedMode == MULTIPLE_SELECTED) {
if (mInfos.get(position).getSelected() != 0 && mInfos.get(position).getItemType() != 1) {
return;
}
}
setSelectPosition(position);
//设置当前选中的食品或食品组
mOnItemClickListener.onItemClick(mInfos.get(position), position);
}
}
}
@Override
public void setData(OrderDetail datasBean, int position) {
setViewVisibility(datasBean);
if (datasBean.isVisible()) {
rl_container.setVisibility(View.VISIBLE);
setName(datasBean);
setNumber(datasBean);
setMoney(datasBean);
setMealCountLayout(datasBean, position);
setColor(datasBean);
setTextSize();
} else {
rl_container.setVisibility(View.INVISIBLE);
}
}
private void setViewVisibility(OrderDetail datasBean) {
//是否参与折扣
if (!datasBean.canAbleDiscount()) {
tv_D.setVisibility(View.VISIBLE);
} else {
tv_D.setVisibility(View.INVISIBLE);
}
//是否参与服務費
if (datasBean.getScAble() == 0) {
tv_S.setVisibility(View.VISIBLE);
} else {
tv_S.setVisibility(View.INVISIBLE);
}
//是否可折上折
if (datasBean.getType() != OrderDetail.DISCOUNT_TYPE && datasBean.getAdditionalDiscount() == 0) {
tv_D_1.setVisibility(View.VISIBLE);
} else {
tv_D_1.setVisibility(View.INVISIBLE);
}
//使用此折扣是否可免服務費
if (datasBean.getType() != OrderDetail.DISCOUNT_TYPE && datasBean.getFreeServiceCharge() == 1) {
tv_S_1.setVisibility(View.VISIBLE);
} else {
tv_S_1.setVisibility(View.INVISIBLE);
}
tv_discount_money.setVisibility(View.INVISIBLE);
if (datasBean.isModify()) {
if (datasBean.getType() == OrderDetail.MODIFIER_TYPE) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tv_number.getLayoutParams();
layoutParams.rightMargin = ArmsUtils.getDimens(mContext,R.dimen.dp_15);
tv_number.setLayoutParams(layoutParams);
}
tv_modify_before_number.setText(String.valueOf(datasBean.getModifyBeforeNumber()));
tv_modify_before_number.setVisibility(View.VISIBLE);
} else {
tv_modify_before_number.setVisibility(View.INVISIBLE);
if (datasBean.getType() == OrderDetail.MODIFIER_TYPE) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tv_number.getLayoutParams();
layoutParams.rightMargin = 0;
tv_number.setLayoutParams(layoutParams);
}
}
}
private void setMealCountLayout(OrderDetail datasBean, int position) {
if (datasBean.isNew() &&
mOrderContentPresenter != null &&
datasBean.getSelected() != 0 &&
datasBean.getProp() == OrderDetail.FOOD_PROP) {
iv_add_count.setVisibility(View.VISIBLE);
iv_delete_count.setVisibility(View.VISIBLE);
iv_add_count.setOnClickListener(v -> {
if (mOnItemClickListener != null) {
mOnItemClickListener.onMealCountAdd(datasBean, position);
}
});
iv_delete_count.setOnClickListener(v -> {
if (mOnItemClickListener != null) {
mOnItemClickListener.onMealCountDelete(datasBean, position);
}
});
} else {
iv_add_count.setVisibility(View.INVISIBLE);
iv_delete_count.setVisibility(View.INVISIBLE);
}
}
private void setName(OrderDetail datasBean) {
int flevel = datasBean.getItemType();
String name = datasBean.getProductName();
switch (flevel) {
case 1:
tv_number.setGravity(Gravity.LEFT);
break;
case 2:
name = " " + name;
tv_number.setGravity(Gravity.CENTER);
break;
case 3:
name = " " + name;
tv_number.setGravity(Gravity.RIGHT);
break;
}
tv_name.setText(name);
int selected = datasBean.getSelected();
if (selected != 0) {
//作为主体被选中 开启跑马灯效果
tv_name.setFocusable(true);
tv_name.setEllipsize(TextUtils.TruncateAt.MARQUEE);//设置旋转
tv_name.setMarqueeRepeatLimit(-1);//-1为死循环,1为1次
tv_name.setSelected(true);//设置不获取焦点就可以转
tv_name.setFocusableInTouchMode(true);
} else {
//关闭跑马灯效果
tv_name.setFocusable(false);
tv_name.setMarqueeRepeatLimit(0);
tv_name.setSelected(false);
tv_name.setFocusableInTouchMode(false);
}
}
private void setNumber(OrderDetail datasBean) {
int number = datasBean.getNumber();
if (number == 0 || datasBean.getType() == OrderDetail.DISCOUNT_TYPE) {
//细项、折扣不需要显示数量
tv_number.setText("");
} else {
tv_number.setText(String.valueOf(number));
}
}
private void setMoney(OrderDetail datasBean) {
double price = datasBean.getPrice();
if (price != 0) {
if (datasBean.getType() == OrderDetail.DISCOUNT_TYPE) {
tv_money.setText("-" + carshStr + MoneyUtil.get_ItemDecimals_money(Math.abs(price)));
} else {
tv_money.setText(carshStr + MoneyUtil.get_ItemDecimals_money(price));
}
} else {
tv_money.setText("");
}
}
private void setColor(OrderDetail datasBean) {
int selected = datasBean.getSelected();
switch (selected) {
case 0:
rl_container.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.theme_white_color));
rl_select.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.theme_white_color));
ll_tvname.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.theme_white_color));
break;
case 1:
rl_container.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.itemSelected));
rl_select.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.itemSelected));// Color.YELLOW);
ll_tvname.setBackgroundResource(R.color.itemSelected);
break;
case 2:
case 3:
rl_container.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.itemSelected));
rl_select.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.itemSelected));
ll_tvname.setBackgroundResource(R.color.mainSelected);
break;
}
// }
//设置Item选中颜色
if (datasBean.isNew() == false) {
tv_name.setTextColor(ArmsUtils.getColor(mContext, R.color.Grass_green));
tv_number.setTextColor(ArmsUtils.getColor(mContext, R.color.Grass_green));
tv_money.setTextColor(ArmsUtils.getColor(mContext, R.color.Grass_green));
} else {
tv_number.setTextColor(ArmsUtils.getColor(mContext, R.color.black));
tv_name.setTextColor(ArmsUtils.getColor(mContext, R.color.black));
tv_money.setTextColor(ArmsUtils.getColor(mContext, R.color.black));
}
if (datasBean.isModify()) {
//数量为0 说明是修改订单 删除的食品,颜色设置了红色
tv_name.setTextColor(ArmsUtils.getColor(GsaCloudApplication.getAppContext(), R.color.red_500));
}
}
public void setTextSize() {
tv_money.setTextSize(BillListFontSize);
tv_name.setTextSize(BillListFontSize);
tv_number.setTextSize(BillListFontSize);
tv_D.setTextSize(BillListFontSize / 2);
tv_S.setTextSize(BillListFontSize / 2);
tv_D_1.setTextSize(BillListFontSize / 2);
tv_S_1.setTextSize(BillListFontSize / 2);
}
}
public int addFoodItem(OrderDetail datasBean) {
int addPosition = addPositionItem(datasBean);
setSelectPosition(select_position);
setIndex();
setItemNo(datasBean);
return addPosition;
}
public int addPositionItem(OrderDetail addFoodBean) {
int addPosition = select_position;
boolean upAdd = true;
switch (addFoodBean.getItemType()) {
case 1:
addPosition = select_position = mInfos.size();
break;
case 2:
addPosition = select_full_end_position + 1;
break;
case 3:
if (mInfos.get(select_position).getItemType() == 3) {
addPosition = select_end_position + 1;
select_position = addPosition;
} else {
switch (mInfos.get(select_position).getItemType()) {
case 1:
if (hasChild3Food(mInfos.get(select_position))) {
addPosition = select_end_position + 1;
} else {
addPosition = select_position + 1;
upAdd = false;
}
break;
case 2:
if (hasChildFood(mInfos.get(select_position))) {
addPosition = select_end_position + 1;
} else {
addPosition = select_position + 1;
upAdd = false;
}
break;
case 3:
int edgeIndex2 = getChild2EdgeIndex();
addPosition = edgeIndex2 + 1;
select_position = addPosition;
break;
}
}
break;
}
boolean hasFoodDiscount = OrderDetail.hasFoodDiscount(mInfos, select_full_start_position, select_full_end_position);
if (addPosition >= mInfos.size()) {
if (addFoodBean.getType() != OrderDetail.DISCOUNT_TYPE && hasFoodDiscount && addFoodBean.getItemType() != 1 && upAdd) {
//子食品添加到折扣上面
addPosition = mInfos.size() - 1;
mInfos.add(addPosition, addFoodBean);
} else {
mInfos.add(addFoodBean);
}
} else {
if (addFoodBean.getType() != OrderDetail.DISCOUNT_TYPE && hasFoodDiscount && addFoodBean.getItemType() != 1 && upAdd) {
//子食品添加到折扣上面
addPosition -= 1;
}
mInfos.add(addPosition, addFoodBean);
}
return addPosition;
}
/**
* 長按刪除食品
*/
public void removeAllNewFoodItem() {
for (int i = mInfos.size() - 1; i >= 0; i--) {
OrderDetail orderItem = mInfos.get(i);
if (orderItem != null && orderItem.isNew()) {
mInfos.remove(i);
notifyItemChanged(i);
// Food orderBean = mMealStandPresenter.getFoodByFid(orderItem.getId());
// if (orderBean != null) {
// mMealStandPresenter.setFoodMaxQty(orderBean);
// }
}
}
if (mInfos.size() == 0) {
//全部刪除
return;
}
setIndex();
setSelectPosition(select_position);
mMealStandActivity.showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
}
/**
* 根據下標刪除對應食品
*
* @param position
*/
public void removeItemByPosition(int position) {
if (mInfos.size() > position) {
mInfos.remove(position);
notifyItemChanged(position);
}
if (mInfos.size() == 0) {
//全部删除重置选中下标
select_position = -1;
} else {
if (select_position == mInfos.size()) {
select_position -= 1;
}
}
setIndex();
setSelectPosition(select_position);
}
/**
* 删除食品
*/
public int removeFoodItem() {
removeIntactFoodItem();
if (mInfos.size() == 0) {
//全部删除重置选中下标
select_position = -1;
} else {
if (select_position == mInfos.size()) {
select_position -= 1;
}
}
setIndex();
setSelectPosition(select_position);
if (mMealStandActivity != null) {
mMealStandActivity.showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
}
return select_position;
}
/**
* 删除食品子项及折扣
*/
public void removeChildItem() {
OrderDetail orderDetail = mInfos.get(select_position);
if (select_position > -1) {
switch (orderDetail.getItemType()) {
case 1:
//第一层下方有细项 从下方往上删
if (select_full_end_position != 0 && select_full_end_position > select_position) {
for (int i = select_full_end_position; i > select_position; i--) {
OrderDetail orderBean = mInfos.get(i);
boolean isParentChild = orderBean.getParentIndex() == orderDetail.getMyIndex();
if (orderBean.isNew()) {
if (orderBean.getItemType() == 2 && !isParentChild) {
//第二层下面有第三层子项也要一并删除
removeAllChild3ByCombo(orderBean);
} else {
mInfos.remove(i);
notifyItemChanged(i);
}
break;
}
}
} else {
//第一层没有子食品 直接退出
return;
}
break;
case 2:
if (select_end_position != 0 &&
select_end_position > select_position &&
hasChild3Food(orderDetail)) {
//第二层 下面有第三层子项也要一并删除
for (int i = select_end_position; i >= select_position; i--) {
if (mInfos.get(i).isNew()) {
mInfos.remove(i);
notifyItemChanged(i);
break;
}
}
} else {
if (mInfos.get(select_position).isNew()) {
mInfos.remove(select_position);
notifyItemChanged(select_position);
}
}
break;
case 3:
if (mInfos.get(select_position).isNew()) {
mInfos.remove(select_position);
notifyItemChanged(select_position);
}
break;
}
}
if (select_position >= mInfos.size()) {
select_position = mInfos.size() - 1;
}
if (mInfos.size() == 0) {
//全部删除重置选中下标
select_position = -1;
} else {
switch (orderDetail.getItemType()) {
case 1:
break;
case 2:
int comboIndex = getComboEdgeIndex();
if (comboIndex != (orderDetail.getMyIndex() - 1)) {
select_position -= 1;
} else {
if (select_position == mInfos.size()) {
select_position -= 1;
}
}
break;
case 3:
int edgeIndex = getChild2EdgeIndex();
if (edgeIndex != (orderDetail.getMyIndex() - 1)) {
select_position -= 1;
} else {
if (select_position == mInfos.size()) {
select_position -= 1;
}
}
break;
}
}
setIndex();
setSelectPosition(select_position);
}
private void removeIntactFoodItem() {
int start_position = select_full_start_position + 1;
int end_position = select_full_end_position + 1;
for (int i = mInfos.size() - 1; i >= 0; i--) {
int my_index = mInfos.get(i).getMyIndex();
if (start_position <= my_index && my_index <= end_position) {
if (mInfos.get(i).isNew()) {
mInfos.remove(i);
notifyItemChanged(i);
}
}
}
}
/**
* 删除第二层子食品下所有第三层备注
*
* @param orderDetail
* @return
*/
private boolean removeAllChild3ByCombo(OrderDetail orderDetail) {
boolean remove = false;
for (int i = mInfos.size() - 1; i >= 0; i--) {
boolean accordChild3 = mInfos.get(i).getParentIndex() == orderDetail.getParentIndex() || mInfos.get(i).getMyIndex() == orderDetail.getParentIndex();
if (mInfos.get(i).getItemType() == 3 && accordChild3) {
mInfos.remove(i);
notifyItemChanged(i);
remove = true;
}
}
return remove;
}
/**
* 获取食品第细项最后一个子项位置
*
* @return
*/
private int getChild2EdgeIndex() {
int parent_index = getParentFoodIndex(mInfos.get(select_position));
int edgeIndex = parent_index;
for (int i = 0; i < mInfos.size(); i++) {
OrderDetail datasBean = mInfos.get(i);
if (datasBean.getItemType() == 3 && datasBean.getParentIndex() == parent_index) {
edgeIndex = i;
}
}
return edgeIndex;
}
/**
* 是否包含第三層細項
*
* @param orderDetail
* @return
*/
private boolean hasChild3Food(OrderDetail orderDetail) {
if (orderDetail.getItemType() == 3) {
return false;
}
for (int i = 0; i < mInfos.size(); i++) {
if (mInfos.get(i).getItemType() == 3 && mInfos.get(i).getParentIndex() == orderDetail.getMyIndex()) {
return true;
}
}
return false;
}
public boolean hasChildFood(OrderDetail orderDetail) {
if (orderDetail.getItemType() == 3) {
return false;
}
for (int i = 0; i < mInfos.size(); i++) {
if (mInfos.get(i).getParentIndex() == orderDetail.getMyIndex()) {
return true;
}
}
return false;
}
private int getParentFoodIndex(OrderDetail foodBean) {
int parent_index = 0;
if (foodBean.getItemType() == 1) {
parent_index = foodBean.getMyIndex();
} else {
parent_index = foodBean.getParentIndex();
}
return parent_index;
}
private void setItemNo(OrderDetail foodBean) {
// switch (foodBean.getItemType()) {
// case 1:
//// foodBean.setTopId(foodBean.getProductId());
// break;
// case 2:
// case 3:
// long itemno = -1;
// if (select_position != -1 && select_position < mInfos.size()) {
// if (mInfos.get(select_position).isIsfood()) {
// itemno = mInfos.get(select_position).getProductId();
// } else {
// if (select_start_position != -1 && select_start_position < mInfos.size()) {
// itemno = mInfos.get(select_start_position).getProductId();
// }
// }
// }
// foodBean.setTopId(itemno);
// break;
// default:
// break;
// }
}
/**
* 设置关联父子项Index
*/
public void setIndex() {
// 调整myorder中的parent_index及my_index
int parent_index = 0;
int my_index = 0;
int my_index2 = 0;
int t = 0;
// 调整myorder中的顺序位
// 获取旧项目的最后的seqno不是新项目开始
int iseqno = 1;
int isseq = 0;
int imseq = 0;
for (int i = 0; i < mInfos.size(); i++) {
OrderDetail myorder = mInfos.get(i);
t = t + 1;
if (myorder != null) {
switch (myorder.getItemType()) {
case 1:
parent_index = parent_index + 1;
my_index = t;
my_index2 = t;
myorder.setParentIndex(0);
myorder.setMyIndex(t);
break;
case 2:
myorder.setParentIndex(my_index);
myorder.setMyIndex(t);
my_index2 = t;
break;
case 3:
myorder.setParentIndex(my_index2);
myorder.setMyIndex(t);
break;
}
}
}
}
public void setSelectPosition(int position) {
if (position == -1)
return;
select_position = position;
int startPos = select_position;
int endPos = select_position;
mainStartPos = startPos;
mainEndPos = endPos;
if (select_position >= mInfos.size()) {
select_position = mInfos.size() - 1;
}
OrderDetail myorder = mInfos.get(select_position);
int k = select_position;
select_full_start_position = k;
OrderDetail checkOrder = mInfos.get(k);
while (checkOrder.getItemType() != 1) {
// checkOrder.selected=3;
select_full_start_position = k;
k = k - 1;
if (k > -1) {
checkOrder = mInfos.get(k);
if (checkOrder.getItemType() == 1) {
// checkOrder.selected=3;
select_full_start_position = k;
break;
}
} else {
break;
}
}
k = select_position;
checkOrder = mInfos.get(k);
if (checkOrder.getItemType() == 1) {
select_full_end_position = k;
k = k + 1;
if (k < mInfos.size()) {
checkOrder = mInfos.get(k);
}
}
while (checkOrder.getItemType() != 1) {
// checkOrder.setSelected(3);
select_full_end_position = k;
k = k + 1;
if (k < mInfos.size()) {
checkOrder = mInfos.get(k);
} else {
break;
}
}
if (resetMultipleSelected()) {
//再次點擊直接恢復
notifyDataSetChanged();
return;
}
while (checkOrder.getItemType() != 1) {
checkOrder.setSelected(3);
if (k < mInfos.size()) {
checkOrder = mInfos.get(k);
} else {
break;
}
}
k = select_position;
checkOrder = mInfos.get(k);
if (checkOrder.getComboLevel() == 2) {
for (int v = k; v >= 0; v--) {
if (mInfos.get(v).getItemType() < checkOrder.getItemType()) {
mainStartPos = v;
break;
}
}
} else {
if (checkOrder.isIsfood()) {
checkOrder.setSelected(1);
mainStartPos = k;
k = k - 1;
if (k > -1) {
checkOrder = mInfos.get(k);
}
}
while (!checkOrder.isIsfood() && checkOrder.getItemType() <= myorder.getItemType()) {
if (checkOrder.getItemType() < 3 && checkOrder.getItemType() == myorder.getItemType()) {
break;
}
checkOrder.setSelected(2);
k = k - 1;
if (k > -1) {
checkOrder = mInfos.get(k);
if (checkOrder.getItemType() < 3 && checkOrder.getItemType() == myorder.getItemType()) {
break;
}
if (checkOrder.isIsfood()) {
checkOrder.setSelected(1);
mainStartPos = k;
}
} else {
break;
}
}
}
k = select_position;
checkOrder = mInfos.get(k);
if (checkOrder.isIsfood() || checkOrder.getProp() == OrderDetail.FOOD_TYPE) {
mainEndPos = k;
k = k + 1;
if (k < mInfos.size()) {
checkOrder = mInfos.get(k);
}
}
OrderDetail check_Order = checkOrder;
while (!checkOrder.isIsfood() || check_Order.getComboLevel() == 2) {
if (check_Order.getComboLevel() == 2) {
if (checkOrder.getItemType() == 1) {
break;
}
} else {
if (checkOrder.getItemType() < 3 && checkOrder.getItemType() == myorder.getItemType()) {
break;
}
}
mainEndPos = k;
k = k + 1;
if (k < mInfos.size()) {
checkOrder = mInfos.get(k);
} else {
break;
}
}
// if (mMealStandActivity == null || mMealStandActivity.isMultipleSelectionMode()) {
// for (int v = 0; v < mainStartPos; v++) {
// if (v < mInfos.size()) {
// mInfos.get(v).setSelected(0);
// }
// }
// for (int v = mainEndPos + 1; v < mInfos.size(); v++) {
// mInfos.get(v).setSelected(0);
// }
// } else {
// for (int v = 0; v < mainStartPos; v++) {
// if (v < mInfos.size()) {
// mInfos.get(v).setSelected(0);
// }
// }
// for (int v = mainEndPos + 1; v < mInfos.size(); v++) {
// mInfos.get(v).setSelected(0);
// }
// }
if (selectedMode == MULTIPLE_SELECTED) {
//
} else {
//重置未選中的食品狀態(單選)
for (int v = 0; v < mainStartPos; v++) {
if (v < mInfos.size()) {
mInfos.get(v).setSelected(0);
}
}
for (int v = mainEndPos + 1; v < mInfos.size(); v++) {
mInfos.get(v).setSelected(0);
}
}
if (mainStartPos >= mInfos.size()) {
mainStartPos = mInfos.size() - 1;
}
OrderDetail order = mInfos.get(mainStartPos);
if (order.getItemType() != 1) {
for (int v = mainStartPos; v >= 0; v--) {
if (mInfos.get(v).getItemType() != 1) {
mInfos.get(v).setSelected(1);
} else {
mInfos.get(v).setSelected(1);
break;
}
}
}
for (int v = mainStartPos + 1; v < mInfos.size(); v++) {
if (mInfos.get(v).getItemType() != 1) {
mInfos.get(v).setSelected(1);
} else {
break;
}
}
for (int v = mainStartPos; v <= mainEndPos; v++) {
if (v < mInfos.size()) {
mInfos.get(v).setSelected(1);
}
}
mInfos.get(select_position).setSelected(2);
if (select_position < mainEndPos) {
for (int v = select_position + 1; v <= mainEndPos; v++) {
if (v < mInfos.size()) {
if (mInfos.get(v).getItemType() <= mInfos.get(select_position).getItemType()) {
break;
}
if (mInfos.get(v).getItemType() != 3) {
break;
}
if (mInfos.get(v).getItemType() == 3) {
mInfos.get(v).setSelected(2);
}
}
}
}
select_start_position = mainStartPos;
select_end_position = mainEndPos;
if (mOnItemClickListener != null) {
mOnItemClickListener.onCurrentOrderDetail(mInfos.get(select_position), select_position);
}
notifyDataSetChanged();
}
/**
* 重置已選中食品(多選)
*/
public boolean resetMultipleSelected() {
boolean reset = false;
if (selectedMode == MULTIPLE_SELECTED) {
for (int i = 0; i < mInfos.size(); i++) {
OrderDetail datasBean = mInfos.get(i);
if (select_full_start_position <= i && i <= select_full_end_position && datasBean.getSelected() != 0) {
reset = true;
datasBean.setSelected(0);
}
}
}
return reset;
}
/**
* 获取食品子项最后一个子项位置
*
* @return
*/
private int getComboEdgeIndex() {
int parent_index = getParentFoodIndex(mInfos.get(select_position));
int edgeIndex = parent_index;
for (int i = 0; i < mInfos.size(); i++) {
OrderDetail datasBean = mInfos.get(i);
if (datasBean.getItemType() == 2 && datasBean.getParentIndex() == parent_index) {
edgeIndex = i;
}
}
return edgeIndex;
}
public boolean canDeleteFood() {
boolean can = false;
for (OrderDetail item : mInfos) {
if (item.getSelected() != 0) {
can = true;
}
}
if (mInfos.size() == 0 || select_position >= mInfos.size()) {
can = false;
}
return can;
}
public boolean canDeleteChildItem() {
int start_position = select_full_start_position;
int end_position = select_full_end_position;
for (int i = mInfos.size() - 1; i >= 0; i--) {
if (start_position <= i && i <= end_position) {
if (mInfos.get(i).isNew()) {
return true;
}
}
}
return false;
}
public List<OrderDetail> getInfos() {
return mInfos;
}
public int getSelect_position() {
return select_position;
}
public void setSelect_position(int select_position) {
this.select_position = select_position;
}
public void setSelect_end_position(int select_end_position) {
this.select_end_position = select_end_position;
}
public int getSelect_start_position() {
return select_start_position;
}
public int getSelect_end_position() {
return select_end_position;
}
public int getSelect_full_start_position() {
return select_full_start_position;
}
public int getSelect_full_end_position() {
return select_full_end_position;
}
public int getMainStartPos() {
return mainStartPos;
}
public int getMainEndPos() {
return mainEndPos;
}
public int getSelectedMode() {
return selectedMode;
}
public void setSelectedMode(int selectedMode) {
this.selectedMode = selectedMode;
}
public OrderDetail getCurrentOrderDetail() {
if (select_position != -1 && mInfos.size() > select_position) {
return mInfos.get(select_position);
} else {
return null;
}
}
public OrderDetail getCurrentMainOrderDetail() {
if (select_full_start_position != -1 && mInfos.size() > select_full_start_position) {
return mInfos.get(select_full_start_position);
} else {
return null;
}
}
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
void onItemClick(OrderDetail datasBean, int position);
void onMealCountDelete(OrderDetail datasBean, int position);
void onMealCountAdd(OrderDetail datasBean, int position);
void onCurrentOrderDetail(OrderDetail datasBean, int position);
}
}
......@@ -100,14 +100,14 @@ public class MealDiscountFragment extends BaseFragment<MealDiscountPresenter> im
private void initViewPager() {
List<Fragment> mFragments = new ArrayList<>();
mFragments.add(NomalDiscountFragment.newInstance());
mFragments.add(CouponFragment.newInstance());
List<Fragment> fragments = new ArrayList<>();
fragments.add(NomalDiscountFragment.newInstance());
fragments.add(CouponFragment.newInstance());
//实例化适配器
TabFragmentAdapter mTabFragmentAdapter = new TabFragmentAdapter(getParentFragmentManager(), 1);
//设置加载的Fragment集合
mTabFragmentAdapter.setFragments(mFragments);
mTabFragmentAdapter.setFragments(fragments);
//设置Viewpager的适配器
viewPager.setAdapter(mTabFragmentAdapter);
//TabLayout绑定ViewPager
......
......@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
......@@ -11,6 +12,7 @@ import android.view.ViewStub;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
......@@ -28,7 +30,9 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans;
import com.gingersoft.gsa.cloud.common.constans.MealConstant;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
......@@ -45,6 +49,7 @@ import com.gingersoft.gsa.cloud.table.di.component.DaggerSetMealComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.SetMealPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity2;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
......@@ -56,6 +61,9 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.CouponFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.NomalDiscountFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.ui.adapter.TabFragmentAdapter;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerConfig;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerGridLayoutManager;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerGridSnapHelper;
import com.gingersoft.gsa.cloud.ui.view.MyTableView;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.base.DefaultAdapter;
......@@ -92,7 +100,7 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public class SetMealFragment extends BaseFragment<SetMealPresenter> implements SetMealContract.View {
public class SetMealFragment extends BaseFragment<SetMealPresenter> implements SetMealContract.View, PagerGridLayoutManager.PageListener {
@BindView(R2.id.btn_table)
Button btnTable;
......@@ -131,8 +139,8 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
@BindView(R2.id.ll_meals)
LinearLayout llMeals;
@BindView(R2.id.fl_container)
FrameLayout flContainer;
// @BindView(R2.id.fl_container)
// FrameLayout flContainer;
@BindView(R2.id.rv_food_group)
RecyclerView rvFoodGroup;
......@@ -145,16 +153,12 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
@BindView(R2.id.vb_combo_modifier)
ViewStub vbComboModifier;
@BindView(R2.id.scroll_combo)
RecyclerView rvCombo;
@BindView(R2.id.rv_modifier)
RecyclerView rvModifier;
@BindView(R2.id.vb_fine)
ViewStub vbFine;
@BindView(R2.id.tab_fine)
MyTableView tabLayoutFine;
@BindView(R2.id.pager_fine)
ViewPager viewPagerFine;
// @Inject
......@@ -193,7 +197,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
private SparseArray<View> map = new SparseArray<>(10);
private MealStandActivity mActivity;
private MealStandActivity2 mActivity;
public static final byte FOOD_LAYOUT = 1;
public static final byte COMBO_LAYOUT = 2;
public static final byte FINE_LAYOUT = 3;
......@@ -204,6 +208,16 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
private int mCurrentViewMode;
private boolean isPluMode = false;
/**
* 是否已初始化 已送單的折扣
*/
private boolean initSentOrderDiscount = false;
private ImageView[] ivPoints;
private int mPageIndex;
private int totalPage;
private int foodGroupRow = 2;
private int foodGroupColumn = 6;
private int foodColumn = 4;
......@@ -232,7 +246,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mActivity = (MealStandActivity) _mActivity;
mActivity = (MealStandActivity2) _mActivity;
initUIStyleConfiguration();
initViewMap();
......@@ -241,6 +255,15 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
initFoodItemClickListener();
}
@Override
public void onResume() {
super.onResume();
mPresenter.resetSelected();
mPresenter.updateOrderFoodNumber();
mPresenter.updateFoodSoldoutCtrData();
initTableInfo();
}
private void initUIStyleConfiguration() {
foodGroupColumn = GsaCloudApplication.uiStyleConfiguration.getFoodGroupColumnValue();
foodGroupRow = GsaCloudApplication.uiStyleConfiguration.getFoodGroupRowValue();
......@@ -256,6 +279,18 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
map.put(MealConstant.fine_ViewMode, vbFine);
}
private void initTableInfo() {
TableBean.DataBean dataBean = DoshokuOrder.getInstance().getOpenTableInfo();
if (dataBean != null) {
if (TextUtils.isEmpty(dataBean.getTableNumber())) {
btnTable.setText(dataBean.getTableName());
} else {
btnTable.setText(dataBean.getTableName());
}
btnNumberman.setText("人數:" + dataBean.getPerson() + "");
}
}
@Subscriber(tag = SET_CURR_LAYOUT_EVENT, mode = ThreadMode.MAIN)
private void setCurrLayout(byte layout) {
mCurrLayout = layout;
......@@ -275,7 +310,8 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
private void showComboModifierLayout() {
try {
View vsContent = vbComboModifier.inflate();
ButterKnife.bind(this, vsContent);
rvCombo = vsContent.findViewById(R.id.rv_combo);
rvModifier = vsContent.findViewById(R.id.rv_modifier);
initComboAdapter();
initComboLayoutManager();
initComboItemClickListener();
......@@ -288,7 +324,8 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
private void showFineLayout() {
try {
View vsContent = vbFine.inflate();
ButterKnife.bind(this, vsContent);
tabLayoutFine = vsContent.findViewById(R.id.tab_fine);
viewPagerFine = vsContent.findViewById(R.id.pager_fine);
initFineViewPager();
} catch (Exception e) {
} finally {
......@@ -318,6 +355,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
}
private void initFoodAdapter() {
mPresenter.initSelectMealAdapter(rvSelectMeal);
if (mFoodGroupAdapter != null) {
rvFoodGroup.setAdapter(mFoodGroupAdapter);
}
......@@ -341,7 +379,6 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
mActivity.recordOperat(true);
mPresenter.foodItemClick(datasBean);
LoganManager.w_tableMode(TAG, LoganManager.EVENT_ADD + "食品【" + datasBean.getFoodName() + "】");
}
});
}
......@@ -421,7 +458,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
@Override
public void setFoodGroupRecycleSpanCount(int size) {
notifyFoodGroupAdapter();
}
@Override
......@@ -434,6 +471,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
//只有一行就使用水平显示以免不能占满
mFoodRecycleLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
}
notifyFoodAdapter();
}
}
......@@ -443,6 +481,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
// if (size > comboRow) {
mComboRecycleLayoutManager.get().setOrientation(LinearLayoutManager.VERTICAL);
mComboRecycleLayoutManager.get().setSpanCount(comboColumn);
notifyComboAdapterAdapter();
// } else if (size <= ComboColCount) {
// } else {
// //只有一行就使用水平显示以免不能占满
......@@ -456,6 +495,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
if (size > 0) {
mModifierRecycleLayoutManager.get().setOrientation(LinearLayoutManager.VERTICAL);
mModifierRecycleLayoutManager.get().setSpanCount(modColumn);
notifyModifierAdapterAdapter();
}
}
......@@ -507,7 +547,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
@Override
public void setOrderFoodCount(String number) {
getActivity2().setOrderFoodCount(number);
}
@Override
......@@ -520,9 +560,9 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
isPluMode = (boolean) SPUtils.get(MealConstant.EXIT_IS_PLU_MODE, false);
if (isPluMode) {
showViewModeVisibility(MealConstant.ViewMode_keys);
btnFid.setBackgroundColor(ArmsUtils.getColor(mContext,R.color.theme_hint_color));
btnFid.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.theme_hint_color));
} else {
btnFid.setBackground(ArmsUtils.getDrawablebyResource(mContext,R.drawable.ui_selector_item_background));
btnFid.setBackground(ArmsUtils.getDrawablebyResource(mContext, R.drawable.ui_selector_item_background));
}
}
......@@ -530,7 +570,7 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
public void resetPluMode() {
isPluMode = false;
SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, false);
btnFid.setBackground(ArmsUtils.getDrawablebyResource(mContext,R.drawable.ui_selector_item_background));
btnFid.setBackground(ArmsUtils.getDrawablebyResource(mContext, R.drawable.ui_selector_item_background));
}
@Override
......@@ -539,6 +579,70 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
}
@Override
public void resetSelect(int position, Food datasBean) {
mFoodAdapter.resetSelect(position, datasBean);
}
@Override
public void initFoodGroupAdapter(List<Food> foodGroupList) {
//总的页数向上取整
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / (foodGroupColumn * foodGroupRow));
int rows = foodGroupRow;
if (foodGroupList.size() <= foodGroupColumn) {
rows = 1;
}
if (rows == 0) {
rows = 2;
}
PagerGridLayoutManager mLayoutManager = new PagerGridLayoutManager(rows, foodGroupColumn, PagerGridLayoutManager.HORIZONTAL);
//水平分页布局管理器
mLayoutManager.setPageListener(this);
//设置页面变化监听器
rvFoodGroup.setLayoutManager(mLayoutManager);
//设置滚动辅助工具
PagerGridSnapHelper pageSnapHelper = new PagerGridSnapHelper();
pageSnapHelper.attachToRecyclerView(rvFoodGroup);
// 如果需要查看调试日志可以设置为true,一般情况忽略即可
PagerConfig.setShowLog(true);
mFoodGroupAdapter.setFoodGroupList(foodGroupList);
rvFoodGroup.setAdapter(mFoodGroupAdapter);
mFoodGroupAdapter.setOnItemClickListener(new FoodGroupAdapter.OnItemClickListener() {
@Override
public void onItemClick(Food datasBean, int position) {
recordOperat(true);
mPresenter.foodGroupItemClick(datasBean);
}
});
int foodGroupBtnHeight = GsaCloudApplication.uiStyleConfiguration.getFoodGroupBtnHeightValue();
int mParentColHeight = foodGroupBtnHeight * rows;
//设置ViewPager适配器
rvFoodGroup.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
mParentColHeight));
//添加小圆点
ivPoints = new ImageView[totalPage];
for (int i = 0; i < totalPage; i++) {
//循坏加入点点图片组
ivPoints[i] = new ImageView(_mActivity);
if (i == 0) {
ivPoints[i].setImageResource(R.drawable.meal_food_group_point_focuese);
} else {
ivPoints[i].setImageResource(R.drawable.meal_food_group_point_unfocused);
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ArmsUtils.dip2px(mContext, 20), ArmsUtils.dip2px(mContext, 12));
lp.leftMargin = ArmsUtils.dip2px(mContext, 5);
ivPoints[i].setLayoutParams(lp);
ivPoints[i].setPadding(0, 0, 0, 0);
llFoodGroupPoint.addView(ivPoints[i]);
}
if (foodGroupList.size() > (rows * foodGroupColumn)) {
llFoodGroupPoint.setVisibility(View.VISIBLE);
} else {
llFoodGroupPoint.setVisibility(View.GONE);
}
}
@Override
public void returnFoodGroupList(List<Food> foodGroupList) {
}
......@@ -559,8 +663,28 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
}
@Override
public MealStandActivity getActivity2() {
return (MealStandActivity) _mActivity;
public void notifyFoodGroupAdapter() {
mFoodGroupAdapter.notifyDataSetChanged();
}
@Override
public void notifyFoodAdapter() {
mFoodAdapter.notifyDataSetChanged();
}
@Override
public void notifyComboAdapterAdapter() {
mComboAdapter.get().notifyDataSetChanged();
}
@Override
public void notifyModifierAdapterAdapter() {
mModifierAdapter.get().notifyDataSetChanged();
}
@Override
public MealStandActivity2 getActivity2() {
return (MealStandActivity2) _mActivity;
}
@Override
......@@ -583,13 +707,10 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
}
class OnClickListenter {
@OnLongClick({R2.id.btn_meal_delete, R2.id.btn_order_printer})
public boolean onLongClick1(View view) {
@OnLongClick({R2.id.btn_meal_delete})
public boolean onLongClick1(View view) {
//记录操作 并且震动
//记录操作 并且震动
// recordOperat(true);
//
// int id = view.getId();
......@@ -598,25 +719,27 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
// } else if (id == R.id.btn_order_printer) {
//
// }
return false;
}
return false;
}
@OnClick(R2.id.btn_meal_discount)
void onClickDiscount() {
// LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK + "食品折扣");
// OrderDetail mainOrderDetail = mPresenter.getSelectMealAdapter().getCurrentMainOrderDetail();
// if (mainOrderDetail != null && mainOrderDetail.getAblediscount() == 0) {
// showMessage("此食品不能參與折扣!");
// return;
// }
@OnClick(R2.id.btn_meal_discount)
void onClickDiscount() {
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK + "食品折扣");
OrderDetail mainOrderDetail = mPresenter.getSelectMealAdapter().getCurrentMainOrderDetail();
if (mainOrderDetail != null && mainOrderDetail.getAblediscount() == 0) {
showMessage("此食品不能參與折扣!");
return;
}
if (mActivity.findFragment(SetMealFragment.class) == null) {
loadRootFragment(R.id.fl_meal_discount, MealDiscountFragment.newInstance());
}
// //更新折扣数据
// mPresenter.loadDiscountData();
// showViewModeVisibility(MealConstant.discount_ViewMode);
}
}
@OnClick(R2.id.btn_multiple_selection)
void onClickMultipleSelection() {
@OnClick(R2.id.btn_multiple_selection)
void onClickMultipleSelection() {
// LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, "多选");
// currentFinePage = 0;
// if (mPresenter.getSelectMealAdapter().getSelectedMode() == SelectMealAdapter.MULTIPLE_SELECTED) {
......@@ -630,160 +753,157 @@ public class SetMealFragment extends BaseFragment<SetMealPresenter> implements S
// loadFineItemData();
// }
// showRemarkLayout();
}
}
@OnClick(R2.id.btn_select_all)
void onClickSelectAll() {
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, "全選");
mPresenter.setSelectAll();
}
@OnClick(R2.id.btn_select_all)
void onClickSelectAll() {
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, "全選");
mPresenter.setSelectAll();
}
@OnClick(R2.id.btn_anti_selection)
void onClickAntiSelection() {
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, "反選");
mPresenter.setAntiSelect();
}
@OnClick({R2.id.btn_key1, R2.id.btn_key2, R2.id.btn_key3, R2.id.btn_key4, R2.id.btn_key5, R2.id.btn_keys,
R2.id.btn_numberman, R2.id.btn_fid, R2.id.btn_meal_delete, R2.id.btn_meal_modify_restore,
R2.id.btn_taste, R2.id.btn_msg, R2.id.btn_delete, R2.id.btn_end})
public void onClick(View v) {
@OnClick(R2.id.btn_anti_selection)
void onClickAntiSelection() {
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, "反選");
mPresenter.setAntiSelect();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
String text = null;
if (v instanceof Button) {
Button button = (Button) v;
text = button.getText().toString();
} else if (v instanceof TextView) {
TextView textView = (TextView) v;
text = textView.getText().toString();
}
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, text);
}
@OnClick({R2.id.btn_key1, R2.id.btn_key2, R2.id.btn_key3, R2.id.btn_key4, R2.id.btn_key5, R2.id.btn_keys,
R2.id.btn_numberman, R2.id.btn_fid, R2.id.btn_meal_delete, R2.id.btn_meal_modify_restore, R2.id.btn_send_order, R2.id.tv_no_save_return, R2.id.tv_order_content,
R2.id.btn_taste, R2.id.btn_msg, R2.id.btn_delete, R2.id.btn_end, R2.id.iv_fine_back})
public void onClick(View v) {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// String text = null;
// if (v instanceof Button) {
// Button button = (Button) v;
// text = button.getText().toString();
// } else if (v instanceof TextView) {
// TextView textView = (TextView) v;
// text = textView.getText().toString();
// }
// LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, text);
// }
//
// recordOperat(true);
//
// //防抖處理
// int id = v.getId();
// if (id == R.id.btn_numberman) {
// if (!BaseOrder.isTableToMeal()) {
// return;
// }
recordOperat(true);
//防抖處理
int id = v.getId();
if (id == R.id.btn_numberman) {
if (!BaseOrder.isTableToMeal()) {
return;
}
// showChoosePeopleNumDialog(true);
// } else if (id == R.id.btn_fid) {
// //搜索
// if (mCurrentViewMode == MealConstant.ViewMode_keys) {
// showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
// SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, false);
// } else {
// showViewModeVisibility(MealConstant.ViewMode_keys);
// SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, true);
// }
// setPluMode();
// } else if (id == R.id.btn_meal_delete) {
} else if (id == R.id.btn_fid) {
//搜索
if (mCurrentViewMode == MealConstant.ViewMode_keys) {
showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, false);
} else {
showViewModeVisibility(MealConstant.ViewMode_keys);
SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, true);
}
setPluMode();
} else if (id == R.id.btn_meal_delete) {
// if (mPresenter.getSelectMealAdapter().getSelectedMode() == SelectMealAdapter.MULTIPLE_SELECTED) {
// return;
// }
// mPresenter.deleteFoodItem(1);
//
// showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
// SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, false);
// setPluMode();
// } else if (id == R.id.btn_meal_modify_restore) {
showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, false);
setPluMode();
} else if (id == R.id.btn_meal_modify_restore) {
// mPresenter.restoreDeleteFood();
// showBtnMealModifyRestoreVisibility(false);
// } else if (id == R.id.btn_send_order) {
//// RxBindingUtils.setViewClicks(v)
//// .subscribe(new Consumer<Object>() {
//// @Override
//// public void accept(Object o) throws Exception {
// if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.TAKEAWAY_TYPE)) {
// CC.obtainBuilder(ComponentName.COMPONENT_DELIVERYPICK)
// .setActionName("SendOrder")
// .build()
// .call();
// return;
// }
// mPresenter.sendOrder(false, null);
//// }
//// });
// } else if (id == R.id.tv_order_content) {
// //如果打印成功會回調
// Intent intent = new Intent(mContext, OrderContentActivity.class);
// startActivityForResult(intent, ORDER_CONTENT_CODE);
// } else if (id == R.id.tv_no_save_return) {
// returnTableActivity(true);
// } else if (id == R.id.btn_taste) {
showBtnMealModifyRestoreVisibility(false);
} else if (id == R.id.btn_taste) {
// currentFinePage = 0;
// showRemarkLayout();
// } else if (id == R.id.btn_msg) {
} else if (id == R.id.btn_msg) {
// currentFinePage = 1;
// showRemarkLayout();
// } else if (id == R.id.btn_delete) {
} else if (id == R.id.btn_delete) {
// if (mPresenter.getSelectMealAdapter().getSelectedMode() == SelectMealAdapter.SINGLE_SELECTED) {
// //只有單選操作的時候可以刪除子項
// mPresenter.deleteChildItem();
// }
// } else if (id == R.id.btn_end) {
} else if (id == R.id.btn_end) {
// mPresenter.getSelectMealAdapter().setSelectedMode(SelectMealAdapter.SINGLE_SELECTED);
// btn_delete.setVisibility(View.VISIBLE);
// setSelectFunctionVisibility(View.GONE);
// //從多選頁離開 重置選中
// mPresenter.resetSelected();
// showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
// } else if (id == R.id.btn_key1 || id == R.id.btn_key2 || id == R.id.btn_key3 || id == R.id.btn_key4 || id == R.id.btn_key5 || id == R.id.btn_keys) {
//
// int i = Integer.parseInt(v.getTag().toString());
// switch (i) {
// case 0:
// case 1:
// case 2:
// case 3:
// case 4:
// case 5:
// if (BuildConfig.DEBUG && BaseOrder.isTableToMeal()) {
// if (i == 1) {
// OrderResponse order = DoshokuOrder.getInstance().getOrderPlaced();
// if (order != null) {
// ArmsUtils.snackbarText("訂單ID:" + order.getId());
// }
// } else if (i == 2) {
// MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
// if (memberInfo != null) {
// showMessage("積分兌現金比例: " + memberInfo.getPointRedeemCash());
// }
// }
// }
// mPresenter.changeNumber(i);
// break;
// case 99:
// ChooseNumberDialog mChooseNumberDialog = new ChooseNumberDialog(mContext);
// mChooseNumberDialog.builder();
// mChooseNumberDialog.setOnClickListener(new ChooseNumberDialog.OnClickListener() {
//
// @Override
// public void onComfirmClick(String number) {
// int inumber = Integer.parseInt(number);
// if (inumber == 0) {
// return;
// }
// mPresenter.changeNumber(inumber);
// }
//
// @Override
// public void onBackPage() {
// }
// });
// mChooseNumberDialog.setValueHint("請輸入數量");
// mChooseNumberDialog.setCancelable(true);
// mChooseNumberDialog.show();
// break;
// default:
// break;
// }
// } else if (id == R.id.iv_fine_back) {
// showViewModeVisibility(MealConstant.combo_ViewMode);
// }
} else if (id == R.id.btn_key1 || id == R.id.btn_key2 || id == R.id.btn_key3 || id == R.id.btn_key4 || id == R.id.btn_key5 || id == R.id.btn_keys) {
int i = Integer.parseInt(v.getTag().toString());
switch (i) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
if (BuildConfig.DEBUG && BaseOrder.isTableToMeal()) {
if (i == 1) {
OrderResponse order = DoshokuOrder.getInstance().getOrderPlaced();
if (order != null) {
ArmsUtils.snackbarText("訂單ID:" + order.getId());
}
} else if (i == 2) {
MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
if (memberInfo != null) {
showMessage("積分兌現金比例: " + memberInfo.getPointRedeemCash());
}
}
}
mPresenter.changeNumber(i);
break;
case 99:
ChooseNumberDialog mChooseNumberDialog = new ChooseNumberDialog(mContext);
mChooseNumberDialog.builder();
mChooseNumberDialog.setOnClickListener(new ChooseNumberDialog.OnClickListener() {
@Override
public void onComfirmClick(String number) {
int inumber = Integer.parseInt(number);
if (inumber == 0) {
return;
}
mPresenter.changeNumber(inumber);
}
@Override
public void onBackPage() {
}
});
mChooseNumberDialog.setValueHint("請輸入數量");
mChooseNumberDialog.setCancelable(true);
mChooseNumberDialog.show();
break;
default:
break;
}
}
// else if (id == R.id.iv_fine_back) {
// showViewModeVisibility(MealConstant.combo_ViewMode);
// }
}
@Override
public void onPageSizeChanged(int pageSize) {
}
@Override
public void onPageSelect(int pageIndex) {
mPageIndex = pageIndex;
LoganManager.w_tableMode(TAG, LoganManager.EVENT_SCOLL + "食品組頁=" + (pageIndex + 1));
for (int i = 0; i < totalPage; i++) {
if (i == pageIndex) {
ivPoints[i].setImageResource(R.drawable.meal_food_group_point_focuese);
} else {
ivPoints[i].setImageResource(R.drawable.meal_food_group_point_unfocused);
}
}
}
}
......@@ -52,4 +52,87 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/meal_layout_meal_fine" />
<LinearLayout
android:id="@+id/ll_modify"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:layout_gravity="bottom"
android:visibility="invisible">
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_select_all"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#00B9F7"
android:gravity="center"
android:text="@string/all_selection"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14"
android:visibility="gone" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_anti_selection"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#00B9F7"
android:gravity="center"
android:text="@string/anti_selection"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14"
android:visibility="gone" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_taste"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#00B9F7"
android:gravity="center"
android:text="@string/taste"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_msg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#7D8888"
android:gravity="center"
android:text="@string/msg"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#FF5024"
android:gravity="center"
android:text="@string/remove"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_end"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="@color/Grass_green"
android:gravity="center"
android:text="@string/end"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
</LinearLayout>
</merge>
\ No newline at end of file
......@@ -2,13 +2,13 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_meals"
android:layout_width="match_parent"
android:layout_height="266dp"
android:layout_height="@dimen/dp_260"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_meals_main"
android:layout_width="match_parent"
android:layout_height="221dp"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
......@@ -132,7 +132,7 @@
<LinearLayout
android:id="@+id/ll_Keys"
android:layout_width="match_parent"
android:layout_height="42dp">
android:layout_height="@dimen/dp_40">
<Button
android:id="@+id/btn_key1"
......@@ -200,4 +200,5 @@
android:src="@mipmap/meal_number_key"
android:tag="99" />
</LinearLayout>
</LinearLayout>
......@@ -13,117 +13,27 @@
android:layout_centerVertical="true"
android:text="Chronometer" />
<fragment
android:name="com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand.SetMealFragment"
<FrameLayout
android:id="@+id/fl_food_plate"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:layout_height="match_parent"
android:layout_above="@+id/ll_modify"/>
<FrameLayout
android:id="@+id/fl_food_menu"
android:id="@+id/fl_meal_discount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/fl_food_plate"/>
<!-- <include layout="@layout/meal_layout_food_plate"/>-->
<!-- <include layout="@layout/meal_layout_food_menu"/>-->
android:layout_height="match_parent"
android:layout_above="@+id/ll_modify"
android:layout_marginTop="@dimen/dp_260" />
<!--鍵盤-->
<com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView
android:id="@+id/meal_stand_search_keyboard_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/ll_stand_oper"
android:layout_below="@+id/ll_meals"
android:visibility="gone" />
<LinearLayout
android:id="@+id/ll_modify"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:visibility="invisible">
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_select_all"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#00B9F7"
android:gravity="center"
android:text="@string/all_selection"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14"
android:visibility="gone" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_anti_selection"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#00B9F7"
android:gravity="center"
android:text="@string/anti_selection"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14"
android:visibility="gone" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_taste"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#00B9F7"
android:gravity="center"
android:text="@string/taste"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_msg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#7D8888"
android:gravity="center"
android:text="@string/msg"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="#FF5024"
android:gravity="center"
android:text="@string/remove"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/btn_end"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:layout_weight="0.1"
android:background="@color/Grass_green"
android:gravity="center"
android:text="@string/end"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
</LinearLayout>
android:layout_height="match_parent"
android:layout_above="@+id/ll_modify"
android:layout_marginTop="@dimen/dp_260"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/ll_stand_oper"
......
......@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 29,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode : 31,
versionName : "1.3.1"
versionCode : 32,
versionName : "1.3.2"
]
version = [
......
......@@ -30,9 +30,6 @@ public class LoganManager {
public static void w_code(String TAG, String log) {
Logan.w(log, LoganConfig.CODE_LEVLE);
// if (BuildConfig.DEBUG) {
Logan.f();
// }
printLog(TAG, log);
}
......@@ -113,6 +110,9 @@ public class LoganManager {
public static void w_printer(String TAG, String... eventAndLog) {
w_business(PRINTER_BUSINESS_TAG, TAG, eventAndLog);
// if (BuildConfig.DEBUG) {
Logan.f();
// }
}
public static void w_tableMode(String TAG, String... eventAndLog) {
......
......@@ -30,6 +30,7 @@ import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Connection;
import okhttp3.ConnectionPool;
import okhttp3.EventListener;
import okhttp3.FormBody;
import okhttp3.Handshake;
import okhttp3.MediaType;
......
......@@ -29,43 +29,43 @@ public class PaymentControl {
}
public void pay(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayOrigin();
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.pay(requestParms);
}
public void tip(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayOrigin();
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.tip(requestParms);
}
public void refund(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayOrigin();
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.refund(requestParms);
}
public void voidO(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayOrigin();
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.void0(this);
}
public void retrieval(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayOrigin();
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.retrieval(this);
}
public void printStub(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayOrigin();
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.printStub(this);
}
public void settlement(RequestParms requestParms) {
final PosPayAction payOrigin = PayDeviceFactory.createPayOrigin();
final PosPayAction payOrigin = PayDeviceFactory.createPayDevice();
Preconditions.checkNotNull(payOrigin);
payOrigin.settlement(this);
}
......
......@@ -5,9 +5,11 @@ import android.os.Parcelable;
import com.gingersoft.gsa.cloud.pay.Callback;
import com.gingersoft.gsa.cloud.pay.PayAction;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.List;
import lombok.Builder;
import lombok.Data;
......@@ -24,18 +26,23 @@ import lombok.Getter;
public class RequestParms implements Serializable {
private PayAction action;
private Callback callback;
private ResultCallback resultCallback;
private final int resturantId;
private final List<PayMethod> payMethods;
private final int payType;
private final long orderId;
private final double payMoney;
/**
* 退款相关
*/
private final String refundReason;
/**
* 操作行为回调如支付,退款等
*/
private Callback callback;
/**
* 结果回调
*/
private ResultCallback resultCallback;
// @Override
// public int describeContents() {
......
package com.gingersoft.gsa.cloud.pay;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import java.util.List;
/**
* @作者: bin
* @創建時間: 2021-04-14 15:05
......@@ -11,4 +15,14 @@ public interface ResultCallback {
void onSuccess();
void onFailure(Throwable t);
/**
* 外部支付,交给回调方处理
*/
void externalPayment();
/**
* 混合支付,选择二种以上支付方式
*/
void hybridPayment(List<PayMethod> payMethods);
}
......@@ -8,18 +8,7 @@ import com.gingersoft.gsa.cloud.pay.Callback;
* @更新時間: 2021-04-15 17:18
* @描述:
*/
public interface PhoneCallbackListener <T> extends Callback<T> {
public interface PhoneCallback extends Callback {
/**
* 支付
* @param response
*/
void onSuccess(T response);
/**
* 支付失败
* @param response
* @param e
*/
void onException(T response,Exception e);
}
......@@ -191,25 +191,25 @@ public class PayFlowFragment extends BaseDialogFragment<PayFlowPresenter> implem
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
LoganManager.w_code(TAG, "onActivityResult-" + "resultCode=" + resultCode + " requestCode=" + requestCode);
if (resultCode == android.app.Activity.RESULT_OK) {
switch (requestCode) {
case 555: {
if (intent.getExtras() != null) {
String status = (String) intent.getExtras().get("status");
String transaction_id = (String) intent.getExtras().get("transaction_id");
LoganManager.w_code(TAG, "onActivityResult-》" + "status=" + status + " transaction_id=" + transaction_id);
mPresenter.yedPayUpdateStatus(transaction_id, requestParms.getOrderId(), requestParms.getPayType(), requestParms.getResturantId());
}
break;
}
default:
showStatusLoadingDialog(PayStep.FAILURE);
break;
}
} else {
showStatusLoadingDialog(PayStep.FAILURE);
}
LoganManager.w_code(TAG, "onActivityResult->" + "resultCode=" + resultCode + " requestCode=" + requestCode);
// if (resultCode == android.app.Activity.RESULT_OK) {
// switch (requestCode) {
// case 555: {
// if (intent.getExtras() != null) {
// String status = (String) intent.getExtras().get("status");
// String transaction_id = (String) intent.getExtras().get("transaction_id");
// LoganManager.w_code(TAG, "onActivityResult-》" + "status=" + status + " transaction_id=" + transaction_id);
// mPresenter.yedPayUpdateStatus(transaction_id, requestParms.getOrderId(), requestParms.getPayType(), requestParms.getResturantId());
// }
// break;
// }
// default:
// showStatusLoadingDialog(PayStep.FAILURE);
// break;
// }
// } else {
// showStatusLoadingDialog(PayStep.FAILURE);
// }
}
@Override
......
......@@ -13,7 +13,7 @@ import com.gingersoft.gsa.cloud.pay.PaymentControl;
import com.gingersoft.gsa.cloud.pay.RequestParms;
import com.gingersoft.gsa.cloud.pay.ResultCallback;
import com.gingersoft.gsa.cloud.pay.lifecycle.model.bean.YedpayFindSaleStatusBean;
import com.gingersoft.gsa.cloud.pay.device.phone.PhoneCallbackListener;
import com.gingersoft.gsa.cloud.pay.device.phone.PhoneCallback;
import com.gingersoft.gsa.cloud.pay.device.pos.PosPayAction;
import com.gingersoft.gsa.cloud.pay.device.pos.bbpos.BBposCallback;
import com.gingersoft.gsa.cloud.pay.device.pos.hyweb.HywebCallback;
......@@ -229,17 +229,8 @@ public class PayFlowPresenter extends BasePresenter<PayFlowContract.Model, PayFl
};
private PhoneCallbackListener phoneCallbackListener = new PhoneCallbackListener() {
private PhoneCallback phoneCallback = new PhoneCallback() {
@Override
public void onSuccess(Object response) {
}
@Override
public void onException(Object response, Exception e) {
}
};
......
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