From 08bfe3072377b53c60e0952f00c26bce2e5b4bc0 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 18 六月 2025 17:05:55 +0800
Subject: [PATCH] feat(card): 添加卡片返还功能- 新增 CardReturnActivity 用于执行卡片返还操作 - 在 BSCardFragment 中添加返还按钮,跳转到 CardReturnActivity - 在 CardOperationType 中添加 ReturnCard 类型 - 修改 CardReadActivity,优化卡片信息显示逻辑 - 更新 CardWriteSuccessActivity,支持返还成功提示 - 新增 ic_morny_back 图标用于返还操作

---
 generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt |   62 ++++++++++++++++++------------
 1 files changed, 37 insertions(+), 25 deletions(-)

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 d8d053a..f460d84 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
@@ -12,6 +12,7 @@
 import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.utils.MornyUtil
 import com.dayu.baselibrary.utils.ToastUtil
 import com.dayu.baselibrary.view.TitleBar
 import com.dayu.general.BaseApplication
@@ -25,6 +26,7 @@
 import com.dayu.general.databinding.ActivityRechargeDetailBinding
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
+import com.dayu.general.tool.CardCommon.Companion.USER_CARD_TYPE_1
 import com.dayu.general.tool.CardOperationType
 
 class RechargeDetailActivity : AppCompatActivity() {
@@ -44,7 +46,12 @@
         private const val EXTRA_CARD_ADDRESS = "extra_card_address"
         private const val EXTRA_USER_CARD = "extra_user_card"
 
-        fun start(context: Context, cardInfo: CardInfoResult?, cardAddress: String?, userCard: UserCard?) {
+        fun start(
+            context: Context,
+            cardInfo: CardInfoResult?,
+            cardAddress: String?,
+            userCard: UserCard?
+        ) {
             val intent = Intent(context, RechargeDetailActivity::class.java)
             intent.putExtra(EXTRA_CARD_INFO, cardInfo)
             intent.putExtra(EXTRA_CARD_ADDRESS, cardAddress)
@@ -85,7 +92,7 @@
             // 澶勭悊鍏呭�奸�昏緫
             handleRecharge()
         }
-        
+
         // 璁剧疆閲戦杈撳叆闄愬埗
         setupAmountInputLimit(binding.rechargeMorny)
         setupAmountInputLimit(binding.rechargeWater)
@@ -97,13 +104,13 @@
     private fun setupAmountInputLimit(editText: EditText) {
         editText.addTextChangedListener(object : TextWatcher {
             override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
-            
+
             override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
-            
+
             override fun afterTextChanged(s: Editable?) {
                 val text = s.toString()
                 if (text.isEmpty()) return
-                
+
                 // 妫�鏌ユ槸鍚﹀寘鍚皬鏁扮偣
                 if (text.contains(".")) {
                     val parts = text.split(".")
@@ -119,7 +126,7 @@
                         }
                     }
                 }
-                
+
                 // 闃叉杈撳叆澶氫釜灏忔暟鐐�
                 val dotCount = text.count { it == '.' }
                 if (dotCount > 1) {
@@ -129,7 +136,7 @@
                     editText.setSelection(newText.length)
                     editText.addTextChangedListener(this)
                 }
-                
+
                 // 闃叉浠ュ皬鏁扮偣寮�澶�
                 if (text.startsWith(".")) {
                     editText.removeTextChangedListener(this)
@@ -248,9 +255,9 @@
             binding.redInitCode.text = cardAddress ?: ""
             binding.userName.text = info.userName ?: ""
             binding.redCardNum.text = info.cardNum ?: ""
-            
+
             // 浣跨敤鐢ㄦ埛鍗′腑鐨勪綑棰濇樉绀�
-            val balance = userCard?.let { 
+            val balance = userCard?.let {
                 // 灏嗗垎杞崲涓哄厓锛屼繚鐣欎袱浣嶅皬鏁�
                 String.format("%.2f", it.balance / 100.0)
             } ?: run {
@@ -260,7 +267,7 @@
             binding.redRemainderBlance.text = "$balance 鍏�"
 
             // 璁剧疆鍗$姸鎬佸拰瀵瑰簲棰滆壊
-            val cardStatus = when (info.status) {
+            val cardStatus = when (info.state) {
                 1 -> "姝e父"
                 2 -> "鎸傚け"
                 3 -> "閿佸畾"
@@ -270,7 +277,7 @@
             binding.redStatu.text = cardStatus
 
             // 鏍规嵁鍗$姸鎬佽缃笉鍚岄鑹�
-            val statusColor = when (info.status) {
+            val statusColor = when (info.state) {
                 1 -> android.graphics.Color.parseColor("#4CAF50") // 缁胯壊-姝e父
                 2 -> android.graphics.Color.parseColor("#FF9800") // 姗欒壊-鎸傚け
                 3 -> android.graphics.Color.parseColor("#F44336") // 绾㈣壊-閿佸畾
@@ -388,40 +395,45 @@
     /**
      * 鍚姩鍐欏崱鐣岄潰
      */
-    private fun startWriteCardActivity(rechargeResult: RechargeResult, rechargeAmount: Double, bonusAmount: Double) {
+    private fun startWriteCardActivity(
+        rechargeResult: RechargeResult,
+        rechargeAmount: Double,
+        bonusAmount: Double
+    ) {
         try {
             // 鍒涘缓UserCard瀵硅薄鐢ㄤ簬鍐欏崱
             val userCard = UserCard().apply {
                 // 璁剧疆鐢ㄦ埛鍗′俊鎭�
                 cardInfo?.let { info ->
                     userCode = info.cardNum ?: ""
-                    balance = ((rechargeAmount + bonusAmount) * 100).toInt() // 杞崲涓哄垎
+
+                    // 璁$畻鏂颁綑棰濓細鍘熸湁浣欓 + 鍏呭�奸噾棰� + 璧犻�侀噾棰�
+                    val originalBalance =
+                        this@RechargeDetailActivity.userCard?.balance ?: 0 // 鍘熸湁浣欓锛堝垎锛�
+                    val rechargeAmountInCents = (rechargeAmount * 100).toInt() // 鍏呭�奸噾棰濊浆鍒�
+                    val bonusAmountInCents = (bonusAmount * 100).toInt() // 璧犻�侀噾棰濊浆鍒�
+
+                    balance = originalBalance + rechargeAmountInCents + bonusAmountInCents
                 }
-                
+
                 // 璁剧疆鍏朵粬蹇呰淇℃伅
                 projectCode = rechargeResult.projectNo
-                waterPrice = rechargeResult.waterPrice.toFloat()
+                waterPrice = MornyUtil.changeY2F(rechargeResult.waterPrice.toString())
                 rechargeDate = java.util.Calendar.getInstance()
             }
 
             // 鍚姩鍐欏崱Activity
             val intent = Intent(this, NfcWreatActivity::class.java).apply {
-                putExtra("cardType", "USER_CARD") // 鐢ㄦ埛鍗$被鍨�
+                putExtra("cardType", USER_CARD_TYPE_1) // 鐢ㄦ埛鍗$被鍨�
                 putExtra("cardAddr", cardAddress)
                 putExtra("operationTypeCode", CardOperationType.Recharge.code)
                 putExtra("orderNumber", rechargeResult.orderNo)
                 putExtra("userCard", userCard)
+                putExtra("rechargeAmount", rechargeAmount) // 浼犻�掑厖鍊奸噾棰�
+                putExtra("bonusAmount", bonusAmount) // 浼犻�掕禒閫侀噾棰�
             }
-            
             startActivity(intent)
-            
-            // 鏄剧ず鎴愬姛淇℃伅
-            val formattedRecharge = String.format("%.2f", rechargeAmount)
-            val formattedBonus = String.format("%.2f", bonusAmount)
-            val formattedTotal = String.format("%.2f", rechargeAmount + bonusAmount)
-            
-            ToastUtil.show("鍏呭�艰鍗曞垱寤烘垚鍔焅n璁㈠崟鍙�: ${rechargeResult.orderNo}\n鍏呭�奸噾棰�: ${formattedRecharge}鍏僜n璧犻�侀噾棰�: ${formattedBonus}鍏僜n鎬婚噾棰�: ${formattedTotal}鍏僜n璇疯创鍗¤繘琛屽啓鍗℃搷浣�")
-            
+            finish()
         } catch (e: Exception) {
             ToastUtil.show("鍚姩鍐欏崱鐣岄潰澶辫触: ${e.message}")
         }

--
Gitblit v1.8.0