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/java/com/dayu/general/activity/CardWriteSuccessActivity.kt |  307 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 236 insertions(+), 71 deletions(-)

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()

--
Gitblit v1.8.0