TaskBarView.java 11.7 KB
package com.huaheng.mobilewms.view;

import android.content.Context;
import android.content.DialogInterface;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AlertDialog;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.huaheng.mobilewms.R;
import com.huaheng.mobilewms.activity.task.ShipTaskInfoActivity;
import com.huaheng.mobilewms.bean.TaskDetail;
import com.huaheng.mobilewms.https.HttpInterface;
import com.huaheng.mobilewms.https.Subscribers.ProgressSubscriber;
import com.huaheng.mobilewms.https.Subscribers.SubscriberOnNextListener;
import com.huaheng.mobilewms.util.WMSUtils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class TaskBarView extends ConstraintLayout {

    //备货入按钮
    @BindView((R.id.btBeihuo))
    Button bt_beihuo;
    //二次分拣按钮
    @BindView(R.id.btSecond)
    Button bt_second;

    @BindView(R.id.btSelectAll)
    Button bt_selectAll;

    List<TaskShipItemView> list;

    //记录用户输入的容器编号
    String containerCodeInput = "";

    public TaskBarView(Context context){
        super(context);
        LayoutInflater.from(context).inflate(R.layout.task_bar_view, this);

        ButterKnife.bind(this);
    }

    @OnClick(R.id.btSelectAll)
    public void selectAll(){

        boolean all = true;
        //all: 检查是否已经全选,已经完全的除外
        for(TaskShipItemView v : list){
            if(!v.isItemSelected() && !v.isDone()){
                all = false;
            }
        }

        //全选或全不选
        for(TaskShipItemView v : list){
            v.select(!all);
        }
    }

    /**从任务明细取主表taskid**/
    public String getTaskHeaderId(){
        if(list.size() == 0) {
            return "0";
        }else{
            return String.valueOf(list.get(0).getTaskDetal().getTaskId());
        }
    }

    /**处理完后刷新当前Activity数据**/
    public void refreshActivity(){
        ((ShipTaskInfoActivity)this.getContext()).findTask(getTaskHeaderId());
    }

    /**打开对话框**/
    public void openDialog(String title, DialogInterface.OnClickListener listener){
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setTitle(title);
        // 通过LayoutInflater来加载一个xml的布局文件作为一个View对象
        View view = LayoutInflater.from(getContext()).inflate(R.layout.task_ship_dialog, null);
        // 设置我们自己定义的布局文件作为弹出框的Content
        builder.setView(view);

        final EditText etContainerCode = (EditText)view.findViewById(R.id.containerCode);
        final EditText etQty = (EditText)view.findViewById(R.id.qty);
        final TextView lbQty = (TextView)view.findViewById(R.id.lbQty);

        etContainerCode.setText(containerCodeInput);
        if(isBatch()){
            etQty.setVisibility(View.GONE);
            lbQty.setVisibility(View.GONE);
        }else{
            String qty = WMSUtils.cleanFloatZero(getSelectTaskDetail().getFreeQty().toString());
            etQty.setText(qty);
        }

        builder.setPositiveButton("确定", listener);

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        builder.show();

        //响应回车事件
        etContainerCode.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                if (null != keyEvent && KeyEvent.KEYCODE_ENTER == keyEvent.getKeyCode()) {
                    switch (keyEvent.getAction()) {
                        case KeyEvent.ACTION_UP:
                            etQty.requestFocus();
                            containerCodeInput = textView.getText().toString();
                            return true;
                        default:
                            return true;
                    }
                }
                return false;
            }
        });
    }

    @OnClick(R.id.btBeihuo)
    public void onTransferClick(){
        if(selectNothing()){
            Toast.makeText(getContext(), "请先选择!", Toast.LENGTH_LONG).show();
            return;
        }
        openDialog("备货入", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                EditText qty = (EditText)((AlertDialog)dialog).findViewById(R.id.qty);
                EditText container = (EditText)((AlertDialog)dialog).findViewById(R.id.containerCode);
//                Toast.makeText(getContext(), qty.getText().toString() + "\n" + container.getText().toString(), Toast.LENGTH_SHORT).show();

                if(isBatch()){
                    //批量操作
                    transfers(getSelectTaskDetailIds(), container.getText().toString());
                }else {
                    //单个操作
                    BigDecimal srcQty = getSelectTaskDetail().getQty();
                    BigDecimal selectQty = null;
                    BigDecimal freeQty = getSelectTaskDetail().getFreeQty();

                    try{
                        selectQty = WMSUtils.newBigDecimal(qty.getText().toString());
                    }catch (Exception e){
                        Toast.makeText(getContext(), "数量错误:" + srcQty, Toast.LENGTH_SHORT).show();
                        onTransferClick();
                    }

                    if (freeQty.compareTo(selectQty) < 0) {
                        Toast.makeText(getContext(), "数量不能超过:" + srcQty, Toast.LENGTH_SHORT).show();
                        containerCodeInput = container.getText().toString();
                        //重新打开备货入对话框
                        onTransferClick();
                        return;
                    }
                    transfer(getSelectTaskDetail(), container.getText().toString(), qty.getText().toString());
                }
                containerCodeInput = "";
            }
        });
    }

    @OnClick(R.id.btSecond)
    public void onSecondSortingClick(){
        if(selectNothing()){
            Toast.makeText(getContext(), "请先选择!", Toast.LENGTH_LONG).show();
            return;
        }
        openDialog("二次分拣", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                EditText qty = (EditText)((AlertDialog)dialog).findViewById(R.id.qty);
                EditText container = (EditText)((AlertDialog)dialog).findViewById(R.id.containerCode);
//                Toast.makeText(getContext(), qty.getText().toString() + "\n" + container.getText().toString(), Toast.LENGTH_SHORT).show();

                if(isBatch()){
                    //批量操作
                    secondSortings(getSelectTaskDetailIds(), container.getText().toString());
                }else {
                    //单个操作
                    BigDecimal srcQty = getSelectTaskDetail().getQty();
                    BigDecimal selectQty = null;
                    BigDecimal freeQty = getSelectTaskDetail().getFreeQty();

                    try{
                        selectQty = WMSUtils.newBigDecimal(qty.getText().toString());
                    }catch (Exception e){
                        Toast.makeText(getContext(), "数量错误:" + srcQty, Toast.LENGTH_SHORT).show();
                        onSecondSortingClick();
                    }

                    if (freeQty.compareTo(selectQty) < 0) {
                        Toast.makeText(getContext(), "数量不能超过:" + srcQty, Toast.LENGTH_SHORT).show();
                        containerCodeInput = container.getText().toString();
                        //重新打二次分拣对话框
                        onSecondSortingClick();
                        return;
                    }
                    secondSorting(getSelectTaskDetail(), container.getText().toString(), qty.getText().toString());
                }
                containerCodeInput = "";
            }
        });
    }

    /**管理列表项的选择状态**/
    public void setList(List<TaskShipItemView> list){
        this.list = list;
    }

    /**
     * 获取被选中的任务明细列表
     * @return
     */
    public List<TaskDetail> getSelectTaskDetailList(){
        List list = new ArrayList();
        for(TaskShipItemView v : this.list){
            if(v.isItemSelected()){
                list.add(v.getTaskDetal());
            }
        }
        return list;
    }

    /**
     * 获取被选中的任务明细id 以逗号分隔
     * @return
     */
    public String getSelectTaskDetailIds(){
        String ids = "";
        for(TaskShipItemView v : this.list){
            if(v.isItemSelected()){
                ids = ids + "," + v.getTaskDetal().getId();
            }
        }
        return ids.substring(1);
    }

    /**取当前被选中的taskDetail**/
    public TaskDetail getSelectTaskDetail(){
        return getSelectTaskDetailList().get(0);
    }

    /**是不是批量**/
    public boolean isBatch(){
        return getSelectTaskDetailList().size() > 1;
    }

    /***检查是否还未选择**/
    public boolean selectNothing(){
        return getSelectTaskDetailList().size() == 0;
    }

    /**
    /**备货入**/
    private void transfer(TaskDetail detail, String containerCode, String qty) {
        HttpInterface.getInsstance().taskTtransfer(new ProgressSubscriber<String>(getContext(), transfersListener), detail.getId(), containerCode, qty);
    }

    /**批量备货入**/
    private void transfers(String ids, String containerCode) {
        HttpInterface.getInsstance().taskTtransfers(new ProgressSubscriber<String>(getContext(), transfersListener), ids, containerCode);
    }

    /**二次分拣**/
    private void secondSorting(TaskDetail detail, String containerCode, String qty) {
        HttpInterface.getInsstance().secondSorting(new ProgressSubscriber<String>(getContext(), secondSortingListener), detail.getId(), containerCode, qty);
    }

    /**批量二次分拣**/
    private void secondSortings(String ids, String containerCode) {
        HttpInterface.getInsstance().secondSortings(new ProgressSubscriber<String>(getContext(), secondSortingListener), ids, containerCode);
    }

    SubscriberOnNextListener secondSortingListener = new SubscriberOnNextListener<String>() {
        @Override
        public void onNext(String str) {
            Toast.makeText(getContext(), "二次分拣成功", Toast.LENGTH_SHORT);
            refreshActivity();
        }

        @Override
        public void onError(String str) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setTitle("二次分拣出错");
            builder.setMessage(str);
            builder.create().show();
        }
    };

    SubscriberOnNextListener transfersListener = new SubscriberOnNextListener<String>() {
        @Override
        public void onNext(String str) {
            Toast.makeText(getContext(), "备货入成功", Toast.LENGTH_SHORT);
            refreshActivity();
        }

        @Override
        public void onError(String str) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setTitle("备货入出错");
            builder.setMessage(str);
            builder.create().show();
        }
    };
}