Commit cffe4c2a by 宁斌

1、新增一层代理优化retrofit,将retrofit.loadServceMethod()方法放到子线程执行,此方法内部大量反射 …

1、新增一层代理优化retrofit,将retrofit.loadServceMethod()方法放到子线程执行,此方法内部大量反射   2、解决PrintActivity 忘记unregisterPrinterFlowListener导致内存泄漏的问题
parent 63c11ab4
......@@ -16,6 +16,9 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.viewpager2.widget.ViewPager2;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.bean.BaseResultOld;
import com.gingersoft.gsa.cloud.common.core.login.LoginBean;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.user.UserConstans;
......
......@@ -5,6 +5,7 @@ import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.Subcomponent;
import com.gingersoft.gsa.cloud.manager.mvp.contract.AddAreaContract;
import com.gingersoft.gsa.cloud.manager.mvp.model.AddAreaModel;
......
......@@ -25,6 +25,7 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import me.yokeyword.fragmentation.ISupportFragment;
import me.yokeyword.fragmentation.anim.DefaultHorizontalAnimator;
......
......@@ -12,14 +12,12 @@ import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.core.table.TableArea;
import com.gingersoft.gsa.cloud.manager.R;
......@@ -234,14 +232,10 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
itemTouchHelperCallback.setOnMoveListener(new RecyItemTouchHelperCallback.onMoveListener() {
@Override
public void onMoveFinish(RecyclerView.Adapter adapter) {
if (adapter instanceof DefaultAdapter) {
DefaultAdapter defaultAdapter = (DefaultAdapter) adapter;
if (defaultAdapter.getInfos() != null) {
String ids = getTableAreaIds(defaultAdapter.getInfos());
if (!TextUtils.isEmpty(ids)) {
mActivity.changeAreaSort(ids);
}
public void onMoveFinish(RecyclerView.Adapter adapter, String ids) {
if (!TextUtils.isEmpty(ids)) {
if (!TextUtils.isEmpty(ids)) {
mActivity.changeAreaSort(ids);
}
}
}
......
......@@ -29,6 +29,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.core.table.TableArea;
import com.gingersoft.gsa.cloud.common.core.table.TableManagerItem;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.manager.R;
import com.gingersoft.gsa.cloud.manager.R2;
import com.gingersoft.gsa.cloud.manager.di.component.DaggerTableListComponent;
......@@ -318,14 +319,10 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
itemTouchHelperCallback.setOnMoveListener(new RecyItemTouchHelperCallback.onMoveListener() {
@Override
public void onMoveFinish(RecyclerView.Adapter adapter) {
if (mAdapter instanceof QMUIStickySectionAdapter) {
QMUIStickySectionAdapter qmuiStickySectionAdapter = (QMUIStickySectionAdapter) mAdapter;
List<QMUISection<SectionHeader, TableManagerItem>> qmuiSectionList = qmuiStickySectionAdapter.getCurrentData();
String ids = getTableIds(qmuiSectionList);
public void onMoveFinish(RecyclerView.Adapter adapter,String ids) {
if (!TextUtils.isEmpty(ids)) {
if (!TextUtils.isEmpty(ids)) {
mActivity.changeTableSort(getTableIds(qmuiSectionList));
mActivity.changeTableSort(ids);
}
}
}
......
......@@ -203,6 +203,7 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
layout.addView(getDiningFoodList(mContext, foodList, printerDeviceBean, 0, true));
layout.addView(getHalfLine(mContext));
List<BillingBean> billingBeans = new ArrayList<>();
//添加合計項
billingBeans.add(new BillingBean("合計", mPrintSlipContent.getWholeAmount()));
//添加其他金額項
......
......@@ -114,52 +114,53 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void initData(@Nullable Bundle savedInstanceState) {
PrinterFlowProxy.newInstance().registerPrinterFlowListener(new PrinterFlowListener() {
PrinterFlowProxy.newInstance().registerPrinterFlowListener(printerFlowListener);
}
@Override
public void connectionBefore(String deviceName, String IP, int port, long ioTimeout, long printTimeout) {
private PrinterFlowListener printerFlowListener = new PrinterFlowListener() {
@Override
public void connectionBefore(String deviceName, String IP, int port, long ioTimeout, long printTimeout) {
}
}
@Override
public void connectionSuccess() {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_PRINTING, PrinterLoadingDialog.STATUS_SUCCESS, null);
}
@Override
public void connectionSuccess() {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_PRINTING, PrinterLoadingDialog.STATUS_SUCCESS, null);
}
@Override
public void connectionError(Exception e) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_PRINTING, PrinterLoadingDialog.STATUS_ERROR, e.getMessage());
printFail();
}
@Override
public void connectionError(Exception e) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_PRINTING, PrinterLoadingDialog.STATUS_ERROR, e.getMessage());
printFail();
}
@Override
public void disconnect(Exception e) {
}
@Override
public void disconnect(Exception e) {
}
@Override
public void onPrinterDataBefore(int orderType, int printType, String printerData, String printerDeviceInfo) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_CONNECTING, PrinterLoadingDialog.STATUS_SUCCESS, null);
}
@Override
public void onPrinterDataBefore(int orderType, int printType, String printerData, String printerDeviceInfo) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_CONNECTING, PrinterLoadingDialog.STATUS_SUCCESS, null);
}
@Override
public void onPrinterBitmapBefore(int orderType, int printType, String directoryName, List<Bitmap> bitmaps) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_CONNECTING, PrinterLoadingDialog.STATUS_SUCCESS, null);
}
@Override
public void onPrinterBitmapBefore(int orderType, int printType, String directoryName, List<Bitmap> bitmaps) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_CONNECTING, PrinterLoadingDialog.STATUS_SUCCESS, null);
}
@Override
public void onPrintSuccess() {
printerResult = true;
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_RESULT, PrinterLoadingDialog.STATUS_SUCCESS, null);
printSuccess();
}
@Override
public void onPrintSuccess() {
printerResult = true;
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_RESULT, PrinterLoadingDialog.STATUS_SUCCESS, null);
printSuccess();
}
@Override
public void onPrintError(Exception e, int errorCode) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_RESULT, PrinterLoadingDialog.STATUS_ERROR, e.getMessage());
printFail();
}
});
}
@Override
public void onPrintError(Exception e, int errorCode) {
printerLoadingDialog.setStep(PrinterLoadingDialog.PROGRESS_RESULT, PrinterLoadingDialog.STATUS_ERROR, e.getMessage());
printFail();
}
};
private void printFail() {
printerResult = false;
......@@ -544,6 +545,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printerInIt.disconnectEpson();
}
printerLoadingDialog.dismiss();
PrinterFlowProxy.newInstance().unregisterPrinterFlowListener(printerFlowListener);
}
@Override
......
......@@ -27,19 +27,10 @@ public class AddOrderRequest {
private long tableId;
private String tableNumber;
/**
* 合計金額
*/
/**
* 服務費
*/
/**
* 賬單小數
*/
private Double rounding;
/**
* 總金額
*/
private List<Long> deleteDiscountIds;
private List<OrderDiscountRequest> discountDetails;
private Map<String, List<OrderResponse.OrderDetailsBean>> maps;
private List<DeleteOrderRequest> deleteOrders;
......
......@@ -320,6 +320,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
//整單折扣
Discount discount = new Discount();
discount.setId(orderDiscount.getDiscountId());
discount.setDiscountRecordId(orderDiscount.getId());
discount.setType(orderDiscount.getDiscountType());
discount.setRemark(orderDiscount.getRemark());
discount.setDiscountValue(orderDiscount.getDiscountValue());
......@@ -336,6 +337,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
LoganManager.w_tableMode(TAG, "已下單優惠券折扣金額=" + orderDiscount.getDiscountAmount());
//優惠券折扣
CouponDiscountBean couponDiscount = new CouponDiscountBean();
couponDiscount.setDiscountRecordId(orderDiscount.getId());
couponDiscount.setCouponTypeName1(orderDiscount.getRemark());
couponDiscount.setCouponTypeName2(orderDiscount.getRemark2());
couponDiscount.setCouponTypeName3(orderDiscount.getRemark3());
......@@ -1013,7 +1015,9 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
if (mDoshokuOrder.getDeleteMealOrders() != null) {
request.setDeleteOrders(mDoshokuOrder.getDeleteMealOrders());
}
if (mDoshokuOrder.getDeleteDiscountIds() != null) {
request.setDeleteDiscountIds(mDoshokuOrder.getDeleteDiscountIds());
}
Double rounding = getRounding();
request.setRounding(rounding != null ? rounding : 0);
......
......@@ -29,6 +29,8 @@ import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.order.billItem.DiscountItem;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.discount.CouponDiscount;
import com.gingersoft.gsa.cloud.order.discount.MemberDiscount;
import com.gingersoft.gsa.cloud.order.discount.NomalDiscount;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
......@@ -175,7 +177,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
@Override
public void onItemClick(View v, Function function) {
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK,function.getResName());
LoganManager.w_tableMode(TAG, LoganManager.EVENT_CLICK, function.getResName());
mRootView.recordOperat(true);
......@@ -237,7 +239,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
@Override
public boolean onItemLongClick(View v, Function datasBean) {
LoganManager.w_tableMode(TAG, LoganManager.EVENT_LONG_CLICK,datasBean.getResName());
LoganManager.w_tableMode(TAG, LoganManager.EVENT_LONG_CLICK, datasBean.getResName());
if (datasBean.getResName().equals("印單") || datasBean.getResName().equals("送單")) {
PrinterUtils.switchPrintMethod(IActivity, datasBean, mOrderTopFunctionAdapter);
}
......@@ -253,11 +255,29 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
@Override
public void onItemDeleteClick(BillItem datasBean, int position) {
addDeleteDiscountIdByType(datasBean);
removeBillItemByPosition(position);
}
});
}
/**
* 跟进折扣类型将Id加入到删除列表,注:会员折扣不可删除
*
* @param item
*/
private void addDeleteDiscountIdByType(BillItem item) {
if (item instanceof DiscountItem) {
if (item.getType() == BillItem.NOMAL_DISCOUNT_TYPE) {
NomalDiscount nomalDiscount = (NomalDiscount) ((DiscountItem) item).getDiscount();
mDoshokuOrder.addDeleteDiscountId(nomalDiscount.getDiscount().getDiscountRecordId());
} else if (item.getType() == BillItem.COUPON_DISCOUNT_TYPE) {
CouponDiscount couponDiscount = (CouponDiscount) ((DiscountItem) item).getDiscount();
mDoshokuOrder.addDeleteDiscountId(couponDiscount.getCouponDiscountId());
}
}
}
public void initTopFunctionData() {
if (mFunctionList.size() > 0) {
mFunctionList.clear();
......@@ -404,7 +424,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
.setActionName("printActivity")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_SERVE)
.addParam(PrintConstans.PRINT_CONTENT, printContent)
.addParam(PrintConstans.PRINT_ORDER_NO,DoshokuOrder.getInstance().getOrderNo())
.addParam(PrintConstans.PRINT_ORDER_NO, DoshokuOrder.getInstance().getOrderNo())
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
if (result.isSuccess()) {
......@@ -451,7 +471,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_SLIP)//印單
.addParam(PrintConstans.PRINT_CONTENT, printContent)
.addParam(PrintConstans.PRINT_ORDER_NO,DoshokuOrder.getInstance().getOrderNo())
.addParam(PrintConstans.PRINT_ORDER_NO, DoshokuOrder.getInstance().getOrderNo())
.setActionName("printActivity")
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
......
......@@ -239,6 +239,8 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
}
whetherFreeService = payMethod.getWhetherFreeService();
orderPay.setAmount(payMethod.getPayMoney());
orderPay.setWhetherReportCount(payMethod.getWhetherReportCount());
orderPay.setPayName(payMethod.getPayName());
payRequest.getOrderPays().add(orderPay);
}
payRequest.setWhetherFreeService(whetherFreeService);
......
......@@ -9,9 +9,7 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.GridLayoutManager;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.database.bean.ColorBean;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
......
......@@ -26,6 +26,7 @@ import com.jess.arms.http.log.FormatPrinter;
import com.jess.arms.http.log.RequestInterceptor;
import com.jess.arms.http.imageloader.BaseImageLoaderStrategy;
import com.jess.arms.http.imageloader.glide.GlideImageLoaderStrategy;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.integration.cache.Cache;
import com.jess.arms.integration.cache.CacheType;
import com.jess.arms.integration.cache.LruCache;
......@@ -72,6 +73,7 @@ public class GlobalConfigModule {
private RequestInterceptor.Level mPrintHttpLogLevel;
private FormatPrinter mFormatPrinter;
private Cache.Factory mCacheFactory;
private IRepositoryManager.ObtainServiceDelegate mObtainServiceDelegate;
private GlobalConfigModule(Builder builder) {
this.mApiUrl = builder.apiUrl;
......@@ -88,6 +90,7 @@ public class GlobalConfigModule {
this.mPrintHttpLogLevel = builder.printHttpLogLevel;
this.mFormatPrinter = builder.formatPrinter;
this.mCacheFactory = builder.cacheFactory;
this.mObtainServiceDelegate = builder.obtainServiceDelegate;
}
public static Builder builder() {
......@@ -222,6 +225,12 @@ public class GlobalConfigModule {
} : mCacheFactory;
}
@Singleton
@Provides
@Nullable
IRepositoryManager.ObtainServiceDelegate provideObtainServiceDelegate() {
return mObtainServiceDelegate;
}
public static final class Builder {
private HttpUrl apiUrl;
......@@ -238,6 +247,7 @@ public class GlobalConfigModule {
private RequestInterceptor.Level printHttpLogLevel;
private FormatPrinter formatPrinter;
private Cache.Factory cacheFactory;
private IRepositoryManager.ObtainServiceDelegate obtainServiceDelegate;
private Builder() {
}
......@@ -319,6 +329,11 @@ public class GlobalConfigModule {
return this;
}
public Builder obtainServiceDelegate(IRepositoryManager.ObtainServiceDelegate obtainServiceDelegate) {
this.obtainServiceDelegate = obtainServiceDelegate;
return this;
}
public GlobalConfigModule build() {
return new GlobalConfigModule(this);
}
......
......@@ -17,8 +17,12 @@ package com.jess.arms.integration;
import android.content.Context;
import androidx.annotation.Nullable;
import com.jess.arms.mvp.IModel;
import retrofit2.Retrofit;
/**
* ================================================
* 用来管理网络请求层,以及数据缓存层,以后可能添加数据库请求层
......@@ -57,4 +61,9 @@ public interface IRepositoryManager {
Context getContext();
interface ObtainServiceDelegate {
@Nullable
<T> T createRetrofitService(Retrofit retrofit, Class<T> serviceClass);
}
}
......@@ -18,11 +18,15 @@ package com.jess.arms.integration;
import android.app.Application;
import android.content.Context;
import androidx.annotation.Nullable;
import com.jess.arms.integration.cache.Cache;
import com.jess.arms.integration.cache.CacheType;
import com.jess.arms.mvp.IModel;
import com.jess.arms.utils.Preconditions;
import java.lang.reflect.Proxy;
import javax.inject.Inject;
import javax.inject.Singleton;
......@@ -51,6 +55,9 @@ public class RepositoryManager implements IRepositoryManager {
Application mApplication;
@Inject
Cache.Factory mCachefactory;
@Inject
@Nullable
ObtainServiceDelegate mObtainServiceDelegate;
private Cache<String, Object> mRetrofitServiceCache;
private Cache<String, Object> mCacheServiceCache;
......@@ -67,12 +74,21 @@ public class RepositoryManager implements IRepositoryManager {
*/
@Override
public synchronized <T> T obtainRetrofitService(Class<T> service) {
if (mRetrofitServiceCache == null)
if (mRetrofitServiceCache == null) {
mRetrofitServiceCache = mCachefactory.build(CacheType.RETROFIT_SERVICE_CACHE);
}
Preconditions.checkNotNull(mRetrofitServiceCache, "Cannot return null from a Cache.Factory#build(int) method");
T retrofitService = (T) mRetrofitServiceCache.get(service.getCanonicalName());
if (retrofitService == null) {
retrofitService = mRetrofit.get().create(service);
if (mObtainServiceDelegate != null) {
retrofitService = mObtainServiceDelegate.createRetrofitService(mRetrofit.get(), service);
}
if (retrofitService == null) {
retrofitService = (T) Proxy.newProxyInstance(
service.getClassLoader(),
new Class[]{service},
new RetrofitServiceProxyHandler(mRetrofit.get(), service));
}
mRetrofitServiceCache.put(service.getCanonicalName(), retrofitService);
}
return retrofitService;
......
package com.jess.arms.integration;
import androidx.annotation.Nullable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import io.reactivex.Observable;
import io.reactivex.Single;
import retrofit2.Retrofit;
public class RetrofitServiceProxyHandler implements InvocationHandler {
private Retrofit mRetrofit;
private Class<?> mServiceClass;
private Object mRetrofitService;
public RetrofitServiceProxyHandler(Retrofit retrofit, Class<?> serviceClass) {
mRetrofit = retrofit;
mServiceClass = serviceClass;
}
@Override
public Object invoke(Object proxy, Method method, @Nullable Object[] args) throws Throwable {
// 根据 https://zhuanlan.zhihu.com/p/40097338 对 Retrofit 进行的优化
if (method.getReturnType() == Observable.class) {
// 如果方法返回值是 Observable 的话,则包一层再返回,
// 只包一层 defer 由外部去控制耗时方法以及网络请求所处线程,
// 如此对原项目的影响为 0,且更可控。
return Observable.defer(() -> {
// 执行真正的 Retrofit 动态代理的方法
return (Observable) method.invoke(getRetrofitService(), args);
});
} else if (method.getReturnType() == Single.class) {
// 如果方法返回值是 Single 的话,则包一层再返回。
return Single.defer(() -> {
// 执行真正的 Retrofit 动态代理的方法
return (Single) method.invoke(getRetrofitService(), args);
});
}
// 返回值不是 Observable 或 Single 的话不处理。
return method.invoke(getRetrofitService(), args);
}
private Object getRetrofitService() {
if (mRetrofitService == null) {
mRetrofitService = mRetrofit.create(mServiceClass);
}
return mRetrofitService;
}
}
......@@ -12,8 +12,10 @@ import androidx.annotation.NonNull;
import com.billy.cc.core.component.CC;
import com.dianping.logan.Logan;
import com.dianping.logan.OnLoganProtocolStatus;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.gingersoft.gsa.cloud.common.BuildConfig;
import com.gingersoft.gsa.cloud.common.R;
import com.gingersoft.gsa.cloud.common.config.DoraemonKitConfig;
import com.gingersoft.gsa.cloud.common.config.LoganConfig;
import com.gingersoft.gsa.cloud.common.config.expandconfig.ExpandInfoSetting;
import com.gingersoft.gsa.cloud.common.config.expandconfig.FunctionExtendedConfiguration;
......@@ -185,7 +187,7 @@ public class GsaCloudApplication extends BaseApplication {
* 初始化滴滴開發,測試輔助工具哆啦A夢
*/
private void initDoraemonKit() {
// DoraemonKit.install(getAppContext(), DoraemonKitConfig.PRODUCE_ID);
DoraemonKit.install(getAppContext(), DoraemonKitConfig.PRODUCE_ID);
}
/**
......
......@@ -13,7 +13,7 @@ import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
*/
public class RestaurantInfoManager {
private static RestaurantInfoManager sRestaurantInfoManager = null;
private static volatile RestaurantInfoManager sRestaurantInfoManager = null;
/**
* 品牌信息
......
......@@ -20,7 +20,7 @@ import lombok.Setter;
@Setter
public class UserContext {
private static UserContext sUserContextManger = null;
private static volatile UserContext sUserContextManger = null;
/**
* 用戶狀態
......
......@@ -15,6 +15,8 @@ import lombok.Data;
public class CouponDiscountBean {
private Long id;
// 记录ID
private Long discountRecordId;
// 店鋪ID
private Long restaurantId;
// 品牌ID
......
......@@ -72,18 +72,13 @@ public class MealOrderPayRequest implements Parcelable{
private double tipsPrice;
/**積分支付 所消費的積分*/
private Double consumptionPoints;
/**報表是否計算人數*/
private Integer whetherReportCount;
/**支付名稱*/
private String payName;
public OrderPay() {
}
@Override
public String toString() {
return "OrderPay{" +
"payType=" + payType +
", amount=" + amount +
", tipsPrice=" + tipsPrice +
", consumptionPoints=" + consumptionPoints +
'}';
public OrderPay() {
}
@Override
......
......@@ -14,6 +14,10 @@ import lombok.Data;
public class OrderDiscountResponse implements Serializable {
/**
* 折扣记录ID
*/
private Long id;
/**
* 餐廳折扣ID
*/
private Long discountId;
......
......@@ -26,7 +26,7 @@ import lombok.Setter;
@Setter
public class DoshokuOrder extends BaseOrder {
private static DoshokuOrder doshokuOrder;
private volatile static DoshokuOrder doshokuOrder;
public static DoshokuOrder getInstance() {
if (doshokuOrder == null) {
......@@ -60,6 +60,10 @@ public class DoshokuOrder extends BaseOrder {
*/
private List<DeleteOrderRequest> deleteMealOrders;
/**
* 記錄刪除的折扣Id
*/
private List<Long> deleteDiscountIds;
/**
* 本次送單食品,用於打印
*/
private List<OrderDetail> newFoodList = new ArrayList<>();
......@@ -118,6 +122,10 @@ public class DoshokuOrder extends BaseOrder {
this.deleteMealOrders = deleteMealOrders;
}
public void addDeleteDiscountId(Long id) {
getDeleteDiscountIds().add(id);
}
public Date getOpenTableTime() {
if (orderPlaced != null && orderPlaced.getCreateTime() != null) {
return new Date(orderPlaced.getCreateTime());
......@@ -132,6 +140,13 @@ public class DoshokuOrder extends BaseOrder {
return deleteMealOrders;
}
public List<Long> getDeleteDiscountIds() {
if (deleteDiscountIds == null) {
deleteDiscountIds = new ArrayList<>();
}
return deleteDiscountIds;
}
public boolean needUpdateMemberInfo() {
if (TextUtils.isEmpty(memberUpdateStatus)) {
return false;
......@@ -153,6 +168,9 @@ public class DoshokuOrder extends BaseOrder {
if (deleteMealOrders != null) {
deleteMealOrders.clear();
}
if (deleteDiscountIds != null) {
deleteDiscountIds.clear();
}
if (newFoodList != null) {
newFoodList.clear();
}
......
package com.gingersoft.gsa.cloud.ui.recylcler.event;
import android.graphics.Color;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.core.table.TableManagerItem;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionHeader;
import com.jess.arms.base.DefaultAdapter;
import com.qmuiteam.qmui.widget.section.QMUIDefaultStickySectionAdapter;
import com.qmuiteam.qmui.widget.section.QMUISection;
......@@ -11,6 +17,9 @@ import com.qmuiteam.qmui.widget.section.QMUIStickySectionAdapter;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import lombok.SneakyThrows;
/**
* 作者:ELEGANT_BIN
......@@ -25,6 +34,7 @@ public class RecyItemTouchHelperCallback<H extends QMUISection.Model<H>, T exten
private RecyclerView.Adapter mAdapter;
boolean isSwipeEnable;
boolean isFirstDragUnable;
private String ids;
public RecyItemTouchHelperCallback(RecyclerView.Adapter adapter) {
mAdapter = adapter;
......@@ -74,14 +84,12 @@ public class RecyItemTouchHelperCallback<H extends QMUISection.Model<H>, T exten
if ((fromIndex + 1) == list.size()) {
return false;
}
for (int i = fromIndex; i < toIndex; i++) {
Collections.swap(list, i, i + 1);
}
LoganManager.w_tableMode(TAG, LoganManager.EVENT_SCOLL + "調整餐檯排序fromIndex=" + fromIndex + " toIndex=" +toIndex);
Collections.swap(list, fromIndex, toIndex);
ids = getTableIds((List<TableManagerItem>) list);
} else {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(((DefaultAdapter) mAdapter).getInfos(), i, i + 1);
}
Collections.swap(((DefaultAdapter) mAdapter).getInfos(), fromPosition, toPosition);
ids = null;
}
} else {
if (mAdapter instanceof QMUIStickySectionAdapter) {
......@@ -99,20 +107,34 @@ public class RecyItemTouchHelperCallback<H extends QMUISection.Model<H>, T exten
if ((fromIndex + 1) == list.size()) {
return false;
}
for (int i = fromIndex; i > toIndex; i--) {
Collections.swap(list, i, i - 1);
}
LoganManager.w_tableMode(TAG, LoganManager.EVENT_SCOLL + "調整餐檯排序fromIndex=" + fromIndex + " toIndex=" + toIndex);
Collections.swap(list, fromIndex, toIndex);
ids = getTableIds((List<TableManagerItem>) list);
} else {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(((DefaultAdapter) mAdapter).getInfos(), i, i - 1);
}
Collections.swap(((DefaultAdapter) mAdapter).getInfos(), fromPosition, toPosition);
ids = null;
}
}
mAdapter.notifyItemMoved(fromPosition, toPosition);
return true;
}
private String getTableIds(List<TableManagerItem> qmuiSectionList) {
StringBuilder builder = new StringBuilder();
for (TableManagerItem tableItem : qmuiSectionList) {
if (tableItem.getLayoutType() == 0) {
builder.append(tableItem.getId());
builder.append(",");
}
}
String str = builder.toString();
if (str.endsWith(",")) {
str = str.substring(0, str.length() - 1);
}
return str;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int adapterPosition = viewHolder.getAdapterPosition();
......@@ -138,7 +160,7 @@ public class RecyItemTouchHelperCallback<H extends QMUISection.Model<H>, T exten
viewHolder.itemView.setBackgroundColor(Color.WHITE);
// mAdapter.notifyDataSetChanged();
if (onMoveListener != null) {
onMoveListener.onMoveFinish(mAdapter);
onMoveListener.onMoveFinish(mAdapter, ids);
}
}
......@@ -159,6 +181,6 @@ public class RecyItemTouchHelperCallback<H extends QMUISection.Model<H>, T exten
}
public interface onMoveListener {
void onMoveFinish(RecyclerView.Adapter adapter);
void onMoveFinish(RecyclerView.Adapter adapter, String ids);
}
}
\ 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