RemarkViewModel.java 8.1 KB
package com.naji.xiaotao.cart.vm;

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

import com.naji.xiaotao.R;
import com.naji.xiaotao.BR;
import com.naji.xiaotao.cart.entity.RemarkEntity;
import com.naji.xiaotao.cart.entity.RemarkItemEntity;
import com.naji.xiaotao.cart.service.CartApiService;
import com.naji.xiaotao.cart.ui.RemarkActivity;
import com.naji.xiaotao.common.dialog.RightDialog;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.tangshi.ui.TangShiActivity;

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.base.TitleViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
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 RemarkViewModel extends BaseViewModel{

    public TitleViewModel titleViewModel;
    private String orderid;
    private String remarkid;
    public ObservableField<String> remark=new ObservableField<>();

    @Override
    public void onCreate() {
        super.onCreate();
        getRemarkBySellerid();
    }

    public RemarkViewModel(Context context,String orderid,String remarkid,String remark){
        super(context);
        titleViewModel=new TitleViewModel(context,"整单备注");
        this.orderid=orderid;
        this.remarkid=remarkid;
        if(!TextUtils.isEmpty(remark)){
            this.remark.set(remark);
        }
    }


    public ObservableList<RemarkItemViewModel> observableList=new ObservableArrayList<>();
    public OnItemBind<RemarkItemViewModel> itemBinding=new OnItemBind<RemarkItemViewModel>() {
        @Override
        public void onItemBind(ItemBinding itemBinding, int position, RemarkItemViewModel item) {
            if(item.entity.getList().size()>2){
                itemBinding.set(BR.viewModel,R.layout.layout_remark_three_item);
            }else{
                itemBinding.set(BR.viewModel,R.layout.layout_remark_two_item);
            }
        }
    };


    private void getRemarkBySellerid(){
        Map<String,String> params=new HashMap<>();
        params.put("sellerid", SPUtils.getInstance("user_info").getString("sellerid"));
        params.put("orderid",orderid);
        RetrofitClient.getInstance().create(CartApiService.class)
                .getRemarkBySellerid(params)
                .compose(RxUtils.schedulersTransformer())
                .compose(RxUtils.exceptionTransformer())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {

                    }
                })
                .subscribe(new Consumer<BaseResponse<List<List<RemarkEntity>>>>() {
                    @Override
                    public void accept(BaseResponse<List<List<RemarkEntity>>> listBaseResponse) throws Exception {
                        if(listBaseResponse.getRet()==200){
                            observableList.clear();
                            for(RemarkEntity entity:listBaseResponse.getData().get(0)){
                                if(!TextUtils.isEmpty(remarkid)){
                                    String[] remarkids=remarkid.split(",");
                                    KLog.d("remarkids",remarkids);
                                    for(RemarkItemEntity itemEntity:entity.getList()){
                                        for(int i=0;i<remarkids.length;i++){
                                            if(remarkids[i].equals(itemEntity.getId())){
                                                itemEntity.setSelected(true);
                                            }
                                        }
                                    }
                                }
                                observableList.add(new RemarkItemViewModel(context,entity));
                            }
                        }else{
                            ToastUtils.showShort(listBaseResponse.getMsg());
                        }
                    }

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


    //保存备注
    public BindingCommand onRemarkSaveCommand=new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            StringBuilder builder=new StringBuilder();
            for(RemarkItemViewModel itemViewModel:observableList){
                for(RemarkItemEntity item:itemViewModel.entity.getList()){
                    if(item.isSelected()){
                        builder.append(item.getId()+",");
                    }
                }
            }
            String remrkid="";
            if(builder.length()>0){
                remrkid=builder.toString().substring(0,builder.length()-1);
            }
            KLog.d("remarkid",remrkid);
            setOrderById(remrkid);
        }
    });


    //修改订单人数备注
    private void setOrderById(String remarkid){
        Map<String,String> params=new HashMap<>();
        params.put("orderid",orderid);
        params.put("remark",TextUtils.isEmpty(remark.get())?"":remark.get());
        params.put("remarkid",remarkid);
        RetrofitClient.getInstance().create(CartApiService.class)
                .setOrderById(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<String>>>() {
                    @Override
                    public void accept(BaseResponse<List<String>> listBaseResponse) throws Exception {
                        dismissDialog();
                        if(listBaseResponse.getRet()==200){
                            final RightDialog dialog=new RightDialog();
                            Bundle bundle=new Bundle();
                            bundle.putString("msg","备注成功");
                            dialog.setArguments(bundle);
                            new Handler().postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    dialog.dismiss();
                                    ((RemarkActivity)context).finish();
                                }
                            }, 1000);
                            dialog.show(((AppCompatActivity)context).getSupportFragmentManager(),"rightDialog");
                        }else{
                            dismissDialog();
                            ToastUtils.showShort(listBaseResponse.getMsg());
                        }
                    }
                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable responseThrowable) throws Exception {
                        dismissDialog();
                        responseThrowable.printStackTrace();
                        ToastUtils.showShort(responseThrowable.msg);
                    }
                });
    }
}