소스 검색

工具功能

guilin 1 년 전
부모
커밋
b0f199cc6e

+ 6 - 0
app/src/main/AndroidManifest.xml

@@ -259,6 +259,12 @@
             android:screenOrientation="portrait"
             tools:ignore="DuplicateActivity,LockedOrientationActivity"/>
 
+        <activity
+            android:name=".tool.OrderToolMainActivity"
+            android:windowSoftInputMode="stateHidden|adjustPan"
+            android:screenOrientation="portrait"
+            tools:ignore="DuplicateActivity,LockedOrientationActivity"/>
+
         <activity
             android:name=".putOut.DeliveryGoodsMainActivity"
             android:windowSoftInputMode="stateHidden|adjustPan"

+ 5 - 1
app/src/main/java/com/fxy/main/fragment/HomePagerFragment.java

@@ -19,6 +19,7 @@ import com.elvishew.xlog.XLog;
 import com.fxy.putIn.TallyMainActivity;
 import com.fxy.putIn.TrayMainActivity;
 import com.fxy.putOut.DeliveryGoodsMainActivity;
+import com.fxy.tool.OrderToolMainActivity;
 import com.google.zxing.Result;
 import com.fxy.baselibrary.base.BaseFragment;
 import com.fxy.baselibrary.interfaces.OnRxScanerListener;
@@ -125,7 +126,7 @@ public class HomePagerFragment extends BaseFragment implements View.OnClickListe
      * 绑定事件
      * @param v
      */
-    @OnClick({R.id.search_view, R.id.ima_or_code,R.id.ivt_tally,R.id.ivt_cargo_storage,R.id.ivt_tray})
+    @OnClick({R.id.ivt_order_tool,R.id.search_view, R.id.ima_or_code,R.id.ivt_tally,R.id.ivt_cargo_storage,R.id.ivt_tray})
     public void onClick(View v) {
         Bundle bundle = new Bundle();
         switch (v.getId()) {
@@ -141,6 +142,9 @@ public class HomePagerFragment extends BaseFragment implements View.OnClickListe
                 bundle.putString("action","storage");
                 intent2Page(getActivity(), DeliveryGoodsMainActivity.class, false,bundle);;
                 break;
+            case R.id.ivt_order_tool:
+                intent2Page(getActivity(), OrderToolMainActivity.class, false,bundle);;
+                break;
 
             default:
                 showToast("还没有配置点击事件");

+ 2 - 1
app/src/main/java/com/fxy/main/fragment/MineFragment.java

@@ -210,7 +210,8 @@ public class MineFragment extends BaseFragment {
     }
 
     @OnClick({R.id.iv_avatar,R.id.rl_account_feedback,R.id.rl_blue_setting,R.id.rl_scan_setting,R.id.rl_account_wipeCache,
-            R.id.rl_account_versionUpdate,R.id.rl_language_change, R.id.tv_exit,R.id.rl_electronic_scale,R.id.rl_upload_files,R.id.rl_picture_selector})
+            R.id.rl_account_versionUpdate,R.id.rl_language_change, R.id.tv_exit,R.id.rl_electronic_scale,R.id.rl_upload_files,
+            R.id.rl_picture_selector})
     public void onViewClicked(View view) {
         switch (view.getId()) {
             case R.id.iv_avatar:

+ 8 - 0
app/src/main/java/com/fxy/net/Urls.java

@@ -97,6 +97,14 @@ public class Urls {
     public static final String FXY_FINISH_LOAD = "/pda/Outbound/finishLoad";
     //扫描跟踪单号
     public static final String FXY_SCAN_PALLET_TRACKING = "/pda/inbound/scanPalletTracking";
+
+    //获取批次列表
+    public static final String FXY_GET_BATCH_LIST = "/pda/tool/getBatchData";
+    //获取批次详情
+    public static final String FXY_GET_BATCH_DETAILS = "/pda/tool/getBatchDataDetail";
+    //添加扫码结果
+    public static final String FXY_ADD_SCAN_RESULT = "/pda/tool/scanLog";
+
     /*返修易 -- end*/
 
 

+ 5 - 3
app/src/main/java/com/fxy/putIn/TallyMainActivity.java

@@ -349,8 +349,7 @@ public class TallyMainActivity extends  BaseActivity implements StoJNI.ScanCallB
             }
             return true;
         }
-        return true;
-        //return super.dispatchKeyEvent(event);
+        return super.dispatchKeyEvent(event);
     }
 
     //监听按键
@@ -1088,7 +1087,10 @@ public class TallyMainActivity extends  BaseActivity implements StoJNI.ScanCallB
     @Override
     protected void onDestroy() {
         unbinder.unbind();
-        pictureSelectorUpload.removeHandler();
+        if (pictureSelectorUpload!=null){
+            pictureSelectorUpload.removeHandler();
+        }
+
 
         super.onDestroy();
     }

+ 981 - 0
app/src/main/java/com/fxy/tool/OrderToolMainActivity.java

@@ -0,0 +1,981 @@
+package com.fxy.tool;
+
+import android.annotation.SuppressLint;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.text.InputType;
+import android.text.TextWatcher;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.RequiresApi;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.elvishew.xlog.XLog;
+import com.fxy.R;
+import com.fxy.baselibrary.base.BaseActivity;
+import com.fxy.baselibrary.bean.BaseEventBusBean;
+import com.fxy.baselibrary.interfaces.OnRxScanerListener;
+import com.fxy.baselibrary.qrcode.ActivityScanerCode;
+import com.fxy.baselibrary.util.DateUtil;
+import com.fxy.baselibrary.util.HideUtil;
+import com.fxy.baselibrary.util.JsonUtil;
+import com.fxy.baselibrary.util.StringUtils;
+import com.fxy.baselibrary.views.MarqueeTextView;
+import com.fxy.bean.ActionBean;
+import com.fxy.bean.ScanBean;
+import com.fxy.common.CommonDialog;
+import com.fxy.constant.BaseConfig;
+import com.fxy.constant.EventCode;
+import com.fxy.constant.SPCache;
+import com.fxy.net.MyDialogCallback;
+import com.fxy.net.Urls;
+import com.fxy.tool.bean.ToolBean;
+import com.fxy.tool.bean.ToolDetailBean;
+import com.fxy.view.FloatingImageView;
+import com.google.zxing.Result;
+import com.jaredrummler.materialspinner.MaterialSpinner;
+import com.lzy.okgo.OkGo;
+import com.lzy.okgo.model.Response;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import butterknife.Unbinder;
+import sto.android.app.StoJNI;
+import sto.android.app.StoPdaKeyEvent;
+import sto.android.app.StoTongJNI;
+
+public class OrderToolMainActivity extends  BaseActivity implements StoJNI.ScanCallBack {
+    /**
+     * 列表适配器
+     */
+    Context mContext = this;
+
+    //单号清除
+    @BindView(R.id.ib_order_no_clear)
+    ImageButton ibOrderNoClear;
+
+    //单号
+    @BindView(R.id.et_order_no)
+    EditText etOrderNo;
+
+
+
+
+    @BindView(R.id.recyclerview)
+    RecyclerView recyclerView;
+
+    //浮动按钮
+    @BindView(R.id.iv_drag)
+    FloatingImageView iv_drag;
+
+
+
+
+    private View notDataView;   //没有数据显示页
+    private View errorView;     //错误显示页
+    private View emptyView;     //空显示页
+    /**
+     * 列表适配器
+     */
+    private FinishWorkAdapter mAdapter;
+
+    //扫码扫码动作
+    private ScanBean scanBean;
+
+
+
+    private List<ToolBean> batchList = new ArrayList<>()   ;
+    private JSONObject batchDetails ;
+    //扫描数据
+    private List<ToolDetailBean> scanDataList = new ArrayList<>()   ;
+
+    //扫描记录
+    //private JSONObject scanOrderList = new JSONObject()  ; citys = new String[jsonArray.length()][];
+
+    //private List<ToolDetailBean>[] cacheList = [0][1];
+   // private List<map<ToolDetailBean>  cacheList55 = new ArrayList<>();
+
+//    private List<ToolDetailBean>[] cacheList ;
+
+    private Map<String,List<ToolDetailBean>> cacheList = new HashMap<String,List<ToolDetailBean>>();
+    private Unbinder unbinder;
+
+
+
+    @BindView(R.id.ms_batch)
+    MaterialSpinner batchSpinner;
+    //默认是
+    private Integer batchIdx=0;
+
+    // 默认校验
+    private boolean isVerify = true;
+
+    //是否开启声音
+    private boolean isSound = true;
+
+
+    @Override
+    public int getContentViewResId() {
+        return R.layout.activity_fxy_order_tool;
+    }
+
+    @Override
+    public boolean showToolBar() {
+        return true;
+    }
+
+    @Override
+    public boolean openEventBus() {
+        return true;
+    }
+
+    @Override
+    protected void getBundleExtras(Bundle bundle) {
+
+    }
+    //finish的返回监听
+    //这里的requestCode参数,就是上面设置的 1 ,当跳转的页面返回的时候,通过这个加以判断
+    //resultCode ,这个参数是在跳转的页面里面规定的,它也是一个int类型的标志
+    //第三个参数包含了返回的值
+    //如果不需要所跳转的页面返回值,也就不需要这个方法了
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+//        XLog.e("requestCode:"+requestCode);
+//        XLog.e("resultCode:"+resultCode);
+        if (requestCode == 200 && resultCode == 200)//之前提到的两个标志,在这里显示出了作用
+        {
+        }else if (resultCode==0){
+        }
+    }
+
+
+    /**
+     * EventBus接收信息的方法,开启后才会调用(非粘性事件)
+     *
+     * @param event
+     */
+    @Override
+    protected void EventBean(BaseEventBusBean event) {
+//        XLog.e("----------接收返回--------------");
+//        XLog.e("接收返回:"+event.getEventCode());
+        if (event != null && event.getEventCode() == EventCode.displacement_refresh){
+
+        }
+    }
+
+    @Override
+    public boolean isPlayMusic() {
+        return true;
+    }
+
+    @Override
+    protected void initView() {
+        unbinder = ButterKnife.bind(this);
+        setTitleName("小工具");
+
+
+        initAdapter();
+        initData();
+        initEdit();
+        //监听浮动按钮
+        iv_drag.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if(!iv_drag.isDrag()){
+                    ActivityScanerCode.setScanerListener(mScanerListener);
+                    ActivityScanerCode.intent2Activity(mContext, BaseConfig.COMMON_SCANNER_ONLY);
+                }
+            }
+        });
+
+
+
+
+    }
+
+    protected void showBack() {
+        super.showBack();
+        tb_iv_left.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                int num = cheatPush();
+                if (num>0){
+                    showErrorToast("还有"+num+"条数据未上传成功");
+
+                }else{
+                    HideUtil.hideSoftKeyboard(OrderToolMainActivity.this);
+                    if (isShowBackDialog) {
+                        onBackPressedSupport();
+                    } else {
+                        finish();
+                    }
+                }
+
+            }
+        });
+    }
+
+
+    protected void intSpinner(){
+        List<String> spinnerList = new ArrayList<String>();
+        for (int i = 0;i < batchList.size(); i++){
+            spinnerList.add(batchList.get(i).getBatchName());
+        }
+        batchSpinner.setItems(spinnerList);
+        batchSpinner.setSelectedIndex(batchIdx);
+        batchSpinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {
+            @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
+                try {
+
+                    batchIdx = position;
+                    isVerify = batchList.get(position).getRules() == 1;
+
+
+                    List<ToolDetailBean> tmpList = new ArrayList<>();
+
+                    if (cacheList.get(String.valueOf(position))!=null){
+                        tmpList = cacheList.get(String.valueOf(position));
+                    }else{
+                        tmpList.clear();
+                    }
+
+                    mAdapter.setNewData(tmpList);
+                    mAdapter.notifyDataSetChanged();
+
+
+                }catch (Exception e){
+                    XLog.e("切换包错误",e.getMessage());
+                }
+
+                getDetails();
+
+
+            }
+        });
+    }
+
+
+
+    private void initData(){
+        try {
+            final JSONObject jsonObject = new JSONObject();
+            OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_GET_BATCH_LIST).upJson(jsonObject)
+                    .execute(new MyDialogCallback(this, true, true) {
+                        @Override
+                        public void onSuccess(Response<String> response) {
+                            super.onSuccess(response);
+                            try {
+                                ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
+                                if(bean.code == 1){
+                                    batchList = JsonUtil.jsonString2Beans(bean.data, ToolBean.class);
+
+
+
+                                    intSpinner();
+                                    getDetails();
+                                    isVerify = batchList.get(0).getRules() == 1;
+                                    etOrderNo.setEnabled(true);
+                                    etOrderNo.requestFocus();
+                                }else{
+                                    showWarningToast(bean.msg);
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                                showEmptyView("批次信息解析错误:"+e.getMessage());
+                                XLog.e("获取批次信息解析错误",e.getMessage());
+                            }
+                        }
+                    });
+        }catch (Exception e){
+            batchList.size();
+            XLog.e("请求批次信息错误:"+e.getMessage(),e);
+        }
+    }
+
+    /**
+     * 获取批次详情
+     */
+    private void getDetails(){
+        try {
+            final JSONObject jsonObject = new JSONObject();
+            jsonObject.put("id",batchList.get(batchIdx).getId());
+            OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_GET_BATCH_DETAILS).upJson(jsonObject)
+                    .execute(new MyDialogCallback(this, true, true) {
+                        @Override
+                        public void onSuccess(Response<String> response) {
+                            super.onSuccess(response);
+                            try {
+                                ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
+
+                                if (StringUtils.isNotEmpty(bean.data)) {
+                                    batchDetails = new JSONObject(bean.data);
+                                }
+                                if(bean.code == 1){
+
+                                }else{
+                                    showWarningToast(bean.msg);
+                                }
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                                showEmptyView("批次详情解析错误:"+e.getMessage());
+                                XLog.e("获取批次详情解析错误",e.getMessage());
+                            }
+                        }
+                    });
+        }catch (Exception e){
+            batchList.size();
+            XLog.e("请求批次详情错误:"+e.getMessage(),e);
+        }
+    }
+    public void onRadioButtonClicked(View view) {
+        RadioButton button = (RadioButton) view;
+        boolean isChecked = button.isChecked();
+
+        switch (view.getId()) {
+            case R.id.rb_open_sound:
+                isSound = true;
+                break;
+            case R.id.rb_turn_off_sound:
+                isSound = false;
+                break;
+            default:
+                break;
+        }
+
+
+    }
+
+    protected void pushData(final int batch_inx,final int inx) {
+
+        // 启动一个线程来做一些我们不应该在UI线程中直接做的工作
+        Thread t = new Thread() {
+            public void run() {
+                try {
+
+                    ToolDetailBean toolDetailBean = cacheList.get(String.valueOf(batch_inx)).get(inx);
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("batch_inx",batch_inx);
+                    jsonObject.put("inx",inx);
+                    jsonObject.put("id",toolDetailBean.getId());
+                    jsonObject.put("rules",toolDetailBean.getRules());
+                    jsonObject.put("tool_data_id",toolDetailBean.getToolDataId());
+                    jsonObject.put("number",toolDetailBean.getNumber());
+                    jsonObject.put("scan_date",toolDetailBean.getScanDate());
+
+
+                    OkGo.<String>post(Urls.getServiceAddress(getApplicationContext()) + Urls.FXY_ADD_SCAN_RESULT).upJson(jsonObject)
+                            .execute(new MyDialogCallback(getApplicationContext(), true, false) {
+                                @Override
+                                public void onSuccess(Response<String> response) {
+                                    super.onSuccess(response);
+                                    try {
+                                        ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
+                                        JSONObject data = new JSONObject(bean.data);
+                                        int position = data.getInt("inx");
+                                        int batch_inx = data.getInt("batch_inx");
+
+                                        int push_status = bean.code == 1 ? 1 : 2;
+
+
+                                        List<ToolDetailBean> list = cacheList.get(String.valueOf(batch_inx));
+                                        ToolDetailBean tmpBean = list.get(position);;
+                                        tmpBean.setPushStatus(push_status);
+
+                                        cacheList.put(String.valueOf(batch_inx),list);
+                                        updateResult(position);
+
+
+                                    } catch (Exception e) {
+                                        e.printStackTrace();
+                                        showEmptyView("上传失败:"+e.getMessage());
+                                        XLog.e("获取批次详情解析错误",e.getMessage());
+                                    }
+                                }
+                            });
+                }catch (Exception e){
+
+                    XLog.e("请求上传错误:"+e.getMessage(),e);
+                }
+            }
+        };
+        t.start();
+    }
+
+
+    @SuppressLint("HandlerLeak")
+    Handler resultHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            ToolDetailBean tmpBean ;
+            List<ToolDetailBean> list = cacheList.get(String.valueOf(batchIdx));
+            if (list==null){
+                list = new ArrayList<>();
+            }
+            switch (msg.what){
+                //添加日志
+                case 1:
+
+
+                    int inx = list.size();
+
+
+                    tmpBean = JsonUtil.getObject(msg.obj.toString(), ToolDetailBean.class); ;
+                    list.add(tmpBean);
+                    mAdapter.addData(inx,tmpBean);
+                    mAdapter.notifyDataSetChanged();
+
+                    cacheList.put(String.valueOf(batchIdx),list);
+                    pushData(batchIdx,inx);
+
+                    System.out.println("总条数:"+inx);
+                    break;
+                // 修改日志
+                case 2:
+
+                    int position = msg.arg1;
+                    tmpBean = list.get(position);
+                    mAdapter.setData(position,tmpBean);
+                    mAdapter.notifyItemChanged(position);
+                    System.out.println("当前:"+position);
+                    break;
+            }
+
+        }
+    };
+
+    private void addResult(String str){
+        Message msg = new Message();
+        msg.what = 1;
+        msg.obj = str;
+        resultHandler.sendMessage(msg);
+    }
+
+    private void updateResult(int inx){
+        Message msg = new Message();
+        msg.what = 2;
+        msg.arg1 = inx;
+        msg.obj = "";
+        resultHandler.sendMessage(msg);
+    }
+
+
+    @Override
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        //XLog.e("Action:"+event.getAction()+"---event:"+event.getKeyCode());
+        if ((event.getKeyCode()==KeyEvent.KEYCODE_DPAD_CENTER )  && event.getAction() == KeyEvent.ACTION_DOWN){
+            if(validate()){
+                doVerify();
+            }
+            return true;
+        }
+        return super.dispatchKeyEvent(event);
+    }
+
+    //监听按键
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        //XLog.e("监听按键:"+keyCode);XLog.e(event);
+        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
+            int num = cheatPush();
+            if (num>0){
+                showErrorToast("还有"+num+"条数据未上传成功");
+                return false;
+            }
+        }
+        if (scanBean.getIsBroadcast()==0 && StoTongJNI.getIns(mContext).getEventFuction(keyCode)  == StoPdaKeyEvent.KEYCODE_SCAN
+                && event.getRepeatCount() == 0) {
+
+            if (StoTongJNI.getIns(mContext).GetScannerIsScanning()) {
+//
+            } else {
+                StoTongJNI.getIns(mContext).SetScannerStart();
+            }
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+
+    @SuppressLint("HandlerLeak")
+    Handler scanHandler = new Handler() {
+
+        @Override
+        public void handleMessage(Message msg) {
+            // TODO Auto-generated method stub
+            if (msg.obj != null) {
+
+                String scanResult = msg.obj.toString().trim();
+                if (!scanResult.isEmpty()){
+                    setScanResult(scanResult);
+                }
+            }
+
+        }
+
+    };
+    @Override
+    public void onScanResults(String str) {
+        Message msg = new Message();
+        msg.obj = str;
+        scanHandler.sendMessage(msg);
+
+
+    }
+
+
+    @Override
+    public void onScanResults(String str, int type) {
+
+    }
+    /**
+     * 定义广播接受
+     */
+    BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String scanResult = intent.getStringExtra(scanBean.getDataName());
+            if (scanResult==null){return; }
+            String scanStatus = "";
+            if (!scanBean.getStatusName().isEmpty()){
+                scanStatus = intent.getStringExtra(scanBean.getStatusName());
+            }else{
+                scanStatus = scanResult.isEmpty()? "" : "ok"; //有值 默认是扫码成功;
+            }
+
+            //新大陆(MT65,MT90) 需要手动关闭
+            if (!scanBean.getActionStop().isEmpty()){
+                Intent stopIntent = new Intent(scanBean.getActionStop());
+                mContext.sendBroadcast(stopIntent);
+            }
+
+            if ("ok".equals(scanStatus)){
+                setScanResult(scanResult);
+            }else{
+                showErrorToast(getString(R.string.scan_failed));
+            }
+        }
+    };
+
+    /**
+     * 注册广播
+     */
+    private void initReceiver(){
+
+        try {
+
+            String scanStr = getScanSetting();
+            scanBean = JsonUtil.getObject(scanStr, ScanBean.class);
+            Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
+
+            if (is_broadcast ==1){
+                IntentFilter mFilter = new IntentFilter(scanBean.getAction());
+                this.registerReceiver(mReceiver, mFilter);
+            }else{
+                //不广播进行处理 jni模式
+                String pdaBrand = StoTongJNI.getmPdaBrand();
+                if (!pdaBrand.isEmpty()){
+                    StoTongJNI.getIns(this).setmScanCB(this);
+                    StoTongJNI.getIns(this).SetScannerOn();
+                }
+            }
+
+
+        }catch (Exception e) {
+            showErrorToast("获取扫码配置失败"+e.getMessage());
+            XLog.e("获取扫码配置失败:" + e.getMessage());
+        }
+    }
+
+
+    //统一按钮回调
+    public void callbackEditor(View v){
+        switch (v.getId()) {
+            case R.id.et_order_no:
+                doVerify();
+                break;
+            default:
+        }
+    }
+
+
+
+
+
+    private void initEdit() {
+        List<EditText> list = new ArrayList<>();
+        list.add(etOrderNo);
+        unifyEdit(list);
+    }
+    private OnRxScanerListener mScanerListener = new OnRxScanerListener() {
+        @Override
+        public void onSuccess(String type, Result result) {
+            String scanResult = result.getText();
+            switch (type){
+                case BaseConfig.COMMON_SCANNER_ONLY:
+                    setScanResult(scanResult);
+
+                    break;
+            }
+        }
+        @Override
+        public void onFail(String type, String message) {
+
+        }
+    };
+
+    //把扫描结果赋值
+    private void setScanResult(String scanResult){
+
+        //获取焦点的view对象
+        View view=getWindow().getDecorView().findFocus();
+        //如果是EditText
+        if(view instanceof EditText)
+        {
+            ((EditText) view).setText(scanResult);
+            //执行回调
+            callbackEditor(view);
+        }
+    }
+
+
+
+    public void doVerify() {
+        //校验数据
+        if (!validate()){
+            return;
+        }
+
+        try {
+            String number = etOrderNo.getText().toString().trim();
+            JSONObject param = new JSONObject();
+            param.put("number",number);
+            param.put("is_verify",isVerify);
+
+
+            int tool_data_id = 0;
+            int id = 0;
+            int rules = batchList.get(batchIdx).getRules();//默认不校验
+            String scan_date = DateUtil.getCurDateStr(DateUtil.FORMAT_YMDHMS);
+            if (batchDetails.has(number)){
+
+                JSONObject tmpObject = batchDetails.getJSONObject(number.toUpperCase());
+                if (tmpObject.has("scan_date") && !tmpObject.getString("scan_date").equals("")){
+                    showWarningToast("订单已扫描");
+                    return ;
+                };
+                id = tmpObject.getInt("id");
+            }
+
+            tool_data_id = batchList.get(batchIdx).getId();
+            param.put("tool_data_id",tool_data_id);
+            param.put("id",id);
+            param.put("rules",rules);
+            param.put("scan_date",scan_date);
+
+
+
+            addResult(param.toString());
+
+
+
+            if (!isVerify){
+                showSuccessToast("扫描成功");
+                clearData();
+            }else{
+                if (id>0){
+                    showSuccessToast("订单匹配成功");
+                    clearData();
+                }else{
+                    showErrorToast("订单不存在");
+                    clearData();
+                }
+            }
+
+        } catch (JSONException e) {
+            showEmptyView("请求入库失败:"+e.getMessage());
+            e.printStackTrace();
+        }
+    }
+
+    /*
+     * 校验必录
+     */
+    private boolean validate(){
+        if (batchDetails==null){
+            showWarningToast("该批次无数据");
+            return false;
+        }
+
+        if(!checkNull(etOrderNo)){
+            setEditTextFocused(etOrderNo,true);
+            showWarningToast(etOrderNo.getHint().toString());
+            return false;
+        }
+        ToolBean toolBean = batchList.get(batchIdx);
+        if (toolBean.getRules()==1 && cacheList.get(String.valueOf(batchIdx)) != null){
+            String number = etOrderNo.getText().toString().trim();
+            for (int i = 0; i <cacheList.get(String.valueOf(batchIdx)).size(); i++){
+                if (cacheList.get(String.valueOf(batchIdx)).get(i).getNumber().toUpperCase().equals(number)){
+                    showWarningToast("订单已扫描");
+                    return false;
+                }
+            }
+        }
+
+
+
+        return true;
+    }
+
+    private class FinishWorkAdapter extends BaseQuickAdapter<ToolDetailBean, BaseViewHolder>{
+        public FinishWorkAdapter(List<ToolDetailBean> data){
+            super(R.layout.item_card_intercept, data);
+        }
+
+
+        public void setNewData(List<ToolDetailBean> tmpList) {
+        }
+
+        @Override
+        protected void convert(BaseViewHolder helper, ToolDetailBean item) {
+            helper.addOnClickListener(R.id.ib_clear);//定义setOnItemChildClickListener 事件点击
+            String status_str = "";
+            switch (item.getPushStatus()){
+                case 1:
+                    status_str = "已上传";
+                    break;
+                case 2:
+                    status_str = "上传失败";
+                    break;
+                default:
+                    status_str = "未上传";
+                    break;
+            }
+            helper.setText(R.id.tv_order_no,item.getNumber());
+            helper.setText(R.id.tv_location,item.getScanDate());
+            helper.setText(R.id.tv_status,status_str);
+        }
+    }
+    private void initAdapter(){
+        emptyView = this.getLayoutInflater().inflate(R.layout.pager_empty, (ViewGroup) recyclerView.getParent(), false);
+        errorView = this.getLayoutInflater().inflate(R.layout.pager_error, (ViewGroup) recyclerView.getParent(), false);
+        notDataView = emptyView;
+
+        mAdapter  = new FinishWorkAdapter(new ArrayList<ToolDetailBean>());
+        mAdapter.setEmptyView(emptyView);
+        mAdapter.openLoadAnimation(BaseQuickAdapter.SCALEIN);
+        recyclerView.setLayoutManager(new LinearLayoutManager(this));
+        recyclerView.setAdapter(mAdapter);
+
+    }
+
+    //清除订单信息
+    private void clearData() {
+        etOrderNo.setText("");
+        etOrderNo.requestFocus();
+        setEditTextNormal(etOrderNo,true);
+    }
+
+    @OnClick({R.id.btn_batch_upload})
+    public void onViewClicked(View view) {
+        Bundle bundle = new Bundle();
+        switch (view.getId()) {
+            //批量上传
+            case R.id.btn_batch_upload:
+
+                int num = cheatPush();
+                if (num>0){
+                    showSuccessToast("已上传"+num+"条数据");
+                }else{
+                    showSuccessToast("数据已全部上传");
+                }
+
+                break;
+            default:
+                break;
+        }
+    }
+
+    private int cheatPush(){
+
+        int num = 0;
+
+        for (String key : cacheList.keySet()) {
+
+            if (cacheList.get(key)!=null){
+                for (int j=0;j<cacheList.get(key).size();j++){
+                    for (int i=0;i<cacheList.get(key).size();i++){
+                        int push_status = cacheList.get(key).get(i).getPushStatus();
+                        if (push_status!=1){
+                            pushData(j,i);
+                            num++;
+                        }
+                    }
+                }
+            }
+
+        }
+
+
+
+        return  num;
+    }
+    /**
+     * 统一设置Edit监听
+     * @param  list
+     */
+    public void unifyEdit(List<EditText> list){
+        for (int i=0;i<list.size();i++){
+            EditText editText = list.get(i);
+
+            LinearLayout linearLayout = (LinearLayout)editText.getParent();
+            ImageButton imageButton = getChildImageButton(linearLayout);
+
+            //监听扫描
+            ImageView imageView = linearLayout.findViewById(R.id.ima_or_code);
+            imageView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    LinearLayout linearLayout = (LinearLayout)v.getParent();
+                    for( int i = 0; i < linearLayout.getChildCount(); i++ ){
+                        if( linearLayout.getChildAt(i) instanceof EditText ){
+                            ((EditText)linearLayout.getChildAt(i)).requestFocus();
+                            break;
+                        }
+                    }
+                    ActivityScanerCode.setScanerListener(mScanerListener);
+                    ActivityScanerCode.intent2Activity(mContext, BaseConfig.COMMON_SCANNER_ONLY);
+                }
+            });
+
+
+            //监听按确定
+            editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+                @Override
+                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+                    //XLog.e("actionId:"+actionId);
+                    if (actionId == EditorInfo.IME_ACTION_SEND || actionId == EditorInfo.IME_ACTION_DONE   ) {
+                        if (v.getText().toString().trim().isEmpty()) {
+                            setEditTextFocused(v,true);
+                            showWarningToast(v.getHint().toString());
+                            return false;
+                        }else{
+                            setEditTextNormal(v,true);
+                        }
+
+                        callbackEditor(v);
+
+                        return false;
+                    }
+                    return false;
+                }
+            });
+            editText.addTextChangedListener(new TextWatcher() {
+                public void onTextChanged(CharSequence s, int start, int before, int count) {
+                    EditText currentEditText = null;
+                    ImageButton currentImage = null;
+                    //获取焦点的view对象
+                    View view=getWindow().getDecorView().findFocus();
+                    //如果是EditText
+                    if(view instanceof EditText){
+                        currentEditText = (EditText) view;
+                        currentImage = getChildImageButton((LinearLayout)currentEditText.getParent());
+                    }
+
+                    if (s.length() > 0  ) {
+
+                        if (currentImage !=null ){
+                            currentImage.setVisibility(View.VISIBLE);
+                        }
+                        if (currentEditText!=null){
+                            setEditTextNormal(currentEditText,true);
+                        }
+
+                    } else {
+                        if (currentImage !=null ){
+                            currentImage.setVisibility(View.INVISIBLE);
+                        }
+                        if (currentEditText!=null){
+                            setEditTextFocused(currentEditText,true);
+                        }
+                    }
+                }
+
+                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+                }
+
+                public void afterTextChanged(Editable s) {
+
+                }
+            });
+
+            if (imageButton !=null ){
+                unifyClearEdit(imageButton);
+            }
+        }
+    }
+
+
+    @Override
+    protected void onDestroy() {
+        unbinder.unbind();
+        super.onDestroy();
+    }
+    @Override
+    protected void onResume() {
+        super.onResume();
+        initReceiver();
+    }
+    @Override
+    protected void onPause() {
+        super.onPause();
+        //销毁在onResume()方法中的广播
+        try {
+            //停止扫描
+            Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
+            if (is_broadcast==0){
+                StoTongJNI.getIns(mContext).SetScannerStop();
+                StoTongJNI.getIns(mContext).SetScannerOff();
+            }else{
+                unregisterReceiver(mReceiver);
+            }
+        }catch (Exception e){
+            XLog.e("销毁广播失败:",e.getMessage());
+        }
+    }
+
+
+}

+ 59 - 0
app/src/main/java/com/fxy/tool/bean/ToolBean.java

@@ -0,0 +1,59 @@
+package com.fxy.tool.bean;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Created by HuangYH on 2015/9/29.
+ */
+public class ToolBean implements Parcelable {
+
+    public int id = 0;
+    public int rules = 0;
+    public String batch_name = "";
+
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(this.id);
+        dest.writeInt(this.rules);
+        dest.writeString(this.batch_name);
+    }
+
+    public ToolBean() {
+    }
+
+    protected ToolBean(Parcel in) {
+        this.id = in.readInt();
+        this.rules = in.readInt();
+        this.batch_name = in.readString();
+    }
+
+    public static final Parcelable.Creator<ToolBean> CREATOR = new Parcelable.Creator<ToolBean>() {
+        @Override
+        public ToolBean createFromParcel(Parcel source) {
+            return new ToolBean(source);
+        }
+
+        @Override
+        public ToolBean[] newArray(int size) {
+            return new ToolBean[size];
+        }
+    };
+
+    public int getId(){
+        return this.id;
+    }
+    public int getRules(){
+        return this.rules;
+    }
+
+    public String getBatchName(){
+        return this.batch_name;
+    }
+}

+ 70 - 0
app/src/main/java/com/fxy/tool/bean/ToolDetailBean.java

@@ -0,0 +1,70 @@
+package com.fxy.tool.bean;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class ToolDetailBean implements Parcelable {
+
+    public String number = ""; //基数
+    public String scan_date = ""; //基数扫描时间
+    public int id = 0; //数据ID
+    public int tool_data_id = 0; //所属批次id
+    public int scan_result  = -1; //基数扫描结果
+    public int rules  = 0; //业务类型, 1 - 查找;  2 - 核对;3 - 扫描
+    public int push_status = 0; //状态 1 - 启用;  -1 - 禁用
+
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(this.id);
+        dest.writeInt(this.rules);
+        dest.writeString(this.number);
+        dest.writeString(this.scan_date);
+        dest.writeInt(this.tool_data_id);
+        dest.writeInt(this.scan_result);
+        dest.writeInt(this.push_status);
+
+
+    }
+
+    public ToolDetailBean() {
+
+    }
+    protected ToolDetailBean(Parcel in) {
+        this.id = in.readInt();
+        this.rules = in.readInt();
+        this.number = in.readString();
+        this.scan_date = in.readString();
+        this.tool_data_id = in.readInt();
+        this.scan_result = in.readInt();
+        this.push_status = in.readInt();
+
+    }
+
+    public static final Parcelable.Creator<ToolDetailBean> CREATOR = new Parcelable.Creator<ToolDetailBean>() {
+        @Override
+        public ToolDetailBean createFromParcel(Parcel in) {
+            return new ToolDetailBean(in);
+        }
+
+        @Override
+        public ToolDetailBean[] newArray(int size) {
+            return new ToolDetailBean[size];
+        }
+    };
+    public int getId() {return this.id; }
+    public int getRules() {return this.rules; }
+    public String getNumber() {return this.number; }
+    public String getScanDate() {return this.scan_date; }
+    public int getToolDataId() {return this.tool_data_id; }
+    public int getIsPdaData() {return this.scan_result; }
+    public int getPushStatus() {return this.push_status; }
+
+    public void setPushStatus(int push_status) {
+        this.push_status = push_status;
+    }
+}

+ 206 - 0
app/src/main/res/layout/activity_fxy_order_tool.xml

@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:background="@color/md_grey_100"
+    android:orientation="vertical">
+
+    <ScrollView
+        android:id="@+id/ll_scroll_view"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:scrollbars="none">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="4dp"
+                android:background="@color/md_grey_100" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/dp_10"
+                android:layout_marginRight="@dimen/dp_10"
+                android:background="@null"
+                android:gravity="center_vertical"
+                android:visibility="gone"
+                android:orientation="vertical">
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:background="@null"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal"
+                    android:padding="5dp">
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        style="@style/tvLeftStyle"
+                        android:text="错误声音:"/>
+                    <RadioGroup
+                        android:id="@+id/radioGroup2"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+
+                        android:orientation="horizontal" >
+                        <RadioButton
+                            android:id="@+id/rb_open_sound"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:checked="true"
+                            android:textSize="@dimen/t24"
+                            android:onClick="onRadioButtonClicked"
+                            android:text="开启" />
+
+                        <RadioButton
+                            android:id="@+id/rb_turn_off_sound"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:onClick="onRadioButtonClicked"
+                            android:layout_marginStart="@dimen/dp_10"
+                            android:textSize="@dimen/t24"
+                            android:text="关闭" />
+
+                    </RadioGroup>
+                </LinearLayout>
+
+            </LinearLayout>
+
+
+            <LinearLayout
+                android:id="@+id/ll_batch_box"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/dp_10"
+                android:layout_marginTop="@dimen/dp_10"
+                android:layout_marginRight="@dimen/dp_10"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:padding="5dp"
+                android:background="@drawable/bg_white_et"
+                tools:ignore="RtlSymmetry">
+
+                <com.jaredrummler.materialspinner.MaterialSpinner
+                    android:id="@+id/ms_batch"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:ellipsize="marquee"
+                    android:focusable="true"
+                    app:ms_padding_top="5dp"
+                    app:ms_padding_bottom="5dp"
+                    app:ms_padding_left="10dp"
+                    app:ms_popup_padding_left="10dp"
+                    android:gravity="center"
+                    android:hint="请提示操作批次"
+                    android:textSize="@dimen/t24"/>
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/md_grey_100" />
+
+            <LinearLayout
+                style="@style/FromLinearLayoutItem"
+                android:orientation="horizontal">
+                <EditText
+                    style="@style/EditTextStyle"
+                    android:id="@+id/et_order_no"
+                    android:hint="@string/hint_please_scan_no"
+                    android:enabled="true"
+                    android:text=""/>
+                <ImageButton
+                    style="@style/ClearImg"
+                    android:id="@+id/ib_order_no_clear"
+                    />
+
+                <include   layout="@layout/item_image_code" />
+            </LinearLayout>
+
+
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/md_grey_100" />
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/md_grey_100" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/dp_10"
+                android:layout_marginRight="@dimen/dp_10"
+                android:paddingBottom="5dp"
+                android:paddingTop="5dp"
+                android:orientation="horizontal">
+                <TextView
+                    android:layout_marginLeft="@dimen/dp_10"
+                    style="@style/tvLeftStyle"
+                    android:text="最近扫描:" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/bg_white_et"
+                android:layout_marginLeft="@dimen/dp_10"
+                android:layout_marginRight="@dimen/dp_10"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:scrollbars="vertical"
+                android:paddingTop="@dimen/dp_10"
+                android:paddingBottom="@dimen/dp_10"
+                >
+                <android.support.v7.widget.RecyclerView
+                    android:id="@+id/recyclerview"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:background="#fff"
+                    android:overScrollMode="never"/>
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/dp_10"
+                android:layout_marginTop="@dimen/dp_10"
+                android:layout_marginRight="@dimen/dp_10"
+                android:layout_marginBottom="@dimen/dp_4"
+                android:background="@drawable/bg_white_et"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:padding="10dp">
+                <TextView
+                    style="@style/fontSize"
+                    android:id="@+id/btn_batch_upload"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/dp_10"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:background="@drawable/bg_orange_item"
+                    android:gravity="center"
+                    android:text="批量上传数据"
+                    android:padding="10dp"
+                    android:textColor="@color/white"
+                    android:visibility="visible" />
+            </LinearLayout>
+        </LinearLayout>
+    </ScrollView>
+
+
+    <include layout="@layout/item_float_image" />
+</LinearLayout>

+ 12 - 0
app/src/main/res/layout/activity_fxy_tally.xml

@@ -64,6 +64,18 @@
             </LinearLayout>
 
 
+            <LinearLayout
+                style="@style/FromLinearLayoutItem"
+                android:orientation="horizontal">
+                <EditText
+                    style="@style/EditTextStyle"
+                    android:id="@+id/et_ctn"
+                    android:hint="请输入托数"
+                    android:enabled="true"
+                    android:text=""/>
+                <ImageButton style="@style/ClearImg" android:id="@+id/ib_ctn_clear" />
+
+            </LinearLayout>
 <!--            -->
 
             <LinearLayout

+ 45 - 0
app/src/main/res/layout/fragment_homepager.xml

@@ -159,6 +159,51 @@
                 </TableRow>
             </LinearLayout>
 
+
+
+
+
+            <LinearLayout
+                android:id="@+id/ll_tool"
+                style="@style/LinearLayoutCornerStyle"
+                android:layout_marginTop="10dp"
+                android:orientation="vertical"
+                android:padding="@dimen/dp_10"
+                android:visibility="visible">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center"
+                    android:text="工具"
+                    android:textColor="@color/black_3d3d3d"
+                    android:textSize="@dimen/t14"
+                    android:textStyle="bold" />
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center"
+                    android:text="@string/index_put_out"
+                    android:textColor="@color/black_3d3d3d"
+                    android:textSize="@dimen/t14"
+                    android:visibility="gone"
+                    android:textStyle="bold" />
+
+                <TableRow
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/t12"
+                    android:weightSum="2">
+
+                    <TextView
+                        style="@style/ImageViewWithTextStyle.FontSize"
+                        android:id="@+id/ivt_order_tool"
+                        android:drawableTop="@drawable/ic_mapan"
+                        android:drawablePadding="5dp"
+                        android:text="工具" />
+
+
+                </TableRow>
+            </LinearLayout>
         </LinearLayout>
     </ScrollView>
 </RelativeLayout>

+ 1 - 1
app/src/main/res/layout/item_card_intercept.xml

@@ -54,7 +54,7 @@
                     android:id="@+id/tv_status"
                     android:layout_gravity="left"
                     android:layout_width="0dp"
-                    android:layout_height="wrap_content"
+                    android:layout_height="match_parent"
                     android:layout_weight="1"
                     android:gravity="center"
                     android:textColor="@color/black_636363"

+ 1 - 1
baselibrary/src/main/java/com/fxy/baselibrary/base/BaseActivity.java

@@ -392,7 +392,7 @@ public abstract class BaseActivity extends SupportActivity implements Observer {
     /**
      *  返回
      */
-    private void showBack() {
+    protected void showBack() {
         tb_iv_left.setOnClickListener(new View.OnClickListener() {
 
             @Override

+ 1 - 1
config.gradle

@@ -8,7 +8,7 @@ ext {
             minSdkVersion    : 17,
             targetSdkVersion : 23,
             versionCode      : 1,
-            versionName      : "2.1.0",
+            versionName      : "2.2.0",
             versionApi       : "2.1",
     ]