DetectionPutInMainActivity.java 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004
  1. package com.fxy.detection;
  2. import android.annotation.SuppressLint;
  3. import android.app.AlertDialog;
  4. import android.content.BroadcastReceiver;
  5. import android.content.Context;
  6. import android.content.DialogInterface;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.os.Bundle;
  10. import android.os.Handler;
  11. import android.os.Message;
  12. import android.support.v7.widget.RecyclerView;
  13. import android.text.Editable;
  14. import android.text.TextWatcher;
  15. import android.view.KeyEvent;
  16. import android.view.View;
  17. import android.view.inputmethod.EditorInfo;
  18. import android.widget.EditText;
  19. import android.widget.ImageButton;
  20. import android.widget.LinearLayout;
  21. import android.widget.ProgressBar;
  22. import android.widget.TextView;
  23. import android.widget.Toast;
  24. import com.elvishew.xlog.XLog;
  25. import com.fxy.R;
  26. import com.fxy.baselibrary.base.BaseActivity;
  27. import com.fxy.baselibrary.bean.BaseEventBusBean;
  28. import com.fxy.baselibrary.interfaces.OnRxScanerListener;
  29. import com.fxy.baselibrary.qrcode.ActivityScanerCode;
  30. import com.fxy.baselibrary.util.JsonUtil;
  31. import com.fxy.bean.ActionBean;
  32. import com.fxy.bean.ScanBean;
  33. import com.fxy.common.AsyncUpload;
  34. import com.fxy.common.PictureSelectorUpload;
  35. import com.fxy.common.UploadProgressEvent;
  36. import com.fxy.constant.BaseConfig;
  37. import com.fxy.constant.EventCode;
  38. import com.fxy.detection.bean.NeedPhotoBean;
  39. import com.fxy.detection.bean.TakePictureBean;
  40. import com.fxy.net.MyDialogCallback;
  41. import com.fxy.net.Urls;
  42. import com.fxy.view.FloatingImageView;
  43. import com.google.gson.Gson;
  44. import com.google.zxing.Result;
  45. import com.luck.picture.lib.config.PictureConfig;
  46. import com.luck.picture.lib.entity.LocalMedia;
  47. import com.lzy.okgo.OkGo;
  48. import com.lzy.okgo.model.Response;
  49. import org.greenrobot.eventbus.Subscribe;
  50. import org.greenrobot.eventbus.ThreadMode;
  51. import org.json.JSONException;
  52. import org.json.JSONObject;
  53. import java.util.ArrayList;
  54. import java.util.HashMap;
  55. import java.util.List;
  56. import java.util.Map;
  57. import butterknife.BindView;
  58. import butterknife.ButterKnife;
  59. import butterknife.OnClick;
  60. import butterknife.Unbinder;
  61. import sto.android.app.StoJNI;
  62. import sto.android.app.StoPdaKeyEvent;
  63. import sto.android.app.StoTongJNI;
  64. public class DetectionPutInMainActivity extends BaseActivity implements StoJNI.ScanCallBack{
  65. /**
  66. * 列表适配器
  67. */
  68. Context mContext = this;
  69. @BindView(R.id.et_order_number)
  70. EditText etOrderNumber;
  71. @BindView(R.id.et_tracking_number)
  72. EditText etTrackingNumber;
  73. @BindView(R.id.et_unit_code)
  74. EditText etUnitCode;
  75. //拍照区域
  76. @BindView(R.id.ll_camera_picture_module)
  77. LinearLayout llCameraPictureModule;
  78. @BindView(R.id.ll_label_picture)
  79. LinearLayout llLabelPicture;
  80. @BindView(R.id.ll_weigh_picture)
  81. LinearLayout llWeighPicture;
  82. @BindView(R.id.ll_result)
  83. LinearLayout llResult;
  84. @BindView(R.id.tv_result)
  85. TextView tvResult;
  86. @BindView(R.id.ll_await_num)
  87. LinearLayout llAwaitNum;
  88. @BindView(R.id.tv_await_num)
  89. TextView tvAwaitNum;
  90. @BindView(R.id.pb_progressbar)
  91. ProgressBar pbProgressbar;
  92. @BindView(R.id.percentage_text_view)
  93. TextView tvPercentageTextView;
  94. @BindView(R.id.btn_start_upload)
  95. TextView btnStartUpload;
  96. @BindView(R.id.ll_upload_progressbar)
  97. LinearLayout llUploadProgressbar;
  98. private HashMap<String, Object> postData = new HashMap<>();
  99. private HashMap<String,AsyncUpload> mapPictureSelector = new HashMap<>();
  100. private List<TakePictureBean> takePictureBeanList = new ArrayList<>();
  101. private String currentPictureType= "";
  102. private boolean currentUploadStatus = false;
  103. //
  104. //扫码扫码动作
  105. private ScanBean scanBean;
  106. private boolean showWeightImg = false;
  107. private boolean isRequiredShow = false;
  108. private ArrayList<String> baseImgList = new ArrayList<>();
  109. protected String action;
  110. private Unbinder unbinder;
  111. private JSONObject postParam = new JSONObject();
  112. @Override
  113. public int getContentViewResId() {
  114. return R.layout.activity_fxy_detection_putin;
  115. }
  116. @Override
  117. public boolean showToolBar() {
  118. return true;
  119. }
  120. @Override
  121. public boolean openEventBus() {
  122. return true;
  123. }
  124. @Override
  125. protected void getBundleExtras(Bundle bundle) {
  126. //XLog.e("接收数据解析:",bundle);
  127. }
  128. //finish的返回监听
  129. //这里的requestCode参数,就是上面设置的 1 ,当跳转的页面返回的时候,通过这个加以判断
  130. //resultCode ,这个参数是在跳转的页面里面规定的,它也是一个int类型的标志
  131. //第三个参数包含了返回的值
  132. //如果不需要所跳转的页面返回值,也就不需要这个方法了
  133. @Override
  134. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  135. super.onActivityResult(requestCode, resultCode, data);
  136. if (resultCode == RESULT_OK) {
  137. // 图片选择结果回调
  138. if (requestCode == PictureConfig.CHOOSE_REQUEST) {
  139. if (mapPictureSelector.containsKey(currentPictureType)){
  140. mapPictureSelector.get(currentPictureType).setNotifyParam(getNotifyParam());
  141. mapPictureSelector.get(currentPictureType).getSelectImg(data);
  142. }
  143. totalAwaitNum();
  144. checkSubmit();
  145. }
  146. }
  147. }
  148. /**
  149. * EventBus接收信息的方法,开启后才会调用(非粘性事件)
  150. *
  151. * @param event
  152. */
  153. @Override
  154. protected void EventBean(BaseEventBusBean event) {
  155. // XLog.e("----------接收返回--------------");
  156. // XLog.e("接收返回:"+event.getEventCode());
  157. if (event != null && event.getEventCode() == EventCode.displacement_refresh){
  158. }
  159. }
  160. @Override
  161. public boolean isPlayMusic() {
  162. return true;
  163. }
  164. @Override
  165. protected void initView() {
  166. unbinder = ButterKnife.bind(this);
  167. setTitleName("单箱入库");
  168. initEdit();
  169. iniData();
  170. RecyclerView rvLabelShowImg = (RecyclerView)llLabelPicture.findViewById(R.id.rv_show_img);
  171. RecyclerView rvWeighShowImg = (RecyclerView)llWeighPicture.findViewById(R.id.rv_show_img);
  172. mapPictureSelector.put("label_img",setItemPicture("label_img",rvLabelShowImg,9));
  173. mapPictureSelector.put("weight_img",setItemPicture("weight_img",rvWeighShowImg,9));
  174. iniPhoto();
  175. totalAwaitNum();
  176. }
  177. /**
  178. * 设置多个上传文件
  179. * @param uploadType String
  180. * @param showImg RecyclerView
  181. */
  182. private AsyncUpload setItemPicture(String uploadType,RecyclerView showImg,int num){
  183. String notifyUrl = Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN;
  184. AsyncUpload pictureUpload = new AsyncUpload(DetectionPutInMainActivity.this,showImg,"detection",uploadType,notifyUrl,false);
  185. pictureUpload.setUploadType(uploadType);
  186. pictureUpload.setCompress(true,100,100);
  187. pictureUpload.setOnlyCamera(true);
  188. pictureUpload.setMaxSelectNum(num);
  189. //showImg.onTouchEvent()
  190. pictureUpload.setOnChangeListener(new AsyncUpload.UploadChangeListener() {
  191. @Override
  192. public void uploadResult(boolean State,String actionType) {
  193. if (State) {
  194. totalAwaitNum();
  195. }
  196. }
  197. @Override
  198. public void uploadFileKey(String fileKey) {
  199. System.out.println("fileKey:"+fileKey);
  200. currentPictureType = fileKey;
  201. }
  202. });
  203. return pictureUpload;
  204. }
  205. private void setCameraPicture(){
  206. llCameraPictureModule.removeAllViews();;
  207. for (int i=0;i<takePictureBeanList.size();i++){
  208. addPictureSelectorUpload(llCameraPictureModule,takePictureBeanList.get(i));
  209. }
  210. }
  211. public void addPictureSelectorUpload(LinearLayout linearLayout, TakePictureBean takePictureBean){
  212. View itemPictureSelector = View.inflate(mContext, R.layout.item_picture_selector, null);
  213. TextView tvPicturesTitle = itemPictureSelector.findViewById(R.id.tv_pictures_title);
  214. tvPicturesTitle.setText(takePictureBean.getField());
  215. RecyclerView rvLabelShowImg = (RecyclerView)itemPictureSelector.findViewById(R.id.recyclerview);
  216. linearLayout.addView(itemPictureSelector);
  217. AsyncUpload tmpPictureSelector = setItemPicture(takePictureBean.getField(),rvLabelShowImg,takePictureBean.getNumber());
  218. mapPictureSelector.put(takePictureBean.getField(),tmpPictureSelector);
  219. }
  220. @Override
  221. public boolean dispatchKeyEvent(KeyEvent event) {
  222. //XLog.e("event:"+event.getKeyCode());
  223. if ((event.getKeyCode()==KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode()==KeyEvent.KEYCODE_ENTER ) && event.getAction() == KeyEvent.ACTION_DOWN){
  224. //按确定键
  225. }
  226. return super.dispatchKeyEvent(event);
  227. }
  228. public HashMap<String, Object> getNotifyParam(){
  229. postData.put("box_number",etOrderNumber.getText().toString().trim());
  230. postData.put("tracking_number",etTrackingNumber.getText().toString().trim());
  231. postData.put("unit_code",etUnitCode.getText().toString().trim());
  232. mapPictureSelector.get(currentPictureType).setNotifyParam(postData);
  233. mapPictureSelector.get(currentPictureType).setNotifyParam(postData);
  234. return postData;
  235. }
  236. //监听按键
  237. public boolean onKeyDown(int keyCode, KeyEvent event) {
  238. XLog.e("监听按键:"+keyCode);XLog.e(event);
  239. if (scanBean.getIsBroadcast()==0 && StoTongJNI.getIns(mContext).getEventFuction(keyCode) == StoPdaKeyEvent.KEYCODE_SCAN
  240. && event.getRepeatCount() == 0) {
  241. if (StoTongJNI.getIns(mContext).GetScannerIsScanning()) {
  242. //
  243. } else {
  244. StoTongJNI.getIns(mContext).SetScannerStart();
  245. }
  246. }
  247. return super.onKeyDown(keyCode, event);
  248. }
  249. @SuppressLint("HandlerLeak")
  250. Handler scanHandler = new Handler() {
  251. @Override
  252. public void handleMessage(Message msg) {
  253. // TODO Auto-generated method stub
  254. if (msg.obj != null) {
  255. String scanResult = msg.obj.toString().trim();
  256. if (!scanResult.isEmpty()){
  257. setScanResult(scanResult);
  258. }
  259. }
  260. }
  261. };
  262. @Override
  263. public void onScanResults(String str) {
  264. Message msg = new Message();
  265. msg.obj = str;
  266. scanHandler.sendMessage(msg);
  267. }
  268. @Override
  269. public void onScanResults(String str, int type) {
  270. }
  271. /**
  272. * 定义广播接受
  273. */
  274. BroadcastReceiver mReceiver = new BroadcastReceiver() {
  275. @Override
  276. public void onReceive(Context context, Intent intent) {
  277. String scanResult = intent.getStringExtra(scanBean.getDataName());
  278. if (scanResult==null){return; }
  279. String scanStatus = "";
  280. if (!scanBean.getStatusName().isEmpty()){
  281. scanStatus = intent.getStringExtra(scanBean.getStatusName());
  282. }else{
  283. scanStatus = scanResult.isEmpty()? "" : "ok"; //有值 默认是扫码成功;
  284. }
  285. //新大陆(MT65,MT90) 需要手动关闭
  286. if (!scanBean.getActionStop().isEmpty()){
  287. Intent stopIntent = new Intent(scanBean.getActionStop());
  288. mContext.sendBroadcast(stopIntent);
  289. }
  290. if ("ok".equals(scanStatus)){
  291. setScanResult(scanResult);
  292. }else{
  293. showErrorToast(getString(R.string.scan_failed));
  294. }
  295. }
  296. };
  297. /**
  298. * 注册广播
  299. */
  300. private void initReceiver(){
  301. try {
  302. String scanStr = getScanSetting();
  303. scanBean = JsonUtil.getObject(scanStr, ScanBean.class);
  304. Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
  305. if (is_broadcast ==1){
  306. IntentFilter mFilter = new IntentFilter(scanBean.getAction());
  307. this.registerReceiver(mReceiver, mFilter);
  308. }else{
  309. //不广播进行处理 jni模式
  310. String pdaBrand = StoTongJNI.getmPdaBrand();
  311. if (!pdaBrand.isEmpty()){
  312. StoTongJNI.getIns(this).setmScanCB(this);
  313. StoTongJNI.getIns(this).SetScannerOn();
  314. }
  315. }
  316. }catch (Exception e) {
  317. showErrorToast("获取扫码配置失败"+e.getMessage());
  318. XLog.e("获取扫码配置失败:" + e.getMessage());
  319. }
  320. }
  321. private void initEdit() {
  322. List<EditText> list = new ArrayList<>();
  323. list.add(etTrackingNumber);
  324. list.add(etOrderNumber);
  325. list.add(etUnitCode);
  326. unifyEdit(list);
  327. llResult.setVisibility(View.GONE);
  328. llWeighPicture.setVisibility(View.GONE);
  329. }
  330. private void iniData(){
  331. baseImgList.add("label_img");
  332. baseImgList.add("weight_img");
  333. }
  334. //getAwaitNum
  335. private void totalAwaitNum(){
  336. int awaitNum = mapPictureSelector.get("label_img").getAwaitNum();
  337. tvAwaitNum.setText(String.valueOf(awaitNum));
  338. if (awaitNum == 0){
  339. operateStopUpload();
  340. }
  341. }
  342. //统一按钮回调
  343. @SuppressLint("NonConstantResourceId")
  344. public void callbackEditor(View v){
  345. XLog.e("获取:"+v.getId());
  346. XLog.e("id:"+R.id.et_tracking_number);
  347. switch (v.getId()) {
  348. case R.id.et_tracking_number:
  349. getInboundTrack();
  350. break;
  351. case R.id.et_order_number:
  352. if (etTrackingNumber.getText().toString().isEmpty()){
  353. etTrackingNumber.requestFocus();
  354. return;
  355. }
  356. if (etOrderNumber.getText().toString().isEmpty()){
  357. etOrderNumber.requestFocus();
  358. return;
  359. }
  360. etUnitCode.requestFocus();
  361. etUnitCode.setSelection(etUnitCode.getText().toString().length());
  362. break;
  363. case R.id.et_unit_code:
  364. for (int i=0;i<baseImgList.size();i++){
  365. String tmpKey = baseImgList.get(0);
  366. if (mapPictureSelector.containsKey(tmpKey) && mapPictureSelector.get(tmpKey).getOssPhotoList().size()==0){
  367. mapPictureSelector.get(tmpKey).authCamera();
  368. return;
  369. }
  370. }
  371. for (int i=0;i<takePictureBeanList.size();i++){
  372. String tmpKey = takePictureBeanList.get(0).getField();
  373. if (mapPictureSelector.containsKey(tmpKey) && mapPictureSelector.get(tmpKey).getOssPhotoList().size()==0){
  374. mapPictureSelector.get(tmpKey).authCamera();
  375. return;
  376. }
  377. }
  378. pictureInbound();
  379. break;
  380. default:
  381. }
  382. }
  383. /**
  384. * 统一设置Edit监听
  385. * @param list
  386. */
  387. public void unifyEdit(List<EditText> list){
  388. for (int i=0;i<list.size();i++){
  389. EditText editText = list.get(i);
  390. LinearLayout linearLayout = (LinearLayout)editText.getParent();
  391. ImageButton imageButton = getChildImageButton(linearLayout);
  392. //监听按确定
  393. editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
  394. @Override
  395. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  396. //XLog.e("actionId:"+actionId);
  397. if (actionId == EditorInfo.IME_ACTION_SEND || actionId == EditorInfo.IME_ACTION_DONE ) {
  398. if (v.getText().toString().trim().isEmpty()) {
  399. setEditTextFocused(v,true);
  400. showWarningToast(v.getHint().toString());
  401. return false;
  402. }else{
  403. setEditTextNormal(v,true);
  404. }
  405. callbackEditor(v);
  406. return false;
  407. }
  408. return false;
  409. }
  410. });
  411. editText.addTextChangedListener(new TextWatcher() {
  412. public void onTextChanged(CharSequence s, int start, int before, int count) {
  413. EditText currentEditText = null;
  414. ImageButton currentImage = null;
  415. //获取焦点的view对象
  416. View view=getWindow().getDecorView().findFocus();
  417. //如果是EditText
  418. if(view instanceof EditText){
  419. currentEditText = (EditText) view;
  420. currentImage = getChildImageButton((LinearLayout)currentEditText.getParent());
  421. }
  422. if (s.length() > 0 ) {
  423. if (currentImage !=null ){
  424. currentImage.setVisibility(View.VISIBLE);
  425. }
  426. if (currentEditText!=null){
  427. setEditTextNormal(currentEditText,true);
  428. }
  429. } else {
  430. if (currentImage !=null ){
  431. currentImage.setVisibility(View.INVISIBLE);
  432. }
  433. if (currentEditText!=null && isRequiredShow){
  434. setEditTextFocused(currentEditText,true);
  435. }
  436. }
  437. }
  438. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  439. }
  440. public void afterTextChanged(Editable s) {
  441. }
  442. });
  443. if (imageButton !=null ){
  444. unifyClearEdit(imageButton);
  445. }
  446. }
  447. }
  448. private OnRxScanerListener mScanerListener = new OnRxScanerListener() {
  449. @Override
  450. public void onSuccess(String type, Result result) {
  451. String scanResult = result.getText();
  452. switch (type){
  453. case BaseConfig.COMMON_SCANNER_ONLY:
  454. setScanResult(scanResult);
  455. break;
  456. }
  457. }
  458. @Override
  459. public void onFail(String type, String message) {
  460. }
  461. };
  462. //把扫描结果赋值
  463. private void setScanResult(String scanResult){
  464. //获取焦点的view对象
  465. View view=getWindow().getDecorView().findFocus();
  466. //如果是EditText
  467. if(view instanceof EditText)
  468. {
  469. ((EditText) view).setText(scanResult);
  470. showSuccessToast("扫描成功");
  471. callbackEditor(view);
  472. }
  473. }
  474. private void getInboundTrack(){
  475. int awaitNum = mapPictureSelector.get("label_img").getAwaitNum();
  476. if (currentUploadStatus && awaitNum>0){
  477. new AlertDialog.Builder(mContext).setTitle(R.string.dl_hint)
  478. .setMessage("当前正在上传图片。是否需要停止上传继续操作")
  479. .setNegativeButton(R.string.str_cancel, new DialogInterface.OnClickListener() {
  480. @Override
  481. public void onClick(DialogInterface dialogInterface, int i) {
  482. if (!currentUploadStatus){
  483. operateStartUpload();
  484. }
  485. dialogInterface.dismiss();
  486. }
  487. }).setPositiveButton(R.string.str_submit, new DialogInterface.OnClickListener() {
  488. @Override
  489. public void onClick(DialogInterface dialogInterface, int i) {
  490. }
  491. }).show();
  492. }
  493. if (etTrackingNumber.getText().toString().isEmpty()){
  494. showErrorToast(etTrackingNumber.getHint().toString());
  495. return;
  496. }
  497. Map<String,Object> math = new HashMap<>();
  498. math.put("tracking_number",etTrackingNumber.getText().toString().trim());
  499. String mathJson = (new Gson()).toJson(math);
  500. if (!checkRepeat(Urls.FXY_DETECTION_PUTIN_TRACK+(mathJson.toString()))){
  501. Toast.makeText(this, getString(R.string.error_data_processed), Toast.LENGTH_LONG).show();
  502. return;
  503. }
  504. OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN_TRACK).upJson(mathJson)
  505. .execute(new MyDialogCallback(this, true, true) {
  506. @Override
  507. public void onSuccess(Response<String> response) {
  508. super.onSuccess(response);
  509. try {
  510. ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
  511. JSONObject result = new JSONObject();
  512. if (bean.data!=null && !bean.data.isEmpty() && !bean.data.equals("[]")){
  513. result = new JSONObject(bean.data);
  514. }
  515. String voiceName = result.has("voice_name") ? result.getString("voice_name"):"";
  516. String showText = result.has("show_text") ? result.getString("show_text"):"";
  517. String show_weight_img = result.has("show_weight_img") ? result.getString("show_weight_img"):"";
  518. if (result.has("need_photo")){
  519. takePictureBeanList = JsonUtil.jsonString2Beans(result.getString("need_photo"),TakePictureBean.class);
  520. }
  521. showWeightImg = show_weight_img.contains("1");
  522. llWeighPicture.setVisibility(showWeightImg ? View.VISIBLE:View.GONE);
  523. llResult.setVisibility(showText.isEmpty() ? View.GONE:View.VISIBLE);
  524. tvResult.setText(showText);
  525. setCameraPicture();
  526. if(bean.code == 1){
  527. showSuccessToast(bean.msg,voiceName);
  528. }else{
  529. showWarningToast(bean.msg,voiceName);
  530. }
  531. } catch (Exception e) {
  532. e.printStackTrace();
  533. XLog.e("添加开箱拆柜数据结果返回错误",e.getMessage());
  534. }
  535. }
  536. });
  537. etOrderNumber.requestFocus();
  538. etOrderNumber.setSelection(etOrderNumber.getText().toString().length());
  539. }
  540. private void checkSubmit(){
  541. if (mapPictureSelector.get("label_img").getOssPhotoList().size()==0){
  542. return;
  543. }
  544. if (showWeightImg && mapPictureSelector.get("weight_img").getOssPhotoList().size()==0){
  545. return;
  546. }
  547. if (takePictureBeanList.size()>0){
  548. for (int i=0;i<takePictureBeanList.size();i++){
  549. if (mapPictureSelector.get(takePictureBeanList.get(i).getField()).getOssPhotoList().size()==0){
  550. return;
  551. }
  552. }
  553. }
  554. pictureInbound();
  555. initUnitCode();
  556. }
  557. private void pictureInbound(){
  558. isRequiredShow = true;
  559. if (!validate()){
  560. return;
  561. }
  562. // if (!checkRepeat(Urls.FXY_DETECTION_PUTIN+(postParam.toString()))){
  563. // Toast.makeText(this, getString(R.string.error_data_processed), Toast.LENGTH_LONG).show();
  564. // return;
  565. // }
  566. OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN).upJson(postParam)
  567. .execute(new MyDialogCallback(this, true, false) {
  568. @Override
  569. public void onSuccess(Response<String> response) {
  570. super.onSuccess(response);
  571. }
  572. });
  573. //假成功
  574. showSuccessToast("success");
  575. }
  576. //完成入库
  577. private void finishInbound(){
  578. isRequiredShow = true;
  579. if (etTrackingNumber.getText().toString().isEmpty()){
  580. showWarningToast(etTrackingNumber.getHint().toString());
  581. return ;
  582. }
  583. if (etOrderNumber.getText().toString().isEmpty()){
  584. showWarningToast(etOrderNumber.getHint().toString());
  585. return ;
  586. }
  587. HashMap<String,Object> postData = new HashMap<>();
  588. postData.put("box_number",etOrderNumber.getText().toString().trim());
  589. postData.put("tracking_number",etTrackingNumber.getText().toString().trim());
  590. String body = (new Gson()).toJson(postData);
  591. OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_DETECTION_PUTIN).upJson(body)
  592. .execute(new MyDialogCallback(this, true, false) {
  593. @Override
  594. public void onSuccess(Response<String> response) {
  595. super.onSuccess(response);
  596. try {
  597. ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
  598. // if(bean.code == 1){
  599. // showSuccessToast(bean.msg);
  600. // }else{
  601. // showWarningToast(bean.msg);
  602. // }
  603. } catch (Exception e) {
  604. e.printStackTrace();
  605. XLog.e("添加开箱拆柜数据结果返回错误",e.getMessage());
  606. }
  607. }
  608. });
  609. //假成功
  610. showSuccessToast("success");
  611. initFinish();
  612. }
  613. public void initUnitCode(){
  614. isRequiredShow = false;
  615. for (String key : mapPictureSelector.keySet()) {
  616. if (!baseImgList.contains(key)){
  617. mapPictureSelector.get(key).emptyRemake();
  618. }
  619. }
  620. etUnitCode.setText("");
  621. etUnitCode.requestFocus();
  622. llLabelPicture.setVisibility(View.GONE);
  623. }
  624. private void initFinish(){
  625. initUnitCode();
  626. for (int i=0;i<baseImgList.size();i++){
  627. if (mapPictureSelector.containsKey(baseImgList.get(i))){
  628. mapPictureSelector.get(baseImgList.get(i)).emptyRemake();
  629. }
  630. }
  631. llResult.setVisibility(View.GONE);
  632. llWeighPicture.setVisibility(View.GONE);
  633. llLabelPicture.setVisibility(View.VISIBLE);
  634. takePictureBeanList.clear();
  635. setCameraPicture();
  636. etTrackingNumber.setText("");
  637. etOrderNumber.setText("");
  638. etTrackingNumber.requestFocus();
  639. }
  640. /*
  641. * 校验必录
  642. */
  643. private boolean validate(){
  644. if (etTrackingNumber.getText().toString().isEmpty()){
  645. showWarningToast(etTrackingNumber.getHint().toString());
  646. return false;
  647. }
  648. if (etOrderNumber.getText().toString().isEmpty()){
  649. showWarningToast(etOrderNumber.getHint().toString());
  650. return false;
  651. }
  652. if (etUnitCode.getText().toString().isEmpty()){
  653. showWarningToast(etUnitCode.getHint().toString());
  654. return false;
  655. }
  656. try {
  657. postParam = new JSONObject();
  658. Gson gson = new Gson();
  659. List<String> stringList = mapPictureSelector.get("label_img").getOssPhotoList();
  660. if (stringList.size()==0){
  661. showWarningToast("面单照片不能为空");
  662. return false;
  663. }
  664. postParam.put("label_img_tag",mapPictureSelector.get("label_img").getUniqueTag());
  665. postParam.put("label_img",gson.toJson(stringList));
  666. AsyncUpload weightUpload = mapPictureSelector.get("weight_img");
  667. if (showWeightImg && weightUpload!=null){
  668. List<String> weighPhotoList = weightUpload.getOssPhotoList();
  669. if (weighPhotoList.size()==0){
  670. showWarningToast("内件照片不能为空");
  671. return false;
  672. }
  673. postParam.put("weight_img_tag",weightUpload.getUniqueTag());
  674. postParam.put("weight_img",gson.toJson(weighPhotoList));
  675. }
  676. //拍照
  677. if (takePictureBeanList.size()>0){
  678. JSONObject otherObject = new JSONObject();
  679. for (int i=0; i < takePictureBeanList.size();i++){
  680. String name = takePictureBeanList.get(i).getField();
  681. if (!mapPictureSelector.containsKey(name) ){
  682. showErrorToast("页面渲染异常,请更新操作");
  683. }
  684. List<String> tmpList = mapPictureSelector.get(name).getOssPhotoList();
  685. if (tmpList.size() == 0){
  686. showWarningToast("请上传".concat(takePictureBeanList.get(i).getTitle()).concat("拍照"));
  687. }
  688. otherObject.put(name,gson.toJson(tmpList));
  689. }
  690. postParam.put("other_img",otherObject);
  691. }
  692. postParam.put("box_number",etOrderNumber.getText().toString().trim());
  693. postParam.put("tracking_number",etTrackingNumber.getText().toString().trim());
  694. postParam.put("unit_code",etUnitCode.getText().toString().trim());
  695. } catch (JSONException e) {
  696. showWarningToast("系统异常"+e.getMessage());
  697. e.printStackTrace();
  698. return false;
  699. }
  700. return true;
  701. }
  702. private void iniPhoto(){
  703. // HashMap<String, Object> map = new HashMap<>();
  704. // map.put("disabled",false);
  705. // map.put("error","不可拍照");
  706. // labelPictureSelectorUpload.setLimitOperate(map);
  707. // weighPictureSelectorUpload.setLimitOperate(map);
  708. }
  709. //sIsGoodinfoMatch,sIsBattery,sIsMagnetic,sIsWood,sIsExtra,sIsOther
  710. @OnClick({R.id.btn_confirm,R.id.btn_start_upload})
  711. public void onViewClicked(View view) {
  712. Bundle bundle = new Bundle();
  713. switch (view.getId()) {
  714. case R.id.btn_confirm:
  715. finishInbound();
  716. break;
  717. case R.id.btn_start_upload:
  718. if (currentUploadStatus) {
  719. operateStopUpload();
  720. } else {
  721. operateStartUpload();
  722. }
  723. default:
  724. break;
  725. }
  726. }
  727. private void operateStopUpload(){
  728. if (currentUploadStatus){
  729. mapPictureSelector.get("label_img").setStopUpload();
  730. currentUploadStatus = false;
  731. btnStartUpload.setText("开始上传");
  732. llUploadProgressbar.setVisibility(View.GONE);
  733. }
  734. }
  735. private void operateStartUpload(){
  736. if (!currentUploadStatus){
  737. mapPictureSelector.get("label_img").setStartUpload();
  738. currentUploadStatus = true;
  739. btnStartUpload.setText("停止上传");
  740. llUploadProgressbar.setVisibility(View.VISIBLE);
  741. }
  742. }
  743. protected void showBack() {
  744. super.showBack();
  745. tb_iv_left.setOnClickListener(new View.OnClickListener() {
  746. @Override
  747. public void onClick(View v) {
  748. int num = mapPictureSelector.get("label_img").getAwaitNum();
  749. if (num>0){
  750. new AlertDialog.Builder(mContext).setTitle(R.string.dl_hint)
  751. .setMessage("返回会取消上传还有"+num+"条数据未上传,确定要返回吗")
  752. .setNegativeButton(R.string.str_cancel, new DialogInterface.OnClickListener() {
  753. @Override
  754. public void onClick(DialogInterface dialogInterface, int i) {
  755. if (!currentUploadStatus){
  756. operateStartUpload();
  757. }
  758. dialogInterface.dismiss();
  759. }
  760. }).setPositiveButton(R.string.str_submit, new DialogInterface.OnClickListener() {
  761. @Override
  762. public void onClick(DialogInterface dialogInterface, int i) {
  763. if (isShowBackDialog) {
  764. onBackPressedSupport();
  765. } else {
  766. finish();
  767. }
  768. }
  769. }).show();
  770. }else{
  771. if (isShowBackDialog) {
  772. onBackPressedSupport();
  773. } else {
  774. finish();
  775. }
  776. }
  777. }
  778. });
  779. }
  780. @Subscribe(threadMode = ThreadMode.MAIN)
  781. public void onUploadProgress(UploadProgressEvent event) {
  782. // 更新进度条或其他 UI 元素
  783. int num = event.getProgress();
  784. pbProgressbar.setProgress(num);
  785. tvPercentageTextView.setText(String.valueOf(num).concat("%"));
  786. }
  787. @Override
  788. protected void onDestroy() {
  789. unbinder.unbind();
  790. for (AsyncUpload asyncUpload : mapPictureSelector.values()) {
  791. asyncUpload.removeHandler();
  792. }
  793. super.onDestroy();
  794. }
  795. @Override
  796. protected void onResume() {
  797. super.onResume();
  798. initReceiver();
  799. }
  800. @Override
  801. protected void onPause() {
  802. super.onPause();
  803. //销毁在onResume()方法中的广播
  804. try {
  805. //停止扫描
  806. Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
  807. if (is_broadcast==0){
  808. StoTongJNI.getIns(mContext).SetScannerStop();
  809. StoTongJNI.getIns(mContext).SetScannerOff();
  810. }else{
  811. unregisterReceiver(mReceiver);
  812. }
  813. }catch (Exception e){
  814. XLog.e("销毁广播失败:",e.getMessage());
  815. }
  816. }
  817. }