TangShiViewModel.java 14 KB
package com.naji.xiaotao.tangshi.vm;

import android.content.Context;
import android.databinding.ObservableArrayList;
import android.databinding.ObservableField;
import android.databinding.ObservableInt;
import android.databinding.ObservableList;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;

import com.naji.xiaotao.BR;
import com.naji.xiaotao.BuildConfig;
import com.naji.xiaotao.R;
import com.naji.xiaotao.history.ui.HistoryActivity;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.tangshi.entity.FastOrderEntity;
import com.naji.xiaotao.tangshi.entity.TableItem;
import com.naji.xiaotao.tangshi.entity.TangShiEntity;
import com.naji.xiaotao.tangshi.service.TangshiApiService;
import com.naji.xiaotao.tangshi.ui.NumDialog;
import com.naji.xiaotao.update.entity.UpdateEntity;
import com.naji.xiaotao.update.service.UpdateApiService;
import com.naji.xiaotao.update.ui.UpdateDialog;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.binding.command.BindingConsumer;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.bus.RxSubscriptions;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
import me.tatarka.bindingcollectionadapter2.ItemBinding;
import me.tatarka.bindingcollectionadapter2.OnItemBind;

public class TangShiViewModel extends BaseViewModel{

    public ObservableField<String> storeHeader=new ObservableField<>();//门店头像图片地址
    public ObservableField<String> storeName=new ObservableField<>("");//门店名称
    public List<String> tabLists=new ArrayList<>();//tab标题list

    private List<TangShiEntity> lists=new ArrayList<>();//服务器返回的数据
    private List<FastOrderEntity> fLists=new ArrayList<>();//快速点餐订单列表

    private ListDataChangedListener listDataChangedListener;
    private TabDataCompleteListener tabDataCompleteListener;

    public ObservableInt currentTabIndex=new ObservableInt(0);//当前选中的tab索引

    private Disposable mSubscription;//订阅者

    //监听XRecyclerview数据改变
    public interface ListDataChangedListener{
        void onListDataChanged();
    }

    //监听加载完tabs数据
    public interface  TabDataCompleteListener{
        void onTabDataComplete();
    }


    public TangShiViewModel(Context context,ListDataChangedListener listDataChangedListener,TabDataCompleteListener tabDataCompleteListener) {
        super(context);
        this.listDataChangedListener = listDataChangedListener;
        this.tabDataCompleteListener = tabDataCompleteListener;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //checkUpdate();//检查更新
        storeName.set(SPUtils.getInstance("user_info").getString("sellername"));
        storeHeader.set(SPUtils.getInstance("user_info").getString("sellerheader"));
    }

    @Override
    public void registerRxBus() {
        super.registerRxBus();
        mSubscription= RxBus.getDefault().toObservable(String.class).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                KLog.d("refresh");
                if(!TextUtils.isEmpty(s)&&s.equals("refresh")){
                    getSellerOrderListByType();
                }
            }
        });
        RxSubscriptions.add(mSubscription);
    }

    @Override
    public void removeRxBus() {
        super.removeRxBus();
        RxSubscriptions.remove(mSubscription);
    }

    @Override
    public void onStart() {
        super.onStart();
        getSellerOrderListByType();
    }


    //检查更新
    private void checkUpdate(){
        RetrofitClient.getInstance().create(UpdateApiService.class)
                .checkUpdate()
                .compose(RxUtils.schedulersTransformer())
                .compose(RxUtils.exceptionTransformer())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {

                    }
                })
                .subscribe(new Consumer<BaseResponse<List<UpdateEntity>>>() {
                    @Override
                    public void accept(BaseResponse<List<UpdateEntity>> listBaseResponse) throws Exception {
                        if(listBaseResponse.getRet()==200){
                            int version_code= BuildConfig.VERSION_CODE;
                            //本地版本号小于服务器最新版本号
                            if(version_code<Integer.parseInt(listBaseResponse.getData().get(0).getVersion())){
                                UpdateDialog updateDialog=new UpdateDialog();
                                Bundle bundle=new Bundle();
                                bundle.putString("file_url",listBaseResponse.getData().get(0).getFile_url());
                                bundle.putString("content",listBaseResponse.getData().get(0).getContent());
                                updateDialog.setArguments(bundle);
                                updateDialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"updateDialog");
                            }
                        }
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {

                    }
                });
    }


    //获取快速点餐订单

    private void getSellerOrderListByType(){
        Map<String,String> params=new HashMap<>();
        params.put("type","4");//1 堂食 2 外卖 3 拼桌 4 快餐
        params.put("sellerid",SPUtils.getInstance("user_info").getString("sellerid"));
        RetrofitClient.getInstance().create(TangshiApiService.class)
                .getSellerOrderListByType(params)
                .compose(RxUtils.schedulersTransformer())
                .compose(RxUtils.exceptionTransformer())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {
                        showDialog();
                    }
                })
                .subscribe(new Consumer<BaseResponse<List<List<FastOrderEntity>>>>() {
                    @Override
                    public void accept(BaseResponse<List<List<FastOrderEntity>>> listBaseResponse) throws Exception {
                        if(listBaseResponse.getRet()==200){
                            fLists.clear();
                            fLists.addAll(listBaseResponse.getData().get(0));
                            getTableList();
                        }else{
                            dismissDialog();
                            ToastUtils.showShort(listBaseResponse.getMsg());
                        }
                    }

                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable responseThrowable) throws Exception {
                        dismissDialog();
                        responseThrowable.printStackTrace();
                        ToastUtils.showShort(responseThrowable.msg);
                    }
                });
    }

    //获取桌位列表
    private void getTableList(){
        RetrofitClient.getInstance().create(TangshiApiService.class)
                .getTableList(SPUtils.getInstance("user_info").getString("sellerid"))
                .compose(RxUtils.bindToLifecycle(context)) //请求与View周期同步
                .compose(RxUtils.schedulersTransformer()) //线程调度
                .compose(RxUtils.exceptionTransformer()) // 网络错误的异常转换, 这里可以换成自己的ExceptionHandle
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {

                    }
                })
                .subscribe(new Consumer<BaseResponse<List<List<TangShiEntity>>>>() {

                    @Override
                    public void accept(BaseResponse<List<List<TangShiEntity>>> listBaseResponse) throws Exception {
                        dismissDialog();
                        if(listBaseResponse.getRet()==200){
                            lists.clear();
                            TangShiEntity tangShiEntity=new TangShiEntity();
                            tangShiEntity.setName("零售单");
                            ArrayList list=new ArrayList();
                            for(FastOrderEntity entity:fLists){
                                TableItem item=new TableItem();
                                item.setEnable("1");
                                item.setFastOrder(true);
                                item.setName("NO."+entity.getRow_num());
                                item.setTable_pnum(entity.getPnum());
                                item.setOrder_cdate(entity.getCdate());
                                item.setStatus("待结账");
                                item.setOrderid(entity.getId());
                                item.setId(entity.getId());
                                list.add(item);
                            }
                            tangShiEntity.setList(list);
                            lists.add(tangShiEntity);
                            lists.addAll(listBaseResponse.getData().get(0));
                            tabLists.clear();
                            for(TangShiEntity entity:lists){
                                tabLists.add(entity.getName());
                            }
                            if(tabDataCompleteListener!=null){
                                tabDataCompleteListener.onTabDataComplete();
                            }
                            observableList.clear();
                            for(TableItem item:lists.get(currentTabIndex.get()).getList()){
                                if(!TextUtils.isEmpty(item.getEnable())&&item.getEnable().equals("1")){//过滤掉未启用桌子
                                    observableList.add(new TangShiItemViewModel(context,item));
                                }
                            }
                            if(listDataChangedListener!=null){
                                listDataChangedListener.onListDataChanged();
                            }
                        }else{
                            ToastUtils.showShort(listBaseResponse.getMsg());
                        }

                    }
                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable throwable) throws Exception {
                        dismissDialog();
                        throwable.printStackTrace();
                        ToastUtils.showShort(throwable.getMessage());

                    }
                });
    }

    public ObservableList<TangShiItemViewModel> observableList=new ObservableArrayList<>();
    public OnItemBind<TangShiItemViewModel> onItemBind =new OnItemBind<TangShiItemViewModel>() {
        @Override
        public void onItemBind(ItemBinding itemBinding, int position, TangShiItemViewModel item) {
            switch (item.entity.getStatus()){
                case "点餐中":
                case "待结账":
                case "待确认":
                    itemBinding.set(BR.viewModel,R.layout.tangshi_item_using);
                    break;
                    case "":
                        itemBinding.set(BR.viewModel,R.layout.item_tangshi_nousing);
                        break;
            }
        }
    };

    //历史订单
    public BindingCommand onHistoryClick=new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            startActivity(HistoryActivity.class);
        }
    });

    //快速点餐
    public BindingCommand goFastCommand=new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            NumDialog tangShiFragment=new NumDialog();
            Bundle bundle=new Bundle();
            bundle.putBoolean("isFast",true);
            tangShiFragment.setArguments(bundle) ;
            tangShiFragment.show(((AppCompatActivity)context).getSupportFragmentManager(),"tangshiFragment");
        }
    });

    //xRecyclerview刷新
    public BindingCommand onRefreshCommand=new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            KLog.d("XRecyclerView正在刷新");
            getSellerOrderListByType();
        }
    });

    //xRecyclerview加载更多
    public BindingCommand onLoadMoreCommand=new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            KLog.d("XRecyclerView正在加载更多");
        }
    });

    //Tab按钮点击监听
    public BindingCommand onTabSelectedCommand=new BindingCommand(new BindingConsumer() {
        @Override
        public void call(Object o) {
            int index=(int)o;
            currentTabIndex.set(index);
            refreshList();
        }
    });

    //刷新列表数据
    private void refreshList(){
        observableList.clear();
        for(TableItem item:lists.get(currentTabIndex.get()).getList()){
            observableList.add(new TangShiItemViewModel(context,item));
        }
        if(listDataChangedListener!=null){
            listDataChangedListener.onListDataChanged();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        observableList.clear();
        observableList = null;
    }
}