OrderToolMainActivity.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056
  1. package com.fxy.tool;
  2. import android.annotation.SuppressLint;
  3. import android.content.BroadcastReceiver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.content.IntentFilter;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.support.v7.widget.LinearLayoutManager;
  11. import android.support.v7.widget.RecyclerView;
  12. import android.text.Editable;
  13. import android.text.TextWatcher;
  14. import android.view.KeyEvent;
  15. import android.view.View;
  16. import android.view.ViewGroup;
  17. import android.view.inputmethod.EditorInfo;
  18. import android.widget.EditText;
  19. import android.widget.ImageButton;
  20. import android.widget.ImageView;
  21. import android.widget.LinearLayout;
  22. import android.widget.RadioButton;
  23. import android.widget.TextView;
  24. import com.chad.library.adapter.base.BaseQuickAdapter;
  25. import com.chad.library.adapter.base.BaseViewHolder;
  26. import com.elvishew.xlog.XLog;
  27. import com.fxy.R;
  28. import com.fxy.baselibrary.base.BaseActivity;
  29. import com.fxy.baselibrary.bean.BaseEventBusBean;
  30. import com.fxy.baselibrary.interfaces.OnRxScanerListener;
  31. import com.fxy.baselibrary.qrcode.ActivityScanerCode;
  32. import com.fxy.baselibrary.util.DateUtil;
  33. import com.fxy.baselibrary.util.HideUtil;
  34. import com.fxy.baselibrary.util.JsonUtil;
  35. import com.fxy.baselibrary.util.StringUtils;
  36. import com.fxy.bean.ActionBean;
  37. import com.fxy.bean.ScanBean;
  38. import com.fxy.constant.BaseConfig;
  39. import com.fxy.constant.EventCode;
  40. import com.fxy.net.MyDialogCallback;
  41. import com.fxy.net.Urls;
  42. import com.fxy.realm.ToolScanRealm;
  43. import com.fxy.tool.bean.ToolBean;
  44. import com.fxy.tool.bean.ToolDetailBean;
  45. import com.fxy.view.FloatingImageView;
  46. import com.google.zxing.Result;
  47. import com.jaredrummler.materialspinner.MaterialSpinner;
  48. import com.lzy.okgo.OkGo;
  49. import com.lzy.okgo.model.Response;
  50. import org.json.JSONException;
  51. import org.json.JSONObject;
  52. import java.util.ArrayList;
  53. import java.util.Collections;
  54. import java.util.HashMap;
  55. import java.util.List;
  56. import java.util.Map;
  57. import java.util.Objects;
  58. import java.util.UUID;
  59. import butterknife.BindView;
  60. import butterknife.ButterKnife;
  61. import butterknife.OnClick;
  62. import butterknife.Unbinder;
  63. import io.realm.Realm;
  64. import io.realm.RealmQuery;
  65. import io.realm.RealmResults;
  66. import sto.android.app.StoJNI;
  67. import sto.android.app.StoPdaKeyEvent;
  68. import sto.android.app.StoTongJNI;
  69. public class OrderToolMainActivity extends BaseActivity implements StoJNI.ScanCallBack {
  70. /**
  71. * 列表适配器
  72. */
  73. Context mContext = this;
  74. //单号清除
  75. @BindView(R.id.ib_order_no_clear)
  76. ImageButton ibOrderNoClear;
  77. //单号
  78. @BindView(R.id.et_order_no)
  79. EditText etOrderNo;
  80. @BindView(R.id.recyclerview)
  81. RecyclerView recyclerView;
  82. //浮动按钮
  83. @BindView(R.id.iv_drag)
  84. FloatingImageView iv_drag;
  85. private View notDataView; //没有数据显示页
  86. private View errorView; //错误显示页
  87. private View emptyView; //空显示页
  88. /**
  89. * 列表适配器
  90. */
  91. private FinishWorkAdapter mAdapter;
  92. //扫码扫码动作
  93. private ScanBean scanBean;
  94. private List<ToolBean> batchList = new ArrayList<>() ;
  95. private JSONObject batchDetails ;
  96. //扫描数据
  97. private List<ToolDetailBean> scanShowList = new ArrayList<>() ;
  98. //扫描记录
  99. //private JSONObject scanOrderList = new JSONObject() ; citys = new String[jsonArray.length()][];
  100. private String scanBatch = "";
  101. private Map<Integer,List<ToolDetailBean>> cacheList = new HashMap<>();
  102. private Unbinder unbinder;
  103. @BindView(R.id.ms_batch)
  104. MaterialSpinner batchSpinner;
  105. //默认是
  106. private Integer batchIdx=0;
  107. // 默认校验
  108. private boolean isVerify = true;
  109. //是否开启声音
  110. private boolean isSound = true;
  111. @Override
  112. public int getContentViewResId() {
  113. return R.layout.activity_fxy_order_tool;
  114. }
  115. @Override
  116. public boolean showToolBar() {
  117. return true;
  118. }
  119. @Override
  120. public boolean openEventBus() {
  121. return true;
  122. }
  123. @Override
  124. protected void getBundleExtras(Bundle bundle) {
  125. }
  126. //finish的返回监听
  127. //这里的requestCode参数,就是上面设置的 1 ,当跳转的页面返回的时候,通过这个加以判断
  128. //resultCode ,这个参数是在跳转的页面里面规定的,它也是一个int类型的标志
  129. //第三个参数包含了返回的值
  130. //如果不需要所跳转的页面返回值,也就不需要这个方法了
  131. @Override
  132. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  133. super.onActivityResult(requestCode, resultCode, data);
  134. // XLog.e("requestCode:"+requestCode);
  135. // XLog.e("resultCode:"+resultCode);
  136. if (requestCode == 200 && resultCode == 200)//之前提到的两个标志,在这里显示出了作用
  137. {
  138. }else if (resultCode==0){
  139. }
  140. }
  141. /**
  142. * EventBus接收信息的方法,开启后才会调用(非粘性事件)
  143. *
  144. * @param event
  145. */
  146. @Override
  147. protected void EventBean(BaseEventBusBean event) {
  148. // XLog.e("----------接收返回--------------");
  149. // XLog.e("接收返回:"+event.getEventCode());
  150. if (event != null && event.getEventCode() == EventCode.displacement_refresh){
  151. }
  152. }
  153. @Override
  154. public boolean isPlayMusic() {
  155. return true;
  156. }
  157. @Override
  158. protected void initView() {
  159. unbinder = ButterKnife.bind(this);
  160. setTitleName("小工具");
  161. initAdapter();
  162. initData();
  163. initEdit();
  164. //监听浮动按钮
  165. iv_drag.setOnClickListener(new View.OnClickListener() {
  166. @Override
  167. public void onClick(View v) {
  168. if(!iv_drag.isDrag()){
  169. ActivityScanerCode.setScanerListener(mScanerListener);
  170. ActivityScanerCode.intent2Activity(mContext, BaseConfig.COMMON_SCANNER_ONLY);
  171. }
  172. }
  173. });
  174. //
  175. scanBatch = UUID.randomUUID().toString();
  176. }
  177. protected void showBack() {
  178. super.showBack();
  179. tb_iv_left.setOnClickListener(new View.OnClickListener() {
  180. @Override
  181. public void onClick(View v) {
  182. int num = cheatPush();
  183. if (num>0){
  184. showErrorToast("还有"+num+"条数据未上传成功");
  185. }else{
  186. HideUtil.hideSoftKeyboard(OrderToolMainActivity.this);
  187. if (isShowBackDialog) {
  188. onBackPressedSupport();
  189. } else {
  190. finish();
  191. }
  192. }
  193. }
  194. });
  195. }
  196. protected void intSpinner(){
  197. List<String> spinnerList = new ArrayList<String>();
  198. for (int i = 0;i < batchList.size(); i++){
  199. spinnerList.add(batchList.get(i).getBatchName());
  200. }
  201. batchSpinner.setItems(spinnerList);
  202. batchSpinner.setSelectedIndex(batchIdx);
  203. batchSpinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {
  204. @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
  205. try {
  206. batchIdx = position;
  207. isVerify = batchList.get(position).getRules() == 1;
  208. List<ToolDetailBean> tmpList = new ArrayList<>();
  209. if (cacheList.get(position)!=null){
  210. tmpList = cacheList.get(position);
  211. }else{
  212. tmpList.clear();
  213. mAdapter.setEmptyView(emptyView);
  214. }
  215. scanShowList.clear();
  216. scanShowList.addAll(tmpList);
  217. Collections.reverse(scanShowList);
  218. mAdapter.setNewData(scanShowList);
  219. mAdapter.notifyDataSetChanged();
  220. }catch (Exception e){
  221. XLog.e("切换包错误",e.getMessage());
  222. }
  223. getDetails();
  224. }
  225. });
  226. }
  227. private void initData(){
  228. try {
  229. final JSONObject jsonObject = new JSONObject();
  230. OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_GET_BATCH_LIST).upJson(jsonObject)
  231. .execute(new MyDialogCallback(this, true, true) {
  232. @Override
  233. public void onSuccess(Response<String> response) {
  234. super.onSuccess(response);
  235. try {
  236. ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
  237. if(bean.code == 1){
  238. batchList = JsonUtil.jsonString2Beans(bean.data, ToolBean.class);
  239. intSpinner();
  240. getDetails();
  241. isVerify = batchList.get(0).getRules() == 1;
  242. etOrderNo.setEnabled(true);
  243. etOrderNo.requestFocus();
  244. }else{
  245. showWarningToast(bean.msg);
  246. }
  247. } catch (Exception e) {
  248. e.printStackTrace();
  249. showEmptyView("批次信息解析错误:"+e.getMessage());
  250. XLog.e("获取批次信息解析错误",e.getMessage());
  251. }
  252. }
  253. });
  254. //查询
  255. // RealmQuery query = mRealm.where(ToolScanRealm.class);
  256. // RealmResults list = query.findAll();
  257. // if(list==null || list.size()==0){
  258. // XLog.e( "query: no data!" );
  259. // }else{
  260. // XLog.e("query: size: "+list.size());
  261. // ToolScanRealm tmpRealm = (ToolScanRealm) list.get(0);
  262. // XLog.e("query: "+tmpRealm.getNumber() );
  263. // }
  264. }catch (Exception e){
  265. batchList.size();
  266. XLog.e("请求批次信息错误:"+e.getMessage(),e);
  267. }
  268. }
  269. /**
  270. * 获取批次详情
  271. */
  272. private void getDetails(){
  273. try {
  274. final JSONObject jsonObject = new JSONObject();
  275. jsonObject.put("id",batchList.get(batchIdx).getId());
  276. OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_GET_BATCH_DETAILS).upJson(jsonObject)
  277. .execute(new MyDialogCallback(this, true, true) {
  278. @Override
  279. public void onSuccess(Response<String> response) {
  280. super.onSuccess(response);
  281. try {
  282. ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
  283. batchDetails = new JSONObject();
  284. if(bean.code == 1){
  285. if (StringUtils.isNotEmpty(bean.data)) {
  286. batchDetails = new JSONObject(bean.data);
  287. }
  288. }else{
  289. showWarningToast(bean.msg);
  290. }
  291. } catch (Exception e) {
  292. e.printStackTrace();
  293. showEmptyView("批次详情解析错误:"+e.getMessage());
  294. XLog.e("获取批次详情解析错误",e.getMessage());
  295. }
  296. }
  297. });
  298. }catch (Exception e){
  299. batchList.size();
  300. XLog.e("请求批次详情错误:"+e.getMessage(),e);
  301. }
  302. }
  303. public void onRadioButtonClicked(View view) {
  304. RadioButton button = (RadioButton) view;
  305. boolean isChecked = button.isChecked();
  306. switch (view.getId()) {
  307. case R.id.rb_open_sound:
  308. isSound = true;
  309. break;
  310. case R.id.rb_turn_off_sound:
  311. isSound = false;
  312. break;
  313. default:
  314. break;
  315. }
  316. }
  317. protected void pushData(final int batch_inx,final int inx) {
  318. // 启动一个线程来做一些我们不应该在UI线程中直接做的工作
  319. Thread t = new Thread() {
  320. public void run() {
  321. try {
  322. ToolDetailBean toolDetailBean = cacheList.get(batch_inx).get(inx);
  323. JSONObject jsonObject = new JSONObject();
  324. jsonObject.put("batch_inx",batch_inx);
  325. jsonObject.put("inx",inx);
  326. jsonObject.put("realm_id",toolDetailBean.getRealmId());
  327. jsonObject.put("id",toolDetailBean.getId());
  328. jsonObject.put("rules",toolDetailBean.getRules());
  329. jsonObject.put("tool_data_id",toolDetailBean.getToolDataId());
  330. jsonObject.put("number",toolDetailBean.getNumber());
  331. jsonObject.put("scan_date",toolDetailBean.getScanDate());
  332. OkGo.<String>post(Urls.getServiceAddress(getApplicationContext()) + Urls.FXY_ADD_SCAN_RESULT).upJson(jsonObject)
  333. .execute(new MyDialogCallback(getApplicationContext(), true, false) {
  334. @Override
  335. public void onSuccess(Response<String> response) {
  336. super.onSuccess(response);
  337. try {
  338. ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
  339. JSONObject data = new JSONObject(bean.data);
  340. int position = data.getInt("inx");
  341. int batch_inx = data.getInt("batch_inx");
  342. int push_status = bean.code == 1 ? 1 : 2;
  343. List<ToolDetailBean> list = cacheList.get(batch_inx);
  344. ToolDetailBean tmpBean = list.get(position);;
  345. tmpBean.setPushStatus(push_status);
  346. cacheList.put(batch_inx,list);
  347. updateResult(batch_inx,position);
  348. // 保存一下数据
  349. mRealm.beginTransaction();
  350. RealmQuery query = mRealm.where(ToolScanRealm.class);
  351. RealmResults realList = query.equalTo("id",tmpBean.getRealmId()).findAll();
  352. if(realList.size() > 0){
  353. ToolScanRealm tmpRealm = (ToolScanRealm) realList.get(0);
  354. tmpRealm.setPushStatus(push_status);
  355. }
  356. mRealm.commitTransaction();
  357. if (bean.msg.equals("重复扫描")){
  358. showRepeatToast("重复扫描");
  359. }
  360. } catch (Exception e) {
  361. e.printStackTrace();
  362. showEmptyView("上传失败:"+e.getMessage());
  363. XLog.e("获取批次详情解析错误",e.getMessage());
  364. }
  365. }
  366. });
  367. }catch (Exception e){
  368. XLog.e("请求上传错误:"+e.getMessage(),e);
  369. }
  370. }
  371. };
  372. t.start();
  373. }
  374. @SuppressLint("HandlerLeak")
  375. Handler resultHandler = new Handler() {
  376. @Override
  377. public void handleMessage(Message msg) {
  378. ToolDetailBean tmpBean ;
  379. switch (msg.what){
  380. //添加日志
  381. case 1:
  382. List<ToolDetailBean> list = cacheList.get(batchIdx);
  383. if (list==null){
  384. list = new ArrayList<>();
  385. }
  386. int inx = list.size();
  387. tmpBean = JsonUtil.getObject(msg.obj.toString(), ToolDetailBean.class); ;
  388. list.add(tmpBean);
  389. cacheList.put(batchIdx,list);
  390. pushData(batchIdx,inx);
  391. //倒序显示
  392. scanShowList.clear();
  393. scanShowList.addAll(cacheList.get(batchIdx));
  394. Collections.reverse(scanShowList);
  395. mAdapter.setNewData(scanShowList);
  396. mAdapter.notifyDataSetChanged();
  397. System.out.println("总条数:"+inx);
  398. break;
  399. // 修改日志
  400. case 2:
  401. int batch_inx = msg.arg1;
  402. //倒序显示
  403. List<ToolDetailBean> newList = cacheList.get(batch_inx);
  404. //倒序显示
  405. scanShowList.clear();
  406. scanShowList.addAll(newList);
  407. Collections.reverse(scanShowList);
  408. mAdapter.setNewData(scanShowList);
  409. mAdapter.notifyDataSetChanged();
  410. break;
  411. }
  412. }
  413. };
  414. private void addResult(String str){
  415. Message msg = new Message();
  416. msg.what = 1;
  417. msg.obj = str;
  418. resultHandler.sendMessage(msg);
  419. }
  420. private void updateResult(int batch_inx,int inx){
  421. Message msg = new Message();
  422. msg.what = 2;
  423. msg.arg1 = batch_inx;
  424. msg.arg2 = inx;
  425. msg.obj = "";
  426. resultHandler.sendMessage(msg);
  427. }
  428. @Override
  429. public boolean dispatchKeyEvent(KeyEvent event) {
  430. //XLog.e("Action:"+event.getAction()+"---event:"+event.getKeyCode());
  431. if ((event.getKeyCode()==KeyEvent.KEYCODE_DPAD_CENTER ) && event.getAction() == KeyEvent.ACTION_DOWN){
  432. if(validate()){
  433. doVerify();
  434. }
  435. return true;
  436. }
  437. return super.dispatchKeyEvent(event);
  438. }
  439. //监听按键
  440. public boolean onKeyDown(int keyCode, KeyEvent event) {
  441. //XLog.e("监听按键:"+keyCode);XLog.e(event);
  442. if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
  443. int num = cheatPush();
  444. if (num>0){
  445. showErrorToast("还有"+num+"条数据未上传成功");
  446. return false;
  447. }
  448. }
  449. if (scanBean.getIsBroadcast()==0 && StoTongJNI.getIns(mContext).getEventFuction(keyCode) == StoPdaKeyEvent.KEYCODE_SCAN
  450. && event.getRepeatCount() == 0) {
  451. if (StoTongJNI.getIns(mContext).GetScannerIsScanning()) {
  452. //
  453. } else {
  454. StoTongJNI.getIns(mContext).SetScannerStart();
  455. }
  456. }
  457. return super.onKeyDown(keyCode, event);
  458. }
  459. @SuppressLint("HandlerLeak")
  460. Handler scanHandler = new Handler() {
  461. @Override
  462. public void handleMessage(Message msg) {
  463. // TODO Auto-generated method stub
  464. if (msg.obj != null) {
  465. String scanResult = msg.obj.toString().trim();
  466. if (!scanResult.isEmpty()){
  467. setScanResult(scanResult);
  468. }
  469. }
  470. }
  471. };
  472. @Override
  473. public void onScanResults(String str) {
  474. Message msg = new Message();
  475. msg.obj = str;
  476. scanHandler.sendMessage(msg);
  477. }
  478. @Override
  479. public void onScanResults(String str, int type) {
  480. }
  481. /**
  482. * 定义广播接受
  483. */
  484. BroadcastReceiver mReceiver = new BroadcastReceiver() {
  485. @Override
  486. public void onReceive(Context context, Intent intent) {
  487. String scanResult = intent.getStringExtra(scanBean.getDataName());
  488. if (scanResult==null){return; }
  489. String scanStatus = "";
  490. if (!scanBean.getStatusName().isEmpty()){
  491. scanStatus = intent.getStringExtra(scanBean.getStatusName());
  492. }else{
  493. scanStatus = scanResult.isEmpty()? "" : "ok"; //有值 默认是扫码成功;
  494. }
  495. //新大陆(MT65,MT90) 需要手动关闭
  496. if (!scanBean.getActionStop().isEmpty()){
  497. Intent stopIntent = new Intent(scanBean.getActionStop());
  498. mContext.sendBroadcast(stopIntent);
  499. }
  500. if ("ok".equals(scanStatus)){
  501. setScanResult(scanResult);
  502. }else{
  503. showErrorToast(getString(R.string.scan_failed));
  504. }
  505. }
  506. };
  507. /**
  508. * 注册广播
  509. */
  510. private void initReceiver(){
  511. try {
  512. String scanStr = getScanSetting();
  513. scanBean = JsonUtil.getObject(scanStr, ScanBean.class);
  514. Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
  515. if (is_broadcast ==1){
  516. IntentFilter mFilter = new IntentFilter(scanBean.getAction());
  517. this.registerReceiver(mReceiver, mFilter);
  518. }else{
  519. //不广播进行处理 jni模式
  520. String pdaBrand = StoTongJNI.getmPdaBrand();
  521. if (!pdaBrand.isEmpty()){
  522. StoTongJNI.getIns(this).setmScanCB(this);
  523. StoTongJNI.getIns(this).SetScannerOn();
  524. }
  525. }
  526. }catch (Exception e) {
  527. showErrorToast("获取扫码配置失败"+e.getMessage());
  528. XLog.e("获取扫码配置失败:" + e.getMessage());
  529. }
  530. }
  531. //统一按钮回调
  532. public void callbackEditor(View v){
  533. switch (v.getId()) {
  534. case R.id.et_order_no:
  535. doVerify();
  536. break;
  537. default:
  538. }
  539. }
  540. private void initEdit() {
  541. List<EditText> list = new ArrayList<>();
  542. list.add(etOrderNo);
  543. unifyEdit(list);
  544. }
  545. private OnRxScanerListener mScanerListener = new OnRxScanerListener() {
  546. @Override
  547. public void onSuccess(String type, Result result) {
  548. String scanResult = result.getText();
  549. switch (type){
  550. case BaseConfig.COMMON_SCANNER_ONLY:
  551. setScanResult(scanResult);
  552. break;
  553. }
  554. }
  555. @Override
  556. public void onFail(String type, String message) {
  557. }
  558. };
  559. //把扫描结果赋值
  560. private void setScanResult(String scanResult){
  561. //获取焦点的view对象
  562. View view=getWindow().getDecorView().findFocus();
  563. //如果是EditText
  564. if(view instanceof EditText)
  565. {
  566. ((EditText) view).setText(scanResult);
  567. //执行回调
  568. callbackEditor(view);
  569. }
  570. }
  571. public void doVerify() {
  572. //校验数据
  573. if (!validate()){
  574. return;
  575. }
  576. try {
  577. String number = etOrderNo.getText().toString().trim();
  578. JSONObject param = new JSONObject();
  579. String realmId = UUID.randomUUID().toString();
  580. int tool_data_id = 0;
  581. int id = 0;
  582. int rules = batchList.get(batchIdx).getRules();//默认不校验
  583. String scan_date = DateUtil.getCurDateStr(DateUtil.FORMAT_YMDHMS);
  584. if (batchDetails.has(number)){
  585. JSONObject tmpObject = batchDetails.getJSONObject(number.toUpperCase());
  586. if (tmpObject.has("scan_date") && !tmpObject.getString("scan_date").equals("")){
  587. showRepeatToast("订单已扫描");
  588. return ;
  589. };
  590. id = tmpObject.getInt("id");
  591. }
  592. tool_data_id = batchList.get(batchIdx).getId();
  593. param.put("realm_id",realmId);
  594. param.put("number",number);
  595. param.put("is_verify",isVerify);
  596. param.put("tool_data_id",tool_data_id);
  597. param.put("id",id);
  598. param.put("rules",rules);
  599. param.put("scan_date",scan_date);
  600. addResult(param.toString());
  601. // if (cacheList.get(batchIdx)!=null && cacheList.get(batchIdx).size()<50000){
  602. // for (int u=0;u<5000;u++){
  603. // param.put("number",number+u);
  604. // addResult(param.toString());
  605. // }
  606. // }
  607. //同步操作写法一:
  608. mRealm.beginTransaction();
  609. //会创建对象和user表
  610. ToolScanRealm toolScan = mRealm.createObject(ToolScanRealm.class,realmId);
  611. //会自动更新表
  612. toolScan.setScanBatch(scanBatch);
  613. toolScan.setNumber(number);
  614. toolScan.setToolDataId(tool_data_id);
  615. toolScan.setDetailsId(id);
  616. toolScan.setRules(rules);
  617. toolScan.setScanDate(scan_date);
  618. //提交事务,操作就被执行
  619. mRealm.commitTransaction();
  620. if (!isVerify){
  621. showSuccessToast("扫描成功");
  622. clearData();
  623. }else{
  624. if (id>0){
  625. showSuccessToast("订单匹配成功");
  626. clearData();
  627. }else{
  628. showErrorToast("订单不存在");
  629. clearData();
  630. }
  631. }
  632. } catch (JSONException e) {
  633. showEmptyView("请求入库失败:"+e.getMessage());
  634. e.printStackTrace();
  635. }
  636. }
  637. /*
  638. * 校验必录
  639. */
  640. private boolean validate(){
  641. if (batchDetails==null){
  642. showWarningToast("该批次无数据");
  643. return false;
  644. }
  645. if(!checkNull(etOrderNo)){
  646. setEditTextFocused(etOrderNo,true);
  647. showWarningToast(etOrderNo.getHint().toString());
  648. return false;
  649. }
  650. ToolBean toolBean = batchList.get(batchIdx);
  651. if (toolBean.getRules()==1 && cacheList.get(batchIdx) != null){
  652. String number = etOrderNo.getText().toString().trim();
  653. for (int i = 0; i <cacheList.get(batchIdx).size(); i++){
  654. if (cacheList.get(batchIdx).get(i).getNumber().toUpperCase().equals(number)){
  655. showRepeatToast("订单已扫描");
  656. return false;
  657. }
  658. }
  659. }
  660. return true;
  661. }
  662. private class FinishWorkAdapter extends BaseQuickAdapter<ToolDetailBean, BaseViewHolder>{
  663. public FinishWorkAdapter(List<ToolDetailBean> data){
  664. super(R.layout.item_card_intercept, data);
  665. }
  666. public void setNewData(List<ToolDetailBean> tmpList) {
  667. }
  668. @Override
  669. protected void convert(BaseViewHolder helper, ToolDetailBean item) {
  670. helper.addOnClickListener(R.id.ib_clear);//定义setOnItemChildClickListener 事件点击
  671. String status_str = "";
  672. switch (item.getPushStatus()){
  673. case 1:
  674. status_str = "已上传";
  675. break;
  676. case 2:
  677. status_str = "上传失败";
  678. break;
  679. default:
  680. status_str = "未上传";
  681. break;
  682. }
  683. helper.setText(R.id.tv_order_no,item.getNumber());
  684. helper.setText(R.id.tv_location,item.getScanDate());
  685. helper.setText(R.id.tv_status,status_str);
  686. }
  687. }
  688. private void initAdapter(){
  689. emptyView = this.getLayoutInflater().inflate(R.layout.pager_empty, (ViewGroup) recyclerView.getParent(), false);
  690. errorView = this.getLayoutInflater().inflate(R.layout.pager_error, (ViewGroup) recyclerView.getParent(), false);
  691. notDataView = emptyView;
  692. mAdapter = new FinishWorkAdapter(scanShowList);
  693. mAdapter.setEmptyView(emptyView);
  694. mAdapter.openLoadAnimation(BaseQuickAdapter.SCALEIN);
  695. recyclerView.setLayoutManager(new LinearLayoutManager(this));
  696. recyclerView.setAdapter(mAdapter);
  697. }
  698. //清除订单信息
  699. private void clearData() {
  700. etOrderNo.setText("");
  701. etOrderNo.requestFocus();
  702. setEditTextNormal(etOrderNo,true);
  703. }
  704. @OnClick({R.id.btn_batch_upload})
  705. public void onViewClicked(View view) {
  706. Bundle bundle = new Bundle();
  707. switch (view.getId()) {
  708. //批量上传
  709. case R.id.btn_batch_upload:
  710. int num = cheatPush();
  711. if (num>0){
  712. showSuccessToast("已上传"+num+"条数据");
  713. }else{
  714. showSuccessToast("数据已全部上传");
  715. }
  716. break;
  717. default:
  718. break;
  719. }
  720. }
  721. private int cheatPush(){
  722. int num = 0;
  723. for (int key : cacheList.keySet()) {
  724. if (cacheList.get(key)!=null){
  725. for (int j=0;j<cacheList.get(key).size();j++){
  726. for (int i=0;i<cacheList.get(key).size();i++){
  727. int push_status = cacheList.get(key).get(i).getPushStatus();
  728. if (push_status!=1){
  729. pushData(j,i);
  730. num++;
  731. }
  732. }
  733. }
  734. }
  735. }
  736. return num;
  737. }
  738. /**
  739. * 统一设置Edit监听
  740. * @param list
  741. */
  742. public void unifyEdit(List<EditText> list){
  743. for (int i=0;i<list.size();i++){
  744. EditText editText = list.get(i);
  745. LinearLayout linearLayout = (LinearLayout)editText.getParent();
  746. ImageButton imageButton = getChildImageButton(linearLayout);
  747. //监听扫描
  748. ImageView imageView = linearLayout.findViewById(R.id.ima_or_code);
  749. imageView.setOnClickListener(new View.OnClickListener() {
  750. @Override
  751. public void onClick(View v) {
  752. LinearLayout linearLayout = (LinearLayout)v.getParent();
  753. for( int i = 0; i < linearLayout.getChildCount(); i++ ){
  754. if( linearLayout.getChildAt(i) instanceof EditText ){
  755. ((EditText)linearLayout.getChildAt(i)).requestFocus();
  756. break;
  757. }
  758. }
  759. ActivityScanerCode.setScanerListener(mScanerListener);
  760. ActivityScanerCode.intent2Activity(mContext, BaseConfig.COMMON_SCANNER_ONLY);
  761. }
  762. });
  763. //监听按确定
  764. editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
  765. @Override
  766. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  767. //XLog.e("actionId:"+actionId);
  768. if (actionId == EditorInfo.IME_ACTION_SEND || actionId == EditorInfo.IME_ACTION_DONE ) {
  769. if (v.getText().toString().trim().isEmpty()) {
  770. setEditTextFocused(v,true);
  771. showWarningToast(v.getHint().toString());
  772. return false;
  773. }else{
  774. setEditTextNormal(v,true);
  775. }
  776. callbackEditor(v);
  777. return false;
  778. }
  779. return false;
  780. }
  781. });
  782. editText.addTextChangedListener(new TextWatcher() {
  783. public void onTextChanged(CharSequence s, int start, int before, int count) {
  784. EditText currentEditText = null;
  785. ImageButton currentImage = null;
  786. //获取焦点的view对象
  787. View view=getWindow().getDecorView().findFocus();
  788. //如果是EditText
  789. if(view instanceof EditText){
  790. currentEditText = (EditText) view;
  791. currentImage = getChildImageButton((LinearLayout)currentEditText.getParent());
  792. }
  793. if (s.length() > 0 ) {
  794. if (currentImage !=null ){
  795. currentImage.setVisibility(View.VISIBLE);
  796. }
  797. if (currentEditText!=null){
  798. setEditTextNormal(currentEditText,true);
  799. }
  800. } else {
  801. if (currentImage !=null ){
  802. currentImage.setVisibility(View.INVISIBLE);
  803. }
  804. if (currentEditText!=null){
  805. setEditTextFocused(currentEditText,true);
  806. }
  807. }
  808. }
  809. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  810. }
  811. public void afterTextChanged(Editable s) {
  812. }
  813. });
  814. if (imageButton !=null ){
  815. unifyClearEdit(imageButton);
  816. }
  817. }
  818. }
  819. @Override
  820. protected void onDestroy() {
  821. unbinder.unbind();
  822. super.onDestroy();
  823. }
  824. @Override
  825. protected void onResume() {
  826. super.onResume();
  827. initReceiver();
  828. }
  829. @Override
  830. protected void onPause() {
  831. super.onPause();
  832. //销毁在onResume()方法中的广播
  833. try {
  834. //停止扫描
  835. Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
  836. if (is_broadcast==0){
  837. StoTongJNI.getIns(mContext).SetScannerStop();
  838. StoTongJNI.getIns(mContext).SetScannerOff();
  839. }else{
  840. unregisterReceiver(mReceiver);
  841. }
  842. }catch (Exception e){
  843. XLog.e("销毁广播失败:",e.getMessage());
  844. }
  845. }
  846. }