From 465c8abaa982fba6868a900d25316c70afc20fb7 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 18 六月 2025 13:59:46 +0800
Subject: [PATCH] feat(card): 优化销卡功能并添加写卡操作

---
 generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt |  121 ++++++++++++++++++++++++++--------------
 1 files changed, 78 insertions(+), 43 deletions(-)

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 163990f..4d29030 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
@@ -8,13 +8,19 @@
 import com.dayu.baselibrary.utils.ToastUtil
 import com.dayu.baselibrary.view.TipDialog
 import com.dayu.baselibrary.view.TitleBar
+import com.dayu.general.BaseApplication
 import com.dayu.general.bean.net.CardInfoResult
+import com.dayu.general.bean.net.CardCancelResult
 import com.dayu.general.databinding.ActivityCardCancelBinding
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
 import com.dayu.general.tool.NfcReadHelper
 import com.dayu.general.bean.card.UserCard
 import com.dayu.general.tool.CardCommon
+import com.dayu.general.bean.card.ClearCard
+import com.dayu.general.tool.NfcWreatHelper
+import com.dayu.baselibrary.tools.nfc.NFCCallBack
+import com.dayu.general.tool.CardOperationType
 
 /**
  * @author: zuo
@@ -25,6 +31,7 @@
     private lateinit var binding: ActivityCardCancelBinding
     private var cardNumber: String? = null
     private var cardInfo: CardInfoResult? = null
+    private var userCard: UserCard? = null
 
     companion object {
         /**
@@ -60,8 +67,9 @@
      * 閲嶇疆鍒拌鍗$姸鎬�
      */
     private fun resetToReadingState() {
-        binding.cardReadLL.visibility = android.view.View.VISIBLE
+        binding.scrollReadCard.visibility = android.view.View.VISIBLE
         binding.cardInfoContainer.visibility = android.view.View.GONE
+        binding.bottomButtonContainer.visibility = android.view.View.GONE
         cardNumber = null
         cardInfo = null
         binding.etRefundAmount.setText("")
@@ -80,6 +88,7 @@
 
     override fun onNfcBack(intent: Intent?) {
         intent?.let {
+            // 澶勭悊姝e父鐨勮鍗℃搷浣�
             handleNfcIntent(it)
         } ?: run {
             showConfirmDialog("NFC鏁版嵁寮傚父锛岃閲嶆柊鍒峰崱") {
@@ -162,7 +171,7 @@
         android.util.Log.d("CardCancelActivity", "鍗$墖绫诲瀷: $cardType")
         android.util.Log.d("CardCancelActivity", "鍗″唴浣欓: ${userCard.balance}")
         android.util.Log.d("CardCancelActivity", "==================")
-
+        this.userCard = userCard
         // 鏍规嵁鍗″彿鑾峰彇鍗$墖璇︾粏淇℃伅
         getCardInfo(cardNumber, cardType, userCard)
     }
@@ -207,9 +216,10 @@
         cardType: String,
         userCard: UserCard
     ) {
-        // 闅愯棌璇诲崱鎻愮ず锛屾樉绀轰俊鎭尯鍩�
-        binding.cardReadLL.visibility = android.view.View.GONE
+        // 闅愯棌璇诲崱鎻愮ず锛屾樉绀轰俊鎭尯鍩熷拰搴曢儴鎸夐挳
+        binding.scrollReadCard.visibility = android.view.View.GONE
         binding.cardInfoContainer.visibility = android.view.View.VISIBLE
+        binding.bottomButtonContainer.visibility = android.view.View.VISIBLE
 
         this.cardInfo = cardInfo
         binding.tvCardNumber.text = cardNumber
@@ -222,9 +232,7 @@
                 card.balance.toString()
             }
             binding.tvCardBalance.text = "${balanceInYuan}鍏�"
-            
-            // 榛樿閫�娆鹃噾棰濊缃负鍗″唴浣欓
-            binding.etRefundAmount.setText(balanceInYuan)
+
 
             // 鍗$墖鐘舵��
             binding.tvCardStatus.text = "姝e父"
@@ -280,64 +288,68 @@
         val refundAmountStr = binding.etRefundAmount.text.toString().trim()
         val remarks = binding.etRemarks.text.toString().trim()
 
-        if (TextUtils.isEmpty(refundAmountStr)) {
-            ToastUtil.showToast("璇疯緭鍏ラ��娆鹃噾棰�")
-            return
+        // 閫�娆鹃噾棰濆鐞嗭紙闈炲繀濉級
+        val refundAmount = if (refundAmountStr.isEmpty()) {
+            0.0 // 濡傛灉鏈緭鍏ラ��娆鹃噾棰濓紝榛樿涓�0
+        } else {
+            try {
+                val amount = refundAmountStr.toDouble()
+                if (amount < 0) {
+                    ToastUtil.show("閫�娆鹃噾棰濅笉鑳戒负璐熸暟")
+                    return
+                }
+                amount
+            } catch (e: NumberFormatException) {
+                ToastUtil.show("璇疯緭鍏ユ湁鏁堢殑閫�娆鹃噾棰�")
+                return
+            }
         }
 
-        val refundAmount = try {
-            refundAmountStr.toDouble()
-        } catch (e: NumberFormatException) {
-            ToastUtil.showToast("璇疯緭鍏ユ湁鏁堢殑閫�娆鹃噾棰�")
-            return
-        }
-
-        if (refundAmount < 0) {
-            ToastUtil.showToast("閫�娆鹃噾棰濅笉鑳戒负璐熸暟")
-            return
-        }
-
-        if (TextUtils.isEmpty(remarks)) {
-            ToastUtil.showToast("璇疯緭鍏ュ娉ㄤ俊鎭�")
-            return
+        // 澶囨敞澶勭悊锛堥潪蹇呭~锛�
+        val finalRemarks = if (remarks.isEmpty()) {
+            "鏃犲娉�" // 濡傛灉鏈緭鍏ュ娉紝浣跨敤榛樿鍊�
+        } else {
+            remarks
         }
 
         // 纭閿�鍗�
-        showConfirmDialog(
-            "纭瑕侀攢鍗″悧锛焅n\n鍗″彿锛�${cardNumber}\n閫�娆鹃噾棰濓細${refundAmount}鍏僜n澶囨敞锛�${remarks}\n\n閿�鍗″悗姝ゅ崱灏嗘棤娉曞啀娆′娇鐢紒"
-        ) {
-            callCancelCardApi(refundAmount, remarks)
+        val confirmMessage = if (refundAmount > 0) {
+            "纭瑕侀攢鍗″悧锛焅n\n鍗″彿锛�${cardNumber}\n閫�娆鹃噾棰濓細${refundAmount}鍏僜n澶囨敞锛�${finalRemarks}\n\n閿�鍗″悗姝ゅ崱灏嗘棤娉曞啀娆′娇鐢紒"
+        } else {
+            "纭瑕侀攢鍗″悧锛焅n\n鍗″彿锛�${cardNumber}\n鏃犻��娆鹃噾棰漒n澶囨敞锛�${finalRemarks}\n\n閿�鍗″悗姝ゅ崱灏嗘棤娉曞啀娆′娇鐢紒"
+        }
+
+        showConfirmDialog(confirmMessage) {
+            callCancelCardApi(refundAmount, finalRemarks)
         }
     }
 
     /**
      * 璋冪敤閿�鍗PI鎺ュ彛
      */
-    private fun callCancelCardApi(refundAmount: Double, remarks: String) {
+    private fun callCancelCardApi(refundAmount: Double, finalRemarks: String) {
         if (cardNumber.isNullOrBlank()) {
-            ToastUtil.showToast("鍗″彿淇℃伅寮傚父锛岃閲嶆柊鍒峰崱")
+            ToastUtil.show("鍗″彿淇℃伅寮傚父锛岃閲嶆柊鍒峰崱")
             return
         }
 
         val map = mutableMapOf<String, Any>()
-        map["cardNum"] = cardNumber!!
-        map["refund"] = (refundAmount * 100).toInt() // 杞崲涓哄垎
+        map["cardNum"] = cardInfo?.cardNum.toString()
+        map["refund"] = refundAmount.toString() // 鏀逛负String绫诲瀷锛屽崟浣嶄负鍏�
         map["refundType"] = 1838466162264350700L
-        map["remarks"] = remarks
-        map["operator"] = 2024090516595200300L
+        map["remarks"] = finalRemarks
+        map["operator"] = BaseApplication.userId
 
         ApiManager.getInstance().requestPostLoading(
             this,
             "terminal/card/termCancel",
-            Boolean::class.java,
+            CardCancelResult::class.java,
             map,
-            object : SubscriberListener<BaseResponse<Boolean>>() {
-                override fun onNext(t: BaseResponse<Boolean>) {
-                    if (t.success && t.content == true) {
-                        // 閿�鍗℃垚鍔�
-                        showConfirmDialog("閿�鍗℃垚鍔燂紒\n\n閫�娆鹃噾棰濓細${refundAmount}鍏冨凡閫�杩�") {
-                            finish()
-                        }
+            object : SubscriberListener<BaseResponse<CardCancelResult>>() {
+                override fun onNext(t: BaseResponse<CardCancelResult>) {
+                    if (t.success && t.content != null) {
+                        // 閿�鍗℃垚鍔燂紝璺宠浆鍒板啓鍗$晫闈�
+                        startWriteCardActivity(t.content!!, refundAmount, userCard!!)
                     } else {
                         // 閿�鍗″け璐�
                         val errorMsg = if (t.msg.isNullOrBlank()) "閿�鍗″け璐ワ紝璇烽噸璇�" else t.msg
@@ -354,4 +366,27 @@
             }
         )
     }
+
+    /**
+     * 璺宠浆鍒板啓鍗$晫闈㈣繘琛屽崱鍐呭娓呴櫎
+     */
+    private fun startWriteCardActivity(
+        cancelResult: CardCancelResult,
+        refundAmount: Double,
+        userCard: UserCard
+    ) {
+        val intent = Intent(this, NfcWreatActivity::class.java).apply {
+            putExtra("cardAddr", cardNumber)
+            putExtra("operationTypeCode", CardOperationType.CancelCard.code)
+            putExtra("orderNumber", cancelResult.orderNo)
+            putExtra("refundAmount", refundAmount)
+            putExtra("userCard", userCard)
+            // 浼犻�掑綋鍓嶅崱鍐呬綑棰濅俊鎭�
+            cardInfo?.let { info ->
+                putExtra("cardBalance", info.balance ?: 0.0)
+            }
+        }
+        startActivity(intent)
+        finish()
+    }
 } 
\ No newline at end of file

--
Gitblit v1.8.0