CheckGoodsMainActivity.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. package com.fxy.putIn;
  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.TextView;
  23. import android.widget.Toast;
  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.adapter.GoodsAdapter;
  29. import com.fxy.base.StorageApplication;
  30. import com.fxy.baselibrary.base.BaseActivity;
  31. import com.fxy.baselibrary.bean.BaseEventBusBean;
  32. import com.fxy.baselibrary.interfaces.OnRxScanerListener;
  33. import com.fxy.baselibrary.qrcode.ActivityScanerCode;
  34. import com.fxy.baselibrary.util.JsonUtil;
  35. import com.fxy.baselibrary.util.StringUtils;
  36. import com.fxy.baselibrary.views.dialog.RxDialogZoomImageView;
  37. import com.fxy.bean.ActionBean;
  38. import com.fxy.bean.ScanBean;
  39. import com.fxy.constant.BaseConfig;
  40. import com.fxy.constant.EventCode;
  41. import com.fxy.net.MyDialogCallback;
  42. import com.fxy.net.Urls;
  43. import com.fxy.view.FloatingImageView;
  44. import com.google.zxing.Result;
  45. import com.lzy.okgo.OkGo;
  46. import com.lzy.okgo.model.Response;
  47. import org.json.JSONArray;
  48. import org.json.JSONException;
  49. import org.json.JSONObject;
  50. import java.util.ArrayList;
  51. import java.util.List;
  52. import butterknife.BindView;
  53. import butterknife.ButterKnife;
  54. import butterknife.OnClick;
  55. import butterknife.Unbinder;
  56. import sto.android.app.StoJNI;
  57. import sto.android.app.StoPdaKeyEvent;
  58. import sto.android.app.StoTongJNI;
  59. public class CheckGoodsMainActivity extends BaseActivity implements StoJNI.ScanCallBack {
  60. /**
  61. * 列表适配器
  62. */
  63. Context mContext = this;
  64. //单号清除
  65. @BindView(R.id.ib_order_no_clear)
  66. ImageButton ibOrderNoClear;
  67. //单号
  68. @BindView(R.id.et_order_no)
  69. EditText etOrderNo;
  70. //扫码扫码动作
  71. private ScanBean scanBean;
  72. private int order_id = 0;
  73. //订单信息对象
  74. private JSONObject inboundObject = new JSONObject();
  75. private List<JSONObject> goodsList = new ArrayList<>();
  76. protected String action;
  77. private Unbinder unbinder;
  78. //订单号
  79. private String orderNumber;
  80. private GoodsAdapter goodsAdapter;
  81. // 空显示页
  82. private View emptyView;
  83. @BindView(R.id.rc_check_goods)
  84. RecyclerView rcCheckGoods;
  85. //浮动按钮
  86. @BindView(R.id.iv_drag)
  87. FloatingImageView iv_drag;
  88. @Override
  89. public int getContentViewResId() {
  90. return R.layout.activity_fxy_check_goods;
  91. }
  92. @Override
  93. public boolean showToolBar() {
  94. return true;
  95. }
  96. @Override
  97. public boolean openEventBus() {
  98. return true;
  99. }
  100. @Override
  101. protected void getBundleExtras(Bundle bundle) {
  102. }
  103. //finish的返回监听
  104. //这里的requestCode参数,就是上面设置的 1 ,当跳转的页面返回的时候,通过这个加以判断
  105. //resultCode ,这个参数是在跳转的页面里面规定的,它也是一个int类型的标志
  106. //第三个参数包含了返回的值
  107. //如果不需要所跳转的页面返回值,也就不需要这个方法了
  108. @Override
  109. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  110. super.onActivityResult(requestCode, resultCode, data);
  111. if (requestCode == 200 && resultCode == 200)//之前提到的两个标志,在这里显示出了作用
  112. {
  113. String opt_status = data.getStringExtra("opt_status").toString();
  114. if (opt_status.equals("success")){
  115. etOrderNo.setText("");
  116. goodsList.clear();
  117. goodsAdapter.notifyDataSetChanged();
  118. }
  119. }
  120. }
  121. /**
  122. * EventBus接收信息的方法,开启后才会调用(非粘性事件)
  123. *
  124. * @param event
  125. */
  126. @Override
  127. protected void EventBean(BaseEventBusBean event) {
  128. // XLog.e("----------接收返回--------------");
  129. // XLog.e("接收返回:"+event.getEventCode());
  130. if (event != null && event.getEventCode() == EventCode.displacement_refresh){
  131. }
  132. }
  133. @Override
  134. public boolean isPlayMusic() {
  135. return true;
  136. }
  137. @Override
  138. protected void initView() {
  139. unbinder = ButterKnife.bind(this);
  140. setTitleName("货物查验");
  141. initEdit();
  142. initAdapter();
  143. iniData();
  144. //监听浮动按钮
  145. iv_drag.setOnClickListener(new View.OnClickListener() {
  146. @Override
  147. public void onClick(View v) {
  148. if(!iv_drag.isDrag()){
  149. ActivityScanerCode.setScanerListener(mScanerListener);
  150. ActivityScanerCode.intent2Activity(mContext, BaseConfig.COMMON_SCANNER_ONLY);
  151. }
  152. }
  153. });
  154. }
  155. @Override
  156. public boolean dispatchKeyEvent(KeyEvent event) {
  157. //XLog.e("event:"+event.getKeyCode());
  158. if ((event.getKeyCode()==KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode()==KeyEvent.KEYCODE_ENTER ) && event.getAction() == KeyEvent.ACTION_DOWN){
  159. //按确定键
  160. if(this.validate()){
  161. //getInboundInfo();
  162. }
  163. }
  164. return super.dispatchKeyEvent(event);
  165. }
  166. //监听按键
  167. public boolean onKeyDown(int keyCode, KeyEvent event) {
  168. XLog.e("监听按键:"+keyCode);XLog.e(event);
  169. if (scanBean.getIsBroadcast()==0 && StoTongJNI.getIns(mContext).getEventFuction(keyCode) == StoPdaKeyEvent.KEYCODE_SCAN
  170. && event.getRepeatCount() == 0) {
  171. if (StoTongJNI.getIns(mContext).GetScannerIsScanning()) {
  172. //
  173. } else {
  174. StoTongJNI.getIns(mContext).SetScannerStart();
  175. }
  176. }
  177. return super.onKeyDown(keyCode, event);
  178. }
  179. @SuppressLint("HandlerLeak")
  180. Handler scanHandler = new Handler() {
  181. @Override
  182. public void handleMessage(Message msg) {
  183. // TODO Auto-generated method stub
  184. if (msg.obj != null) {
  185. String scanResult = msg.obj.toString().trim();
  186. if (!scanResult.isEmpty()){
  187. setScanResult(scanResult);
  188. }
  189. }
  190. }
  191. };
  192. @Override
  193. public void onScanResults(String str) {
  194. Message msg = new Message();
  195. msg.obj = str;
  196. scanHandler.sendMessage(msg);
  197. }
  198. @Override
  199. public void onScanResults(String str, int type) {
  200. }
  201. /**
  202. * 定义广播接受
  203. */
  204. BroadcastReceiver mReceiver = new BroadcastReceiver() {
  205. @Override
  206. public void onReceive(Context context, Intent intent) {
  207. String scanResult = intent.getStringExtra(scanBean.getDataName());
  208. if (scanResult==null){return; }
  209. String scanStatus = "";
  210. if (!scanBean.getStatusName().isEmpty()){
  211. scanStatus = intent.getStringExtra(scanBean.getStatusName());
  212. }else{
  213. scanStatus = scanResult.isEmpty()? "" : "ok"; //有值 默认是扫码成功;
  214. }
  215. //新大陆(MT65,MT90) 需要手动关闭
  216. if (!scanBean.getActionStop().isEmpty()){
  217. Intent stopIntent = new Intent(scanBean.getActionStop());
  218. mContext.sendBroadcast(stopIntent);
  219. }
  220. if ("ok".equals(scanStatus)){
  221. setScanResult(scanResult);
  222. }else{
  223. showErrorToast(getString(R.string.scan_failed));
  224. }
  225. }
  226. };
  227. /**
  228. * 注册广播
  229. */
  230. private void initReceiver(){
  231. try {
  232. String scanStr = getScanSetting();
  233. scanBean = JsonUtil.getObject(scanStr, ScanBean.class);
  234. Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
  235. if (is_broadcast ==1){
  236. IntentFilter mFilter = new IntentFilter(scanBean.getAction());
  237. this.registerReceiver(mReceiver, mFilter);
  238. }else{
  239. //不广播进行处理 jni模式
  240. String pdaBrand = StoTongJNI.getmPdaBrand();
  241. if (!pdaBrand.isEmpty()){
  242. StoTongJNI.getIns(this).setmScanCB(this);
  243. StoTongJNI.getIns(this).SetScannerOn();
  244. }
  245. }
  246. }catch (Exception e) {
  247. showErrorToast("获取扫码配置失败"+e.getMessage());
  248. XLog.e("获取扫码配置失败:" + e.getMessage());
  249. }
  250. }
  251. private void initEdit() {
  252. //
  253. etOrderNo.setOnEditorActionListener(new TextView.OnEditorActionListener() {
  254. @Override
  255. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  256. if (actionId == EditorInfo.IME_ACTION_DONE) {
  257. String orderNo = etOrderNo.getText().toString().trim();
  258. if (StringUtils.isEmpty(orderNo)) {
  259. setEditTextFocused(v,true);
  260. showWarningToast(v.getHint().toString());
  261. return false;
  262. }
  263. getInboundInfo();//获取订单信息
  264. return false;
  265. }
  266. return false;
  267. }
  268. });
  269. etOrderNo.addTextChangedListener(new TextWatcher() {
  270. public void onTextChanged(CharSequence s, int start, int before, int count) {
  271. orderNumber = s.toString().trim();
  272. if (s.length() > 0 ) {
  273. if (etOrderNo.isEnabled()){
  274. ibOrderNoClear.setVisibility(View.VISIBLE);
  275. }
  276. setEditTextNormal(etOrderNo,true);
  277. } else {
  278. ibOrderNoClear.setVisibility(View.INVISIBLE);
  279. setEditTextFocused(etOrderNo,true);
  280. }
  281. }
  282. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  283. }
  284. public void afterTextChanged(Editable s) {
  285. }
  286. });
  287. ibOrderNoClear.setOnClickListener(new View.OnClickListener() {
  288. @Override
  289. public void onClick(View view) {
  290. etOrderNo.requestFocus();
  291. etOrderNo.getText().clear();
  292. }
  293. });
  294. }
  295. private void iniData(){
  296. }
  297. private void initAdapter() {
  298. emptyView = this.getLayoutInflater().inflate(R.layout.pager_empty, (ViewGroup) rcCheckGoods.getParent(), false);
  299. goodsAdapter = new GoodsAdapter(mContext,goodsList);
  300. goodsAdapter.setEmptyView(emptyView);
  301. goodsAdapter.openLoadAnimation(BaseQuickAdapter.SCALEIN);
  302. rcCheckGoods.setLayoutManager(new LinearLayoutManager(this));
  303. rcCheckGoods.setAdapter(goodsAdapter);
  304. // 卡片项点击事件
  305. goodsAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
  306. @Override
  307. public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
  308. //showLoadDialog("开始调整查验...");
  309. try {
  310. Bundle bundle = new Bundle();
  311. JSONObject goodsObject = goodsList.get(position);
  312. if (goodsObject.has("is_pass")){
  313. showErrorToast("已查验不需要重复操作");
  314. return;
  315. }
  316. bundle.putString("goods_object",goodsObject.toString());
  317. intentPageResult(CheckGoodsMainActivity.this, CheckGoodsDetailsMainActivity.class, bundle,200);
  318. }catch (Exception e){
  319. XLog.e("选中获取商品信息错误:",e);
  320. }
  321. }
  322. });
  323. }
  324. private OnRxScanerListener mScanerListener = new OnRxScanerListener() {
  325. @Override
  326. public void onSuccess(String type, Result result) {
  327. String scanResult = result.getText();
  328. switch (type){
  329. case BaseConfig.COMMON_SCANNER_ONLY:
  330. setScanResult(scanResult);
  331. break;
  332. }
  333. }
  334. @Override
  335. public void onFail(String type, String message) {
  336. }
  337. };
  338. //把扫描结果赋值
  339. private void setScanResult(String scanResult){
  340. //获取焦点的view对象
  341. View view=getWindow().getDecorView().findFocus();
  342. //如果是EditText
  343. if(view instanceof EditText)
  344. {
  345. ((EditText) view).setText(scanResult);
  346. switch (view.getId()) {
  347. case R.id.et_order_no:
  348. getInboundInfo();
  349. break;
  350. default:
  351. }
  352. }
  353. }
  354. private void getInboundInfo(){
  355. final String orderNo = etOrderNo.getText().toString().trim();
  356. if (orderNo.isEmpty()){
  357. return;
  358. }
  359. try {
  360. JSONObject jsonObject = new JSONObject();
  361. jsonObject.put("tracking_number",orderNo);
  362. if (!checkRepeat(Urls.FXY_OPEN_TRACKING_NUMBER+(jsonObject.toString()))){
  363. Toast.makeText(this, getString(R.string.error_data_processed), Toast.LENGTH_LONG).show();
  364. return;
  365. }
  366. order_id = 0;
  367. OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_OPEN_TRACKING_NUMBER).upJson(jsonObject)
  368. .execute(new MyDialogCallback(this, true, true) {
  369. @Override
  370. public void onSuccess(Response<String> response) {
  371. super.onSuccess(response);
  372. try {
  373. ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
  374. goodsList.clear();
  375. goodsAdapter.notifyDataSetChanged();
  376. if(bean.code == 1){
  377. if (!bean.data.isEmpty() && !bean.data.equals("[]")){
  378. JSONObject data = new JSONObject(bean.data);
  379. if (data.has("order_id")){
  380. order_id = data.getInt("order_id");
  381. getPackageGoods();
  382. }
  383. if (data.has("deal_tracking_number")){
  384. etOrderNo.setText(data.getString("deal_tracking_number"));
  385. }
  386. }
  387. }else{
  388. showWarningToast(bean.msg);
  389. }
  390. } catch (Exception e) {
  391. e.printStackTrace();
  392. showEmptyView("扫跟踪号解析错误:"+e.getMessage());
  393. //XLog.e("获取包裹商品信息解析错误",e.getMessage());
  394. }
  395. }
  396. });
  397. }catch (Exception e){
  398. XLog.e("请求扫跟踪号信息错误:",e);
  399. }
  400. }
  401. private void getPackageGoods(){
  402. try {
  403. JSONObject jsonObject = new JSONObject();
  404. jsonObject.put("order_id",order_id);
  405. if (!checkRepeat(Urls.FXY_INBOUND_PACKAGE_GOODS+(jsonObject.toString()))){
  406. Toast.makeText(this, getString(R.string.error_data_processed), Toast.LENGTH_LONG).show();
  407. return;
  408. }
  409. OkGo.<String>post(Urls.getServiceAddress(this) + Urls.FXY_INBOUND_PACKAGE_GOODS).upJson(jsonObject)
  410. .execute(new MyDialogCallback(this, true, true) {
  411. @Override
  412. public void onSuccess(Response<String> response) {
  413. super.onSuccess(response);
  414. try {
  415. ActionBean bean = JsonUtil.getObject(response.body(), ActionBean.class);
  416. goodsList.clear();
  417. goodsAdapter.notifyDataSetChanged();
  418. if(bean.code == 1){
  419. if (!bean.data.isEmpty() && !bean.data.equals("[]")){
  420. JSONObject data = new JSONObject(bean.data);
  421. if (data.has("data")){
  422. JSONArray list = data.getJSONArray("data");
  423. for (int i = 0; i<list.length(); i++){
  424. goodsList.add(list.getJSONObject(i));
  425. }
  426. goodsAdapter.notifyDataSetChanged();
  427. }
  428. }
  429. }else{
  430. showWarningToast(bean.msg);
  431. }
  432. } catch (Exception e) {
  433. e.printStackTrace();
  434. showEmptyView("扫跟踪号解析错误:"+e.getMessage());
  435. //XLog.e("获取包裹商品信息解析错误",e.getMessage());
  436. }
  437. }
  438. });
  439. }catch (Exception e){
  440. XLog.e("请求扫跟踪号信息错误:",e);
  441. }
  442. }
  443. /*
  444. * 校验必录
  445. */
  446. private boolean validate(){
  447. return true;
  448. }
  449. //清除订单信息
  450. private void clearData() {
  451. }
  452. @OnClick({R.id.ima_or_code})
  453. public void onViewClicked(View view) {
  454. Bundle bundle = new Bundle();
  455. switch (view.getId()) {
  456. case R.id.ima_or_code:
  457. if(etOrderNo.isEnabled()){
  458. etOrderNo.requestFocus();
  459. ActivityScanerCode.setScanerListener(mScanerListener);
  460. ActivityScanerCode.intent2Activity(mContext, BaseConfig.COMMON_SCANNER_ONLY);
  461. }
  462. break;
  463. default:
  464. break;
  465. }
  466. }
  467. @Override
  468. protected void onDestroy() {
  469. unbinder.unbind();
  470. super.onDestroy();
  471. }
  472. @Override
  473. protected void onResume() {
  474. super.onResume();
  475. initReceiver();
  476. }
  477. @Override
  478. protected void onPause() {
  479. super.onPause();
  480. //销毁在onResume()方法中的广播
  481. try {
  482. //停止扫描
  483. Integer is_broadcast = scanBean.getIsBroadcast();//是否广播
  484. if (is_broadcast==0){
  485. StoTongJNI.getIns(mContext).SetScannerStop();
  486. StoTongJNI.getIns(mContext).SetScannerOff();
  487. }else{
  488. unregisterReceiver(mReceiver);
  489. }
  490. }catch (Exception e){
  491. XLog.e("销毁广播失败:",e.getMessage());
  492. }
  493. }
  494. }