From 4ceacd9e21e09989287e8dc4e526d182091af282 Mon Sep 17 00:00:00 2001
From: zuoxiao <lf_zuo@163.com>
Date: 星期四, 26 六月 2025 13:39:52 +0800
Subject: [PATCH] feat(nfc): 优化 NFC卡片处理流程

---
 generallibrary/src/main/res/layout/activity_manager_read.xml                       |  107 +++++++----
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java  |    2 
 generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt   |   20 +
 generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt         |    8 
 generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt |  293 ++++++++++++++++++++++++++++++++
 generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt      |   46 ++++-
 generallibrary/src/main/java/com/dayu/general/BaseApplication.kt                   |    3 
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java |   31 +++
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java      |    2 
 9 files changed, 448 insertions(+), 64 deletions(-)

diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
index faf7efe..3bb0206 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
@@ -482,6 +482,8 @@
                         Log.i("NFCWreatActivity", "hex===" + hex);
                         return hex.toUpperCase();
                     }
+                }else {
+                    return BaseCommon.CARD_TYPE_ERROR2;
                 }
 
             } catch (IOException e) {
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java
index f03959a..30068ec 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java
@@ -356,10 +356,35 @@
             }
 
             try {
-                // 杩炴帴NFC
-                if (isConnect) {
-                    mfc.connect();
+                // 杩炴帴NFC - 纭繚鎬绘槸寤虹珛杩炴帴锛屽鍔犻噸璇曟満鍒�
+                int retryCount = 3;
+                boolean connected = false;
+                while (retryCount > 0 && !connected) {
+                    try {
+                        if (!mfc.isConnected()) {
+                            mfc.connect();
+                        }
+                        connected = mfc.isConnected();
+                        if (!connected) {
+                            Thread.sleep(100); // 鐭殏绛夊緟鍚庨噸璇�
+                            retryCount--;
+                        }
+                    } catch (Exception e) {
+                        retryCount--;
+                        if (retryCount <= 0) {
+                            throw e;
+                        }
+                        Thread.sleep(100);
+                    }
                 }
+
+                if (!connected) {
+                    if (callBack != null) {
+                        callBack.isSusses(false, "NFC杩炴帴澶辫触锛岃閲嶆柊闈犺繎鍗$墖");
+                    }
+                    return false;
+                }
+
                 for (int i = 0; i < passWord.size(); i++) {
                     byte[] passWordItem = passWord.get(i);
                     // 楠岃瘉鎵囧尯瀵嗙爜
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java
index afee1df..2ede746 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java
@@ -79,7 +79,7 @@
     }
 
     @Override
-    public boolean writeData(byte[] str, int a, int b, boolean isConnect, NFCCallBack callBack) {
+    public boolean  writeData(byte[] str, int a, int b, boolean isConnect, NFCCallBack callBack) {
         switch (BaseNfcActivity.adapterType) {
             case ModelUtils.defaultType:
                 return nativeNfcWriteHelper.writeData(str, a, b, isConnect, callBack);
diff --git a/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt b/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt
index 62bd69b..28f6a83 100644
--- a/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt
+++ b/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt
@@ -35,6 +35,9 @@
 
         var projectDataDao: ProjectDataDao? = null
 
+
+
+
         @JvmStatic
         fun getInstance(application: Application): BaseApplication {
             if (myApplication == null) {
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
index 9e08bf7..6452333 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
@@ -1,7 +1,10 @@
 package com.dayu.general.activity
 
 import android.os.Bundle
+import com.dayu.baselibrary.tools.print.PrintAdater
+import com.dayu.baselibrary.utils.DateUtil
 import com.dayu.baselibrary.utils.MornyUtil
+import com.dayu.general.BaseApplication
 import com.dayu.general.bean.card.UserCard
 import com.dayu.general.databinding.ActivityCardWriteSuccessBinding
 import com.dayu.general.tool.CardOperationType
@@ -15,8 +18,22 @@
 
     private lateinit var binding: ActivityCardWriteSuccessBinding
     private var cardNumber: String? = null
+    private var cardAddr: String? = null
     private var operationTypeCode: Int = -1
     private var userCard: UserCard? = null
+    private var orderNumber: String? = null
+    
+    // 鍏呭�肩浉鍏冲弬鏁�
+    private var rechargeAmount = 0.0
+    private var bonusAmount = 0.0
+    
+    // 鍏朵粬鎿嶄綔鐩稿叧鍙傛暟
+    private var refundAmount = 0.0
+    private var cardBalance = 0.0
+    private var returnAmount = 0.0
+    private var deductAmount = 0.0
+    private var cardCost = 0.0
+    private var reissueAmount = 0.0
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -25,7 +42,22 @@
 
         // 鑾峰彇浼犲叆鐨勫崱鍙峰拰鎿嶄綔绫诲瀷
         cardNumber = intent.getStringExtra("cardNumber")
+        cardAddr = intent.getStringExtra("cardAddr")
         operationTypeCode = intent.getIntExtra("operationTypeCode", -1)
+        orderNumber = intent.getStringExtra("orderNumber")
+        
+        // 鑾峰彇鍏呭�肩浉鍏冲弬鏁�
+        rechargeAmount = intent.getDoubleExtra("rechargeAmount", 0.0)
+        bonusAmount = intent.getDoubleExtra("bonusAmount", 0.0)
+        
+        // 鑾峰彇鍏朵粬鎿嶄綔鐩稿叧鍙傛暟
+        refundAmount = intent.getDoubleExtra("refundAmount", 0.0)
+        cardBalance = intent.getDoubleExtra("cardBalance", 0.0)
+        returnAmount = intent.getDoubleExtra("returnAmount", 0.0)
+        deductAmount = intent.getDoubleExtra("deductAmount", 0.0)
+        cardCost = intent.getDoubleExtra("cardCost", 0.0)
+        reissueAmount = intent.getDoubleExtra("reissueAmount", 0.0)
+        
         if (intent.hasExtra("userCard")) {
             userCard = intent.getSerializableExtra("userCard") as UserCard
         }
@@ -52,6 +84,11 @@
                     "鍗$墖宸叉垚鍔熼攢鍗″苟娓呴櫎鍐呭\n鍗″彿锛�$cardNumber\n璇ュ崱鐗囧皢鏃犳硶鍐嶆浣跨敤"
                 }
                 binding.successMessage.text = message
+                
+                // 閿�鍗℃垚鍔熷悗鑷姩鎵撳嵃
+                userCard?.let { card ->
+                    doPrint(card)
+                }
             }
 
             CardOperationType.SUPPLEMENT -> {
@@ -68,6 +105,11 @@
                     "鍗$墖杩旇繕鎿嶄綔宸叉垚鍔熷畬鎴怽n鍗″彿锛�$cardNumber\n鍗″唴浣欓宸叉洿鏂�"
                 }
                 binding.successMessage.text = message
+                
+                // 杩旇繕鎴愬姛鍚庤嚜鍔ㄦ墦鍗�
+                userCard?.let { card ->
+                    doPrint(card)
+                }
             }
 
             CardOperationType.DeductCard -> {
@@ -84,6 +126,11 @@
                     "鍗$墖琛ユ墸鎿嶄綔宸叉垚鍔熷畬鎴怽n鍗″彿锛�$cardNumber\n鍗″唴浣欓宸叉洿鏂�"
                 }
                 binding.successMessage.text = message
+                
+                // 琛ユ墸鎴愬姛鍚庤嚜鍔ㄦ墦鍗�
+                userCard?.let { card ->
+                    doPrint(card)
+                }
             }
 
             CardOperationType.ReplaceCard -> {
@@ -103,10 +150,28 @@
             }
 
             CardOperationType.Recharge -> {
-                binding.titleBar.setCenterText("鍐欏崱鎴愬姛")
-                binding.successTitle.text = "鍐欏崱鎴愬姛"
-                binding.successMessage.text =
-                    "鍗″唴浣欓宸叉洿鏂颁负"+MornyUtil.changeF2Y(userCard?.balance?:0.toInt()) +"鍏�"
+                binding.titleBar.setCenterText("鍏呭�兼垚鍔�")
+                binding.successTitle.text = "鍏呭�兼垚鍔�"
+                
+                val messageBuilder = StringBuilder()
+                messageBuilder.append("鍏呭�兼搷浣滃凡鎴愬姛瀹屾垚\n")
+                
+                if (rechargeAmount > 0) {
+                    messageBuilder.append("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)}鍏僜n")
+                }
+                
+                if (bonusAmount > 0) {
+                    messageBuilder.append("璧犻�侀噾棰濓細${String.format("%.2f", bonusAmount)}鍏僜n")
+                }
+                
+                messageBuilder.append("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard?.balance ?: 0)}鍏�")
+                
+                binding.successMessage.text = messageBuilder.toString()
+                
+                // 鍏呭�兼垚鍔熷悗鑷姩鎵撳嵃
+                userCard?.let { card ->
+                    doPrint(card)
+                }
             }
 
             else -> {
@@ -133,4 +198,224 @@
             finish()
         }
     }
+
+    /**
+     * 鎵撳嵃鍏呭�兼垚鍔熶俊鎭埌鎵撳嵃鏈�
+     * @param userCard 鐢ㄦ埛鍗$墖淇℃伅锛屽寘鍚綑棰濈瓑淇℃伅
+     * 鍑芥暟浼氭瀯寤烘墦鍗版暟鎹苟璋冪敤鎵撳嵃閫傞厤鍣ㄨ繘琛屾墦鍗�
+     */
+    private fun doPrint(userCard: UserCard) {
+        try {
+            // 鍒涘缓鎵撳嵃鏁版嵁鍒楄〃
+            val data: MutableList<String> = ArrayList()
+            
+            // 鏍规嵁鎿嶄綔绫诲瀷璁剧疆涓嶅悓鐨勬墦鍗板唴瀹�
+            val operationType = CardOperationType.fromCode(operationTypeCode)
+            
+            when (operationType) {
+                CardOperationType.Recharge -> {
+                    // 鍏呭�兼墦鍗板唴瀹�
+                    data.add("*****************************")
+                    data.add("        鍏呭�煎嚟璇�")
+                    data.add("*****************************")
+                    
+                    // 娣诲姞鐢ㄦ埛缂栧彿锛堜粠UserCard涓幏鍙栵級
+                    if (!userCard.userCode.isNullOrEmpty()) {
+                        data.add("鐢ㄦ埛缂栧彿锛�${userCard.userCode}")
+                    }
+                    
+                    // 娣诲姞鍗″湴鍧�
+                    val cardAddress = cardNumber ?: cardAddr
+                    if (!cardAddress.isNullOrEmpty()) {
+                        data.add("鍗� 鍦� 鍧�锛�$cardAddress")
+                    }
+                    
+                    // 娣诲姞鐢ㄦ埛缂栧彿锛堜粠UserCard涓幏鍙栵級
+                    if (!userCard.userCode.isNullOrEmpty()) {
+                        data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}")
+                    }
+                    
+                    // 娣诲姞鍏呭�奸噾棰�
+                    if (rechargeAmount > 0) {
+                        data.add("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)} 鍏�")
+                    }
+                    
+                    // 娣诲姞璧犻�侀噾棰�
+                    if (bonusAmount > 0) {
+                        data.add("璧犻�侀噾棰濓細${String.format("%.2f", bonusAmount)} 鍏�")
+                    }
+                    
+                    // 娣诲姞鍏呭�煎悗浣欓
+                    data.add("鍏呭�煎悗浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�")
+                    
+                    // 娣诲姞鏃ユ湡淇℃伅
+                    data.add("鏃�   鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
+                    
+                    // 娣诲姞璁㈠崟鍙�
+                    if (!orderNumber.isNullOrEmpty()) {
+                        data.add("璁㈠崟鍙凤細$orderNumber")
+                    }
+                    
+                    // 娣诲姞璁惧鎿嶄綔鍛樹俊鎭�
+                    data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}")
+                    data.add("*****************************")
+                }
+                
+                CardOperationType.ReplaceCard -> {
+                    // 琛ュ崱鎵撳嵃鍐呭
+                    data.add("*****************************")
+                    data.add("        琛ュ崱鍑瘉")
+                    data.add("*****************************")
+                    
+                    val cardAddress = cardNumber ?: cardAddr
+                    if (!cardAddress.isNullOrEmpty()) {
+                        data.add("鍗� 鍦� 鍧�锛�$cardAddress")
+                    }
+                    
+                    if (!userCard.userCode.isNullOrEmpty()) {
+                        data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}")
+                    }
+                    
+                    if (cardCost > 0) {
+                        data.add("宸� 鏈� 璐癸細${String.format("%.2f", cardCost)} 鍏�")
+                    }
+                    
+                    if (reissueAmount > 0) {
+                        data.add("杩旇繕閲戦锛�${String.format("%.2f", reissueAmount)} 鍏�")
+                    }
+                    
+                    data.add("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�")
+                    data.add("鏃�   鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
+                    
+                    if (!orderNumber.isNullOrEmpty()) {
+                        data.add("璁㈠崟鍙凤細$orderNumber")
+                    }
+                    
+                    data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}")
+                    data.add("*****************************")
+                }
+                
+                CardOperationType.CancelCard -> {
+                    // 閿�鍗℃墦鍗板唴瀹�
+                    data.add("*****************************")
+                    data.add("        閿�鍗″嚟璇�")
+                    data.add("*****************************")
+                    
+                    val cardAddress = cardNumber ?: cardAddr
+                    if (!cardAddress.isNullOrEmpty()) {
+                        data.add("鍗� 鍦� 鍧�锛�$cardAddress")
+                    }
+                    
+                    if (!userCard.userCode.isNullOrEmpty()) {
+                        data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}")
+                    }
+                    
+                    if (refundAmount > 0) {
+                        data.add("閫�娆鹃噾棰濓細${String.format("%.2f", refundAmount)} 鍏�")
+                    }
+                    
+                    data.add("鍘熷崱浣欓锛�${String.format("%.2f", cardBalance)} 鍏�")
+                    data.add("鏃�   鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
+                    
+                    if (!orderNumber.isNullOrEmpty()) {
+                        data.add("璁㈠崟鍙凤細$orderNumber")
+                    }
+                    
+                    data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}")
+                    data.add("*****************************")
+                }
+                
+                 CardOperationType.SUPPLEMENT -> {
+                    // 杩旇繕鎵撳嵃鍐呭
+                    data.add("*****************************")
+                    data.add("        杩旇繕鍑瘉")
+                    data.add("*****************************")
+                    
+                    val cardAddress = cardNumber ?: cardAddr
+                    if (!cardAddress.isNullOrEmpty()) {
+                        data.add("鍗� 鍦� 鍧�锛�$cardAddress")
+                    }
+                    
+                    if (!userCard.userCode.isNullOrEmpty()) {
+                        data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}")
+                    }
+                    
+                    if (returnAmount > 0) {
+                        data.add("杩旇繕閲戦锛�${String.format("%.2f", returnAmount)} 鍏�")
+                    }
+                    
+                    data.add("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�")
+                    data.add("鏃�   鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
+                    
+                    if (!orderNumber.isNullOrEmpty()) {
+                        data.add("璁㈠崟鍙凤細$orderNumber")
+                    }
+                    
+                    data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}")
+                    data.add("*****************************")
+                }
+                
+                CardOperationType.DeductCard -> {
+                    // 琛ユ墸鎵撳嵃鍐呭
+                    data.add("*****************************")
+                    data.add("        琛ユ墸鍑瘉")
+                    data.add("*****************************")
+                    
+                    val cardAddress = cardNumber ?: cardAddr
+                    if (!cardAddress.isNullOrEmpty()) {
+                        data.add("鍗� 鍦� 鍧�锛�$cardAddress")
+                    }
+                    
+                    if (!userCard.userCode.isNullOrEmpty()) {
+                        data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}")
+                    }
+                    
+                    if (deductAmount > 0) {
+                        data.add("琛ユ墸閲戦锛�${String.format("%.2f", deductAmount)} 鍏�")
+                    }
+                    
+                    data.add("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�")
+                    data.add("鏃�   鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
+                    
+                    if (!orderNumber.isNullOrEmpty()) {
+                        data.add("璁㈠崟鍙凤細$orderNumber")
+                    }
+                    
+                    data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}")
+                    data.add("*****************************")
+                }
+                
+                else -> {
+                    // 鍏朵粬鎿嶄綔鐨勯�氱敤鎵撳嵃鍐呭
+                    data.add("*****************************")
+                    data.add("        鎿嶄綔鍑瘉")
+                    data.add("*****************************")
+                    
+                    val cardAddress = cardNumber ?: cardAddr
+                    if (!cardAddress.isNullOrEmpty()) {
+                        data.add("鍗� 鍦� 鍧�锛�$cardAddress")
+                    }
+                    
+                    data.add("鎿嶄綔绫诲瀷锛�${operationType?.description ?: "鏈煡鎿嶄綔"}")
+                    data.add("鏃�   鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
+                    data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}")
+                    data.add("*****************************")
+                }
+            }
+            
+            // 璁剧疆鎵撳嵃瀛椾綋澶у皬
+            val size = 26f
+            // 鎵ц鎵撳嵃鎿嶄綔
+            PrintAdater.printText(data, size, true, false)
+            
+        } catch (e: Exception) {
+            // 鎵撳嵃寮傚父淇℃伅
+            e.printStackTrace()
+            // 鍙互娣诲姞Toast鎻愮ず鐢ㄦ埛鎵撳嵃澶辫触
+            runOnUiThread {
+                com.dayu.baselibrary.utils.ToastUtil.show("鎵撳嵃澶辫触锛�${e.message}")
+            }
+        }
+    }
+
 } 
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
index a58bf9a..4a7def0 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
@@ -5,6 +5,7 @@
 import android.text.Editable
 import android.text.TextWatcher
 import android.view.View
+import android.widget.Toast
 import androidx.databinding.DataBindingUtil
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
 import com.dayu.baselibrary.utils.BaseCommon
@@ -18,6 +19,7 @@
 import com.dayu.general.tool.BaseCommon.Companion.protocol
 import com.dayu.general.tool.CardCommon
 import com.dayu.general.tool.NfcReadHelper
+import com.dayu.general.tool.NfcWreatHelper
 
 class ManagerReadActivity : BaseNfcActivity() {
 
@@ -196,16 +198,42 @@
     fun getRemark(): String = viewModel.remark.get() ?: ""
 
     override fun onNfcBack(intent: Intent) {
+        val cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose()
+        if (cardNumber.isNotEmpty()) {
+            val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList())
+            val nfcHelper = NfcWreatHelper.getInstance(intent, this)
+            nfcHelper.setLoadingView(binding.loadingContainer, binding.nfcProgressWheel)
+            // 寮傛淇敼瀵嗙爜
+            nfcHelper.changePSAsync(
+                keyList,
+                true,  // 淇敼涓簍rue锛岀‘淇濆缓绔婲FC杩炴帴
+                true
+            ) { success: Boolean, msg: String? ->
+                if (success) {
+                    // 闅愯棌NFC璇诲崱鐣岄潰
+                    if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
+                        binding.btnNext.visibility = View.VISIBLE
+                        binding.dataLayout.visibility = View.VISIBLE
+                        binding.scrollReadCard.visibility = View.GONE
+                        setCardNumber(cardNumber)
+                    } else if (cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
+                        ToastUtil.show("褰撳墠鍗″瘑鐮侀敊璇紝涓嶆槸鏈叕鍙稿崱")
+                    }
+                } else {
+                    // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐�
+                    Toast.makeText(
+                        this@ManagerReadActivity,
+                        "鍗$墖鍒濆鍖栧け璐ワ細$msg",
+                        Toast.LENGTH_LONG
+                    ).show()
+                }
+            }
+        }
+        // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException
+
         // 澶勭悊NFC璇诲彇缁撴灉
         NfcReadHelper.getInstance(intent, this).getCardNumber().let { cardNumber ->
-            if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
-                binding.btnNext.visibility = View.VISIBLE
-                binding.dataLayout.visibility = View.VISIBLE
-                binding.scrollReadCard.visibility = View.GONE
-                setCardNumber(cardNumber)
-            } else if (cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
-                ToastUtil.show("褰撳墠鍗″瘑鐮侀敊璇紝涓嶆槸鏈叕鍙稿崱")
-            }
+
         }
     }
 
@@ -281,7 +309,7 @@
             map["projectNumber"] = projectNumber
         }
         map["protocol"] = protocol
-        map["securityCode"]="A0B1C289"
+        map["securityCode"] = "A0B1C289"
 
         // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
         ApiManager.getInstance().requestPostLoading(
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
index 7658e5b..80ee7a7 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
@@ -529,14 +529,18 @@
         bonusAmount: Double
     ) {
         try {
-            // 鍒涘缓UserCard瀵硅薄鐢ㄤ簬鍐欏崱
-            val userCard = UserCard().apply {
-                // 璁剧疆鐢ㄦ埛鍗′俊鎭�
-                cardInfo?.let { info ->
-                    balance = MornyUtil.changeY2F(rechargeResult.balance)
-                }
+            // 妫�鏌ユ槸鍚︽湁浼犻�掕繃鏉ョ殑userCard瀵硅薄
+            val cardToWrite = this.userCard ?: run {
+                ToastUtil.show("鐢ㄦ埛鍗′俊鎭己澶�")
+                return
+            }
 
-                // 璁剧疆鍏朵粬蹇呰淇℃伅
+            // 鏇存柊浼犻�掕繃鏉ョ殑UserCard瀵硅薄鏁版嵁
+            cardToWrite.apply {
+                // 鏇存柊鍏呭�煎悗鐨勪綑棰�
+                balance = MornyUtil.changeY2F(rechargeResult.balance)
+                
+                // 鏇存柊鍏朵粬鍏呭�肩浉鍏充俊鎭�
                 projectCode = rechargeResult.projectNo
                 waterPrice = MornyUtil.changeY2F(rechargeResult.waterPrice.toString())
                 rechargeDate = java.util.Calendar.getInstance()
@@ -548,7 +552,7 @@
                 putExtra("cardAddr", cardAddress)
                 putExtra("operationTypeCode", CardOperationType.Recharge.code)
                 putExtra("orderNumber", rechargeResult.orderNo)
-                putExtra("userCard", userCard)
+                putExtra("userCard", cardToWrite)
                 putExtra("rechargeAmount", rechargeAmount) // 浼犻�掑厖鍊奸噾棰�
                 putExtra("bonusAmount", bonusAmount) // 浼犻�掕禒閫侀噾棰�
             }
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt
index 51136ba..3dc8847 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt
@@ -86,8 +86,14 @@
                     return
                 }
                 if (cardType != CardCommon.USER_CARD_TYPE_1) {
-                    showConfirmDialog("璇ュ崱鐗囦笉鏄敤鎴峰崱锛岃浣跨敤姝g‘鐨勭敤鎴峰崱杩涜鍏呭�兼搷浣溿��") {
+                    if(cardType == CardCommon.USER_CARD_TYPE_2){
+                        showConfirmDialog("璇ュ崱鐗囧凡寮�娉碉紝璇峰叧娉靛悗鍏呭�笺��") {
+                        }
+                    }else{
+                        showConfirmDialog("璇ュ崱鐗囦笉鏄敤鎴峰崱锛岃浣跨敤姝g‘鐨勭敤鎴峰崱杩涜鍏呭�兼搷浣溿��") {
+                        }
                     }
+
                     return
                 }
 
diff --git a/generallibrary/src/main/res/layout/activity_manager_read.xml b/generallibrary/src/main/res/layout/activity_manager_read.xml
index 20ba03c..3bb6c28 100644
--- a/generallibrary/src/main/res/layout/activity_manager_read.xml
+++ b/generallibrary/src/main/res/layout/activity_manager_read.xml
@@ -156,78 +156,109 @@
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:orientation="vertical"
-                android:padding="16dp">
+                android:orientation="vertical">
 
-                <LinearLayout
-                    android:id="@+id/card_read_LL"
+                <androidx.cardview.widget.CardView
+                    android:id="@+id/nfcContainer"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
-                    android:gravity="center"
-                    android:orientation="vertical">
+                    android:layout_marginStart="16dp"
+                    android:layout_marginTop="24dp"
+                    android:layout_marginEnd="16dp"
+                    android:layout_marginBottom="24dp"
+                    android:visibility="visible"
+                    app:cardBackgroundColor="@android:color/white"
+                    app:cardCornerRadius="12dp"
+                    app:cardElevation="4dp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@id/titleBar">
 
-                    <androidx.cardview.widget.CardView
+                    <FrameLayout
                         android:layout_width="match_parent"
-                        android:layout_height="match_parent"
-                        android:layout_marginBottom="16dp"
-                        app:cardCornerRadius="8dp"
-                        app:cardElevation="2dp">
+                        android:layout_height="match_parent">
 
-                        <RelativeLayout
+                        <LinearLayout
                             android:layout_width="match_parent"
                             android:layout_height="match_parent"
+                            android:gravity="center"
+                            android:orientation="vertical"
                             android:padding="16dp">
 
                             <TextView
-                                android:id="@+id/tv_title"
+                                android:id="@+id/textView"
                                 android:layout_width="match_parent"
                                 android:layout_height="wrap_content"
-                                android:layout_marginBottom="100dp"
                                 android:gravity="center"
-                                android:text="鍒朵綔绠$悊鍗�"
-                                android:layout_marginTop="20dp"
-                                android:textColor="@color/base_blue_bg"
-                                android:textSize="@dimen/big_text_size"
+                                android:text="璇峰皢鏂板崱璐村湪璁惧涓婅繘琛岃鍗�"
+                                android:textColor="#333333"
+                                android:textSize="18sp"
                                 android:textStyle="bold" />
 
                             <TextView
-                                android:id="@+id/tv_subtitle"
                                 android:layout_width="match_parent"
                                 android:layout_height="wrap_content"
-                                android:layout_below="@+id/tv_title"
-                                android:layout_marginBottom="20dp"
+                                android:layout_marginTop="20dp"
                                 android:gravity="center"
-                                android:text="璇峰皢鏂板崱璐村湪璁惧涓婅繘琛岃鍙�"
-                                android:textColor="#333333"
-                                android:textSize="@dimen/text_size"
+                                android:text="灏嗚繘琛屽垵濮嬪寲鍗$墖\n鑰楁椂杈冮暱璇蜂笉瑕佺Щ鍔ㄥ崱鐗�"
+                                android:textColor="@color/base_blue_bg"
+                                android:textSize="18sp"
                                 android:textStyle="bold" />
 
                             <ImageView
-                                android:id="@+id/iv_nfc"
-                                android:layout_width="120dp"
-                                android:layout_height="120dp"
-                                android:layout_below="@+id/tv_subtitle"
-                                android:layout_centerHorizontal="true"
-                                android:layout_marginBottom="20dp"
+                                android:id="@+id/nfcImageView"
+                                android:layout_width="200dp"
+                                android:layout_height="200dp"
+                                android:layout_marginTop="24dp"
                                 android:scaleType="fitCenter"
                                 android:src="@mipmap/nfc_write" />
 
                             <TextView
-                                android:id="@+id/tv_tip"
                                 android:layout_width="match_parent"
                                 android:layout_height="wrap_content"
-                                android:layout_below="@+id/iv_nfc"
+                                android:layout_marginTop="16dp"
                                 android:gravity="center"
-                                android:text="璇诲彇鏂板崱鍚庡皢鏄剧ず鍘熷崱淇℃伅杩涜鍒朵綔绠$悊鍗�"
+                                android:text="璇蜂繚鎸佹墜鎸佹満鍜屽崱鐗囦笉瑕佺Щ鍔�"
                                 android:textColor="#666666"
-                                android:textSize="@dimen/new_card_size" />
+                                android:textSize="14sp" />
+                        </LinearLayout>
 
+                        <RelativeLayout
+                            android:id="@+id/loadingContainer"
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:background="#80000000"
+                            android:visibility="gone">
+
+                            <com.pnikosis.materialishprogress.ProgressWheel
+                                android:id="@+id/nfcProgressWheel"
+                                android:layout_width="100dp"
+                                android:layout_height="100dp"
+                                android:layout_centerInParent="true"
+                                app:matProg_barColor="@color/base_blue_bg"
+                                app:matProg_barWidth="8dp"
+                                app:matProg_progressIndeterminate="true"
+                                app:matProg_rimColor="#33000000"
+                                app:matProg_rimWidth="8dp"
+                                app:matProg_spinSpeed="0.5" />
+
+                            <TextView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:layout_below="@id/nfcProgressWheel"
+                                android:layout_centerHorizontal="true"
+                                android:layout_marginTop="12dp"
+                                android:text="姝e湪澶勭悊NFC鍗$墖..."
+                                android:textColor="#FFFFFF"
+                                android:textSize="16sp" />
                         </RelativeLayout>
-                    </androidx.cardview.widget.CardView>
-                </LinearLayout>
+                    </FrameLayout>
+                </androidx.cardview.widget.CardView>
 
             </LinearLayout>
         </ScrollView>
+
         <TextView
             android:id="@+id/btn_next"
             android:layout_width="match_parent"
@@ -238,10 +269,10 @@
             android:layout_marginBottom="16dp"
             android:background="#4285F4"
             android:gravity="center"
-            android:visibility="gone"
             android:text="涓嬩竴姝�"
             android:textColor="#FFFFFF"
-            android:textSize="16sp" />
+            android:textSize="16sp"
+            android:visibility="gone" />
 
     </RelativeLayout>
 </layout>
\ No newline at end of file

--
Gitblit v1.8.0