From b8ed2b19e0aaf3c357e2f601d8304acdc525f4f9 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 25 四月 2025 16:54:02 +0800
Subject: [PATCH] refactor(nfc): 优化 NFC 读卡工具类

---
 generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt |  148 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 147 insertions(+), 1 deletions(-)

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 04ad5c5..28d6e50 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeFragment.kt
@@ -1,6 +1,152 @@
 package com.dayu.general.activity
 
+import android.content.Intent
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
 import androidx.fragment.app.Fragment
+import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.tools.nfc.NfcReadAdapter
+import com.dayu.baselibrary.utils.ToastUtil
+import com.dayu.general.bean.net.CardInfoResult
+import com.dayu.general.databinding.FragmentRechargeBinding
+import com.dayu.general.net.ApiManager
+import com.dayu.general.net.BaseResponse
+import com.dayu.general.tool.NfcReadHelper
 
-class RechargeFragment:Fragment() {
+class RechargeFragment : Fragment() {
+    var binding: FragmentRechargeBinding? = null
+    private var cardNumber: String? = null
+    private var cardInfo: CardInfoResult? = null
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        binding = FragmentRechargeBinding.inflate(inflater, container, false)
+        return binding?.root
+    }
+    
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        initView()
+
+    }
+    
+    private fun initView() {
+        // 鍒濆鍖栫晫闈㈡樉绀鸿鍗$姸鎬�
+        binding?.rechargeReadLL?.visibility = View.VISIBLE
+        binding?.rechargeTextLL?.visibility = View.GONE
+    }
+    
+
+    
+    private fun resetView() {
+        // 閲嶇疆鐣岄潰鏄剧ず璇诲崱鐘舵��
+        binding?.rechargeReadLL?.visibility = View.VISIBLE
+        binding?.rechargeTextLL?.visibility = View.GONE
+        cardInfo = null
+    }
+    
+    /**
+     * 澶勭悊NFC鍒峰崱淇℃伅
+     * 璇ユ柟娉曠敱MainActivity璋冪敤
+     */
+    fun handleNfcIntent(intent: Intent) {
+        activity?.let { activity ->
+            try {
+                // 妫�鏌ntent涓槸鍚﹀寘鍚玁FC Tag
+                if (intent.getParcelableExtra<android.nfc.Tag>(android.nfc.NfcAdapter.EXTRA_TAG) == null) {
+                    ToastUtil.show("鏈娴嬪埌NFC鍗$墖锛岃纭繚鍗$墖宸叉纭斁缃�")
+                    return
+                }
+                
+                // 浣跨敤NfcReadAdapter璇诲彇鍗″彿
+                val nfcAdapter = NfcReadHelper.getInstance(intent, activity)
+                cardNumber = nfcAdapter.getCardNumber()
+                
+                if (cardNumber.isNullOrEmpty()) {
+                    ToastUtil.show("璇诲崱澶辫触锛岃閲嶆柊鍒峰崱")
+                    return
+                }
+                
+                // 鏄剧ず璇诲埌鐨勫崱鍙�
+                binding?.redInitCode?.text = cardNumber
+                
+                // 鏍规嵁鍗″彿鑾峰彇鍗$墖璇︾粏淇℃伅
+                getCardInfo(cardNumber!!)
+            } catch (e: Exception) {
+                ToastUtil.show("璇诲崱寮傚父锛�${e.message}")
+                e.printStackTrace()
+            }
+        }
+    }
+    
+    /**
+     * 鑾峰彇鍗$墖璇︾粏淇℃伅
+     */
+    private fun getCardInfo(cardNumber: String) {
+        activity?.let { activity ->
+            ApiManager.getInstance().requestGetLoading(
+                activity,
+                "card/getCardInfo/$cardNumber",  // 鍋囪API璺緞
+                CardInfoResult::class.java,
+                null,
+                object : SubscriberListener<BaseResponse<CardInfoResult>>() {
+                    override fun onNext(t: BaseResponse<CardInfoResult>) {
+                        if (t.success) {
+                            // 淇濆瓨鍗$墖淇℃伅
+                            cardInfo = t.content
+                            // 鏄剧ず鍗$墖淇℃伅
+                            displayCardInfo(t.content)
+                        } else {
+                            // 澶勭悊鑾峰彇澶辫触鐨勬儏鍐�
+                            ToastUtil.show(t.msg)
+                            binding?.redStatu?.text = "鍗$姸鎬佸紓甯�"
+                        }
+                    }
+
+                    override fun onError(e: Throwable?) {
+                        super.onError(e)
+                        ToastUtil.show("鑾峰彇鍗′俊鎭け璐�: ${e?.message ?: "鏈煡閿欒"}")
+                    }
+                }
+            )
+        }
+    }
+    
+    /**
+     * 鏄剧ず鍗$墖淇℃伅
+     */
+    private fun displayCardInfo(cardInfo: CardInfoResult?) {
+        if (cardInfo == null) {
+            ToastUtil.show("鍗′俊鎭负绌�")
+            return
+        }
+        
+        // 鍒囨崲鍒版樉绀轰俊鎭晫闈�
+        binding?.rechargeReadLL?.visibility = View.GONE
+        binding?.rechargeTextLL?.visibility = View.VISIBLE
+        
+        // 璁剧疆鍗$墖淇℃伅
+        binding?.userName?.text = cardInfo.userName ?: ""
+        binding?.redUserCode?.text = cardInfo.userCode ?: ""
+        binding?.redRemainderBlance?.text = "${cardInfo.balance ?: 0} 鍏�"
+        
+        // 璁剧疆鍗$姸鎬�
+        val cardStatus = when(cardInfo.status) {
+            1 -> "姝e父"
+            2 -> "鎸傚け"
+            3 -> "閿佸畾"
+            else -> "鏈煡"
+        }
+        binding?.redStatu?.text = cardStatus
+        
+
+    }
+    
+
+
 }
\ No newline at end of file

--
Gitblit v1.8.0