package com.fxy.hk; import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.ImageButton; import android.widget.TextView; 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.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.bean.UploadResultBean; import com.fxy.common.FiledUpload; import com.fxy.constant.BaseConfig; import com.fxy.constant.EventCode; import com.fxy.helper.HkDataHelper; import com.fxy.net.MyDialogCallback; import com.fxy.net.Urls; import com.fxy.realm.CutRuleRealm; import com.fxy.realm.HkTransDetailRealm; import com.fxy.realm.HkTransRealm; import com.fxy.view.FloatingImageView; import com.google.gson.Gson; import com.google.zxing.Result; import com.jaredrummler.materialspinner.MaterialSpinner; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.lzy.okgo.OkGo; import com.lzy.okgo.model.Response; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; import io.realm.RealmResults; import sto.android.app.StoJNI; import sto.android.app.StoPdaKeyEvent; import sto.android.app.StoTongJNI; public class HkPutinMainActivity 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.ms_batch_list) MaterialSpinner batchListSpinner; @BindView(R.id.mt_order_code) MarqueeTextView mtOrderCode; @BindView(R.id.tv_sort) TextView tvSort; private String batchNumber = ""; private FiledUpload filedUpload; // //扫码扫码动作 private ScanBean scanBean; private List cutRuleRealmList; //浮动按钮 @BindView(R.id.iv_drag) FloatingImageView iv_drag; private List spinnerBatchList = new ArrayList(); protected String action; private Unbinder unbinder; @Override public int getContentViewResId() { return R.layout.activity_fxy_hk_putin; } @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); // 图片选择结果回调 if (resultCode == RESULT_OK && requestCode == PictureConfig.CHOOSE_REQUEST) { List images = PictureSelector.obtainMultipleResult(data); LocalMedia localMedia = images.get(0); String localPath = localMedia.isCompressed() ? localMedia.getCompressPath():localMedia.getPath(); filedUpload.filedUpload(localPath); filedUpload.setOnChangeListener(new FiledUpload.UploadChangeListener() { @Override public void uploadResult(UploadResultBean uploadResultBean) { if (uploadResultBean.getStatus()==1){ ArrayList photoList = new ArrayList(); photoList.add(uploadResultBean.getPath()); pictureInbound(photoList); }else{ showErrorToast("上传图片失败"); XLog.e("上传结果失败"+uploadResultBean.getError()); } } }); } } /** * 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("托盘入库"); //拉取数据 (new HkDataHelper(HkPutinMainActivity.this)).getBaseInfo(); initEdit(); iniData(); initSpinner(); filedUpload = new FiledUpload(HkPutinMainActivity.this,"photo"); //监听浮动按钮 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); } } }); } private void iniData(){ RealmResults realmResultsAll = mRealm.where(HkTransRealm.class).findAll(); realmResultsAll.load(); spinnerBatchList = new ArrayList(); if (realmResultsAll.size()>0){ for (int i=0;i0){ batchNumber = spinnerBatchList.get(0); } batchListSpinner.setItems(spinnerBatchList); batchListSpinner.setSelected(false); cutRuleRealmList = mRealm.where(CutRuleRealm.class).findAll(); initSpinner(); } /** * 初始化下拉框控件值 */ private void initSpinner() { batchListSpinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) { batchNumber = item; etOrderNo.setEnabled(true); } }); } //拍照上传 private void pictureInbound(ArrayList photoList){ try { JSONObject jsonObject = new JSONObject(); Gson gson = new Gson(); jsonObject.put("photo",gson.toJson(photoList)); OkGo.post(Urls.getServiceAddress(this) + Urls.FXY_GK_INBOUND_PICTURE).upJson(jsonObject) .execute(new MyDialogCallback(this, true, false) { @Override public void onSuccess(Response response) { super.onSuccess(response); try { ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class); if(bean.code == 1){ showSuccessToast("上传成功"); }else{ showErrorToast("上传失败"); } } catch (Exception e) { e.printStackTrace(); XLog.e("香港图片结果返回错误",e.getMessage()); } } }); } catch (Exception e) { e.printStackTrace(); } } @Override public boolean dispatchKeyEvent(KeyEvent event) { //XLog.e("event:"+event.getKeyCode()); if ((event.getKeyCode()==KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode()==KeyEvent.KEYCODE_ENTER ) && event.getAction() == KeyEvent.ACTION_DOWN){ //按确定键 } return super.dispatchKeyEvent(event); } //监听按键 public boolean onKeyDown(int keyCode, KeyEvent event) { XLog.e("监听按键:"+keyCode);XLog.e(event); 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()); } } private void initEdit() { // etOrderNo.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { String orderNo = etOrderNo.getText().toString().trim(); if (StringUtils.isEmpty(orderNo)) { setEditTextFocused(v,true); showWarningToast(v.getHint().toString()); return false; } inboundPutin(); return false; } return false; } }); etOrderNo.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() > 0 ) { if (etOrderNo.isEnabled()){ ibOrderNoClear.setVisibility(View.VISIBLE); } setEditTextNormal(etOrderNo,true); } else { ibOrderNoClear.setVisibility(View.INVISIBLE); setEditTextFocused(etOrderNo,true); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void afterTextChanged(Editable s) { } }); ibOrderNoClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { etOrderNo.requestFocus(); etOrderNo.getText().clear(); } }); } 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); switch (view.getId()) { case R.id.et_order_no: inboundPutin(); break; default: } } } public String strByCutRule(String str,List cutRuleRealmList){ str = str.replaceAll("\u001D", ""); str = str.trim(); if (cutRuleRealmList.size()==0){ return str; } int len = str.length(); for (int i=0;ipost(Urls.getServiceAddress(this) + Urls.FXY_GK_INBOUND_PUTIN).upJson(postParam) .execute(new MyDialogCallback(this, true, true) { @Override public void onSuccess(Response response) { super.onSuccess(response); try { ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class); if(bean.code == 1){ JSONObject data = new JSONObject(bean.data); if (data.has("realm_id")){ setIsFinish(data.getString("realm_id"),1); } }else{ // showWarningToast(bean.msg); } } catch (Exception e) { e.printStackTrace(); XLog.e("添加理货数据结果返回错误",e.getMessage()); } } }); } catch (JSONException e) { e.printStackTrace(); } } private void setIsFinish(String realmId,int isFinish){ //更新值 mRealm.beginTransaction(); HkTransDetailRealm myObject = mRealm.where(HkTransDetailRealm.class).equalTo("id",realmId).findFirst(); myObject.setPushStatus(isFinish); mRealm.commitTransaction(); } /* * 校验必录 */ private boolean validate(){ if (batchNumber.isEmpty()){ showErrorToast(batchListSpinner.getHint().toString()); setEditTextFocused(batchListSpinner,true); return false; } setEditTextNormal(batchListSpinner,true); //数据检查不通过 String orderNo = etOrderNo.getText().toString().trim(); if (orderNo.isEmpty()){ showWarningToast(etOrderNo.getHint().toString()); return false; } return true; } private void authCamera(){ //拍照 com.luck.picture.lib.PictureSelector.create(this) .openCamera(PictureMimeType.ofImage()) //只需要拍照 //.selectionMode(PictureConfig.SINGLE) // .isCamera(true) //.compressMaxKB()//压缩最大值kb compressGrade()为Luban.CUSTOM_GEAR有效 .compress(true) // 压缩 .cropCompressQuality(100)// 裁剪压缩质量 默认100 .minimumCompressSize(100) //最新压缩图片 默认100 .forResult(PictureConfig.CHOOSE_REQUEST); } // @OnClick({R.id.btn_photos}) public void onViewClicked(View view) { Bundle bundle = new Bundle(); switch (view.getId()) { case R.id.btn_photos: authCamera(); break; default: break; } } @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()); } } }