package com.fxy.detection; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.widget.RecyclerView; 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.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; 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.bean.ActionBean; import com.fxy.bean.ScanBean; import com.fxy.common.AsyncUpload; import com.fxy.common.PictureSelectorUpload; import com.fxy.common.UploadProgressEvent; import com.fxy.constant.BaseConfig; import com.fxy.constant.EventCode; import com.fxy.detection.bean.NeedPhotoBean; import com.fxy.detection.bean.TakePictureBean; import com.fxy.net.MyDialogCallback; import com.fxy.net.Urls; import com.fxy.view.FloatingImageView; import com.google.gson.Gson; import com.google.zxing.Result; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.entity.LocalMedia; import com.lzy.okgo.OkGo; import com.lzy.okgo.model.Response; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; 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 DetectionPutInMainActivity extends BaseActivity implements StoJNI.ScanCallBack{ /** * 列表适配器 */ Context mContext = this; @BindView(R.id.et_order_number) EditText etOrderNumber; @BindView(R.id.et_tracking_number) EditText etTrackingNumber; @BindView(R.id.et_unit_code) EditText etUnitCode; //拍照区域 @BindView(R.id.ll_camera_picture_module) LinearLayout llCameraPictureModule; @BindView(R.id.ll_label_picture) LinearLayout llLabelPicture; @BindView(R.id.ll_weigh_picture) LinearLayout llWeighPicture; @BindView(R.id.ll_result) LinearLayout llResult; @BindView(R.id.tv_result) TextView tvResult; @BindView(R.id.ll_await_num) LinearLayout llAwaitNum; @BindView(R.id.tv_await_num) TextView tvAwaitNum; @BindView(R.id.pb_progressbar) ProgressBar pbProgressbar; @BindView(R.id.percentage_text_view) TextView tvPercentageTextView; @BindView(R.id.btn_start_upload) TextView btnStartUpload; @BindView(R.id.ll_upload_progressbar) LinearLayout llUploadProgressbar; private HashMap postData = new HashMap<>(); private HashMap mapPictureSelector = new HashMap<>(); private List takePictureBeanList = new ArrayList<>(); private String currentPictureType= ""; private boolean currentUploadStatus = false; // //扫码扫码动作 private ScanBean scanBean; private boolean showWeightImg = false; private boolean isRequiredShow = false; private ArrayList baseImgList = new ArrayList<>(); protected String action; private Unbinder unbinder; private JSONObject postParam = new JSONObject(); @Override public int getContentViewResId() { return R.layout.activity_fxy_detection_putin; } @Override public boolean showToolBar() { return true; } @Override public boolean openEventBus() { return true; } @Override protected void getBundleExtras(Bundle bundle) { //XLog.e("接收数据解析:",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) { // 图片选择结果回调 if (requestCode == PictureConfig.CHOOSE_REQUEST) { if (mapPictureSelector.containsKey(currentPictureType)){ mapPictureSelector.get(currentPictureType).setNotifyParam(getNotifyParam()); mapPictureSelector.get(currentPictureType).getSelectImg(data); } totalAwaitNum(); checkSubmit(); } } } /** * 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("单箱入库"); initEdit(); iniData(); RecyclerView rvLabelShowImg = (RecyclerView)llLabelPicture.findViewById(R.id.rv_show_img); RecyclerView rvWeighShowImg = (RecyclerView)llWeighPicture.findViewById(R.id.rv_show_img); mapPictureSelector.put("label_img",setItemPicture("label_img",rvLabelShowImg,9)); mapPictureSelector.put("weight_img",setItemPicture("weight_img",rvWeighShowImg,9)); iniPhoto(); totalAwaitNum(); } /** * 设置多个上传文件 * @param uploadType String * @param showImg RecyclerView */ private AsyncUpload setItemPicture(String uploadType,RecyclerView showImg,int num){ String notifyUrl = Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN; AsyncUpload pictureUpload = new AsyncUpload(DetectionPutInMainActivity.this,showImg,"detection",uploadType,notifyUrl,false); pictureUpload.setUploadType(uploadType); pictureUpload.setCompress(true,100,100); pictureUpload.setOnlyCamera(true); pictureUpload.setMaxSelectNum(num); //showImg.onTouchEvent() pictureUpload.setOnChangeListener(new AsyncUpload.UploadChangeListener() { @Override public void uploadResult(boolean State,String actionType) { if (State) { totalAwaitNum(); } } @Override public void uploadFileKey(String fileKey) { System.out.println("fileKey:"+fileKey); currentPictureType = fileKey; } }); return pictureUpload; } private void setCameraPicture(){ llCameraPictureModule.removeAllViews();; for (int i=0;i getNotifyParam(){ postData.put("box_number",etOrderNumber.getText().toString().trim()); postData.put("tracking_number",etTrackingNumber.getText().toString().trim()); postData.put("unit_code",etUnitCode.getText().toString().trim()); mapPictureSelector.get(currentPictureType).setNotifyParam(postData); mapPictureSelector.get(currentPictureType).setNotifyParam(postData); return postData; } //监听按键 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() { List list = new ArrayList<>(); list.add(etTrackingNumber); list.add(etOrderNumber); list.add(etUnitCode); unifyEdit(list); llResult.setVisibility(View.GONE); llWeighPicture.setVisibility(View.GONE); } private void iniData(){ baseImgList.add("label_img"); baseImgList.add("weight_img"); } //getAwaitNum private void totalAwaitNum(){ int awaitNum = mapPictureSelector.get("label_img").getAwaitNum(); tvAwaitNum.setText(String.valueOf(awaitNum)); if (awaitNum == 0){ operateStopUpload(); } } //统一按钮回调 @SuppressLint("NonConstantResourceId") public void callbackEditor(View v){ XLog.e("获取:"+v.getId()); XLog.e("id:"+R.id.et_tracking_number); switch (v.getId()) { case R.id.et_tracking_number: getInboundTrack(); break; case R.id.et_order_number: if (etTrackingNumber.getText().toString().isEmpty()){ etTrackingNumber.requestFocus(); return; } if (etOrderNumber.getText().toString().isEmpty()){ etOrderNumber.requestFocus(); return; } etUnitCode.requestFocus(); etUnitCode.setSelection(etUnitCode.getText().toString().length()); break; case R.id.et_unit_code: for (int i=0;i list){ for (int i=0;i 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 && isRequiredShow){ setEditTextFocused(currentEditText,true); } } } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void afterTextChanged(Editable s) { } }); if (imageButton !=null ){ unifyClearEdit(imageButton); } } } 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); showSuccessToast("扫描成功"); callbackEditor(view); } } private void getInboundTrack(){ int awaitNum = mapPictureSelector.get("label_img").getAwaitNum(); if (currentUploadStatus && awaitNum>0){ new AlertDialog.Builder(mContext).setTitle(R.string.dl_hint) .setMessage("当前正在上传图片。是否需要停止上传继续操作") .setNegativeButton(R.string.str_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (!currentUploadStatus){ operateStartUpload(); } dialogInterface.dismiss(); } }).setPositiveButton(R.string.str_submit, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }).show(); } if (etTrackingNumber.getText().toString().isEmpty()){ showErrorToast(etTrackingNumber.getHint().toString()); return; } Map math = new HashMap<>(); math.put("tracking_number",etTrackingNumber.getText().toString().trim()); String mathJson = (new Gson()).toJson(math); if (!checkRepeat(Urls.FXY_DETECTION_PUTIN_TRACK+(mathJson.toString()))){ Toast.makeText(this, getString(R.string.error_data_processed), Toast.LENGTH_LONG).show(); return; } OkGo.post(Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN_TRACK).upJson(mathJson) .execute(new MyDialogCallback(this, true, true) { @Override public void onSuccess(Response response) { super.onSuccess(response); try { ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class); JSONObject result = new JSONObject(); if (bean.data!=null && !bean.data.isEmpty() && !bean.data.equals("[]")){ result = new JSONObject(bean.data); } String voiceName = result.has("voice_name") ? result.getString("voice_name"):""; String showText = result.has("show_text") ? result.getString("show_text"):""; String show_weight_img = result.has("show_weight_img") ? result.getString("show_weight_img"):""; if (result.has("need_photo")){ takePictureBeanList = JsonUtil.jsonString2Beans(result.getString("need_photo"),TakePictureBean.class); } showWeightImg = show_weight_img.contains("1"); llWeighPicture.setVisibility(showWeightImg ? View.VISIBLE:View.GONE); llResult.setVisibility(showText.isEmpty() ? View.GONE:View.VISIBLE); tvResult.setText(showText); setCameraPicture(); if(bean.code == 1){ showSuccessToast(bean.msg,voiceName); }else{ showWarningToast(bean.msg,voiceName); } } catch (Exception e) { e.printStackTrace(); XLog.e("添加开箱拆柜数据结果返回错误",e.getMessage()); } } }); etOrderNumber.requestFocus(); etOrderNumber.setSelection(etOrderNumber.getText().toString().length()); } private void checkSubmit(){ if (mapPictureSelector.get("label_img").getOssPhotoList().size()==0){ return; } if (showWeightImg && mapPictureSelector.get("weight_img").getOssPhotoList().size()==0){ return; } if (takePictureBeanList.size()>0){ for (int i=0;ipost(Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN).upJson(postParam) .execute(new MyDialogCallback(this, true, false) { @Override public void onSuccess(Response response) { super.onSuccess(response); } }); //假成功 showSuccessToast("success"); } //完成入库 private void finishInbound(){ isRequiredShow = true; if (etTrackingNumber.getText().toString().isEmpty()){ showWarningToast(etTrackingNumber.getHint().toString()); return ; } if (etOrderNumber.getText().toString().isEmpty()){ showWarningToast(etOrderNumber.getHint().toString()); return ; } HashMap postData = new HashMap<>(); postData.put("box_number",etOrderNumber.getText().toString().trim()); postData.put("tracking_number",etTrackingNumber.getText().toString().trim()); String body = (new Gson()).toJson(postData); OkGo.post(Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN).upJson(body) .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(bean.msg); // }else{ // showWarningToast(bean.msg); // } } catch (Exception e) { e.printStackTrace(); XLog.e("添加开箱拆柜数据结果返回错误",e.getMessage()); } } }); //假成功 showSuccessToast("success"); initFinish(); } public void initUnitCode(){ isRequiredShow = false; for (String key : mapPictureSelector.keySet()) { if (!baseImgList.contains(key)){ mapPictureSelector.get(key).emptyRemake(); } } etUnitCode.setText(""); etUnitCode.requestFocus(); llLabelPicture.setVisibility(View.GONE); } private void initFinish(){ initUnitCode(); for (int i=0;i stringList = mapPictureSelector.get("label_img").getOssPhotoList(); if (stringList.size()==0){ showWarningToast("面单照片不能为空"); return false; } postParam.put("label_img_tag",mapPictureSelector.get("label_img").getUniqueTag()); postParam.put("label_img",gson.toJson(stringList)); AsyncUpload weightUpload = mapPictureSelector.get("weight_img"); if (showWeightImg && weightUpload!=null){ List weighPhotoList = weightUpload.getOssPhotoList(); if (weighPhotoList.size()==0){ showWarningToast("内件照片不能为空"); return false; } postParam.put("weight_img_tag",weightUpload.getUniqueTag()); postParam.put("weight_img",gson.toJson(weighPhotoList)); } //拍照 if (takePictureBeanList.size()>0){ JSONObject otherObject = new JSONObject(); for (int i=0; i < takePictureBeanList.size();i++){ String name = takePictureBeanList.get(i).getField(); if (!mapPictureSelector.containsKey(name) ){ showErrorToast("页面渲染异常,请更新操作"); } List tmpList = mapPictureSelector.get(name).getOssPhotoList(); if (tmpList.size() == 0){ showWarningToast("请上传".concat(takePictureBeanList.get(i).getTitle()).concat("拍照")); } otherObject.put(name,gson.toJson(tmpList)); } postParam.put("other_img",otherObject); } postParam.put("box_number",etOrderNumber.getText().toString().trim()); postParam.put("tracking_number",etTrackingNumber.getText().toString().trim()); postParam.put("unit_code",etUnitCode.getText().toString().trim()); } catch (JSONException e) { showWarningToast("系统异常"+e.getMessage()); e.printStackTrace(); return false; } return true; } private void iniPhoto(){ // HashMap map = new HashMap<>(); // map.put("disabled",false); // map.put("error","不可拍照"); // labelPictureSelectorUpload.setLimitOperate(map); // weighPictureSelectorUpload.setLimitOperate(map); } //sIsGoodinfoMatch,sIsBattery,sIsMagnetic,sIsWood,sIsExtra,sIsOther @OnClick({R.id.btn_confirm,R.id.btn_start_upload}) public void onViewClicked(View view) { Bundle bundle = new Bundle(); switch (view.getId()) { case R.id.btn_confirm: finishInbound(); break; case R.id.btn_start_upload: if (currentUploadStatus) { operateStopUpload(); } else { operateStartUpload(); } default: break; } } private void operateStopUpload(){ if (currentUploadStatus){ mapPictureSelector.get("label_img").setStopUpload(); currentUploadStatus = false; btnStartUpload.setText("开始上传"); llUploadProgressbar.setVisibility(View.GONE); } } private void operateStartUpload(){ if (!currentUploadStatus){ mapPictureSelector.get("label_img").setStartUpload(); currentUploadStatus = true; btnStartUpload.setText("停止上传"); llUploadProgressbar.setVisibility(View.VISIBLE); } } protected void showBack() { super.showBack(); tb_iv_left.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int num = mapPictureSelector.get("label_img").getAwaitNum(); if (num>0){ new AlertDialog.Builder(mContext).setTitle(R.string.dl_hint) .setMessage("返回会取消上传还有"+num+"条数据未上传,确定要返回吗") .setNegativeButton(R.string.str_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (!currentUploadStatus){ operateStartUpload(); } dialogInterface.dismiss(); } }).setPositiveButton(R.string.str_submit, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (isShowBackDialog) { onBackPressedSupport(); } else { finish(); } } }).show(); }else{ if (isShowBackDialog) { onBackPressedSupport(); } else { finish(); } } } }); } @Subscribe(threadMode = ThreadMode.MAIN) public void onUploadProgress(UploadProgressEvent event) { // 更新进度条或其他 UI 元素 int num = event.getProgress(); pbProgressbar.setProgress(num); tvPercentageTextView.setText(String.valueOf(num).concat("%")); } @Override protected void onDestroy() { unbinder.unbind(); for (AsyncUpload asyncUpload : mapPictureSelector.values()) { asyncUpload.removeHandler(); } 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()); } } }