From 8e3719a37a6be0c9e244a0160b5f2f3331ca3122 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期四, 30 十一月 2023 15:11:38 +0800
Subject: [PATCH] 支持虚拟卡读取

---
 app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java |  296 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 168 insertions(+), 128 deletions(-)

diff --git a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
index c524104..b3db5ac 100644
--- a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
+++ b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
@@ -2,18 +2,16 @@
 
 import android.content.Intent;
 import android.nfc.NfcAdapter;
+import android.nfc.Tag;
 import android.os.Bundle;
-import android.os.Handler;
 import android.os.Message;
-import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 
-
+import com.dayu.recharge.card.ConfigurationPowerCard;
+import com.dayu.recharge.card.DomainCard;
 import com.dayu.recharge.card.UserCard;
 import com.dayu.recharge.databinding.ActivityRedCardBinding;
-import com.dayu.recharge.dbBean.RechargeBean;
-import com.dayu.recharge.dbBean.UserCardBean;
 import com.dayu.recharge.net.SocketCallBack;
 import com.dayu.recharge.net.SocketData;
 import com.dayu.recharge.net.SocketNet;
@@ -21,13 +19,17 @@
 import com.dayu.recharge.tools.BcdUtil;
 import com.dayu.recharge.tools.HexUtil;
 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.MyCommon;
 import com.dayu.recharge.utils.SocketUtil;
-import com.dayu.recharge.utils.ToastUtil;
-import com.dayu.recharge.utils.WSHelper;
+import com.dayu.recharge.utils.TipUtil;
+import com.dayu.recharge.view.ProgressDialog;
 
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.List;
 import java.util.Map;
 
@@ -41,14 +43,23 @@
 
     private static final int USER_CRAD = 1;
     private static final int MANAGE_CRAD = 2;
+    private static final int CLEAN_CARD = 3;
+    private static final int REGISTERED_CARD = 4;
+    private static final int CLEAN_ALL_USER = 5;
+    private static final int DOMAIN_CARD = 6;
+    private static final int TEST_CARD = 7;
+
+    private static final int CONFIGURATION_CARD = 8;
+
+    private static final int CONFIGURATION_POWER_CARD = 9;
+    private static final int PASS_WORD_CRAD = 10;
 
 
-    private static final int ERROR = -1;
-    UserCard userCard;
-    UserCardBean waterCard;
-    RechargeBean rechargeBean;
-    //    鍐滄埛娉ㄥ唽缂栧彿
+    volatile UserCard userCard;
     ActivityRedCardBinding redCardBinding;
+
+    //    Intent intent;
+    Tag mTag;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -57,134 +68,157 @@
         setContentView(redCardBinding.getRoot());
     }
 
-    private void setData(String statu) {
-        String initCode = WSHelper.getInstance(this).get("initCode", "");
-        if (TextUtils.isEmpty(initCode)) {
-            ToastUtil.show(this, "璁惧娉ㄥ唽鍙蜂负绌猴紝璇峰厛璁剧疆IP鍜岀鐞嗗憳鍦板潃");
-            return;
+
+    private void setUserData(String userName, int blance, String statu) {
+        viweGone(true);
+        redCardBinding.redName.setText("鐢ㄦ埛濮撳悕锛�" + userName);
+        redCardBinding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(blance) + "鍏�");
+        redCardBinding.redStatu.setText("鍗$姸鎬侊細" + statu);
+        if (userCard != null) {
+            redCardBinding.redInitCode.setText(userCard.getInitPeasantCode());
+            Calendar calendar = userCard.getRechargeDate();
+            if (calendar != null) {
+                int year = calendar.get(Calendar.YEAR);
+                int month = calendar.get(Calendar.MONTH); // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ラ渶瑕佸姞1
+                int day = calendar.get(Calendar.DAY_OF_MONTH);
+                int hour = calendar.get(Calendar.HOUR_OF_DAY);
+                int minute = calendar.get(Calendar.MINUTE);
+                int second = calendar.get(Calendar.SECOND);
+                redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + month + day + " " + hour + ":" + minute + ":" + second);
+            } else {
+                redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細鏃�");
+            }
+
+            redCardBinding.redRechargeNumber.setText("鏈崱鍏呭�兼鏁帮細" + userCard.getRechargeTimes() + "");
         }
-//        redCardBinding.redVillageNum.setText("璁惧搴忓垪鍙凤細" + initS.getANo() + "");
-        redCardBinding.redName.setText("鐢� 鎴� 鍚嶏細" + rechargeBean.getUserName());
-        redCardBinding.redRemainderMorny.setText("鍓╀綑閲戦锛�" + rechargeBean.getBalance() + "" + "鍏�");
-        redCardBinding.redStatu.setText("鐘�    鎬侊細" + statu);
+    }
+
+    @Override
+    public void physicalCardDoing(Tag tag) {
+        super.physicalCardDoing(tag);
+        mTag = tag;
+        ProgressDialog.show(this);
+
+        readAllData(tag);
 
     }
 
-
     @Override
     public void onNewIntent(Intent intent) {
-        startAnim();
-        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
-            readAllData(intent);
-        }
+//        this.intent = intent;
+
+        super.onNewIntent(intent);
     }
 
     /**
      * 璇诲彇鍏ㄩ儴鏁版嵁
      */
-    private void readAllData(Intent intent) {
+
+    public void readAllData(Tag intent) {
         NfcReadHelper.getInstence(intent)
-                .getAllData(new NfcReadHelper.NFCCallListback() {
+                .getOneSectorData(new NfcReadHelper.NFCCallListback() {
                     @Override
-                    public void callBack(Map<String, List<byte[]>> data) {
-                        Message message = new Message();
+                    public void callBack(List<byte[]> data) {
                         //鑾峰彇1鎵囧尯鏁版嵁
-                        List<byte[]> oneSector = data.get("1");
-                        if (oneSector != null && oneSector.size() > 0) {
-                            byte cardType = oneSector.get(0)[0];
+                        if (data != null && data.size() > 0) {
+                            byte cardType = data.get(0)[0];
                             String cardTypeStr = HexUtil.byteToHex(cardType);
-//                            switch (cardTypeStr){
-//                                case
-//                            }
-                                    userCard = UserCard.getBean(oneSector);
-                            message.what = USER_CRAD;
+                            switch (cardTypeStr) {
+                                case MyCommon.USER_CARD_TYPE_1:
+                                case MyCommon.USER_CARD_TYPE_2:
+                                case MyCommon.USER_CARD_TYPE_3:
+                                    userCard = UserCard.getBean(data);
+                                    selectBalance(userCard.getInitPeasantCode());
+                                    break;
+                                case MyCommon.MANAGE_CRAD:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓虹鐞嗗崱");
+                                    stopAnim();
+                                    break;
+                                case MyCommon.CLEAN_CARD_TYPE:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓烘竻闆跺崱");
+                                    stopAnim();
+                                    break;
+                                case MyCommon.REGISTERED_CARD_TYPE:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓洪噸鏂版敞鍐岃澶囧崱");
+                                    stopAnim();
+
+                                    break;
+                                case MyCommon.CLEAN_ALL_USER_CARD_TYPE:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓哄垹闄ゅ叏閮ㄧ敤鎴峰崱");
+                                    stopAnim();
+                                    break;
+                                case MyCommon.DOMAIN_CARD_TYPE:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓鸿缃煙鍚嶅崱");
+                                    DomainCard domainCard = DomainCard.toBean(data);
+                                    redCardBinding.readCardDataTV.setText("搴忓彿锛�" + domainCard.getDomainNumber() + "\n" + "鍩熷悕锛�" + domainCard.getDomainName() + "\n" + "绔彛鍙凤細" + domainCard.getPort());
+                                    stopAnim();
+                                    break;
+                                case MyCommon.TEST_CARD_TYPE:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓烘祴璇曞崱");
+                                    stopAnim();
+                                    break;
+                                case MyCommon.CONFIGURATION_CARD_TYPE:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓洪厤缃澶囨敞鍐屼俊鎭崱");
+                                    stopAnim();
+                                    break;
+                                case MyCommon.CONFIGURATION_POWER_CARD_TYPE:
+                                    viweGone(false);
+                                    redCardBinding.readCardTypeTV.setText("褰撳墠閰嶇疆姘存车鍔熺巼鍗�");
+                                    ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0));
+                                    redCardBinding.readCardDataTV.setText(powerCard.getPower());
+                                    stopAnim();
+                                    break;
+                                default:
+                                    TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆");
+                                    stopAnim();
+                                    break;
+                            }
+
                         } else {
-                            message.what = ERROR;
+                            TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆");
+                            stopAnim();
                         }
-                        handler.sendMessage(message);
+
                     }
 
-
                     @Override
-                    public void error() {
-                        Message message = new Message();
-                        message.what = ERROR;
-                        handler.sendMessage(message);
+                    public void error(int code) {
+                        switch (code) {
+                            case MyCommon.ERROR_MOVE:
+                                stopAnim();
+                                TipUtil.show("杩炴帴涓柇锛岃閲嶆柊璐村悎鍗$墖");
+                                break;
+                            default:
+                                stopAnim();
+                                TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
+                        }
                     }
                 });
     }
 
-    Handler handler = new Handler(new Handler.Callback() {
-        @Override
-        public boolean handleMessage(Message msg) {
-            switch (msg.what) {
-                case USER_CRAD:
-                    redCardBinding.readImgLL.setVisibility(View.GONE);
-                    redCardBinding.readUserLL.setVisibility(View.VISIBLE);
-                    redCardBinding.readSysLL.setVisibility(View.GONE);
-                    redCardBinding.readCleanLL.setVisibility(View.GONE);
-                    redCardBinding.readInitLL.setVisibility(View.GONE);
-//                    selectBalance(newUserCard.getPeasantCode());
-                    break;
-                case MANAGE_CRAD:
-                    redCardBinding.readImgLL.setVisibility(View.GONE);
-                    redCardBinding.readUserLL.setVisibility(View.GONE);
-                    redCardBinding.readSysLL.setVisibility(View.VISIBLE);
-                    redCardBinding.readCleanLL.setVisibility(View.GONE);
-                    redCardBinding.readInitLL.setVisibility(View.GONE);
-                    stopAnim();
-                    break;
-                case 3:
-                    redCardBinding.readImgLL.setVisibility(View.GONE);
-                    redCardBinding.readUserLL.setVisibility(View.GONE);
-                    redCardBinding.readSysLL.setVisibility(View.GONE);
-                    redCardBinding.readCleanLL.setVisibility(View.VISIBLE);
-                    redCardBinding.readInitLL.setVisibility(View.GONE);
-                    stopAnim();
-                    break;
-                case 4:
-                    redCardBinding.readImgLL.setVisibility(View.GONE);
-                    redCardBinding.readUserLL.setVisibility(View.GONE);
-                    redCardBinding.readSysLL.setVisibility(View.GONE);
-                    redCardBinding.readCleanLL.setVisibility(View.GONE);
-                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
-                    stopAnim();
-                    break;
-                case 5:
-                    redCardBinding.readImgLL.setVisibility(View.GONE);
-                    redCardBinding.readUserLL.setVisibility(View.GONE);
-                    redCardBinding.readSysLL.setVisibility(View.GONE);
-                    redCardBinding.readCleanLL.setVisibility(View.GONE);
-                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
-                    redCardBinding.readInitLL.setText("褰撳墠涓鸿鏀垮尯鍩熷崱");
-                    stopAnim();
-                    break;
-                case 6:
-                    redCardBinding.readImgLL.setVisibility(View.GONE);
-                    redCardBinding.readUserLL.setVisibility(View.GONE);
-                    redCardBinding.readSysLL.setVisibility(View.GONE);
-                    redCardBinding.readCleanLL.setVisibility(View.GONE);
-                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
-                    redCardBinding.readInitLL.setText("褰撳墠涓鸿澶囧簭鍙峰崱");
-                    stopAnim();
-                    break;
-                default:
-                    ToastUtil.show(ReadCardAcitivy.this, "鍗$墖鏈敞鍐�");
-                    stopAnim();
-            }
 
-            return false;
+    private void viweGone(boolean isUSerCard) {
+        redCardBinding.readImgLL.setVisibility(View.GONE);
+        if (isUSerCard) {
+            redCardBinding.readCardTypeLL.setVisibility(View.GONE);
+            redCardBinding.readUserLL.setVisibility(View.VISIBLE);
+        } else {
+            redCardBinding.readCardTypeLL.setVisibility(View.VISIBLE);
+            redCardBinding.readUserLL.setVisibility(View.GONE);
         }
-    });
 
-    void startAnim() {
-        redCardBinding.avi.setVisibility(View.VISIBLE);
-        redCardBinding.avi.show();
-        // or avi.smoothToShow();
     }
 
+
     void stopAnim() {
-        redCardBinding.avi.hide();
+        ProgressDialog.dismiss();
         // or avi.smoothToHide();
     }
 
@@ -192,11 +226,10 @@
      * @param initPeasantCode 鍐滄埛娉ㄥ唽缂栧彿
      */
     private void selectBalance(String initPeasantCode) {
-
         BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
         requestBean.setAFN("94");
         requestBean.setControl("01");
-        String initCode = WSHelper.getInstance(this).get("initCode", "");
+        String initCode = DeviceNumberUtils.getDeviceNumber();
         requestBean.setInitCode(initCode);
         requestBean.setInitPeasantCode(initPeasantCode);
         requestBean.setXuLie(SocketUtil.getXuLie(this));
@@ -209,11 +242,30 @@
 
                     try {
                         stateText = new StringBuffer();
-//                        stateText.append("鐘�    鎬侊細");
+                        int balance = 0;
+                        String name = null;
+                        try {
+                            //閲戦
+                            byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7);
+                            balance = SocketUtil.get16to10LowHigh(blanceByte);
+                            //濮撳悕
+                            byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19);
+                            name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+
                         String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);  //BCD鐮�00鍚敤 01绂佺敤 02闅跺睘淇℃伅涓嶇 03鏃犳鍗′俊鎭� 04鍏跺畠s
                         if ("00".equals(state)) {
+                            userCard.setBalance(balance);
+                            userCard.setState("00");
+
+                            WriteCardUtils.setUser(mTag, userCard);
                             stateText.append("鍚敤");
                         } else if ("01".equals(state)) {
+                            userCard.setBalance(balance);
+                            userCard.setState("01");
+                            WriteCardUtils.setUser(mTag, userCard);
                             stateText.append("绂佺敤");
                         } else if ("02".equals(state)) {
                             stateText.append("闅跺睘淇℃伅涓嶇");
@@ -222,34 +274,22 @@
                         } else if ("04".equals(state)) {
                             stateText.append("鍏跺畠");
                         }
-                        //閲戦
-                        byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7);
-                        int balance = SocketUtil.get16to10LowHigh(blanceByte);
-                        //濮撳悕
-                        byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19);
-                        String name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
 
-
-                        rechargeBean = new RechargeBean();
-                        rechargeBean.setDate(System.currentTimeMillis());
-                        rechargeBean.setUserName(name);
-                        rechargeBean.setBalance(MornyUtil.changeF2Y(balance) + "");
-//                        rechargeBean.setTotal_morn(ArithUtil.changeF2Y(userCard.getValue() + ""));
-                        setData(stateText.toString());
+                        setUserData(name, balance, stateText.toString());
                         stopAnim();
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
                 } else {
                     //鏍¢獙CRC閿欒
-                    ToastUtil.show(ReadCardAcitivy.this, "寮�鍗℃姤鏂囨牎楠孋RC閿欒");
+                    TipUtil.show(ReadCardAcitivy.this, "寮�鍗℃姤鏂囨牎楠孋RC閿欒");
                 }
                 stopAnim();
             }
 
             @Override
             public void onSocketError(int code, String msg) {
-                ToastUtil.show(ReadCardAcitivy.this, msg);
+                TipUtil.show(ReadCardAcitivy.this, msg);
             }
         });
 

--
Gitblit v1.8.0