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