From 954eaed548efb75b3dc79343587acb79e53d214d Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 23 八月 2024 17:19:59 +0800
Subject: [PATCH] 优化写卡逻辑,再次读取内容确认写卡成功再提示成功

---
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java             |   25 ++++++++++++
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java      |   27 +++++++++++--
 qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml                           |    6 +-
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java |   27 ++++++++-----
 app/build.gradle                                                                          |    4 +-
 5 files changed, 68 insertions(+), 21 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index edf6e9e..5fd2666 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -16,8 +16,8 @@
         applicationId "com.dayu.recharge"
         minSdk 23
         targetSdk 26
-        versionCode 260
-        versionName "2.6.0"
+        versionCode 261
+        versionName "2.6.1"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
         ndk {
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java
index d6c4ad9..47a4ea5 100644
--- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java
@@ -495,7 +495,6 @@
                     userCard.setUserCodeNumber(Integer.valueOf(userCode.substring(12, 16)));
                     userCardBean.setCardNumber(cardNumber);
                     userCardBean.setUserCode(userCode);
-                    baseDao.userCardDao().insert(userCardBean);
                     if (WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this)) {
                         confromOpenCard(t.getData().getIccardRechargeRecordId(), 0);
                     } else {
@@ -527,7 +526,12 @@
             public void onNext(BaseResponse<LoginResult> t) {
                 if (t.isSuccess()) {
                     //{"code":"0","msg":"鎿嶄綔鎴愬姛","data":{"chargeMethod":"","iccardCancelTime":"","lastRechargeTime":"2024-08-05 17:04:15","thisSaleMoney":"","totalRechargeWaterAmount":0.00,"iccardBalanceAmonunt":0.00,"iccardInfoId":"1820385315354320898","iccardProtocolName":"","totalRechargeElectricAmount":0.00,"logicState":1,"username":"","state":1,"familySize":"","yearRechargeMoney":0.00,"thisSaleAmount":"","onlyRechargeMoney":"","identityCard":"","iccardBrand":"","iccardBalanceMoney":0.00,"openOperatorUsername":"","adName":"","rechargeWaterAmount":"","openOperatorUserId":"1816297106145103873","lastSwipeTime":"","address":"","yearCompensateMoney":0.00,"iccardProtocolOpenMoney":"","peasantId":"1820374742679953410","reissueTimes":0,"iccardProtocolReissueMoney":"","iccardProtocolId":"","yearRechargeWaterAmount":0.00,"iccardBalanceElectric":0.00,"iccardStatus":0,"phone":"","lastRechargeMoney":0.00,"iccardOpenTime":"","yearRechargeElectricAmount":0.00,"reissueRechargeRecordId":"","iccardPrice":1.50,"iccardNum":"3714251023011","accountType":0,"equipCode":"","rechargeWaterMoney":"","totalRechargeMoney":0.00,"executeWaterPrice":"","iccardType":1,"iccardCode":"BADA4044"}}
-                    startDetailActivity("缁堢鍐欏崱");
+                    if (writeCardStatus == 0) {
+                        baseDao.userCardDao().insert(userCardBean);
+                        startDetailActivity("缁堢鍐欏崱");
+                    } else {
+                        TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触璇烽噸鏂拌创鍗★紒");
+                    }
                 }
             }
         });
@@ -551,15 +555,18 @@
             @Override
             public void onNext(BaseResponse<LoginResult> t) {
                 if (t.isSuccess()) {
-
-                    try {
-                        baseDao.rechargeDao().insert(rechargeBean);
-                    } catch (Exception e) {
-                        e.printStackTrace();
+                    if (writeCardStatus == 0) {
+                        try {
+                            baseDao.rechargeDao().insert(rechargeBean);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        //   鎵撳嵃鐩稿叧
+                        PrintUtils.printerData(rechargeBean);
+                        startDetailActivity("缁堢鍐欏崱");
+                    } else {
+                        TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触璇烽噸鏂拌创鍗★紒");
                     }
-                    //   鎵撳嵃鐩稿叧
-                    PrintUtils.printerData(rechargeBean);
-                    startDetailActivity("缁堢鍐欏崱");
                 } else {
                     ToastUtil.show(t.getMsg());
                 }
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java
index 0cfd460..07a4fcd 100644
--- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java
@@ -2,11 +2,11 @@
 
 import com.dayu.baselibrary.tools.BcdUtil;
 import com.dayu.baselibrary.tools.HexUtil;
-
 import com.dayu.qiheonlinelibrary.utils.CardCommon;
 import com.tencent.bugly.crashreport.CrashReport;
 
 import java.io.Serializable;
+import java.util.Arrays;
 import java.util.Calendar;
 import java.util.List;
 
@@ -39,6 +39,27 @@
 
     public Float electricPrice;//鐢靛崟浠凤紝淇濈暀涓変綅灏忔暟
 
+    /**
+     * 鍐欏崱瀹屾垚鍚庢牎楠屾槸鍚﹀啓鍗℃垚鍔�
+     *
+     * @param data
+     * @return
+     */
+    public boolean equlsUserCard(List<byte[]> data) {
+        // 鍙傛暟楠岃瘉
+        if (data == null || data.size() < 3) {
+            return false;
+        }
+        // 瀹氫箟瑕佹瘮杈冪殑瀛楄妭鏁扮粍
+        byte[][] expectedBytes = {getZeroBytes(), getOneBytes(), getTwoBytes()};
+        // 閫愪釜姣旇緝瀛楄妭鏁扮粍
+        for (int i = 0; i < 3; i++) {
+            if (!Arrays.equals(data.get(i), expectedBytes[i])) {
+                return false;
+            }
+        }
+        return true;
+    }
 
     /**
      * 杩斿洖瀹屾暣鐨勭敤鎴风紪鍙�
@@ -385,4 +406,6 @@
     public void setElectricPrice(Float electricPrice) {
         this.electricPrice = electricPrice;
     }
+
+
 }
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
index 3517fcb..5ce38e4 100644
--- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
@@ -11,6 +11,8 @@
 import com.dayu.qiheonlinelibrary.card.UserCard;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @author zx
@@ -70,6 +72,7 @@
             int a = 1;
             try {
                 MifareClassic mfc = MifareClassic.get(tag);
+                List<byte[]> list = new ArrayList<>();
                 if (null != mfc) {
                     try {
                         //杩炴帴NFC
@@ -96,7 +99,22 @@
                                 //鍐欏崱
                                 mfc.writeBlock(bIndex + b, data);
                             }
-                            return true;
+                            int bIndex = mfc.sectorToBlock(1);
+                            for (int j = 0; j < 3; j++) {
+                                //璇诲彇鏁版嵁
+                                byte[] data = null;
+                                try {
+                                    data = mfc.readBlock(bIndex);
+                                    bIndex++;
+                                    list.add(data);
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            }
+                            if (userCard.equlsUserCard(list)) {
+                                return true;
+                            }
+                            return false;
                         }
                         return false;
                     } catch (Exception e) {
@@ -262,13 +280,13 @@
                         boolean isOpen = mfc.authenticateSectorWithKeyA(sector, defauleKey);
                         if (!isOpen) {
                             isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey2);
-                            if (isOpen){
+                            if (isOpen) {
                                 mfc.authenticateSectorWithKeyB(sector, companyKey2);
                             }
                         }
                         if (!isOpen) {
                             isOpen = mfc.authenticateSectorWithKeyA(sector, companyKey);
-                            if (isOpen){
+                            if (isOpen) {
                                 mfc.authenticateSectorWithKeyB(sector, companyKey);
                             }
                         }
@@ -276,7 +294,7 @@
                             //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲�
                             int blockCount = mfc.getBlockCountInSector(sector);
                             int blockIndex = mfc.sectorToBlock(sector);
-                            for (int block = 0; block < blockCount ; block++) {
+                            for (int block = 0; block < blockCount; block++) {
                                 // 璺宠繃绗� 0 鎵囧尯鐨勭 0 鍧�
                                 if (sector == 0 && block == 0) {
                                     blockIndex++;
@@ -289,7 +307,6 @@
                                     mfc.writeBlock(blockIndex, initDataBytes);
                                 }
                                 //鍐欏崱
-
                                 blockIndex++;
                             }
                         }
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml
index d98d40e..c5a814e 100644
--- a/qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml
+++ b/qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml
@@ -61,7 +61,7 @@
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_weight="1"
-                    android:text=""
+                    android:text="娴嬭瘯23"
                     android:textSize="@dimen/new_card_size" />
 
                 <ImageView
@@ -91,7 +91,7 @@
                     android:digits="0123456789Xx"
                     android:inputType="text"
                     android:maxLength="18"
-                    android:text=""
+                    android:text="130107199210160011"
                     android:textSize="@dimen/new_card_size" />
 
 
@@ -148,7 +148,7 @@
                     android:layout_height="wrap_content"
                     android:inputType="number"
                     android:maxLength="11"
-                    android:text=""
+                    android:text="15802220723"
                     android:textSize="@dimen/new_card_size" />
             </LinearLayout>
 

--
Gitblit v1.8.0