From 59237ecbcb9828b1dc762da07f83fa598bd9d6b2 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期二, 03 六月 2025 18:07:01 +0800 Subject: [PATCH] fix(NewCard2Activity): 优化读卡逻辑 --- generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt | 191 +++++++++++++++++++++++++++++++++++++---------- 1 files changed, 148 insertions(+), 43 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 2ebe743..57e331a 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt @@ -4,25 +4,24 @@ import android.os.Bundle import android.text.Editable import android.text.TextWatcher +import android.util.TypedValue 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 import com.dayu.general.bean.db.CardRegistrationBean import com.dayu.general.dao.BaseDaoSingleton -import com.dayu.general.databinding.ActivityNewCard1GeBinding +import com.dayu.general.databinding.ActivityNewCardGeBinding 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: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜) @@ -31,11 +30,11 @@ */ class NewCard2Activity : BaseNfcActivity() { - private lateinit var binding: ActivityNewCard1GeBinding + private lateinit var binding: ActivityNewCardGeBinding // 鏀粯鏂瑰紡 private var paymentMethod: String = "鐜伴噾" - + // 鏀粯鏂瑰紡ID private var paymentId: Long = 0 @@ -47,6 +46,12 @@ // 鐢ㄦ埛ID private var userId: String = "" + + // 瀹㈡埛ID + private var clientId: String = "" + + // 鏄惁宸茶鍗� + private var isReadCard: Boolean = false companion object { private const val TAG = "NewCard2Activity" @@ -69,17 +74,39 @@ val pageTotal: Any? ) + // 鐢ㄦ埛淇℃伅鏁版嵁绫� + data class ClientInfo( + val clientId: String, + val clientNum: String, + val name: String, + val districtNum: String, + val phone: String, + val idCard: String, + val villageName: String, + val address: String, + val cardCount: Int, + val operateDt: String + ) + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityNewCard1GeBinding.inflate(layoutInflater) + binding = ActivityNewCardGeBinding.inflate(layoutInflater) setContentView(binding.root) + // 鑾峰彇浼犻�掔殑clientId鍙傛暟 + clientId = intent.getStringExtra("clientId") ?: "" + initView() + + // 濡傛灉鏈塩lientId锛岃幏鍙栧鎴蜂俊鎭� + if (clientId.isNotEmpty()) { + getClientInfo(clientId) + } + // 鑾峰彇鏀粯鏂瑰紡 getPaymentMethods() initListener() } - private fun initView() { // 鍒濆鍖栨爣棰樻爮杩斿洖鎸夐挳 @@ -90,21 +117,66 @@ // 鍒濆鍖朜FC璇诲崱瀹瑰櫒锛屽垵濮嬮殣钘� binding.nfcContainer.visibility = View.VISIBLE - // 浠嶪ntent涓幏鍙栫敤鎴蜂俊鎭紙濡傛灉鏈夛級 - val userName = intent.getStringExtra("userName") ?: "" - val rawIdCard = intent.getStringExtra("idCard") - val idCard = if (rawIdCard.isNullOrBlank()) "鏃�" else rawIdCard - val farmerCode = intent.getStringExtra("farmerCode") ?: "" - userId = intent.getStringExtra("userId") ?: "" - - // 璁剧疆鐢ㄦ埛淇℃伅 - binding.newCardUserName.text = userName - binding.newCardIdCard.text = idCard - binding.newCardFarmerCode.text = farmerCode - // 璁剧疆閲戦杈撳叆闄愬埗涓轰袱浣嶅皬鏁� binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher()) binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher()) + } + + /** + * 鑾峰彇瀹㈡埛璇︾粏淇℃伅 + */ + private fun getClientInfo(clientId: String) { + ApiManager.getInstance().requestGetLoading( + this, + "terminal/client/getTermOne/$clientId", + ClientInfo::class.java, + null, + object : SubscriberListener<BaseResponse<ClientInfo>>() { + override fun onNext(response: BaseResponse<ClientInfo>) { + if (response.success) { + val clientInfo = response.content + if (clientInfo != null) { + // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� + displayClientInfo(clientInfo) + } else { + Toast.makeText( + this@NewCard2Activity, + "鑾峰彇瀹㈡埛淇℃伅澶辫触: 杩斿洖鏁版嵁涓虹┖", + Toast.LENGTH_SHORT + ).show() + } + } 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() + } + } + ) + } + + /** + * 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� + */ + private fun displayClientInfo(clientInfo: ClientInfo) { + // 淇濆瓨鐢ㄦ埛ID渚涘悗缁娇鐢� + userId = clientInfo.clientId + + // 鏄剧ず鐢ㄦ埛鍩烘湰淇℃伅 + binding.newCardUserName.text = clientInfo.name + binding.newCardIdCard.text = if (clientInfo.idCard.isBlank()) "鏃�" else clientInfo.idCard + binding.newCardFarmerCode.text = clientInfo.clientNum } /** @@ -163,23 +235,23 @@ resources.getDimensionPixelSize(R.dimen.dimen_40), 1.0f ) - + // 濡傛灉涓嶆槸鏈�鍚庝竴涓寜閽紝娣诲姞鍙宠竟璺� if (index < paymentMethodList.size - 1) { - (radioButton.layoutParams as android.widget.LinearLayout.LayoutParams).rightMargin = + (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 @@ -244,6 +316,9 @@ } } + /** + * 娉ㄥ唽鏂板崱 + */ private fun registerNewCard() { // 鑾峰彇鍏呭�奸噾棰� val rechargeAmountStr = binding.newCardRechargeAmount.text.toString() @@ -348,17 +423,25 @@ } override fun onNfcBack(intent: Intent) { - var cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose() - if (!cardNumber.isEmpty()) { - try { - // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException - val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList()) + if (!isReadCard) { + val cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose() + if (cardNumber.isNotEmpty()) { + try { + // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException + val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList()) - NfcWreatHelper.getInstance(intent, this).changePS(keyList, false, true, object : - NFCCallBack { + // 浣跨敤缇庡寲鐨勫姞杞藉姩鐢绘潵鏄剧ずNFC鎿嶄綔鐨勫姞杞界姸鎬� + val nfcHelper = NfcWreatHelper.getInstance(intent, this) + nfcHelper.setLoadingView(binding.loadingContainer, binding.nfcProgressWheel) - override fun isSusses(flag: Boolean, msg: String?) { - if (flag) { + // 寮傛淇敼瀵嗙爜 + nfcHelper.changePSAsync( + keyList, + false, + true + ) { success: Boolean, msg: String? -> + if (success) { + isReadCard = true // 淇濆瓨鍗$墿鐞咺D cardPhysicalId = cardNumber // 鏇存柊UI @@ -371,22 +454,44 @@ // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐� Toast.makeText( this@NewCard2Activity, - "鍗$墖鍒濆鍖栧け璐ワ細" + msg, + "鍗$墖鍒濆鍖栧け璐ワ細$msg", Toast.LENGTH_LONG - ) - .show() + ).show() } } - }) - - - } catch (e: Exception) { - // 澶勭悊寮傚父鎯呭喌 - CrashReport.postCatchedException(e) - e.printStackTrace() + } catch (e: Exception) { + // 澶勭悊寮傚父鎯呭喌 + CrashReport.postCatchedException(e) + e.printStackTrace() + } + } else { + Toast.makeText( + this@NewCard2Activity, + "鑾峰彇鍗″彿澶辫触", + Toast.LENGTH_SHORT + ).show() } + } else { + Toast.makeText( + this@NewCard2Activity, + "褰撳墠宸茶鍗★紝涓嶅彲鍐嶆璇诲崱", + Toast.LENGTH_SHORT + ).show() } + } + override fun onDestroy() { + super.onDestroy() + // 娓呯悊NFC宸ュ叿绫讳腑鐨凴xJava璁㈤槄锛岄槻姝㈠唴瀛樻硠婕� + try { + NfcReadHelper.getInstance(intent, this).clearDisposables() + NfcWreatHelper.getInstance(intent, this).clearDisposables() + // 纭繚鍋滄鍔ㄧ敾锛岄伩鍏嶅唴瀛樻硠婕� + binding.nfcProgressWheel.stopSpinning() + } catch (e: Exception) { + e.printStackTrace() + } + } } \ No newline at end of file -- Gitblit v1.8.0