From c3edd4a3122b711bc6a0bfef56b6ff6bf5ae03e2 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 13 五月 2025 09:09:23 +0800
Subject: [PATCH] feat(generallibrary): 优化用户开卡流程并添加支付方式功能

---
 generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt |  205 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 172 insertions(+), 33 deletions(-)

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 dbaf55e..2ebe743 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -5,9 +5,11 @@
 import android.text.Editable
 import android.text.TextWatcher
 import android.view.View
+import android.widget.RadioButton
 import android.widget.Toast
 import androidx.lifecycle.lifecycleScope
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.tools.nfc.NFCCallBack
 import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
 import com.dayu.general.BaseApplication
 import com.dayu.general.R
@@ -17,7 +19,10 @@
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
 import com.dayu.general.tool.NfcReadHelper
+import com.dayu.general.tool.NfcWreatHelper
+import com.tencent.bugly.crashreport.CrashReport
 import kotlinx.coroutines.launch
+import android.util.TypedValue
 
 /**
  * Description: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜)
@@ -30,6 +35,12 @@
 
     // 鏀粯鏂瑰紡
     private var paymentMethod: String = "鐜伴噾"
+    
+    // 鏀粯鏂瑰紡ID
+    private var paymentId: Long = 0
+
+    // 鏀粯鏂瑰紡鍒楄〃
+    private var paymentMethodList: List<PaymentMethod> = listOf()
 
     // 鍗$墿鐞咺D
     private var cardPhysicalId: String = ""
@@ -41,12 +52,31 @@
         private const val TAG = "NewCard2Activity"
     }
 
+    // 鏀粯鏂瑰紡鏁版嵁绫�
+    data class PaymentMethod(
+        val id: Long,
+        val name: String,
+        val remarks: String,
+        val deleted: Int
+    )
+
+    // 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫�
+    data class PaymentMethodResponse(
+        val itemTotal: Any?,
+        val obj: List<PaymentMethod>,
+        val pageCurr: Any?,
+        val pageSize: Any?,
+        val pageTotal: Any?
+    )
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         binding = ActivityNewCard1GeBinding.inflate(layoutInflater)
         setContentView(binding.root)
 
         initView()
+        // 鑾峰彇鏀粯鏂瑰紡
+        getPaymentMethods()
         initListener()
     }
 
@@ -75,6 +105,88 @@
         // 璁剧疆閲戦杈撳叆闄愬埗涓轰袱浣嶅皬鏁�
         binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher())
         binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher())
+    }
+
+    /**
+     * 鑾峰彇鏀粯鏂瑰紡鍒楄〃
+     */
+    private fun getPaymentMethods() {
+        ApiManager.getInstance().requestGetLoading(
+            this,
+            "sell/paymentmethod/get",
+            PaymentMethodResponse::class.java,
+            null,
+            object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() {
+                override fun onNext(response: BaseResponse<PaymentMethodResponse>) {
+                    if (response.success) {
+                        // 鑾峰彇鏀粯鏂瑰紡鍒楄〃
+                        val paymentMethods = response.content?.obj ?: listOf()
+                        if (paymentMethods.isNotEmpty()) {
+                            paymentMethodList = paymentMethods
+                            // 鏇存柊鏀粯鏂瑰紡鏄剧ず
+                            updatePaymentMethodRadioGroup()
+                        }
+                    } else {
+                        Toast.makeText(
+                            this@NewCard2Activity,
+                            "鑾峰彇鏀粯鏂瑰紡澶辫触: ${response.msg}",
+                            Toast.LENGTH_SHORT
+                        ).show()
+                    }
+                }
+
+                override fun onError(e: Throwable?) {
+                    super.onError(e)
+                    Toast.makeText(
+                        this@NewCard2Activity,
+                        "鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}",
+                        Toast.LENGTH_SHORT
+                    ).show()
+                }
+            }
+        )
+    }
+
+    /**
+     * 鏇存柊鏀粯鏂瑰紡RadioGroup
+     */
+    private fun updatePaymentMethodRadioGroup() {
+        // 娓呯┖鍘熸湁RadioButton
+        binding.newCardPaymentMethod.removeAllViews()
+
+        // 鍔ㄦ�佹坊鍔燫adioButton
+        paymentMethodList.forEachIndexed { index, method ->
+            val radioButton = RadioButton(this)
+            radioButton.id = View.generateViewId() // 鐢熸垚鍞竴ID
+            radioButton.layoutParams = android.widget.LinearLayout.LayoutParams(
+                0,
+                resources.getDimensionPixelSize(R.dimen.dimen_40),
+                1.0f
+            )
+            
+            // 濡傛灉涓嶆槸鏈�鍚庝竴涓寜閽紝娣诲姞鍙宠竟璺�
+            if (index < paymentMethodList.size - 1) {
+                (radioButton.layoutParams as android.widget.LinearLayout.LayoutParams).rightMargin = 
+                    resources.getDimensionPixelSize(R.dimen.dimen_15)
+            }
+            
+            radioButton.text = method.name
+            radioButton.background = resources.getDrawable(R.drawable.radio_selector)
+            radioButton.buttonDrawable = null
+            radioButton.gravity = android.view.Gravity.CENTER
+            radioButton.setTextColor(resources.getColorStateList(R.color.radio_button_text_color))
+            radioButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
+            
+            // 娣诲姞鍒癛adioGroup
+            binding.newCardPaymentMethod.addView(radioButton)
+            
+            // 榛樿閫変腑绗竴涓�
+            if (index == 0) {
+                radioButton.isChecked = true
+                paymentMethod = method.name
+                paymentId = method.id
+            }
+        }
     }
 
     /**
@@ -109,11 +221,14 @@
     private fun initListener() {
         // 璁剧疆鏀粯鏂瑰紡閫夋嫨鐩戝惉
         binding.newCardPaymentMethod.setOnCheckedChangeListener { group, checkedId ->
-            paymentMethod = when (checkedId) {
-                R.id.newCard_cashPayment -> "鐜伴噾"
-                R.id.newCard_posPayment -> "POS鏈�"
-                R.id.newCard_bankTransfer -> "閾惰杞处"
-                else -> "鐜伴噾"
+            // 鏍规嵁閫変腑鐨処D鑾峰彇鏀粯鏂瑰紡
+            for (i in 0 until group.childCount) {
+                val radioButton = group.getChildAt(i) as RadioButton
+                if (radioButton.id == checkedId) {
+                    paymentMethod = radioButton.text.toString()
+                    paymentId = paymentMethodList[i].id
+                    break
+                }
             }
         }
 
@@ -142,14 +257,6 @@
         val formattedRechargeAmount = String.format("%.2f", rechargeAmount)
         val formattedCardFee = String.format("%.2f", cardFee)
 
-        // 鑾峰彇鏀粯鏂瑰紡ID
-        val paymentId = when (paymentMethod) {
-            "鐜伴噾" -> 1
-            "POS鏈�" -> 2
-            "閾惰杞处" -> 3
-            else -> 1
-        }
-
         val remark = binding.newCardRemark.text.toString()
 
         // 鏋勫缓璇锋眰鍙傛暟
@@ -158,7 +265,7 @@
         params["clientNum"] = binding.newCardFarmerCode.text.toString() // 鍐滄埛缂栧彿
         params["cardCost"] = (cardFee * 100).toInt() // 璐崱閲戦锛堝伐鏈垂锛夎浆涓哄垎
         params["amount"] = (rechargeAmount * 100).toInt() // 鍏呭�奸噾棰濊浆涓哄垎
-        params["paymentId"] = paymentId // 鏀粯鏂瑰紡
+        params["paymentId"] = paymentId // 鏀粯鏂瑰紡ID
         params["remarks"] = remark // 澶囨敞
         params["operator"] = BaseApplication.userId // 鎿嶄綔浜篒D
 
@@ -179,20 +286,30 @@
                             farmerCode = binding.newCardFarmerCode.text.toString(),
                             cardFee = cardFee,
                             remark = binding.newCardRemark.text.toString(),
-                            paymentMethod = paymentId,
+                            paymentMethod = paymentId.toInt(),
                             isReported = true,
                             isCardWritten = true
                         )
-                        
+
                         // 浣跨敤鍗忕▼鍦ㄥ悗鍙扮嚎绋嬩腑淇濆瓨鏁版嵁
                         lifecycleScope.launch {
                             try {
-                                BaseDaoSingleton.getInstance(this@NewCard2Activity).cardRegistrationDao().insert(cardRegistration)
-                                Toast.makeText(this@NewCard2Activity, "寮�鍗℃垚鍔�", Toast.LENGTH_SHORT).show()
+                                BaseDaoSingleton.getInstance(this@NewCard2Activity)
+                                    .cardRegistrationDao().insert(cardRegistration)
+                                Toast.makeText(
+                                    this@NewCard2Activity,
+                                    "寮�鍗℃垚鍔�",
+                                    Toast.LENGTH_SHORT
+                                ).show()
                                 setResult(RESULT_OK)
                                 finish()
                             } catch (e: Exception) {
-                                Toast.makeText(this@NewCard2Activity, "淇濆瓨寮�鍗′俊鎭け璐�: ${e.message}", Toast.LENGTH_SHORT).show()
+                                CrashReport.postCatchedException(e)
+                                Toast.makeText(
+                                    this@NewCard2Activity,
+                                    "淇濆瓨寮�鍗′俊鎭け璐�: ${e.message}",
+                                    Toast.LENGTH_SHORT
+                                ).show()
                             }
                         }
                     } else {
@@ -231,23 +348,45 @@
     }
 
     override fun onNfcBack(intent: Intent) {
-        var cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumber()
+        var cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose()
         if (!cardNumber.isEmpty()) {
-            // 淇濆瓨鍗$墿鐞咺D
-            cardPhysicalId = cardNumber
-            // 鏇存柊UI
-            binding.newCardArerNumber.text = cardNumber
-            // 闅愯棌NFC璇诲崱鐣岄潰
-            binding.nfcContainer.visibility = View.GONE
-            binding.centerScroll.visibility = View.VISIBLE
-            binding.newCardRegistBtn.visibility = View.VISIBLE
+            try {
+                // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException
+                val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList())
+
+                NfcWreatHelper.getInstance(intent, this).changePS(keyList, false, true, object :
+                    NFCCallBack {
+
+                    override fun isSusses(flag: Boolean, msg: String?) {
+                        if (flag) {
+                            // 淇濆瓨鍗$墿鐞咺D
+                            cardPhysicalId = cardNumber
+                            // 鏇存柊UI
+                            binding.newCardArerNumber.text = cardNumber
+                            // 闅愯棌NFC璇诲崱鐣岄潰
+                            binding.nfcContainer.visibility = View.GONE
+                            binding.centerScroll.visibility = View.VISIBLE
+                            binding.newCardRegistBtn.visibility = View.VISIBLE
+                        } else {
+                            // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐�
+                            Toast.makeText(
+                                this@NewCard2Activity,
+                                "鍗$墖鍒濆鍖栧け璐ワ細" + msg,
+                                Toast.LENGTH_LONG
+                            )
+                                .show()
+                        }
+                    }
+                })
+
+
+            } catch (e: Exception) {
+                // 澶勭悊寮傚父鎯呭喌
+                CrashReport.postCatchedException(e)
+                e.printStackTrace()
+            }
         }
     }
-
-
-
-
-
 
 
 }
\ No newline at end of file

--
Gitblit v1.8.0