From d58bc0e2057f58342f490f5605eda3b80dc0ca29 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 27 三月 2024 11:47:21 +0800
Subject: [PATCH] 添加中安身份证识别相关功能 优化贴卡提示 优化二次确认的按钮样式 添加超时时不在主线程的处理

---
 app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java |  180 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 160 insertions(+), 20 deletions(-)

diff --git a/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java b/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
index 15c2542..9e837ff 100644
--- a/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
@@ -10,9 +10,23 @@
 import android.widget.EditText;
 
 import com.dayu.recharge.databinding.ActivityRechargeBinding;
-import com.dayu.recharge.utils.ToastUtil;
-import com.dayu.recharge.utils.WSHelper;
+import com.dayu.recharge.dbBean.AdminDataBean;
+import com.dayu.recharge.net.SocketCallBack;
+import com.dayu.recharge.net.SocketData;
+import com.dayu.recharge.net.SocketNet;
+import com.dayu.recharge.socketBean.BalanceSelecteRequestBean;
+import com.dayu.recharge.tools.BcdUtil;
+import com.dayu.recharge.tools.NfcReadHelper;
+import com.dayu.recharge.tools.WriteCardUtils;
+import com.dayu.recharge.utils.CRC8;
+import com.dayu.recharge.utils.DeviceNumberUtils;
+import com.dayu.recharge.utils.MornyUtil;
+import com.dayu.recharge.utils.SocketUtil;
+import com.dayu.recharge.utils.TipUtil;
+import com.dayu.recharge.view.ProgressDialog;
 import com.tencent.bugly.crashreport.CrashReport;
+
+import java.util.Arrays;
 
 
 /**
@@ -21,11 +35,16 @@
  * Date: 2023-11-5 09:52
  * Description: 鍏呭�肩晫闈�
  */
-public class RechargeActivity extends BaseActivity {
+public class RechargeActivity extends BaseNfcActivity {
 
+    Intent intent;
 
+    boolean userFlag;
     ActivityRechargeBinding binding;
     public static RechargeActivity rechargeActivity;
+
+    AdminDataBean adminData;
+    String userName;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -42,28 +61,54 @@
         }
     }
 
+    public void onNewIntent(Intent intent) {
+
+        try {
+            this.intent = intent;
+            userCard = NfcReadHelper.getInstence(intent, this).getUserCardData();
+            if (userCard != null) {
+                ProgressDialog.show(this);
+                selectBalance(userCard.getInitPeasantCode());
+            } else {
+                TipUtil.show(RechargeActivity.this, "鍗$墖璇诲彇澶辫触");
+            }
+
+//            readAllData(intent);
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+        super.onNewIntent(intent);
+    }
+
     private void initView() {
-        binding.rechargeRegistBtn.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                String morny = binding.rechargeWater.getText().toString();
-                if (!TextUtils.isEmpty(morny)) {
-                    String initCode = WSHelper.getInstance(RechargeActivity.this).get("initCode", "");
-                    if (TextUtils.isEmpty(initCode)) {
-                        ToastUtil.show(RechargeActivity.this, "璁惧娉ㄥ唽鍙蜂负绌猴紝璇峰厛璁剧疆IP鍜岀鐞嗗憳鍦板潃");
-//                return;
-                    }
-                    Intent intent = new Intent(RechargeActivity.this, NFCWreatActivity.class);
-                    intent.putExtra("morny", morny);
-                    startActivity(intent);
-                } else {
-                    ToastUtil.show(RechargeActivity.this, "璇疯緭鍏ュ厖鍊奸噾棰濓紙鍏冿級");
+        try {
+            adminData = baseDao.adminDao().findFirst();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+        binding.rechargeRegistBtn.setOnClickListener(v -> {
+            String morny = binding.rechargeWater.getText().toString();
+            if (!TextUtils.isEmpty(morny)) {
+                String initCode = DeviceNumberUtils.getDeviceNumber();
+                if (TextUtils.isEmpty(initCode)) {
+                    TipUtil.show(RechargeActivity.this, "璁惧娉ㄥ唽鍙蜂负绌猴紝璇峰厛璁剧疆IP鍜岀鐞嗗憳鍦板潃");
+                    return;
                 }
+                Intent intent = new Intent(RechargeActivity.this, NFCWreatActivity.class);
+                intent.putExtra("morny", morny);
+                intent.putExtra("userName", userName);
+                intent.putExtra("userCard", userCard);
+                startActivity(intent);
+            } else {
+                TipUtil.show(RechargeActivity.this, "璇疯緭鍏ュ厖鍊奸噾棰濓紙鍏冿級");
             }
         });
     }
 
 
+    //鏍¢獙閲戦
     public static void setPricePoint(final EditText editText) {
         editText.addTextChangedListener(new TextWatcher() {
             @Override
@@ -72,7 +117,7 @@
                 if (s.toString().contains(".")) {
                     if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                         s = s.toString().subSequence(0,
-                                s.toString().indexOf(".") + 2);
+                                s.toString().indexOf(".") + 3);
                         editText.setText(s);
                         editText.setSelection(s.length());
                     }
@@ -88,7 +133,6 @@
                     if (!s.toString().substring(1, 2).equals(".")) {
                         editText.setText(s.subSequence(0, 1));
                         editText.setSelection(1);
-                        return;
                     }
                 }
             }
@@ -109,5 +153,101 @@
 
     }
 
+    /**
+     * 鏌ヨ浣欓
+     *
+     * @param initPeasantCode 鍐滄埛娉ㄥ唽缂栧彿
+     */
+    private void selectBalance(String initPeasantCode) {
+        try {
+            BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
+            requestBean.setAFN("94");
+            requestBean.setControl("01");
+            String initCode = DeviceNumberUtils.getDeviceNumber();
+            requestBean.setInitCode(initCode);
+            requestBean.setInitPeasantCode(initPeasantCode);
+            requestBean.setXuLie(SocketUtil.getXuLie(this));
+            SocketNet.getInstance().sendTestMessage(requestBean.pack(), "94", new SocketCallBack() {
+                @Override
+                public void onSocketResponse(SocketData readData) {
+                    ProgressDialog.dismiss();
+                    if (CRC8.isCRC8(readData.getOriginDataBytes())) {
+                        StringBuffer stateText;
+                        try {
+                            stateText = new StringBuffer();
+                            String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);  //BCD鐮�00鍚敤 01绂佺敤 02闅跺睘淇℃伅涓嶇 03鏃犳鍗′俊鎭� 04鍏跺畠s
+                            int balance = 0;
 
+                            try {
+                                //鍙湁鍚姩鐘舵�佹墠鑳藉厖鍊�
+                                //閲戦
+                                byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7);
+                                balance = SocketUtil.get16to10LowHigh(blanceByte);
+                                //濮撳悕
+                                byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19);
+                                userName = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                            binding.rechargeLL.setVisibility(View.VISIBLE);
+                            binding.rechargeRegistBtn.setVisibility(View.VISIBLE);
+                            binding.rechargeReadLL.setVisibility(View.GONE);
+                            binding.rechargeTextLL.setVisibility(View.VISIBLE);
+                            binding.userName.setText(userName);
+                            binding.redRemainderBlance.setText(MornyUtil.changeF2Y(balance));
+                            binding.redStatu.setText(stateText.toString());
+                            binding.redInitCode.setText(initPeasantCode);
+
+                            if ("00".equals(state)) {
+                                binding.rechargeRegistBtn.setVisibility(View.VISIBLE);
+                                stateText.append("鍚敤");
+                                userCard.setState("00");
+                                userCard.setBalance(balance);
+                                binding.redStatu.setText(stateText.toString());
+                                return;
+                            } else if ("01".equals(state)) {
+                                stateText.append("璇ュ崱宸茶绂佺敤");
+                                userCard.setState("01");
+                                userCard.setBalance(balance);
+                                userFlag = WriteCardUtils.setUser(intent, userCard, RechargeActivity.this);
+                            } else if ("02".equals(state)) {
+                                stateText.append("闅跺睘淇℃伅涓嶇");
+                            } else if ("03".equals(state)) {
+                                stateText.append("鏃犳鍗′俊鎭�");
+                            } else if ("04".equals(state)) {
+                                stateText.append("鍏跺畠");
+                            }
+                            binding.redStatu.setText(stateText.toString());
+                            binding.rechargeLL.setVisibility(View.GONE);
+                            binding.rechargeRegistBtn.setVisibility(View.GONE);
+                            binding.rechargeRegistBtn.setVisibility(View.GONE);
+                            TipUtil.show(RechargeActivity.this, stateText.toString());
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    } else {
+                        //鏍¢獙CRC閿欒
+                        TipUtil.show(RechargeActivity.this, "寮�鍗℃姤鏂囨牎楠孋RC閿欒");
+                    }
+                }
+
+                @Override
+                public void onSocketError(int code, String msg) {
+                    runOnUiThread(() -> {
+                        ProgressDialog.dismiss();
+                        TipUtil.show(RechargeActivity.this, msg);
+                    });
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+
+    }
+
+    protected void onDestroy() {
+        super.onDestroy();
+        rechargeActivity = null;
+    }
 }

--
Gitblit v1.8.0