Commit f18bbd45 by 宁斌

1、新增會員優惠券頁面 2、處理報表圖表控件滑動衝突問題

parent 6030444d
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/theme_background_color"
android:orientation="vertical"> android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar <com.qmuiteam.qmui.widget.QMUITopBar
...@@ -16,5 +15,6 @@ ...@@ -16,5 +15,6 @@
android:id="@+id/section_layout" android:id="@+id/section_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants" /> android:descendantFocusability="blocksDescendants"
android:background="@color/theme_background_color"/>
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -132,7 +132,7 @@ public class ComponentMain implements IComponent { ...@@ -132,7 +132,7 @@ public class ComponentMain implements IComponent {
} }
private void openActivity(CC cc) { private void openActivity(CC cc) {
Intent intent = new Intent(cc.getContext(), NewMainActivity.class); Intent intent = new Intent(cc.getContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
cc.getContext().startActivity(intent); cc.getContext().startActivity(intent);
// CCUtil.createNavigateIntent(cc, NewMainActivity.class); // CCUtil.createNavigateIntent(cc, NewMainActivity.class);
......
...@@ -87,7 +87,6 @@ public class MainActivity extends BaseFragmentActivity<MainPresenter> implements ...@@ -87,7 +87,6 @@ public class MainActivity extends BaseFragmentActivity<MainPresenter> implements
return HomeFragment.newInstance(); return HomeFragment.newInstance();
case 1: case 1:
return ReportListFragment.newInstance(); return ReportListFragment.newInstance();
case 2:
default: default:
return MyFragment.newInstance(); return MyFragment.newInstance();
} }
......
...@@ -4,11 +4,13 @@ import android.content.Intent; ...@@ -4,11 +4,13 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.TypedValue; import android.util.TypedValue;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2; import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerReportComponent; import com.gingersoft.gsa.cloud.main.di.component.DaggerReportComponent;
...@@ -24,9 +26,12 @@ import com.jess.arms.base.BaseFragmentActivity; ...@@ -24,9 +26,12 @@ import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.widget.QMUITopBar; import com.qmuiteam.qmui.widget.QMUITopBar;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import butterknife.BindView; import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull; import static com.jess.arms.utils.Preconditions.checkNotNull;
...@@ -54,6 +59,8 @@ public class ReportActivity extends BaseFragmentActivity<ReportPresenter> implem ...@@ -54,6 +59,8 @@ public class ReportActivity extends BaseFragmentActivity<ReportPresenter> implem
private TabFragmentAdapter mTabFragmentAdapter; private TabFragmentAdapter mTabFragmentAdapter;
private List<String> titles; private List<String> titles;
private BusinessReportFragment businessReportFragment;
@Override @Override
public void setupActivityComponent(@NonNull AppComponent appComponent) { public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerReportComponent //如找不到该类,请编译一下项目 DaggerReportComponent //如找不到该类,请编译一下项目
...@@ -84,8 +91,10 @@ public class ReportActivity extends BaseFragmentActivity<ReportPresenter> implem ...@@ -84,8 +91,10 @@ public class ReportActivity extends BaseFragmentActivity<ReportPresenter> implem
titles.add("銷售分析"); titles.add("銷售分析");
titles.add("支付分析"); titles.add("支付分析");
businessReportFragment = BusinessReportFragment.newInstance();
List<Fragment> mFragments = new ArrayList<>(); List<Fragment> mFragments = new ArrayList<>();
mFragments.add(BusinessReportFragment.newInstance()); mFragments.add(businessReportFragment);
mFragments.add(SalesFragment.newInstance()); mFragments.add(SalesFragment.newInstance());
mFragments.add(PaymentMethodReportFragment.newInstance()); mFragments.add(PaymentMethodReportFragment.newInstance());
//实例化适配器 //实例化适配器
......
...@@ -4,6 +4,7 @@ import android.content.Intent; ...@@ -4,6 +4,7 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message; import android.os.Message;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
...@@ -109,6 +110,9 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -109,6 +110,9 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
private int manyDay = 7; private int manyDay = 7;
private String restaurantId; private String restaurantId;
private boolean mChartFocus;
public static BusinessReportFragment newInstance() { public static BusinessReportFragment newInstance() {
BusinessReportFragment fragment = new BusinessReportFragment(); BusinessReportFragment fragment = new BusinessReportFragment();
return fragment; return fragment;
...@@ -138,51 +142,37 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -138,51 +142,37 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
mTvStartTime.setText(TimeUtils.getOldDate(-manyDay + 1)); mTvStartTime.setText(TimeUtils.getOldDate(-manyDay + 1));
mTvEndTime.setText(TimeUtils.getOldDate(0)); mTvEndTime.setText(TimeUtils.getOldDate(0));
//处理报表滑动过程中和页面滑动出现冲突
mLineChart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mLineChart.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_POINTER_UP:
mLineChart.requestDisallowInterceptTouchEvent(false);
break;
case MotionEvent.ACTION_CANCEL:
mLineChart.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
}
@Override
public void onLazyInitView(@Nullable Bundle savedInstanceState) {
super.onLazyInitView(savedInstanceState);
getInfo(); getInfo();
} }
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override @Override
public void setData(@Nullable Object data) { public void setData(@Nullable Object data) {
} }
@Override @Override
public void showLoading(String message) { public void showLoading(String message) {
if (message != null) if (message != null)
......
...@@ -40,6 +40,7 @@ import com.gingersoft.gsa.cloud.common.function.jump.ActivityJumpStrategy; ...@@ -40,6 +40,7 @@ import com.gingersoft.gsa.cloud.common.function.jump.ActivityJumpStrategy;
import com.gingersoft.gsa.cloud.common.leaks.WeakHandler; import com.gingersoft.gsa.cloud.common.leaks.WeakHandler;
import com.gingersoft.gsa.cloud.common.logan.LoganManager; import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.service.ICommandService; import com.gingersoft.gsa.cloud.common.service.ICommandService;
import com.gingersoft.gsa.cloud.common.service.IServiceManager;
import com.gingersoft.gsa.cloud.common.utils.AppDevices; import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils; import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.StytemUtils; import com.gingersoft.gsa.cloud.common.utils.StytemUtils;
...@@ -251,25 +252,8 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements HomeCon ...@@ -251,25 +252,8 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements HomeCon
} }
private void initService() { private void initService() {
boolean deliveryOrderServiceRunning = StytemUtils.isServiceRunning("com.gingersoft.gsa.cloud.common.service.ICommandService", _mActivity); IServiceManager.startICommandService(GsaCloudApplication.getAppContext());
if (!deliveryOrderServiceRunning) { IServiceManager.startPrjService(GsaCloudApplication.getAppContext());
Intent service = new Intent(GsaCloudApplication.getAppContext(), ICommandService.class);
service.putExtra(ICommandService.CONNECTION_TYPE, ICommandService.mCurrConnectionType);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mContext.startForegroundService(service);
} else {
mContext.startService(service);
}
}
boolean prjServiceRunning = StytemUtils.isServiceRunning("com.joe.print.mvp.print.service.PrjService", _mActivity);
if (!prjServiceRunning) {
//開啟Prj打印服務
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("openPrintService")
.build()
.call();
}
} }
/** /**
......
...@@ -41,7 +41,6 @@ public class MyFragment extends BaseFragment<MyPresenter> implements MyContract. ...@@ -41,7 +41,6 @@ public class MyFragment extends BaseFragment<MyPresenter> implements MyContract.
@BindView(R2.id.main_personal_center_rv) @BindView(R2.id.main_personal_center_rv)
RecyclerView rvMyList; RecyclerView rvMyList;
public static MyFragment newInstance() { public static MyFragment newInstance() {
MyFragment fragment = new MyFragment(); MyFragment fragment = new MyFragment();
return fragment; return fragment;
......
...@@ -5,6 +5,7 @@ import android.graphics.Color; ...@@ -5,6 +5,7 @@ import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message; import android.os.Message;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
...@@ -108,6 +109,29 @@ public class PaymentMethodReportFragment extends BaseFragment<PaymentMethodRepor ...@@ -108,6 +109,29 @@ public class PaymentMethodReportFragment extends BaseFragment<PaymentMethodRepor
mTvStartTime.setText(TimeUtils.getOldDate(-7)); mTvStartTime.setText(TimeUtils.getOldDate(-7));
mTvEndTime.setText(TimeUtils.getOldDate(0)); mTvEndTime.setText(TimeUtils.getOldDate(0));
//处理报表滑动过程中和页面滑动出现冲突
chart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
chart.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_POINTER_UP:
chart.requestDisallowInterceptTouchEvent(false);
break;
case MotionEvent.ACTION_CANCEL:
chart.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
}
@Override
public void onLazyInitView(@Nullable Bundle savedInstanceState) {
super.onLazyInitView(savedInstanceState);
getPayMenthInfo(); getPayMenthInfo();
} }
......
...@@ -5,6 +5,7 @@ import android.graphics.Color; ...@@ -5,6 +5,7 @@ import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message; import android.os.Message;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
...@@ -134,46 +135,34 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales ...@@ -134,46 +135,34 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
mTvEndTime.setText(TimeUtils.getOldDate(0)); mTvEndTime.setText(TimeUtils.getOldDate(0));
startEndTimePickerView.setOnUpdateTimePicker(onUpdateTimePicker); startEndTimePickerView.setOnUpdateTimePicker(onUpdateTimePicker);
//处理报表滑动过程中和页面滑动出现冲突
salesChart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
salesChart.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_POINTER_UP:
salesChart.requestDisallowInterceptTouchEvent(false);
break;
case MotionEvent.ACTION_CANCEL:
salesChart.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
}
@Override
public void onLazyInitView(@Nullable Bundle savedInstanceState) {
super.onLazyInitView(savedInstanceState);
getSaleReport(); getSaleReport();
getDeliveryReport(); getDeliveryReport();
} }
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override @Override
public void setData(@Nullable Object data) { public void setData(@Nullable Object data) {
......
...@@ -64,12 +64,9 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode ...@@ -64,12 +64,9 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode
private GetTableTimer tableTimer; private GetTableTimer tableTimer;
private Disposable mGetTablesDataDisposable; private Disposable mGetTablesDataDisposable;
private TableManageActivity IActivity;
@Inject @Inject
public TableManagePresenter(TableManageContract.Model model, TableManageContract.View rootView) { public TableManagePresenter(TableManageContract.Model model, TableManageContract.View rootView) {
super(model, rootView); super(model, rootView);
this.IActivity = (TableManageActivity) rootView;
} }
@Override @Override
......
package com.gingersoft.gsa.cloud.table.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.table.di.module.BillDiscountModule;
import com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.BillDiscountFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component(modules = BillDiscountModule.class, dependencies = AppComponent.class)
public interface BillDiscountComponent {
void inject(BillDiscountFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
BillDiscountComponent.Builder view(BillDiscountContract.View view);
BillDiscountComponent.Builder appComponent(AppComponent appComponent);
BillDiscountComponent build();
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.di.component;
import dagger.BindsInstance;
import dagger.Component;
import dagger.Subcomponent;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.table.di.module.CouponModule;
import com.gingersoft.gsa.cloud.table.mvp.contract.CouponContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.CouponFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:28
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component(modules = CouponModule.class, dependencies = AppComponent.class)
public interface CouponComponent {
void inject(CouponFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
CouponComponent.Builder view(CouponContract.View view);
CouponComponent.Builder appComponent(AppComponent appComponent);
CouponComponent build();
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.di.module;
import com.gingersoft.gsa.cloud.ui.adapter.TagViewAdapter;
import com.gingersoft.gsa.cloud.ui.bean.TagViewItem;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract;
import com.gingersoft.gsa.cloud.table.mvp.model.BillDiscountModel;
import java.util.ArrayList;
import java.util.List;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:26
* <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 BillDiscountModule {
@Binds
abstract BillDiscountContract.Model bindBillDiscountModel(BillDiscountModel model);
@FragmentScope
@Provides
static List<TagViewItem> provideBillDiscountList(){
return new ArrayList<>();
}
@FragmentScope
@Provides
static TagViewAdapter provideBillDiscountAdapter(List<TagViewItem> billDiscountList){
return new TagViewAdapter(billDiscountList);
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.di.module;
import com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon;
import com.gingersoft.gsa.cloud.ui.adapter.TagViewAdapter;
import com.gingersoft.gsa.cloud.ui.bean.TagViewItem;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.table.mvp.contract.CouponContract;
import com.gingersoft.gsa.cloud.table.mvp.model.CouponModel;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:28
* <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 CouponModule {
@Binds
abstract CouponContract.Model bindCouponModel(CouponModel model);
@FragmentScope
@Provides
static List<TagViewItem> provideMemberCouponList(){
return new ArrayList<>();
}
@FragmentScope
@Provides
static TagViewAdapter provideMemberCouponAdapter(List<TagViewItem> memberCouponList){
return new TagViewAdapter(memberCouponList);
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.di.module; package com.gingersoft.gsa.cloud.table.di.module;
import android.content.Context;
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.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.MealStandModel; 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.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.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.Binds;
import dagger.Module; import dagger.Module;
import dagger.Provides;
/** /**
...@@ -25,4 +45,73 @@ public abstract class MealStandModule { ...@@ -25,4 +45,73 @@ public abstract class MealStandModule {
@Binds @Binds
abstract MealStandContract.Model bindMealStandModel(MealStandModel model); 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<>();
}
@ActivityScope
@Provides
static FoodGroupAdapter provideFoodGroupAdapter(MealStandContract.View IView, @Named("foodGroupList") List<Food> foodGroupList) {
return new FoodGroupAdapter(IView.getActivity(), foodGroupList, IView.getFromType());
}
@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
...@@ -35,15 +35,4 @@ public abstract class TableModule { ...@@ -35,15 +35,4 @@ public abstract class TableModule {
@Binds @Binds
abstract TableContract.Model bindTableModel(TableModel model); abstract TableContract.Model bindTableModel(TableModel model);
@ActivityScope
@Provides
static List<Food> provideFoodList() {
return new ArrayList<>();
}
@ActivityScope
@Provides
static FoodAdapter provideFoodAdapter(Context context, List<Food> foodList, int fromType) {
return new FoodAdapter(context, foodList, fromType);
}
} }
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.mvp.contract;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import com.kingja.loadsir.callback.Callback;
import java.util.List;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface BillDiscountContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void returnBillCoupon(List<Discount> discounts);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
List<Discount> queryDB_DiscountList(byte discountScope, byte discountType);
}
}
package com.gingersoft.gsa.cloud.table.mvp.contract;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.core.LoadService;
import com.kingja.loadsir.core.LoadSir;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.Single;
import retrofit2.http.Query;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:28
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface CouponContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void returnMemberCouponList(List<MemberCoupon> memberCoupons);
void showLoadSirSuccess();
void showLoadSirCall(Class<? extends Callback> call);
LoadService getLoadService();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Single<List<MemberCoupon>> getMemberWalletList(int brandId, long memberId, long limitType, long pageIndex, long pageSize);
}
}
...@@ -5,6 +5,7 @@ import android.widget.BaseAdapter; ...@@ -5,6 +5,7 @@ import android.widget.BaseAdapter;
import com.gingersoft.gsa.cloud.common.bean.BaseResult; import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo; import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.database.bean.ComboItem; import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Discount; import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.database.bean.Food; import com.gingersoft.gsa.cloud.database.bean.Food;
...@@ -104,10 +105,13 @@ public interface MealStandContract { ...@@ -104,10 +105,13 @@ public interface MealStandContract {
void setMealRvScrollToPosition(int position); void setMealRvScrollToPosition(int position);
List<Food> getFoodGroupList();
Activity getActivity(); Activity getActivity();
void setModifierTop(int Margins); int getFromType();
void setModifierTop(int Margins);
void setCustomFoodDialog(int customType, OrderDetail foodItem); void setCustomFoodDialog(int customType, OrderDetail foodItem);
} }
......
...@@ -72,7 +72,7 @@ public interface OrderContentContract { ...@@ -72,7 +72,7 @@ public interface OrderContentContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends BaseOrderContract.Model { interface Model extends BaseOrderContract.Model {
List<Discount> queryDB_DiscountList(byte discountScope, byte discountType); // List<Discount> queryDB_DiscountList(byte discountScope, byte discountType);
Observable<BaseOrderResponse> createOrder(RequestBody requestBody); Observable<BaseOrderResponse> createOrder(RequestBody requestBody);
......
package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.database.utils.DiscountDaoUtils;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.MealConditionFilterUtils;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract;
import java.util.List;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class BillDiscountModel extends BaseModel implements BillDiscountContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public BillDiscountModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public List<Discount> queryDB_DiscountList(byte discountScope, byte discountType) {
DiscountDaoUtils discountDaoUtils = new DiscountDaoUtils(mApplication);
List<Discount> discountList = discountDaoUtils.queryDiscountByQueryBuilder();
return MealConditionFilterUtils.discountConditionFilter(discountList,discountScope,discountType);
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MealService;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MemberService;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvp.contract.CouponContract;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Single;
import io.reactivex.functions.Function;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:28
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class CouponModel extends BaseModel implements CouponContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public CouponModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Single<List<MemberCoupon>> getMemberWalletList(int brandId, long memberId, long limitType, long pageIndex, long pageSize) {
return mRepositoryManager.obtainRetrofitService(MemberService.class)
.getMemberWalletList(brandId, memberId, limitType, pageIndex, pageSize)
.map(new Function<BaseResult, List<MemberCoupon>>() {
@Override
public List<MemberCoupon> apply(BaseResult result) throws Exception {
if (result.isSuccess()) {
return GsonUtils.jsonToList(result.getData(), MemberCoupon.class);
} else {
return new ArrayList<>();
}
}
});
}
}
\ No newline at end of file
...@@ -76,12 +76,12 @@ public class OrderContentModel extends BaseModel implements OrderContentContract ...@@ -76,12 +76,12 @@ public class OrderContentModel extends BaseModel implements OrderContentContract
.loadOrder(orderId); .loadOrder(orderId);
} }
@Override // @Override
public List<Discount> queryDB_DiscountList(byte discountScope, byte discountType) { // public List<Discount> queryDB_DiscountList(byte discountScope, byte discountType) {
DiscountDaoUtils discountDaoUtils = new DiscountDaoUtils(mApplication); // DiscountDaoUtils discountDaoUtils = new DiscountDaoUtils(mApplication);
List<Discount> discountList = discountDaoUtils.queryDiscountByQueryBuilder(); // List<Discount> discountList = discountDaoUtils.queryDiscountByQueryBuilder();
return MealConditionFilterUtils.discountConditionFilter(discountList,discountScope,discountType); // return MealConditionFilterUtils.discountConditionFilter(discountList,discountScope,discountType);
} // }
@Override @Override
public Observable<BaseOrderResponse> createOrder(RequestBody requestBody) { public Observable<BaseOrderResponse> createOrder(RequestBody requestBody) {
......
...@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.table.mvp.model.service; ...@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.table.mvp.model.service;
import com.gingersoft.gsa.cloud.common.bean.BaseResult; import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.Single;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Headers; import retrofit2.http.Headers;
...@@ -27,4 +28,7 @@ public interface MemberService { ...@@ -27,4 +28,7 @@ public interface MemberService {
@GET("coupon/queryCoupon" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("coupon/queryCoupon" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> queryCoupon(@Query("tableId") int tableId,@Query("memberId") Long memberId, @Query("couponMemberId") long couponMemberId,@Query("couponNo") String couponNo,@Query("restaurantId") int restaurantId); Observable<BaseResult> queryCoupon(@Query("tableId") int tableId,@Query("memberId") Long memberId, @Query("couponMemberId") long couponMemberId,@Query("couponNo") String couponNo,@Query("restaurantId") int restaurantId);
@Headers({"Domain-Name: ricepon_member"})
@GET("member/getMemberWalletList" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Single<BaseResult> getMemberWalletList(@Query("brandId") int brandId, @Query("memberId") long memberId, @Query("limitType") long limitType, @Query("pageIndex") long pageIndex, @Query("pageSize") long pageSize);
} }
...@@ -145,8 +145,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -145,8 +145,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
protected String roundingStr = "賬單小數"; protected String roundingStr = "賬單小數";
private final String noFoodDeliveryTip = "賬單沒有食品,是否開台?"; private final String noFoodDeliveryTip = "賬單沒有食品,是否開台?";
private Disposable disposable;
public abstract void createOrder(boolean isPrint, Class<?> afterToActivity); public abstract void createOrder(boolean isPrint, Class<?> afterToActivity);
...@@ -203,9 +201,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -203,9 +201,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
this.mErrorHandler = null; this.mErrorHandler = null;
this.mAppManager = null; this.mAppManager = null;
this.mApplication = null; this.mApplication = null;
if (disposable != null && !disposable.isDisposed()) {
disposable.dispose();
}
} }
private void initOrderAdapter() { private void initOrderAdapter() {
...@@ -276,7 +271,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -276,7 +271,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
LoganManager.w_tableMode(TAG, "合計金額=" + wholeAmount); LoganManager.w_tableMode(TAG, "合計金額=" + wholeAmount);
disposable = Observable.just(wholeAmount) Disposable disposable = Observable.just(wholeAmount)
.subscribeOn(Schedulers.computation()) .subscribeOn(Schedulers.computation())
/** /**
* 計算服務費(堂食) * 計算服務費(堂食)
...@@ -404,6 +399,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -404,6 +399,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
} }
} }
}); });
addDispose(disposable);
} }
/** /**
......
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract;
import java.util.List;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class BillDiscountPresenter extends BasePresenter<BillDiscountContract.Model, BillDiscountContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public BillDiscountPresenter(BillDiscountContract.Model model, BillDiscountContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void queryBillDiscountList() {
List<Discount> discountList;
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.TAKEAWAY_TYPE)) {
discountList = mModel.queryDB_DiscountList(Discount.discount_scope_bill, Discount.ORDER_TYPE_TAKEAWAY);
} else {
discountList = mModel.queryDB_DiscountList(Discount.discount_scope_bill, Discount.ORDER_TYPE_MEAL_STAND);
}
mRootView.returnBillCoupon(discountList);
}
}
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.common.rxjava.ErrorHandleSingleSubscriber;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvp.contract.CouponContract;
import com.jess.arms.utils.RxLifecycleUtils;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import java.util.List;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:28
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class CouponPresenter extends BasePresenter<CouponContract.Model, CouponContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
//是否可以繼續上拉刷新
private boolean noMoreData = false;
private int limitType = 1;
private int pageIndex = 1;
private int pageSize = 20;
@Inject
public CouponPresenter(CouponContract.Model model, CouponContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void getMemberWalletList(RefreshLayout refreshLayout, boolean isLoadMore) {
int brandId = RestaurantInfoManager.newInstance().getBrandId();
MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
long memberId = 0;
if (memberInfo != null) {
memberId = memberInfo.getId();
}
mModel.getMemberWalletList(brandId, memberId, limitType, pageIndex, pageSize)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
if (refreshLayout == null) {
mRootView.showLoading(null);
}
}
)
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSingleSubscriber<List<MemberCoupon>>(mErrorHandler, mRootView.getLoadService()) {
@Override
public void onSuccess(List<MemberCoupon> result) {
if (pageIndex != 0) {
//根據數據庫下標分頁
pageIndex = pageIndex * pageSize;
}
if (result.size() > 0) {
if (!noMoreData) {
mRootView.returnMemberCouponList(result);
mRootView.showLoadSirSuccess();
}
if (result.size() < pageSize) {
//沒有更多數據不能上拉刷新
noMoreData = true;
} else {
noMoreData = false;
}
} else {
if (!noMoreData) {
mRootView.showLoadSirCall(EmptyCallback.class);
}
}
resetRefreshLayout(noMoreData);
}
@Override
public void onError(Throwable t) {
if (pageIndex != 0) {
//根據數據庫下標分頁
pageIndex = pageIndex * pageSize;
}
resetRefreshLayout(false);
}
private void resetRefreshLayout(boolean noMoreData) {
if (refreshLayout != null) {
if (isLoadMore) {
if (noMoreData) {
refreshLayout.setNoMoreData(true);
}
refreshLayout.finishLoadMore();
} else {
refreshLayout.finishRefresh();
refreshLayout.resetNoMoreData();
}
}
}
});
}
}
...@@ -66,6 +66,7 @@ import java.util.ArrayList; ...@@ -66,6 +66,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.ObservableEmitter; import io.reactivex.ObservableEmitter;
...@@ -108,49 +109,37 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -108,49 +109,37 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
ImageLoader mImageLoader; ImageLoader mImageLoader;
@Inject @Inject
AppManager mAppManager; AppManager mAppManager;
// @Inject
FoodAdapter mFoodAdapter; @Inject
// @Inject @Named("foodList")
List<Food> mFoodList; List<Food> mFoodList;
@Inject
List<ComboItem> mFoodComboList; //套餐细项数据
@Inject
List<Modifier> mModifierList; //细项数据
@Inject
List<Discount> mDiscountList; //折扣数据
@Inject
List<SoldoutCtrFood> mSoldoutCtrList;//沽清食品數據
@Inject
FoodAdapter mFoodAdapter;
@Inject
ComboAdapter mComboAdapter;
@Inject
ModifierAdapter mModifierAdapter;
@Inject
DiscountAdapter mDiscountAdapter;
private MealStandActivity IActivity; private MealStandActivity IActivity;
private CancelFoodDialog mCancelFoodDialog; private CancelFoodDialog mCancelFoodDialog;
private ComboAdapter mComboAdapter;
private ModifierAdapter mModifierAdapter;
private DiscountAdapter mDiscountAdapter;
/**
* 食品数据
*/
private List<Food> mFoodGroupList = new ArrayList<>();
/**
* 當前食品組下食品
*/
// private List<Food> mFoodList = new ArrayList<>();
/**
* 套餐细项数据
*/
private List<ComboItem> mFoodComboList = new ArrayList<>();
private List<Modifier> mModifierList = new ArrayList<>();
/**
* 折扣数据
*/
private List<Discount> mDiscountList = new ArrayList<>();
/**
* 沽清食品數據
*/
private List<SoldoutCtrFood> mSoldoutCtrList = new ArrayList<>();
private MealDiscountAction mMealDiscountAction; private MealDiscountAction mMealDiscountAction;
private OrderDetail mCurrentOrderDetailBean; private OrderDetail mCurrentOrderDetailBean;
private boolean RvMealClicked; private boolean RvMealClicked;
@Inject @Inject
public MealStandPresenter(MealStandContract.Model model, MealStandContract.View rootView) { public MealStandPresenter(MealStandContract.Model model, MealStandContract.View rootView) {
super(model, rootView); super(model, rootView);
...@@ -226,16 +215,15 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -226,16 +215,15 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
if (foodGroupList != null && foodGroupList.size() > 0) { if (foodGroupList != null && foodGroupList.size() > 0) {
mFoodGroupList.addAll(foodGroupList); mRootView.getFoodGroupList().addAll(foodGroupList);
Food defalutFoodGroup = getDefalutFoodGroup(mFoodGroupList); Food defalutFoodGroup = getDefalutFoodGroup(mRootView.getFoodGroupList());
if (defalutFoodGroup != null) { if (defalutFoodGroup != null) {
//默認選中第一組 //默認選中第一組
defalutFoodGroup.setSelected(true); defalutFoodGroup.setSelected(true);
} }
IActivity.initFoodGroupView(mFoodGroupList); IActivity.initFoodGroupView(mRootView.getFoodGroupList());
updateFoodSoldoutCtrData(); updateFoodSoldoutCtrData();
...@@ -246,14 +234,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -246,14 +234,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
} }
private Food getDefalutFoodGroup(List<Food> foodGroupList) { private Food getDefalutFoodGroup(List<Food> foodGroupList) {
Food defalutFoodGroup = null;
for (Food food : foodGroupList) { for (Food food : foodGroupList) {
if (food.getInvisible() == 0) { if (food.getInvisible() == 0) {
defalutFoodGroup = food; return food;
break;
} }
} }
return defalutFoodGroup; return null;
} }
...@@ -262,19 +248,18 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -262,19 +248,18 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
mRootView.setSelectFoodAdapter(mSelectMealAdapter); mRootView.setSelectFoodAdapter(mSelectMealAdapter);
} }
if (mFoodAdapter == null) { if (mFoodAdapter == null) {
mFoodAdapter = new FoodAdapter(IActivity, mFoodList, 1);
mRootView.setFoodAdapter(mFoodAdapter); mRootView.setFoodAdapter(mFoodAdapter);
} }
if (mComboAdapter == null) { if (mComboAdapter == null) {
mComboAdapter = new ComboAdapter(IActivity, mFoodComboList); // mComboAdapter = new ComboAdapter(IActivity, mFoodComboList);
mRootView.setComboAdapter(mComboAdapter); mRootView.setComboAdapter(mComboAdapter);
} }
if (mModifierAdapter == null) { if (mModifierAdapter == null) {
mModifierAdapter = new ModifierAdapter(IActivity, mModifierList); // mModifierAdapter = new ModifierAdapter(IActivity, mModifierList);
mRootView.setModifierAdapter(mModifierAdapter); mRootView.setModifierAdapter(mModifierAdapter);
} }
if (mDiscountAdapter == null) { if (mDiscountAdapter == null) {
mDiscountAdapter = new DiscountAdapter(IActivity, mDiscountList); // mDiscountAdapter = new DiscountAdapter(IActivity, mDiscountList);
mRootView.setDiscountAdapter(mDiscountAdapter); mRootView.setDiscountAdapter(mDiscountAdapter);
} }
} }
...@@ -524,7 +509,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -524,7 +509,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
} }
private void loadComboData(OrderDetail food, boolean isSelectedMeal) { private void loadComboData(OrderDetail food, boolean isSelectedMeal) {
Observable.create(new ObservableOnSubscribe<List>() { Observable.create(new ObservableOnSubscribe<List>() {
@Override @Override
public void subscribe(ObservableEmitter<List> emitter) throws Exception { public void subscribe(ObservableEmitter<List> emitter) throws Exception {
long fid = food.getProductId(); long fid = food.getProductId();
...@@ -544,6 +529,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -544,6 +529,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
} }
}).subscribeOn(Schedulers.io())//在IO线程执行数据库处理操作 }).subscribeOn(Schedulers.io())//在IO线程执行数据库处理操作
.observeOn(AndroidSchedulers.mainThread())//在UI线程 .observeOn(AndroidSchedulers.mainThread())//在UI线程
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new Observer<List>() { .subscribe(new Observer<List>() {
private int nextCount = 0; private int nextCount = 0;
...@@ -552,6 +538,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -552,6 +538,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
addDispose(d);
nextCount = 0; nextCount = 0;
} }
...@@ -1322,7 +1309,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -1322,7 +1309,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
public void setFoodSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrFoods) { public void setFoodSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrFoods) {
for (SoldoutCtrFood scc : soldoutCtrFoods) { for (SoldoutCtrFood scc : soldoutCtrFoods) {
for (Food foodGroupBean : mFoodGroupList) { for (Food foodGroupBean : mRootView.getFoodGroupList()) {
if (scc.getType() == FOOD_TYPE && scc.getFoodId() != null && foodGroupBean.getId() != null && foodGroupBean.getId().equals(scc.getFoodId())) { if (scc.getType() == FOOD_TYPE && scc.getFoodId() != null && foodGroupBean.getId() != null && foodGroupBean.getId().equals(scc.getFoodId())) {
String qtyName = scc.getQtyName(); String qtyName = scc.getQtyName();
foodGroupBean.setMaxNumber(qtyName); foodGroupBean.setMaxNumber(qtyName);
...@@ -1339,7 +1326,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -1339,7 +1326,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
} }
} }
} }
for (Food foodGroupBean : mFoodGroupList) { for (Food foodGroupBean : mRootView.getFoodGroupList()) {
if (foodGroupBean.getInvisible() == 2) { if (foodGroupBean.getInvisible() == 2) {
String qtyName = "暫停"; String qtyName = "暫停";
foodGroupBean.setMaxNumber(qtyName); foodGroupBean.setMaxNumber(qtyName);
...@@ -1400,7 +1387,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -1400,7 +1387,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
} }
private void addFoodSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrFoods) { private void addFoodSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrFoods) {
for (Food foodGroupBean : mFoodGroupList) { for (Food foodGroupBean : mRootView.getFoodGroupList()) {
if (foodGroupBean.getInvisible() == 2) { if (foodGroupBean.getInvisible() == 2) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood(); SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) FOOD_GROUP_TYPE); soldoutCtrFood.setType((byte) FOOD_GROUP_TYPE);
...@@ -1432,7 +1419,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -1432,7 +1419,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
} }
private void clearFoodSoldoutCtrData() { private void clearFoodSoldoutCtrData() {
for (Food foodGroupBean : mFoodGroupList) { for (Food foodGroupBean : mRootView.getFoodGroupList()) {
foodGroupBean.setMaxNumber(""); foodGroupBean.setMaxNumber("");
foodGroupBean.setCurrentMaxNumber(""); foodGroupBean.setCurrentMaxNumber("");
} }
...@@ -1677,7 +1664,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -1677,7 +1664,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
public void updateOrderFoodNumber() { public void updateOrderFoodNumber() {
setFoodBtnNumber(); setFoodBtnNumber();
setFoodGroupBtnNumber(IActivity.getFoodGroupGridViewAdapter(), mFoodGroupList); setFoodGroupBtnNumber(IActivity.getFoodGroupGridViewAdapter(), mRootView.getFoodGroupList());
mRootView.setOrderFoodCount(getOrderFoodNumber()); mRootView.setOrderFoodCount(getOrderFoodNumber());
} }
......
...@@ -5,6 +5,9 @@ import android.graphics.Color; ...@@ -5,6 +5,9 @@ import android.graphics.Color;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.view.Window;
import androidx.fragment.app.FragmentManager;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.bean.BaseResult; import com.gingersoft.gsa.cloud.common.bean.BaseResult;
...@@ -12,6 +15,7 @@ import com.gingersoft.gsa.cloud.common.constans.ExpandConstant; ...@@ -12,6 +15,7 @@ import com.gingersoft.gsa.cloud.common.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans; import com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans;
import com.gingersoft.gsa.cloud.common.constans.GoldConstants; import com.gingersoft.gsa.cloud.common.constans.GoldConstants;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans; import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo; import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager; 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.restaurant.utils.RestaurantExpandInfoUtils;
...@@ -51,6 +55,7 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity; ...@@ -51,6 +55,7 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter; import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.OrderTopFunctionAdapter; import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.OrderTopFunctionAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter; import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.DiscountDialogFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.DiscountDialog; import com.gingersoft.gsa.cloud.table.mvp.ui.widget.DiscountDialog;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.SplitTableDialog; import com.gingersoft.gsa.cloud.table.mvp.ui.widget.SplitTableDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog;
...@@ -61,6 +66,7 @@ import com.jess.arms.integration.AppManager; ...@@ -61,6 +66,7 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.RxLifecycleUtils; import com.jess.arms.utils.RxLifecycleUtils;
import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.xuexiang.rxutil2.RxBindingUtils;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils; import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -75,8 +81,10 @@ import io.reactivex.annotations.NonNull; ...@@ -75,8 +81,10 @@ import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import leakcanary.internal.ForegroundService;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import me.yokeyword.fragmentation.anim.FragmentAnimator;
import okhttp3.FormBody; import okhttp3.FormBody;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -806,12 +814,12 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra ...@@ -806,12 +814,12 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
} }
private void showDiscountDialog() { private void showDiscountDialog() {
if (mDiscountDialog == null) { if (IActivity.findFragment(DiscountDialogFragment.class) == null) {
mDiscountDialog = new DiscountDialog.Builder(IActivity); DiscountDialogFragment dialogFragment = DiscountDialogFragment.newInstance();
mDiscountDialog.setCanScan(true); dialogFragment.setOnDiscountItemClickListener(new DiscountDialogFragment.OnDiscountItemClickListener() {
mDiscountDialog.setOnClickListener(new DiscountDialog.Builder.OnClickListener() {
@Override @Override
public void onItemClick(Discount item, int position) { public void onBillDiscountClick(Discount item, int position) {
if (item.getMinBillAmount() > mShoppingCart.getWholeAmount()) { if (item.getMinBillAmount() > mShoppingCart.getWholeAmount()) {
//小於最小賬單金額 //小於最小賬單金額
mRootView.showMessage("小於最小賬單金額" + cashStr + item.getMinBillAmount() + " 無法使用此折扣"); mRootView.showMessage("小於最小賬單金額" + cashStr + item.getMinBillAmount() + " 無法使用此折扣");
...@@ -819,23 +827,53 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra ...@@ -819,23 +827,53 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
} }
mNomalDiscountAction.setNomalDiscountList(mShoppingCart.getNomalDiscoutByMultyDiscountList()); mNomalDiscountAction.setNomalDiscountList(mShoppingCart.getNomalDiscoutByMultyDiscountList());
mNomalDiscountAction.action(item); mNomalDiscountAction.action(item);
dialogFragment.dismiss();
} }
@Override @Override
public void onScan() { public void onCouponClick(MemberCoupon item, int position) {
toScanActivity(); if (item.getBillMinAmount() > mShoppingCart.getWholeAmount()) {
//小於最小賬單金額
mRootView.showMessage("小於最小賬單金額" + cashStr + item.getBillMinAmount() + " 無法使用此優惠券");
return;
}
mNomalDiscountAction.setNomalDiscountList(mShoppingCart.getNomalDiscoutByMultyDiscountList());
mNomalDiscountAction.action(item.castDiscount());
dialogFragment.dismiss();
} }
}); });
dialogFragment.show(IActivity.getSupportFragmentManager(), "DiscountDialogFragment");
} }
List<Discount> discountList; // if (mDiscountDialog == null) {
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.TAKEAWAY_TYPE)) { // mDiscountDialog = new DiscountDialog.Builder(IActivity);
discountList = mModel.queryDB_DiscountList(Discount.discount_scope_bill, Discount.ORDER_TYPE_TAKEAWAY); // mDiscountDialog.setCanScan(true);
} else { // mDiscountDialog.setOnClickListener(new DiscountDialog.Builder.OnClickListener() {
discountList = mModel.queryDB_DiscountList(Discount.discount_scope_bill, Discount.ORDER_TYPE_MEAL_STAND); // @Override
} // public void onItemClick(Discount item, int position) {
// if (item.getMinBillAmount() > mShoppingCart.getWholeAmount()) {
mDiscountDialog.addItems(discountList); // //小於最小賬單金額
mDiscountDialog.build().show(); // mRootView.showMessage("小於最小賬單金額" + cashStr + item.getMinBillAmount() + " 無法使用此折扣");
// return;
// }
// mNomalDiscountAction.setNomalDiscountList(mShoppingCart.getNomalDiscoutByMultyDiscountList());
// mNomalDiscountAction.action(item);
// }
//
// @Override
// public void onScan() {
// toScanActivity();
// }
// });
// }
// List<Discount> discountList;
// if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.TAKEAWAY_TYPE)) {
// discountList = mModel.queryDB_DiscountList(Discount.discount_scope_bill, Discount.ORDER_TYPE_TAKEAWAY);
// } else {
// discountList = mModel.queryDB_DiscountList(Discount.discount_scope_bill, Discount.ORDER_TYPE_MEAL_STAND);
// }
//
// mDiscountDialog.addItems(discountList);
// mDiscountDialog.build().show();
} }
/** /**
......
...@@ -240,6 +240,7 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model ...@@ -240,6 +240,7 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
whetherFreeService = payMethod.getWhetherFreeService(); whetherFreeService = payMethod.getWhetherFreeService();
orderPay.setAmount(payMethod.getPayMoney()); orderPay.setAmount(payMethod.getPayMoney());
orderPay.setWhetherReportCount(payMethod.getWhetherReportCount()); orderPay.setWhetherReportCount(payMethod.getWhetherReportCount());
orderPay.setIntegralMultiple(payMethod.getIntegralMultiple());
orderPay.setPayName(payMethod.getPayName()); orderPay.setPayName(payMethod.getPayName());
payRequest.getOrderPays().add(orderPay); payRequest.getOrderPays().add(orderPay);
} }
......
...@@ -107,6 +107,9 @@ import java.util.ArrayList; ...@@ -107,6 +107,9 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
import butterknife.OnLongClick; import butterknife.OnLongClick;
...@@ -281,7 +284,12 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -281,7 +284,12 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
private ImageView[] ivPoints; private ImageView[] ivPoints;
private int mPageIndex; private int mPageIndex;
private int totalPage; private int totalPage;
private FoodGroupAdapter mFoodGroupAdapter; @Inject
@Named("foodGroupList")
List<Food> mFoodGroupList;
@Inject
FoodGroupAdapter mFoodGroupAdapter;
private PagerGridLayoutManager mLayoutManager; private PagerGridLayoutManager mLayoutManager;
private static final int FINISH = 101; private static final int FINISH = 101;
...@@ -419,7 +427,9 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -419,7 +427,9 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
PagerConfig.setShowLog(true); PagerConfig.setShowLog(true);
// 使用原生的 Adapter 即可 // 使用原生的 Adapter 即可
mFoodGroupAdapter = new FoodGroupAdapter(this, foodGroupList, 1); // mFoodGroupAdapter = new FoodGroupAdapter(this, foodGroupList, 1);
mFoodGroupAdapter.setFoodGroupList(mFoodGroupList);
rv_food_group.setAdapter(mFoodGroupAdapter); rv_food_group.setAdapter(mFoodGroupAdapter);
mFoodGroupAdapter.setOnItemClickListener(new FoodGroupAdapter.OnItemClickListener() { mFoodGroupAdapter.setOnItemClickListener(new FoodGroupAdapter.OnItemClickListener() {
@Override @Override
...@@ -1212,6 +1222,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -1212,6 +1222,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
} }
@Override @Override
public List<Food> getFoodGroupList() {
return mFoodGroupList;
}
@Override
public void initIntent() { public void initIntent() {
} }
...@@ -1274,6 +1289,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -1274,6 +1289,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
return this; return this;
} }
@Override
public int getFromType() {
return 1;
}
public void clearInput() { public void clearInput() {
keyView.clearInput(); keyView.clearInput();
} }
...@@ -1414,7 +1434,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -1414,7 +1434,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
if (customType == Food.CUSTOM_TYPE_101) { if (customType == Food.CUSTOM_TYPE_101) {
foodItem.setProductName(name); foodItem.setProductName(name);
} }
if(!TextUtils.isEmpty(money)){ if (!TextUtils.isEmpty(money)) {
foodItem.setUnit_price(Double.parseDouble(money)); foodItem.setUnit_price(Double.parseDouble(money));
foodItem.setPrice(foodItem.getUnit_price()); foodItem.setPrice(foodItem.getUnit_price());
mPresenter.toAddFoodItem(foodItem); mPresenter.toAddFoodItem(foodItem);
......
...@@ -171,7 +171,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese ...@@ -171,7 +171,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
private List<TableBean.DataBean> mTableList; private List<TableBean.DataBean> mTableList;
private DoshokuOrder mDoshokuOrder; private DoshokuOrder mDoshokuOrder;
private ShoppingCart mShoppingCart;
@Override @Override
public void setupActivityComponent(@NonNull AppComponent appComponent) { public void setupActivityComponent(@NonNull AppComponent appComponent) {
...@@ -186,7 +185,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese ...@@ -186,7 +185,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
mDoshokuOrder = DoshokuOrder.getInstance(); mDoshokuOrder = DoshokuOrder.getInstance();
mShoppingCart = mDoshokuOrder.getShoppingCart();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
//设置根布局颜色,当layout根布局是FrameLayout时直接使用merge标签,应用DecorView默认就是FrameLayout无需再套一层 //设置根布局颜色,当layout根布局是FrameLayout时直接使用merge标签,应用DecorView默认就是FrameLayout无需再套一层
getWindow().getDecorView().setBackgroundColor(ArmsUtils.getColor(mContext, R.color.theme_white_color)); getWindow().getDecorView().setBackgroundColor(ArmsUtils.getColor(mContext, R.color.theme_white_color));
...@@ -294,7 +292,11 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese ...@@ -294,7 +292,11 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
@Override @Override
public void onBackPressedSupport() { public void onBackPressedSupport() {
super.onBackPressedSupport(); super.onBackPressedSupport();
backPressed(); if (mCurrentOperatType == OrderConentActionConstant.transfer_food_2) {
hideTransferFoodLayout();
mCurrentOperatType = OrderConentActionConstant.order_conetnt_1;
tv_action_name.setVisibility(View.GONE);
}
} }
@Override @Override
......
...@@ -25,6 +25,8 @@ import com.jess.arms.utils.DeviceUtils; ...@@ -25,6 +25,8 @@ import com.jess.arms.utils.DeviceUtils;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import butterknife.BindView; import butterknife.BindView;
/** /**
......
...@@ -61,7 +61,13 @@ public class FoodGroupAdapter extends DefaultAdapter<Food> { ...@@ -61,7 +61,13 @@ public class FoodGroupAdapter extends DefaultAdapter<Food> {
this.mParentColWidth = (int) (DeviceUtils.getScreenWidth(context) / foodGroupColumn); this.mParentColWidth = (int) (DeviceUtils.getScreenWidth(context) / foodGroupColumn);
this.mParentColHeight = GsaCloudApplication.uiStyleConfiguration.getFoodGroupBtnHeightValue(); this.mParentColHeight = GsaCloudApplication.uiStyleConfiguration.getFoodGroupBtnHeightValue();
this.mLayoutQtyHeight = GsaCloudApplication.uiStyleConfiguration.getLayoutQtyHeightValue(); this.mLayoutQtyHeight = GsaCloudApplication.uiStyleConfiguration.getLayoutQtyHeightValue();
}
public void setFoodGroupList(List<Food> foodGroupList) {
if (foodGroupList != null) {
mInfos.addAll(foodGroupList);
notifyDataSetChanged();
}
} }
@Override @Override
......
...@@ -8,11 +8,9 @@ import android.os.Message; ...@@ -8,11 +8,9 @@ import android.os.Message;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.order.contract.OrderStatusContract; import com.gingersoft.gsa.cloud.order.contract.OrderStatusContract;
import com.gingersoft.gsa.cloud.table.R; import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2; import com.gingersoft.gsa.cloud.table.R2;
......
package com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerBillDiscountComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.BillDiscountPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.ui.adapter.TagViewAdapter;
import com.gingersoft.gsa.cloud.ui.bean.TagViewItem;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.core.LoadService;
import com.kingja.loadsir.core.LoadSir;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:26
* <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 BillDiscountFragment extends BaseFragment<BillDiscountPresenter> implements BillDiscountContract.View {
@BindView(R2.id.rv_bill_discount)
RecyclerView rvBillDiscount;
@Inject
List<TagViewItem> mBillDiscountList;
@Inject
TagViewAdapter mBillDiscountAdapter;
private LoadService loadService;
public static BillDiscountFragment newInstance() {
BillDiscountFragment fragment = new BillDiscountFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerBillDiscountComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_bill_discount, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
loadService = LoadSir.getDefault().register(rvBillDiscount);
initAdapter();
mPresenter.queryBillDiscountList();
}
private void initAdapter() {
rvBillDiscount.setLayoutManager(createLayoutManager());
rvBillDiscount.setAdapter(mBillDiscountAdapter);
mBillDiscountAdapter.setOnItemClickListener((adapter, view, position) -> {
if (onDiscountItemClickListener != null) {
onDiscountItemClickListener.onItemClick((Discount) mBillDiscountList.get(position).getTargetObj(), position);
}
});
}
private RecyclerView.LayoutManager createLayoutManager() {
return new GridLayoutManager(mContext, 3, LinearLayoutManager.VERTICAL, false) {
@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
};
}
@Override
public void setData(@Nullable Object data) {
}
@Override
public void showLoading(String message) {
if (message != null)
LoadingDialog.showDialogForLoading(_mActivity, message, true);
else
LoadingDialog.showDialogForLoading(_mActivity);
}
@Override
public void hideLoading() {
LoadingDialog.cancelDialogForLoading();
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.makeText(_mActivity, message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
if (intent != null) {
ArmsUtils.startActivity(intent);
}
}
@Override
public void killMyself() {
_mActivity.onBackPressedSupport();
}
@Override
public void returnBillCoupon(List<Discount> discounts) {
List<TagViewItem> tagViewItems = castTagItem(discounts);
if (tagViewItems.size() > 0) {
loadService.showSuccess();
} else {
loadService.showCallback(EmptyCallback.class);
}
if (mBillDiscountList.size() > 0) {
mBillDiscountList.clear();
}
mBillDiscountList.addAll(tagViewItems);
mBillDiscountAdapter.notifyDataSetChanged();
}
private List<TagViewItem> castTagItem(List<Discount> discountList) {
List<TagViewItem> tagViewItems = new ArrayList<>();
for (Discount discount : discountList) {
TagViewItem<Discount> tagViewItem = new TagViewItem();
tagViewItem.setId(discount.getId());
tagViewItem.setText(discount.getRemark());
tagViewItem.setTargetObj(discount);
tagViewItems.add(tagViewItem);
}
return tagViewItems;
}
private OnBillDiscountItemClickListener onDiscountItemClickListener;
public void setOnDiscountItemClickListener(OnBillDiscountItemClickListener onDiscountItemClickListener) {
this.onDiscountItemClickListener = onDiscountItemClickListener;
}
public interface OnBillDiscountItemClickListener {
void onItemClick(Discount item, int position);
}
}
package com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon;
import com.gingersoft.gsa.cloud.common.loadsir.LoadsirUtil;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerCouponComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.CouponContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.CouponPresenter;
import com.gingersoft.gsa.cloud.ui.adapter.TagViewAdapter;
import com.gingersoft.gsa.cloud.ui.bean.TagViewItem;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.core.LoadService;
import com.kingja.loadsir.core.LoadSir;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:28
* <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 CouponFragment extends BaseFragment<CouponPresenter> implements CouponContract.View {
@BindView(R2.id.refreshLayout)
SmartRefreshLayout refreshLayout;
@BindView(R2.id.rv_coupon)
RecyclerView rvCoupon;
@Inject
List<TagViewItem> mMemberCouponList;
@Inject
TagViewAdapter mMemberCouponAdapter;
private LoadService loadService;
public static CouponFragment newInstance() {
CouponFragment fragment = new CouponFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerCouponComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_coupon, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
loadService = LoadSir.getDefault().register(refreshLayout, new Callback.OnReloadListener() {
@Override
public void onReload(View v) {
mPresenter.getMemberWalletList(null, true);
}
});
initAdapter();
initRefreshLayout();
}
@Override
public void onLazyInitView(@Nullable Bundle savedInstanceState) {
super.onLazyInitView(savedInstanceState);
mPresenter.getMemberWalletList(null, true);
}
private void initAdapter() {
rvCoupon.setLayoutManager(createLayoutManager());
rvCoupon.setAdapter(mMemberCouponAdapter);
mMemberCouponAdapter.setOnItemClickListener((adapter, view, position) -> {
if (onCouponItemClickListener != null) {
onCouponItemClickListener.onItemClick((MemberCoupon) mMemberCouponList.get(position).getTargetObj(), position);
}
});
}
private RecyclerView.LayoutManager createLayoutManager() {
return new GridLayoutManager(mContext, 3, LinearLayoutManager.VERTICAL, false) {
@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
};
}
private void initRefreshLayout() {
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(@NonNull final RefreshLayout refreshLayout) {
mPresenter.getMemberWalletList(refreshLayout,true);
}
});
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(@NonNull final RefreshLayout refreshLayout) {
mPresenter.getMemberWalletList(refreshLayout,false);
}
});
refreshLayout.setEnableLoadMore(false);
}
@Override
public void setData(@Nullable Object data) {
}
@Override
public void showLoading(String message) {
if (message != null)
LoadingDialog.showDialogForLoading(_mActivity, message, true);
else
LoadingDialog.showDialogForLoading(_mActivity);
}
@Override
public void hideLoading() {
LoadingDialog.cancelDialogForLoading();
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.makeText(_mActivity, message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
if (intent != null) {
ArmsUtils.startActivity(intent);
}
}
@Override
public void killMyself() {
_mActivity.onBackPressedSupport();
}
@Override
public void returnMemberCouponList(List<MemberCoupon> memberCoupons) {
List<TagViewItem> tagViewItems = castTagItem(memberCoupons);
if (mMemberCouponList.size() > 0) {
mMemberCouponList.clear();
}
mMemberCouponList.addAll(tagViewItems);
mMemberCouponAdapter.notifyDataSetChanged();
}
private List<TagViewItem> castTagItem(List<MemberCoupon> memberCoupons) {
List<TagViewItem> tagViewItems = new ArrayList<>();
for (MemberCoupon coupon : memberCoupons) {
TagViewItem<MemberCoupon> tagViewItem = new TagViewItem();
tagViewItem.setId(coupon.getId());
tagViewItem.setText(coupon.getRemark());
tagViewItem.setTargetObj(coupon);
tagViewItems.add(tagViewItem);
}
return tagViewItems;
}
@Override
public void showLoadSirSuccess() {
loadService.showSuccess();
}
@Override
public void showLoadSirCall(Class<? extends Callback> call) {
loadService.showCallback(call);
}
@Override
public LoadService getLoadService() {
return loadService;
}
private OnCouponItemClickListener onCouponItemClickListener;
public void setOnCouponItemClickListener(OnCouponItemClickListener onCouponItemClickListener) {
this.onCouponItemClickListener = onCouponItemClickListener;
}
public interface OnCouponItemClickListener {
void onItemClick(MemberCoupon item, int position);
}
}
package com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDialogFragment;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager.widget.ViewPager;
import com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.InputTableFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.RegionFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.DiscountDialog;
import com.gingersoft.gsa.cloud.ui.view.TriangleView;
import com.jess.arms.base.BaseDialogFragment;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.ThirdViewUtil;
import com.qmuiteam.qmui.arch.QMUIFragmentPagerAdapter;
import com.qmuiteam.qmui.layout.QMUILinearLayout;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.tab.QMUITab;
import com.qmuiteam.qmui.widget.tab.QMUITabBuilder;
import com.qmuiteam.qmui.widget.tab.QMUITabIndicator;
import com.qmuiteam.qmui.widget.tab.QMUITabSegment;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* @作者: bin
* @創建時間: 2021-04-02 17:14
* @更新時間: 2021-04-02 17:14
* @描述:
*/
public class DiscountDialogFragment extends BaseDialogFragment<BasePresenter> {
private final String TAG = "DiscountFragment";
// @BindView(R2.id.topbar)
// QMUITopBar topbar;
@BindView(R2.id.tabSegment)
QMUITabSegment tabSegment;
@BindView(R2.id.contentViewPager)
ViewPager contentViewPager;
@BindView(R2.id.ll_container)
QMUILinearLayout llContainer;
private CouponFragment couponFragment;
private BillDiscountFragment billDiscountFragment;
private boolean canScan = true;
private List<String> mTabTitles = new ArrayList<>();
private int mCurrentPageIndex = 0;
public static DiscountDialogFragment newInstance() {
DiscountDialogFragment fragment = new DiscountDialogFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
return inflater.inflate(R.layout.table_dialog_discout, container, false);
}
@Override
public void onStart() {
super.onStart();
Window dialogWindow = getDialog().getWindow();
if (dialogWindow != null) {
dialogWindow.getDecorView().setPadding(0, 0, 0, 0);
dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = (int) (QMUIDisplayHelper.getScreenHeight(mContext) * 0.6);
lp.gravity = Gravity.BOTTOM;
lp.windowAnimations = android.R.style.Animation_InputMethod;
dialogWindow.setAttributes(lp);
}
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
float mShadowAlpha = 0.25f;
int mShadowElevationDp = 14;
llContainer.setRadiusAndShadow(15, QMUIDisplayHelper.dp2px(mContext, mShadowElevationDp), mShadowAlpha);
initTopbar();
initTabAndPager();
}
@Override
public void setData(@Nullable Object data) {
}
private void initTabAndPager() {
MemberInfo memberInfo = DoshokuOrder.getInstance().getMemberInfo();
QMUIFragmentPagerAdapter pagerAdapter = new QMUIFragmentPagerAdapter(getChildFragmentManager()) {
@Override
public Fragment createFragment(int position) {
switch (position) {
case 1:
if (couponFragment != null) {
return couponFragment;
}
couponFragment = CouponFragment.newInstance();
couponFragment.setOnCouponItemClickListener(new CouponFragment.OnCouponItemClickListener() {
@Override
public void onItemClick(MemberCoupon item, int position) {
if (onDiscountItemClickListener != null) {
onDiscountItemClickListener.onCouponClick(item, position);
}
}
});
return couponFragment;
default:
if (billDiscountFragment != null) {
return billDiscountFragment;
}
billDiscountFragment = BillDiscountFragment.newInstance();
billDiscountFragment.setOnDiscountItemClickListener(new BillDiscountFragment.OnBillDiscountItemClickListener() {
@Override
public void onItemClick(Discount item, int position) {
if (onDiscountItemClickListener != null) {
onDiscountItemClickListener.onBillDiscountClick(item, position);
}
}
});
return billDiscountFragment;
}
}
@Override
public int getCount() {
return mTabTitles.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mTabTitles.get(position);
}
};
QMUITabBuilder builder = tabSegment.tabBuilder();
mTabTitles.add("折扣");
QMUITab tab1 = builder
.setText(mTabTitles.get(0))
.build(_mActivity);
tabSegment.addTab(tab1);
if (memberInfo != null) {
mTabTitles.add("優惠券");
QMUITab tab2 = builder
.setText(mTabTitles.get(1))
.build(_mActivity);
tabSegment.addTab(tab2);
}
contentViewPager.setAdapter(pagerAdapter);
contentViewPager.setCurrentItem(mCurrentPageIndex);
int space = QMUIDisplayHelper.dp2px(_mActivity, 16);
tabSegment.setIndicator(new QMUITabIndicator(QMUIDisplayHelper.dp2px(_mActivity, 2), false, true));
tabSegment.setDefaultTextSize(QMUIDisplayHelper.dp2px(_mActivity, 16), QMUIDisplayHelper.dp2px(_mActivity, 16));
tabSegment.setPadding(space, 0, space, 0);
tabSegment.setupWithViewPager(contentViewPager, false);
tabSegment.addOnTabSelectedListener(new QMUITabSegment.OnTabSelectedListener() {
@Override
public void onTabSelected(int index) {
LoganManager.w_tableMode(TAG, "當前頁面【" + mTabTitles.get(index) + "】");
}
@Override
public void onTabUnselected(int index) {
}
@Override
public void onTabReselected(int index) {
}
@Override
public void onDoubleTap(int index) {
}
});
}
private void initTopbar() {
// topbar.setBackgroundColor(ContextCompat.getColor(_mActivity, R.color.theme_color));
// if (canScan) {
// topbar.addRightImageButton(R.mipmap.table_white_scan, R.id.topbar_right_change_button)
// .setOnClickListener(v -> {
// _mActivity.onBackPressedSupport();
// });
// }
// topbar.setTitle("折扣");
}
@Override
public boolean onBackPressedSupport() {
return super.onBackPressedSupport();
}
private OnDiscountItemClickListener onDiscountItemClickListener;
public void setOnDiscountItemClickListener(OnDiscountItemClickListener onDiscountItemClickListener) {
this.onDiscountItemClickListener = onDiscountItemClickListener;
}
public interface OnDiscountItemClickListener {
void onBillDiscountClick(Discount item, int position);
void onCouponClick(MemberCoupon item, int position);
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_bill_discount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" />
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_coupon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:orientation="horizontal" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</FrameLayout>
\ No newline at end of file
...@@ -206,6 +206,12 @@ ...@@ -206,6 +206,12 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_320"
android:layout_gravity="bottom" />
<ViewStub <ViewStub
android:id="@+id/vs_transfer_food" android:id="@+id/vs_transfer_food"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -4,30 +4,23 @@ ...@@ -4,30 +4,23 @@
android:id="@+id/ll_container" android:id="@+id/ll_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/theme_white_color"
android:orientation="vertical"> android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar <!-- <com.qmuiteam.qmui.widget.QMUITopBar-->
android:id="@+id/topbar" <!-- android:id="@+id/topbar"-->
android:layout_width="match_parent" <!-- android:layout_width="match_parent"-->
android:layout_height="?attr/qmui_topbar_height" <!-- android:layout_height="?attr/qmui_topbar_height"-->
app:qmui_topbar_title_color="@color/theme_white_color" /> <!-- app:qmui_topbar_title_color="@color/theme_white_color" />-->
<androidx.recyclerview.widget.RecyclerView <com.qmuiteam.qmui.widget.tab.QMUITabSegment
android:id="@+id/recycler_discount" android:id="@+id/tabSegment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="@dimen/dp_45"
android:divider="@null" android:background="@drawable/shape_tab_panel_bg" />
android:fadeScrollbars="false"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3" />
<!-- <ImageView--> <androidx.viewpager.widget.ViewPager
<!-- android:id="@+id/btn_close"--> android:id="@+id/contentViewPager"
<!-- android:layout_width="wrap_content"--> android:layout_width="match_parent"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content" />
<!-- android:layout_margin="@dimen/dp_20"-->
<!-- android:src="@drawable/icon_dialog_close" />-->
</com.qmuiteam.qmui.layout.QMUILinearLayout> </com.qmuiteam.qmui.layout.QMUILinearLayout>
\ No newline at end of file
...@@ -48,5 +48,4 @@ ...@@ -48,5 +48,4 @@
android:id="@+id/contentViewPager" android:id="@+id/contentViewPager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
package com.gingersoft.gsa.cloud.webview.app; package com.gingersoft.gsa.cloud.webview.mvp.ui.view;
import android.animation.Animator; import android.animation.Animator;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
......
...@@ -14,7 +14,7 @@ ext { ...@@ -14,7 +14,7 @@ ext {
version = [ version = [
androidSupportSdkVersion: "29+", androidSupportSdkVersion: "29+",
retrofitSdkVersion : '2.3.0', retrofitSdkVersion : '2.3.0',
dagger2SdkVersion : "2.19", dagger2SdkVersion : "2.26",
glideSdkVersion : "4.9.0", glideSdkVersion : "4.9.0",
butterknifeSdkVersion : "10.2.1", butterknifeSdkVersion : "10.2.1",
rxlifecycleSdkVersion : "1.0", rxlifecycleSdkVersion : "1.0",
......
...@@ -15,14 +15,17 @@ ...@@ -15,14 +15,17 @@
*/ */
package com.jess.arms.base; package com.jess.arms.base;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.animation.Animation; import android.view.animation.Animation;
import com.gyf.immersionbar.ImmersionBar;
import com.jess.arms.base.delegate.IFragment; import com.jess.arms.base.delegate.IFragment;
import com.jess.arms.integration.cache.Cache; import com.jess.arms.integration.cache.Cache;
import com.jess.arms.integration.cache.CacheType; import com.jess.arms.integration.cache.CacheType;
...@@ -74,8 +77,6 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem ...@@ -74,8 +77,6 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem
final SupportFragmentDelegate mDelegate = new SupportFragmentDelegate(this); final SupportFragmentDelegate mDelegate = new SupportFragmentDelegate(this);
protected BaseFragmentActivity _mActivity; protected BaseFragmentActivity _mActivity;
private Observable mObservable;
@NonNull @NonNull
@Override @Override
public synchronized Cache<String, Object> provideCache() { public synchronized Cache<String, Object> provideCache() {
...@@ -85,7 +86,7 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem ...@@ -85,7 +86,7 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem
return mCache; return mCache;
} }
public int getColor(int colorId){ public int getColor(int colorId) {
return ContextCompat.getColor(requireContext(), colorId); return ContextCompat.getColor(requireContext(), colorId);
} }
...@@ -109,14 +110,6 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem ...@@ -109,14 +110,6 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem
return mDelegate.extraTransaction(); return mDelegate.extraTransaction();
} }
// @Override
// public void onAttach(Activity activity) {
// super.onAttach(activity);
// mDelegate.onAttach(activity);
// _mActivity = (BaseFragmentActivity) mDelegate.getActivity();
// mContext = mDelegate.getActivity();
// }
@Override @Override
public void onAttach(@NonNull Context context) { public void onAttach(@NonNull Context context) {
super.onAttach(context); super.onAttach(context);
...@@ -143,12 +136,6 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem ...@@ -143,12 +136,6 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem
mDelegate.onActivityCreated(savedInstanceState); mDelegate.onActivityCreated(savedInstanceState);
} }
// @Override
// protected View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container) {
// mCacheRootView = initView(inflater, container, null);
// return mCacheRootView;
// }
private View view; private View view;
@Nullable @Nullable
...@@ -165,12 +152,25 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem ...@@ -165,12 +152,25 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem
return view; return view;
} }
@Nullable @Nullable
@Override @Override
public View getView() { public View getView() {
return view; return view;
} }
@SuppressLint("ResourceType")
@Override
public void configImmersionBar(ImmersionBar immersionBar) {
immersionBar
.statusBarColor("#398BED") //状态栏颜色,不写默认透明色
.statusBarDarkFont(true) //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持
.fitsSystemWindows(true)
// .fullScreen(true)
.init();
}
/** /**
* 是否使用eventBus,默认为使用(true), * 是否使用eventBus,默认为使用(true),
* *
......
...@@ -53,15 +53,8 @@ public class ActivityDelegateImpl implements ActivityDelegate { ...@@ -53,15 +53,8 @@ public class ActivityDelegateImpl implements ActivityDelegate {
//注册到事件主线 //注册到事件主线
EventBus.getDefault().register(mActivity); EventBus.getDefault().register(mActivity);
} }
// if (iActivity.useLightMode()) {
// //设置状态栏黑色字体 iActivity.configImmersionBar(ImmersionBar.with(mActivity));
// QMUIStatusBarHelper.setStatusBarLightMode(mActivity);
// } else {
// //默认状态栏白色字体
// QMUIStatusBarHelper.setStatusBarDarkMode(mActivity);
// }
// //设置沉浸式状态栏颜色
// QMUIStatusBarHelper.translucent(mActivity, iActivity.getStatusBarColor());
//这里提供 AppComponent 对象给 BaseActivity 的子类, 用于 Dagger2 的依赖注入 //这里提供 AppComponent 对象给 BaseActivity 的子类, 用于 Dagger2 的依赖注入
iActivity.setupActivityComponent(ArmsUtils.obtainAppComponentFromContext(mActivity)); iActivity.setupActivityComponent(ArmsUtils.obtainAppComponentFromContext(mActivity));
} }
......
...@@ -19,14 +19,17 @@ import android.content.Context; ...@@ -19,14 +19,17 @@ import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import com.gyf.immersionbar.ImmersionBar;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import org.simple.eventbus.EventBus; import org.simple.eventbus.EventBus;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.Unbinder; import butterknife.Unbinder;
import timber.log.Timber; import timber.log.Timber;
...@@ -68,15 +71,24 @@ public class FragmentDelegateImpl implements FragmentDelegate { ...@@ -68,15 +71,24 @@ public class FragmentDelegateImpl implements FragmentDelegate {
@Override @Override
public void onCreateView(@Nullable View view, @Nullable Bundle savedInstanceState) { public void onCreateView(@Nullable View view, @Nullable Bundle savedInstanceState) {
//绑定到butterknife //绑定到butterknife
if (view != null) if (view != null) {
mUnbinder = ButterKnife.bind(mFragment, view); mUnbinder = ButterKnife.bind(mFragment, view);
}
// if (mFragment instanceof DialogFragment) {
// } else {
// iFragment.configImmersionBar(ImmersionBar.with(mFragment));
// }
} }
@Override @Override
public void onActivityCreate(@Nullable Bundle savedInstanceState) { public void onActivityCreate(@Nullable Bundle savedInstanceState) {
iFragment.initData(savedInstanceState); iFragment.initData(savedInstanceState);
// if (mFragment instanceof DialogFragment) {
// iFragment.configImmersionBar(ImmersionBar.with((DialogFragment) mFragment));
// }
} }
@Override @Override
public void onStart() { public void onStart() {
......
...@@ -22,6 +22,7 @@ import android.view.LayoutInflater; ...@@ -22,6 +22,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.gyf.immersionbar.ImmersionBar;
import com.jess.arms.base.BaseFragment; import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.jess.arms.integration.cache.Cache; import com.jess.arms.integration.cache.Cache;
...@@ -62,6 +63,12 @@ public interface IFragment { ...@@ -62,6 +63,12 @@ public interface IFragment {
*/ */
void setupFragmentComponent(@NonNull AppComponent appComponent); void setupFragmentComponent(@NonNull AppComponent appComponent);
/**
* 重写此方法可配置当前页面的沉浸式主题
*/
void configImmersionBar(ImmersionBar immersionBar);
/** /**
* 是否使用 {@link EventBus} * 是否使用 {@link EventBus}
* *
......
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.common">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="com.asus.msa.SupplementaryDID.ACCESS" />
<application
android:name="com.gingersoft.gsa.cloud.app.GsaCloudApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_android"
android:theme="@style/AppTheme">
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
<service
android:name="com.gingersoft.gsa.cloud.common.service.ICommandService"
android:enabled="true" />
</application>
</manifest>
<resources>
<!-- &lt;!&ndash; Base application theme. &ndash;&gt;-->
<!-- <style name="table_AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">-->
<!-- &lt;!&ndash; Customize your theme here. &ndash;&gt;-->
<!-- <item name="colorPrimary">@color/table_colorPrimary</item>-->
<!-- <item name="colorPrimaryDark">@color/table_colorPrimaryDark</item>-->
<!-- <item name="colorAccent">@color/table_colorAccent</item>-->
<!-- </style>-->
</resources>
package com.gingersoft.gsa.cloud.common.bean;
import androidx.annotation.LayoutRes;
import androidx.annotation.StringRes;
import lombok.Data;
/**
* @作者: bin
* @創建時間: 2021-04-06 16:48
* @更新時間: 2021-04-06 16:48
* @描述:
*/
@Data
public class LayoutInfoBean {
@StringRes
private int pageTitle;
@LayoutRes
private int layoutId;
}
package com.gingersoft.gsa.cloud.common.core.discount;
/**
* @作者: bin
* @創建時間: 2021-04-07 15:44
* @更新時間: 2021-04-07 15:44
* @描述:
*/
public abstract class AbstractDiscount {
}
package com.gingersoft.gsa.cloud.common.core.discount;
/**
* @作者: bin
* @創建時間: 2021-04-07 15:45
* @更新時間: 2021-04-07 15:45
* @描述:
*/
public class BillDiscount extends AbstractDiscount {
}
package com.gingersoft.gsa.cloud.common.core.discount;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import lombok.Data;
/**
* @作者: bin
* @創建時間: 2021-04-07 15:45
* @更新時間: 2021-04-07 15:45
* @描述:
*/
@Data
public class MemberCoupon extends AbstractDiscount {
private long id;
private String couponTypeName;
private String beginDate;
private String endDate;
private int periodDays;
private int upperLimitTimes;
private double billMinAmount;
private double amount;
private int discount;
private String remark;
private String couponNo;
private int useTimes;
public Discount castDiscount() {
Discount discount = new Discount();
discount.setId(getId());
discount.setDiscountValue(getDiscount());
discount.setMinBillAmount(getBillMinAmount());
discount.setRemark(getRemark());
discount.setBeginTime(getBeginDate());
discount.setEndTime(getEndDate());
return discount;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.common.loadsir;
import android.app.Activity;
import android.content.Context;
import android.net.ParseException;
import android.view.View;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.R;
import com.gingersoft.gsa.cloud.common.constans.AppConstans;
import com.google.gson.JsonIOException;
import com.google.gson.JsonParseException;
import com.jess.arms.utils.ArmsUtils;
import com.kingja.loadsir.core.LoadService;
import com.kingja.loadsir.core.Transport;
import org.json.JSONException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import retrofit2.HttpException;
/**
* @作者: bin
* @創建時間: 2021-04-07 16:27
* @更新時間: 2021-04-07 16:27
* @描述: 反馈页工具类,可根据对应的网络状况显示详细信息
*/
public class LoadsirUtil {
public static void showCallbackByError(Throwable t, LoadService loadService) {
if (t instanceof UnknownHostException) {
loadService.showCallback(ErrorCallback.class);
} else if (t instanceof SocketTimeoutException) {
loadService.showCallback(TimeoutCallback.class);
} else if (t instanceof HttpException) {
HttpException httpException = (HttpException) t;
String msg = convertStatusCode(GsaCloudApplication.getAppContext(), httpException);
Class<ErrorCallback> errorCallback = ErrorCallback.class;
loadService.setCallBack(errorCallback.getClass(), new OnTransport(msg));
loadService.showCallback(errorCallback.getClass());
} else if (t instanceof JsonParseException || t instanceof ParseException || t instanceof JSONException || t instanceof JsonIOException) {
String msg = ArmsUtils.getString(GsaCloudApplication.getAppContext(), R.string.response_error_data_parsing_error);
Class<ErrorCallback> errorCallback = ErrorCallback.class;
loadService.setCallBack(errorCallback.getClass(), new OnTransport(msg));
loadService.showCallback(errorCallback.getClass());
}
}
private final static String convertStatusCode(Context context, HttpException httpException) {
String msg = null;
if (httpException.code() == 500) {
msg = ArmsUtils.getString(context, R.string.response_error_server_error);
} else if (httpException.code() == 404) {
msg = ArmsUtils.getString(context, R.string.response_error_address_does_not_exist);
} else if (httpException.code() == 403) {
msg = ArmsUtils.getString(context, R.string.response_error_request_rejected_by_server);
} else if (httpException.code() == 307) {
msg = ArmsUtils.getString(context, R.string.response_error_request_was_redirected_to_another_page);
} else if (httpException.code() == 401) {
msg = ArmsUtils.getString(context, R.string.response_error_request_logged);
} else {
msg = httpException.message();
}
return msg;
}
private static final class OnTransport implements Transport {
private Class<?> callbackClass;
private String msg;
public OnTransport(Class<?> callbackClass, String msg) {
this.callbackClass = callbackClass;
this.msg = msg;
}
public OnTransport(String msg) {
this.msg = msg;
}
@Override
public void order(Context context, View rootView) {
View tv_loadsir_error_img = rootView.findViewById(R.id.tv_loadsir_error_img);
tv_loadsir_error_img.setTag(msg);
}
}
}
package com.gingersoft.gsa.cloud.common.loadsir;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.core.LoadService;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public class LoadsirUtils {
public static void loadState(LoadService loadService, Callback callback){
}
}
...@@ -9,7 +9,7 @@ import com.kingja.loadsir.callback.Callback; ...@@ -9,7 +9,7 @@ import com.kingja.loadsir.callback.Callback;
* @update date: 2020-10-27 * @update date: 2020-10-27
* @description: * @description:
*/ */
public class TimeoutCallback extends Callback { public class TimeoutCallback extends Callback {
@Override @Override
protected int onCreateView() { protected int onCreateView() {
......
package com.gingersoft.gsa.cloud.common.rxjava;
import com.gingersoft.gsa.cloud.common.loadsir.LoadsirUtil;
import com.kingja.loadsir.core.LoadService;
import io.reactivex.SingleObserver;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandlerFactory;
/**
* @作者: bin
* @創建時間: 2021-04-07 14:03
* @更新時間: 2021-04-07 14:03
* @描述:
*/
public abstract class ErrorHandleSingleSubscriber<T> implements SingleObserver<T> {
private ErrorHandlerFactory mHandlerFactory;
private LoadService mLoadService;
public ErrorHandleSingleSubscriber(RxErrorHandler rxErrorHandler, LoadService loadService) {
this.mHandlerFactory = rxErrorHandler.getHandlerFactory();
this.mLoadService = loadService;
}
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onSuccess(T t) {
}
@Override
public void onError(@NonNull Throwable t) {
t.printStackTrace();
//如果你某个地方不想使用全局错误处理,则重写 onError(Throwable) 并将 super.onError(e); 删掉
//如果你不仅想使用全局错误处理,还想加入自己的逻辑,则重写 onError(Throwable) 并在 super.onError(e); 后面加入自己的逻辑
mHandlerFactory.handleError(t);
if (mLoadService != null) {
//统一处理反馈页error显示信息
LoadsirUtil.showCallbackByError(t, mLoadService);
}
}
}
...@@ -72,12 +72,23 @@ public class MealOrderPayRequest implements Parcelable{ ...@@ -72,12 +72,23 @@ public class MealOrderPayRequest implements Parcelable{
private double tipsPrice; private double tipsPrice;
/**積分支付 所消費的積分*/ /**積分支付 所消費的積分*/
private Double consumptionPoints; private Double consumptionPoints;
/**
* 獲取積分
*/
private Double getIntegral;
/**
* 積分倍數
*/
private Double integralMultiple;
/**
* 扣減積分
*/
private Double deductionIntegral;
/**報表是否計算人數*/ /**報表是否計算人數*/
private Integer whetherReportCount; private Integer whetherReportCount;
/**支付名稱*/ /**支付名稱*/
private String payName; private String payName;
public OrderPay() { public OrderPay() {
} }
...@@ -92,6 +103,11 @@ public class MealOrderPayRequest implements Parcelable{ ...@@ -92,6 +103,11 @@ public class MealOrderPayRequest implements Parcelable{
dest.writeDouble(this.amount); dest.writeDouble(this.amount);
dest.writeDouble(this.tipsPrice); dest.writeDouble(this.tipsPrice);
dest.writeValue(this.consumptionPoints); dest.writeValue(this.consumptionPoints);
dest.writeValue(this.getIntegral);
dest.writeValue(this.integralMultiple);
dest.writeValue(this.deductionIntegral);
dest.writeValue(this.whetherReportCount);
dest.writeString(this.payName);
} }
protected OrderPay(Parcel in) { protected OrderPay(Parcel in) {
...@@ -99,6 +115,11 @@ public class MealOrderPayRequest implements Parcelable{ ...@@ -99,6 +115,11 @@ public class MealOrderPayRequest implements Parcelable{
this.amount = in.readDouble(); this.amount = in.readDouble();
this.tipsPrice = in.readDouble(); this.tipsPrice = in.readDouble();
this.consumptionPoints = (Double) in.readValue(Double.class.getClassLoader()); this.consumptionPoints = (Double) in.readValue(Double.class.getClassLoader());
this.getIntegral = (Double) in.readValue(Double.class.getClassLoader());
this.integralMultiple = (Double) in.readValue(Double.class.getClassLoader());
this.deductionIntegral = (Double) in.readValue(Double.class.getClassLoader());
this.whetherReportCount = (Integer) in.readValue(Integer.class.getClassLoader());
this.payName = in.readString();
} }
public static final Creator<OrderPay> CREATOR = new Creator<OrderPay>() { public static final Creator<OrderPay> CREATOR = new Creator<OrderPay>() {
......
...@@ -128,15 +128,15 @@ public class PayMethod implements Parcelable { ...@@ -128,15 +128,15 @@ public class PayMethod implements Parcelable {
/** /**
* '獲取積分 * '獲取積分
*/ */
private int getIntegral; private double getIntegral;
/** /**
* 積分倍數 * 積分倍數
*/ */
private int integralMultiple; private double integralMultiple;
/** /**
* 扣減積分 * 扣減積分
*/ */
private float deductionIntegral; private double deductionIntegral;
/** /**
* 對接類型 (0:否 1:yedpay 2:八達通 3:積分 ) * 對接類型 (0:否 1:yedpay 2:八達通 3:積分 )
*/ */
...@@ -277,9 +277,9 @@ public class PayMethod implements Parcelable { ...@@ -277,9 +277,9 @@ public class PayMethod implements Parcelable {
dest.writeInt(this.whetherSignatureLine); dest.writeInt(this.whetherSignatureLine);
dest.writeInt(this.paySeq); dest.writeInt(this.paySeq);
dest.writeInt(this.whetherOpenBox); dest.writeInt(this.whetherOpenBox);
dest.writeInt(this.getIntegral); dest.writeDouble(this.getIntegral);
dest.writeInt(this.integralMultiple); dest.writeDouble(this.integralMultiple);
dest.writeFloat(this.deductionIntegral); dest.writeDouble(this.deductionIntegral);
dest.writeInt(this.dockingType); dest.writeInt(this.dockingType);
dest.writeString(this.billType); dest.writeString(this.billType);
dest.writeInt(this.tablePrintingAmount); dest.writeInt(this.tablePrintingAmount);
...@@ -320,9 +320,9 @@ public class PayMethod implements Parcelable { ...@@ -320,9 +320,9 @@ public class PayMethod implements Parcelable {
this.whetherSignatureLine = in.readInt(); this.whetherSignatureLine = in.readInt();
this.paySeq = in.readInt(); this.paySeq = in.readInt();
this.whetherOpenBox = in.readInt(); this.whetherOpenBox = in.readInt();
this.getIntegral = in.readInt(); this.getIntegral = in.readDouble();
this.integralMultiple = in.readInt(); this.integralMultiple = in.readDouble();
this.deductionIntegral = in.readFloat(); this.deductionIntegral = in.readDouble();
this.dockingType = in.readInt(); this.dockingType = in.readInt();
this.billType = in.readString(); this.billType = in.readString();
this.tablePrintingAmount = in.readInt(); this.tablePrintingAmount = in.readInt();
......
...@@ -36,6 +36,8 @@ import android.content.Context; ...@@ -36,6 +36,8 @@ import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Build; import android.os.Build;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.JavascriptInterface; import android.webkit.JavascriptInterface;
import android.webkit.JsResult; import android.webkit.JsResult;
import android.webkit.WebChromeClient; import android.webkit.WebChromeClient;
...@@ -53,6 +55,7 @@ import java.util.Map; ...@@ -53,6 +55,7 @@ import java.util.Map;
public class AAChartView extends WebView { public class AAChartView extends WebView {
public interface AAChartViewCallBack { public interface AAChartViewCallBack {
void chartViewDidFinishLoad(AAChartView aaChartView); void chartViewDidFinishLoad(AAChartView aaChartView);
...@@ -68,6 +71,9 @@ public class AAChartView extends WebView { ...@@ -68,6 +71,9 @@ public class AAChartView extends WebView {
public Boolean isClearBackgroundColor; public Boolean isClearBackgroundColor;
public AAChartViewCallBack callBack; public AAChartViewCallBack callBack;
public void setContentWidth(Float contentWidth) { public void setContentWidth(Float contentWidth) {
this.contentWidth = contentWidth; this.contentWidth = contentWidth;
String jsStr = "setTheChartViewContentWidth('" String jsStr = "setTheChartViewContentWidth('"
......
package com.gingersoft.gsa.cloud.ui.adapter;
import android.content.res.ColorStateList;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.ui.R;
import com.gingersoft.gsa.cloud.ui.bean.TagViewItem;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
import java.util.List;
public class TagViewAdapter extends BaseQuickAdapter<TagViewItem, BaseViewHolder> {
public TagViewAdapter(@Nullable List<TagViewItem> data) {
super(R.layout.item_tag_view, data);
}
@Override
protected void convert(BaseViewHolder helper, TagViewItem item) {
QMUIRoundButton roundButton = helper.getView(R.id.btn_tag);
roundButton.setText(item.getText());
roundButton.setTextSize(item.getTextSize());
if (item.isChecked()) {
roundButton.setBackgroundColor(item.getCheckedBgColor());
roundButton.setStrokeColors(ColorStateList.valueOf(item.getCheckedBgColor()));
roundButton.setTextColor(item.getCheckedTextColor());
} else {
roundButton.setBackgroundColor(item.getUnCheckedBgColor());
roundButton.setStrokeColors(ColorStateList.valueOf(item.getSidelineColor()));
roundButton.setTextColor(item.getUnCheckedTextColor());
}
}
}
package com.gingersoft.gsa.cloud.ui.bean;
import android.view.View;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.R2;
import com.gingersoft.gsa.cloud.ui.R;
import com.jess.arms.utils.ArmsUtils;
import butterknife.BindColor;
import butterknife.BindDimen;
import butterknife.ButterKnife;
import lombok.Data;
/**
* @作者: bin
* @創建時間: 2021-04-06 15:14
* @更新時間: 2021-04-06 15:14
* @描述:
*/
@Data
public class TagViewItem<T> {
private long id;
private String text;
int textSize = 14;
//选择字体颜色
int checkedTextColor;
//未选择字体颜色
int unCheckedTextColor;
//边线颜色
int sidelineColor;
//选择背景色
int checkedBgColor;
//未选择背景色
int unCheckedBgColor;
boolean checked = false;
//目标对象
private T targetObj;
public TagViewItem() {
checkedTextColor = ArmsUtils.getColor(GsaCloudApplication.getAppContext(), R.color.theme_grey_color);
unCheckedTextColor = ArmsUtils.getColor(GsaCloudApplication.getAppContext(), R.color.theme_grey_color);
sidelineColor = ArmsUtils.getColor(GsaCloudApplication.getAppContext(), R.color.theme_grey_color);
checkedBgColor = ArmsUtils.getColor(GsaCloudApplication.getAppContext(), R.color.theme_color);
unCheckedBgColor = ArmsUtils.getColor(GsaCloudApplication.getAppContext(), R.color.theme_white_color);
}
}
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/btn_tag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dp_8"
android:paddingLeft="@dimen/dp_15"
android:paddingRight="@dimen/dp_15"
android:paddingTop="@dimen/dp_12"
android:paddingBottom="@dimen/dp_12"
android:textSize="@dimen/dp_16"
android:textColor="@color/theme_grey_color"
android:text="草莓派"
app:qmui_radius="@dimen/dp_5"
app:qmui_borderColor="@color/theme_grey_color">
</com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment