From 32d1501e6fe6338eb6dc51c26df7fe0808caac0d Mon Sep 17 00:00:00 2001
From: zuoxiao <lf_zuo@163.com>
Date: 星期四, 26 六月 2025 15:05:28 +0800
Subject: [PATCH] feat(general): 优化写卡成功界面并添加开卡功能- 重新设计写卡成功界面布局,增加滚动视图以支持长文本显示 - 添加开卡功能相关的UI和逻辑,包括工本费和充值金额的展示- 增加用户姓名和卡片信息的显示 - 优化打印凭证的内容和格式 -调整NFC连接逻辑,提高连接成功率

---
 generallibrary/src/main/res/drawable/bg_button_outline.xml                         |    9 
 generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt       |    1 
 generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt |  307 +++++++++++++++++++++++-------
 generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt      |    8 
 generallibrary/src/main/res/drawable/bg_button_outline_selector.xml                |   21 ++
 generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt      |    1 
 generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt         |   97 ++++++---
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java |   29 --
 generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt       |    1 
 generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt         |    1 
 generallibrary/src/main/res/layout/activity_card_write_success.xml                 |  112 ++++++----
 generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt   |    2 
 generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt       |    1 
 13 files changed, 412 insertions(+), 178 deletions(-)

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 30068ec..f58e809 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,33 +356,8 @@
             }
 
             try {
-                // 杩炴帴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;
+                if (isConnect) {
+                    mfc.connect();
                 }
 
                 for (int i = 0; i < passWord.size(); i++) {
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
index 06c3b3f..e6256ba 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
@@ -389,6 +389,7 @@
             putExtra("orderNumber", cancelResult.orderNo)
             putExtra("refundAmount", refundAmount)
             putExtra("userCard", userCard)
+            putExtra("cardInfo", cardInfo)
             // 浼犻�掑綋鍓嶅崱鍐呬綑棰濅俊鎭�
             cardInfo?.let { info ->
                 putExtra("cardBalance", info.balance ?: 0.0)
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt
index 4351298..ad28f9c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt
@@ -384,6 +384,7 @@
             putExtra("orderNumber", deductResult.orderNo)
             putExtra("deductAmount", deductAmount)
             putExtra("userCard", updatedUserCard as java.io.Serializable)
+            putExtra("cardInfo", cardInfo)
         }
         startActivity(intent)
         finish()
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
index fd354f1..59dfd9b 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
@@ -376,6 +376,7 @@
             putExtra("paymentMethod", paymentMethod) // 浼犻�掓敮浠樻柟寮�
             putExtra("paymentId", paymentId) // 浼犻�掓敮浠樻柟寮廔D
             putExtra("userCard", updatedUserCard as java.io.Serializable)
+            putExtra("cardInfo", cardInfo)
         }
         startActivity(intent)
         finish()
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt
index 2da04cd..56ff22c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt
@@ -385,6 +385,7 @@
             putExtra("orderNumber", returnResult.orderNo)
             putExtra("returnAmount", returnAmount)
             putExtra("userCard", updatedUserCard as java.io.Serializable)
+            putExtra("cardInfo", cardInfo)
         }
         startActivity(intent)
         finish()
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 6452333..6872853 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
@@ -6,6 +6,7 @@
 import com.dayu.baselibrary.utils.MornyUtil
 import com.dayu.general.BaseApplication
 import com.dayu.general.bean.card.UserCard
+import com.dayu.general.bean.net.CardInfoResult
 import com.dayu.general.databinding.ActivityCardWriteSuccessBinding
 import com.dayu.general.tool.CardOperationType
 
@@ -22,11 +23,12 @@
     private var operationTypeCode: Int = -1
     private var userCard: UserCard? = null
     private var orderNumber: String? = null
-    
+    private var cardInfo: CardInfoResult? = null
+
     // 鍏呭�肩浉鍏冲弬鏁�
     private var rechargeAmount = 0.0
     private var bonusAmount = 0.0
-    
+
     // 鍏朵粬鎿嶄綔鐩稿叧鍙傛暟
     private var refundAmount = 0.0
     private var cardBalance = 0.0
@@ -34,6 +36,7 @@
     private var deductAmount = 0.0
     private var cardCost = 0.0
     private var reissueAmount = 0.0
+    private var cardFee = 0
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -45,11 +48,13 @@
         cardAddr = intent.getStringExtra("cardAddr")
         operationTypeCode = intent.getIntExtra("operationTypeCode", -1)
         orderNumber = intent.getStringExtra("orderNumber")
-        
+
+        cardFee = intent.getIntExtra("cardFee", 0);
+
         // 鑾峰彇鍏呭�肩浉鍏冲弬鏁�
         rechargeAmount = intent.getDoubleExtra("rechargeAmount", 0.0)
         bonusAmount = intent.getDoubleExtra("bonusAmount", 0.0)
-        
+
         // 鑾峰彇鍏朵粬鎿嶄綔鐩稿叧鍙傛暟
         refundAmount = intent.getDoubleExtra("refundAmount", 0.0)
         cardBalance = intent.getDoubleExtra("cardBalance", 0.0)
@@ -57,9 +62,13 @@
         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
+        }
+
+        if (intent.hasExtra("cardInfo")) {
+            cardInfo = intent.getSerializableExtra("cardInfo") as CardInfoResult
         }
 
         initView()
@@ -84,7 +93,7 @@
                     "鍗$墖宸叉垚鍔熼攢鍗″苟娓呴櫎鍐呭\n鍗″彿锛�$cardNumber\n璇ュ崱鐗囧皢鏃犳硶鍐嶆浣跨敤"
                 }
                 binding.successMessage.text = message
-                
+
                 // 閿�鍗℃垚鍔熷悗鑷姩鎵撳嵃
                 userCard?.let { card ->
                     doPrint(card)
@@ -105,7 +114,7 @@
                     "鍗$墖杩旇繕鎿嶄綔宸叉垚鍔熷畬鎴怽n鍗″彿锛�$cardNumber\n鍗″唴浣欓宸叉洿鏂�"
                 }
                 binding.successMessage.text = message
-                
+
                 // 杩旇繕鎴愬姛鍚庤嚜鍔ㄦ墦鍗�
                 userCard?.let { card ->
                     doPrint(card)
@@ -126,7 +135,7 @@
                     "鍗$墖琛ユ墸鎿嶄綔宸叉垚鍔熷畬鎴怽n鍗″彿锛�$cardNumber\n鍗″唴浣欓宸叉洿鏂�"
                 }
                 binding.successMessage.text = message
-                
+
                 // 琛ユ墸鎴愬姛鍚庤嚜鍔ㄦ墦鍗�
                 userCard?.let { card ->
                     doPrint(card)
@@ -152,22 +161,36 @@
             CardOperationType.Recharge -> {
                 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)
+                }
+            }
+
+            CardOperationType.OpenCard -> {
+                binding.titleBar.setCenterText("寮�鍗℃垚鍔�")
+                binding.successTitle.text = "寮�鍗℃垚鍔�"
+                val messageBuilder = StringBuilder()
+                if (rechargeAmount > 0) {
+                    messageBuilder.append("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)}鍏僜n")
+                }
+                messageBuilder.append("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard?.balance ?: 0)}鍏�")
                 // 鍏呭�兼垚鍔熷悗鑷姩鎵撳嵃
                 userCard?.let { card ->
                     doPrint(card)
@@ -193,6 +216,13 @@
             finish()
         }
 
+        // 璁剧疆鍐嶆鎵撳嵃鎸夐挳鐐瑰嚮鐩戝惉鍣�
+        binding.btnReprint.setOnClickListener {
+            userCard?.let { card ->
+                doPrint(card)
+            }
+        }
+
         // 璁剧疆鏍囬鏍忚繑鍥炴寜閽�
         binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) {
             finish()
@@ -208,206 +238,341 @@
         try {
             // 鍒涘缓鎵撳嵃鏁版嵁鍒楄〃
             val data: MutableList<String> = ArrayList()
-            
+
             // 鏍规嵁鎿嶄綔绫诲瀷璁剧疆涓嶅悓鐨勬墦鍗板唴瀹�
             val operationType = CardOperationType.fromCode(operationTypeCode)
-            
+
             when (operationType) {
                 CardOperationType.Recharge -> {
                     // 鍏呭�兼墦鍗板唴瀹�
                     data.add("*****************************")
-                    data.add("        鍏呭�煎嚟璇�")
+                    data.add("           鍏呭�煎嚟璇�")
                     data.add("*****************************")
-                    
-                    // 娣诲姞鐢ㄦ埛缂栧彿锛堜粠UserCard涓幏鍙栵級
-                    if (!userCard.userCode.isNullOrEmpty()) {
-                        data.add("鐢ㄦ埛缂栧彿锛�${userCard.userCode}")
+
+                    // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級
+                    cardInfo?.userName?.let { userName ->
+                        if (userName.isNotEmpty()) {
+                            data.add("鐢ㄦ埛濮撳悕锛�$userName")
+                        }
                     }
-                    
+
                     // 娣诲姞鍗″湴鍧�
                     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(
+                        "鏃�   鏈燂細${
+                            DateUtil.dateToStamp(
+                                System.currentTimeMillis(),
+                                DateUtil.type2
+                            )
+                        }"
+                    )
                     data.add("*****************************")
                 }
-                
+
                 CardOperationType.ReplaceCard -> {
                     // 琛ュ崱鎵撳嵃鍐呭
                     data.add("*****************************")
                     data.add("        琛ュ崱鍑瘉")
                     data.add("*****************************")
-                    
+
+                    // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級
+                    cardInfo?.userName?.let { userName ->
+                        if (userName.isNotEmpty()) {
+                            data.add("鐢ㄦ埛濮撳悕锛�$userName")
+                        }
+                    }
+
                     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(
+                        "鏃�   鏈燂細${
+                            DateUtil.dateToStamp(
+                                System.currentTimeMillis(),
+                                DateUtil.type2
+                            )
+                        }"
+                    )
                     data.add("*****************************")
                 }
-                
+
                 CardOperationType.CancelCard -> {
                     // 閿�鍗℃墦鍗板唴瀹�
                     data.add("*****************************")
                     data.add("        閿�鍗″嚟璇�")
                     data.add("*****************************")
-                    
+
+                    // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級
+                    cardInfo?.userName?.let { userName ->
+                        if (userName.isNotEmpty()) {
+                            data.add("鐢ㄦ埛濮撳悕锛�$userName")
+                        }
+                    }
+
                     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(
+                        "鏃�   鏈燂細${
+                            DateUtil.dateToStamp(
+                                System.currentTimeMillis(),
+                                DateUtil.type2
+                            )
+                        }"
+                    )
                     data.add("*****************************")
                 }
-                
-                 CardOperationType.SUPPLEMENT -> {
+
+                CardOperationType.SUPPLEMENT -> {
                     // 杩旇繕鎵撳嵃鍐呭
                     data.add("*****************************")
                     data.add("        杩旇繕鍑瘉")
                     data.add("*****************************")
-                    
+
+                    // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級
+                    cardInfo?.userName?.let { userName ->
+                        if (userName.isNotEmpty()) {
+                            data.add("鐢ㄦ埛濮撳悕锛�$userName")
+                        }
+                    }
+
                     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(
+                        "鏃�   鏈燂細${
+                            DateUtil.dateToStamp(
+                                System.currentTimeMillis(),
+                                DateUtil.type2
+                            )
+                        }"
+                    )
                     data.add("*****************************")
                 }
-                
+
                 CardOperationType.DeductCard -> {
                     // 琛ユ墸鎵撳嵃鍐呭
                     data.add("*****************************")
                     data.add("        琛ユ墸鍑瘉")
                     data.add("*****************************")
-                    
+
+                    // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級
+                    cardInfo?.userName?.let { userName ->
+                        if (userName.isNotEmpty()) {
+                            data.add("鐢ㄦ埛濮撳悕锛�$userName")
+                        }
+                    }
+
                     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(
+                        "鏃�   鏈燂細${
+                            DateUtil.dateToStamp(
+                                System.currentTimeMillis(),
+                                DateUtil.type2
+                            )
+                        }"
+                    )
                     data.add("*****************************")
                 }
-                
+
+                CardOperationType.OpenCard -> {
+                    data.add("*****************************")
+                    data.add("           寮�鍗″嚟璇�")
+                    data.add("*****************************")
+
+                    // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級
+                    cardInfo?.userName?.let { userName ->
+                        if (userName.isNotEmpty()) {
+                            data.add("鐢ㄦ埛濮撳悕锛�$userName")
+                        }
+                    }
+
+                    // 娣诲姞鍗″湴鍧�
+                    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)} 鍏�")
+                        // 娣诲姞鍏呭�煎悗浣欓
+                        data.add("鍏呭�煎悗浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�")
+                    }
+
+                    // 娣诲姞璧犻�侀噾棰�
+                    if (cardFee > 0) {
+                        data.add("宸ユ湰璐癸細" + MornyUtil.changeF2Y(cardFee) + "鍏�")
+                    }
+
+                    // 娣诲姞璁㈠崟鍙�
+                    if (!orderNumber.isNullOrEmpty()) {
+                        data.add("璁㈠崟鍙凤細$orderNumber")
+                    }
+
+                    // 娣诲姞璁惧鎿嶄綔鍛樹俊鎭�
+                    data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}")
+                    // 娣诲姞鏃ユ湡淇℃伅
+                    data.add(
+                        "鏃�   鏈燂細${
+                            DateUtil.dateToStamp(
+                                System.currentTimeMillis(),
+                                DateUtil.type2
+                            )
+                        }"
+                    )
+                    data.add("*****************************")
+                }
+
                 else -> {
                     // 鍏朵粬鎿嶄綔鐨勯�氱敤鎵撳嵃鍐呭
                     data.add("*****************************")
                     data.add("        鎿嶄綔鍑瘉")
                     data.add("*****************************")
-                    
+
+                    // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級
+                    cardInfo?.userName?.let { userName ->
+                        if (userName.isNotEmpty()) {
+                            data.add("鐢ㄦ埛濮撳悕锛�$userName")
+                        }
+                    }
+
                     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(
+                        "鏃�   鏈燂細${
+                            DateUtil.dateToStamp(
+                                System.currentTimeMillis(),
+                                DateUtil.type2
+                            )
+                        }"
+                    )
                     data.add("*****************************")
                 }
             }
-            
+
             // 璁剧疆鎵撳嵃瀛椾綋澶у皬
             val size = 26f
             // 鎵ц鎵撳嵃鎿嶄綔
             PrintAdater.printText(data, size, true, false)
-            
+
         } catch (e: Exception) {
             // 鎵撳嵃寮傚父淇℃伅
             e.printStackTrace()
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 4a7def0..b5a79ff 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
@@ -206,7 +206,7 @@
             // 寮傛淇敼瀵嗙爜
             nfcHelper.changePSAsync(
                 keyList,
-                true,  // 淇敼涓簍rue锛岀‘淇濆缓绔婲FC杩炴帴
+                false,  // 淇敼涓簍rue锛岀‘淇濆缓绔婲FC杩炴帴
                 true
             ) { success: Boolean, msg: String? ->
                 if (success) {
@@ -228,12 +228,6 @@
                     ).show()
                 }
             }
-        }
-        // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException
-
-        // 澶勭悊NFC璇诲彇缁撴灉
-        NfcReadHelper.getInstance(intent, this).getCardNumber().let { cardNumber ->
-
         }
     }
 
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
index 3f6fcb8..1be8768 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -470,6 +470,7 @@
                                     putExtra("userCard", userCard)
                                     putExtra("operationTypeCode", CardOperationType.OpenCard.code)
                                     putExtra("cardFee", cardFee)
+
                                     startActivityForResult(this, REQUEST_CODE_NFC_WRITE)
                                 }
                             } catch (e: Exception) {
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
index 94a11b3..fbe415c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -13,6 +13,7 @@
 import com.dayu.general.bean.card.ClearCard
 import com.dayu.general.bean.card.DebugCard
 import com.dayu.general.bean.card.UserCard
+import com.dayu.general.bean.net.CardInfoResult
 import com.dayu.general.dao.BaseDaoSingleton
 import com.dayu.general.databinding.ActivityNfcWriteGeBinding
 import com.dayu.general.net.ApiManager
@@ -98,6 +99,8 @@
     /** 椤圭洰鍙凤紙1-255锛� */
     private var projectNumber: String = ""
 
+    private var cardInfo: CardInfoResult? = null
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         binding = ActivityNfcWriteGeBinding.inflate(layoutInflater)
@@ -116,6 +119,7 @@
         operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1
         orderNumber = intent?.getStringExtra("orderNumber") ?: ""
         operationType = CardOperationType.fromCode(operationTypeCode)
+        cardInfo = intent?.getSerializableExtra("cardInfo") as? CardInfoResult
 
         // 鑾峰彇鍏呭�肩浉鍏抽噾棰�
         rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0
@@ -501,14 +505,14 @@
                         object : NFCCallBack {
                             override fun isSusses(flag: Boolean, msg: String?) {
                                 // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
-                                                            runOnUiThread {
-                                if (flag) {
-                                    // 妫�鏌ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬�
-                                    updateCardWrittenStatus(cardAddr)
-                                } else {
-                                    ToastUtil.show("妫�鏌ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}")
+                                runOnUiThread {
+                                    if (flag) {
+                                        // 妫�鏌ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬�
+                                        updateCardWrittenStatus(cardAddr)
+                                    } else {
+                                        ToastUtil.show("妫�鏌ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}")
+                                    }
                                 }
-                            }
                             }
                         })
                 }
@@ -525,14 +529,14 @@
                         object : NFCCallBack {
                             override fun isSusses(flag: Boolean, msg: String?) {
                                 // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
-                                                            runOnUiThread {
-                                if (flag) {
-                                    // 鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵��
-                                    updateCardWrittenStatus(cardAddr)
-                                } else {
-                                    ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}")
+                                runOnUiThread {
+                                    if (flag) {
+                                        // 鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵��
+                                        updateCardWrittenStatus(cardAddr)
+                                    } else {
+                                        ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}")
+                                    }
                                 }
-                            }
                             }
                         })
                 }
@@ -548,14 +552,14 @@
                         object : NFCCallBack {
                             override fun isSusses(flag: Boolean, msg: String?) {
                                 // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
-                                                            runOnUiThread {
-                                if (flag) {
-                                    // 璋冭瘯鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵��
-                                    updateCardWrittenStatus(cardAddr)
-                                } else {
-                                    ToastUtil.show("璋冭瘯鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}")
+                                runOnUiThread {
+                                    if (flag) {
+                                        // 璋冭瘯鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵��
+                                        updateCardWrittenStatus(cardAddr)
+                                    } else {
+                                        ToastUtil.show("璋冭瘯鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}")
+                                    }
                                 }
-                            }
                             }
                         })
                 }
@@ -605,17 +609,17 @@
         lifecycleScope.launch {
             try {
                 val baseDaoSingleton = BaseDaoSingleton.getInstance(this@NfcWreatActivity)
-                
+
                 // 鏍规嵁鎿嶄綔绫诲瀷鍒ゆ柇鏄鐞嗗崱杩樻槸鐢ㄦ埛鍗℃搷浣�
                 val isManagerCardOperation = operationTypeCode in 100..108
-                
+
                 var updateSuccess = false
-                
+
                 if (isManagerCardOperation) {
                     // 绠$悊鍗″埗浣滄搷浣滅被鍨嬶紝鏌ヨ鍜屾洿鏂癕anagerCardBean
                     val managerCardDao = baseDaoSingleton.managerCardDao()
                     val managerCard = managerCardDao.getByOrderId(orderNumber)
-                    
+
                     if (managerCard != null) {
                         val updatedManagerCard = managerCard.copy(isCardWritten = true)
                         managerCardDao.update(updatedManagerCard)
@@ -625,7 +629,7 @@
                     // 鐢ㄦ埛鍗℃搷浣滅被鍨嬶紝鏌ヨ鍜屾洿鏂癈ardRegistrationBean
                     val cardRegistrationDao = baseDaoSingleton.cardRegistrationDao()
                     val cardRegistration = cardRegistrationDao.getByOrderId(orderNumber)
-                    
+
                     if (cardRegistration != null) {
                         val updatedCardRegistration = cardRegistration.copy(isCardWritten = true)
                         cardRegistrationDao.update(updatedCardRegistration)
@@ -637,21 +641,54 @@
                 runOnUiThread {
                     setResult(RESULT_OK)
                     finish()
-                    
+
                     // 璺宠浆鍒板啓鍗℃垚鍔熺晫闈�
                     Intent(this@NfcWreatActivity, CardWriteSuccessActivity::class.java).apply {
+
+
                         putExtra("cardNumber", cardNumber)
+                        putExtra("cardAddr", cardAddr)
+                        putExtra("operationTypeCode", operationTypeCode)
+                        putExtra("orderNumber", orderNumber)
+                        //寮�鍗$浉鍏冲弬鏁�
+                        putExtra("cardFee", cardFee)
+
+                        // 浼犻�掑厖鍊肩浉鍏冲弬鏁�
+                        putExtra("rechargeAmount", rechargeAmount)
+                        putExtra("bonusAmount", bonusAmount)
+
+                        // 浼犻�掗攢鍗$浉鍏冲弬鏁�
+                        putExtra("refundAmount", refundAmount)
+                        putExtra("cardBalance", cardBalance)
+
+                        // 浼犻�掕繑杩樼浉鍏冲弬鏁�
+                        putExtra("returnAmount", returnAmount)
+
+                        // 浼犻�掕ˉ鎵g浉鍏冲弬鏁�
+                        putExtra("deductAmount", deductAmount)
+
+                        // 浼犻�掕ˉ鍗$浉鍏冲弬鏁�
+                        putExtra("cardCost", cardCost)
+                        putExtra("reissueAmount", reissueAmount)
+
+                        // 浼犻�掔敤鎴峰崱瀵硅薄
                         if (::userCard.isInitialized) {
                             putExtra("userCard", userCard)
                         }
-                        putExtra("operationTypeCode", operationTypeCode)
+
+                        // 浼犻�掑崱鐗囦俊鎭璞�
+                        cardInfo?.let {
+                            putExtra("cardInfo", it)
+                        }
+
+
                         startActivity(this)
                     }
-                    
+
                     // 閫氱煡MainActivity璋冪敤postCardData
                     notifyMainActivityToPostCardData(cardNumber)
                 }
-                
+
             } catch (e: Exception) {
                 // 璁板綍寮傚父淇℃伅
                 CrashReport.postCatchedException(e)
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 80ee7a7..ec3c4d3 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
@@ -555,6 +555,8 @@
                 putExtra("userCard", cardToWrite)
                 putExtra("rechargeAmount", rechargeAmount) // 浼犻�掑厖鍊奸噾棰�
                 putExtra("bonusAmount", bonusAmount) // 浼犻�掕禒閫侀噾棰�
+                putExtra("cardInfo", cardInfo)
+                putExtra(EXTRA_CARD_INFO, cardInfo)
             }
             startActivity(intent)
             finish()
diff --git a/generallibrary/src/main/res/drawable/bg_button_outline.xml b/generallibrary/src/main/res/drawable/bg_button_outline.xml
new file mode 100644
index 0000000..6a82441
--- /dev/null
+++ b/generallibrary/src/main/res/drawable/bg_button_outline.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@android:color/transparent" />
+    <stroke 
+        android:width="1.5dp"
+        android:color="#2196F3" />
+    <corners android:radius="8dp" />
+</shape> 
\ No newline at end of file
diff --git a/generallibrary/src/main/res/drawable/bg_button_outline_selector.xml b/generallibrary/src/main/res/drawable/bg_button_outline_selector.xml
new file mode 100644
index 0000000..a05bde1
--- /dev/null
+++ b/generallibrary/src/main/res/drawable/bg_button_outline_selector.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true">
+        <shape android:shape="rectangle">
+            <solid android:color="#E3F2FD" />
+            <stroke 
+                android:width="1.5dp"
+                android:color="#2196F3" />
+            <corners android:radius="8dp" />
+        </shape>
+    </item>
+    <item>
+        <shape android:shape="rectangle">
+            <solid android:color="@android:color/transparent" />
+            <stroke 
+                android:width="1.5dp"
+                android:color="#2196F3" />
+            <corners android:radius="8dp" />
+        </shape>
+    </item>
+</selector> 
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_card_write_success.xml b/generallibrary/src/main/res/layout/activity_card_write_success.xml
index 2fa9734..c2ca3d0 100644
--- a/generallibrary/src/main/res/layout/activity_card_write_success.xml
+++ b/generallibrary/src/main/res/layout/activity_card_write_success.xml
@@ -22,67 +22,93 @@
         android:layout_marginStart="16dp"
         android:layout_marginTop="24dp"
         android:layout_marginEnd="16dp"
-        android:layout_marginBottom="80dp"
+        android:layout_marginBottom="24dp"
         app:cardBackgroundColor="@android:color/white"
         app:cardCornerRadius="12dp"
         app:cardElevation="4dp"
-        app:layout_constraintBottom_toTopOf="@id/btnConfirm"
+        app:layout_constraintBottom_toTopOf="@id/buttonContainer"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/titleBar">
 
-        <LinearLayout
+        <ScrollView
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:gravity="center"
-            android:orientation="vertical"
-            android:padding="32dp">
+            android:fillViewport="true">
 
-            <ImageView
-                android:id="@+id/successIcon"
-                android:layout_width="150dp"
-                android:layout_height="150dp"
-                android:scaleType="fitCenter"
-                android:src="@drawable/icon_success" />
-
-            <TextView
-                android:id="@+id/successTitle"
-                android:layout_width="wrap_content"
+            <LinearLayout
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="24dp"
-                android:text="鍐欏崱鎴愬姛"
-                android:textColor="#4CAF50"
-                android:textSize="24sp"
-                android:textStyle="bold" />
-
-            <TextView
-                android:id="@+id/successMessage"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="16dp"
                 android:gravity="center"
-                android:text="鍗$墖淇℃伅宸叉垚鍔熷啓鍏n璇峰Ε鍠勪繚绠℃偍鐨勫崱鐗�"
-                android:textColor="#666666"
-                android:textSize="16sp"
-                android:lineSpacingExtra="4dp" />
+                android:orientation="vertical"
+                android:padding="24dp"
+                android:minHeight="300dp">
 
-        </LinearLayout>
+                <ImageView
+                    android:id="@+id/successIcon"
+                    android:layout_width="120dp"
+                    android:layout_height="120dp"
+                    android:scaleType="fitCenter"
+                    android:src="@drawable/icon_success" />
+
+                <TextView
+                    android:id="@+id/successTitle"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="20dp"
+                    android:text="鍐欏崱鎴愬姛"
+                    android:textColor="#4CAF50"
+                    android:textSize="22sp"
+                    android:textStyle="bold" />
+
+                <TextView
+                    android:id="@+id/successMessage"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="12dp"
+                    android:gravity="center"
+                    android:text="鍗$墖淇℃伅宸叉垚鍔熷啓鍏n璇峰Ε鍠勪繚绠℃偍鐨勫崱鐗�"
+                    android:textColor="#666666"
+                    android:textSize="15sp"
+                    android:lineSpacingExtra="4dp" />
+
+            </LinearLayout>
+        </ScrollView>
     </androidx.cardview.widget.CardView>
 
-    <Button
-        android:id="@+id/btnConfirm"
+    <LinearLayout
+        android:id="@+id/buttonContainer"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginStart="32dp"
-        android:layout_marginEnd="32dp"
-        android:layout_marginBottom="24dp"
-        android:background="@drawable/bg_button_primary"
-        android:text="纭畾"
-        android:textColor="@android:color/white"
-        android:textSize="18sp"
-        android:textStyle="bold"
+        android:orientation="vertical"
+        android:paddingStart="32dp"
+        android:paddingEnd="32dp"
+        android:paddingBottom="24dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent" />
+        app:layout_constraintStart_toStartOf="parent">
+
+        <Button
+            android:id="@+id/btnReprint"
+            android:layout_width="match_parent"
+            android:layout_height="44dp"
+            android:layout_marginBottom="12dp"
+            android:background="@drawable/bg_button_outline_selector"
+            android:text="鍐嶆鎵撳嵃"
+            android:textColor="#2196F3"
+            android:textSize="16sp"
+            android:textStyle="bold" />
+
+        <Button
+            android:id="@+id/btnConfirm"
+            android:layout_width="match_parent"
+            android:layout_height="48dp"
+            android:background="@drawable/bg_button_primary"
+            android:text="纭畾"
+            android:textColor="@android:color/white"
+            android:textSize="18sp"
+            android:textStyle="bold" />
+
+    </LinearLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout> 
\ No newline at end of file

--
Gitblit v1.8.0